27 int main(
int argc, 
char **argv)
 
   33   JPMTParametersMap parametersMap;
 
   42     JParser<> zap(
"Example program to histogram time over threshold distributions.");
 
   46     zap[
'p'] = 
make_field(pmt)              = JPMTIdentifier(1,0);
 
   54   catch(
const exception &error) {
 
   55     FATAL(error.what() << endl);
 
   58   const JPMTParameters 
parameters = parametersMap.getPMTParameters(pmt);
 
   60   const JCalibration                calibration;
 
   62   const JPMTDefaultSimulator        simulator(
parameters, pmt);
 
   63   const JPMTAnalogueSignalProcessor cpu      (
parameters);
 
   65   JPMTData<JPMTSignal> input;
 
   66   JPMTData<JPMTPulse>  output;
 
   71   const double dx   =   1.0;
 
   72   const double xmin =   0.0 - 0.5 * dx;
 
   74   const int    nx   = (int) ((
xmax - 
xmin) / dx);
 
   79   TH1D h3(
"h3", NULL, 500, 0.0, 100.0);
 
   84   DEBUG(
"    ToT      Probability " << endl);
 
   86   for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
 
   88     const double x        = h0.GetBinCenter(i);
 
   89     const double y        = cpu.getTimeOverThresholdProbability(x,NPE);
 
   92           << 
FIXED(7,3) << x        << 
"   " 
   93           << 
FIXED(7,5) << y << endl);
 
   95     h0.SetBinContent(i, y);
 
   99   if (numberOfHits > 0) {
 
  101     int number_of_hits = 0;
 
  103     for (
int i = 0; i != numberOfHits; ++i) {
 
  105       const double npe = cpu.getRandomCharge(NPE);
 
  110         tot_ns = cpu.getTimeOverThreshold(npe);
 
  111       } 
catch (
const JValueOutOfRange& exception) {
 
  124     h1.Scale(1.0 / (
double) number_of_hits / dx);
 
  128   if (numberOfHits > 0) {
 
  130     int number_of_hits = 0;
 
  132     const double t_ns = 25.0;
 
  134     for (
int i = 0; i != numberOfHits; ++i) {
 
  139       input.push_back(JPMTSignal(t_ns, NPE));
 
  141       simulator.processHits(pmt, calibration, status, input, output);
 
  143       for (JPMTData<JPMTPulse>::const_iterator hit = output.begin(); hit != output.end(); ++hit) {
 
  147         h2.Fill(hit->tot_ns);
 
  152     h2.Scale(1.0 / (
double) number_of_hits / dx);
 
  160   for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
 
  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);
 
  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);
 
  173     ASSERT(fabs(y0 - y1) < precision);
 
  174     ASSERT(fabs(y0 - y2) < precision);
 
Utility class to parse command line options. 
 
int main(int argc, char *argv[])
 
*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
 
then for HISTOGRAM in h0 h1
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary data structure for floating point format specification. 
 
#define ASSERT(A,...)
Assert macro. 
 
I/O formatting auxiliaries. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
General purpose messaging. 
 
Utility class to parse command line options. 
 
PMT analogue signal processor. 
 
#define DEBUG(A)
Message macros.