55 int main(
int argc,
char **argv)
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
Recording of objects on file according a format that follows from the file name extension.
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
Data structure for detector geometry and calibration.
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e.
Basic data structure for L0 hit.
JLimit JLimit_t
Type definition of limit.
JBuildL1< hit_type > JBuildL1_t
Basic data structure for time and time over threshold information of hit.
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
General purpose messaging.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Direct access to module in detector data structure.
double getRTS()
Get TDC dynamic range.
Utility class to parse command line options.
ROOT TTree parameter settings.
2-dimensional frame with time calibrated data from one optical module.
const JLimit & getLimit() const
Get limit.
KM3NeT DAQ constants, bit handling, etc.
Basic data structure for L1 hit.
Time slice with calibrated data.
#define DEBUG(A)
Message macros.
JSuperFrame1D< hit_type > JSuperFrame1D_t
int main(int argc, char *argv[])