58 using namespace KM3NETDAQ;
63 JMultipleFileScanner<JDAQTimesliceTypes_t> inputFile;
69 JROOTClassSelector selector;
74 JParser<> zap(
"Auxiliary program to trigger time slice data.");
76 zap[
'f'] =
make_field(inputFile,
"input file.");
78 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
79 zap[
'a'] =
make_field(detectorFile,
"detector file.");
82 zap[
'C'] =
make_field(selector,
"timeslice selector, e.g. JDAQTimesliceL1.") = getROOTClassSelection<JDAQTimesliceTypes_t>();
87 catch(
const exception &error) {
88 FATAL(error.what() << endl);
97 DEBUG(
"Reset time [ms] " <<
getRTS() * 1e-6 << endl);
98 DEBUG(
"Trigger" << endl << parameters << endl);
103 load(detectorFile, detector);
105 catch(
const JException& error) {
111 const JModuleRouter moduleRouter(detector);
128 JTimer timerCC(
"Calibration");
129 JTimer timerL0(
"L0");
130 JTimer timerL1(
"L1");
131 JTimer timerL2(
"L2");
132 JTimer timerSN(
"SN");
133 JTimer timerRX(
"Timeslice router");
134 JTimer timerTR(
"Trigger");
135 JTimer timerTX(
"Trigger router");
136 JTimer timerTW(
"Timeslice writer");
137 JTimer timerSW(
"Summary writer");
139 JTimesliceRouter timesliceRouter(parameters.numberOfBins);
141 const JTrigger3DMuon trigger3DMuon (parameters);
142 const JTrigger3DShower trigger3DShower(parameters);
143 const JTriggerMXShower triggerMXShower(parameters, detector);
153 unsigned int numberOfTriggers = 0;
155 JObjectMultiplexer<JDAQTimesliceTypes_t, JDAQTimeslice> in(inputFile, selector);
159 for ( ; in.hasNext() && counter != inputFile.getLimit(); ++counter) {
161 STATUS(
"event: " << setw(10) << counter <<
'\r');
DEBUG(endl);
165 DEBUG(*timeslice << endl);
169 timesliceRouter.configure(*timeslice);
179 for (JDAQTimeslice::const_iterator super_frame = timeslice->begin(); super_frame != timeslice->end(); ++super_frame) {
181 if (!moduleRouter.hasModule(super_frame->getModuleID())) {
182 ERROR(
"Missing module: " << super_frame->getModuleID() << endl);
190 const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
191 JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
211 timesliceL1.push_back(
JSuperFrame1D_t(super_frame->getDAQChronometer(),
212 super_frame->getModuleIdentifier(),
213 module.getPosition()));
215 buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
223 timesliceL2.push_back(
JSuperFrame1D_t(super_frame->getDAQChronometer(),
224 super_frame->getModuleIdentifier(),
225 module.getPosition()));
227 buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
235 timesliceSN.push_back(
JSuperFrame1D_t(super_frame->getDAQChronometer(),
236 super_frame->getModuleIdentifier(),
237 module.getPosition()));
239 buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
249 JTriggerInput trigger_input(timesliceL2);
250 JTriggerOutput trigger_output;
252 trigger3DMuon (trigger_input, back_inserter(trigger_output));
253 trigger3DShower(trigger_input, back_inserter(trigger_output));
254 triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
256 trigger_output.merge(JEventOverlap(parameters.TMaxEvent_ns));
258 numberOfTriggers += trigger_output.size();
262 DEBUG(
"Number of triggers: " << trigger_output.size() << endl);
264 for (JTriggerOutput::const_iterator
event = trigger_output.begin();
event != trigger_output.end(); ++
event) {
268 JTriggeredEvent tev(*
event,
271 parameters.TMaxLocal_ns,
279 if (parameters.writeL0()) {
288 if (parameters.writeL1()) {
292 outputFile.put(JTimesliceL1<JDAQTimesliceL1>(timesliceL1, timesliceRouter, moduleRouter, parameters.TMaxLocal_ns));
297 if (parameters.writeL2()) {
301 outputFile.put(JTimesliceL1<JDAQTimesliceL2>(timesliceL2, timesliceRouter, moduleRouter, parameters.L2.TMaxLocal_ns));
306 if (parameters.writeSN()) {
310 outputFile.put(JTimesliceL1<JDAQTimesliceSN>(timesliceSN, timesliceRouter, moduleRouter, parameters.SN.TMaxLocal_ns));
315 if (parameters.writeSummary()) {
328 const double factor = 1.0 / (double) counter;
330 for (
const JTimer* buffer[] = { &timerCC, &timerL0, &timerL1, &timerL2, &timerSN, &timerRX, &timerTR, &timerTX, &timerTW, &timerSW, NULL }, **i = buffer; *i != NULL; ++i) {
331 (*i)->print(cout, factor);
334 NOTICE(
"Number of trigger/slices " << numberOfTriggers <<
"/" << counter << endl);
335 NOTICE(
"Trigger rate [Hz] " << numberOfTriggers * 1.0e9 * factor /
getFrameTime() << endl);
338 JMultipleFileScanner<JMetaTypes_t> io(inputFile);
Utility class to parse command line options.
Data structure for all trigger parameters.
JBuildL2< hit_type > JBuildL2_t
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
Empty structure for specification of parser element that is initialised (i.e.
Long64_t counter_type
Type definition for counter.
JSuperFrame2D< hit_type > JSuperFrame2D_t
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e.
JLimit JLimit_t
Type definition of limit.
JBuildL1< hit_type > JBuildL1_t
void setDAQLongprint(const bool option)
Set DAQ print option.
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
double getFrameTime()
Get frame time duration.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
void applyHighRateVeto(const double rate_Hz)
Apply high-rate veto.
Auxiliary class to set DAQ system clock parameters.
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
JTimeslice< hit_type > JTimeslice_t
double getRTS()
Get TDC dynamic range.
2-dimensional frame with time calibrated data from one optical module.
const JLimit & getLimit() const
Get limit.
Time slice with calibrated data.
#define DEBUG(A)
Message macros.
JSuperFrame1D< hit_type > JSuperFrame1D_t