53   JLimit_t&      numberOfEvents = inputFile.getLimit();
 
   62     JParser<> zap(
"Example program to verify Monte Carlo data.");
 
   65     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
   74   catch(
const exception &error) {
 
   75     FATAL(error.what() << endl);
 
   81   if (detectorFile != 
"") {
 
   96   NOTICE(
"Apply detector offset " << offset << endl); 
 
  104   for ( ; 
x <  -10.0; 
x +=  5.0) { X.push_back(
x); }
 
  105   for ( ; 
x <  +20.0; 
x +=  1.0) { X.push_back(
x); }
 
  106   for ( ; 
x <  +50.0; 
x +=  2.0) { X.push_back(
x); }
 
  107   for ( ; 
x < +100.0; 
x +=  5.0) { X.push_back(
x); }
 
  108   for ( ; 
x < +250.0; 
x += 10.0) { X.push_back(
x); }
 
  109   for ( ; 
x < +500.0; 
x += 25.0) { X.push_back(
x); }
 
  110   for ( ; 
x < +900.0; 
x += 50.0) { X.push_back(
x); }
 
  116   size_t number_of_events = 0;
 
  122     const Evt* 
event = inputFile.
next();
 
  124     if (!event->mc_hits.empty()) {
 
  128     size_t number_of_muons = 0;
 
  132         number_of_muons += 1;
 
  136     if (!M(number_of_muons)) {
 
  140     if (event->mc_hits.size() < L_cut) 
continue; 
 
  144       npe[hit->type] += hit->a;
 
  146       const double t1 = 
getTime(*hit);
 
  149                                                   event->mc_trks.end(),
 
  152       if (track != event->mc_trks.end() && 
is_muon(*track)) {
 
  156         if (router.hasPMT(hit->pmt_id)) {
 
  158           const JPMT&  pmt = router.getPMT(hit->pmt_id);
 
  159           const double t0  = muon.
getT(pmt);
 
  161           H1[pmt.
getID()]->Fill(t1 - t0, hit->a);
 
  163           H1->Fill(t1 - t0, hit->a);
 
  170   if (number_of_events != 0) {
 
  172     const double W = 1.0 / (double) number_of_events;
 
  183     cout << 
"photon-electron statistics" << endl;
 
  185     for (
const auto& i : npe) {
 
  186       cout << setw(3) << i.first << 
' ' << setw(6) << i.second << endl;
 
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Router for direct addressing of PMT data in detector data structure.
 
Data structure for PMT geometry, calibration and status.
 
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
 
int getID() const
Get identifier.
 
Utility class to parse command line options.
 
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
 
virtual bool hasNext() override
Check availability of next element.
 
counter_type getCounter() const
Get counter.
 
virtual const pointer_type & next() override
Get next element.
 
JTrack3E getTrack(const Trk &track)
Get track.
 
double getTime(const Hit &hit)
Get true time of hit.
 
JPosition3D getPosition(const Vec &pos)
Get position.
 
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
 
Vec getOffset(const JHead &header)
Get offset.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
void convertToPDF(TH1 &h1, const std::string &option="NW", const double factor=1.0)
Convert 1D histogram to PDF.
 
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
 
Type definition of range.
 
Auxiliary class for defining the range of iterations of objects.
 
The Vec class is a straightforward 3-d vector, which also works in pyroot.