Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JToT.cc File Reference

Example program to histogram time over threshold distributions. More...

#include <string>
#include <iostream>
#include <iomanip>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "JDetector/JPMTParameters.hh"
#include "JDetector/JPMTAnalogueSignalProcessor.hh"
#include "JDetector/JPMTDefaultSimulator.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"
#include "JSupport/JMeta.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to histogram time over threshold distributions.

Author
mdejong

Definition in file JToT.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 27 of file JToT.cc.

28 {
29  using namespace std;
30  using namespace JPP;
31 
32  string outputFile;
33  JPMTParametersMap parametersMap;
34  JPMTIdentifier pmt;
35  int NPE;
36  int numberOfHits;
37  double precision;
38  int debug;
39 
40  try {
41 
42  JParser<> zap("Example program to histogram time over threshold distributions.");
43 
44  zap['o'] = make_field(outputFile) = "tot.root";
45  zap['P'] = make_field(parametersMap) = JPARSER::initialised();
46  zap['p'] = make_field(pmt) = JPMTIdentifier(1,0);
47  zap['N'] = make_field(NPE) = 1;
48  zap['n'] = make_field(numberOfHits) = 1000000;
49  zap['e'] = make_field(precision) = 0.005;
50  zap['d'] = make_field(debug) = 0;
51 
52  zap(argc, argv);
53  }
54  catch(const exception &error) {
55  FATAL(error.what() << endl);
56  }
57 
58  const JPMTParameters parameters = parametersMap.getPMTParameters(pmt);
59 
60  const JCalibration calibration;
61  const JStatus status;
62  const JPMTDefaultSimulator simulator(parameters, pmt);
63  const JPMTAnalogueSignalProcessor cpu (parameters);
64 
65  JPMTData<JPMTSignal> input;
66  JPMTData<JPMTPulse> output;
67 
68 
69  TFile out(outputFile.c_str(), "recreate");
70 
71  const double dx = 1.0;
72  const double xmin = 0.0 - 0.5 * dx;
73  const double xmax = 255.0 + 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 
91  DEBUG(" "
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  try {
109 
110  tot_ns = cpu.getTimeOverThreshold(npe);
111 
112  } catch (const JValueOutOfRange& exception) {
113 
114  DEBUG(exception.what());
115  continue;
116  }
117 
118  if (tot_ns > 0.0) {
119 
120  ++number_of_hits;
121 
122  h1.Fill(tot_ns);
123 
124  }
125  }
126 
127  h1.Scale(1.0 / (double) number_of_hits / dx);
128  }
129 
130 
131  if (numberOfHits > 0) {
132 
133  int number_of_hits = 0;
134 
135  const double t_ns = 25.0;
136 
137  for (int i = 0; i != numberOfHits; ++i) {
138 
139  input .clear();
140  output.clear();
141 
142  input.push_back(JPMTSignal(t_ns, NPE));
143 
144  simulator.processHits(pmt, calibration, status, input, output);
145 
146  for (JPMTData<JPMTPulse>::const_iterator hit = output.begin(); hit != output.end(); ++hit) {
147 
148  ++number_of_hits;
149 
150  h2.Fill(hit->tot_ns);
151  h3.Fill(hit->t_ns);
152  }
153  }
154 
155  h2.Scale(1.0 / (double) number_of_hits / dx);
156  }
157 
158  out.Write();
159  out.Close();
160 
161  ASSERT(numberOfHits > 0);
162 
163  for (int i = 1; i <= h0.GetNbinsX(); ++i) {
164 
165  const Double_t x = h0.GetBinCenter (i);
166  const Double_t y0 = h0.GetBinContent(i);
167  const Double_t y1 = h1.GetBinContent(i);
168  const Double_t y2 = h2.GetBinContent(i);
169 
170  DEBUG("[" << setw(3) << i << "]" << ' '
171  << FIXED(5,1) << x << ' '
172  << FIXED(6,4) << y0 << ' '
173  << FIXED(6,4) << y1 << ' '
174  << FIXED(6,4) << y2 << endl);
175 
176  ASSERT(fabs(y0 - y1) < precision);
177  ASSERT(fabs(y0 - y2) < precision);
178  }
179 }
Utility class to parse command line options.
Definition: JParser.hh:1500
*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:69
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Definition: JParser.hh:66
Auxiliary data structure for floating point format specification.
Definition: JManip.hh:445
string outputFile
#define ASSERT(A,...)
Assert macro.
Definition: JMessage.hh:90
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1961
int debug
debug level
Definition: JSirene.cc:63
#define FATAL(A)
Definition: JMessage.hh:67
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62