33{
   37 
   39 
   42  JAbstractHistogram_t    X;
   43  JAbstractHistogram_t    Y;
   45 
   46  try {
   47 
   48    JParser<> zap(
"Example program to histogram trigger efficiency.");
 
   49 
   52    zap[
'X'] = 
make_field(X, 
"Energy       binning") = JAbstractHistogram_t(20,  1e-3, 100.0);
 
   53    zap[
'Y'] = 
make_field(Y, 
"Zenith-angle binning") = JAbstractHistogram_t(20, -1.0,    1.0);    
 
   55 
   56    zap(argc, argv);
   57  }
   58  catch(const exception &error) {
   59    FATAL(error.what() << endl);
 
   60  }
   61 
   62 
   63  
   64 
   66 
   67  TH2D h0("h0", NULL,
   68          X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit(),
   69          Y.getNumberOfBins(), Y.getLowerLimit(), Y.getUpperLimit());
   70  TH2D h1("h1", NULL,
   71          X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit(),
   72          Y.getNumberOfBins(), Y.getLowerLimit(), Y.getUpperLimit());
   73  TH2D h2("h2", NULL,
   74          X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit(),
   75          Y.getNumberOfBins(), Y.getLowerLimit(), Y.getUpperLimit());
   76 
   77  h2.Sumw2();
   78 
   79  
   81      
   83      
   85      
   86    const Evt* 
event = ps;
 
   87    
   88    vector<Hit>::const_iterator hit = find_if_not(event->mc_hits.cbegin(), event->mc_hits.cend(), &
is_noise);
 
   89 
   90    vector<Trk>::const_iterator 
primary = find_if(event->mc_trks.cbegin(), event->mc_trks.cend(), &
is_initialstate);
 
   91 
   92    if (hit != event->mc_hits.cend() && 
primary != event->mc_trks.cend()) {
 
   94    }
   95  }
   97 
   98 
  100 
  101    STATUS(
"event: " << setw(10) << in.getCounter() << 
'\r'); 
DEBUG(endl);
 
  102    
  103    const Evt* 
event = in.next();
 
  104 
  105    vector<Hit>::const_iterator hit = find_if_not(event->mc_hits.cbegin(), event->mc_hits.cend(), &
is_noise);
 
  106 
  107    vector<Trk>::const_iterator 
primary = find_if(event->mc_trks.cbegin(), event->mc_trks.cend(), &
is_initialstate);
 
  108 
  109    if (hit != event->mc_hits.cend() && 
primary != event->mc_trks.cend()) {
 
  111    }
  112  }
  114 
  115 
  116  for (Int_t i = 1; i <= h1.GetNbinsX(); ++i) {
  117    for (Int_t 
j = 1; 
j <= h1.GetNbinsY(); ++
j) {
 
  118 
  119      const Double_t z1 = h1.GetBinContent(i,
j);
 
  120      const Double_t z0 = h0.GetBinContent(i,
j);
 
  121    
  122      if (z0 != 0.0) {
  123      
  124        const Double_t z3 = z1 / z0;
  125        const Double_t w3 = sqrt(z1 * (z0 - z1) / (z0*z0*z0));
  126      
  127        h2.SetBinContent(i, 
j, z3);
 
  128        h2.SetBinError  (i, 
j, w3);
 
  129      
  130      } else {
  131        ERROR(
"Bin " << h0.GetName() << 
"[" << i << 
"," << 
j << 
"] empty." << endl);
 
  132      }
  133    }
  134  }
  135    
  136  out.Write();
  137  out.Close();
  138}
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Utility class to parse command line options.
 
General purpose class for object reading from a list of file names.
 
virtual bool hasNext() override
Check availability of next element.
 
counter_type getCounter() const
Get counter.
 
bool is_initialstate(const Trk &track)
Test whether given track corresponds to an initial state particle.
 
bool is_noise(const Hit &hit)
Verify hit origin.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
KM3NeT DAQ data structures and auxiliaries.
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
 
General purpose class for multiple pointers.
 
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
 
virtual bool hasNext() override
Check availability of next element.
 
virtual const multi_pointer_type & next() override
Get next element.