37int main(
int argc, 
char **argv)
 
   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")   = 
"";
 
   63    zap[
'T'] = 
make_field(T_ns,         
"time range for PDF and CDF")                                      = JRange_t(-20.0, +100.0);
 
   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);
 
  112  f1.SetParameter(2, sigma);
 
  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);
 
  123  sigma = f1.GetParameter(2);
 
  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);
 
  145      if      (x < x0 - 5.0 * sigma)
 
  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;
 
  268    const Double_t xmin = T_ns.getLowerLimit();
 
  269    const Double_t xmax = T_ns.getUpperLimit();
 
  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);