IoAugerEventFile.cc
Go to the documentation of this file.
1 #include <evt/Header.h>
2 #include <evt/Event.h>
3 
4 #include <fevt/FEvent.h>
5 #include <fevt/Eye.h>
6 
7 #include <sevt/SEvent.h>
8 #include <sevt/Header.h>
9 #include <sevt/EventTrigger.h>
10 
11 #include <io/CDASToOfflineEventConverter.h>
12 #include <io/FDasToOfflineEventConverter.h>
13 #include <io/IoAugerEventFile.h>
14 
15 #include <utl/ErrorLogger.h>
16 #include <utl/AugerException.h>
17 #include <utl/config.h>
18 
19 // CDAS classes
20 #include <AugerEvent.h>
21 #include <IoSdData.h>
22 
23 #include <MdEvent.h>
24 #include <mevt/MEvent.h>
25 
26 #include <RadioFileIO.h>
27 #include <revt/REvent.h>
28 #include <revt/Station.h>
29 #include <revt/Channel.h>
30 #include <revt/Header.h>
31 #include <revt/StationTriggerData.h>
32 #include <revt/StationGPSData.h>
33 #include <revt/EventTrigger.h>
34 #include <revt/StationHeader.h>
35 #include <det/Detector.h>
36 #include <rdet/RDetector.h>
37 #include <rdet/Station.h>
38 
39 #include <sstream>
40 #include <cstddef>
41 
42 using namespace fevt;
43 using namespace utl;
44 using namespace revt;
45 
46 
47 namespace io {
48 
49  IoAugerEventFile::IoAugerEventFile(const std::string& filename,
50  const Mode mode, utl::Branch* const b) :
51  VEventFile(filename, mode, b)
52  {
53  IoAugerEventFile::Open(filename, mode, b);
54  }
55 
56 
58  {
59  delete fAugerFile;
60  }
61 
62 
63  void
64  IoAugerEventFile::Open(const std::string& filename, const Mode mode, utl::Branch* const /*b*/)
65  {
66  if (fAugerFile)
67  Close();
68 
69  const AugerFile::Mode ioauger_mode = this->ConvertMode(mode);
70 
71  fAugerFile = new AugerFile;
72 
73  if (fAugerFile->Open(filename.c_str(), ioauger_mode) != AugerFile::eSuccess)
74  throw utl::IOFailureException("Could not open file");
75  }
76 
77 
78  Status
80  {
81  AugerEvent raw;
82  const AugerFile::Status s = fAugerFile->ReadNext(raw);
83 
84  if (s == AugerFile::eEOF)
85  return eEOF;
86 
87  if (s == AugerFile::eFailure)
88  return eFail;
89 
90  // copy the raw AugerEvent to evt::Event
91  if (!event.HasRawEvent())
92  event.MakeRawEvent();
93 
94  event.GetRawEvent() = raw;
95 
96  // place the FDas part
97  for (AugerEvent::EyeIterator eyeIter = raw.EyesBegin(), eyesEnd = raw.EyesEnd();
98  eyeIter != eyesEnd; ++eyeIter)
99  event << *eyeIter;
100 
101  ostringstream id_str;
102  id_str << "auger_" << raw.Id();
103 
104  evt::Header& header = event.GetHeader();
105 
106  // if event contains SD part take its time!
107  // FD times are handled in FDasToOfflineEventConverter
108 
109  if (raw.HasSd()) {
110 
111  const IoSdT3Trigger* const rawTrigger = &raw.Sd().Trigger;
112  const unsigned int second = rawTrigger->Second;
113  const unsigned int microSecond =
114  int(rawTrigger->MicroSecond * microsecond/nanosecond);
115  const TimeStamp currentTime(second, microSecond);
116  header.SetTime(currentTime);
117 
118  if (!event.HasSEvent())
119  event.MakeSEvent();
120 
121  sevt::SEvent& sEvent = event.GetSEvent();
122  sevt::Header& sHeader = sEvent.GetHeader();
123  sHeader.SetId(raw.Sd().Id);
124  sHeader.SetTime(currentTime);
125 
126  if (raw.HasMd()) {
127 
128  const md::Event mdRawEvt = raw.Md();
129  const md::Trigger mdTrg = mdRawEvt.GetTrigger();
130  const unsigned int t3Sec = mdTrg.GetT3Sec();
131  const unsigned int t3Mic = int(mdTrg.GetT3Mic() * utl::microsecond/utl::nanosecond);
132  const TimeStamp mdTime(t3Sec, t3Mic);
133 
134  md::ID mdId = mdTrg.GetId();
135 
136  if (!event.HasMEvent())
137  event.MakeMEvent();
138 
139  mevt::MEvent& mEvent = event.GetMEvent();
140  mevt::Header& mHeader = mEvent.GetHeader();
141  mHeader.SetId(mdId);
142  mHeader.SetTime(mdTime); // by construction, sould be identical to currentTime of SD
143 
144  }
145 
146  }
147 
148  if (raw.HasRd()) {
149  if (!event.HasREvent())
150  event.MakeREvent();
151 
152  revt::REvent& revent = event.GetREvent();
153  revt::Header& rHeader = revent.GetHeader();
154 
155  const int run_id = raw.REvent->getAeraEventRunId();
156  const int event_id = raw.REvent->getAeraEventEventId();
157 
158  rHeader.SetRunNumber(run_id);
159  rHeader.SetId(event_id);
160  //rHeader.SetEventNumber(raw.REvent->getAeraEventRunningEventId());
161  rHeader.SetFileId(raw.REvent->getAeraEventFileId());
162  rHeader.SetNumberOfStations(raw.REvent->getAeraEventLsCount());
163  rHeader.SetEventVersion(raw.REvent->getAeraEventEventVersion());
164 
165  // append rd run and event id to event header
166 #warning JN: this should probably better be done in the CDASToOfflineConverter as for SD, MD, etc.
167  id_str << "__rd_" << run_id << "." << event_id;
168 
169  {
170  const unsigned int ts_s = raw.REvent->getAeraEventSeconds();
171  const unsigned int ts_ns = raw.REvent->getAeraEventNanoSeconds();
172 
173  utl::TimeStamp ts;
174  try {
175  ts.SetGPSTime(ts_s, ts_ns);
176  } catch (OutOfBoundException& /*e*/) {
177  WARNING("Event skipped! TimeStamp was not filled correctly.");
178  return eSkipEvent;
179  }
180 
181  det::Detector::GetInstance().Update(ts);
182  //event.GetHeader().SetTime(ts);
183  revent.GetHeader().SetTime(ts);
184  }
185 
186  if (revent.HasTrigger())
187  WARNING("Warning overwrites Event Trigger information");
188  else
189  revent.MakeTrigger();
190 
191  if (raw.REvent->getAeraEventStatus() == 2) {
192  WARNING("Event skipped! Event does not have an active station.");
193  return eSkipEvent;
194  }
195 
196  int triggersourceIsAevb = 1;
197  int triggersourceIsSelf = 0;
198  int triggersourceIsCalib = 0;
199  int triggersourceIsScint = 0;
200  int triggersourceIsSD = 0;
201  int triggersourceIsGui = 0;
202  int triggersourceIsFD = 0;
203  int triggersourceIsHEAT = 0;
204  int triggersourceIsAERAlet = 0;
205  int triggersourceIsAIRPLANE = 0;
206  int triggersourceIsPeriodic = 0;
207  int triggersourceIsPassThrough = 0;
208 
209  for (int i = 0; i < raw.REvent->getAeraEventLsCount(); ++i) {
210  const auto aStation = raw.REvent->getAeraEventStation(i);
211  if (aStation->getAeraStationTriggerIsAevb() != 1) {
212  // triggersource is only set if not unknown (=0)
213  if (!triggersourceIsSelf)
214  triggersourceIsSelf = aStation->getAeraStationTriggerIsSelf();
215  if (!triggersourceIsCalib)
216  triggersourceIsCalib = aStation->getAeraStationTriggerIsCalibration();
217  if (!triggersourceIsScint)
218  triggersourceIsScint = aStation->getAeraStationTriggerIsScintillator();
219  if (!triggersourceIsSD)
220  triggersourceIsSD = aStation->getAeraStationTriggerIsSD();
221  if (!triggersourceIsGui)
222  triggersourceIsGui = aStation->getAeraStationTriggerIsGUI();
223  if (!triggersourceIsFD)
224  triggersourceIsFD = aStation->getAeraStationTriggerIsFD();
225  if (!triggersourceIsHEAT)
226  triggersourceIsHEAT = aStation->getAeraStationTriggerIsHEAT();
227  if (!triggersourceIsAERAlet)
228  triggersourceIsAERAlet = aStation->getAeraStationTriggerIsAERAlet();
229  if (!triggersourceIsAIRPLANE)
230  triggersourceIsAIRPLANE = aStation->getAeraStationTriggerIsAirplane();
231  if (!triggersourceIsPeriodic)
232  triggersourceIsPeriodic = aStation->getAeraStationTriggerIsPeriodic();
233  if (!triggersourceIsPassThrough)
234  triggersourceIsPassThrough = aStation->getAeraStationTriggerIsPassThrough();
235  revent.GetTrigger().SetBitPattern(aStation->getAeraStationTriggerFlag());
236  //triggersourceIsAevb = 0;
237  //break;
238  }
239  }
240 
241  if (triggersourceIsSelf || triggersourceIsCalib || triggersourceIsScint || triggersourceIsSD ||
242  triggersourceIsGui || triggersourceIsFD || triggersourceIsHEAT || triggersourceIsAERAlet ||
243  triggersourceIsAIRPLANE || triggersourceIsPeriodic || triggersourceIsPassThrough)
244  triggersourceIsAevb = 0;
245 
246  if (triggersourceIsSelf == 1) {
247  revent.GetTrigger().SetSelfTrigger(true);
248  WARNING("Event IsSelf");
249  }
250  if (triggersourceIsCalib == 1) {
251  revent.GetTrigger().SetCalibrationTrigger(true);
252  WARNING("Event IsCalib");
253  }
254  if (triggersourceIsScint == 1) {
255  revent.GetTrigger().SetScintillatorTrigger(true);
256  WARNING("Event IsScint");
257  }
258  if (triggersourceIsSD == 1) {
259  revent.GetTrigger().SetSDTrigger(true);
260  WARNING("Event IsSD");
261  }
262  if (triggersourceIsGui == 1) {
263  revent.GetTrigger().SetGUITrigger(true);
264  WARNING("Event IsGUI");
265  }
266  if (triggersourceIsFD == 1) {
267  revent.GetTrigger().SetFDTrigger(true);
268  WARNING("Event IsFD");
269  }
270  if (triggersourceIsHEAT == 1) {
271  revent.GetTrigger().SetHEATTrigger(true);
272  WARNING("Event IsHEAT");
273  }
274  if (triggersourceIsAERAlet == 1) {
275  revent.GetTrigger().SetAERAletTrigger(true);
276  WARNING("Event IsAERALET");
277  }
278  if (triggersourceIsAIRPLANE == 1) {
279  revent.GetTrigger().SetAIRPLANETrigger(true);
280  WARNING("Event IsAIRPLANE");
281  }
282  if (triggersourceIsPeriodic == 1) {
283  revent.GetTrigger().SetPeriodicTrigger(true);
284  WARNING("Event IsPeriodic");
285  }
286  if (triggersourceIsPassThrough == 1) {
287  revent.GetTrigger().SetPassThroughTrigger(true);
288  WARNING("Event IsPassThrough");
289  }
290  if (triggersourceIsSD == 1 || triggersourceIsGui == 1 || triggersourceIsFD == 1 ||
291  triggersourceIsHEAT == 1 || triggersourceIsAERAlet == 1 || triggersourceIsAIRPLANE == 1 ||
292  triggersourceIsPeriodic == 1 || triggersourceIsPassThrough == 1)
293  revent.GetTrigger().SetExternalTrigger(true);
294  if (triggersourceIsAevb == 1) {
295  WARNING("Event skipped! No known trigger source found.");
296  return eSkipEvent;
297  }
298 
300 
301  ostringstream stationname;
302  for (int i = 0; i < raw.REvent->getAeraEventLsCount(); ++i) { //LS station loop
303 
304  const auto aStation = raw.REvent->getAeraEventStation(i);
305 
306  const int station_id = aStation->getAeraStationLsID();
307  if (aStation->getAeraStationTriggerIsAevb() == 1 ||
308  aStation->getAeraStationTracelength() == 0)
309  continue; // skip station if aevb Event or no channel data
310 
311  stationname.str("");
312 
313  if (station_id > 200 && station_id < 210)
314  stationname << "M" << (station_id - 200);
315  else
316  stationname << "AERA_" << station_id;
317  try {
318  if (revent.HasStation(stationname.str()))
319  WARNING("Overwriting station information");
320  else
321  revent.MakeStation(stationname.str());
322 
323  revt::Station& station = revent.GetStationByName(stationname.str());
324  // Get the RDetector::Station from revt::Station
325  const rdet::Station& detstation = det::Detector::GetInstance().GetRDetector().GetStation(station);
326  if (station.HasTriggerData())
327  WARNING("Overwriting station trigger information");
328  else
329  station.MakeTriggerData();
330 
331  triggersourceIsSelf = aStation->getAeraStationTriggerIsSelf();
332  triggersourceIsCalib = aStation->getAeraStationTriggerIsCalibration();
333  triggersourceIsScint = aStation->getAeraStationTriggerIsScintillator();
334  triggersourceIsSD = aStation->getAeraStationTriggerIsSD();
335  triggersourceIsGui = aStation->getAeraStationTriggerIsGUI();
336  triggersourceIsFD = aStation->getAeraStationTriggerIsFD();
337  triggersourceIsHEAT = aStation->getAeraStationTriggerIsHEAT();
338  triggersourceIsAERAlet = aStation->getAeraStationTriggerIsAERAlet();
339  triggersourceIsAIRPLANE = aStation->getAeraStationTriggerIsAirplane();
340  triggersourceIsPeriodic = aStation->getAeraStationTriggerIsPeriodic();
341  triggersourceIsPassThrough = aStation->getAeraStationTriggerIsPassThrough();
342  triggersourceIsAevb = aStation->getAeraStationTriggerIsAevb();
343 
344  if (triggersourceIsSelf)
345  station.GetTriggerData().SetTriggerSource(StationTriggerData::eSelf);
346  else if (triggersourceIsCalib)
347  station.GetTriggerData().SetTriggerSource(StationTriggerData::eCalib);
348  else if (triggersourceIsScint)
349  station.GetTriggerData().SetTriggerSource(StationTriggerData::eScint);
350  else if (triggersourceIsSD)
352  else if (triggersourceIsGui)
353  station.GetTriggerData().SetTriggerSource(StationTriggerData::eGUI);
354  else if (triggersourceIsFD)
356  else if (triggersourceIsHEAT)
357  station.GetTriggerData().SetTriggerSource(StationTriggerData::eHEAT);
358  else if (triggersourceIsAERAlet)
359  station.GetTriggerData().SetTriggerSource(StationTriggerData::eAERAlet);
360  else if (triggersourceIsAIRPLANE)
361  station.GetTriggerData().SetTriggerSource(StationTriggerData::eAIRPLANE);
362  else if (triggersourceIsPeriodic)
364  else if (triggersourceIsPassThrough)
365  station.GetTriggerData().SetTriggerSource(StationTriggerData::ePassThrough);
366  else if (triggersourceIsSD || triggersourceIsGui || triggersourceIsFD || triggersourceIsHEAT ||
367  triggersourceIsAERAlet || triggersourceIsAIRPLANE || triggersourceIsPeriodic ||
368  triggersourceIsPassThrough)
369  station.GetTriggerData().SetTriggerSource(StationTriggerData::eExternal);
370  else if (triggersourceIsAevb)
371  WARNING("Trigger source unknown on station level.");
372  station.GetTriggerData().SetOffset(aStation->getAeraStationTriggerPos());
373  if (station.HasGPSData())
374  WARNING("Overwriting station GPS information");
375  else
376  station.MakeGPSData();
377  StationGPSData& gps = station.GetGPSData();
378 
379  if (station.HasStationHeader())
380  WARNING("Overwriting station header");
381  else
382  station.MakeStationHeader();
383  if (aStation->getAeraStationHWType() == 1)
384  station.GetStationHeader().SetHardwareType(StationHeader::eNL);
385  else if (aStation->getAeraStationHWType() == 2)
386  station.GetStationHeader().SetHardwareType(StationHeader::eFR);
387  else if (aStation->getAeraStationHWType() == 3)
388  station.GetStationHeader().SetHardwareType(StationHeader::eDE);
389  else {
390  ostringstream msg;
391  msg << " Unknown Hardware type :: getAeraEvbHardwareType() = "
392  << aStation->getAeraStationHWType() << "\n"
393  " Skip to next event";
394  ERROR(msg);
395  break; // skip to next event -> break and not continue?
396  }
397  station.GetStationHeader().SetHardwareVersion(aStation->getAeraStationHWVersion());
398 
399  const double samplingfreq = aStation->getAeraStationSamplingFreq() * utl::megahertz;
400  utl::TimeStamp stationts;
401  {
402  const unsigned int ts_s = aStation->getAeraStationSeconds();
403  try {
404  stationts.SetGPSTime(ts_s, aStation->getAeraStationNanoseconds());
405  gps.SetSecond(ts_s); // ? Why was ts_gps_s
406  // corrected from what ?
407  gps.SetCorrectedNanosecond(aStation->getAeraStationNanoseconds());
408  } catch (utl::OutOfBoundException& e) {
409  WARNING("Event skipped! TimeStamp was not filled correctly.");
410  return eSkipEvent;
411  }
412  }
413  double pretrigtime = 0;
414 
415  if (aStation->getAeraStationHWType() == 1) {
416  if ((aStation->getAeraStationHWVersion() < 7 &&
417  aStation->getAeraStationHWVersion() > 0) ||
418  (raw.REvent->getAeraEventRunId() > 200000 && raw.REvent->getAeraEventRunId() < 200300)) { // New NL data
419  const unsigned int s = aStation->getAeraStationMessagePreTriggerWindow();
420  const unsigned int t = aStation->getAeraStationMessageCoincidenceWindow();
421  pretrigtime = (s + t) / samplingfreq;
422  } else if (aStation->getAeraStationHWVersion() >= 7) {
423  union {
424  unsigned short int pre;
425  unsigned char uc[2];
426  };
427  uc[0] = aStation->getAeraStationMessageV2PPSWindows(0);
428  uc[1] = aStation->getAeraStationMessageV2PPSWindows(1);
429  const unsigned int coinc = aStation->getAeraStationMessageV2PPSControl(6);
430  pretrigtime = (pre + coinc) / samplingfreq;
431  }
432  } else
433  pretrigtime = aStation->getAeraStationTriggerPos() / samplingfreq;
434 
435  utl::TimeInterval pretrig(pretrigtime);
436  try {
437  station.SetRawTraceStartTime(stationts - pretrig);
438  } catch (utl::OutOfBoundException& e) {
439  WARNING("Event skipped! TimeStamp was not filled correctly.");
440  return eSkipEvent;
441  }
442 
443  // read temperature from additional station info, available for NL stations from LS version 3 (last 4 chars of additional info)
444  if (aStation->getAeraStationHWType() == 1 && aStation->getAeraStationVersion() >= 3) {
445  union {
446  unsigned char uc[4];
447  float addTemp;
448  };
449  for (int k = 36; k < 36+4; ++k)
450  uc[k - 36] = aStation->getAeraStationMessageV2PPSGPS(k);
451  station.SetHWTemperature(addTemp);
452  } else {
453  const float addTempInt = aStation->getAeraStationGerTemperatureInt();
454  const float addTempExt = aStation->getAeraStationGerTemperatureExt();
455  station.SetHWTemperatureInt(addTempInt + 273.15);
456  station.SetHWTemperatureExt(addTempExt + 273.15);
457  }
458 
460  const int numberofsamples = aStation->getAeraStationTracelength();
461 
462  unsigned int thresh = 0;
463  ostringstream info;
464  for (int ch_id = 1; ch_id <= detstation.GetNChannels(); ++ch_id) {
465  info.str("");
466  revt::Channel& chan = station.GetChannel(ch_id);
467  //If Channel is not present in data, it will be set as inactive;
468  if ((aStation->getAeraStationChannelMask() & (1 << (ch_id-1))) == 0) {
469  chan.SetNotActive();
470  continue;
471  }
472  chan.SetActive();
473  revt::ChannelADCTimeSeries& thistrace = chan.GetChannelADCTimeSeries(); // read & write mode
474  if (aStation->getAeraStationHWType() == 3 || aStation->getAeraStationHWType() == 1) {
475  thistrace.SetBinning(1 / samplingfreq);
476 
477  if (aStation->getAeraStationTracelength() == 0) {
478  info.str("");
479  info << " No data in channel: " << ch_id << ". "
480  " Channel will be marked as not active.";
481  WARNING(info);
482  chan.SetNotActive();
483  continue;
484  }
485  for (int ii = 0; ii < numberofsamples; ++ii)
486  thistrace.PushBack(aStation->getAeraStationADC(ch_id-1)->GetADCValues(ii));
487  } else {
488  info.str("");
489  info << "Electronic readout is not implemented. Electronic type is "
490  << aStation->getAeraStationHWType() << ". "
491  ". Channel is set to not active\n";
492  chan.SetNotActive();
493  WARNING(info);
494  }
495  chan.SetNyquistZone(1);
496 
497 //#warning SJ: if statement is workaround to avoid needless output of aevread for DE data, should be fixed in next version
498  if (aStation->getAeraStationHWType() == 1) {
499  if (((aStation->getAeraStationHWVersion() < 7) &&
500  (aStation->getAeraStationHWVersion() > 0)) ||
501  ((raw.REvent->getAeraEventRunId() > 200000) && (raw.REvent->getAeraEventRunId() < 200300 )) ) { // New NL data
502  if (ch_id == 1)
503  thresh = aStation->getAeraStationMessageSignalThresholdCH0();
504  if (ch_id == 2)
505  thresh = aStation->getAeraStationMessageSignalThresholdCH1();
506  if (ch_id == 3)
507  thresh = aStation->getAeraStationMessageSignalThresholdCH2();
508  if (ch_id == 4)
509  thresh = aStation->getAeraStationMessageSignalThresholdCH3();
510  // 0xFFFF is the Error code returned by the library in case no threshold is found
511  if (thresh != 0xFFFF)
512  chan.SetSignalThreshold(thresh);
513  if (ch_id == 1)
514  thresh = aStation->getAeraStationMessageNoiseThresholdCH0();
515  if (ch_id == 2)
516  thresh = aStation->getAeraStationMessageNoiseThresholdCH1();
517  if (ch_id == 3)
518  thresh = aStation->getAeraStationMessageNoiseThresholdCH2();
519  if (ch_id == 4)
520  thresh = aStation->getAeraStationMessageNoiseThresholdCH3();
521  if (thresh != 0xFFFF)
522  chan.SetNoiseThreshold(thresh);
523  } else if (aStation->getAeraStationHWVersion() >= 7) {
524  if (ch_id == 1)
525  thresh = aStation->getAeraStationMessageV2Threshold1CH1();
526  if (ch_id == 2)
527  thresh = aStation->getAeraStationMessageV2Threshold1CH2();
528  if (ch_id == 3)
529  thresh = aStation->getAeraStationMessageV2Threshold1CH3();
530  if (ch_id == 4)
531  thresh = aStation->getAeraStationMessageV2Threshold1CH4();
532  // 0xFFFF is the Error code returned by the library in case no threshold is found
533  if (thresh != 0xFFFF)
534  chan.SetSignalThreshold(thresh);
535  if (ch_id == 1)
536  thresh = aStation->getAeraStationMessageV2Threshold2CH1();
537  if (ch_id == 2)
538  thresh = aStation->getAeraStationMessageV2Threshold2CH2();
539  if (ch_id == 3)
540  thresh = aStation->getAeraStationMessageV2Threshold2CH3();
541  if (ch_id == 4)
542  thresh = aStation->getAeraStationMessageV2Threshold2CH4();
543  if (thresh != 0xFFFF)
544  chan.SetNoiseThreshold(thresh);
545  }
546  } else {
547  chan.SetSignalThreshold(thresh);
548  chan.SetNoiseThreshold(thresh);
549  }
550  } //for (channel) ...
552  ERROR(e.what());
553  }
554  } // for (station)
555  }
556 
557  header.SetId(id_str.str());
558 
559  return eSuccess;
560  }
561 
562 
563  void
565  {
566  if (fMode == eRead) {
567  const string error = "Attempted to write into read-only IoAuger event file.";
568  ERROR(error);
569  throw utl::IOFailureException(error);
570  return;
571  }
572 
573  if (fAugerFile) {
574 
575  if (!event.HasRawEvent()) {
576  INFO("Non-existent RawEvent, unable to stream to file.");
577  return;
578  }
579 
580  bool hasFD = false;
581  if (event.HasFEvent()) {
582  const FEvent& fdEvent = event.GetFEvent();
583  for (FEvent::ConstEyeIterator eIt = fdEvent.EyesBegin(ComponentSelector::eHasData),
584  eyesEnd = fdEvent.EyesEnd(ComponentSelector::eHasData); eIt != eyesEnd; ++eIt)
585  if (eIt->HasTriggerData()) {
586  hasFD = true;
587  break;
588  }
589  }
590 
591  // skip non-triggered SD/Hy events ! But take FD triggered events!
592  if (event.HasSEvent() && !hasFD) {
593 
594  const sevt::SEvent& sEvent = event.GetSEvent();
595 
596  if (!sEvent.HasTrigger()) {
597  INFO("Non-existent sd-trigger, unable to stream to file.");
598  return;
599  }
600 
601  if (sEvent.GetTrigger().GetAlgorithm() == "None") {
602  INFO("No trigger, skipping event in IoAuger. "
603  "Use Offline-native for streaming.");
604  return;
605  }
606 
607  }
608 
609  const AugerEvent& raw = event.GetRawEvent();
610 
611  fAugerFile->Write(const_cast<AugerEvent&>(raw));
612 
613  }
614  }
615 
616 
617  void
619  {
620  if (fAugerFile)
621  fAugerFile->Close();
622 
623  delete fAugerFile;
624  fAugerFile = nullptr;
625  }
626 
627 
630  {
631  switch (mode) {
632  case io::eRead: return AugerFile::eRead;
633  case io::eWrite: return AugerFile::eWrite;
634  case io::eNew: return AugerFile::eWrite;
635  case io::eAppend: return AugerFile::eWrite;
636  default: return AugerFile::eWrite;
637  }
638  }
639 
640 
641  Status
642  IoAugerEventFile::FindEvent(const unsigned int)
643  {
644  return eFail;
645  }
646 
647 
648  Status
649  IoAugerEventFile::GotoPosition(const unsigned int)
650  {
651  return eFail;
652  }
653 
654 
655  int
657  {
658 #ifdef IOAUGER_V0R6
659  return int(fAugerFile->NumberOfEvents());
660 #else
661  return 0;
662 #endif
663  }
664 
665 }
bool HasTrigger() const
check whether the central trigger object exists
Definition: REvent.h:236
AugerFile::Mode ConvertMode(const Mode m)
void SetAERAletTrigger(const bool trig)
Set if Event comes from AERALET trigger.
int raw
Definition: dump1090.h:270
void SetHardwareType(const HardwareType t)
Set type of hardware used (should be provided by the DAQ)
Definition: StationHeader.h:28
bool HasMEvent() const
void SetId(const int id)
Definition: MEvent/Header.h:28
StationTriggerData & GetTriggerData()
Get Trigger data for the station.
Detector description interface for Station-related data.
bool HasTriggerData() const
Check whether trigger data object exists.
boost::filter_iterator< ComponentSelector, ConstAllEyeIterator > ConstEyeIterator
Definition: FEvent.h:56
void SetPeriodicTrigger(const bool trig)
Set if Event comes from PERIODIC trigger.
void SetOffset(const int offset)
Set postTrigger time in bins.
Station & GetStationByName(const std::string &name)
retrieve station by name, throw utl::NonExistentComponentException if n.a.
Definition: REvent.h:194
bool HasFEvent() const
Interface class to access to the Radio part of an event.
Definition: REvent.h:42
void SetTime(const utl::TimeStamp &t)
Definition: Event/Header.h:38
Interface class to access to the SD part of an event.
Definition: SEvent.h:39
void Write(const evt::Event &event) override
Open file for write, fail if exists.
Definition: IoCodes.h:19
void SetTime(const utl::TimeStamp &time)
Definition: SEvent/Header.h:22
EventTrigger & GetTrigger()
Get the object with central trigger data, throw if n.a.
Definition: REvent.h:229
EventTrigger & GetTrigger()
Get the object with central trigger data, throw if n.a.
Definition: SEvent.h:148
EyeIterator EyesEnd(const ComponentSelector::Status status)
Definition: FEvent.h:66
void SetCorrectedNanosecond(const unsigned int &ns)
Set corrected trigger nanosecond.
Mode
Available open modes.
Definition: IoCodes.h:16
void SetBitPattern(const uint16_t BitPattern)
Set the Trigger Bit Pattern.
void Open(const std::string &filename, const Mode mode=eRead, utl::Branch *const b=nullptr) override
void SetGUITrigger(const bool trig)
Set if Event comes from GUI trigger.
#define INFO(message)
Macro for logging informational messages.
Definition: ErrorLogger.h:161
Base class for exceptions trying to access non-existing components.
Header file holding the SD Event Trigger class definition.
Definition: SEvent/Header.h:16
Read Only access.
Definition: IoCodes.h:18
bool HasREvent() const
void SetEventVersion(const int ver)
Definition: REvent/Header.h:33
void SetAIRPLANETrigger(const bool trig)
Set if Event comes from AIRPLANE trigger.
void SetHWTemperatureExt(const double temp)
void SetNoiseThreshold(const unsigned int thresh)
From DAQ.
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
void SetCalibrationTrigger(const bool trig)
Set if Event comes from calibration trigger.
void SetTime(const utl::TimeStamp &time)
Version of the AERAEvent used by the DAQ software.
Definition: REvent/Header.h:27
Exception for reporting variable out of valid range.
void MakeGPSData()
Make GPS data object.
Base class to report exceptions in IO.
void MakeTriggerData()
Make trigger data object.
void SetId(const std::string &id)
Set the event identifier.
Definition: Event/Header.h:36
void SetExternalTrigger(const bool trig)
Set if Event was externally triggered.
void SetHardwareVersion(const int v)
Set version of hardware is used (should be provided by the DAQ)
Definition: StationHeader.h:31
void SetSelfTrigger(const bool trig)
Set if Event was selftriggered.
int GetNEvents() override
void SetHEATTrigger(const bool trig)
Set if Event comes from HEAT trigger.
bool HasStationHeader() const
Check whether StationHeader exists.
Class representing a document branch.
Definition: Branch.h:107
Status
Return code for seek operation.
Definition: IoCodes.h:24
class to hold data at the radio Station level.
Status FindEvent(const unsigned int n) override
seek Event id set cursor there
constexpr double s
Definition: AugerUnits.h:163
void SetRawTraceStartTime(const utl::TimeStamp &time)
Set absolute start time of the station-level trace as originally provided in raw data, for reconstructions use eTraceStartTime in StationRecData!
void SetGPSTime(const unsigned long sec, const double nsec=0)
Set GPS second and (optionally) nanosecond.
Definition: TimeStamp.h:120
void MakeStationHeader()
Make Station Header object.
void MakeTrigger()
Create the central trigger object.
Definition: REvent.cc:174
constexpr double nanosecond
Definition: AugerUnits.h:143
Header & GetHeader()
access to REvent Header
Definition: REvent.h:239
const double second
Definition: GalacticUnits.h:32
bool HasTrigger() const
check whether the central trigger object exists
Definition: SEvent.h:153
int GetNChannels() const
Number of channels in station.
EyeIterator EyesBegin(const ComponentSelector::Status status)
Definition: FEvent.h:58
constexpr double megahertz
Definition: AugerUnits.h:155
StationGPSData & GetGPSData()
Get GPS data for the station.
Status GotoPosition(const unsigned int n) override
goto by position in the file
#define WARNING(message)
Macro for logging warning messages.
Definition: ErrorLogger.h:163
Top of Fluorescence Detector event hierarchy.
Definition: FEvent.h:33
void SetPassThroughTrigger(const bool trig)
Set if Event comes from PASSTHROUGH trigger.
void SetSDTrigger(const bool trig)
Set if Event comes from SD trigger.
void SetFileId(const int id)
Definition: REvent/Header.h:30
void SetBinning(const double binning)
Definition: Trace.h:139
Channel & GetChannel(const int pmtId)
Retrieve a Channel by Id.
void SetSecond(const unsigned int &sec)
Set end of traces raw time.
A TimeInterval is used to represent time elapsed between two events.
Definition: TimeInterval.h:43
void SetId(const int id)
Definition: SEvent/Header.h:23
void SetSignalThreshold(const unsigned int thresh)
friend class REvent
Definition: REvent/Header.h:47
Header file holding the RD Event Trigger class definition (based on SD)
Definition: REvent/Header.h:14
void SetNumberOfStations(const int nstat)
Definition: REvent/Header.h:31
Header information for muon events.
Definition: MEvent/Header.h:20
void SetId(const int id)
Definition: REvent/Header.h:28
ChannelADCTimeSeries & GetChannelADCTimeSeries()
Get Channel ADC trace (write access, only use this if you intend to change the data) ...
Class that holds the data associated to an individual radio channel.
Overwrite if exist and open for write.
Definition: IoCodes.h:20
bool HasRawEvent() const
sevt::Header & GetHeader()
Definition: SEvent.h:155
std::string GetAlgorithm() const
Get algorithm of the trigger.
void SetRunNumber(const int run)
Definition: REvent/Header.h:32
void SetScintillatorTrigger(const bool trig)
Set if Event comes from scintillator trigger.
bool HasStation(const int stationId) const
Check whether station exists.
Definition: REvent.cc:132
StationHeader & GetStationHeader()
Get the Station Header.
char * filename
Definition: dump1090.h:266
Header & GetHeader()
Definition: MEvent.h:65
void SetTime(const utl::TimeStamp &time)
Definition: MEvent/Header.h:26
void SetNyquistZone(const unsigned int zone)
Set the Nyquist zone.
void PushBack(const T &value)
Insert a single value at the end.
Definition: Trace.h:119
void SetNotActive()
#define ERROR(message)
Macro for logging error messages.
Definition: ErrorLogger.h:165
bool HasGPSData() const
Check whether GPS data object exists.
constexpr double microsecond
Definition: AugerUnits.h:147
void MakeStation(const int stationId)
make a station with specifying Id, throw if invalid stationId
Definition: REvent.cc:94
Root of the Muon event hierarchy.
Definition: MEvent.h:25
bool HasSEvent() const
void SetHWTemperatureInt(const double temp)
Status Read(evt::Event &event) override
read current event advance cursor by 1
void SetActive()
Active means that it is used in reconstruction. By default this is true after read-in, but can be deactivated later.
void SetTriggerSource(const TriggerSource TrigSource)
Set the Trigger Source of the station, i.e. if it triggered itself or was triggered by the central st...
void SetHWTemperature(const double temp)
Global event header.
Definition: Event/Header.h:27
void SetFDTrigger(const bool trig)
Set if Event comes from FD trigger.
const char * what() const
std::exception will print this on crash

, generated on Tue Sep 26 2023.