68 JMultipleFileScanner<JDAQTimesliceTypes_t> inputFile;
74 JROOTClassSelector selector;
79 JParser<> zap(
"Auxiliary program to trigger time slice data.");
81 zap[
'f'] =
make_field(inputFile,
"input file.");
83 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
84 zap[
'a'] =
make_field(detectorFile,
"detector file.");
87 zap[
'C'] =
make_field(selector,
"timeslice selector, e.g. JDAQTimesliceL1.") = getROOTClassSelection<JDAQTimesliceTypes_t>();
92 catch(
const exception &error) {
93 FATAL(error.what() << endl);
101 DEBUG(
"Reset time [ms] " <<
getRTS() * 1e-6 << endl);
102 DEBUG(
"Trigger" << endl << parameters << endl);
107 load(detectorFile, detector);
109 catch(
const JException& error) {
115 const JModuleRouter moduleRouter(detector);
119 typedef double hit_type;
121 typedef JSuperFrame1D<hit_type> JSuperFrame1D_t;
122 typedef JSuperFrame2D<hit_type> JSuperFrame2D_t;
123 typedef JTimeslice <hit_type> JTimeslice_t;
124 typedef JBuildL1 <hit_type> JBuildL1_t;
125 typedef JBuildL2 <hit_type> JBuildL2_t;
127 const JBuildL1_t buildL1(parameters);
128 const JBuildL2_t buildL2(parameters.
L2);
129 const JBuildL2_t buildSN(parameters.
SN);
131 JTimer timerCC(
"Calibration");
132 JTimer timerL0(
"L0");
133 JTimer timerL1(
"L1");
134 JTimer timerL2(
"L2");
135 JTimer timerSN(
"SN");
136 JTimer timerRX(
"Timeslice router");
137 JTimer timerTR(
"Trigger");
138 JTimer timerTX(
"Trigger router");
139 JTimer timerTW(
"Timeslice writer");
140 JTimer timerSW(
"Summary writer");
142 JTimesliceRouter timesliceRouter(parameters.
numberOfBins);
144 const JTriggerNB triggerNB (parameters);
145 const JTrigger3DMuon trigger3DMuon (parameters);
146 const JTrigger3DShower trigger3DShower(parameters);
147 const JTriggerMXShower triggerMXShower(parameters, detector);
157 unsigned int numberOfTriggers = 0;
159 JObjectMultiplexer<JDAQTimesliceTypes_t, JDAQTimeslice> in(inputFile, selector);
163 for ( ; in.hasNext() && counter != inputFile.getLimit(); ++counter) {
165 STATUS(
"event: " << setw(10) << counter <<
'\r');
DEBUG(endl);
169 DEBUG(*timeslice << endl);
173 timesliceRouter.configure(*timeslice);
184 for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
186 if (!moduleRouter.hasModule(super_frame->getModuleID())) {
187 ERROR(
"Missing module: " << super_frame->getModuleID() << endl);
195 const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
196 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
208 timesliceL0.push_back(JSuperFrame1D_t(buffer));
216 JSuperFrame2D_t::iterator __end = partition(buffer.begin(), buffer.end(), parameters.
triggerNB.
pmts);
218 if (buffer.begin() != __end) {
220 timesliceNB.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
221 super_frame->getModuleIdentifier(),
222 module.getPosition()));
224 buildL1(buffer.begin(), __end , back_inserter(*timesliceNB.rbegin()));
232 timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
233 super_frame->getModuleIdentifier(),
234 module.getPosition()));
236 buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
244 timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
245 super_frame->getModuleIdentifier(),
246 module.getPosition()));
248 buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
256 timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
257 super_frame->getModuleIdentifier(),
258 module.getPosition()));
260 buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
270 const JTriggerInput trigger_input(timesliceNB);
272 for (JTriggerInput::const_iterator hit = trigger_input.begin(); hit != trigger_input.end(); ++hit) {
274 JTriggeredEvent tev(timesliceNB.getDAQChronometer(),
289 JTriggerInput trigger_input(timesliceL2);
290 JTriggerOutput trigger_output;
292 trigger3DMuon (trigger_input, back_inserter(trigger_output));
293 trigger3DShower(trigger_input, back_inserter(trigger_output));
294 triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
296 trigger_output.merge(JEventOverlap(parameters.
TMaxEvent_ns));
298 numberOfTriggers += trigger_output.size();
302 DEBUG(
"Number of triggers: " << trigger_output.size() << endl);
304 for (JTriggerOutput::const_iterator event = trigger_output.begin();
event != trigger_output.end(); ++event) {
308 JTriggeredEvent tev(*event,
332 outputFile.put(JTimesliceL1<JDAQTimesliceL1>(timesliceL1, timesliceRouter, moduleRouter, parameters.
TMaxLocal_ns));
341 outputFile.put(JTimesliceL1<JDAQTimesliceL2>(timesliceL2, timesliceRouter, moduleRouter, parameters.
L2.
TMaxLocal_ns));
350 outputFile.put(JTimesliceL1<JDAQTimesliceSN>(timesliceSN, timesliceRouter, moduleRouter, parameters.
SN.
TMaxLocal_ns));
368 const double factor = 1.0 / (double) counter;
370 for (
const JTimer* buffer[] = { &timerCC, &timerL0, &timerL1, &timerL2, &timerSN, &timerRX, &timerTR, &timerTX, &timerTW, &timerSW, NULL }, **i = buffer; *i != NULL; ++i) {
371 (*i)->print(cout, factor);
374 NOTICE(
"Number of trigger/slices " << numberOfTriggers <<
"/" << counter << endl);
375 NOTICE(
"Trigger rate [Hz] " << numberOfTriggers * 1.0e9 * factor /
getFrameTime() << endl);
378 JMultipleFileScanner<JMetaTypes_t> io(inputFile);