Jpp
JTriggerEfficiency.cc
Go to the documentation of this file.
1 
2 #include <string>
3 #include <iostream>
4 #include <iomanip>
5 #include <vector>
6 #include <set>
7 
8 #include "TH1D.h"
9 #include "TRandom3.h"
10 
11 #include "evt/Head.hh"
12 #include "evt/Evt.hh"
13 #include "evt/Hit.hh"
14 #include "JDAQ/JDAQTimeslice.hh"
15 #include "JDAQ/JDAQEvent.hh"
16 #include "JDAQ/JDAQSummaryslice.hh"
19 
20 #include "JAAnet/JHead.hh"
21 #include "JAAnet/JHeadToolkit.hh"
22 
23 #include "JDetector/JDetector.hh"
27 #include "JDetector/JPMTRouter.hh"
28 #include "JDetector/JTimeRange.hh"
29 #include "JDetector/JK40Rates.hh"
36 
37 #include "JTrigger/JHit.hh"
38 #include "JTrigger/JHitToolkit.hh"
39 #include "JTrigger/JTimeslice.hh"
42 #include "JTrigger/JHitL0.hh"
43 #include "JTrigger/JHitL1.hh"
44 #include "JTrigger/JBuildL1.hh"
45 #include "JTrigger/JBuildL2.hh"
49 #include "JTrigger/JTriggerBits.hh"
53 #include "JTrigger/JTimesliceL1.hh"
57 #include "JTrigger/JRunByRun.hh"
59 
64 #include "JSupport/JSupport.hh"
66 #include "JSupport/JMeta.hh"
67 
68 #include "Jeep/JPrint.hh"
69 #include "Jeep/JParser.hh"
70 #include "Jeep/JMessage.hh"
71 
72 
73 /**
74  * \file
75  * Auxiliary program to trigger Monte Carlo events.
76  *
77  * Note that option
78  * - <tt>-a</tt> refers to the detector configuration that is used to convert Monte Carlo true information to raw data; and
79  * - <tt>-b</tt> refers to the detector configuration that is used to convert raw data to calibrated data.
80  *
81  * Note that the event counter of the triggered events, as returned by JDAQEvent::getCounter(),
82  * are set to the corresponding index of the Monte Carlo event in the output.
83  * \author mdejong
84  */
85 int main(int argc, char **argv)
86 {
87  using namespace std;
88  using namespace JPP;
89  using namespace KM3NETDAQ;
90 
92 
93  JMultipleFileScanner<> inputFile;
94  JFileRecorder<typelist> outputFile;
95  JLimit_t& numberOfEvents = inputFile.getLimit();
96  string detectorFileA;
97  string detectorFileB;
98  int run;
99  JTriggerParameters parameters;
100  bool triggeredEventsOnly;
101  JPMTParametersMap pmtParameters;
102  JK40Rates rates_Hz;
103  JRunByRun runbyrun;
104  UInt_t seed;
105  int debug;
106 
107  try {
108 
109  JParser<> zap("Auxiliary program to trigger Monte Carlo events.");
110 
111  zap['f'] = make_field(inputFile, "input file (output of detector simulation)");
112  zap['o'] = make_field(outputFile, "output file") = "trigger_efficieny.root";
113  zap['n'] = make_field(numberOfEvents) = JLimit::max();
114  zap['a'] = make_field(detectorFileA, "detector used for conversion from Monte Carlo truth to raw data.");
115  zap['b'] = make_field(detectorFileB, "detector used for conversion of raw data to calibrated data.") = "";
116  zap['R'] = make_field(run, "run number") = -1;
117  zap['r'] = make_field(runbyrun, "option for run-by-run mode") = JPARSER::initialised();
118  zap['@'] = make_field(parameters, "Trigger parameters (or corresponding file name)") = JPARSER::initialised();
119  zap['O'] = make_field(triggeredEventsOnly, "optionally write only triggered events.");
120  zap['P'] = make_field(pmtParameters, "PMT simulation data (or corresponding file name)") = JPARSER::initialised();
121  zap['B'] = make_field(rates_Hz, "background rates [Hz]") = JPARSER::initialised();
122  zap['S'] = make_field(seed, "seed") = 0;
123  zap['d'] = make_field(debug, "debug") = 0;
124 
125  zap(argc, argv);
126  }
127  catch(const exception &error) {
128  FATAL(error.what() << endl);
129  }
130 
131  gRandom->SetSeed(seed);
132 
133  cout.tie(&cerr);
134 
136 
137  if (detectorFileB == "") {
138  detectorFileB = detectorFileA;
139  }
140 
141 
142  JDetector detectorA;
143  JDetector detectorB;
144 
145  try {
146  load(detectorFileA, detectorA);
147  load(detectorFileB, detectorB);
148  }
149  catch(const JException& error) {
150  FATAL(error);
151  }
152 
153  JPMTParametersMap::Throw(true);
154 
155  if (!pmtParameters.is_valid()) {
156  FATAL("Invalid PMT parameters " << pmtParameters << endl);
157  }
158 
159  if (pmtParameters.getQE() != 1.0) {
160 
161  WARNING("Correct background rates with global efficiency " << pmtParameters.getQE() << endl);
162 
163  rates_Hz.correct(pmtParameters.getQE());
164  }
165 
166  const JModuleRouter moduleRouter(detectorB);
167  JDetectorSimulator simbad (detectorA);
168  JSummaryRouter summaryRouter;
169 
170  if (runbyrun.is_valid()) {
171 
172  NOTICE("Using run-by-run:" << endl << runbyrun << endl);
173 
174  if (!runbyrun.hasNext()) {
175  FATAL("Run-by-run simulation yields no input." << endl);
176  }
177 
178  if (rates_Hz.getSinglesRate() != 0.0) {
179  WARNING("Run-by-run simulation discards singles rate [Hz] " << rates_Hz.getSinglesRate() << endl);
180  }
181 
182  try {
183  simbad.reset(new JK40RunByRunSimulator(summaryRouter, rates_Hz));
184  simbad.reset(new JPMTRunByRunSimulator(summaryRouter, pmtParameters, detectorA, runbyrun.range_Hz));
185  simbad.reset(new JCLBDefaultSimulator());
186  }
187  catch(const JException& error) {
188  FATAL(error.what() << endl);
189  }
190 
191  try {
192 
193  parameters = getTriggerParameters(runbyrun.get<JMultipleFileScanner<>,true>());
194 
195  NOTICE("Set trigger parameters from run-by-run input." << endl);
196  }
197  catch(const JException& error) {
198  WARNING("No trigger parameters from run-by-run input;\nrun with default/user input." << endl);
199  }
200 
201  } else {
202 
203  NOTICE("Using fixed rates [Hz]: " << rates_Hz << endl);
204 
205  try {
206  simbad.reset(new JK40DefaultSimulator(rates_Hz));
207  simbad.reset(new JPMTDefaultSimulator(pmtParameters, detectorA));
208  simbad.reset(new JCLBDefaultSimulator());
209  }
210  catch(const JException& error) {
211  FATAL(error.what() << endl);
212  }
213  }
214 
215  parameters.set(getMaximalDistance(detectorB));
216 
217  DEBUG("Trigger:" << endl << parameters << endl);
218  DEBUG("PMT parameters:" << endl << pmtParameters << endl);
219 
220  const double Tmax = getMaximalTime(detectorB);
221 
222  const JTimeRange period(-(Tmax + parameters.TMaxLocal_ns),
223  +(Tmax + parameters.TMaxLocal_ns));
224 
225  typedef double hit_type;
226 
227  typedef JSuperFrame1D<hit_type> JSuperFrame1D_t;
228  typedef JSuperFrame2D<hit_type> JSuperFrame2D_t;
229  typedef JTimeslice <hit_type> JTimeslice_t;
230  typedef JBuildL1 <hit_type> JBuildL1_t;
231  typedef JBuildL2 <hit_type> JBuildL2_t;
232 
233  const JBuildL1_t buildL1(parameters);
234  const JBuildL2_t buildL2(parameters.L2);
235  const JBuildL2_t buildSN(parameters.SN);
236 
237  JTimesliceRouter timesliceRouter(parameters.numberOfBins);
238 
239  const JTrigger3DMuon trigger3DMuon (parameters);
240  const JTrigger3DShower trigger3DShower(parameters);
241  const JTriggerMXShower triggerMXShower(parameters, detectorB);
242 
243 
244  Head header;
245 
246  try {
247  header = getHeader(inputFile);
248  }
249  catch(const JException& error) {
250  FATAL(error);
251  }
252 
253  const JPosition3D center = get<JPosition3D>(header);
254 
255  NOTICE("Apply detector offset from Monte Carlo run header (" << center << ")" << endl);
256 
257  detectorA -= center;
258  detectorB -= center;
259 
260  TH1D h1("Trigger bits", NULL, NUMBER_OF_TRIGGER_BITS, -0.5, NUMBER_OF_TRIGGER_BITS - 0.5);
261 
262 
263  outputFile.open();
264 
265  if (!outputFile.is_open()) {
266  FATAL("Error opening file " << outputFile << endl);
267  }
268 
269  outputFile.put(*gRandom);
270  outputFile.put(JMeta(argc, argv));
271  outputFile.put(header);
272  outputFile.put(parameters);
273 
274  JLimit_t limit = inputFile.getLimit();
275  counter_type number_of_events = 0;
276  JTriggerCounter_t trigger_counter = 0;
277 
278  for (JMultipleFileScanner<>::const_iterator file = inputFile.begin(); file != inputFile.end(); ++file) {
279 
280  int mc_run_id = 0;
281 
282  try {
283 
284  const JHead head(getHeader(*file));
285 
286  mc_run_id = head.start_run.run_id;
287  }
288  catch(const JException& error) {
289  FATAL(error);
290  }
291 
292  JMultipleFileScanner<Evt> in(*file);
293 
294  limit.setLowerLimit(limit.getLowerLimit() - in.skip(limit.getLowerLimit()));
295 
296  for ( ; in.hasNext() && number_of_events != limit; ++number_of_events) {
297 
298  STATUS("event: " << setw(10) << number_of_events << '\r'); DEBUG(endl);
299 
300  Evt* event = in.next();
301 
302  event->mc_run_id = mc_run_id;
303 
304  DEBUG(*event << endl);
305 
306  bool trigger = false;
307 
308  if (!event->mc_hits.empty()) {
309 
310  int frame_index = (int) in.getCounter() + 1; // 1 event / slice
311 
312  if (runbyrun.is_valid() && runbyrun.hasNext()) {
313 
314  summaryRouter.update(runbyrun.next());
315 
316  summaryRouter.correct(dynamic_cast<const JPMTDefaultSimulatorInterface&>(simbad.getPMTSimulator()));
317 
318  frame_index = summaryRouter.getFrameIndex();
319  run = summaryRouter.getRunNumber();
320  }
321 
322  // set the event time!
323 
324  JTimeRange timeRange = getTimeRange(*event, period);
325 
326  if (!timeRange.is_valid()) {
327  timeRange.setRange(0.0,0.0);
328  }
329 
330  const double t0 = 0.5 * (timeRange.getLowerLimit() + timeRange.getUpperLimit());
331  const double t1 = getTimeOfFrame(frame_index) + gRandom->Rndm() * getFrameTime();
332 
333  event->mc_t = t1 - t0; // time since start of data taking run
334 
335  timeRange.add(event->mc_t);
336  timeRange.add(period);
337 
338  const JDAQChronometer chronometer(detectorB.getID(), (run != -1 ? run : mc_run_id) , frame_index, JDAQUTCExtended(getTimeOfFrame(frame_index)));
339 
340  const JEventTimeslice timeslice(chronometer, simbad, *event, period);
341 
342  DEBUG(timeslice << endl);
343 
344 
345  timesliceRouter.configure(timeslice);
346 
347  JTimeslice_t timesliceL0(timeslice.getDAQChronometer());
348  JTimeslice_t timesliceL1(timeslice.getDAQChronometer());
349  JTimeslice_t timesliceL2(timeslice.getDAQChronometer());
350  JTimeslice_t timesliceSN(timeslice.getDAQChronometer());
351 
352  for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) {
353 
354  if (moduleRouter.hasModule(super_frame->getModuleID())) {
355 
356  // calibration
357 
358  const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
359  const JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
360 
361  // L0
362 
363  timesliceL0.push_back(JSuperFrame1D_t(buffer));
364 
365  // L1
366 
367  timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
368  super_frame->getModuleIdentifier(),
369  module.getPosition()));
370 
371  buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
372 
373  // L2
374 
375  timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
376  super_frame->getModuleIdentifier(),
377  module.getPosition()));
378 
379  buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
380 
381  // SN
382 
383  timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
384  super_frame->getModuleIdentifier(),
385  module.getPosition()));
386 
387  buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
388 
389  DEBUG("L0 " << setw(8) << timesliceL0.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL0.rbegin()->size() << endl);
390  DEBUG("L1 " << setw(8) << timesliceL1.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL1.rbegin()->size() << endl);
391  DEBUG("L2 " << setw(8) << timesliceL2.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL2.rbegin()->size() << endl);
392  DEBUG("SN " << setw(8) << timesliceSN.rbegin()->getModuleID() << ' ' << setw(8) << timesliceSN.rbegin()->size() << endl);
393  }
394  }
395 
396 
397  // Trigger
398 
399  JTriggerInput trigger_input(timesliceL2);
400  JTriggerOutput trigger_output;
401 
402  trigger3DMuon (trigger_input, back_inserter(trigger_output));
403  trigger3DShower(trigger_input, back_inserter(trigger_output));
404  triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
405 
406  trigger_output.merge(JEventOverlap(parameters.TMaxEvent_ns));
407 
408  for (JTriggerOutput::const_iterator to = trigger_output.begin(); to != trigger_output.end(); ++to) {
409 
410  for (int i = 0; i != h1.GetNbinsX(); ++i) {
411  if (to->hasTriggerBit(i)) {
412  h1.Fill((double) i);
413  }
414  }
415 
416  JTimeRange eventTime = getTimeRange(*to).add(getTimeOfRTS(*to));
417 
418  DEBUG("Event time: "
419  << to->getFrameIndex() << ' '
420  << eventTime << ' '
421  << timeRange << endl);
422 
423  if (timeRange.overlap(eventTime)) {
424 
425  JTriggeredEvent tev(*to,
426  timesliceRouter,
427  moduleRouter,
428  parameters.TMaxLocal_ns,
429  getTimeRange(parameters));
430 
431  // Set the event counter to the index of the Monte Carlo event in the output.
432 
433  tev.setCounter(trigger_counter);
434 
435  outputFile.put(tev);
436 
437  trigger = true;
438  }
439  }
440 
441 
442  if (!triggeredEventsOnly || trigger) {
443 
444  if (parameters.writeL0()) {
445  outputFile.put(timeslice);
446  }
447 
448  if (parameters.writeL1()) {
449  outputFile.put(JTimesliceL1<JDAQTimesliceL1>(timesliceL1, timesliceRouter, moduleRouter, parameters.TMaxLocal_ns));
450  }
451 
452  if (parameters.writeL2()) {
453  outputFile.put(JTimesliceL1<JDAQTimesliceL2>(timesliceL2, timesliceRouter, moduleRouter, parameters.L2.TMaxLocal_ns));
454  }
455 
456  if (parameters.writeSN()) {
457  outputFile.put(JTimesliceL1<JDAQTimesliceSN>(timesliceSN, timesliceRouter, moduleRouter, parameters.SN.TMaxLocal_ns));
458  }
459 
460  if (parameters.writeSummary()) {
461  outputFile.put(JSummaryslice(chronometer,simbad));
462  }
463  }
464  }
465 
466  if (!triggeredEventsOnly || trigger) {
467 
468  outputFile.put(*event);
469 
470  ++trigger_counter;
471  }
472  }
473  }
474  STATUS(endl);
475 
476 
477  JMultipleFileScanner<JMetaTypes_t> io(inputFile);
478 
479  io >> outputFile;
480 
481  outputFile.put(h1);
482  outputFile.put(*gRandom);
483  outputFile.close();
484 }
JPMTParametersMap.hh
main
int main(int argc, char **argv)
Definition: JTriggerEfficiency.cc:85
JMeta.hh
JK40DefaultSimulator.hh
JSUPPORT::getTriggerParameters
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.
Definition: JTriggerParametersSupportkit.hh:148
JTRIGGER::JTriggerParameters::numberOfBins
int numberOfBins
number of bins for lookup table of timeslice
Definition: JTriggerParameters.hh:324
JTriggerParameters.hh
KM3NETDAQ::JEventTimeslice
Timeslice with Monte Carlo event.
Definition: JEventTimeslice.hh:33
JDETECTOR::getMaximalDistance
double getMaximalDistance(const JDetector &detector)
Get maximal distance between modules in detector.
Definition: JDetectorToolkit.hh:76
JFileRecorder.hh
JSuperFrame2D.hh
JAANET::getTimeRange
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e.
Definition: JAAnetToolkit.hh:134
JTrigger3DMuon.hh
JTriggeredEvent.hh
JRunByRun.hh
JMessage.hh
JHead.hh
JTRIGGER::JTriggerParameters::set
void set(const double DMax_m=0.0)
Set dependent trigger parameters.
Definition: JTriggerParameters.hh:141
JPrint.hh
KM3NETDAQ::JDAQUTCExtended
Data structure for UTC time.
Definition: JDAQUTCExtended.hh:27
JEventToolkit.hh
JTRIGGER::JTriggerParameters::TMaxLocal_ns
double TMaxLocal_ns
maximal time difference between L0 hits for L1
Definition: JTriggerParameters.hh:322
JTRIGGER::JTriggerParameters
Data structure for all trigger parameters.
Definition: JTriggerParameters.hh:116
JK40RunByRunSimulator.hh
JTriggerToolkit.hh
JTimeslice.hh
JPARSER::initialised
Empty structure for specification of parser element that is initialised (i.e.
Definition: JParser.hh:63
JDETECTOR::load
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
Definition: JDetectorToolkit.hh:456
JTRIGGER::JTriggerParameters::TMaxEvent_ns
double TMaxEvent_ns
maximal time before and after event for snapshot
Definition: JTriggerParameters.hh:323
JSUPPORT::JLimit_t
JLimit JLimit_t
Type definition of limit.
Definition: JLimit.hh:215
JAANET::JHead::start_run
JAANET::start_run start_run
Definition: JHead.hh:1071
JK40Rates.hh
JPARSER::JParser
Utility class to parse command line options.
Definition: JParser.hh:1493
NOTICE
#define NOTICE(A)
Definition: JMessage.hh:64
KM3NETDAQ::NUMBER_OF_TRIGGER_BITS
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
Definition: JDAQTriggerMask.hh:31
JDAQTimeslice.hh
JTimeRange.hh
JTriggerBits.hh
JTRIGGER::JTriggerParameters::L2
JL2Parameters L2
L2 processing.
Definition: JTriggerParameters.hh:327
JDAQSummaryslice.hh
JAANET::JHead
Monte Carlo run header.
Definition: JHead.hh:839
KM3NETDAQ::getFrameTime
double getFrameTime()
Get frame time duration.
Definition: JDAQClock.hh:162
JTOOLS::JTimeRange
JRange< double > JTimeRange
Type definition for time range.
Definition: JTools/JTimeRange.hh:19
JHeadToolkit.hh
JSupport.hh
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JBuildL1.hh
JPMTRunByRunSimulator.hh
JTriggerMXShower.hh
JSUPPORT::getHeader
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
Definition: JMonteCarloFileSupportkit.hh:425
JDetectorSimulator.hh
JDETECTOR::getMaximalTime
double getMaximalTime(const JDetector &detector)
Get maximal time between modules in detector following causality.
Definition: JDetectorToolkit.hh:286
WARNING
#define WARNING(A)
Definition: JMessage.hh:65
JTRIGGER::JTriggerParameters::writeL2
JPrescaler writeL2
write JDAQTimeslice with L2 data
Definition: JTriggerParameters.hh:334
JCLBDefaultSimulator.hh
debug
int debug
debug level
Definition: JSirene.cc:59
KM3NETDAQ::JSummaryslice
Auxiliary class to create summary data.
Definition: JSummaryslice.hh:33
JHitToolkit.hh
JTimesliceL1.hh
JEventOverlap.hh
JHit.hh
JAANET::start_run::run_id
int run_id
MC run number.
Definition: JHead.hh:93
JSummaryRouter.hh
JMultipleFileScanner.hh
JLANG::JTypeList
Type list.
Definition: JTypeList.hh:22
STATUS
#define STATUS(A)
Definition: JMessage.hh:63
JBuildL2.hh
JParser.hh
JModuleMapper.hh
JDetectorToolkit.hh
JTriggerParametersSupportkit.hh
JHitL1.hh
JTRIGGER::JTriggerParameters::SN
JL2Parameters SN
Supernova trigger.
Definition: JTriggerParameters.hh:328
JTimesliceRouter.hh
JTRIGGER::JTriggerParameters::writeSummary
JPrescaler writeSummary
write JDAQSummaryslice
Definition: JTriggerParameters.hh:331
make_field
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1954
JTrigger3DShower.hh
KM3NETDAQ::getTimeOfRTS
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer.
Definition: JDAQChronometer.hh:273
JSummaryslice.hh
JSUPPORT::JMultipleFileScanner<>
KM3NETDAQ::JDAQChronometer::getDAQChronometer
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
Definition: JDAQChronometer.hh:88
JSuperFrame1D.hh
JSUPPORT::JMeta
Auxiliary class for ROOT I/O of application specific meta data.
Definition: JMeta.hh:71
DEBUG
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
JPMTRouter.hh
std
Definition: jaanetDictionary.h:36
JPMTDefaultSimulator.hh
JTRIGGER::JTriggerParameters::writeSN
JPrescaler writeSN
write JDAQTimeslice with SN data
Definition: JTriggerParameters.hh:335
KM3NETDAQ
KM3NeT DAQ data structures and auxiliaries.
Definition: DataQueue.cc:39
JDAQEvent.hh
KM3NETDAQ::setDAQLongprint
void setDAQLongprint(const bool option)
Set DAQ print option.
Definition: JDAQPrint.hh:28
JEventTimeslice.hh
JMonteCarloFileSupportkit.hh
KM3NETDAQ::JTriggerCounter_t
unsigned long long int JTriggerCounter_t
Type definition of trigger counter.
Definition: JDAQTriggerCounter.hh:21
JTRIGGER::JTriggerParameters::writeL1
JPrescaler writeL1
write JDAQTimeslice with L1 data
Definition: JTriggerParameters.hh:333
JDetector.hh
JHitL0.hh
FATAL
#define FATAL(A)
Definition: JMessage.hh:67
outputFile
string outputFile
Definition: JDAQTimesliceSelector.cc:37
JTRIGGER::JTriggerParameters::writeL0
JPrescaler writeL0
write JDAQTimeslice with L0 data
Definition: JTriggerParameters.hh:332
JROOT::counter_type
Long64_t counter_type
Type definition for counter.
Definition: JCounter.hh:24
JEEP::debug_t
debug
Definition: JMessage.hh:29
JTRIGGER::JL2Parameters::TMaxLocal_ns
double TMaxLocal_ns
maximal time difference [ns]
Definition: JTriggerParameters.hh:108
KM3NETDAQ::getTimeOfFrame
double getTimeOfFrame(const int frame_index)
Get start time of frame in ns since start of run for a given frame index.
Definition: JDAQClock.hh:185
KM3NETDAQ::JDAQChronometer
DAQ chronometer.
Definition: JDAQChronometer.hh:26
JRandomSampler.hh