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;
73 const double xmax = round(
parameters.saturation) - 0.5*dx;
74 const int nx = (int) ((xmax - xmin) / dx);
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);
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.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
PMT analogue signal processor.