Jpp  master_rocky-43-ge265d140c
the software that should make you happy
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 
16 #include "JDAQ/JDAQTimesliceIO.hh"
17 #include "JDAQ/JDAQEventIO.hh"
19 #include "JDAQ/JDAQToolkit.hh"
22 
23 #include "JAAnet/JHead.hh"
24 #include "JAAnet/JHeadToolkit.hh"
25 #include "JAAnet/JAAnetToolkit.hh"
26 
27 #include "JPhysics/JK40Rates.hh"
28 
29 #include "JDetector/JDetector.hh"
33 #include "JDetector/JPMTRouter.hh"
34 #include "JDetector/JTimeRange.hh"
39 
40 #include "JTrigger/JHit.hh"
41 #include "JTrigger/JHitToolkit.hh"
42 #include "JTrigger/JTimeslice.hh"
45 #include "JTrigger/JHitL0.hh"
46 #include "JTrigger/JHitL1.hh"
47 #include "JTrigger/JBuildL1.hh"
48 #include "JTrigger/JBuildL2.hh"
52 #include "JTrigger/JTriggerBits.hh"
56 #include "JTrigger/JTimesliceL1.hh"
64 
70 #include "JSupport/JSupport.hh"
71 #include "JSupport/JRunByRun.hh"
72 #include "JSupport/JMeta.hh"
73 
74 #include "Jeep/JPrint.hh"
75 #include "Jeep/JParser.hh"
76 #include "Jeep/JMessage.hh"
77 
78 
79 /**
80  * \file
81  * Auxiliary program to trigger Monte Carlo events.
82  *
83  * The options
84  * - <tt>-a</tt> refers to the detector configuration that is used to convert Monte Carlo true information to raw data; and
85  * - <tt>-b</tt> refers to the detector configuration that is used to convert raw data to calibrated data.
86  *
87  * The event counter of the triggered events, as returned by KM3NETDAQ::JDAQEvent::getCounter(),
88  * is set to the corresponding index of the Monte Carlo event in the output.\n
89  * This allows for correlating the DAQ event to the Monte Carlo event.\n
90  * The time of the DAQ hits can be correlated to the time of the Monte Carlo hits using the frame index
91  * and the time of the Monte Carlo event (Evt::mc_t), respectively (see also time_converter).\n
92  * The universal time of the DAQ event is set to the universal time of the Monte Carlo event
93  * with a correction for the time of the event (read hits) within the time slice.\n
94  * In run-by-run mode, the trigger parameters as well as the singles rates and status of the PMTs
95  * are read from the given raw data file.\n
96  * The two-fold (and higher) coincidence rates should still be provided on the command line.
97  *
98  * \author mdejong
99  */
100 int main(int argc, char **argv)
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 
150  JK40DefaultSimulatorInterface::setSigma(sigma_ns);
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 
170  JPMTParametersMap::Throw(true);
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 
321  JMultipleFileScanner<Evt> in(*file);
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 }
Definition of hit and track types and auxiliary methods for handling Monte Carlo data.
double getSigma(vector< double > &v)
get standard deviation of vector content
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:69
#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
Default implementation of the simulation of K40 background.
Router for direct addressing of module data in detector data structure.
const JModule & getModule(const JObjectID &id) const
Get module parameters.
bool hasModule(const JObjectID &id) const
Has module.
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.
Definition: JPosition3D.hh:130
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 const pointer_type & next() override
Get next element.
virtual bool hasNext() override
Check availability of next element.
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
range_type & add(argument_type x)
Add offset.
Definition: JRange.hh:446
T getLowerLimit() const
Get lower limit.
Definition: JRange.hh:202
void setLowerLimit(argument_type x)
Set lower limit.
Definition: JRange.hh:224
T getUpperLimit() const
Get upper limit.
Definition: JRange.hh:213
Template L1 hit builder.
Definition: JBuildL1.hh:90
Template L2 builder.
Definition: JBuildL2.hh:49
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.
Definition: JTimesliceL1.hh:38
Time slice with calibrated data.
Definition: JTimeslice.hh:29
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.
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
T & getInstance(const T &object)
Get static instance from temporary object.
Definition: JObject.hh:75
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.
double getTimeOfRTS(const JDAQChronometer &chronometer)
Get time of last RTS in ns since start of run for a given chronometer.
static const unsigned int NUMBER_OF_TRIGGER_BITS
Number of trigger bits.
JDAQUTCExtended getDAQUTCExtended(const TTimeStamp &t0, const double t1=0.0)
Get DAQ UTC time.
Definition: JDAQToolkit.hh:26
Definition: JSTDTypes.hh:14
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
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
int run_id
MC run number.
Definition: JHead.hh:143
Match of two events considering overlap in time.
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
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.