1 #include <fwk/VModule.h>
2 #include <utl/ErrorLogger.h>
4 #include <det/Detector.h>
5 #include <fdet/FDetector.h>
6 #include <fdet/FDetComponentSelector.h>
8 #include <fdet/Telescope.h>
10 #include <fevt/FEvent.h>
12 #include <fevt/Telescope.h>
13 #include <fevt/EyeHeader.h>
14 #include <fevt/EyeTriggerData.h>
27 using namespace FdEyeMergerKG;
33 const unsigned int eyeId,
const unsigned int telId)
35 const FDetector& fdDet = det::Detector::GetInstance().GetFDetector();
42 if (telIter->GetParentPhysicalEyeId() == eyeId &&
43 telIter->GetParentPhysicalId() == telId)
44 return telIter->GetId();
55 const fdet::FDetector& fdDet = det::Detector::GetInstance().GetFDetector();
58 end = fdDet.
EyesEnd(FDetComponentSelector::eVirtual); eIt != end; ++eIt) {
60 const int id = eye.
GetId();
62 if (!fEyeMergeMap[
id].empty()) {
64 errMsg <<
"multiple occurrance of mergedEye with id " <<
id <<
" --> ignored!";
70 if (eyesInDetector.empty()) {
72 errMsg <<
"empty set of participating eyes for virtual eye with id=" <<
id
78 fEyeMergeMap[id] = eyesInDetector;
82 info <<
" Version: " << GetVersionInfo(VModule::eRevisionNumber) <<
"\n";
84 eyeMapIter != fEyeMergeMap.end(); ++eyeMapIter) {
85 info <<
"\t merge eye (";
87 eyeIter != eyeMapIter->second.end(); ++eyeIter) {
88 if (eyeIter != eyeMapIter->second.begin())
92 info <<
") -->" << eyeMapIter->first <<
"\n";
106 const FEvent& fdEvent =
event.GetFEvent();
109 eyeMapIter != fEyeMergeMap.end(); ++eyeMapIter) {
111 const int mergedEye = eyeMapIter->first;
112 if (fdEvent.
HasEye(mergedEye)) {
113 ostringstream errMsg;
114 errMsg <<
"attempt to merge into existing eye " << mergedEye
122 iter != eyeMapIter->second.end(); ++iter)
123 if (fdEvent.
HasEye(*iter))
124 eyesInEvent.insert(*iter);
126 if (!eyesInEvent.empty())
127 MergeEyes(event, mergedEye, eyesInEvent, eyeMapIter->second);
136 const int destinationEye,
137 const set<unsigned int>& eyesInEvent,
138 const set<unsigned int>& eyesInDetector)
143 unsigned int firstEyeId = 0;
145 eyeIdIter != eyesInEvent.end(); ++eyeIdIter) {
147 if (!firstTriggerTime || thisEyeHeader.
GetTimeStamp() < firstTriggerTime) {
149 firstEyeId = *eyeIdIter;
154 fdEvent.
MakeEye(destinationEye);
166 eyeIdIter != eyesInDetector.end(); ++eyeIdIter) {
168 const EyeIdsIterator eyesInDetIter = eyesInEvent.find(*eyeIdIter);
170 if (eyesInDetIter != eyesInEvent.end()) {
178 telIter != thisEye.
TelescopesEnd(ComponentSelector::eInDAQ); ++telIter) {
181 const unsigned int originalTimeOffset = telIter->GetTimeOffset();
184 if (thisTel.
GetStatus() >= ComponentSelector::eHasData)
189 const FDetector& fdDet = det::Detector::GetInstance().GetFDetector();
193 if (telIter->GetUpTimeFraction() > 0) {
204 FdEyeMerger::Finish()
Telescope & GetTelescope(const unsigned int telescopeId, const ComponentSelector::Status status=ComponentSelector::eHasData)
Retrieve Telescope by Id, throw exception if not existent.
unsigned int GetId() const
Trigger data for an fevt::Eye.
fevt::EyeHeader & GetHeader()
Header for this Eye Event.
Fluorescence Detector Eye Event.
ComponentSelector::Status GetStatus() const
void SetTimeOffset(const unsigned int toffset)
#define INFO(message)
Macro for logging informational messages.
void MakeEye(const unsigned int eyeId, const ComponentSelector::Status status=ComponentSelector::eHasData)
void Init()
Initialise the registry.
Base class for exceptions trying to access non-existing components.
const Eye & GetEye(const unsigned int eyeId) const
Find eye by numerical Id.
EyeIterator EyesBegin(const FDetComponentSelector::Type type=FDetComponentSelector::ePhysical) const
iterator pointing to first eye of given type (ePhysical, eVirtual, eAll)
Detector description interface for Eye-related data.
void MakeTelescope(const unsigned int telescopeId, const ComponentSelector::Status status=ComponentSelector::eHasData)
Make Telescope telescopeId.
Detector description interface for FDetector-related data.
A TimeStamp holds GPS second and nanosecond for some event.
std::set< unsigned int > EyeIds
boost::filter_iterator< FDetComponentSelector, AllEyeIterator > EyeIterator
EyeMap::const_iterator EyeMapIterator
TelescopeIterator TelescopesEnd()
first available tel of status eHasData (DEPRECATED)
TelescopeIterator TelescopesBegin() const
Beginning of the collection of telescopes.
unsigned int GetId() const
Eye numerical Id.
Top of Fluorescence Detector event hierarchy.
Eye & GetEye(const unsigned int eyeId, const ComponentSelector::Status status=ComponentSelector::eHasData)
return Eye by id
TelescopeIterator TelescopesBegin()
first available tel of status eHasData (DEPRECATED)
double GetInterval() const
Get the time interval as a double (in Auger base units)
boost::filter_iterator< TelIsCommissioned, InternalConstTelescopeIterator > TelescopeIterator
An iterator over telescopes.
bool HasEye(const unsigned int eyeId, const ComponentSelector::Status status=ComponentSelector::eHasData) const
A TimeInterval is used to represent time elapsed between two events.
ResultFlag
Flag returned by module methods to the RunController.
unsigned int GetVirtualTelescopeId(const unsigned int virtualEyeId, const unsigned int eyeId, const unsigned int telId)
TelescopeIterator TelescopesEnd() const
End of the collection of telescopes.
fevt::EyeTriggerData & GetTriggerData()
Trigger data for this eye.
Fluorescence Detector Telescope Event.
std::set< unsigned int > GetParticipatingEyeIds() const
Returns a list of eye id's that participate in this (virtual) eye.
#define ERROR(message)
Macro for logging error messages.
boost::filter_iterator< ComponentSelector, ConstAllTelescopeIterator > ConstTelescopeIterator
EyeIds::const_iterator EyeIdsIterator
void Assign(const Telescope &t)
copy all but keep original telescope and eye id
bool IsVirtual() const
Returns whether this eye is a virtual eye.
EyeIterator EyesEnd(const FDetComponentSelector::Type type=FDetComponentSelector::ePhysical) const
iterator pointing to end of available eyes of given type (ePhysical, eVirtual, eAll) ...