1 #include <io/CDASEventFile.h>
3 #include <io/CDASToOfflineEventConverter.h>
6 #include <evt/Header.h>
8 #include <sevt/Header.h>
9 #include <sevt/SEvent.h>
10 #include <sevt/Station.h>
12 #include <utl/AugerCoordinateSystem.h>
13 #include <utl/ErrorLogger.h>
14 #include <utl/TimeStamp.h>
15 #include <utl/UTMPoint.h>
16 #include <utl/SaveCurrentTDirectory.h>
21 #include <AugerEvent.h>
42 VROOTFile::Open(filename, mode, b);
47 if (fFile->IsZombie())
55 CDASEventFile::Close()
77 if (!event.
HasRawEvent() || !
event.GetRawEvent().HasSd()) {
79 INFO(
"No raw SD event to write");
84 IoSdEvent*
const rawSEvent = &
const_cast<evt::Event&
>(event).GetRawEvent().Sd();
88 rawSEvent->Write(rawSEvent->Key());
107 dynamic_cast<TKey*
>(fFile->GetListOfKeys()->At(fCurrentEvent));
111 const IoSdEvent*
const theRawSdEvent =
112 dynamic_cast<const IoSdEvent*
>(fFile->Get(theKey->GetName()));
123 event.GetRawEvent().PushEvent(*theRawSdEvent);
130 const IoSdT3Trigger*
const rawTrigger = &theRawSdEvent->Trigger;
131 const unsigned int second = rawTrigger->Second;
132 const unsigned int microSecond =
134 const TimeStamp currentTime(second, microSecond);
137 ostringstream id_str;
138 if (!header.
GetId().empty())
139 id_str << header.
GetId() <<
"__";
140 id_str <<
"sd_" << theRawSdEvent->Id;
143 sHeader.
SetId(theRawSdEvent->Id);
147 header.
SetId(id_str.str());
155 delete theRawSdEvent;
169 CDASEventFile::FindEvent(
const unsigned int id)
178 while (fCurrentEvent < fFile->GetNkeys()) {
181 dynamic_cast<TKey*
>(fFile->GetListOfKeys()->At(fCurrentEvent));
188 const string keyName(theKey->GetName());
189 const string eventNumber(keyName.substr(keyName.find_first_of(
"#")));
191 if ((
unsigned long)atol(eventNumber.c_str()) ==
id)
207 CDASEventFile::GotoPosition(
const unsigned int position)
211 if (position >= (
unsigned int)fFile->GetNkeys())
214 fFile->Seek(position);
215 fCurrentEvent = position;
225 CDASEventFile::GetNEvents()
227 return fFile->GetNkeys();
Interface class to access to the SD part of an event.
Open file for write, fail if exists.
Mode
Available open modes.
#define INFO(message)
Macro for logging informational messages.
AugerEvent & GetRawEvent()
A TimeStamp holds GPS second and nanosecond for some event.
Base class to report exceptions in IO.
Class representing a document branch.
Status
Return code for seek operation.
constexpr double nanosecond
Overwrite if exist and open for write.
sevt::Header & GetHeader()
constexpr double microsecond