Jpp  19.1.0-rc.1
the software that should make you happy
Functions
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

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 
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 }
double getSigma(vector< double > &v)
get standard deviation of vector content
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:2158
Monte Carlo run header.
Definition: JHead.hh:1236
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
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.
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:1714
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
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.
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
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.
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:84
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...
Timeslice with Monte Carlo event.
Auxiliary class to create summary data.