12 #include "TGraphErrors.h" 
   13 #include "TGraphSmooth.h" 
   28   const char* 
const h0_1 = 
"h0";
 
   37 int 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")   = 
"";
 
   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);
 
int main(int argc, char **argv)
 
General purpose messaging.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
I/O formatting auxiliaries.
 
Double_t g1(const Double_t x)
Function.
 
Auxiliary class to define a range between two values.
 
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.