3 #include <fwk/CentralConfig.h>
4 #include <utl/ReadStream.h>
5 #include <utl/AugerUnits.h>
8 #include <revt/REvent.h>
9 #include <revt/StationRecData.h>
11 #include <rdet/RDetector.h>
12 #include <rdet/Channel.h>
25 namespace RdStationTimingCalibratorOG {
49 topB.
GetChild(
"TimingOffset_Butterfly_DE").
GetData(fTimingOffset_Butterfly_DE);
50 topB.
GetChild(
"TimingOffset_Butterfly_NL").
GetData(fTimingOffset_Butterfly_NL);
55 topB.
GetChild(
"TimingUncertainty_Butterfly_DE").
GetData(fTimingUncertainty_Butterfly_DE);
56 topB.
GetChild(
"TimingUncertainty_Butterfly_NL").
GetData(fTimingUncertainty_Butterfly_NL);
57 topB.
GetChild(
"TimingUncertainty_LPDA_DE").
GetData(fTimingUncertainty_LPDA_DE);
58 topB.
GetChild(
"TimingUncertainty_LPDA_NL").
GetData(fTimingUncertainty_LPDA_NL);
61 const string rdStationTimeOffsetsFile =
62 topB.
GetChild(
"RdStationTimeOffsetsFile").
Get<
string>();
64 ifstream posFile(rdStationTimeOffsetsFile.c_str());
65 if (!posFile.is_open()) {
67 err <<
"Cannot open time offsets file '" << rdStationTimeOffsetsFile <<
"'!";
72 vector<OffsetEntry> offsets;
77 for (
const auto& entry : offsets) {
78 const unsigned int sId = entry.stationId;
82 if (fOffsets.find(sId) != fOffsets.end()) {
84 err <<
"Duplicate entry for station id " << sId <<
" found in the offsets file!";
90 fOffsets.emplace(entry.stationId, make_pair(entry.offset *
ns, entry.uncertainty *
ns));
94 warn <<
"Station id " << sId <<
" has a time offset in the corrections file but is not found in the RDetector!";
104 RdStationTimingCalibrator::Run(
Event& event)
109 REvent& rEvent =
event.GetREvent();
111 for (
auto& station : rEvent.StationsRange()) {
113 if (!station.HasRecData())
120 err <<
"Trying to correct trace start time for " <<
121 "station id " << station.GetId() <<
", but no trace start time available in ParameterStorage!";
127 const auto& offsetIt = fOffsets.find(station.GetId());
129 const rdet::RDetector& rDetector = det::Detector::GetInstance().GetRDetector();
134 double stationOffset = 0;
135 double stationUncertainty = 0;
137 if (offsetIt == fOffsets.end()) {
138 if (antennaTypeName.find(
"Butterfly") != string::npos && bitDepth == 12){
139 stationOffset = fTimingOffset_Butterfly_DE;
140 stationUncertainty = fTimingUncertainty_Butterfly_DE;
141 }
else if (antennaTypeName.find(
"Butterfly") != string::npos && bitDepth == 14){
142 stationOffset = fTimingOffset_Butterfly_NL;
143 stationUncertainty = fTimingUncertainty_Butterfly_NL;
144 }
else if (antennaTypeName.find(
"SmallBlackSpider") != string::npos && bitDepth == 12){
145 stationOffset = fTimingOffset_LPDA_DE;
146 stationUncertainty = fTimingUncertainty_LPDA_DE;
147 }
else if (antennaTypeName.find(
"SmallBlackSpider") != string::npos && bitDepth == 14){
148 stationOffset = fTimingOffset_LPDA_NL;
149 stationUncertainty = fTimingUncertainty_LPDA_NL;
151 stationOffset = fTimingOffset_RD;
152 stationUncertainty = fTimingUncertainty_RD;
155 if (station.IsCandidate()) {
158 ostringstream warning;
159 warning <<
"No correction value found for station id=" << station.GetId()
160 <<
" and no correction value found for hardware type (" << antennaTypeName <<
"," << bitDepth <<
" bits)"
161 <<
". This might cause inconsistent analysis results!";
167 stationOffset = offsetIt->second.first;
168 stationUncertainty = offsetIt->second.second;
174 recData.
SetParameter(eTraceStartTime, oldTime + offset,
false);
177 recData.
SetParameter(eTraceStartTimeCorrectionByTimeCalibration, offset);
200 RdStationTimingCalibrator::Finish()
int GetBitDepth() const
Get number of bits of ADC.
void operator>>(const Event &theEvent, IoSdEvent &rawSEvent)
Branch GetTopBranch() const
Class to access station level reconstructed data.
void SetParameterError(Parameter i, double value, bool lock=true)
Interface class to access to the Radio part of an event.
bool is(const double a, const double b)
bool HasParameterError(const Parameter i1) const
void Init()
Initialise the registry.
Base class for exceptions trying to access non-existing components.
Detector description interface for Channel-related data.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
Detector description interface for RDetector-related data.
Class representing a document branch.
int GetRdSdStationIdLink() const
Get Rd - Sd Station Id link.
#define WARNING(message)
Macro for logging warning messages.
void GetData(bool &b) const
Overloads of the GetData member template function.
double GetParameter(const Parameter i) const
A TimeInterval is used to represent time elapsed between two events.
ResultFlag
Flag returned by module methods to the RunController.
bool HasParameter(const Parameter i) const
const std::string & GetAntennaTypeName() const
Get description of Antenna-Type.
void SetParameter(Parameter i, double value, bool lock=true)
void GetLines(std::vector< T > &v, const bool filterComments=true, const bool trim=false)
#define ERROR(message)
Macro for logging error messages.
const Station & GetStation(const int stationId) const
Get station by Station Id.