49 JParser<> zap(
"Auxiliary program to model transition time distribution generator from data.");
63 catch(
const exception &error) {
64 FATAL(error.what() << endl);
68 const TRegexp regexp(
"V[0-9]+");
70 TString buffer(inputFile.c_str());
73 Ssiz_t pos = buffer.Index(regexp, &len);
78 buffer = buffer(pos+1, len-1);
79 version = buffer.Atoi();
82 NOTICE(
"File version " << version << endl);
92 ifstream in(inputFile.c_str());
96 for (Double_t
x = 0.0,
y; in >>
y;
x += xbin) {
100 EY.push_back(sqrt(
y));
105 in.ignore(numeric_limits<streamsize>::max(),
'\n');
107 for (Double_t
x,
y, dy, rms; in >>
x >>
y >> dy >> rms; ) {
121 FATAL(
"Not enough points." << endl);
126 xbin = (X[N-1] - X[0]) / (N - 1);
128 NOTICE(
"Bin width [ns] " << xbin << endl);
133 TH1D h1(
"h1", NULL, N, X[0] - 0.5*xbin, X[N-1] + 0.5*xbin);
137 for (
int i = 0; i != N; ++i) {
138 h1.SetBinContent(i+1, Y [i]);
139 h1.SetBinError (i+1, EY[i]);
145 TF1
f1(
"f1",
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
152 Double_t
sigma = 2.0;
155 for (
int i = 0; i != N; ++i) {
162 f1.SetParameter(0, ymax);
163 f1.SetParameter(1, x0);
165 f1.SetParameter(3, ymin);
168 h1.Fit(&
f1,
"LL",
"same", x0 - 5 *
sigma, x0 + 5 *
sigma);
173 ymax =
f1.GetParameter(0);
174 x0 =
f1.GetParameter(1);
176 ymin =
f1.GetParameter(3);
180 for (JVector_t::iterator
x = X.begin();
x != X.end(); ++
x) {
184 f1.SetParameter(1, x0 = 0);
187 f1.SetParameter(3, 1e-4 * ymax);
197 for (
int i = 0; i != N; ++i) {
199 const Double_t
x = X[i];
200 const Double_t
y = Y[i];
206 else if (
x > x0 + 5.0 *
sigma)
210 NOTICE(
"Number of pulses: " << yy << endl);
211 NOTICE(
"Pre-pulses: " << yl / yy << endl);
212 NOTICE(
"Delayed pulses: " << yr / yy << endl);
221 while (n1 != N - 1 && Y[n1] == 0) ++n1;
222 while (n2 != 0 && Y[n2] == 0) --n2;
228 FATAL(
"No non-zero data." << endl);
231 X = JVector_t(X .
data() + n1, X .
data() + n2);
232 Y = JVector_t(Y .
data() + n1, Y .
data() + n2);
233 EX = JVector_t(EX.data() + n1, EX.data() + n2);
234 EY = JVector_t(EY.data() + n1, EY.data() + n2);
239 TGraphErrors g0(N, X.data(), Y.data(), EX.data(), EY.data());
252 for (
int i = 0; i != N; ++i) {
254 const Double_t
x =
g1.GetX()[i];
255 const Double_t f =
f1.Eval(
x);
263 TGraphSmooth gs(
"gs");
265 TGraph* gout = gs.SmoothSuper(&
g1,
"", bass, span,
false,
g1.GetEY());
270 for (
int i = 0; i != N; ++i) {
271 g1.GetY()[i] = gout->GetY()[i];
277 for (
int i = 0; i != N; ++i) {
279 const Double_t
x =
g1.GetX()[i];
280 const Double_t f =
f1.Eval(
x);
293 for (
int i = 0; i != N; ++i) {
299 for (
int i = 0; i != N; ++i) {
303 ofstream out(pdf.c_str());
305 const Double_t
xmin = g2.GetX()[ 0 ];
306 const Double_t
xmax = g2.GetX()[N-1];
312 << showpos <<
FIXED(7,2) <<
x
314 << noshowpos <<
FIXED(6,4) << g2.Eval(
x)
325 for (
int i = 0,
j = 1;
j != N; ++i, ++
j) {
326 g2.GetY()[
j] += g2.GetY()[i];
329 const Double_t ymin = g2.GetY()[ 0 ];
330 const Double_t ymax = g2.GetY()[N-1];
332 for (
int i = 0; i != N; ++i) {
334 const Double_t
x = g2.GetX()[i];
335 const Double_t
y = g2.GetY()[i];
337 g2.GetX()[i] = (
y - ymin) / ymax;
338 g2.GetY()[i] =
x + 0.5 * xbin;
341 ofstream out(cdf.c_str());
343 const Double_t
xmin = 0.0;
344 const Double_t
xmax = 1.0;
350 << noshowpos <<
FIXED(6,4) <<
x
352 << showpos <<
FIXED(9,5) << g2.Eval(
x)
364 const Double_t
xmin = X[ 0 ];
365 const Double_t
xmax = X[N-1];
366 const Double_t dx = (
xmax -
xmin) / N;
368 TH1D h2(
"pmt", NULL, N,
xmin - 0.5*dx,
xmax + 0.5*dx);
374 for (
int i = 0; i != N; ++i) {
380 for (
int i = 0; i != N; ++i) {
382 h2.SetBinContent(i+1, Y [i]/W);
383 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.
int numberOfBins
number of bins for average CDF integral of optical module
Utility class to parse command line options.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
Auxiliary data structure for floating point format specification.