2 #include <utl/ErrorLogger.h>
4 #include <det/Detector.h>
6 #include <fdet/Pixel.h>
7 #include <fdet/Channel.h>
9 #include <utl/TimeStamp.h>
10 #include <utl/Reader.h>
11 #include <utl/TabulatedFunctionErrors.h>
13 #include <evt/Event.h>
14 #include <evt/ShowerRecData.h>
15 #include <evt/ShowerFRecData.h>
17 #include <fevt/FEvent.h>
18 #include <fevt/Header.h>
20 #include <fevt/Telescope.h>
21 #include <fevt/EyeHeader.h>
22 #include <fevt/EyeRecData.h>
23 #include <fevt/Pixel.h>
24 #include <fevt/PixelRecData.h>
26 #include <fwk/CentralConfig.h>
28 #include <AugerEvent.h>
32 #include "EyeEventHeader.hh"
33 #include <EyePixelData.hh>
34 #include <EyePixelList.hh>
35 #include <FdNumbering.hh>
37 #include <EyeEvent.hh>
38 #include <FdNumbering.hh>
39 #include <TTimeStamp.hh>
43 #include <sevt/SEvent.h>
44 #include <sevt/Station.h>
45 #include <sevt/StationTriggerData.h>
48 using namespace FdUtil;
57 using namespace FdEventSelectorKG;
60 FdEventSelector::FdEventSelector() {}
61 FdEventSelector::~FdEventSelector() {}
68 CentralConfig::GetInstance()->
GetTopBranch (
"FdEventSelector");
71 ERROR (
"Could not find branch FdEventSelector");
82 if (cB.GetName() ==
"deselectLaser") {
83 double mean=0, width=0;
84 cB.GetChild(
"mean").GetData(mean);
85 cB.GetChild(
"width").GetData(width);
88 else if (cB.GetName() ==
"selectFdId") {
90 cB.GetChild(
"run").GetData(run);
91 cB.GetChild(
"event").GetData(event);
94 else if (cB.GetName() ==
"deselectEye") {
95 unsigned int eyeId = 0;
96 cB.GetChild(
"eyeId").GetData(eyeId);
97 fDeselectEyes.insert(eyeId);
104 << GetVersionInfo(VModule::eRevisionNumber) <<
"\n";
105 if (fVerbosity >= 0) {
106 info <<
" Parameters:\n"
107 " minimumTrigPix: " << fMinFdTrigPix <<
"\n"
108 " maximumTrigPix: " << fMaxFdTrigPix <<
"\n"
109 " minEyes: " << fMinEyes <<
"\n"
110 " minTOTs: " << fMinTOTs <<
"\n";
111 for(vector<deselectLaser>::const_iterator i=fDeselectLaser.begin();
112 i!=fDeselectLaser.end(); ++i) {
113 info <<
" deselectLaser: mean=" << int(i->mean) <<
"ns, width=" << int(i->width) <<
"ns \n";
115 for(vector<selectFdId>::const_iterator i=fSelectFdId.begin();
116 i!=fSelectFdId.end(); ++i) {
117 info <<
" pick event by Fd Id: run=" << int(i->run) <<
", event=" << int(i->event) <<
"\n";
119 info <<
" deselected eyes:";
120 if (fDeselectEyes.empty())
123 for (set<unsigned int>::const_iterator i = fDeselectEyes.begin();
124 i != fDeselectEyes.end(); ++i)
138 if(!event.
HasFEvent())
return eContinueLoop;
147 iEye != fevent.
EyesEnd(ComponentSelector::eHasData);
152 const unsigned int EyeId = iEye->GetId();
157 if (fVerbosity>-1)
INFO(
" no raw FD event - skipping ...");
158 return eContinueLoop;
163 AugerEvent::EyeIterator iRawEye;
165 iRawEye !=
event.GetRawEvent().EyesEnd();
168 if (EyeId == iRawEye->GetEventHeader()->GetEyeNo()) {
175 if (fVerbosity>-1)
INFO(
" raw EyeEvent not found - skipping ...");
176 return eContinueLoop;
179 TEyeEventHeader* fdEyeEventHeader = iRawEye->GetEventHeader();
180 int RunNo = fdEyeEventHeader->GetRunNo();
181 int EventNo = fdEyeEventHeader->GetEventNo();
182 int EyeID = fdEyeEventHeader->GetEyeNo();
184 if (fVerbosity > -1) {
186 info <<
" eye " << EyeID
188 <<
" event " << EventNo;
192 if (fDeselectEyes.find(EyeId) != fDeselectEyes.end()) {
194 INFO(
"found deselected eye - skipping...");
198 if (fSelectFdId.size() > 0) {
200 for(vector<selectFdId>::const_iterator i=fSelectFdId.begin();
201 i!=fSelectFdId.end(); ++i) {
202 if (RunNo==i->run && EventNo==i->event) {
207 INFO(
"Event not selected. Skipping.");
214 TEyePixelList* eye_pixel_list = iRawEye->GetPixelList();
215 TEyePixelData* eye_pixel_data = iRawEye->GetPixelData();
216 TMirrorPixelData * mipixeldata = 0;
218 UInt_t NumPix = eye_pixel_list->GetNumPixels();
221 for (UInt_t i = 0; i < NumPix; i++) {
223 Fd::FdPixelNumber fdpixel = eye_pixel_list->GetPixel (i);
224 UInt_t pixel_no = Fd::GetMirrorPixelNo (fdpixel);
225 Bool_t isv = (pixel_no >= 441);
228 int miID = Fd::GetEyeMirrorNo (fdpixel);
229 if (last_miID!=miID){
230 mipixeldata = eye_pixel_data->GetPixelData (miID);
234 int firsttrigd = mipixeldata-> GetFirstTriggeredTimeBin (fdpixel);
243 info <<
" number of triggered pixels: " << nTrigPix;
247 if (nTrigPix<fMinFdTrigPix)
continue;
248 if (nTrigPix>fMaxFdTrigPix) {
251 info <<
" skipping too large event : nPix= " << nTrigPix;
254 return eContinueLoop;
258 if (fDeselectLaser.size()>0) {
259 const FdRoot::TTimeStamp * timeStamp = fdEyeEventHeader->GetTimeStamp();
260 unsigned int NanoTime = timeStamp->GetNanoSec();
261 for(vector<deselectLaser>::const_iterator i=fDeselectLaser.begin();
262 i!=fDeselectLaser.end(); ++i) {
263 if (std::fabs(i->mean-NanoTime) < i->width) {
266 info <<
" laser check: " << NanoTime <<
" " << i->mean
277 if (countEyes<fMinEyes) {
278 if (fVerbosity>-1)
INFO(
" not enough eyes in event - skipping ");
279 return eContinueLoop;
285 if ( nGood > 0 && fMinTOTs > 0 ) {
290 if (sditer->HasTriggerData()) {
300 info <<
" number of TOT stations: " << nTOT;
305 if(nGood>0 && nTOT>=fMinTOTs) {
308 if (fVerbosity>-1)
INFO(
" skipping event ...");
309 return eContinueLoop;
315 FdEventSelector::Finish()
Branch GetTopBranch() const
StationIterator StationsEnd()
End of all stations.
boost::filter_iterator< ComponentSelector, ConstAllEyeIterator > ConstEyeIterator
Interface class to access to the SD part of an event.
EyeIterator EyesEnd(const ComponentSelector::Status status)
#define INFO(message)
Macro for logging informational messages.
void Init()
Initialise the registry.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
AugerEvent & GetRawEvent()
Branch GetNextSibling() const
Get next sibling of this branch.
Class representing a document branch.
EyeIterator EyesBegin(const ComponentSelector::Status status)
void GetData(bool &b) const
Overloads of the GetData member template function.
Top of Fluorescence Detector event hierarchy.
fwk::VModule::ResultFlag(fwk::VModule::* run)(evt::Event &)
bool IsTimeOverThreshold() const
T1 TOT is always promoted to T2 TOT.
ResultFlag
Flag returned by module methods to the RunController.
Station Trigger Data description
StationIterator StationsBegin()
Beginning of all stations.
Branch GetFirstChild() const
Get first child of this Branch.
boost::indirect_iterator< InternalConstStationIterator, const Station & > ConstStationIterator
#define ERROR(message)
Macro for logging error messages.