Jpp master_rocky-44-g75b7c4f75
the software that should make you happy
Loading...
Searching...
No Matches
JTriggerEfficiency.cc File Reference

Auxiliary program to trigger Monte Carlo events. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <set>
#include "TH1D.h"
#include "TRandom3.h"
#include "km3net-dataformat/offline/Head.hh"
#include "km3net-dataformat/offline/MultiHead.hh"
#include "km3net-dataformat/offline/Evt.hh"
#include "km3net-dataformat/offline/Hit.hh"
#include "JDAQ/JDAQTimesliceIO.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JDAQ/JDAQToolkit.hh"
#include "JTimeslice/JEventTimeslice.hh"
#include "JSummaryslice/JSummaryslice.hh"
#include "JAAnet/JHead.hh"
#include "JAAnet/JHeadToolkit.hh"
#include "JAAnet/JAAnetToolkit.hh"
#include "JPhysics/JK40Rates.hh"
#include "JDetector/JDetector.hh"
#include "JDetector/JDetectorToolkit.hh"
#include "JDetector/JDetectorSimulator.hh"
#include "JDetector/JModuleMapper.hh"
#include "JDetector/JPMTRouter.hh"
#include "JDetector/JTimeRange.hh"
#include "JDetector/JPMTParametersMap.hh"
#include "JDetector/JK40DefaultSimulator.hh"
#include "JDetector/JPMTDefaultSimulator.hh"
#include "JDetector/JCLBDefaultSimulator.hh"
#include "JTrigger/JHit.hh"
#include "JTrigger/JHitToolkit.hh"
#include "JTrigger/JTimeslice.hh"
#include "JTrigger/JSuperFrame1D.hh"
#include "JTrigger/JSuperFrame2D.hh"
#include "JTrigger/JHitL0.hh"
#include "JTrigger/JHitL1.hh"
#include "JTrigger/JBuildL1.hh"
#include "JTrigger/JBuildL2.hh"
#include "JTrigger/JTrigger3DShower.hh"
#include "JTrigger/JTriggerMXShower.hh"
#include "JTrigger/JTrigger3DMuon.hh"
#include "JTrigger/JTriggerBits.hh"
#include "JTrigger/JEventOverlap.hh"
#include "JTrigger/JTimesliceRouter.hh"
#include "JTrigger/JTriggeredEvent.hh"
#include "JTrigger/JTimesliceL1.hh"
#include "JTrigger/JTriggerParameters.hh"
#include "JTrigger/JEventToolkit.hh"
#include "JTrigger/JSummaryRouter.hh"
#include "JTrigger/JTriggerToolkit.hh"
#include "JTrigger/JK40RunByRunSimulator.hh"
#include "JTrigger/JPMTRunByRunSimulator.hh"
#include "JTrigger/JCLBRunByRunSimulator.hh"
#include "JSupport/JMultipleFileScanner.hh"
#include "JSupport/JFileRecorder.hh"
#include "JSupport/JMonteCarloFileSupportkit.hh"
#include "JSupport/JTriggerParametersSupportkit.hh"
#include "JSupport/JSupportToolkit.hh"
#include "JSupport/JSupport.hh"
#include "JSupport/JRunByRun.hh"
#include "JSupport/JMeta.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to trigger Monte Carlo events.

The options

  • -a refers to the detector configuration that is used to convert Monte Carlo true information to raw data; and
  • -b refers to the detector configuration that is used to convert raw data to calibrated data.

The event counter of the triggered events, as returned by KM3NETDAQ::JDAQEvent::getCounter(), is set to the corresponding index of the Monte Carlo event in the output.
This allows for correlating the DAQ event to the Monte Carlo event.
The time of the DAQ hits can be correlated to the time of the Monte Carlo hits using the frame index and the time of the Monte Carlo event (Evt::mc_t), respectively (see also time_converter).
The universal time of the DAQ event is set to the universal time of the Monte Carlo event with a correction for the time of the event (read hits) within the time slice.
In run-by-run mode, the trigger parameters as well as the singles rates and status of the PMTs are read from the given raw data file.
The two-fold (and higher) coincidence rates should still be provided on the command line.

