Jpp  test_elongated_shower_pde
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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/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/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

int main ( int  argc,
char **  argv 
)

Definition at line 97 of file JTriggerEfficiency.cc.

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