55 JParser<> zap(
"Auxiliary program to model transition time distribution generator from data.");
57 zap[
'f'] =
make_field(inputFile,
"input file (output from JPulsar)");
59 zap[
'B'] =
make_field(bass,
"see TGraphSmooth") = 0.00;
60 zap[
'S'] =
make_field(span,
"see TGraphSmooth") = 0.01;
61 zap[
'P'] =
make_field(pdf,
"PDF output file; for inclusion in JPMTTransitTimeProbability.hh") =
"";
62 zap[
'C'] =
make_field(cdf,
"CDF output file; for inclusion in JPMTTransitTimeGenerator.hh") =
"";
68 catch(
const exception &error) {
69 FATAL(error.what() << endl);
75 TFile in(inputFile.c_str(),
"exist");
78 FATAL(
"File " << inputFile <<
" not opened." << endl);
81 h1 =
dynamic_cast<TH1D*
>(in.Get(h0_1));
84 FATAL(
"No histogram <" << h0_1 <<
">." << endl);
90 TF1
f1(
"f1",
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
99 for (Int_t i = 1; i <= h1->GetNbinsX(); ++i) {
101 const Double_t
x = h1->GetBinCenter (i);
102 const Double_t
y = h1->GetBinContent(i);
110 f1.SetParameter(0, ymax);
111 f1.SetParameter(1, x0);
113 f1.SetParameter(3, ymin);
117 h1->Fit(&
f1,
"LL",
"same", x0 - 5 *
sigma, x0 + 5 *
sigma);
121 ymax =
f1.GetParameter(0);
122 x0 =
f1.GetParameter(1);
124 ymin =
f1.GetParameter(3);
136 for (Int_t i = 1; i <= h1->GetNbinsX(); ++i) {
138 const Double_t
x = h1->GetBinCenter (i);
139 const Double_t
y = h1->GetBinContent(i);
147 else if (
x > x0 + 5.0 *
sigma)
167 NOTICE(
"Number of pulses: " << yy << endl);
168 NOTICE(
"Pre-pulses: " << yl / yy << endl);
169 NOTICE(
"Delayed pulses: " << yr / yy << endl);
181 for (Int_t i = 1; i <= h1->GetNbinsX(); ++i) {
183 const Double_t
x = h1->GetBinCenter (i) - x0;
184 const Double_t
y = h1->GetBinContent(i) - y0;
190 EY.push_back(sqrt(
y));
194 const int N = X.size();
197 FATAL(
"Not enough points." << endl);
201 TGraphErrors g0(N, X.data(), Y.data(), EX.data(), EY.data());
212 for (
int i = 0; i != N; ++i) {
214 const Double_t
x =
g1.GetX()[i];
215 const Double_t f =
f1.Eval(
x + x0);
224 TGraphSmooth gs(
"gs");
226 TGraph* gout = gs.SmoothSuper(&
g1,
"", bass, span,
false);
231 for (
int i = 0; i != N; ++i) {
232 g1.GetY()[i] = gout->GetY()[i];
238 for (
int i = 0; i != N; ++i) {
240 const Double_t
x =
g1.GetX()[i];
241 const Double_t f =
f1.Eval(
x + x0);
256 for (
int i = 0; i != N; ++i) {
260 for (
int i = 0; i != N; ++i) {
264 ofstream out(pdf.c_str());
266 out <<
"\t// produced by JLegolas.cc" << endl;
270 const Double_t dx = 0.25;
272 for (Double_t
x =
xmin;
x <=
xmax + 0.5*dx;
x += dx) {
274 Double_t
y = g2.Eval(
x);
282 << showpos <<
FIXED(7,2) <<
x
284 << noshowpos <<
FIXED(8,6) <<
y
297 for (
int i = 0; i+1 != N; ++i) {
298 g2.GetY()[i+1] += g2.GetY()[i];
302 const Double_t
xmin = g2.GetX()[ 0 ];
303 const Double_t
xmax = g2.GetX()[N-1];
304 const Double_t dx = (
xmax -
xmin) / N;
306 const Double_t ymin = g2.GetY()[ 0 ];
307 const Double_t ymax = g2.GetY()[N-1];
309 for (
int i = 0; i != N; ++i) {
311 const Double_t
x = g2.GetX()[i];
312 const Double_t
y = g2.GetY()[i];
314 g2.GetX()[i] = (
y - ymin) / ymax;
315 g2.GetY()[i] =
x + 0.5 * dx;
319 ofstream out(cdf.c_str());
321 out <<
"\t// produced by JLegolas.cc" << endl;
323 const Double_t
xmin = 0.0;
324 const Double_t
xmax = 1.0;
325 const Double_t dx = 0.001;
327 for (Double_t
x =
xmin;
x <=
xmax + 0.5*dx;
x += dx) {
331 << noshowpos <<
FIXED(6,4) <<
x
333 << showpos <<
FIXED(9,5) << g2.Eval(
x)
345 const Double_t
xmin = X[ 0 ];
346 const Double_t
xmax = X[N-1];
347 const Double_t dx = (
xmax -
xmin) / N;
349 TH1D h2(
"pmt", NULL, N,
xmin - 0.5*dx,
xmax + 0.5*dx);
357 for (
int i = 0; i != N; ++i) {
363 for (
int i = 0; i != N; ++i) {
365 h2.SetBinContent(i+1, Y [i]/W);
366 h2.SetBinError (i+1, EY[i]/W);
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Double_t g1(const Double_t x)
Function.
Utility class to parse command line options.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Type definition of range.