Author
mdejong

Definition in file JTriggerEfficiency.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 100 of file JTriggerEfficiency.cc.

101{
102 using namespace std;
103 using namespace JPP;
104 using namespace KM3NETDAQ;
105
107
108 JMultipleFileScanner<> inputFile;
110 JLimit_t& numberOfEvents = inputFile.getLimit();
111 string detectorFileA;
112 string detectorFileB;
113 int run;
114 JTriggerParameters parameters;
115 bool triggeredEventsOnly;
116 JPMTParametersMap pmtParameters;
117 JK40Rates rates_Hz;
118 JRunByRun runbyrun;
119 double sigma_ns;
120 UInt_t seed;
121 int debug;
122
123 try {
124
125 JParser<> zap("Auxiliary program to trigger Monte Carlo events.");
126
127 zap['f'] = make_field(inputFile, "input file (output of detector simulation)");
128 zap['o'] = make_field(outputFile, "output file") = "trigger_efficieny.root";
129 zap['n'] = make_field(numberOfEvents) = JLimit::max();
130 zap['a'] = make_field(detectorFileA, "detector used for conversion from Monte Carlo truth to raw data.");
131 zap['b'] = make_field(detectorFileB, "detector used for conversion of raw data to calibrated data.") = "";
132 zap['R'] = make_field(run, "run number") = -1;
133 zap['r'] = make_field(runbyrun, "option for run-by-run mode") = JPARSER::initialised();
134 zap['@'] = make_field(parameters, "Trigger parameters (or corresponding file name)") = JPARSER::initialised();
135 zap['O'] = make_field(triggeredEventsOnly, "optionally write only triggered events.");
136 zap['P'] = make_field(pmtParameters, "PMT simulation data (or corresponding file name)") = JPARSER::initialised();
137 zap['B'] = make_field(rates_Hz, "background rates [Hz]") = JPARSER::initialised();
138 zap['s'] = make_field(sigma_ns, "intrinsic time smearing of K40 coincidences [ns]") = JK40DefaultSimulatorInterface::getSigma();
139 zap['S'] = make_field(seed, "seed") = 0;
140 zap['d'] = make_field(debug, "debug") = 0;
141
142 zap(argc, argv);
143 }
144 catch(const exception &error) {
145 FATAL(error.what() << endl);
146 }
147
148 gRandom->SetSeed(seed);
149
151
153
154 if (detectorFileB == "") {
155 detectorFileB = detectorFileA;
156 }
157
158
159 JDetector detectorA;
160 JDetector detectorB;
161
162 try {
163 load(detectorFileA, detectorA);
164 load(detectorFileB, detectorB);
165 }
166 catch(const JException& error) {
167 FATAL(error);
168 }
169
171
172 if (!pmtParameters.is_valid()) {
173 FATAL("Invalid PMT parameters " << pmtParameters << endl);
174 }
175
176 if (pmtParameters.getQE() != 1.0) {
177
178 WARNING("Correct background rates with global efficiency " << pmtParameters.getQE() << endl);
179
180 rates_Hz.correct(pmtParameters.getQE());
181 }
182
183 Head header;
184
185 try {
186 header = getHeader(inputFile);
187 }
188 catch(const JException& error) {
189 FATAL(error);
190 }
191
192 const JModuleRouter moduleRouter(detectorB);
193 JDetectorSimulator simbad (detectorA);
194 JSummaryRouter summaryRouter;
195
196 if (runbyrun.is_valid()) {
197
198 NOTICE("Using run-by-run:" << endl << runbyrun << endl);
199
200 if (!runbyrun.hasNext()) {
201 FATAL("Run-by-run simulation yields no input." << endl);
202 }
203
204 if (rates_Hz.getSinglesRate() != 0.0) {
205 WARNING("Run-by-run simulation discards singles rate [Hz] " << rates_Hz.getSinglesRate() << endl);
206 }
207
208 try {
209 simbad.reset(new JK40RunByRunSimulator(summaryRouter, rates_Hz));
210 simbad.reset(new JPMTRunByRunSimulator(summaryRouter, pmtParameters, detectorA));
211 simbad.reset(new JCLBRunByRunSimulator(summaryRouter));
212 }
213 catch(const JException& error) {
214 FATAL(error.what() << endl);
215 }
216
217 try {
218
219 parameters = getTriggerParameters(runbyrun->getFilelist());
220
221 NOTICE("Set trigger parameters from run-by-run input." << endl);
222 }
223 catch(const JException& error) {
224 WARNING("No trigger parameters from run-by-run input;\nrun with default/user input." << endl);
225 }
226
227 // set live time
228
229 JHead buffer(header);
230
231 buffer.DAQ.livetime_s = getLivetime(runbyrun->getFilelist());
232 buffer.push(&JHead::DAQ);
233
234 copy(buffer, header);
235
236 } else {
237
238 NOTICE("Using fixed rates [Hz]: " << rates_Hz << endl);
239
240 try {
241 simbad.reset(new JK40DefaultSimulator(rates_Hz));
242 simbad.reset(new JPMTDefaultSimulator(pmtParameters, detectorA));
243 simbad.reset(new JCLBDefaultSimulator());
244 }
245 catch(const JException& error) {
246 FATAL(error.what() << endl);
247 }
248 }
249
250 // detector
251
252 if (parameters.disableHighRateVeto) {
253
254 NOTICE("Disabling high-rate veto of all PMTs." << endl);
255
257 }
258
259 parameters.set(getMaximalDistance(detectorB));
260
261 DEBUG("Trigger:" << endl << parameters << endl);
262 DEBUG("PMT parameters:" << endl << pmtParameters << endl);
263
264 const double Tmax = max(getMaximalTime(detectorA),
265 getMaximalTime(detectorB));
266
267 const JTimeRange period(-(Tmax + parameters.TMaxLocal_ns),
268 +(Tmax + parameters.TMaxLocal_ns));
269
270 typedef double hit_type;
271
272 typedef JSuperFrame1D<hit_type> JSuperFrame1D_t;
273 typedef JSuperFrame2D<hit_type> JSuperFrame2D_t;
274 typedef JTimeslice <hit_type> JTimeslice_t;
275 typedef JBuildL1 <hit_type> JBuildL1_t;
276 typedef JBuildL2 <hit_type> JBuildL2_t;
277
278 const JBuildL1_t buildL1(parameters);
279 const JBuildL2_t buildL2(parameters.L2);
280 const JBuildL2_t buildSN(parameters.SN);
281
282 JTimesliceRouter timesliceRouter(parameters.numberOfBins);
283
284 const JTrigger3DMuon trigger3DMuon (parameters);
285 const JTrigger3DShower trigger3DShower(parameters);
286 const JTriggerMXShower triggerMXShower(parameters, detectorB);
287
288
289 TH1D h1("Trigger bits", NULL, NUMBER_OF_TRIGGER_BITS, -0.5, NUMBER_OF_TRIGGER_BITS - 0.5);
290
291
292 outputFile.open();
293
294 if (!outputFile.is_open()) {
295 FATAL("Error opening file " << outputFile << endl);
296 }
297
298 outputFile.put(*gRandom);
299 outputFile.put(JMeta(argc, argv));
300 outputFile.put(header);
301 outputFile.put(parameters);
302
303 JLimit_t limit = inputFile.getLimit();
304 counter_type number_of_events = 0;
305 int trigger_counter = 0;
306
307 for (JMultipleFileScanner<>::const_iterator file = inputFile.begin(); file != inputFile.end(); ++file) {
308
309 int mc_run_id = 0;
310
311 try {
312
313 const JHead head(getHeader(*file));
314
315 mc_run_id = head.start_run.run_id;
316 }
317 catch(const JException& error) {
318 FATAL(error);
319 }
320
322
323 limit.setLowerLimit(limit.getLowerLimit() - in.skip(limit.getLowerLimit()));
324
325 for ( ; in.hasNext() && number_of_events != limit; ++number_of_events) {
326
327 STATUS("event: " << setw(10) << number_of_events << '\r'); DEBUG(endl);
328
329 Evt* event = in.next();
330
331 event->mc_run_id = mc_run_id;
332
333 DEBUG(*event << endl);
334
335 bool trigger = false;
336
337 if (!event->mc_hits.empty()) {
338
339 int frame_index = (int) in.getCounter() + 1; // 1 event / slice
340
341 if (runbyrun.is_valid() && runbyrun.hasNext()) {
342
343 summaryRouter.update(runbyrun.next());
344
345 summaryRouter.correct(dynamic_cast<const JPMTDefaultSimulatorInterface&>(simbad.getPMTSimulator()));
346
347 frame_index = summaryRouter.getFrameIndex();
348 run = summaryRouter.getRunNumber();
349 }
350
351 // set the event time!
352
353 JTimeRange timeRange = getTimeRange(*event, period);
354
355 if (!timeRange.is_valid()) {
356 timeRange.setRange(0.0,0.0);
357 }
358
359 const double t0 = 0.5 * (timeRange.getLowerLimit() + timeRange.getUpperLimit());
360 const double t1 = gRandom->Rndm() * getFrameTime();
361
362 event->mc_t = getTimeOfFrame(frame_index) + t1 - t0; // time since start of data taking run
363
364 timeRange.add(event->mc_t);
365 timeRange.add(period);
366
367 JDAQUTCExtended utc(JDAQUTCExtended::getInstance().getTimeNanoSecond() +
368 getTimeOfFrame(trigger_counter + 1)); // ensure incremental UTC times (e.g. for JDAQSplit.cc)
369
370 if (event->mc_event_time != TTimeStamp(0)) {
371 utc = getDAQUTCExtended(event->mc_event_time, t1); // set UTC time according Monte Carlo event
372 }
373
374 const JDAQChronometer chronometer(detectorB.getID(), (run != -1 ? run : mc_run_id), frame_index, utc);
375
376 const JEventTimeslice timeslice(chronometer, simbad, *event, period);
377
378 DEBUG(timeslice << endl);
379
380
381 timesliceRouter.configure(timeslice);
382
383 JTimeslice_t timesliceL0(timeslice.getDAQChronometer());
384 JTimeslice_t timesliceL1(timeslice.getDAQChronometer());
385 JTimeslice_t timesliceL2(timeslice.getDAQChronometer());
386 JTimeslice_t timesliceSN(timeslice.getDAQChronometer());
387
388 for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) {
389
390 if (moduleRouter.hasModule(super_frame->getModuleID())) {
391
392 // calibration
393
394 const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
395 const JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
396
397 // L0
398
399 timesliceL0.push_back(JSuperFrame1D_t(buffer));
400
401 // L1
402
403 timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
404 super_frame->getModuleIdentifier(),
405 module.getPosition()));
406
407 buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
408
409 // L2
410
411 timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
412 super_frame->getModuleIdentifier(),
413 module.getPosition()));
414
415 buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
416
417 // SN
418
419 timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
420 super_frame->getModuleIdentifier(),
421 module.getPosition()));
422
423 buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
424
425 DEBUG("L0 " << setw(8) << timesliceL0.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL0.rbegin()->size() << endl);
426 DEBUG("L1 " << setw(8) << timesliceL1.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL1.rbegin()->size() << endl);
427 DEBUG("L2 " << setw(8) << timesliceL2.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL2.rbegin()->size() << endl);
428 DEBUG("SN " << setw(8) << timesliceSN.rbegin()->getModuleID() << ' ' << setw(8) << timesliceSN.rbegin()->size() << endl);
429 }
430 }
431
432
433 // Trigger
434
435 JTriggerInput trigger_input(timesliceL2);
436 JTriggerOutput trigger_output;
437
438 trigger3DMuon (trigger_input, back_inserter(trigger_output));
439 trigger3DShower(trigger_input, back_inserter(trigger_output));
440 triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
441
442 trigger_output.merge(JEventOverlap(parameters.TMaxEvent_ns));
443
444 for (JTriggerOutput::const_iterator to = trigger_output.begin(); to != trigger_output.end(); ++to) {
445
446 for (int i = 0; i != h1.GetNbinsX(); ++i) {
447 if (to->hasTriggerBit(i)) {
448 h1.Fill((double) i);
449 }
450 }
451
452 JTimeRange eventTime = getTimeRange(*to).add(getTimeOfRTS(*to));
453
454 DEBUG("Event time: "
455 << to->getFrameIndex() << ' '
456 << eventTime << ' '
457 << timeRange << endl);
458
459 if (timeRange.overlap(eventTime)) {
460
461 JTriggeredEvent tev(*to,
462 timesliceRouter,
463 moduleRouter,
464 parameters.TMaxLocal_ns,
465 getTimeRange(parameters));
466
467 // Set the event counter to the index of the Monte Carlo event in the output.
468
469 tev.setCounter(trigger_counter);
470
471 outputFile.put(tev);
472
473 trigger = true;
474 }
475 }
476
477
478 if (!triggeredEventsOnly || trigger) {
479
480 if (parameters.writeL0()) {
481 outputFile.put(timeslice);
482 }
483
484 if (parameters.writeL1()) {
485 outputFile.put(JTimesliceL1<JDAQTimesliceL1>(timesliceL1, timesliceRouter, moduleRouter, parameters.TMaxLocal_ns));
486 }
487
488 if (parameters.writeL2()) {
489 outputFile.put(JTimesliceL1<JDAQTimesliceL2>(timesliceL2, timesliceRouter, moduleRouter, parameters.L2.TMaxLocal_ns));
490 }
491
492 if (parameters.writeSN()) {
493 outputFile.put(JTimesliceL1<JDAQTimesliceSN>(timesliceSN, timesliceRouter, moduleRouter, parameters.SN.TMaxLocal_ns));
494 }
495
496 if (parameters.writeSummary()) {
497 outputFile.put(JSummaryslice(chronometer,simbad));
498 }
499 }
500 }
501
502 if (!triggeredEventsOnly || trigger) {
503
504 outputFile.put(*event);
505
506 ++trigger_counter;
507 }
508 }
509 }
510 STATUS(endl);
511
512
514
515 io >> outputFile;
516
517 outputFile.put(h1);
518 outputFile.put(*gRandom);
519 outputFile.close();
520}
string outputFile
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define STATUS(A)
Definition JMessage.hh:63
#define NOTICE(A)
Definition JMessage.hh:64
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:69
#define WARNING(A)
Definition JMessage.hh:65
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Monte Carlo run header.
Definition JHead.hh:1236
JAANET::DAQ DAQ
Definition JHead.hh:1607
void merge(const JMatch_t &match)
Merge events.
Detector data structure.
Definition JDetector.hh:96
void setPMTStatus(const int bit)
Set status of all PMTs.
Definition JDetector.hh:207
static double getSigma()
Get intrinsic time smearing of K40 coincidences.
static void setSigma(const double sigma)
Set intrinsic time smearing of K40 coincidences.
Default implementation of the simulation of K40 background.
Router for direct addressing of module data in detector data structure.
Data structure for a composite optical module.
Definition JModule.hh:75
Auxiliary class for map of PMT parameters.
double getQE(const JPMTIdentifier &id) const
Get QE of given PMT.
bool is_valid() const
Check validity of PMT parameters.
const JPosition3D & getPosition() const
Get position.
General exception.
Definition JException.hh:24
virtual const char * what() const override
Get error message.
Definition JException.hh:64
int getID() const
Get identifier.
Definition JObjectID.hh:50
virtual bool hasNext() override
Check availability of next element.
virtual const pointer_type & next() override
Get next element.
static void Throw(const bool option)
Enable/disable throw option.
Definition JThrow.hh:37
Utility class to parse command line options.
Definition JParser.hh:1698
Object writing to file.
Router for fast addressing of summary data in KM3NETDAQ::JDAQSummaryslice data structure as a functio...
void update(const JDAQSummaryslice *ps)
Update router.
void setRange(const range_type &range)
Set range.
Definition JRange.hh:146
bool is_valid() const
Check validity of range.
Definition JRange.hh:311
bool overlap(const range_type &range) const
Test overlap with given range.
Definition JRange.hh:382
T getLowerLimit() const
Get lower limit.
Definition JRange.hh:202
void setLowerLimit(argument_type x)
Set lower limit.
Definition JRange.hh:224
range_type & add(argument_type x)
Add offset.
Definition JRange.hh:446
T getUpperLimit() const
Get upper limit.
Definition JRange.hh:213
CLB simulation based on run-by-run information.
K40 simulation based on run-by-run information.
PMT simulation based on run-by-run information.
1-dimensional frame with time calibrated data from one optical module.
2-dimensional frame with time calibrated data from one optical module.
Auxiliary class to build JDAQTimeslice for L1 timeslice.
Data structure for input to trigger algorithm.
Auxiliary class to build JDAQEvent for a triggered event.
Data structure for UTC time.
static const JDAQUTCExtended & getInstance()
Get arbitrary offset (e.g.
JTimeRange getTimeRange(const Evt &event)
Get time range (i.e. time between earliest and latest hit) of Monte Carlo event.
void copy(const Head &from, JHead &to)
Copy header from from to to.
Definition JHead.cc:162
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
double getMaximalDistance(const JDetector &detector, const bool option=false)
Get maximal distance between modules in detector.
@ debug_t
debug
Definition JMessage.hh:29
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Long64_t counter_type
Type definition for counter.
double getLivetime(const std::string &file_name)
Get data taking live time.
JTriggerParameters getTriggerParameters(const JMultipleFileScanner_t &file_list)
Get trigger parameters.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
double getFrameTime()
Get frame time duration.
Definition JDAQClock.hh:162
void setDAQLongprint(const bool option)
Set DAQ print option.
Definition JDAQPrint.hh:28
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
double getMaximalTime(const double R_Hz)
Get maximal time for given rate.
JDAQUTCExtended getDAQUTCExtended(const TTimeStamp &t0, const double t1=0.0)
Get DAQ UTC time.
static const int HIGH_RATE_VETO_DISABLE
Enable (disable) use of high-rate veto test if this status bit is 0 (1);.
Definition pmt_status.hh:13
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition Evt.hh:21
int mc_run_id
MC run identifier.
Definition Evt.hh:27
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Definition Head.hh:65
Match of two events considering overlap in time.
Acoustic hit.
Definition JBillabong.cc:70
Type list.
Definition JTypeList.hh:23
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition JParser.hh:68
Auxiliary class for K40 rates.
Definition JK40Rates.hh:41
double getSinglesRate() const
Get singles rate.
Definition JK40Rates.hh:71
void correct(const double QE)
Correct rates for global efficiency,.
Definition JK40Rates.hh:130
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128
Auxiliary class for ROOT I/O of application specific meta data.
Definition JMeta.hh:72
Auxiliary class to select summary data (KM3NETDAQ::JDAQSummaryslice) from the specified raw data file...
Definition JRunByRun.hh:34
bool is_valid() const
Check validity of run by run options.
Definition JRunByRun.hh:48
Router for fast addressing of hits in KM3NETDAQ::JDAQTimeslice data structure as a function of the op...
Timeslice with Monte Carlo event.
Auxiliary class to create summary data.