31 JPMTParameters parameters;
39 JProperties properties = parameters.getProperties();
41 JParser<> zap(
"Example program to histogram time over threshold distributions.");
52 catch(
const exception &error) {
53 FATAL(error.what() << endl);
58 cout <<
"PMT parameters:" << endl;
62 const JPMTAnalogueSignalProcessor cpu(parameters);
64 const JPMTIdentifier pmt(1,0);
65 const JCalibration calibration;
67 const JPMTDefaultSimulator simulator(parameters, pmt);
69 JPMTData<JPMTSignal> input;
70 JPMTData<JPMTPulse> output;
77 const double xmin = -0.5;
78 const double xmax = 255.5;
79 const double dx = 1.0;
80 const int nx = (int) ((xmax - xmin) / dx);
82 TH1D h0(
"h0", NULL, nx, xmin, xmax);
83 TH1D h1(
"h1", NULL, nx, xmin, xmax);
84 TH1D h2(
"h2", NULL, nx, xmin, xmax);
89 DEBUG(
" ToT npe dP/dnpe dP/dToT" << endl);
91 for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
93 const double x = h0.GetBinCenter(i);
94 const double npe = cpu.getNPE(x);
95 const double y = cpu.getProbability(npe, NPE);
96 const double v = cpu.getDerivative(npe);
99 <<
FIXED(5,1) << x <<
" "
100 <<
FIXED(7,3) << npe <<
" "
101 <<
FIXED(5,3) << y <<
" "
102 <<
FIXED(6,4) << y*
v << endl);
104 h0.SetBinContent(i, y*
v);
108 if (numberOfHits > 0) {
110 int number_of_hits = 0;
112 for (
int i = 0; i != numberOfHits; ++i) {
114 const double npe = cpu.getRandomAmplitude(NPE);
116 if (cpu.applyThreshold(npe)) {
118 const double tot_ns = cpu.getTimeOverThreshold(npe);
126 h1.Scale(1.0 / (
double) number_of_hits / dx);
130 if (numberOfHits > 0) {
132 int number_of_hits = 0;
134 const double t_ns = 25.0;
136 for (
int i = 0; i != numberOfHits; ++i) {
141 input.push_back(JPMTSignal(t_ns, NPE));
143 simulator.processHits(pmt, calibration, input, output);
145 for (JPMTData<JPMTPulse>::const_iterator hit = output.begin(); hit != output.end(); ++hit) {
149 h2.Fill(hit->tot_ns);
153 h2.Scale(1.0 / (
double) number_of_hits / dx);
159 for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
161 const Double_t x = h0.GetBinCenter (i);
162 const Double_t y0 = h0.GetBinContent(i);
163 const Double_t y1 = h1.GetBinContent(i);
164 const Double_t y2 = h2.GetBinContent(i);
166 DEBUG(
"[" << setw(3) << i <<
"]" <<
' '
167 <<
FIXED(5,1) << x <<
' '
168 <<
FIXED(6,4) << y0 <<
' '
169 <<
FIXED(6,4) << y1 <<
' '
170 <<
FIXED(6,4) << y2 << endl);
172 ASSERT(fabs(y0 - y1) < precision);
173 ASSERT(fabs(y0 - y2) < precision);