27int main(
int argc,
char **argv)
42 JParser<> zap(
"Example program to histogram charge distributions.");
55 catch(
const exception &error) {
56 FATAL(error.what() << endl);
65 const double dx = JPMTSignalProcessorInterface::getQmin();
66 const double xmin = 0.0 - 0.5*dx;
67 const int nx = (int) ((10.0 - xmin) / dx);
69 H0[1] =
new TH1D(
"1.0", NULL, nx, xmin, xmin + nx * dx);
70 H1[1] =
new TH1D(
"1.1", NULL, nx, xmin, xmin + nx * dx);
73 const double dx = 0.02;
75 const int nx = (int) ((10.0 - xmin) / dx);
77 H0[2] =
new TH1D(
"2.0", NULL, nx, xmin, xmin + nx * dx);
78 H1[2] =
new TH1D(
"2.1", NULL, nx, xmin, xmin + nx * dx);
91 for (
int i=1; i <= H0[test]->GetNbinsX(); ++i) {
93 const double npe = H0[test]->GetBinCenter(i);
94 const double p = cpu->getChargeProbability(npe,NPE);
96 H0[test]->SetBinContent(i,p);
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);
109 if (cpu->applyThreshold(npe)) {
118 DEBUG(exception.what());
123 const double dx = (H1[test]->GetXaxis()->GetXmax() - H1[test]->GetXaxis()->GetXmin()) / H1[test]->GetXaxis()->GetNbins();
125 H1[test]->Scale(1.0 / (
double) number_of_hits / dx);
135 for (
auto& i : H0) { out << *i.second; }
136 for (
auto& i : H1) { out << *i.second; }
145 for (
int i = 1; i != test; ++i) {
147 DEBUG(
"Test " << i << endl);
149 for (
int ix = 1; ix <= H0[i]->GetNbinsX(); ++ix) {
151 const Double_t x = H0[i]->GetBinCenter (ix);
152 const Double_t y0 = H0[i]->GetBinContent(ix);
153 const Double_t y1 = H1[i]->GetBinContent(ix);
155 DEBUG(
"[" << setw(3) << ix <<
"]" <<
' '
156 <<
FIXED(5,3) << x <<
' '
157 <<
FIXED(6,4) << y0 <<
' '
158 <<
FIXED(6,4) << y1 << endl);
160 ASSERT(fabs(y0 - y1) < precision);