Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
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
15
17#include "JDAQ/JDAQEventIO.hh"
19#include "JDAQ/JDAQToolkit.hh"
22
23#include "JAAnet/JHead.hh"
26
27#include "JPhysics/JK40Rates.hh"
28
39
40#include "JTrigger/JHit.hh"
45#include "JTrigger/JHitL0.hh"
46#include "JTrigger/JHitL1.hh"
47#include "JTrigger/JBuildL1.hh"
48#include "JTrigger/JBuildL2.hh"
64
70#include "JSupport/JSupport.hh"
71#include "JSupport/JRunByRun.hh"
72#include "JSupport/JMeta.hh"
73
74#include "JROOT/JRandom.hh"
75
76#include "Jeep/JPrint.hh"
77#include "Jeep/JParser.hh"
78#include "Jeep/JMessage.hh"
79
80namespace {
81
83
84
85 /**
86 * Get time offset of detector.
87 *
88 * \param detector detector
89 * \return time offset [ns]
90 */
91 inline double getT0(const JDetector& detector)
92 {
93 using namespace std;
94 using namespace JPP;
95
96 double T0_ns = numeric_limits<double>::max();
97
98 for (const JModule& module : detector) {
99 for (const JPMT& pmt : module) {
100 if (pmt.getT0() < T0_ns) {
101 T0_ns = pmt.getT0();
102 }
103 }
104 }
105
106 return T0_ns;
107 }
108}
109
110/**
111 * \file
112 * Auxiliary program to trigger Monte Carlo events.
113 *
114 * The options
115 * - <tt>-a</tt> refers to the detector configuration that is used to convert Monte Carlo true information to raw data; and
116 * - <tt>-b</tt> refers to the detector configuration that is used to convert raw data to calibrated data.
117 *
118 * The event counter of the triggered events, as returned by KM3NETDAQ::JDAQEvent::getCounter(),
119 * is set to the corresponding index of the Monte Carlo event in the output.\n
120 * This allows for correlating the DAQ event to the Monte Carlo event.\n
121 * The time of the DAQ hits can be correlated to the time of the Monte Carlo hits using the frame index
122 * and the time of the Monte Carlo event (Evt::mc_t), respectively (see also time_converter).\n
123 * The universal time of the DAQ event is set to the universal time of the Monte Carlo event
124 * with a correction for the time of the event (read hits) within the time slice.\n
125 * In run-by-run mode, the trigger parameters as well as the singles rates and status of the PMTs
126 * are read from the given raw data file.\n
127 * The two-fold (and higher) coincidence rates should still be provided on the command line.
128 *
129 * \author mdejong
130 */
131int main(int argc, char **argv)
132{
133 using namespace std;
134 using namespace JPP;
135 using namespace KM3NETDAQ;
136
138
139 JMultipleFileScanner<> inputFile;
141 JLimit_t& numberOfEvents = inputFile.getLimit();
142 string detectorFileA;
143 string detectorFileB;
144 int run;
145 JTriggerParameters parameters;
146 bool triggeredEventsOnly;
147 JPMTParametersMap pmtParameters;
148 JK40Rates rates_Hz;
149 JRunByRun runbyrun;
150 double sigma_ns;
151 JRandom seed;
152 int debug;
153
154 try {
155
156 JParser<> zap("Auxiliary program to trigger Monte Carlo events.");
157
158 zap['f'] = make_field(inputFile, "input file (output of detector simulation)");
159 zap['o'] = make_field(outputFile, "output file") = "trigger_efficieny.root";
160 zap['n'] = make_field(numberOfEvents) = JLimit::max();
161 zap['a'] = make_field(detectorFileA, "detector used for conversion from Monte Carlo truth to raw data.");
162 zap['b'] = make_field(detectorFileB, "detector used for conversion of raw data to calibrated data.") = "";
163 zap['R'] = make_field(run, "run number") = -1;
164 zap['r'] = make_field(runbyrun, "option for run-by-run mode") = JPARSER::initialised();
165 zap['@'] = make_field(parameters, "Trigger parameters (or corresponding file name)") = JPARSER::initialised();
166 zap['O'] = make_field(triggeredEventsOnly, "optionally write only triggered events.");
167 zap['P'] = make_field(pmtParameters, "PMT simulation data (or corresponding file name)") = JPARSER::initialised();
168 zap['B'] = make_field(rates_Hz, "background rates [Hz]") = JPARSER::initialised();
169 zap['s'] = make_field(sigma_ns, "intrinsic time smearing of K40 coincidences [ns]") = JK40DefaultSimulatorInterface::getSigma();
170 zap['S'] = make_field(seed, "seed") = 0;
171 zap['d'] = make_field(debug, "debug") = 0;
172
173 zap(argc, argv);
174 }
175 catch(const exception &error) {
176 FATAL(error.what() << endl);
177 }
178
179 seed.set(gRandom);
180
182
184
185 if (detectorFileB == "") {
186 detectorFileB = detectorFileA;
187 }
188
189
190 JDetector detectorA;
191 JDetector detectorB;
192
193 try {
194 load(detectorFileA, detectorA);
195 load(detectorFileB, detectorB);
196 }
197 catch(const JException& error) {
198 FATAL(error);
199 }
200
201 const double TA_ns = getT0(detectorA);
202 const double TB_ns = getT0(detectorB);
203
205
206 if (!pmtParameters.is_valid()) {
207 FATAL("Invalid PMT parameters " << pmtParameters << endl);
208 }
209
210 if (pmtParameters.getQE() != 1.0) {
211
212 WARNING("Correct background rates with global efficiency " << pmtParameters.getQE() << endl);
213
214 rates_Hz.correct(pmtParameters.getQE());
215 }
216
217 Head header;
218
219 try {
220 header = getHeader(inputFile);
221 }
222 catch(const JException& error) {
223 FATAL(error);
224 }
225
226 const JModuleRouter moduleRouter(detectorB);
227 JDetectorSimulator simbad (detectorA);
228 JSummaryRouter summaryRouter;
229
230 if (runbyrun.is_valid()) {
231
232 NOTICE("Using run-by-run:" << endl << runbyrun << endl);
233
234 if (!runbyrun.hasNext()) {
235 FATAL("Run-by-run simulation yields no input." << endl);
236 }
237
238 if (rates_Hz.getSinglesRate() != 0.0) {
239 WARNING("Run-by-run simulation discards singles rate [Hz] " << rates_Hz.getSinglesRate() << endl);
240 }
241
242 try {
243 simbad.reset(new JK40RunByRunSimulator(summaryRouter, rates_Hz));
244 simbad.reset(new JPMTRunByRunSimulator(summaryRouter, pmtParameters, detectorA));
245 simbad.reset(new JCLBRunByRunSimulator(summaryRouter));
246 }
247 catch(const JException& error) {
248 FATAL(error.what() << endl);
249 }
250
251 try {
252
253 parameters = getTriggerParameters(runbyrun->getFilelist());
254
255 NOTICE("Set trigger parameters from run-by-run input." << endl);
256 }
257 catch(const JException& error) {
258 WARNING("No trigger parameters from run-by-run input;\nrun with default/user input." << endl);
259 }
260
261 // set live time
262
263 JHead buffer(header);
264
265 buffer.DAQ.livetime_s = getLivetime(runbyrun->getFilelist());
266 buffer.push(&JHead::DAQ);
267
268 copy(buffer, header);
269
270 } else {
271
272 NOTICE("Using fixed rates [Hz]: " << rates_Hz << endl);
273
274 try {
275 simbad.reset(new JK40DefaultSimulator(rates_Hz));
276 simbad.reset(new JPMTDefaultSimulator(pmtParameters, detectorA));
277 simbad.reset(new JCLBDefaultSimulator());
278 }
279 catch(const JException& error) {
280 FATAL(error.what() << endl);
281 }
282 }
283
284 // detector
285
286 if (parameters.disableHighRateVeto) {
287
288 NOTICE("Disabling high-rate veto of all PMTs." << endl);
289
291 }
292
293 parameters.set(getMaximalDistance(detectorB));
294
295 DEBUG("Trigger:" << endl << parameters << endl);
296 DEBUG("PMT parameters:" << endl << pmtParameters << endl);
297
298 const double Tmax = max(getMaximalTime(detectorA),
299 getMaximalTime(detectorB));
300
301 const JTimeRange period(-(Tmax + parameters.TMaxLocal_ns),
302 +(Tmax + parameters.TMaxLocal_ns));
303
304 typedef double hit_type;
305
306 typedef JSuperFrame1D<hit_type> JSuperFrame1D_t;
307 typedef JSuperFrame2D<hit_type> JSuperFrame2D_t;
308 typedef JTimeslice <hit_type> JTimeslice_t;
309 typedef JBuildL1 <hit_type> JBuildL1_t;
310 typedef JBuildL2 <hit_type> JBuildL2_t;
311
312 const JBuildL1_t buildL1(parameters);
313 const JBuildL2_t buildL2(parameters.L2);
314 const JBuildL2_t buildSN(parameters.SN);
315
316 JTimesliceRouter timesliceRouter(parameters.numberOfBins);
317
318 const JTrigger3DMuon trigger3DMuon (parameters);
319 const JTrigger3DShower trigger3DShower(parameters);
320 const JTriggerMXShower triggerMXShower(parameters, detectorB);
321
322
323 TH1D h1("Trigger bits", NULL, NUMBER_OF_TRIGGER_BITS, -0.5, NUMBER_OF_TRIGGER_BITS - 0.5);
324
325
326 outputFile.open();
327
328 if (!outputFile.is_open()) {
329 FATAL("Error opening file " << outputFile << endl);
330 }
331
332 outputFile.put(*gRandom);
333 outputFile.put(JMeta(argc, argv));
334 outputFile.put(header);
335 outputFile.put(parameters);
336
337 JLimit_t limit = inputFile.getLimit();
338 counter_type number_of_events = 0;
339 int trigger_counter = 0;
340
341 for (JMultipleFileScanner<>::const_iterator file = inputFile.begin(); file != inputFile.end(); ++file) {
342
343 int mc_run_id = 0;
344
345 try {
346
347 const JHead head(getHeader(*file));
348
349 mc_run_id = head.start_run.run_id;
350 }
351 catch(const JException& error) {
352 FATAL(error);
353 }
354
356
357 limit.setLowerLimit(limit.getLowerLimit() - in.skip(limit.getLowerLimit()));
358
359 for ( ; in.hasNext() && number_of_events != limit; ++number_of_events) {
360
361 STATUS("event: " << setw(10) << number_of_events << '\r'); DEBUG(endl);
362
363 Evt* event = in.next();
364
365 event->mc_run_id = mc_run_id;
366
367 DEBUG(*event << endl);
368
369 bool trigger = false;
370
371 if (!event->mc_hits.empty()) {
372
373 int frame_index = (int) in.getCounter() + 1; // 1 event / slice
374
375 if (runbyrun.is_valid() && runbyrun.hasNext()) {
376
377 summaryRouter.update(runbyrun.next());
378
379 summaryRouter.correct(dynamic_cast<const JPMTDefaultSimulatorInterface&>(simbad.getPMTSimulator()));
380
381 frame_index = summaryRouter.getFrameIndex();
382 run = summaryRouter.getRunNumber();
383 }
384
385 // set the event time!
386
387 JTimeRange timeRange = getTimeRange(*event, period);
388
389 if (!timeRange.is_valid()) {
390 timeRange.setRange(0.0,0.0);
391 }
392
393 const double t0 = 0.5 * (timeRange.getLowerLimit() + timeRange.getUpperLimit());
394 const double t1 = gRandom->Rndm() * getFrameTime() + TA_ns;
395
396 DEBUG("Start time: " << FIXED(12,2) << t0 << ' ' << FIXED(12,2) << t1 << ' ' << FIXED(9,2) << TA_ns << endl);
397
398 event->mc_t = getTimeOfFrame(frame_index) + t1 - t0; // time since start of data taking run
399
400 timeRange.add(event->mc_t);
401 timeRange.add(period);
402
403 JDAQUTCExtended utc(JDAQUTCExtended::getInstance().getTimeNanoSecond() +
404 getTimeOfFrame(trigger_counter + 1)); // ensure incremental UTC times (e.g. for JDAQSplit.cc)
405
406 if (event->mc_event_time != TTimeStamp(0)) {
407 utc = getDAQUTCExtended(event->mc_event_time, t1); // set UTC time according Monte Carlo event
408 }
409
410 const JDAQChronometer chronometer(detectorB.getID(), (run != -1 ? run : mc_run_id), frame_index, utc);
411
412 const JEventTimeslice timeslice(chronometer, simbad, *event, period);
413
414 DEBUG(timeslice << endl);
415
416
417 timesliceRouter.configure(timeslice);
418
419 JTimeslice_t timesliceL0(timeslice.getDAQChronometer());
420 JTimeslice_t timesliceL1(timeslice.getDAQChronometer());
421 JTimeslice_t timesliceL2(timeslice.getDAQChronometer());
422 JTimeslice_t timesliceSN(timeslice.getDAQChronometer());
423
424 for (JDAQTimeslice::const_iterator super_frame = timeslice.begin(); super_frame != timeslice.end(); ++super_frame) {
425
426 if (moduleRouter.hasModule(super_frame->getModuleID())) {
427
428 // calibration
429
430 const JModule& module = moduleRouter.getModule(super_frame->getModuleID());
431 const JSuperFrame2D_t& buffer = JSuperFrame2D_t::demultiplex(*super_frame, module);
432
433 // L0
434
435 timesliceL0.push_back(JSuperFrame1D_t(buffer));
436
437 // L1
438
439 timesliceL1.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
440 super_frame->getModuleIdentifier(),
441 module.getPosition()));
442
443 buildL1(*timesliceL0.rbegin(), back_inserter(*timesliceL1.rbegin()));
444
445 // L2
446
447 timesliceL2.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
448 super_frame->getModuleIdentifier(),
449 module.getPosition()));
450
451 buildL2(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceL2.rbegin()));
452
453 // SN
454
455 timesliceSN.push_back(JSuperFrame1D_t(super_frame->getDAQChronometer(),
456 super_frame->getModuleIdentifier(),
457 module.getPosition()));
458
459 buildSN(buffer, *timesliceL1.rbegin(), back_inserter(*timesliceSN.rbegin()));
460
461 DEBUG("L0 " << setw(8) << timesliceL0.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL0.rbegin()->size() << endl);
462 DEBUG("L1 " << setw(8) << timesliceL1.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL1.rbegin()->size() << endl);
463 DEBUG("L2 " << setw(8) << timesliceL2.rbegin()->getModuleID() << ' ' << setw(8) << timesliceL2.rbegin()->size() << endl);
464 DEBUG("SN " << setw(8) << timesliceSN.rbegin()->getModuleID() << ' ' << setw(8) << timesliceSN.rbegin()->size() << endl);
465 }
466 }
467
468
469 // Trigger
470
471 JTriggerInput trigger_input(timesliceL2);
472 JTriggerOutput trigger_output;
473
474 trigger3DMuon (trigger_input, back_inserter(trigger_output));
475 trigger3DShower(trigger_input, back_inserter(trigger_output));
476 triggerMXShower(trigger_input, timesliceL0, back_inserter(trigger_output));
477
478 trigger_output.merge(JEventOverlap(parameters.TMaxEvent_ns));
479
480 for (JTriggerOutput::const_iterator to = trigger_output.begin(); to != trigger_output.end(); ++to) {
481
482 for (int i = 0; i != h1.GetNbinsX(); ++i) {
483 if (to->hasTriggerBit(i)) {
484 h1.Fill((double) i);
485 }
486 }
487
488 JTimeRange eventTime = getTimeRange(*to).add(getTimeOfRTS(*to));
489
490 eventTime.add(TA_ns);
491 eventTime.sub(TB_ns);
492
493 DEBUG("Event time: "
494 << to->getFrameIndex() << ' '
495 << eventTime << ' '
496 << timeRange << ' '
497 << (timeRange.overlap(eventTime) ? "Y" : "N") << endl);
498
499 if (timeRange.overlap(eventTime)) {
500
501 JTriggeredEvent tev(*to,
502 timesliceRouter,
503 moduleRouter,
504 parameters.TMaxLocal_ns,
505 getTimeRange(parameters));
506
507 // Set the event counter to the index of the Monte Carlo event in the output.
508
509 tev.setCounter(trigger_counter);
510
511 outputFile.put(tev);
512
513 trigger = true;
514 }
515 }
516
517
518 if (!triggeredEventsOnly || trigger) {
519
520 if (parameters.writeL0()) {
521 outputFile.put(timeslice);
522 }
523
524 if (parameters.writeL1()) {
525 outputFile.put(JTimesliceL1<JDAQTimesliceL1>(timesliceL1, timesliceRouter, moduleRouter, parameters.TMaxLocal_ns));
526 }
527
528 if (parameters.writeL2()) {
529 outputFile.put(JTimesliceL1<JDAQTimesliceL2>(timesliceL2, timesliceRouter, moduleRouter, parameters.L2.TMaxLocal_ns));
530 }
531
532 if (parameters.writeSN()) {
533 outputFile.put(JTimesliceL1<JDAQTimesliceSN>(timesliceSN, timesliceRouter, moduleRouter, parameters.SN.TMaxLocal_ns));
534 }
535
536 if (parameters.writeSummary()) {
537 outputFile.put(JSummaryslice(chronometer,simbad));
538 }
539 }
540 }
541
542 if (!triggeredEventsOnly || trigger) {
543
544 outputFile.put(*event);
545
546 ++trigger_counter;
547 }
548 }
549 }
550 STATUS(endl);
551
552
554
555 io >> outputFile;
556
557 outputFile.put(h1);
558 outputFile.put(*gRandom);
559 outputFile.close();
560}
Definition of hit and track types and auxiliary methods for handling Monte Carlo data.
string outputFile
Data structure for detector geometry and calibration.
Recording of objects on file according a format that follows from the file name extension.
Basic data structure for L0 hit.
Basic data structure for L1 hit.
Tools for handling different hit types.
General purpose messaging.
#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:72
#define WARNING(A)
Definition JMessage.hh:65
ROOT I/O of application specific meta data.
Map of associated modules in detector.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Direct access to PMT in detector data structure.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
I/O formatting auxiliaries.
Auxiliaries for creation of summary data.
Support methods.
ROOT TTree parameter settings of various packages.
Setting of trigger bits.
int main(int argc, char **argv)
Basic data structure for time and time over threshold information of hit.
Monte Carlo run header.
Definition JHead.hh:1236
JAANET::start_run start_run
Definition JHead.hh:1583
JAANET::DAQ DAQ
Definition JHead.hh:1607
void push(T JHead::*pd)
Push given data member to Head.
Definition JHead.hh:1374
void merge(const JMatch_t &match)
Merge events.
void reset(JK40Simulator *k40Simulator)
Reset K40 simulator.
const JPMTSimulator & getPMTSimulator() const
Get PMT simulator.
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.
bool hasModule(const JObjectID &id) const
Has module.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
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.
Data structure for PMT geometry, calibration and status.
Definition JPMT.hh:49
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.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
virtual const pointer_type & next() override
Get next element.
virtual skip_type skip(const skip_type ns) override
Skip items.
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
range_type & sub(argument_type x)
Subtract offset.
Definition JRange.hh:460
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.
const JDAQChronometer & getDAQChronometer() const
Get DAQ chronometer.
void setCounter(const JTriggerCounter_t counter)
Set trigger counter.
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:163
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
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Definition Head.hh:65
double livetime_s
Live time [s].
Definition JHead.hh:1053
Detector file.
Definition JHead.hh:227
int run_id
MC run number.
Definition JHead.hh:143
Match of two events considering overlap in time and position.
Acoustic hit.
Definition JBillabong.cc:70
Type list.
Definition JTypeList.hh:23
Template definition of random value generator.
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...
void configure(const JDAQTimeslice &timeslice)
Configure.
Timeslice with Monte Carlo event.
Auxiliary class to create summary data.