3 #include <fwk/CentralConfig.h>
5 #include <utl/Reader.h>
6 #include <utl/ErrorLogger.h>
7 #include <utl/TimeStamp.h>
8 #include <utl/TimeInterval.h>
9 #include <utl/TraceAlgorithm.h>
11 #include <io/EventFile.h>
12 #include <io/EventFileChain.h>
13 #include <io/CDASToOfflineEventConverter.h>
15 #include <AugerEvent.h>
16 #include <evt/Event.h>
17 #include <evt/Header.h>
18 #include <sevt/SEvent.h>
19 #include <sevt/Header.h>
20 #include <sevt/EventTrigger.h>
21 #include <revt/REvent.h>
22 #include <revt/EventTrigger.h>
23 #include <revt/Header.h>
24 #include <revt/StationTriggerData.h>
25 #include <revt/StationHeader.h>
26 #include <revt/StationGPSData.h>
27 #include <revt/Channel.h>
28 #include <revt/Station.h>
30 #include <rdet/RDetector.h>
31 #include <rdet/Station.h>
33 #include <fevt/FEvent.h>
34 #include <fevt/Header.h>
55 RdEventMerger::~RdEventMerger()
69 INFO(
"RdEventMerger::Init()");
87 INFO(
"<SdBufferIncrement> must be smaller than <SdBufferSize>");
94 if (fileType ==
"Offline")
96 else if (fileType ==
"FDAS")
98 else if (fileType ==
"CDAS")
100 else if (fileType ==
"CORSIKA")
102 else if (fileType ==
"IoAuger")
104 else if (fileType ==
"RadioAERA")
106 else if (fileType ==
"RadioAERAroot")
110 std::ostringstream info;
111 info <<
"Creating new merged hybrid output file: " <<
fOffFilename;
118 info <<
"Opening input file(s): ";
120 info << *fIt <<
" " ;
138 REvent& rEvent =
event.GetREvent();
139 stringstream message;
156 INFO(
"#### End of input files reached, no more filling of buffer ####");
202 map<const unsigned int,evt::Event>::iterator firstInput =
fInputBuffer.begin();
203 map<const unsigned int,evt::Event>::iterator lastInput =
fInputBuffer.end();
204 map<const unsigned int,evt::Event>::iterator lateInput =
fInputBuffer.begin();
205 map<const unsigned int,evt::Event>::iterator It =
fInputBuffer.begin();
206 map<const unsigned int,evt::Event>::iterator eraseInput =
fInputBuffer.begin();
218 firstTime=(firstInput->second).GetREvent().GetHeader().GetTime();
219 lateTime=(lateInput->second).GetREvent().GetHeader().GetTime();
220 lastTime=(lastInput->second).GetREvent().GetHeader().GetTime();
223 firstTime=(firstInput->second).GetSEvent().GetTrigger().GetTime();
224 lateTime=(lateInput->second).GetSEvent().GetTrigger().GetTime();
225 lastTime=(lastInput->second).GetSEvent().GetTrigger().GetTime();
230 INFO(
"#### Radio event before input events, go to next event ####");
237 else InputTime=(It->second).GetSEvent().GetTrigger().GetTime()+
fOffset;
238 DeltaT=RdTime-InputTime;
240 INFO(
"#### Coincidence found in main part of buffer! ####");
242 int StationNumberadd = (It->second).GetREvent().GetHeader().GetNumberOfStations();
243 event.GetREvent().GetHeader().SetNumberOfStations(
max(StationNumberadd,StationNumber));
245 sIt != (It->second).GetREvent().StationsEnd(); ++sIt) {
247 int station_id = station.
GetId();
249 event.GetREvent().MakeStation(station_id);
250 event.GetREvent().GetStation(station_id)=(It->second).GetREvent().GetStation(station_id);
252 utl::TimeStamp TraceStart=
event.GetREvent().GetStation(station_id).GetRawTraceStartTime();
254 event.GetREvent().GetStation(station_id).SetRawTraceStartTime(TraceStart);
259 event.GetSEvent() = (It->second).GetSEvent();
260 if ((It->second).HasFEvent()) {
262 event.GetFEvent() = (It->second).GetFEvent();
263 event.MakeRawEvent();
264 event.GetRawEvent() = (It->second).GetRawEvent();
271 INFO(
"#### Coincidence written ####");
279 message <<
"#### Radio event in main part of input buffer, " << CoinCount <<
" coincidence(s) found ####" << endl
280 <<
"#### Leave buffer the same and move on to next radio event ####";
286 else if (RdTime <= lastTime) {
290 else InputTime=(It->second).GetSEvent().GetTrigger().GetTime()+
fOffset;
291 DeltaT=RdTime-InputTime;
293 INFO(
"#### Coincidence found in advanced buffer! ####");
295 int StationNumberadd = (It->second).GetREvent().GetHeader().GetNumberOfStations();
296 event.GetREvent().GetHeader().SetNumberOfStations(
max(StationNumberadd,StationNumber));
298 sIt != (It->second).GetREvent().StationsEnd(); ++sIt) {
300 int station_id = station.
GetId();
302 event.GetREvent().MakeStation(station_id);
303 event.GetREvent().GetStation(station_id)=(It->second).GetREvent().GetStation(station_id);
305 utl::TimeStamp TraceStart=
event.GetREvent().GetStation(station_id).GetRawTraceStartTime();
307 event.GetREvent().GetStation(station_id).SetRawTraceStartTime(TraceStart);
312 event.GetSEvent() = (It->second).GetSEvent();
313 if ((It->second).HasFEvent()) {
315 event.GetFEvent() = (It->second).GetFEvent();
316 event.MakeRawEvent();
317 event.GetRawEvent() = (It->second).GetRawEvent();
324 INFO(
"#### Coincidence written ####");
330 message <<
"#### Radio event in advanced part of input buffer, " << CoinCount <<
" coincidence(s) found ####" << endl
331 <<
"#### Remove first " <<
fBufferInc <<
" elements from buffer and move on to next radio event ####";
357 outfile <<
"#############################################################################" << endl
358 <<
"Coincidence found for radio event with ID "
359 << rHeader.
GetId() << endl
361 <<
"Timestamp: " << rHeader.
GetTime() << endl
362 <<
"#############################################################################" << endl << endl;
368 outfile <<
"Radio station found with ID " << station.
GetId() << endl
374 const SEvent& sevent =
event.GetSEvent();
378 <<
"Triggered # of stations: " << SevtTrigger.
GetNStations() << endl
379 <<
"Trigger sender: " << SevtTrigger.
GetSender() << endl
387 RdEventMerger::Finish()
Branch GetTopBranch() const
Status Read(evt::Event &event)
read current event and advance cursor by 1
Report success to RunController.
evt::Header & GetHeader()
int GetNumberOfStations() const
Get total number of stations in the event.
Interface class to access to the Radio part of an event.
Interface class to access to the SD part of an event.
io::Status EndOfInputFiles
std::vector< std::string > fInputFilenames
Open file for write, fail if exists.
EventTrigger & GetTrigger()
Get the object with central trigger data, throw if n.a.
#define INFO(message)
Macro for logging informational messages.
StationIterator StationsEnd()
StationIterator StationsBegin()
void Init()
Initialise the registry.
vector< t2list > out
output of the algorithm: a list of clusters
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
boost::filter_iterator< StationFilter, AllStationIterator > StationIterator
Iterator over all (non-exculded) stations.
AugerEvent & GetRawEvent()
A TimeStamp holds GPS second and nanosecond for some event.
Offline native file format.
air shower radio simulations generated with EVA
Class representing a document branch.
Break current loop. It works for nested loops too!
class to hold data at the radio Station level.
Interface class to access the Event Trigger (T3)
double abs(const SVector< n, T > &v)
Header & GetHeader()
access to REvent Header
int GetNumberOfStations() const
Get total number of stations in the event.
utl::TimeStamp GetRawTraceStartTime() const
Get absolute start time of the station-level trace as originally provided in raw data, for reconstructions use eTraceStartTime in StationRecData!
void GetData(bool &b) const
Overloads of the GetData member template function.
int GetId() const
Get the station Id.
io::EventFileChain * fInputFiles
void ExamineEvent(evt::Event &event)
unsigned int GetNStations() const
Get number of stations in the trigger.
A collection of EventFile.
ResultFlag
Flag returned by module methods to the RunController.
Interface to file I/O objects.
unsigned long GetGPSSecond() const
GPS second.
Report failure to RunController, causing RunController to terminate execution.
sevt::Header & GetHeader()
std::string GetAlgorithm() const
Get algorithm of the trigger.
StationHeader & GetStationHeader()
Get the Station Header.
std::string GetSender() const
Get sender of the trigger.
io::EventFile * fOfflineFile
std::map< const unsigned int, evt::Event > fInputBuffer
void Write(const evt::Event &event)