28{
   31 
   35  int               NPE;
   36  int               numberOfHits;
   37  double            precision;
   39 
   40  try {
   41 
   42    JParser<> zap(
"Example program to histogram time over threshold distributions.");
 
   43 
   51 
   52    zap(argc, argv);
   53  }
   54  catch(const exception &error) {
   55    FATAL(error.what() << endl);
 
   56  }
   57 
   59 
   64 
   67 
   68 
   70 
   71  const double dx   =   1.0;
   72  const double xmin =   0.0 - 0.5 * dx;
   73  const double xmax = round(parameters.
saturation) - 0.5*dx;
 
   74  const int    nx   = (int) ((xmax - xmin) / dx);
   75 
   76  TH1D h0("h0", NULL, nx, xmin, xmax);
   77  TH1D h1("h1", NULL, nx, xmin, xmax);
   78  TH1D h2("h2", NULL, nx, xmin, xmax);
   79  TH1D h3("h3", NULL, 500, 0.0, 100.0);
   80 
   81  h1.Sumw2();
   82  h2.Sumw2();
   83 
   84  DEBUG(
"    ToT      Probability " << endl);
 
   85 
   86  for (int i = 1; i <= h0.GetNbinsX(); ++i) {
   87 
   88    const double x        = h0.GetBinCenter(i);
 
   89    const double y        = cpu.getTimeOverThresholdProbability(x,NPE);
 
   90 
   92          << 
FIXED(7,3) << x        << 
"   " 
   93          << 
FIXED(7,5) << y << endl);
 
   94 
   95    h0.SetBinContent(i, y);
   96  }
   97 
   98 
   99  if (numberOfHits > 0) {
  100 
  101    int number_of_hits = 0;
  102 
  103    for (int i = 0; i != numberOfHits; ++i) {
  104 
  105      const double npe = cpu.getRandomCharge(NPE);
  106 
  107      double tot_ns;
  108 
  109      try {
  110        tot_ns = cpu.getTimeOverThreshold(npe);
  112        continue;
  113      }
  114      
  115      if (tot_ns > 0.0) {
  116        
  117        ++number_of_hits;
  118 
  119        h1.Fill(tot_ns);
  120 
  121      }
  122    }
  123 
  124    h1.Scale(1.0 / (double) number_of_hits / dx);
  125  }
  126 
  127 
  128  if (numberOfHits > 0) {
  129 
  130    int number_of_hits = 0;
  131 
  132    const double t_ns = 25.0;
  133    
  134    for (int i = 0; i != numberOfHits; ++i) {
  135      
  136      input .clear();
  137      output.clear();
  138 
  140 
  141      simulator.processHits(pmt, 
calibration, status, input, output);
 
  142 
  144 
  145        ++number_of_hits;
  146 
  147        h2.Fill(hit->tot_ns);
  148        h3.Fill(hit->t_ns);
  149      }
  150    }
  151 
  152    h2.Scale(1.0 / (double) number_of_hits / dx);
  153  }
  154 
  155  out.Write();
  156  out.Close();
  157 
  159 
  160  for (int i = 1; i <= h0.GetNbinsX(); ++i) {
  161 
  162    const Double_t 
x  = h0.GetBinCenter (i);
 
  163    const Double_t y0 = h0.GetBinContent(i);
  164    const Double_t y1 = h1.GetBinContent(i);
  165    const Double_t y2 = h2.GetBinContent(i);
  166 
  167    DEBUG(
"[" << setw(3) << i << 
"]"  << 
' '  
  168          << 
FIXED(5,1) << x  << 
' ' 
  169          << 
FIXED(6,4) << y0 << 
' ' 
  170          << 
FIXED(6,4) << y1 << 
' ' 
  171          << 
FIXED(6,4) << y2 << endl);
 
  172 
  173    ASSERT(fabs(y0 - y1) < precision);
 
  174    ASSERT(fabs(y0 - y2) < precision);
 
  175  }
  176}
#define DEBUG(A)
Message macros.
 
#define ASSERT(A,...)
Assert macro.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Data structure for time calibration.
 
Template data structure for PMT I/O.
 
std::vector< JElement_t >::const_iterator const_iterator
 
Auxiliary class for map of PMT parameters.
 
const JPMTParameters & getPMTParameters(const JPMTIdentifier &id) const
Get PMT parameters.
 
Data structure for PMT parameters.
 
double saturation
saturation [ns]
 
Exception for accessing a value in a collection that is outside of its range.
 
Utility class to parse command line options.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for floating point format specification.
 
PMT analogue signal processor.
 
Data structure for PMT analogue signal.
 
Auxiliary class for handling status.
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...