31 {
32
34 JLimit_t& numberOfEvents = inputFiles.getLimit();
35 string detectorFile;
36 string outFile;
39 double wavelength;
42
46
47 try {
48
50
56 zap[
'l'] =
make_field(wavelength ,
"LED wavelength [nm]") = 400.0;
57 zap[
'T'] =
make_field(selector ) = default_pmts;
58
59 zap(argc,argv);
60 }
61 catch(const exception &error) {
62 ERROR(error.what() << endl);
63 }
64
67
69
70 JHitBuffer triggerBuffer;
71 JHitBuffer snapshotBuffer;
72
74
76
78
79 double cw =
getSpeedOfLight() / jd.getIndexOfRefractionGroup(wavelength);
80
83 int npairs = c.getNumberOfPairs();
85
86 JManager < int, TH2D >* timeDifferences;
87 timeDifferences = new JManager < int, TH2D > ( new TH2D("%", "", npairs, 0.5, npairs+0.5, 501, -250.5, 250.5) );
88
90
92
93 triggerBuffer .clear();
94 snapshotBuffer.clear();
95
96 builder(*event, moduleRouter, true , back_inserter(snapshotBuffer));
97 builder(*event, moduleRouter, false , back_inserter( triggerBuffer));
98
99 JHitBuffer::iterator __end = partition(triggerBuffer.begin(), triggerBuffer.end(), selector);
100 if(triggerBuffer.begin() != __end){
101
102 sort(triggerBuffer.begin(), __end, less<JHit>());
103 JHitBuffer::iterator triggeredHit = triggerBuffer.begin();
104
105 if( moduleRouter.hasModule( triggeredHit -> getModuleID() ) ){
106 const JModule& triggeredModule = moduleRouter.getModule( triggeredHit -> getModuleID() );
107
108 for(JHitBuffer::const_iterator snapshotHit = snapshotBuffer.begin(); snapshotHit != snapshotBuffer.end(); ++snapshotHit){
109
110 if( moduleRouter.hasModule( snapshotHit -> getModuleID() ) ){
111 const JModule& snapshotModule = moduleRouter.getModule( snapshotHit -> getModuleID() );
112
114
115
116 double Dt = snapshotHit->getT() - triggeredHit->getT();
117 double ToF =
getDistance( triggeredHit->getPosition(), snapshotHit->getPosition() ) / cw;
118
119 int xbin = c.getIndex( triggeredModule.
getFloor()-1 , snapshotModule.
getFloor()-1 ) + 1;
121 (*timeDifferences)[triggeredModule.
getString()]->Fill(xbin,Dt-ToF);
122 }
123 }
124 } else {
125 FATAL(
"JModuleRouter trying to access non existing identifier: " << snapshotHit->getModuleID() );
126 }
127 }
128
129 } else {
130 FATAL(
"JModuleRouter trying to access non existing identifier: " << triggeredHit->getModuleID() );
131 }
132 }
133 }
134 TFile output(outFile.c_str() , "recreate") ;
135 timeDifferences -> Write(output);
136}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
int getFloor() const
Get floor number.
int getString() const
Get string number.
Router for direct addressing of module data in detector data structure.
Data structure for a composite optical module.
Utility class to parse command line options.
Implementation of dispersion for water in deep sea.
General purpose class for object reading from a list of file names.
virtual bool hasNext() override
Check availability of next element.
virtual const pointer_type & next() override
Get next element.
Data structure for L0 hit.
int getNumberOfFloors(const JDetector &detector)
Get number of floors.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
double getDistance(const JFirst_t &first, const JSecond_t &second)
Get distance between objects.
bool comparepair(const pair_type &A, const pair_type &B)
const double getSpeedOfLight()
Get speed of light.
Auxiliary class to set-up Hit.
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.
Auxiliary data structure for set of PMT identifiers.