ROOT logo
// @(#)root/hist:$Id: TF1.cxx 31184 2009-11-16 11:32:54Z brun $
// Author: Rene Brun   18/08/95

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "Riostream.h"
#include "TROOT.h"
#include "TMath.h"
#include "TF1.h"
#include "TH1.h"
#include "TGraph.h"
#include "TVirtualPad.h"
#include "TStyle.h"
#include "TRandom.h"
#include "TInterpreter.h"
#include "TPluginManager.h"
#include "TBrowser.h"
#include "TColor.h"
#include "TClass.h"
#include "TMethodCall.h"
#include "TF1Helper.h"
#include "Math/WrappedFunction.h"
#include "Math/WrappedTF1.h"
#include "Math/RootFinder.h"
#include "Math/BrentMinimizer1D.h"
#include "Math/BrentMethods.h"
#include "Math/GaussIntegrator.h"
#include "Math/GaussLegendreIntegrator.h"
#include "Math/AdaptiveIntegratorMultiDim.h"
#include "Math/RichardsonDerivator.h"

//#include <iostream>

Bool_t TF1::fgAbsValue    = kFALSE;
Bool_t TF1::fgRejectPoint = kFALSE;
static Double_t gErrorTF1 = 0;


ClassImp(TF1)

// class wrapping evaluation of TF1(x) - y0
class GFunc {
   const TF1* fFunction;
   const double fY0;
public:
   GFunc(const TF1* function , double y ):fFunction(function), fY0(y) {}
   double operator()(double x) const {
      return fFunction->Eval(x) - fY0;
   }
};

// class wrapping evaluation of -TF1(x)
class GInverseFunc {
   const TF1* fFunction;
public:
   GInverseFunc(const TF1* function):fFunction(function) {}
   double operator()(double x) const {
      return - fFunction->Eval(x);
   }
};

// class wrapping function evaluation directly in 1D interface (used for integration) 
// and implementing the methods for the momentum calculations

class  TF1_EvalWrapper : public ROOT::Math::IGenFunction { 
public: 
   TF1_EvalWrapper(TF1 * f, const Double_t * par, bool useAbsVal, Double_t n = 1, Double_t x0 = 0) : 
      fFunc(f), 
      fPar( ( (par) ? par : f->GetParameters() ) ),
      fAbsVal(useAbsVal),
      fN(n), 
      fX0(x0)   
   {
      fFunc->InitArgs(fX, fPar); 
   }
   ROOT::Math::IGenFunction * Clone()  const { 
      // use default copy constructor
      return new TF1_EvalWrapper( *this);
   }
   // evaluate |f(x)|
   Double_t DoEval( Double_t x) const { 
      fX[0] = x; 
      Double_t fval = fFunc->EvalPar( fX, fPar);
      if (fAbsVal && fval < 0)  return -fval;
      return fval; 
   } 
   // evaluate x * |f(x)|
   Double_t EvalFirstMom( Double_t x) { 
      fX[0] = x; 
      return fX[0] * TMath::Abs( fFunc->EvalPar( fX, fPar) ); 
   } 
   // evaluate (x - x0) ^n * f(x)
   Double_t EvalNMom( Double_t x) const  { 
      fX[0] = x; 
      return TMath::Power( fX[0] - fX0, fN) * TMath::Abs( fFunc->EvalPar( fX, fPar) ); 
   }

   TF1 * fFunc; 
   mutable Double_t fX[1]; 
   const double * fPar; 
   Bool_t fAbsVal;
   Double_t fN; 
   Double_t fX0;
};



//______________________________________________________________________________
/* Begin_Html
<center><h2>TF1: 1-Dim function class</h2></center>
A TF1 object is a 1-Dim function defined between a lower and upper limit.
<br>The function may be a simple function (see <tt>TFormula</tt>) or a
precompiled user function.
<br>The function may have associated parameters.
<br>TF1 graphics function is via the <tt>TH1/TGraph</tt> drawing functions.
<p>
The following types of functions can be created:
<ul>
<li><a href="#F1">A - Expression using variable x and no parameters</a></li>
<li><a href="#F2">B - Expression using variable x with parameters</a></li>
<li><a href="#F3">C - A general C function with parameters</a></li>
<li><a href="#F4">D - A general C++ function object (functor) with parameters</a></li>
<li><a href="#F5">E - A member function with parameters of a general C++ class</a></li>
</ul>

<a name="F1"></a><h3>A - Expression using variable x and no parameters</h3>
<h4>Case 1: inline expression using standard C++ functions/operators</h4>
<div class="code"><pre>
   TF1 *fa1 = new TF1("fa1","sin(x)/x",0,10);
   fa1->Draw();
</pre></div><div class="clear" />
End_Html
Begin_Macro
{
   TCanvas *c = new TCanvas("c","c",0,0,500,300);
   TF1 *fa1 = new TF1("fa1","sin(x)/x",0,10);
   fa1->Draw();
   return c;
}
End_Macro
Begin_Html
<h4>Case 2: inline expression using TMath functions without parameters</h4>
<div class="code"><pre>
   TF1 *fa2 = new TF1("fa2","TMath::DiLog(x)",0,10);
   fa2->Draw();
</pre></div><div class="clear" />
End_Html
Begin_Macro
{
   TCanvas *c = new TCanvas("c","c",0,0,500,300);
   TF1 *fa2 = new TF1("fa2","TMath::DiLog(x)",0,10);
   fa2->Draw();
   return c;
}
End_Macro
Begin_Html
<h4>Case 3: inline expression using a CINT function by name</h4>
<div class="code"><pre>
   Double_t myFunc(x) {
      return x+sin(x);
   }
   TF1 *fa3 = new TF1("fa3","myFunc(x)",-3,5);
   fa3->Draw();
</pre></div><div class="clear" />

<a name="F2"></a><h3>B - Expression using variable x with parameters</h3>
<h4>Case 1: inline expression using standard C++ functions/operators</h4>
<ul>
<li>Example a:
<div class="code"><pre>
   TF1 *fa = new TF1("fa","[0]*x*sin([1]*x)",-3,3);
</pre></div><div class="clear" />
This creates a function of variable x with 2 parameters.
The parameters must be initialized via:
<pre>
   fa->SetParameter(0,value_first_parameter);
   fa->SetParameter(1,value_second_parameter);
</pre>
Parameters may be given a name:
<pre>
   fa->SetParName(0,"Constant");
</pre>
</li>
<li> Example b:
<div class="code"><pre>
   TF1 *fb = new TF1("fb","gaus(0)*expo(3)",0,10);
</pre></div><div class="clear" />
<tt>gaus(0)</tt> is a substitute for <tt>[0]*exp(-0.5*((x-[1])/[2])**2)</tt>
and <tt>(0)</tt> means start numbering parameters at <tt>0</tt>.
<tt>expo(3)</tt> is a substitute for <tt>exp([3]+[4]*x)</tt>.
</li>
</ul>

<h4>Case 2: inline expression using TMath functions with parameters</h4>
<div class="code"><pre>
   TF1 *fb2 = new TF1("fa3","TMath::Landau(x,[0],[1],0)",-5,10);
   fb2->SetParameters(0.2,1.3);
   fb2->Draw();
</pre></div><div class="clear" />
End_Html
Begin_Macro
{
   TCanvas *c = new TCanvas("c","c",0,0,500,300);
   TF1 *fb2 = new TF1("fa3","TMath::Landau(x,[0],[1],0)",-5,10);
   fb2->SetParameters(0.2,1.3);
   fb2->Draw();
   return c;
}
End_Macro
Begin_Html

<a name="F3"></a><h3>C - A general C function with parameters</h3>
Consider the macro myfunc.C below:
<div class="code"><pre>
   // Macro myfunc.C
   Double_t myfunction(Double_t *x, Double_t *par)
   {
      Float_t xx =x[0];
      Double_t f = TMath::Abs(par[0]*sin(par[1]*xx)/xx);
      return f;
   }
   void myfunc()
   {
      TF1 *f1 = new TF1("myfunc",myfunction,0,10,2);
      f1->SetParameters(2,1);
      f1->SetParNames("constant","coefficient");
      f1->Draw();
   }
   void myfit()
   {
      TH1F *h1=new TH1F("h1","test",100,0,10);
      h1->FillRandom("myfunc",20000);
      TF1 *f1=gROOT->GetFunction("myfunc");
      f1->SetParameters(800,1);
      h1.Fit("myfunc");
   }
</pre></div><div class="clear" />

End_Html
Begin_Html

<p>
In an interactive session you can do:
<div class="code"><pre>
   Root > .L myfunc.C
   Root > myfunc();
   Root > myfit();
</pre></div>
<div class="clear" />

End_Html
Begin_Html

<tt>TF1</tt> objects can reference other <tt>TF1</tt> objects (thanks John
Odonnell) of type A or B defined above. This excludes CINT interpreted functions
and compiled functions. However, there is a restriction. A function cannot
reference a basic function if the basic function is a polynomial polN.
<p>Example:
<div class="code"><pre>
   {
      TF1 *fcos = new TF1 ("fcos", "[0]*cos(x)", 0., 10.);
      fcos->SetParNames( "cos");
      fcos->SetParameter( 0, 1.1);

      TF1 *fsin = new TF1 ("fsin", "[0]*sin(x)", 0., 10.);
      fsin->SetParNames( "sin");
      fsin->SetParameter( 0, 2.1);

      TF1 *fsincos = new TF1 ("fsc", "fcos+fsin");

      TF1 *fs2 = new TF1 ("fs2", "fsc+fsc");
   }
</pre></div><div class="clear" />

End_Html
Begin_Html


<a name="F4"></a><h3>D - A general C++ function object (functor) with parameters</h3>
A TF1 can be created from any C++ class implementing the operator()(double *x, double *p).
The advantage of the function object is that he can have a state and reference therefore what-ever other object.
In this way the user can customize his function.
<p>Example:
<div class="code"><pre>
class  MyFunctionObject {
 public:
   // use constructor to customize your function object

   double operator() (double *x, double *p) {
      // function implementation using class data members
   }
};
{
    ....
   MyFunctionObject * fobj = new MyFunctionObject(....);       // create the function object
   TF1 * f = new TF1("f",fobj,0,1,npar,"MyFunctionObject");    // create TF1 class.
   .....
}
</pre></div><div class="clear" />
When constructing the TF1 class, the name of the function object class is required only if running in CINT
and it is not needed in compiled C++ mode. In addition in compiled mode the cfnution object can be passed to TF1
by value.
See also the tutorial math/exampleFunctor.C for a running example.

End_Html
Begin_Html

<a name="F5"></a><h3>E - A member function with parameters of a general C++ class</h3>
A TF1 can be created in this case from any member function of a class which has the signature of
(double * , double *) and returning a double.
<p>Example:
<div class="code"><pre>
class  MyFunction {
 public:
   ...
   double Evaluate() (double *x, double *p) {
      // function implementation
   }
};
{
    ....
   MyFunction * fptr = new MyFunction(....);  // create the user function class
   TF1 * f = new TF1("f",fptr,&MyFunction::Evaluate,0,1,npar,"MyFunction","Evaluate");   // create TF1 class.

   .....
}
</pre></div><div class="clear" />
When constructing the TF1 class, the name of the function class and of the member function are required only
if running in CINT and they are not need in compiled C++ mode.
See also the tutorial math/exampleFunctor.C for a running example.

End_Html */

TF1 *TF1::fgCurrent = 0;


//______________________________________________________________________________
TF1::TF1(): TFormula(), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 default constructor.

   fXmin      = 0;
   fXmax      = 0;
   fNpx       = 100;
   fType      = 0;
   fNpfits    = 0;
   fNDF       = 0;
   fNsave     = 0;
   fChisquare = 0;
   fIntegral  = 0;
   fParErrors = 0;
   fParMin    = 0;
   fParMax    = 0;
   fAlpha     = 0;
   fBeta      = 0;
   fGamma     = 0;
   fParent    = 0;
   fSave      = 0;
   fHistogram = 0;
   fMinimum   = -1111;
   fMaximum   = -1111;
   fMethodCall = 0;
   fCintFunc   = 0;
   SetFillStyle(0);
}


//______________________________________________________________________________
TF1::TF1(const char *name,const char *formula, Double_t xmin, Double_t xmax)
      :TFormula(name,formula), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 constructor using a formula definition
   //
   //  See TFormula constructor for explanation of the formula syntax.
   //
   //  See tutorials: fillrandom, first, fit1, formula1, multifit
   //  for real examples.
   //
   //  Creates a function of type A or B between xmin and xmax
   //
   //  if formula has the form "fffffff;xxxx;yyyy", it is assumed that
   //  the formula string is "fffffff" and "xxxx" and "yyyy" are the
   //  titles for the X and Y axis respectively.

   if (xmin < xmax ) {
      fXmin      = xmin;
      fXmax      = xmax;
   } else {
      fXmin = xmax; //when called from TF2,TF3
      fXmax = xmin;
   }
   fNpx       = 100;
   fType      = 0;
   if (fNpar) {
      fParErrors = new Double_t[fNpar];
      fParMin    = new Double_t[fNpar];
      fParMax    = new Double_t[fNpar];
      for (int i = 0; i < fNpar; i++) {
         fParErrors[i]  = 0;
         fParMin[i]     = 0;
         fParMax[i]     = 0;
      }
   } else {
      fParErrors = 0;
      fParMin    = 0;
      fParMax    = 0;
   }
   fChisquare  = 0;
   fIntegral   = 0;
   fAlpha      = 0;
   fBeta       = 0;
   fGamma      = 0;
   fParent     = 0;
   fNpfits     = 0;
   fNDF        = 0;
   fNsave      = 0;
   fSave       = 0;
   fHistogram  = 0;
   fMinimum    = -1111;
   fMaximum    = -1111;
   fMethodCall = 0;
   fCintFunc   = 0;

   if (fNdim != 1 && xmin < xmax) {
      Error("TF1","function: %s/%s has %d parameters instead of 1",name,formula,fNdim);
      MakeZombie();
   }

   if (!gStyle) return;
   SetLineColor(gStyle->GetFuncColor());
   SetLineWidth(gStyle->GetFuncWidth());
   SetLineStyle(gStyle->GetFuncStyle());
   SetFillStyle(0);
}


//______________________________________________________________________________
TF1::TF1(const char *name, Double_t xmin, Double_t xmax, Int_t npar)
      :TFormula(), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 constructor using name of an interpreted function.
   //
   //  Creates a function of type C between xmin and xmax.
   //  name is the name of an interpreted CINT cunction.
   //  The function is defined with npar parameters
   //  fcn must be a function of type:
   //     Double_t fcn(Double_t *x, Double_t *params)
   //
   //  This constructor is called for functions of type C by CINT.
   //
   // WARNING! A function created with this constructor cannot be Cloned.

   fXmin       = xmin;
   fXmax       = xmax;
   fNpx        = 100;
   fType       = 2;
   if (npar > 0 ) fNpar = npar;
   if (fNpar) {
      fNames      = new TString[fNpar];
      fParams     = new Double_t[fNpar];
      fParErrors  = new Double_t[fNpar];
      fParMin     = new Double_t[fNpar];
      fParMax     = new Double_t[fNpar];
      for (int i = 0; i < fNpar; i++) {
         fParams[i]     = 0;
         fParErrors[i]  = 0;
         fParMin[i]     = 0;
         fParMax[i]     = 0;
      }
   } else {
      fParErrors = 0;
      fParMin    = 0;
      fParMax    = 0;
   }
   fChisquare  = 0;
   fIntegral   = 0;
   fAlpha      = 0;
   fBeta       = 0;
   fGamma      = 0;
   fParent     = 0;
   fNpfits     = 0;
   fNDF        = 0;
   fNsave      = 0;
   fSave       = 0;
   fHistogram  = 0;
   fMinimum    = -1111;
   fMaximum    = -1111;
   fMethodCall = 0;
   fCintFunc   = 0;
   fNdim       = 1;

   TF1 *f1old = (TF1*)gROOT->GetListOfFunctions()->FindObject(name);
   if (f1old) delete f1old;
   SetName(name);

   if (gStyle) {
      SetLineColor(gStyle->GetFuncColor());
      SetLineWidth(gStyle->GetFuncWidth());
      SetLineStyle(gStyle->GetFuncStyle());
   }
   SetFillStyle(0);

   SetTitle(name);
   if (name) {
      if (*name == '*') return; //case happens via SavePrimitive
      fMethodCall = new TMethodCall();
      fMethodCall->InitWithPrototype(name,"Double_t*,Double_t*");
      fNumber = -1;
      gROOT->GetListOfFunctions()->Add(this);
      if (! fMethodCall->IsValid() ) {
         Error("TF1","No function found with the signature %s(Double_t*,Double_t*)",name);
      }
   } else {
      Error("TF1","requires a proper function name!");
   }
}


//______________________________________________________________________________
TF1::TF1(const char *name,void *fcn, Double_t xmin, Double_t xmax, Int_t npar)
      :TFormula(), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 constructor using pointer to an interpreted function.
   //
   //  See TFormula constructor for explanation of the formula syntax.
   //
   //  Creates a function of type C between xmin and xmax.
   //  The function is defined with npar parameters
   //  fcn must be a function of type:
   //     Double_t fcn(Double_t *x, Double_t *params)
   //
   //  see tutorial; myfit for an example of use
   //  also test/stress.cxx (see function stress1)
   //
   //
   //  This constructor is called for functions of type C by CINT.
   //
   //  WARNING! A function created with this constructor cannot be Cloned.


   fXmin       = xmin;
   fXmax       = xmax;
   fNpx        = 100;
   fType       = 2;
   //fFunction   = 0;
   if (npar > 0 ) fNpar = npar;
   if (fNpar) {
      fNames      = new TString[fNpar];
      fParams     = new Double_t[fNpar];
      fParErrors  = new Double_t[fNpar];
      fParMin     = new Double_t[fNpar];
      fParMax     = new Double_t[fNpar];
      for (int i = 0; i < fNpar; i++) {
         fParams[i]     = 0;
         fParErrors[i]  = 0;
         fParMin[i]     = 0;
         fParMax[i]     = 0;
      }
   } else {
      fParErrors = 0;
      fParMin    = 0;
      fParMax    = 0;
   }
   fChisquare  = 0;
   fIntegral   = 0;
   fAlpha      = 0;
   fBeta       = 0;
   fGamma      = 0;
   fParent     = 0;
   fNpfits     = 0;
   fNDF        = 0;
   fNsave      = 0;
   fSave       = 0;
   fHistogram  = 0;
   fMinimum    = -1111;
   fMaximum    = -1111;
   fMethodCall = 0;
   fCintFunc   = 0;
   fNdim       = 1;

   TF1 *f1old = (TF1*)gROOT->GetListOfFunctions()->FindObject(name);
   if (f1old) delete f1old;
   SetName(name);

   if (gStyle) {
      SetLineColor(gStyle->GetFuncColor());
      SetLineWidth(gStyle->GetFuncWidth());
      SetLineStyle(gStyle->GetFuncStyle());
   }
   SetFillStyle(0);

   if (!fcn) return;
   const char *funcname = gCint->Getp2f2funcname(fcn);
   SetTitle(funcname);
   if (funcname) {
      fMethodCall = new TMethodCall();
      fMethodCall->InitWithPrototype(funcname,"Double_t*,Double_t*");
      fNumber = -1;
      gROOT->GetListOfFunctions()->Add(this);
      if (! fMethodCall->IsValid() ) {
         Error("TF1","No function found with the signature %s(Double_t*,Double_t*)",funcname);
      }
   } else {
      Error("TF1","can not find any function at the address 0x%lx. This function requested for %s",fcn,name);
   }


}


//______________________________________________________________________________
TF1::TF1(const char *name,Double_t (*fcn)(Double_t *, Double_t *), Double_t xmin, Double_t xmax, Int_t npar)
      :TFormula(), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 constructor using a pointer to a real function.
   //
   //   npar is the number of free parameters used by the function
   //
   //   This constructor creates a function of type C when invoked
   //   with the normal C++ compiler.
   //
   //   see test program test/stress.cxx (function stress1) for an example.
   //   note the interface with an intermediate pointer.
   //
   // WARNING! A function created with this constructor cannot be Cloned.

   fXmin       = xmin;
   fXmax       = xmax;
   fNpx        = 100;

   fType       = 1;
   fMethodCall = 0;
   fCintFunc   = 0;
   fFunctor = ROOT::Math::ParamFunctor(fcn);

   if (npar > 0 ) fNpar = npar;
   if (fNpar) {
      fNames      = new TString[fNpar];
      fParams     = new Double_t[fNpar];
      fParErrors  = new Double_t[fNpar];
      fParMin     = new Double_t[fNpar];
      fParMax     = new Double_t[fNpar];
      for (int i = 0; i < fNpar; i++) {
         fParams[i]     = 0;
         fParErrors[i]  = 0;
         fParMin[i]     = 0;
         fParMax[i]     = 0;
      }
   } else {
      fParErrors = 0;
      fParMin    = 0;
      fParMax    = 0;
   }
   fChisquare  = 0;
   fIntegral   = 0;
   fAlpha      = 0;
   fBeta       = 0;
   fGamma      = 0;
   fNsave      = 0;
   fSave       = 0;
   fParent     = 0;
   fNpfits     = 0;
   fNDF        = 0;
   fHistogram  = 0;
   fMinimum    = -1111;
   fMaximum    = -1111;
   fNdim       = 1;

   // Store formula in linked list of formula in ROOT
   TF1 *f1old = (TF1*)gROOT->GetListOfFunctions()->FindObject(name);
   if (f1old) delete f1old;
   SetName(name);
   gROOT->GetListOfFunctions()->Add(this);

   if (!gStyle) return;
   SetLineColor(gStyle->GetFuncColor());
   SetLineWidth(gStyle->GetFuncWidth());
   SetLineStyle(gStyle->GetFuncStyle());
   SetFillStyle(0);

}

//______________________________________________________________________________
TF1::TF1(const char *name,Double_t (*fcn)(const Double_t *, const Double_t *), Double_t xmin, Double_t xmax, Int_t npar)
      :TFormula(), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 constructor using a pointer to real function.
   //
   //   npar is the number of free parameters used by the function
   //
   //   This constructor creates a function of type C when invoked
   //   with the normal C++ compiler.
   //
   //   see test program test/stress.cxx (function stress1) for an example.
   //   note the interface with an intermediate pointer.
   //
   // WARNING! A function created with this constructor cannot be Cloned.

   fXmin       = xmin;
   fXmax       = xmax;
   fNpx        = 100;

   fType       = 1;
   fMethodCall = 0;
   fCintFunc   = 0;
   fFunctor = ROOT::Math::ParamFunctor(fcn);

   if (npar > 0 ) fNpar = npar;
   if (fNpar) {
      fNames      = new TString[fNpar];
      fParams     = new Double_t[fNpar];
      fParErrors  = new Double_t[fNpar];
      fParMin     = new Double_t[fNpar];
      fParMax     = new Double_t[fNpar];
      for (int i = 0; i < fNpar; i++) {
         fParams[i]     = 0;
         fParErrors[i]  = 0;
         fParMin[i]     = 0;
         fParMax[i]     = 0;
      }
   } else {
      fParErrors = 0;
      fParMin    = 0;
      fParMax    = 0;
   }
   fChisquare  = 0;
   fIntegral   = 0;
   fAlpha      = 0;
   fBeta       = 0;
   fGamma      = 0;
   fNsave      = 0;
   fSave       = 0;
   fParent     = 0;
   fNpfits     = 0;
   fNDF        = 0;
   fHistogram  = 0;
   fMinimum    = -1111;
   fMaximum    = -1111;
   fNdim       = 1;

   // Store formula in linked list of formula in ROOT
   TF1 *f1old = (TF1*)gROOT->GetListOfFunctions()->FindObject(name);
   if (f1old) delete f1old;
   SetName(name);
   gROOT->GetListOfFunctions()->Add(this);

   if (!gStyle) return;
   SetLineColor(gStyle->GetFuncColor());
   SetLineWidth(gStyle->GetFuncWidth());
   SetLineStyle(gStyle->GetFuncStyle());
   SetFillStyle(0);

}


//______________________________________________________________________________
TF1::TF1(const char *name, ROOT::Math::ParamFunctor f, Double_t xmin, Double_t xmax, Int_t npar ) :
   TFormula(),
   TAttLine(),
   TAttFill(),
   TAttMarker(),
   fXmin      ( xmin ),
   fXmax      ( xmax ),
   fNpx       ( 100 ),
   fType      ( 1 ),
   fNpfits    ( 0 ),
   fNDF       ( 0 ),
   fNsave     ( 0 ),
   fChisquare ( 0 ),
   fIntegral  ( 0 ),
   fParErrors ( 0 ),
   fParMin    ( 0 ),
   fParMax    ( 0 ),
   fSave      ( 0 ),
   fAlpha     ( 0 ),
   fBeta      ( 0 ),
   fGamma     ( 0 ),
   fParent    ( 0 ),
   fHistogram ( 0 ),
   fMaximum   ( -1111 ),
   fMinimum   ( -1111 ),
   fMethodCall( 0 ),
   fCintFunc  ( 0 ),
   fFunctor   ( ROOT::Math::ParamFunctor(f) )
{
   // F1 constructor using the Functor class.
   //
   //   xmin and xmax define the plotting range of the function
   //   npar is the number of free parameters used by the function
   //
   //   This constructor can be used only in compiled code
   //
   // WARNING! A function created with this constructor cannot be Cloned.

   CreateFromFunctor(name, npar);
}


//______________________________________________________________________________
void TF1::CreateFromFunctor(const char *name, Int_t npar)
{
   // Internal Function to Create a TF1  using a Functor.
   //
   //          Used by the template constructors

   fNdim       = 1;

   if (npar > 0 ) fNpar = npar;
   if (fNpar) {
      fNames      = new TString[fNpar];
      fParams     = new Double_t[fNpar];
      fParErrors  = new Double_t[fNpar];
      fParMin     = new Double_t[fNpar];
      fParMax     = new Double_t[fNpar];
      for (int i = 0; i < fNpar; i++) {
         fParams[i]     = 0;
         fParErrors[i]  = 0;
         fParMin[i]     = 0;
         fParMax[i]     = 0;
      }
   } else {
      fParErrors = 0;
      fParMin    = 0;
      fParMax    = 0;
   }

   // Store formula in linked list of formula in ROOT
   TF1 *f1old = (TF1*)gROOT->GetListOfFunctions()->FindObject(name);
   if (f1old) delete f1old;
   SetName(name);
   gROOT->GetListOfFunctions()->Add(this);

   if (!gStyle) return;
   SetLineColor(gStyle->GetFuncColor());
   SetLineWidth(gStyle->GetFuncWidth());
   SetLineStyle(gStyle->GetFuncStyle());
   SetFillStyle(0);

}

//______________________________________________________________________________
TF1::TF1(const char *name,void *ptr, Double_t xmin, Double_t xmax, Int_t npar, const char * className )
      :TFormula(), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 constructor from an interpreted class defining the operator() or Eval().
   // This constructor emulate the syntax of the template constructor using a C++ callable object (functor)
   // which can be used only in C++ compiled mode.
   // The class name is required to get the type of class given the void pointer ptr.
   // For the method name is used the operator() (double *, double * ).
   // Use the other constructor taking the method name for different method names.
   //
   //  xmin and xmax specify the function plotting range
   //  npar are the number of function parameters
   //
   //  see tutorial  math.exampleFunctor.C for an example of using this constructor
   //
   //  This constructor is used only when using CINT.
   //  In compiled mode the template constructor is used and in that case className is not needed

   CreateFromCintClass(name, ptr, xmin, xmax, npar, className, 0 );
}

//______________________________________________________________________________
TF1::TF1(const char *name,void *ptr, void * , Double_t xmin, Double_t xmax, Int_t npar, const char * className, const char * methodName)
      :TFormula(), TAttLine(), TAttFill(), TAttMarker()
{
   // F1 constructor from an interpreter class using a specidied member function.
   // This constructor emulate the syntax of the template constructor using a C++ class and a given
   // member function pointer, which can be used only in C++ compiled mode.
   // The class name is required to get the type of class given the void pointer ptr.
   // The second void * is not needed for the CINT case, but is kept for emulating the API of the
   // template constructor.
   // The method name is optional. By default is looked for operator() (double *, double *) or
   // Eval(double *, double*)
   //
   //  xmin and xmax specify the function plotting range
   //  npar are the number of function parameters.
   //
   //
   //  see tutorial  math.exampleFunctor.C for an example of using this constructor
   //
   //  This constructor is used only when using CINT.
   //  In compiled mode the template constructor is used and in that case className is not needed

   CreateFromCintClass(name, ptr, xmin, xmax, npar, className, methodName);
}

//______________________________________________________________________________
void TF1::CreateFromCintClass(const char *name,void *ptr, Double_t xmin, Double_t xmax, Int_t npar, const char * className, const char * methodName)
{
   // Internal function used to create from TF1 from an interpreter CINT class
   // with the specified type (className) and member function name (methodName).
   //


   fXmin       = xmin;
   fXmax       = xmax;
   fNpx        = 100;
   fType       = 3;
   if (npar > 0 ) fNpar = npar;
   if (fNpar) {
      fNames      = new TString[fNpar];
      fParams     = new Double_t[fNpar];
      fParErrors  = new Double_t[fNpar];
      fParMin     = new Double_t[fNpar];
      fParMax     = new Double_t[fNpar];
      for (int i = 0; i < fNpar; i++) {
         fParams[i]     = 0;
         fParErrors[i]  = 0;
         fParMin[i]     = 0;
         fParMax[i]     = 0;
      }
   } else {
      fParErrors = 0;
      fParMin    = 0;
      fParMax    = 0;
   }
   fChisquare  = 0;
   fIntegral   = 0;
   fAlpha      = 0;
   fBeta       = 0;
   fGamma      = 0;
   fParent     = 0;
   fNpfits     = 0;
   fNDF        = 0;
   fNsave      = 0;
   fSave       = 0;
   fHistogram  = 0;
   fMinimum    = -1111;
   fMaximum    = -1111;
   fMethodCall = 0;
   fNdim       = 1;

   TF1 *f1old = (TF1*)gROOT->GetListOfFunctions()->FindObject(name);
   if (f1old) delete f1old;
   SetName(name);

   if (gStyle) {
      SetLineColor(gStyle->GetFuncColor());
      SetLineWidth(gStyle->GetFuncWidth());
      SetLineStyle(gStyle->GetFuncStyle());
   }
   SetFillStyle(0);

   if (!ptr) return;
   fCintFunc = ptr;

   if (!className) return;

   TClass *cl = TClass::GetClass(className);

   if (cl) {
      fMethodCall = new TMethodCall();


      if (methodName)
         fMethodCall->InitWithPrototype(cl,methodName,"Double_t*,Double_t*");
      else {
         fMethodCall->InitWithPrototype(cl,"operator()","Double_t*,Double_t*");
         if (! fMethodCall->IsValid() )
            // try with Eval if operator() is not found
            fMethodCall->InitWithPrototype(cl,"Eval","Double_t*,Double_t*");
      }

      fNumber = -1;
      gROOT->GetListOfFunctions()->Add(this);
      if (! fMethodCall->IsValid() ) {
         if (methodName)
            Error("TF1","No function found in class %s with the signature %s(Double_t*,Double_t*)",className,methodName);
         else
            Error("TF1","No function found in class %s with the signature operator() (Double_t*,Double_t*) or Eval(Double_t*,Double_t*)",className);
      }
   } else {
      Error("TF1","can not find any class with name %s at the address 0x%lx",className,ptr);
   }


}



//______________________________________________________________________________
TF1& TF1::operator=(const TF1 &rhs)
{
   // Operator =

   if (this != &rhs) {
      rhs.Copy(*this);
   }
   return *this;
}


//______________________________________________________________________________
TF1::~TF1()
{
   // TF1 default destructor.

   if (fParMin)    delete [] fParMin;
   if (fParMax)    delete [] fParMax;
   if (fParErrors) delete [] fParErrors;
   if (fIntegral)  delete [] fIntegral;
   if (fAlpha)     delete [] fAlpha;
   if (fBeta)      delete [] fBeta;
   if (fGamma)     delete [] fGamma;
   if (fSave)      delete [] fSave;
   delete fHistogram;
   delete fMethodCall;

   if (fParent) fParent->RecursiveRemove(this);
}


//______________________________________________________________________________
TF1::TF1(const TF1 &f1) : TFormula(), TAttLine(f1), TAttFill(f1), TAttMarker(f1)
{
   // Constuctor.

   fXmin      = 0;
   fXmax      = 0;
   fNpx       = 100;
   fType      = 0;
   fNpfits    = 0;
   fNDF       = 0;
   fNsave     = 0;
   fChisquare = 0;
   fIntegral  = 0;
   fParErrors = 0;
   fParMin    = 0;
   fParMax    = 0;
   fAlpha     = 0;
   fBeta      = 0;
   fGamma     = 0;
   fParent    = 0;
   fSave      = 0;
   fHistogram = 0;
   fMinimum   = -1111;
   fMaximum   = -1111;
   fMethodCall = 0;
   fCintFunc   = 0;
   SetFillStyle(0);

   ((TF1&)f1).Copy(*this);
}


//______________________________________________________________________________
void TF1::AbsValue(Bool_t flag)
{
   // Static function: set the fgAbsValue flag.
   // By default TF1::Integral uses the original function value to compute the integral
   // However, TF1::Moment, CentralMoment require to compute the integral
   // using the absolute value of the function.

   fgAbsValue = flag;
}


//______________________________________________________________________________
void TF1::Browse(TBrowser *b)
{
   // Browse.

   Draw(b ? b->GetDrawOption() : "");
   gPad->Update();
}


//______________________________________________________________________________
void TF1::Copy(TObject &obj) const
{
   // Copy this F1 to a new F1.

   if (((TF1&)obj).fParMin)    delete [] ((TF1&)obj).fParMin;
   if (((TF1&)obj).fParMax)    delete [] ((TF1&)obj).fParMax;
   if (((TF1&)obj).fParErrors) delete [] ((TF1&)obj).fParErrors;
   if (((TF1&)obj).fIntegral)  delete [] ((TF1&)obj).fIntegral;
   if (((TF1&)obj).fAlpha)     delete [] ((TF1&)obj).fAlpha;
   if (((TF1&)obj).fBeta)      delete [] ((TF1&)obj).fBeta;
   if (((TF1&)obj).fGamma)     delete [] ((TF1&)obj).fGamma;
   if (((TF1&)obj).fSave)      delete [] ((TF1&)obj).fSave;
   delete ((TF1&)obj).fHistogram;
   delete ((TF1&)obj).fMethodCall;

   TFormula::Copy(obj);
   TAttLine::Copy((TF1&)obj);
   TAttFill::Copy((TF1&)obj);
   TAttMarker::Copy((TF1&)obj);
   ((TF1&)obj).fXmin = fXmin;
   ((TF1&)obj).fXmax = fXmax;
   ((TF1&)obj).fNpx  = fNpx;
   ((TF1&)obj).fType = fType;
   ((TF1&)obj).fCintFunc  = fCintFunc;
   ((TF1&)obj).fFunctor   = fFunctor;
   ((TF1&)obj).fChisquare = fChisquare;
   ((TF1&)obj).fNpfits  = fNpfits;
   ((TF1&)obj).fNDF     = fNDF;
   ((TF1&)obj).fMinimum = fMinimum;
   ((TF1&)obj).fMaximum = fMaximum;

   ((TF1&)obj).fParErrors = 0;
   ((TF1&)obj).fParMin    = 0;
   ((TF1&)obj).fParMax    = 0;
   ((TF1&)obj).fIntegral  = 0;
   ((TF1&)obj).fAlpha     = 0;
   ((TF1&)obj).fBeta      = 0;
   ((TF1&)obj).fGamma     = 0;
   ((TF1&)obj).fParent    = fParent;
   ((TF1&)obj).fNsave     = fNsave;
   ((TF1&)obj).fSave      = 0;
   ((TF1&)obj).fHistogram = 0;
   ((TF1&)obj).fMethodCall = 0;
   if (fNsave) {
      ((TF1&)obj).fSave = new Double_t[fNsave];
      for (Int_t j=0;j<fNsave;j++) ((TF1&)obj).fSave[j] = fSave[j];
   }
   if (fNpar) {
      ((TF1&)obj).fParErrors = new Double_t[fNpar];
      ((TF1&)obj).fParMin    = new Double_t[fNpar];
      ((TF1&)obj).fParMax    = new Double_t[fNpar];
      Int_t i;
      for (i=0;i<fNpar;i++)   ((TF1&)obj).fParErrors[i] = fParErrors[i];
      for (i=0;i<fNpar;i++)   ((TF1&)obj).fParMin[i]    = fParMin[i];
      for (i=0;i<fNpar;i++)   ((TF1&)obj).fParMax[i]    = fParMax[i];
   }
   if (fMethodCall) {
      // use copy-constructor of TMethodCall 
      TMethodCall *m = new TMethodCall(*fMethodCall);
//       m->InitWithPrototype(fMethodCall->GetMethodName(),fMethodCall->GetProto());
      ((TF1&)obj).fMethodCall  = m;
   }
}


//______________________________________________________________________________
Double_t TF1::Derivative(Double_t x, Double_t *params, Double_t eps) const
{
   // Returns the first derivative of the function at point x,
   // computed by Richardson's extrapolation method (use 2 derivative estimates
   // to compute a third, more accurate estimation)
   // first, derivatives with steps h and h/2 are computed by central difference formulas
   //Begin_Latex
   // D(h) = #frac{f(x+h) - f(x-h)}{2h}
   //End_Latex
   // the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex
   //  "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition"
   //
   // if the argument params is null, the current function parameters are used,
   // otherwise the parameters in params are used.
   //
   // the argument eps may be specified to control the step size (precision).
   // the step size is taken as eps*(xmax-xmin).
   // the default value (0.001) should be good enough for the vast majority
   // of functions. Give a smaller value if your function has many changes
   // of the second derivative in the function range.
   //
   // Getting the error via TF1::DerivativeError:
   //   (total error = roundoff error + interpolation error)
   // the estimate of the roundoff error is taken as follows:
   //Begin_Latex
   //    err = k#sqrt{f(x)^{2} + x^{2}deriv^{2}}#sqrt{#sum ai^{2}},
   //End_Latex
   // where k is the double precision, ai are coefficients used in
   // central difference formulas
   // interpolation error is decreased by making the step size h smaller.
   //
   // Author: Anna Kreshuk
   
   if (GetNdim() > 1) { 
      Warning("Derivative","Function dimension is larger than one");
   }

   ROOT::Math::RichardsonDerivator rd;
   double xmin, xmax;
   GetRange(xmin, xmax);
   // this is not optimal (should be used the average x instead of the range) 
   double h = eps* std::abs(xmax-xmin);
   if ( h <= 0 ) h = 0.001;  
   double der = 0; 
   if (params) { 
      ROOT::Math::WrappedTF1 wtf(*( const_cast<TF1 *> (this) )); 
      wtf.SetParameters(params);
      der = rd.Derivative1(wtf,x,h);   
   }                                            
   else { 
      // no need to set parameters used a non-parametric wrapper to avoid allocating 
      // an array with parameter values
      ROOT::Math::WrappedFunction<const TF1 & > wf( *this);
      der = rd.Derivative1(wf,x,h);   
   }

   gErrorTF1 = rd.Error();
   return der;

}


//______________________________________________________________________________
Double_t TF1::Derivative2(Double_t x, Double_t *params, Double_t eps) const
{
   // Returns the second derivative of the function at point x,
   // computed by Richardson's extrapolation method (use 2 derivative estimates
   // to compute a third, more accurate estimation)
   // first, derivatives with steps h and h/2 are computed by central difference formulas
   //Begin_Latex
   //    D(h) = #frac{f(x+h) - 2f(x) + f(x-h)}{h^{2}}
   //End_Latex
   // the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex
   //  "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition"
   //
   // if the argument params is null, the current function parameters are used,
   // otherwise the parameters in params are used.
   //
   // the argument eps may be specified to control the step size (precision).
   // the step size is taken as eps*(xmax-xmin).
   // the default value (0.001) should be good enough for the vast majority
   // of functions. Give a smaller value if your function has many changes
   // of the second derivative in the function range.
   //
   // Getting the error via TF1::DerivativeError:
   //   (total error = roundoff error + interpolation error)
   // the estimate of the roundoff error is taken as follows:
   //Begin_Latex
   //    err = k#sqrt{f(x)^{2} + x^{2}deriv^{2}}#sqrt{#sum ai^{2}},
   //End_Latex
   // where k is the double precision, ai are coefficients used in
   // central difference formulas
   // interpolation error is decreased by making the step size h smaller.
   //
   // Author: Anna Kreshuk

   if (GetNdim() > 1) { 
      Warning("Derivative2","Function dimension is larger than one");
   }

   ROOT::Math::RichardsonDerivator rd;
   double xmin, xmax;
   GetRange(xmin, xmax);
   // this is not optimal (should be used the average x instead of the range) 
   double h = eps* std::abs(xmax-xmin);
   if ( h <= 0 ) h = 0.001;  
   double der = 0; 
   if (params) { 
      ROOT::Math::WrappedTF1 wtf(*( const_cast<TF1 *> (this) )); 
      wtf.SetParameters(params);
      der = rd.Derivative2(wtf,x,h);   
   }                                            
   else { 
      // no need to set parameters used a non-parametric wrapper to avoid allocating 
      // an array with parameter values
      ROOT::Math::WrappedFunction<const TF1 & > wf( *this);
      der = rd.Derivative2(wf,x,h);   
   }

   gErrorTF1 = rd.Error();

   return der;
}


//______________________________________________________________________________
Double_t TF1::Derivative3(Double_t x, Double_t *params, Double_t eps) const
{
   // Returns the third derivative of the function at point x,
   // computed by Richardson's extrapolation method (use 2 derivative estimates
   // to compute a third, more accurate estimation)
   // first, derivatives with steps h and h/2 are computed by central difference formulas
   //Begin_Latex
   //    D(h) = #frac{f(x+2h) - 2f(x+h) + 2f(x-h) - f(x-2h)}{2h^{3}}
   //End_Latex
   // the final estimate Begin_Latex D = #frac{4D(h/2) - D(h)}{3} End_Latex
   //  "Numerical Methods for Scientists and Engineers", H.M.Antia, 2nd edition"
   //
   // if the argument params is null, the current function parameters are used,
   // otherwise the parameters in params are used.
   //
   // the argument eps may be specified to control the step size (precision).
   // the step size is taken as eps*(xmax-xmin).
   // the default value (0.001) should be good enough for the vast majority
   // of functions. Give a smaller value if your function has many changes
   // of the second derivative in the function range.
   //
   // Getting the error via TF1::DerivativeError:
   //   (total error = roundoff error + interpolation error)
   // the estimate of the roundoff error is taken as follows:
   //Begin_Latex
   //    err = k#sqrt{f(x)^{2} + x^{2}deriv^{2}}#sqrt{#sum ai^{2}},
   //End_Latex
   // where k is the double precision, ai are coefficients used in
   // central difference formulas
   // interpolation error is decreased by making the step size h smaller.
   //
   // Author: Anna Kreshuk

   if (GetNdim() > 1) { 
      Warning("Derivative3","Function dimension is larger than one");
   }

   ROOT::Math::RichardsonDerivator rd;
   double xmin, xmax;
   GetRange(xmin, xmax);
   // this is not optimal (should be used the average x instead of the range) 
   double h = eps* std::abs(xmax-xmin);
   if ( h <= 0 ) h = 0.001;  
   double der = 0; 
   if (params) { 
      ROOT::Math::WrappedTF1 wtf(*( const_cast<TF1 *> (this) )); 
      wtf.SetParameters(params);
      der = rd.Derivative3(wtf,x,h);   
   }                                            
   else { 
      // no need to set parameters used a non-parametric wrapper to avoid allocating 
      // an array with parameter values
      ROOT::Math::WrappedFunction<const TF1 & > wf( *this);
      der = rd.Derivative3(wf,x,h);   
   }

   gErrorTF1 = rd.Error();
   return der; 

}


//______________________________________________________________________________
Double_t TF1::DerivativeError()
{
   // Static function returning the error of the last call to the of Derivative's
   // functions

   return gErrorTF1;
}


//______________________________________________________________________________
Int_t TF1::DistancetoPrimitive(Int_t px, Int_t py)
{
   // Compute distance from point px,py to a function.
   //
   //  Compute the closest distance of approach from point px,py to this
   //  function. The distance is computed in pixels units.
   //
   //  Note that px is called with a negative value when the TF1 is in
   //  TGraph or TH1 list of functions. In this case there is no point
   //  looking at the histogram axis.

   if (!fHistogram) return 9999;
   Int_t distance = 9999;
   if (px >= 0) {
      distance = fHistogram->DistancetoPrimitive(px,py);
      if (distance <= 1) return distance;
   } else {
      px = -px;
   }

   Double_t xx[1];
   Double_t x    = gPad->AbsPixeltoX(px);
   xx[0]         = gPad->PadtoX(x);
   if (xx[0] < fXmin || xx[0] > fXmax) return distance;
   Double_t fval = Eval(xx[0]);
   Double_t y    = gPad->YtoPad(fval);
   Int_t pybin   = gPad->YtoAbsPixel(y);
   return TMath::Abs(py - pybin);
}


//______________________________________________________________________________
void TF1::Draw(Option_t *option)
{
   // Draw this function with its current attributes.
   //
   // Possible option values are:
   //   "SAME"  superimpose on top of existing picture
   //   "L"     connect all computed points with a straight line
   //   "C"     connect all computed points with a smooth curve
   //   "FC"    draw a fill area below a smooth curve
   //
   // Note that the default value is "L". Therefore to draw on top
   // of an existing picture, specify option "LSAME"
   //
   // NB. You must use DrawCopy if you want to draw several times the same
   //     function in the current canvas.

   TString opt = option;
   opt.ToLower();
   if (gPad && !opt.Contains("same")) gPad->Clear();

   AppendPad(option);
}


//______________________________________________________________________________
TF1 *TF1::DrawCopy(Option_t *option) const
{
   // Draw a copy of this function with its current attributes.
   //
   //  This function MUST be used instead of Draw when you want to draw
   //  the same function with different parameters settings in the same canvas.
   //
   // Possible option values are:
   //   "SAME"  superimpose on top of existing picture
   //   "L"     connect all computed points with a straight line
   //   "C"     connect all computed points with a smooth curve
   //   "FC"    draw a fill area below a smooth curve
   //
   // Note that the default value is "L". Therefore to draw on top
   // of an existing picture, specify option "LSAME"

   TF1 *newf1 = (TF1*)this->IsA()->New();
   Copy(*newf1);
   newf1->AppendPad(option);
   newf1->SetBit(kCanDelete);
   return newf1;
}


//______________________________________________________________________________
TObject *TF1::DrawDerivative(Option_t *option)
{
   // Draw derivative of this function
   //
   // An intermediate TGraph object is built and drawn with option.
   // The function returns a pointer to the TGraph object. Do:
   //    TGraph *g = (TGraph*)myfunc.DrawDerivative(option);
   //
   // The resulting graph will be drawn into the current pad.
   // If this function is used via the context menu, it recommended
   // to create a new canvas/pad before invoking this function.

   TVirtualPad *pad = gROOT->GetSelectedPad();
   TVirtualPad *padsav = gPad;
   if (pad) pad->cd();

   TGraph *gr = new TGraph(this,"d");
   gr->Draw(option);
   if (padsav) padsav->cd();
   return gr;
}


//______________________________________________________________________________
TObject *TF1::DrawIntegral(Option_t *option)
{
   // Draw integral of this function
   //
   // An intermediate TGraph object is built and drawn with option.
   // The function returns a pointer to the TGraph object. Do:
   //    TGraph *g = (TGraph*)myfunc.DrawIntegral(option);
   //
   // The resulting graph will be drawn into the current pad.
   // If this function is used via the context menu, it recommended
   // to create a new canvas/pad before invoking this function.

   TVirtualPad *pad = gROOT->GetSelectedPad();
   TVirtualPad *padsav = gPad;
   if (pad) pad->cd();

   TGraph *gr = new TGraph(this,"i");
   gr->Draw(option);
   if (padsav) padsav->cd();
   return gr;
}


//______________________________________________________________________________
void TF1::DrawF1(const char *formula, Double_t xmin, Double_t xmax, Option_t *option)
{
   // Draw formula between xmin and xmax.

   if (Compile(formula)) return;

   SetRange(xmin, xmax);

   Draw(option);
}


//______________________________________________________________________________
Double_t TF1::Eval(Double_t x, Double_t y, Double_t z, Double_t t) const
{
   // Evaluate this formula.
   //
   //   Computes the value of this function (general case for a 3-d function)
   //   at point x,y,z.
   //   For a 1-d function give y=0 and z=0
   //   The current value of variables x,y,z is passed through x, y and z.
   //   The parameters used will be the ones in the array params if params is given
   //    otherwise parameters will be taken from the stored data members fParams

   Double_t xx[4];
   xx[0] = x;
   xx[1] = y;
   xx[2] = z;
   xx[3] = t;

   ((TF1*)this)->InitArgs(xx,fParams);

   return ((TF1*)this)->EvalPar(xx,fParams);
}


//______________________________________________________________________________
Double_t TF1::EvalPar(const Double_t *x, const Double_t *params)
{
   // Evaluate function with given coordinates and parameters.
   //
   // Compute the value of this function at point defined by array x
   // and current values of parameters in array params.
   // If argument params is omitted or equal 0, the internal values
   // of parameters (array fParams) will be used instead.
   // For a 1-D function only x[0] must be given.
   // In case of a multi-dimemsional function, the arrays x must be
   // filled with the corresponding number of dimensions.
   //
   // WARNING. In case of an interpreted function (fType=2), it is the
   // user's responsability to initialize the parameters via InitArgs
   // before calling this function.
   // InitArgs should be called at least once to specify the addresses
   // of the arguments x and params.
   // InitArgs should be called everytime these addresses change.

   fgCurrent = this;

   if (fType == 0) return TFormula::EvalPar(x,params);
   Double_t result = 0;
   if (fType == 1)  {
//       if (fFunction) {
//          if (params) result = (*fFunction)((Double_t*)x,(Double_t*)params);
//          else        result = (*fFunction)((Double_t*)x,fParams);
      if (!fFunctor.Empty()) {
         if (params) result = fFunctor((Double_t*)x,(Double_t*)params);
         else        result = fFunctor((Double_t*)x,fParams);

      }else          result = GetSave(x);
      return result;
   }
   if (fType == 2) {
      if (fMethodCall) fMethodCall->Execute(result);
      else             result = GetSave(x);
      return result;
   }
   if (fType == 3) {
      //std::cout << "Eval interp function object  " << fCintFunc << " result = " << result << std::endl;
      if (fMethodCall) fMethodCall->Execute(fCintFunc,result);
      else             result = GetSave(x);
      return result;
   }
   return result;
}


//______________________________________________________________________________
void TF1::ExecuteEvent(Int_t event, Int_t px, Int_t py)
{
   // Execute action corresponding to one event.
   //
   //  This member function is called when a F1 is clicked with the locator

   if (fHistogram) fHistogram->ExecuteEvent(event,px,py);

   if (!gPad->GetView()) {
      if (event == kMouseMotion)  gPad->SetCursor(kHand);
   }
}


//______________________________________________________________________________
void TF1::FixParameter(Int_t ipar, Double_t value)
{
   // Fix the value of a parameter
   // The specified value will be used in a fit operation

   if (ipar < 0 || ipar > fNpar-1) return;
   SetParameter(ipar,value);
   if (value != 0) SetParLimits(ipar,value,value);
   else            SetParLimits(ipar,1,1);
}


//______________________________________________________________________________
TF1 *TF1::GetCurrent()
{
   // Static function returning the current function being processed

   return fgCurrent;
}


//______________________________________________________________________________
TH1 *TF1::GetHistogram() const
{
   // Return a pointer to the histogram used to vusualize the function

   if (fHistogram) return fHistogram;

   // May be function has not yet be painted. force a pad update
   ((TF1*)this)->Paint();
   return fHistogram;
}


//______________________________________________________________________________
Double_t TF1::GetMaximum(Double_t xmin, Double_t xmax) const
{
   // Return the maximum value of the function
   // Method:
   //  First, the grid search is used to bracket the maximum
   //  with the step size = (xmax-xmin)/fNpx.
   //  This way, the step size can be controlled via the SetNpx() function.
   //  If the function is unimodal or if its extrema are far apart, setting
   //  the fNpx to a small value speeds the algorithm up many times.
   //  Then, Brent's method is applied on the bracketed interval

   if (xmin >= xmax) {xmin = fXmin; xmax = fXmax;}

   ROOT::Math::BrentMinimizer1D bm;
   GInverseFunc g(this);
   ROOT::Math::WrappedFunction<GInverseFunc> wf1(g);
   bm.SetFunction( wf1, xmin, xmax );
   bm.Minimize(10, 0, 0 );
   Double_t x;
   x = - bm.FValMinimum();

   return x;
}


//______________________________________________________________________________
Double_t TF1::GetMaximumX(Double_t xmin, Double_t xmax) const
{
   // Return the X value corresponding to the maximum value of the function
   // Method:
   //  First, the grid search is used to bracket the maximum
   //  with the step size = (xmax-xmin)/fNpx.
   //  This way, the step size can be controlled via the SetNpx() function.
   //  If the function is unimodal or if its extrema are far apart, setting
   //  the fNpx to a small value speeds the algorithm up many times.
   //  Then, Brent's method is applied on the bracketed interval

   if (xmin >= xmax) {xmin = fXmin; xmax = fXmax;}

   ROOT::Math::BrentMinimizer1D bm;
   GInverseFunc g(this);
   ROOT::Math::WrappedFunction<GInverseFunc> wf1(g);
   bm.SetFunction( wf1, xmin, xmax );
   bm.Minimize(10, 0, 0 );
   Double_t x;
   x = bm.XMinimum();

   return x;
}


//______________________________________________________________________________
Double_t TF1::GetMinimum(Double_t xmin, Double_t xmax) const
{
   // Returns the minimum value of the function on the (xmin, xmax) interval
   // Method:
   //  First, the grid search is used to bracket the maximum
   //  with the step size = (xmax-xmin)/fNpx. This way, the step size
   //  can be controlled via the SetNpx() function. If the function is
   //  unimodal or if its extrema are far apart, setting the fNpx to
   //  a small value speeds the algorithm up many times.
   //  Then, Brent's method is applied on the bracketed interval

   if (xmin >= xmax) {xmin = fXmin; xmax = fXmax;}

   ROOT::Math::BrentMinimizer1D bm;
   ROOT::Math::WrappedFunction<const TF1&> wf1(*this);
   bm.SetFunction( wf1, xmin, xmax );
   bm.Minimize(10, 0, 0 );
   Double_t x;
   x = bm.FValMinimum();

   return x;
}


//______________________________________________________________________________
Double_t TF1::GetMinimumX(Double_t xmin, Double_t xmax) const
{
   // Returns the X value corresponding to the minimum value of the function
   // on the (xmin, xmax) interval
   // Method:
   //  First, the grid search is used to bracket the maximum
   //  with the step size = (xmax-xmin)/fNpx. This way, the step size
   //  can be controlled via the SetNpx() function. If the function is
   //  unimodal or if its extrema are far apart, setting the fNpx to
   //  a small value speeds the algorithm up many times.
   //  Then, Brent's method is applied on the bracketed interval

   if (xmin >= xmax) {xmin = fXmin; xmax = fXmax;}

   ROOT::Math::BrentMinimizer1D bm;
   ROOT::Math::WrappedFunction<const TF1&> wf1(*this);
   bm.SetFunction( wf1, xmin, xmax );
   bm.Minimize(10, 0, 0 );
   Double_t x;
   x = bm.XMinimum();

   return x;
}


//______________________________________________________________________________
Double_t TF1::GetX(Double_t fy, Double_t xmin, Double_t xmax) const
{
   // Returns the X value corresponding to the function value fy for (xmin<x<xmax).
   // Method:
   //  First, the grid search is used to bracket the maximum
   //  with the step size = (xmax-xmin)/fNpx. This way, the step size
   //  can be controlled via the SetNpx() function. If the function is
   //  unimodal or if its extrema are far apart, setting the fNpx to
   //  a small value speeds the algorithm up many times.
   //  Then, Brent's method is applied on the bracketed interval

   if (xmin >= xmax) {xmin = fXmin; xmax = fXmax;}
   
   GFunc g(this, fy);
   ROOT::Math::WrappedFunction<GFunc> wf1(g);
   ROOT::Math::RootFinder brf(ROOT::Math::RootFinder::kBRENT);
   brf.SetFunction(wf1,xmin,xmax);
   brf.Solve();
   return brf.Root();

}

//______________________________________________________________________________
Int_t TF1::GetNDF() const
{
   // Return the number of degrees of freedom in the fit
   // the fNDF parameter has been previously computed during a fit.
   // The number of degrees of freedom corresponds to the number of points
   // used in the fit minus the number of free parameters.

   if (fNDF == 0 && (fNpfits > fNpar) ) return fNpfits-fNpar;
   return fNDF;
}


//______________________________________________________________________________
Int_t TF1::GetNumberFreeParameters() const
{
   // Return the number of free parameters

   Int_t nfree = fNpar;
   Double_t al,bl;
   for (Int_t i=0;i<fNpar;i++) {
      ((TF1*)this)->GetParLimits(i,al,bl);
      if (al*bl != 0 && al >= bl) nfree--;
   }
   return nfree;
}


//______________________________________________________________________________
char *TF1::GetObjectInfo(Int_t px, Int_t /* py */) const
{
   // Redefines TObject::GetObjectInfo.
   // Displays the function info (x, function value)
   // corresponding to cursor position px,py

   static char info[64];
   Double_t x = gPad->PadtoX(gPad->AbsPixeltoX(px));
   sprintf(info,"(x=%g, f=%g)",x,((TF1*)this)->Eval(x));
   return info;
}


//______________________________________________________________________________
Double_t TF1::GetParError(Int_t ipar) const
{
   // Return value of parameter number ipar

   if (ipar < 0 || ipar > fNpar-1) return 0;
   return fParErrors[ipar];
}


//______________________________________________________________________________
void TF1::GetParLimits(Int_t ipar, Double_t &parmin, Double_t &parmax) const
{
   // Return limits for parameter ipar.

   parmin = 0;
   parmax = 0;
   if (ipar < 0 || ipar > fNpar-1) return;
   if (fParMin) parmin = fParMin[ipar];
   if (fParMax) parmax = fParMax[ipar];
}


//______________________________________________________________________________
Double_t TF1::GetProb() const
{
   // Return the fit probability

   if (fNDF <= 0) return 0;
   return TMath::Prob(fChisquare,fNDF);
}


//______________________________________________________________________________
Int_t TF1::GetQuantiles(Int_t nprobSum, Double_t *q, const Double_t *probSum)
{
   //  Compute Quantiles for density distribution of this function
   //     Quantile x_q of a probability distribution Function F is defined as
   //Begin_Latex
   //        F(x_{q}) = #int_{xmin}^{x_{q}} f dx = q with 0 <= q <= 1.
   //End_Latex
   //     For instance the median Begin_Latex x_{#frac{1}{2}} End_Latex of a distribution is defined as that value
   //     of the random variable for which the distribution function equals 0.5:
   //Begin_Latex
   //        F(x_{#frac{1}{2}}) = #prod(x < x_{#frac{1}{2}}) = #frac{1}{2}
   //End_Latex
   //  code from Eddy Offermann, Renaissance
   //
   // input parameters
   //   - this TF1 function
   //   - nprobSum maximum size of array q and size of array probSum
   //   - probSum array of positions where quantiles will be computed.
   //     It is assumed to contain at least nprobSum values.
   //  output
   //   - return value nq (<=nprobSum) with the number of quantiles computed
   //   - array q filled with nq quantiles
   //
   //  Getting quantiles from two histograms and storing results in a TGraph,
   //   a so-called QQ-plot
   //
   //     TGraph *gr = new TGraph(nprob);
   //     f1->GetQuantiles(nprob,gr->GetX());
   //     f2->GetQuantiles(nprob,gr->GetY());
   //     gr->Draw("alp");

   const Int_t npx     = TMath::Min(250,TMath::Max(50,2*nprobSum));
   const Double_t xMin = GetXmin();
   const Double_t xMax = GetXmax();
   const Double_t dx   = (xMax-xMin)/npx;

   TArrayD integral(npx+1);
   TArrayD alpha(npx);
   TArrayD beta(npx);
   TArrayD gamma(npx);

   integral[0] = 0;
   Int_t intNegative = 0;
   Int_t i;
   for (i = 0; i < npx; i++) {
      const Double_t *params = 0;
      Double_t integ = Integral(Double_t(xMin+i*dx),Double_t(xMin+i*dx+dx),params);
      if (integ < 0) {intNegative++; integ = -integ;}
      integral[i+1] = integral[i] + integ;
   }

   if (intNegative > 0)
      Warning("GetQuantiles","function:%s has %d negative values: abs assumed",
      GetName(),intNegative);
   if (integral[npx] == 0) {
      Error("GetQuantiles","Integral of function is zero");
      return 0;
   }

   const Double_t total = integral[npx];
   for (i = 1; i <= npx; i++) integral[i] /= total;
   //the integral r for each bin is approximated by a parabola
   //  x = alpha + beta*r +gamma*r**2
   // compute the coefficients alpha, beta, gamma for each bin
   for (i = 0; i < npx; i++) {
      const Double_t x0 = xMin+dx*i;
      const Double_t r2 = integral[i+1]-integral[i];
      const Double_t r1 = Integral(x0,x0+0.5*dx)/total;
      gamma[i] = (2*r2-4*r1)/(dx*dx);
      beta[i]  = r2/dx-gamma[i]*dx;
      alpha[i] = x0;
      gamma[i] *= 2;
   }

   // Be careful because of finite precision in the integral; Use the fact that the integral
   // is monotone increasing
   for (i = 0; i < nprobSum; i++) {
      const Double_t r = probSum[i];
      Int_t bin  = TMath::Max(TMath::BinarySearch(npx+1,integral.GetArray(),r)-1,(Long64_t)0);
      while (bin < npx-1 && integral[bin+1] == r) {
         if (integral[bin+2] == r) bin++;
         else break;
      }

      const Double_t rr = r-integral[bin];
      if (rr != 0.0) {
         Double_t xx = 0.0;
         const Double_t fac = -2.*gamma[bin]*rr/beta[bin]/beta[bin];
         if (fac != 0 && fac <= 1)
            xx = (-beta[bin]+TMath::Sqrt(beta[bin]*beta[bin]+2*gamma[bin]*rr))/gamma[bin];
         else if (beta[bin] != 0.)
            xx = rr/beta[bin];
         q[i] = alpha[bin]+xx;
      } else {
         q[i] = alpha[bin];
         if (integral[bin+1] == r) q[i] += dx;
      }
   }

   return nprobSum;
}


//______________________________________________________________________________
Double_t TF1::GetRandom()
{
   // Return a random number following this function shape
   //
   //   The distribution contained in the function fname (TF1) is integrated
   //   over the channel contents.
   //   It is normalized to 1.
   //   For each bin the integral is approximated by a parabola.
   //   The parabola coefficients are stored as non persistent data members
   //   Getting one random number implies:
   //     - Generating a random number between 0 and 1 (say r1)
   //     - Look in which bin in the normalized integral r1 corresponds to
   //     - Evaluate the parabolic curve in the selected bin to find
   //       the corresponding X value.
   //   if the ratio fXmax/fXmin > fNpx the integral is tabulated in log scale in x
   //   The parabolic approximation is very good as soon as the number
   //   of bins is greater than 50.

   //  Check if integral array must be build
   if (fIntegral == 0) {
      fIntegral = new Double_t[fNpx+1];
      fAlpha    = new Double_t[fNpx+1];
      fBeta     = new Double_t[fNpx];
      fGamma    = new Double_t[fNpx];
      fIntegral[0] = 0;
      fAlpha[fNpx] = 0;
      Double_t integ;
      Int_t intNegative = 0;
      Int_t i;
      Bool_t logbin = kFALSE;
      Double_t dx;
      Double_t xmin = fXmin;
      Double_t xmax = fXmax;
      if (xmin > 0 && xmax/xmin> fNpx) {
         logbin =  kTRUE;
         fAlpha[fNpx] = 1;
         xmin = TMath::Log10(fXmin);
         xmax = TMath::Log10(fXmax);
      }
      dx = (xmax-xmin)/fNpx;
         
      Double_t *xx = new Double_t[fNpx+1];
      for (i=0;i<fNpx;i++) {
            xx[i] = xmin +i*dx;
      }
      xx[fNpx] = xmax;
      for (i=0;i<fNpx;i++) {
         if (logbin) {
            integ = Integral(TMath::Power(10,xx[i]), TMath::Power(10,xx[i+1]));
         } else {
            integ = Integral(xx[i],xx[i+1]);
         }
         if (integ < 0) {intNegative++; integ = -integ;}
         fIntegral[i+1] = fIntegral[i] + integ;
      }
      if (intNegative > 0) {
         Warning("GetRandom","function:%s has %d negative values: abs assumed",GetName(),intNegative);
      }
      if (fIntegral[fNpx] == 0) {
         Error("GetRandom","Integral of function is zero");
         return 0;
      }
      Double_t total = fIntegral[fNpx];
      for (i=1;i<=fNpx;i++) {  // normalize integral to 1
         fIntegral[i] /= total;
      }
      //the integral r for each bin is approximated by a parabola
      //  x = alpha + beta*r +gamma*r**2
      // compute the coefficients alpha, beta, gamma for each bin
      Double_t x0,r1,r2,r3;
      for (i=0;i<fNpx;i++) {
         x0 = xx[i];
         r2 = fIntegral[i+1] - fIntegral[i];
         if (logbin) r1 = Integral(TMath::Power(10,x0),TMath::Power(10,x0+0.5*dx))/total;
         else        r1 = Integral(x0,x0+0.5*dx)/total;
         r3 = 2*r2 - 4*r1;
         if (TMath::Abs(r3) > 1e-8) fGamma[i] = r3/(dx*dx);
         else           fGamma[i] = 0;
         fBeta[i]  = r2/dx - fGamma[i]*dx;
         fAlpha[i] = x0;
         fGamma[i] *= 2;
      }
      delete [] xx;
   }

   // return random number
   Double_t r  = gRandom->Rndm();
   Int_t bin  = TMath::BinarySearch(fNpx,fIntegral,r);
   Double_t rr = r - fIntegral[bin];

   Double_t yy;
   if(fGamma[bin] != 0)
      yy = (-fBeta[bin] + TMath::Sqrt(fBeta[bin]*fBeta[bin]+2*fGamma[bin]*rr))/fGamma[bin];
   else
      yy = rr/fBeta[bin];
   Double_t x = fAlpha[bin] + yy;
   if (fAlpha[fNpx] > 0) return TMath::Power(10,x);
   return x;
}


//______________________________________________________________________________
Double_t TF1::GetRandom(Double_t xmin, Double_t xmax)
{
   // Return a random number following this function shape in [xmin,xmax]
   //
   //   The distribution contained in the function fname (TF1) is integrated
   //   over the channel contents.
   //   It is normalized to 1.
   //   For each bin the integral is approximated by a parabola.
   //   The parabola coefficients are stored as non persistent data members
   //   Getting one random number implies:
   //     - Generating a random number between 0 and 1 (say r1)
   //     - Look in which bin in the normalized integral r1 corresponds to
   //     - Evaluate the parabolic curve in the selected bin to find
   //       the corresponding X value.
   //   The parabolic approximation is very good as soon as the number
   //   of bins is greater than 50.
   //
   //  IMPORTANT NOTE
   //  The integral of the function is computed at fNpx points. If the function
   //  has sharp peaks, you should increase the number of points (SetNpx)
   //  such that the peak is correctly tabulated at several points.

   //  Check if integral array must be build
   if (fIntegral == 0) {
      Double_t dx = (fXmax-fXmin)/fNpx;
      fIntegral = new Double_t[fNpx+1];
      fAlpha    = new Double_t[fNpx];
      fBeta     = new Double_t[fNpx];
      fGamma    = new Double_t[fNpx];
      fIntegral[0] = 0;
      Double_t integ;
      Int_t intNegative = 0;
      Int_t i;
      for (i=0;i<fNpx;i++) {
         integ = Integral(Double_t(fXmin+i*dx), Double_t(fXmin+i*dx+dx));
         if (integ < 0) {intNegative++; integ = -integ;}
         fIntegral[i+1] = fIntegral[i] + integ;
      }
      if (intNegative > 0) {
         Warning("GetRandom","function:%s has %d negative values: abs assumed",GetName(),intNegative);
      }
      if (fIntegral[fNpx] == 0) {
         Error("GetRandom","Integral of function is zero");
         return 0;
      }
      Double_t total = fIntegral[fNpx];
      for (i=1;i<=fNpx;i++) {  // normalize integral to 1
         fIntegral[i] /= total;
      }
      //the integral r for each bin is approximated by a parabola
      //  x = alpha + beta*r +gamma*r**2
      // compute the coefficients alpha, beta, gamma for each bin
      Double_t x0,r1,r2,r3;
      for (i=0;i<fNpx;i++) {
         x0 = fXmin+i*dx;
         r2 = fIntegral[i+1] - fIntegral[i];
         r1 = Integral(x0,x0+0.5*dx)/total;
         r3 = 2*r2 - 4*r1;
         if (TMath::Abs(r3) > 1e-8) fGamma[i] = r3/(dx*dx);
         else           fGamma[i] = 0;
         fBeta[i]  = r2/dx - fGamma[i]*dx;
         fAlpha[i] = x0;
         fGamma[i] *= 2;
      }
   }

   // return random number
   Double_t dx   = (fXmax-fXmin)/fNpx;
   Int_t nbinmin = (Int_t)((xmin-fXmin)/dx);
   Int_t nbinmax = (Int_t)((xmax-fXmin)/dx)+2;
   if(nbinmax>fNpx) nbinmax=fNpx;

   Double_t pmin=fIntegral[nbinmin];
   Double_t pmax=fIntegral[nbinmax];

   Double_t r,x,xx,rr;
   do {
      r  = gRandom->Uniform(pmin,pmax);

      Int_t bin  = TMath::BinarySearch(fNpx,fIntegral,r);
      rr = r - fIntegral[bin];

      if(fGamma[bin] != 0)
         xx = (-fBeta[bin] + TMath::Sqrt(fBeta[bin]*fBeta[bin]+2*fGamma[bin]*rr))/fGamma[bin];
      else
         xx = rr/fBeta[bin];
      x = fAlpha[bin] + xx;
   } while(x<xmin || x>xmax);
   return x;
}


//______________________________________________________________________________
void TF1::GetRange(Double_t &xmin, Double_t &xmax) const
{
   // Return range of a 1-D function.

   xmin = fXmin;
   xmax = fXmax;
}


//______________________________________________________________________________
void TF1::GetRange(Double_t &xmin, Double_t &ymin,  Double_t &xmax, Double_t &ymax) const
{
   // Return range of a 2-D function.

   xmin = fXmin;
   xmax = fXmax;
   ymin = 0;
   ymax = 0;
}


//______________________________________________________________________________
void TF1::GetRange(Double_t &xmin, Double_t &ymin, Double_t &zmin, Double_t &xmax, Double_t &ymax, Double_t &zmax) const
{
   // Return range of function.

   xmin = fXmin;
   xmax = fXmax;
   ymin = 0;
   ymax = 0;
   zmin = 0;
   zmax = 0;
}


//______________________________________________________________________________
Double_t TF1::GetSave(const Double_t *xx)
{
    // Get value corresponding to X in array of fSave values

   if (fNsave <= 0) return 0;
   if (fSave == 0) return 0;
   Double_t x    = Double_t(xx[0]);
   Double_t y,dx,xmin,xmax,xlow,xup,ylow,yup;
   if (fParent && fParent->InheritsFrom(TH1::Class())) {
      //if parent is a histogram the function had been savedat the center of the bins
      //we make a linear interpolation between the saved values
      xmin = fSave[fNsave-3];
      xmax = fSave[fNsave-2];
      if (fSave[fNsave-1] == xmax) {
         TH1 *h = (TH1*)fParent;
         TAxis *xaxis = h->GetXaxis();
         Int_t bin1  = xaxis->FindBin(xmin);
         Int_t binup = xaxis->FindBin(xmax);
         Int_t bin   = xaxis->FindBin(x);
         if (bin < binup) {
            xlow = xaxis->GetBinCenter(bin);
            xup  = xaxis->GetBinCenter(bin+1);
            ylow = fSave[bin-bin1];
            yup  = fSave[bin-bin1+1];
         } else {
            xlow = xaxis->GetBinCenter(bin-1);
            xup  = xaxis->GetBinCenter(bin);
            ylow = fSave[bin-bin1-1];
            yup  = fSave[bin-bin1];
         }
         dx = xup-xlow;
         y  = ((xup*ylow-xlow*yup) + x*(yup-ylow))/dx;
         return y;
      }
   }
   Int_t np = fNsave - 3;
   xmin = Double_t(fSave[np+1]);
   xmax = Double_t(fSave[np+2]);
   dx   = (xmax-xmin)/np;
   if (x < xmin || x > xmax) return 0;
   if (dx <= 0) return 0;

   Int_t bin     = Int_t((x-xmin)/dx);
   xlow = xmin + bin*dx;
   xup  = xlow + dx;
   ylow = fSave[bin];
   yup  = fSave[bin+1];
   y    = ((xup*ylow-xlow*yup) + x*(yup-ylow))/dx;
   return y;
}


//______________________________________________________________________________
TAxis *TF1::GetXaxis() const
{
   // Get x axis of the function.

   TH1 *h = GetHistogram();
   if (!h) return 0;
   return h->GetXaxis();
}


//______________________________________________________________________________
TAxis *TF1::GetYaxis() const
{
   // Get y axis of the function.

   TH1 *h = GetHistogram();
   if (!h) return 0;
   return h->GetYaxis();
}


//______________________________________________________________________________
TAxis *TF1::GetZaxis() const
{
   // Get z axis of the function. (In case this object is a TF2 or TF3)

   TH1 *h = GetHistogram();
   if (!h) return 0;
   return h->GetZaxis();
}



//______________________________________________________________________________
Double_t TF1::GradientPar(Int_t ipar, const Double_t *x, Double_t eps)
{
   // Compute the gradient (derivative) wrt a parameter ipar
   // Parameters:
   // ipar - index of parameter for which the derivative is computed
   // x - point, where the derivative is computed
   // eps - if the errors of parameters have been computed, the step used in
   // numerical differentiation is eps*parameter_error.
   // if the errors have not been computed, step=eps is used
   // default value of eps = 0.01
   // Method is the same as in Derivative() function
   //
   // If a paramter is fixed, the gradient on this parameter = 0

   if (fNpar == 0) return 0; 

   if(eps< 1e-10 || eps > 1) {
      Warning("Derivative","parameter esp=%g out of allowed range[1e-10,1], reset to 0.01",eps);
      eps = 0.01;
   }
   Double_t h;
   TF1 *func = (TF1*)this;
   //save original parameters
   Double_t par0 = fParams[ipar];


   func->InitArgs(x, fParams);

   Double_t al, bl;
   Double_t f1, f2, g1, g2, h2, d0, d2;

   ((TF1*)this)->GetParLimits(ipar,al,bl);
   if (al*bl != 0 && al >= bl) {
      //this parameter is fixed
      return 0;
   }

   // check if error has been computer (is not zero)
   if (func->GetParError(ipar)!=0)
      h = eps*func->GetParError(ipar);
   else
      h=eps;



   fParams[ipar] = par0 + h;     f1 = func->EvalPar(x,fParams);
   fParams[ipar] = par0 - h;     f2 = func->EvalPar(x,fParams);
   fParams[ipar] = par0 + h/2;   g1 = func->EvalPar(x,fParams);
   fParams[ipar] = par0 - h/2;   g2 = func->EvalPar(x,fParams);

   //compute the central differences
   h2    = 1/(2.*h);
   d0    = f1 - f2;
   d2    = 2*(g1 - g2);

   Double_t  grad = h2*(4*d2 - d0)/3.;

   // restore original value
   fParams[ipar] = par0;

   return grad;
}

//______________________________________________________________________________
void TF1::GradientPar(const Double_t *x, Double_t *grad, Double_t eps)
{
   // Compute the gradient wrt parameters
   // Parameters:
   // x - point, were the gradient is computed
   // grad - used to return the computed gradient, assumed to be of at least fNpar size
   // eps - if the errors of parameters have been computed, the step used in
   // numerical differentiation is eps*parameter_error.
   // if the errors have not been computed, step=eps is used
   // default value of eps = 0.01
   // Method is the same as in Derivative() function
   //
   // If a paramter is fixed, the gradient on this parameter = 0

   if(eps< 1e-10 || eps > 1) {
      Warning("Derivative","parameter esp=%g out of allowed range[1e-10,1], reset to 0.01",eps);
      eps = 0.01;
   }

   for (Int_t ipar=0; ipar<fNpar; ipar++){
      grad[ipar] = GradientPar(ipar,x,eps);
   }
}

//______________________________________________________________________________
void TF1::InitArgs(const Double_t *x, const Double_t *params)
{
   // Initialize parameters addresses.

   if (fMethodCall) {
      Long_t args[2];
      args[0] = (Long_t)x;
      if (params) args[1] = (Long_t)params;
      else        args[1] = (Long_t)fParams;
      fMethodCall->SetParamPtrs(args);
   }
}


//______________________________________________________________________________
void TF1::InitStandardFunctions()
{
   // Create the basic function objects

   TF1 *f1;
   if (!gROOT->GetListOfFunctions()->FindObject("gaus")) {
      f1 = new TF1("gaus","gaus",-1,1);       f1->SetParameters(1,0,1);
      f1 = new TF1("gausn","gausn",-1,1);     f1->SetParameters(1,0,1);
      f1 = new TF1("landau","landau",-1,1);   f1->SetParameters(1,0,1);
      f1 = new TF1("landaun","landaun",-1,1); f1->SetParameters(1,0,1);
      f1 = new TF1("expo","expo",-1,1);       f1->SetParameters(1,1);
      for (Int_t i=0;i<10;i++) {
         f1 = new TF1(Form("pol%d",i),Form("pol%d",i),-1,1);
         f1->SetParameters(1,1,1,1,1,1,1,1,1,1);
      }
   }
}


//______________________________________________________________________________
Double_t TF1::Integral(Double_t a, Double_t b, const Double_t *params, Double_t epsilon)
{
   // Return Integral of function between a and b.
   //
   //   based on original CERNLIB routine DGAUSS by Sigfried Kolbig
   //   converted to C++ by Rene Brun
   //
   // This function computes, to an attempted specified accuracy, the value
   // of the integral.
   //Begin_Latex
   //   I = #int^{B}_{A} f(x)dx
   //End_Latex
   // Usage:
   //   In any arithmetic expression, this function has the approximate value
   //   of the integral I.
   //   - A, B: End-points of integration interval. Note that B may be less
   //           than A.
   //   - params: Array of function parameters. If 0, use current parameters.
   //   - epsilon: Accuracy parameter (see Accuracy).
   //
   //Method:
   //   For any interval [a,b] we define g8(a,b) and g16(a,b) to be the 8-point
   //   and 16-point Gaussian quadrature approximations to
   //Begin_Latex
   //   I = #int^{b}_{a} f(x)dx
   //End_Latex
   //   and define
   //Begin_Latex
   //   r(a,b) = #frac{#||{g_{16}(a,b)-g_{8}(a,b)}}{1+#||{g_{16}(a,b)}}
   //End_Latex
   //   Then,
   //Begin_Latex
   //   G = #sum_{i=1}^{k}g_{16}(x_{i-1},x_{i})
   //End_Latex
   //   where, starting with x0 = A and finishing with xk = B,
   //   the subdivision points xi(i=1,2,...) are given by
   //Begin_Latex
   //   x_{i} = x_{i-1} + #lambda(B-x_{i-1})
   //End_Latex
   //   Begin_Latex #lambdaEnd_Latex is equal to the first member of the
   //   sequence 1,1/2,1/4,... for which r(xi-1, xi) < EPS.
   //   If, at any stage in the process of subdivision, the ratio
   //Begin_Latex
   //   q = #||{#frac{x_{i}-x_{i-1}}{B-A}}
   //End_Latex
   //   is so small that 1+0.005q is indistinguishable from 1 to
   //   machine accuracy, an error exit occurs with the function value
   //   set equal to zero.
   //
   // Accuracy:
   //   Unless there is severe cancellation of positive and negative values of
   //   f(x) over the interval [A,B], the argument EPS may be considered as
   //   specifying a bound on the <I>relative</I> error of I in the case
   //   |I|&gt;1, and a bound on the absolute error in the case |I|&lt;1. More
   //   precisely, if k is the number of sub-intervals contributing to the
   //   approximation (see Method), and if
   //Begin_Latex
   //   I_{abs} = #int^{B}_{A} #||{f(x)}dx
   //End_Latex
   //   then the relation
   //Begin_Latex
   //   #frac{#||{G-I}}{I_{abs}+k} < EPS
   //End_Latex
   //   will nearly always be true, provided the routine terminates without
   //   printing an error message. For functions f having no singularities in
   //   the closed interval [A,B] the accuracy will usually be much higher than
   //   this.
   //
   // Error handling:
   //   The requested accuracy cannot be obtained (see Method).
   //   The function value is set equal to zero.
   //
   // Note 1:
   //   Values of the function f(x) at the interval end-points A and B are not
   //   required. The subprogram may therefore be used when these values are
   //   undefined.
   //
   // Note 2:
   //   Instead of TF1::Integral, you may want to use the combination of
   //   TF1::CalcGaussLegendreSamplingPoints and TF1::IntegralFast.
   //   See an example with the following script:
   //
   //   void gint() {
   //      TF1 *g = new TF1("g","gaus",-5,5);
   //      g->SetParameters(1,0,1);
   //      //default gaus integration method uses 6 points
   //      //not suitable to integrate on a large domain
   //      double r1 = g->Integral(0,5);
   //      double r2 = g->Integral(0,1000);
   //
   //      //try with user directives computing more points
   //      Int_t np = 1000;
   //      double *x=new double[np];
   //      double *w=new double[np];
   //      g->CalcGaussLegendreSamplingPoints(np,x,w,1e-15);
   //      double r3 = g->IntegralFast(np,x,w,0,5);
   //      double r4 = g->IntegralFast(np,x,w,0,1000);
   //      double r5 = g->IntegralFast(np,x,w,0,10000);
   //      double r6 = g->IntegralFast(np,x,w,0,100000);
   //      printf("g->Integral(0,5)               = %g\n",r1);
   //      printf("g->Integral(0,1000)            = %g\n",r2);
   //      printf("g->IntegralFast(n,x,w,0,5)     = %g\n",r3);
   //      printf("g->IntegralFast(n,x,w,0,1000)  = %g\n",r4);
   //      printf("g->IntegralFast(n,x,w,0,10000) = %g\n",r5);
   //      printf("g->IntegralFast(n,x,w,0,100000)= %g\n",r6);
   //      delete [] x;
   //      delete [] w;
   //   }
   //
   //   This example produces the following results:
   //
   //      g->Integral(0,5)               = 1.25331
   //      g->Integral(0,1000)            = 1.25319
   //      g->IntegralFast(n,x,w,0,5)     = 1.25331
   //      g->IntegralFast(n,x,w,0,1000)  = 1.25331
   //      g->IntegralFast(n,x,w,0,10000) = 1.25331
   //      g->IntegralFast(n,x,w,0,100000)= 1.253


   TF1_EvalWrapper wf1( this, params, fgAbsValue ); 

   ROOT::Math::GaussIntegrator giod;
   giod.SetFunction(wf1);
   giod.SetRelTolerance(epsilon);

   return giod.Integral(a, b);
}


//______________________________________________________________________________
Double_t TF1::Integral(Double_t, Double_t, Double_t, Double_t, Double_t)
{
   // Return Integral of a 2d function in range [ax,bx],[ay,by]

   Error("Integral","Must be called with a TF2 only");
   return 0;
}


//______________________________________________________________________________
Double_t TF1::Integral(Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t)
{
   // Return Integral of a 3d function in range [ax,bx],[ay,by],[az,bz]

   Error("Integral","Must be called with a TF3 only");
   return 0;
}

//______________________________________________________________________________
Double_t TF1::IntegralError(Double_t a, Double_t b, Double_t epsilon)
{
   // Return Error on Integral of a parameteric function between a and b 
   // due to the parameters uncertainties.
   // It is assumed the parameters are estimated from a fit and the covariance
   // matrix resulting from the fit is used in estimating this error.
   //
   // IMPORTANT NOTE: The calculation is valid assuming the parameters 
   // are resulting from the latest fit. If in the meantime a fit is done 
   // using another function, the routine will signal an error and return zero.

   Double_t x1[1]; 
   Double_t x2[1]; 
   x1[0] = a, x2[0] = b;
   return ROOT::TF1Helper::IntegralError(this,1,x1,x2,epsilon);
}

//______________________________________________________________________________
Double_t TF1::IntegralError(Int_t n, const Double_t * a, const Double_t * b, Double_t epsilon)
{
   // Return Error on Integral of a parameteric function with dimension larger tan one 
   // between a[] and b[]  due to the parameters uncertainties.
   // It is assumed the parameters are estimated from a fit and the covariance
   // matrix resulting from the fit is used in estimating this error.
   // For a TF1 with dimension larger than 1 (for example a TF2 or TF3) 
   // TF1::IntegralMultiple is used for the integral calculation
   //
   //
   // IMPORTANT NOTE: The calculation is valid assuming the parameters 
   // are resulting from the latest fit. If in the meantime a fit is done 
   // using another function, the routine will signal an error and return zero.

   return ROOT::TF1Helper::IntegralError(this,n,a,b,epsilon);
}

#ifdef INTHEFUTURE
//______________________________________________________________________________
Double_t TF1::IntegralFast(const TGraph *g, Double_t a, Double_t b, Double_t *params)
{
   // Gauss-Legendre integral, see CalcGaussLegendreSamplingPoints

   if (!g) return 0;
   return IntegralFast(g->GetN(), g->GetX(), g->GetY(), a, b, params);
}
#endif


//______________________________________________________________________________
Double_t TF1::IntegralFast(Int_t num, Double_t * /* x */, Double_t * /* w */, Double_t a, Double_t b, Double_t *params, Double_t epsilon)
{
   // Gauss-Legendre integral, see CalcGaussLegendreSamplingPoints

   // Now x and w are not used!

   ROOT::Math::WrappedTF1 wf1(*this);
   if ( params )
      wf1.SetParameters( params );
   ROOT::Math::GaussLegendreIntegrator gli(num,epsilon);
   gli.SetFunction( wf1 );
   return gli.Integral(a, b);

}


//______________________________________________________________________________
Double_t TF1::IntegralMultiple(Int_t n, const Double_t *a, const Double_t *b, Double_t eps, Double_t &relerr)
{
   //  See more general prototype below.
   //  This interface kept for back compatibility

   Int_t nfnevl,ifail;
   Int_t minpts = 2+2*n*(n+1)+1; //ie 7 for n=1
   Int_t maxpts = 1000;
   Double_t result = IntegralMultiple(n,a,b,minpts, maxpts,eps,relerr,nfnevl,ifail);
   if (ifail > 0) {
      Warning("IntegralMultiple","failed code=%d, ",ifail);
   }
   return result;
}


//______________________________________________________________________________
Double_t TF1::IntegralMultiple(Int_t n, const Double_t *a, const Double_t *b, Int_t /*minpts*/, Int_t maxpts, Double_t eps, Double_t &relerr,Int_t &nfnevl, Int_t &ifail)
{
   //  Adaptive Quadrature for Multiple Integrals over N-Dimensional
   //  Rectangular Regions
   //
   //Begin_Latex
   // I_{n} = #int_{a_{n}}^{b_{n}} #int_{a_{n-1}}^{b_{n-1}} ... #int_{a_{1}}^{b_{1}} f(x_{1}, x_{2},...,x_{n}) dx_{1}dx_{2}...dx_{n}
   //End_Latex
   //
   // Author(s): A.C. Genz, A.A. Malik
   // converted/adapted by R.Brun to C++ from Fortran CERNLIB routine RADMUL (D120)
   // The new code features many changes compared to the Fortran version.
   // Note that this function is currently called only by TF2::Integral (n=2)
   // and TF3::Integral (n=3).
   //
   // This function computes, to an attempted specified accuracy, the value of
   // the integral over an n-dimensional rectangular region.
   //
   // Input parameters:
   //
   //    n     : Number of dimensions [2,15]
   //    a,b   : One-dimensional arrays of length >= N . On entry A[i],  and  B[i],
   //            contain the lower and upper limits of integration, respectively.
   //    minpts: Minimum number of function evaluations requested. Must not exceed maxpts.
   //            if minpts < 1 minpts is set to 2^n +2*n*(n+1) +1
   //    maxpts: Maximum number of function evaluations to be allowed.
   //            maxpts >= 2^n +2*n*(n+1) +1
   //            if maxpts<minpts, maxpts is set to 10*minpts
   //    eps   : Specified relative accuracy.
   //
   // Output parameters:
   //
   //    relerr : Contains, on exit, an estimation of the relative accuracy of the result.
   //    nfnevl : number of function evaluations performed.
   //    ifail  :
   //        0 Normal exit.  . At least minpts and at most maxpts calls to the function were performed.
   //        1 maxpts is too small for the specified accuracy eps.
   //          The result and relerr contain the values obtainable for the
   //          specified value of maxpts.
   //        3 n<2 or n>15
   //
   // Method:
   //
   //    An integration rule of degree seven is used together with a certain
   //    strategy of subdivision.
   //    For a more detailed description of the method see References.
   //
   // Notes:
   //
   //   1.Multi-dimensional integration is time-consuming. For each rectangular
   //     subregion, the routine requires function evaluations.
   //     Careful programming of the integrand might result in substantial saving
   //     of time.
   //   2.Numerical integration usually works best for smooth functions.
   //     Some analysis or suitable transformations of the integral prior to
   //     numerical work may contribute to numerical efficiency.
   //
   // References:
   //
   //   1.A.C. Genz and A.A. Malik, Remarks on algorithm 006:
   //     An adaptive algorithm for numerical integration over
   //     an N-dimensional rectangular region, J. Comput. Appl. Math. 6 (1980) 295-302.
   //   2.A. van Doren and L. de Ridder, An adaptive algorithm for numerical
   //     integration over an n-dimensional cube, J.Comput. Appl. Math. 2 (1976) 207-217.

   ROOT::Math::WrappedMultiFunction<TF1&> wf1(*this, n);

   ROOT::Math::AdaptiveIntegratorMultiDim aimd(wf1, eps, eps, maxpts);
   double result = aimd.Integral(a,b);
   relerr = aimd.RelError();
   nfnevl = aimd.NEval();
   ifail = 0;

   return result;
}


//______________________________________________________________________________
Bool_t TF1::IsInside(const Double_t *x) const
{
   // Return kTRUE if the point is inside the function range

   if (x[0] < fXmin || x[0] > fXmax) return kFALSE;
   return kTRUE;
}


//______________________________________________________________________________
void TF1::Paint(Option_t *option)
{
   // Paint this function with its current attributes.

   Int_t i;
   Double_t xv[1];

   fgCurrent = this;

   TString opt = option;
   opt.ToLower();
   Bool_t optSAME = kFALSE;
   if (opt.Contains("same")) optSAME = kTRUE;

   Double_t xmin=fXmin, xmax=fXmax, pmin=fXmin, pmax=fXmax;
   if (gPad) {
      pmin = gPad->PadtoX(gPad->GetUxmin());
      pmax = gPad->PadtoX(gPad->GetUxmax());
   }
   if (optSAME) {
      if (xmax < pmin) return;  // Completely outside.
      if (xmin > pmax) return;
      if (xmin < pmin) xmin = pmin;
      if (xmax > pmax) xmax = pmax;
   }

   //  Create a temporary histogram and fill each channel with the function value
   //  Preserve axis titles
   TString xtitle = "";
   TString ytitle = "";
   char *semicol = (char*)strstr(GetTitle(),";");
   if (semicol) {
      Int_t nxt = strlen(semicol);
      char *ctemp = new char[nxt];
      strcpy(ctemp,semicol+1);
      semicol = (char*)strstr(ctemp,";");
      if (semicol) {
         *semicol = 0;
         ytitle = semicol+1;
      }
      xtitle = ctemp;
      delete [] ctemp;
   }
   if (fHistogram) {
      xtitle = fHistogram->GetXaxis()->GetTitle();
      ytitle = fHistogram->GetYaxis()->GetTitle();
      if (!gPad->GetLogx()  &&  fHistogram->TestBit(TH1::kLogX)) { delete fHistogram; fHistogram = 0;}
      if ( gPad->GetLogx()  && !fHistogram->TestBit(TH1::kLogX)) { delete fHistogram; fHistogram = 0;}
   }

   if (fHistogram) {
      fHistogram->GetXaxis()->SetLimits(xmin,xmax);
   } else {
      // If logx, we must bin in logx and not in x
      // otherwise in case of several decades, one gets wrong results.
      if (xmin > 0 && gPad && gPad->GetLogx()) {
         Double_t *xbins    = new Double_t[fNpx+1];
         Double_t xlogmin = TMath::Log10(xmin);
         Double_t xlogmax = TMath::Log10(xmax);
         Double_t dlogx   = (xlogmax-xlogmin)/((Double_t)fNpx);
         for (i=0;i<=fNpx;i++) {
            xbins[i] = gPad->PadtoX(xlogmin+ i*dlogx);
         }
         fHistogram = new TH1D("Func",GetTitle(),fNpx,xbins);
         fHistogram->SetBit(TH1::kLogX);
         delete [] xbins;
      } else {
         fHistogram = new TH1D("Func",GetTitle(),fNpx,xmin,xmax);
      }
      if (!fHistogram) return;
      if (fMinimum != -1111) fHistogram->SetMinimum(fMinimum);
      if (fMaximum != -1111) fHistogram->SetMaximum(fMaximum);
      fHistogram->SetDirectory(0);
   }
   // Restore axis titles.
   fHistogram->GetXaxis()->SetTitle(xtitle.Data());
   fHistogram->GetYaxis()->SetTitle(ytitle.Data());

   InitArgs(xv,fParams);
   for (i=1;i<=fNpx;i++) {
      xv[0] = fHistogram->GetBinCenter(i);
      fHistogram->SetBinContent(i,EvalPar(xv,fParams));
   }

   // Copy Function attributes to histogram attributes.
   Double_t minimum   = fHistogram->GetMinimumStored();
   Double_t maximum   = fHistogram->GetMaximumStored();
   if (minimum <= 0 && gPad && gPad->GetLogy()) minimum = -1111; // This can happen when switching from lin to log scale.
   if (gPad && gPad->GetUymin() < fHistogram->GetMinimum()) minimum = -1111; // This can happen after unzooming a fit.
   if (minimum == -1111) { // This can happen after unzooming.
      if (fHistogram->TestBit(TH1::kIsZoomed)) {
         minimum = fHistogram->GetYaxis()->GetXmin();
      } else {
         minimum = fMinimum;
         // Optimize the computation of the scale in Y in case the min/max of the 
         // function oscillate around a constant value
         if (minimum == -1111) {
            Double_t hmin;
            if (optSAME) hmin = gPad->GetUymin();
            else         hmin = fHistogram->GetMinimum();
            if (hmin > 0) {
               Double_t hmax;
               Double_t hminpos = hmin;
               if (optSAME) hmax = gPad->GetUymax();
               else         hmax = fHistogram->GetMaximum();
               hmin -= 0.05*(hmax-hmin);
               if (hmin < 0) hmin = 0;
               if (hmin <= 0 && gPad && gPad->GetLogy()) hmin = hminpos;
               minimum = hmin;
            }
         }
      }
      fHistogram->SetMinimum(minimum);
   }
   if (maximum == -1111) {
      if (fHistogram->TestBit(TH1::kIsZoomed)) {
         maximum = fHistogram->GetYaxis()->GetXmax();
      } else {
         maximum = fMaximum;
      }
      fHistogram->SetMaximum(maximum);
   }
   fHistogram->SetBit(TH1::kNoStats);
   fHistogram->SetLineColor(GetLineColor());
   fHistogram->SetLineStyle(GetLineStyle());
   fHistogram->SetLineWidth(GetLineWidth());
   fHistogram->SetFillColor(GetFillColor());
   fHistogram->SetFillStyle(GetFillStyle());
   fHistogram->SetMarkerColor(GetMarkerColor());
   fHistogram->SetMarkerStyle(GetMarkerStyle());
   fHistogram->SetMarkerSize(GetMarkerSize());

   // Draw the histogram.
   if (!gPad) return;
   if (opt.Length() == 0) fHistogram->Paint("lf");
   else if (optSAME)      fHistogram->Paint("lfsame");
   else                   fHistogram->Paint(option);
}


//______________________________________________________________________________
void TF1::Print(Option_t *option) const
{
   // Dump this function with its attributes.

   TFormula::Print(option);
   if (fHistogram) fHistogram->Print(option);
}


//______________________________________________________________________________
void TF1::ReleaseParameter(Int_t ipar)
{
   // Release parameter number ipar If used in a fit, the parameter
   // can vary freely. The parameter limits are reset to 0,0.

   if (ipar < 0 || ipar > fNpar-1) return;
   SetParLimits(ipar,0,0);
}


//______________________________________________________________________________
void TF1::Save(Double_t xmin, Double_t xmax, Double_t, Double_t, Double_t, Double_t)
{
   // Save values of function in array fSave

   if (fSave != 0) {delete [] fSave; fSave = 0;}
   if (fParent && fParent->InheritsFrom(TH1::Class())) {
      //if parent is a histogram save the function at the center of the bins
      if ((xmin >0 && xmax > 0) && TMath::Abs(TMath::Log10(xmax/xmin) > TMath::Log10(fNpx))) {
         TH1 *h = (TH1*)fParent;
         Int_t bin1 = h->GetXaxis()->FindBin(xmin);
         Int_t bin2 = h->GetXaxis()->FindBin(xmax);
         fNsave = bin2-bin1+4;
         fSave  = new Double_t[fNsave];
         Double_t xv[1];
         InitArgs(xv,fParams);
         for (Int_t i=bin1;i<=bin2;i++) {
            xv[0]    = h->GetXaxis()->GetBinCenter(i);
            fSave[i-bin1] = EvalPar(xv,fParams);
         }
         fSave[fNsave-3] = xmin;
         fSave[fNsave-2] = xmax;
         fSave[fNsave-1] = xmax;
         return;
      }
   }
   fNsave = fNpx+3;
   if (fNsave <= 3) {fNsave=0; return;}
   fSave  = new Double_t[fNsave];
   Double_t dx = (xmax-xmin)/fNpx;
   if (dx <= 0) {
      dx = (fXmax-fXmin)/fNpx;
      fNsave--;
      xmin = fXmin +0.5*dx;
      xmax = fXmax -0.5*dx;
   }
   Double_t xv[1];
   InitArgs(xv,fParams);
   for (Int_t i=0;i<=fNpx;i++) {
      xv[0]    = xmin + dx*i;
      fSave[i] = EvalPar(xv,fParams);
   }
   fSave[fNpx+1] = xmin;
   fSave[fNpx+2] = xmax;
}


//______________________________________________________________________________
void TF1::SavePrimitive(ostream &out, Option_t *option /*= ""*/)
{
   // Save primitive as a C++ statement(s) on output stream out

   Int_t i;
   char quote = '"';
   out<<"   "<<endl;
   if (!fMethodCall) {
      out<<"   TF1 *"<<GetName()<<" = new TF1("<<quote<<GetName()<<quote<<","<<quote<<GetTitle()<<quote<<","<<fXmin<<","<<fXmax<<");"<<endl;
      if (fNpx != 100) {
         out<<"   "<<GetName()<<"->SetNpx("<<fNpx<<");"<<endl;
      }
   } else {
      out<<"   TF1 *"<<GetName()<<" = new TF1("<<quote<<"*"<<GetName()<<quote<<","<<fXmin<<","<<fXmax<<","<<GetNpar()<<");"<<endl;
      out<<"    //The original function : "<<GetTitle()<<" had originally been created by:" <<endl;
      out<<"    //TF1 *"<<GetName()<<" = new TF1("<<quote<<GetName()<<quote<<","<<GetTitle()<<","<<fXmin<<","<<fXmax<<","<<GetNpar()<<");"<<endl;
      out<<"   "<<GetName()<<"->SetRange("<<fXmin<<","<<fXmax<<");"<<endl;
      out<<"   "<<GetName()<<"->SetName("<<quote<<GetName()<<quote<<");"<<endl;
      out<<"   "<<GetName()<<"->SetTitle("<<quote<<GetTitle()<<quote<<");"<<endl;
      if (fNpx != 100) {
         out<<"   "<<GetName()<<"->SetNpx("<<fNpx<<");"<<endl;
      }
      Double_t dx = (fXmax-fXmin)/fNpx;
      Double_t xv[1];
      InitArgs(xv,fParams);
      for (i=0;i<=fNpx;i++) {
         xv[0]    = fXmin + dx*i;
         Double_t save = EvalPar(xv,fParams);
         out<<"   "<<GetName()<<"->SetSavedPoint("<<i<<","<<save<<");"<<endl;
      }
      out<<"   "<<GetName()<<"->SetSavedPoint("<<fNpx+1<<","<<fXmin<<");"<<endl;
      out<<"   "<<GetName()<<"->SetSavedPoint("<<fNpx+2<<","<<fXmax<<");"<<endl;
   }

   if (TestBit(kNotDraw)) {
      out<<"   "<<GetName()<<"->SetBit(TF1::kNotDraw);"<<endl;
   }
   if (GetFillColor() != 0) {
      if (GetFillColor() > 228) {
         TColor::SaveColor(out, GetFillColor());
         out<<"   "<<GetName()<<"->SetFillColor(ci);" << endl;
      } else
         out<<"   "<<GetName()<<"->SetFillColor("<<GetFillColor()<<");"<<endl;
   }
   if (GetFillStyle() != 1001) {
      out<<"   "<<GetName()<<"->SetFillStyle("<<GetFillStyle()<<");"<<endl;
   }
   if (GetMarkerColor() != 1) {
      if (GetMarkerColor() > 228) {
         TColor::SaveColor(out, GetMarkerColor());
         out<<"   "<<GetName()<<"->SetMarkerColor(ci);" << endl;
      } else
         out<<"   "<<GetName()<<"->SetMarkerColor("<<GetMarkerColor()<<");"<<endl;
   }
   if (GetMarkerStyle() != 1) {
      out<<"   "<<GetName()<<"->SetMarkerStyle("<<GetMarkerStyle()<<");"<<endl;
   }
   if (GetMarkerSize() != 1) {
      out<<"   "<<GetName()<<"->SetMarkerSize("<<GetMarkerSize()<<");"<<endl;
   }
   if (GetLineColor() != 1) {
      if (GetLineColor() > 228) {
         TColor::SaveColor(out, GetLineColor());
         out<<"   "<<GetName()<<"->SetLineColor(ci);" << endl;
      } else
         out<<"   "<<GetName()<<"->SetLineColor("<<GetLineColor()<<");"<<endl;
   }
   if (GetLineWidth() != 4) {
      out<<"   "<<GetName()<<"->SetLineWidth("<<GetLineWidth()<<");"<<endl;
   }
   if (GetLineStyle() != 1) {
      out<<"   "<<GetName()<<"->SetLineStyle("<<GetLineStyle()<<");"<<endl;
   }
   if (GetChisquare() != 0) {
      out<<"   "<<GetName()<<"->SetChisquare("<<GetChisquare()<<");"<<endl;
      out<<"   "<<GetName()<<"->SetNDF("<<GetNDF()<<");"<<endl;
   }

   GetXaxis()->SaveAttributes(out,GetName(),"->GetXaxis()");
   GetYaxis()->SaveAttributes(out,GetName(),"->GetYaxis()");

   Double_t parmin, parmax;
   for (i=0;i<fNpar;i++) {
      out<<"   "<<GetName()<<"->SetParameter("<<i<<","<<GetParameter(i)<<");"<<endl;
      out<<"   "<<GetName()<<"->SetParError("<<i<<","<<GetParError(i)<<");"<<endl;
      GetParLimits(i,parmin,parmax);
      out<<"   "<<GetName()<<"->SetParLimits("<<i<<","<<parmin<<","<<parmax<<");"<<endl;
   }
   if (!strstr(option,"nodraw")) {
      out<<"   "<<GetName()<<"->Draw("
         <<quote<<option<<quote<<");"<<endl;
   }
}


//______________________________________________________________________________
void TF1::SetCurrent(TF1 *f1)
{
   // Static function setting the current function.
   // the current function may be accessed in static C-like functions
   // when fitting or painting a function.

   fgCurrent = f1;
}


//______________________________________________________________________________
void TF1::SetMaximum(Double_t maximum)
{
   // Set the maximum value along Y for this function
   // In case the function is already drawn, set also the maximum in the
   // helper histogram

   fMaximum = maximum;
   if (fHistogram) fHistogram->SetMaximum(maximum);
   if (gPad) gPad->Modified();
}


//______________________________________________________________________________
void TF1::SetMinimum(Double_t minimum)
{
   // Set the minimum value along Y for this function
   // In case the function is already drawn, set also the minimum in the
   // helper histogram

   fMinimum = minimum;
   if (fHistogram) fHistogram->SetMinimum(minimum);
   if (gPad) gPad->Modified();
}


//______________________________________________________________________________
void TF1::SetNDF(Int_t ndf)
{
   // Set the number of degrees of freedom
   // ndf should be the number of points used in a fit - the number of free parameters

   fNDF = ndf;
}


//______________________________________________________________________________
void TF1::SetNpx(Int_t npx)
{
   // Set the number of points used to draw the function
   //
   // The default number of points along x is 100 for 1-d functions and 30 for 2-d/3-d functions
   // You can increase this value to get a better resolution when drawing
   // pictures with sharp peaks or to get a better result when using TF1::GetRandom
   // the minimum number of points is 4, the maximum is 100000 for 1-d and 10000 for 2-d/3-d functions

   if (npx < 4) {
      Warning("SetNpx","Number of points must be >4 && < 100000, fNpx set to 4");
      fNpx = 4;
   } else if(npx > 100000) {
      Warning("SetNpx","Number of points must be >4 && < 100000, fNpx set to 100000");
      fNpx = 100000;
   } else {
      fNpx = npx;
   }
   Update();
}


//______________________________________________________________________________
void TF1::SetParError(Int_t ipar, Double_t error)
{
   // Set error for parameter number ipar

   if (ipar < 0 || ipar > fNpar-1) return;
   fParErrors[ipar] = error;
}


//______________________________________________________________________________
void TF1::SetParErrors(const Double_t *errors)
{
   // Set errors for all active parameters
   // when calling this function, the array errors must have at least fNpar values

   if (!errors) return;
   for (Int_t i=0;i<fNpar;i++) fParErrors[i] = errors[i];
}


//______________________________________________________________________________
void TF1::SetParLimits(Int_t ipar, Double_t parmin, Double_t parmax)
{
   // Set limits for parameter ipar.
   //
   // The specified limits will be used in a fit operation
   // when the option "B" is specified (Bounds).
   // To fix a parameter, use TF1::FixParameter

   if (ipar < 0 || ipar > fNpar-1) return;
   Int_t i;
   if (!fParMin) {fParMin = new Double_t[fNpar]; for (i=0;i<fNpar;i++) fParMin[i]=0;}
   if (!fParMax) {fParMax = new Double_t[fNpar]; for (i=0;i<fNpar;i++) fParMax[i]=0;}
   fParMin[ipar] = parmin;
   fParMax[ipar] = parmax;
}


//______________________________________________________________________________
void TF1::SetRange(Double_t xmin, Double_t xmax)
{
   // Initialize the upper and lower bounds to draw the function.
   //
   // The function range is also used in an histogram fit operation
   // when the option "R" is specified.

   fXmin = xmin;
   fXmax = xmax;
   Update();
}


//______________________________________________________________________________
void TF1::SetSavedPoint(Int_t point, Double_t value)
{
   // Restore value of function saved at point

   if (!fSave) {
      fNsave = fNpx+3;
      fSave  = new Double_t[fNsave];
   }
   if (point < 0 || point >= fNsave) return;
   fSave[point] = value;
}


//______________________________________________________________________________
void TF1::SetTitle(const char *title)
{
   // Set function title
   //  if title has the form "fffffff;xxxx;yyyy", it is assumed that
   //  the function title is "fffffff" and "xxxx" and "yyyy" are the
   //  titles for the X and Y axis respectively.

   if (!title) return;
   fTitle = title;
   if (!fHistogram) return;
   fHistogram->SetTitle(title);
   if (gPad) gPad->Modified();
}


//______________________________________________________________________________
void TF1::Streamer(TBuffer &b)
{
   // Stream a class object.

   if (b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t v = b.ReadVersion(&R__s, &R__c);
      if (v > 4) {
         b.ReadClassBuffer(TF1::Class(), this, v, R__s, R__c);
         if (v == 5 && fNsave > 0) {
            //correct badly saved fSave in 3.00/06
            Int_t np = fNsave - 3;
            fSave[np]   = fSave[np-1];
            fSave[np+1] = fXmin;
            fSave[np+2] = fXmax;
         }
         return;
      }
      //====process old versions before automatic schema evolution
      TFormula::Streamer(b);
      TAttLine::Streamer(b);
      TAttFill::Streamer(b);
      TAttMarker::Streamer(b);
      if (v < 4) {
         Float_t xmin,xmax;
         b >> xmin; fXmin = xmin;
         b >> xmax; fXmax = xmax;
      } else {
         b >> fXmin;
         b >> fXmax;
      }
      b >> fNpx;
      b >> fType;
      b >> fChisquare;
      b.ReadArray(fParErrors);
      if (v > 1) {
         b.ReadArray(fParMin);
         b.ReadArray(fParMax);
      } else {
         fParMin = new Double_t[fNpar+1];
         fParMax = new Double_t[fNpar+1];
      }
      b >> fNpfits;
      if (v == 1) {
         b >> fHistogram;
         delete fHistogram; fHistogram = 0;
      }
      if (v > 1) {
         if (v < 4) {
            Float_t minimum,maximum;
            b >> minimum; fMinimum =minimum;
            b >> maximum; fMaximum =maximum;
         } else {
            b >> fMinimum;
            b >> fMaximum;
         }
      }
      if (v > 2) {
         b >> fNsave;
         if (fNsave > 0) {
            fSave = new Double_t[fNsave+10];
            b.ReadArray(fSave);
            //correct fSave limits to match new version
            fSave[fNsave]   = fSave[fNsave-1];
            fSave[fNsave+1] = fSave[fNsave+2];
            fSave[fNsave+2] = fSave[fNsave+3];
            fNsave += 3;
         } else fSave = 0;
      }
      b.CheckByteCount(R__s, R__c, TF1::IsA());
      //====end of old versions

   } else {
      Int_t saved = 0;
      if (fType > 0 && fNsave <= 0) { saved = 1; Save(fXmin,fXmax,0,0,0,0);}

      b.WriteClassBuffer(TF1::Class(),this);

      if (saved) {delete [] fSave; fSave = 0; fNsave = 0;}
   }
}


//______________________________________________________________________________
void TF1::Update()
{
   // Called by functions such as SetRange, SetNpx, SetParameters
   // to force the deletion of the associated histogram or Integral

   delete fHistogram;
   fHistogram = 0;
   if (fIntegral) {
      delete [] fIntegral; fIntegral = 0;
      delete [] fAlpha;    fAlpha    = 0;
      delete [] fBeta;     fBeta     = 0;
      delete [] fGamma;    fGamma    = 0;
   }
}


//______________________________________________________________________________
void TF1::RejectPoint(Bool_t reject)
{
   // Static function to set the global flag to reject points
   // the fgRejectPoint global flag is tested by all fit functions
   // if TRUE the point is not included in the fit.
   // This flag can be set by a user in a fitting function.
   // The fgRejectPoint flag is reset by the TH1 and TGraph fitting functions.

   fgRejectPoint = reject;
}


//______________________________________________________________________________
Bool_t TF1::RejectedPoint()
{
   // See TF1::RejectPoint above

   return fgRejectPoint;
}

//______________________________________________________________________________
Double_t TF1::Moment(Double_t n, Double_t a, Double_t b, const Double_t *params, Double_t epsilon)
{
   // Return nth moment of function between a and b
   //
   // See TF1::Integral() for parameter definitions

   // wrapped function in interface for integral calculation
   // using abs value of integral 

   TF1_EvalWrapper func(this, params, kTRUE, n); 

   ROOT::Math::GaussIntegrator giod;

   giod.SetFunction(func);
   giod.SetRelTolerance(epsilon);

   Double_t norm =  giod.Integral(a, b);
   if (norm == 0) {
      Error("Moment", "Integral zero over range");
      return 0;
   }

   // calculate now integral of x^n f(x)
   // wrapped the member function EvalNum in  interface required by integrator using the functor class 
   ROOT::Math::Functor1D xnfunc( &func, &TF1_EvalWrapper::EvalNMom);
   giod.SetFunction(xnfunc);

   Double_t res = giod.Integral(a,b)/norm;

   return res;
}


//______________________________________________________________________________
Double_t TF1::CentralMoment(Double_t n, Double_t a, Double_t b, const Double_t *params, Double_t epsilon)
{
   // Return nth central moment of function between a and b
   // (i.e the n-th moment around the mean value)   
   //
   // See TF1::Integral() for parameter definitions
   //   Author: Gene Van Buren <gene@bnl.gov>
  
   TF1_EvalWrapper func(this, params, kTRUE, n); 

   ROOT::Math::GaussIntegrator giod;

   giod.SetFunction(func);
   giod.SetRelTolerance(epsilon);

   Double_t norm =  giod.Integral(a, b);
   if (norm == 0) {
      Error("Moment", "Integral zero over range");
      return 0;
   }

   // calculate now integral of xf(x)
   // wrapped the member function EvalFirstMom in  interface required by integrator using the functor class 
   ROOT::Math::Functor1D xfunc( &func, &TF1_EvalWrapper::EvalFirstMom);
   giod.SetFunction(xfunc);

   // estimate of mean value
   Double_t xbar = giod.Integral(a,b)/norm;

   // use different mean value in function wrapper 
   func.fX0 = xbar; 
   ROOT::Math::Functor1D xnfunc( &func, &TF1_EvalWrapper::EvalNMom);
   giod.SetFunction(xnfunc);

   Double_t res = giod.Integral(a,b)/norm;
   return res;
}


//______________________________________________________________________________
// some useful static utility functions to compute sampling points for IntegralFast
//______________________________________________________________________________
#ifdef INTHEFUTURE
void TF1::CalcGaussLegendreSamplingPoints(TGraph *g, Double_t eps)
{
   // Type safe interface (static method)
   // The number of sampling points are taken from the TGraph

   if (!g) return;
   CalcGaussLegendreSamplingPoints(g->GetN(), g->GetX(), g->GetY(), eps);
}


//______________________________________________________________________________
TGraph *TF1::CalcGaussLegendreSamplingPoints(Int_t num, Double_t eps)
{
   // Type safe interface (static method)
   // A TGraph is created with new with num points and the pointer to the
   // graph is returned by the function. It is the responsibility of the
   // user to delete the object.
   // if num is invalid (<=0) NULL is returned

   if (num<=0)
      return 0;

   TGraph *g = new TGraph(num);
   CalcGaussLegendreSamplingPoints(g->GetN(), g->GetX(), g->GetY(), eps);
   return g;
}
#endif


//______________________________________________________________________________
void TF1::CalcGaussLegendreSamplingPoints(Int_t num, Double_t *x, Double_t *w, Double_t eps)
{
   // Type: unsafe but fast interface filling the arrays x and w (static method)
   //
   // Given the number of sampling points this routine fills the arrays x and w
   // of length num, containing the abscissa and weight of the Gauss-Legendre
   // n-point quadrature formula.
   //
   // Gauss-Legendre: W(x)=1  -1<x<1
   //                 (j+1)P_{j+1} = (2j+1)xP_j-jP_{j-1}
   //
   // num is the number of sampling points (>0)
   // x and w are arrays of size num
   // eps is the relative precision
   //
   // If num<=0 or eps<=0 no action is done.
   //
   // Reference: Numerical Recipes in C, Second Edition

   // This function is just kept like this for backward compatibility!

   ROOT::Math::GaussLegendreIntegrator gli(num,eps);
   gli.GetWeightVectors(x, w);


}
 TF1.cxx:1
 TF1.cxx:2
 TF1.cxx:3
 TF1.cxx:4
 TF1.cxx:5
 TF1.cxx:6
 TF1.cxx:7
 TF1.cxx:8
 TF1.cxx:9
 TF1.cxx:10
 TF1.cxx:11
 TF1.cxx:12
 TF1.cxx:13
 TF1.cxx:14
 TF1.cxx:15
 TF1.cxx:16
 TF1.cxx:17
 TF1.cxx:18
 TF1.cxx:19
 TF1.cxx:20
 TF1.cxx:21
 TF1.cxx:22
 TF1.cxx:23
 TF1.cxx:24
 TF1.cxx:25
 TF1.cxx:26
 TF1.cxx:27
 TF1.cxx:28
 TF1.cxx:29
 TF1.cxx:30
 TF1.cxx:31
 TF1.cxx:32
 TF1.cxx:33
 TF1.cxx:34
 TF1.cxx:35
 TF1.cxx:36
 TF1.cxx:37
 TF1.cxx:38
 TF1.cxx:39
 TF1.cxx:40
 TF1.cxx:41
 TF1.cxx:42
 TF1.cxx:43
 TF1.cxx:44
 TF1.cxx:45
 TF1.cxx:46
 TF1.cxx:47
 TF1.cxx:48
 TF1.cxx:49
 TF1.cxx:50
 TF1.cxx:51
 TF1.cxx:52
 TF1.cxx:53
 TF1.cxx:54
 TF1.cxx:55
 TF1.cxx:56
 TF1.cxx:57
 TF1.cxx:58
 TF1.cxx:59
 TF1.cxx:60
 TF1.cxx:61
 TF1.cxx:62
 TF1.cxx:63
 TF1.cxx:64
 TF1.cxx:65
 TF1.cxx:66
 TF1.cxx:67
 TF1.cxx:68
 TF1.cxx:69
 TF1.cxx:70
 TF1.cxx:71
 TF1.cxx:72
 TF1.cxx:73
 TF1.cxx:74
 TF1.cxx:75
 TF1.cxx:76
 TF1.cxx:77
 TF1.cxx:78
 TF1.cxx:79
 TF1.cxx:80
 TF1.cxx:81
 TF1.cxx:82
 TF1.cxx:83
 TF1.cxx:84
 TF1.cxx:85
 TF1.cxx:86
 TF1.cxx:87
 TF1.cxx:88
 TF1.cxx:89
 TF1.cxx:90
 TF1.cxx:91
 TF1.cxx:92
 TF1.cxx:93
 TF1.cxx:94
 TF1.cxx:95
 TF1.cxx:96
 TF1.cxx:97
 TF1.cxx:98
 TF1.cxx:99
 TF1.cxx:100
 TF1.cxx:101
 TF1.cxx:102
 TF1.cxx:103
 TF1.cxx:104
 TF1.cxx:105
 TF1.cxx:106
 TF1.cxx:107
 TF1.cxx:108
 TF1.cxx:109
 TF1.cxx:110
 TF1.cxx:111
 TF1.cxx:112
 TF1.cxx:113
 TF1.cxx:114
 TF1.cxx:115
 TF1.cxx:116
 TF1.cxx:117
 TF1.cxx:118
 TF1.cxx:119
 TF1.cxx:120
 TF1.cxx:121
 TF1.cxx:122
 TF1.cxx:123
 TF1.cxx:124
 TF1.cxx:125
 TF1.cxx:126
 TF1.cxx:127
 TF1.cxx:128
 TF1.cxx:129
 TF1.cxx:130
 TF1.cxx:131
 TF1.cxx:132
 TF1.cxx:133
 TF1.cxx:134
 TF1.cxx:135
 TF1.cxx:136
 TF1.cxx:137
 TF1.cxx:138
 TF1.cxx:139
 TF1.cxx:140
 TF1.cxx:141
 TF1.cxx:142
 TF1.cxx:143
 TF1.cxx:144
 TF1.cxx:145
 TF1.cxx:146
 TF1.cxx:147
 TF1.cxx:148
 TF1.cxx:149
 TF1.cxx:150
 TF1.cxx:151
 TF1.cxx:152
 TF1.cxx:153
 TF1.cxx:154
 TF1.cxx:155
 TF1.cxx:156
 TF1.cxx:157
 TF1.cxx:158
 TF1.cxx:159
 TF1.cxx:160
 TF1.cxx:161
 TF1.cxx:162
 TF1.cxx:163
 TF1.cxx:164
 TF1.cxx:165
 TF1.cxx:166
 TF1.cxx:167
 TF1.cxx:168
 TF1.cxx:169
 TF1.cxx:170
 TF1.cxx:171
 TF1.cxx:172
 TF1.cxx:173
 TF1.cxx:174
 TF1.cxx:175
 TF1.cxx:176
 TF1.cxx:177
 TF1.cxx:178
 TF1.cxx:179
 TF1.cxx:180
 TF1.cxx:181
 TF1.cxx:182
 TF1.cxx:183
 TF1.cxx:184
 TF1.cxx:185
 TF1.cxx:186
 TF1.cxx:187
 TF1.cxx:188
 TF1.cxx:189
 TF1.cxx:190
 TF1.cxx:191
 TF1.cxx:192
 TF1.cxx:193
 TF1.cxx:194
 TF1.cxx:195
 TF1.cxx:196
 TF1.cxx:197
 TF1.cxx:198
 TF1.cxx:199
 TF1.cxx:200
 TF1.cxx:201
 TF1.cxx:202
 TF1.cxx:203
 TF1.cxx:204
 TF1.cxx:205
 TF1.cxx:206
 TF1.cxx:207
 TF1.cxx:208
 TF1.cxx:209
 TF1.cxx:210
 TF1.cxx:211
 TF1.cxx:212
 TF1.cxx:213
 TF1.cxx:214
 TF1.cxx:215
 TF1.cxx:216
 TF1.cxx:217
 TF1.cxx:218
 TF1.cxx:219
 TF1.cxx:220
 TF1.cxx:221
 TF1.cxx:222
 TF1.cxx:223
 TF1.cxx:224
 TF1.cxx:225
 TF1.cxx:226
 TF1.cxx:227
 TF1.cxx:228
 TF1.cxx:229
 TF1.cxx:230
 TF1.cxx:231
 TF1.cxx:232
 TF1.cxx:233
 TF1.cxx:234
 TF1.cxx:235
 TF1.cxx:236
 TF1.cxx:237
 TF1.cxx:238
 TF1.cxx:239
 TF1.cxx:240
 TF1.cxx:241
 TF1.cxx:242
 TF1.cxx:243
 TF1.cxx:244
 TF1.cxx:245
 TF1.cxx:246
 TF1.cxx:247
 TF1.cxx:248
 TF1.cxx:249
 TF1.cxx:250
 TF1.cxx:251
 TF1.cxx:252
 TF1.cxx:253
 TF1.cxx:254
 TF1.cxx:255
 TF1.cxx:256
 TF1.cxx:257
 TF1.cxx:258
 TF1.cxx:259
 TF1.cxx:260
 TF1.cxx:261
 TF1.cxx:262
 TF1.cxx:263
 TF1.cxx:264
 TF1.cxx:265
 TF1.cxx:266
 TF1.cxx:267
 TF1.cxx:268
 TF1.cxx:269
 TF1.cxx:270
 TF1.cxx:271
 TF1.cxx:272
 TF1.cxx:273
 TF1.cxx:274
 TF1.cxx:275
 TF1.cxx:276
 TF1.cxx:277
 TF1.cxx:278
 TF1.cxx:279
 TF1.cxx:280
 TF1.cxx:281
 TF1.cxx:282
 TF1.cxx:283
 TF1.cxx:284
 TF1.cxx:285
 TF1.cxx:286
 TF1.cxx:287
 TF1.cxx:288
 TF1.cxx:289
 TF1.cxx:290
 TF1.cxx:291
 TF1.cxx:292
 TF1.cxx:293
 TF1.cxx:294
 TF1.cxx:295
 TF1.cxx:296
 TF1.cxx:297
 TF1.cxx:298
 TF1.cxx:299
 TF1.cxx:300
 TF1.cxx:301
 TF1.cxx:302
 TF1.cxx:303
 TF1.cxx:304
 TF1.cxx:305
 TF1.cxx:306
 TF1.cxx:307
 TF1.cxx:308
 TF1.cxx:309
 TF1.cxx:310
 TF1.cxx:311
 TF1.cxx:312
 TF1.cxx:313
 TF1.cxx:314
 TF1.cxx:315
 TF1.cxx:316
 TF1.cxx:317
 TF1.cxx:318
 TF1.cxx:319
 TF1.cxx:320
 TF1.cxx:321
 TF1.cxx:322
 TF1.cxx:323
 TF1.cxx:324
 TF1.cxx:325
 TF1.cxx:326
 TF1.cxx:327
 TF1.cxx:328
 TF1.cxx:329
 TF1.cxx:330
 TF1.cxx:331
 TF1.cxx:332
 TF1.cxx:333
 TF1.cxx:334
 TF1.cxx:335
 TF1.cxx:336
 TF1.cxx:337
 TF1.cxx:338
 TF1.cxx:339
 TF1.cxx:340
 TF1.cxx:341
 TF1.cxx:342
 TF1.cxx:343
 TF1.cxx:344
 TF1.cxx:345
 TF1.cxx:346
 TF1.cxx:347
 TF1.cxx:348
 TF1.cxx:349
 TF1.cxx:350
 TF1.cxx:351
 TF1.cxx:352
 TF1.cxx:353
 TF1.cxx:354
 TF1.cxx:355
 TF1.cxx:356
 TF1.cxx:357
 TF1.cxx:358
 TF1.cxx:359
 TF1.cxx:360
 TF1.cxx:361
 TF1.cxx:362
 TF1.cxx:363
 TF1.cxx:364
 TF1.cxx:365
 TF1.cxx:366
 TF1.cxx:367
 TF1.cxx:368
 TF1.cxx:369
 TF1.cxx:370
 TF1.cxx:371
 TF1.cxx:372
 TF1.cxx:373
 TF1.cxx:374
 TF1.cxx:375
 TF1.cxx:376
 TF1.cxx:377
 TF1.cxx:378
 TF1.cxx:379
 TF1.cxx:380
 TF1.cxx:381
 TF1.cxx:382
 TF1.cxx:383
 TF1.cxx:384
 TF1.cxx:385
 TF1.cxx:386
 TF1.cxx:387
 TF1.cxx:388
 TF1.cxx:389
 TF1.cxx:390
 TF1.cxx:391
 TF1.cxx:392
 TF1.cxx:393
 TF1.cxx:394
 TF1.cxx:395
 TF1.cxx:396
 TF1.cxx:397
 TF1.cxx:398
 TF1.cxx:399
 TF1.cxx:400
 TF1.cxx:401
 TF1.cxx:402
 TF1.cxx:403
 TF1.cxx:404
 TF1.cxx:405
 TF1.cxx:406
 TF1.cxx:407
 TF1.cxx:408
 TF1.cxx:409
 TF1.cxx:410
 TF1.cxx:411
 TF1.cxx:412
 TF1.cxx:413
 TF1.cxx:414
 TF1.cxx:415
 TF1.cxx:416
 TF1.cxx:417
 TF1.cxx:418
 TF1.cxx:419
 TF1.cxx:420
 TF1.cxx:421
 TF1.cxx:422
 TF1.cxx:423
 TF1.cxx:424
 TF1.cxx:425
 TF1.cxx:426
 TF1.cxx:427
 TF1.cxx:428
 TF1.cxx:429
 TF1.cxx:430
 TF1.cxx:431
 TF1.cxx:432
 TF1.cxx:433
 TF1.cxx:434
 TF1.cxx:435
 TF1.cxx:436
 TF1.cxx:437
 TF1.cxx:438
 TF1.cxx:439
 TF1.cxx:440
 TF1.cxx:441
 TF1.cxx:442
 TF1.cxx:443
 TF1.cxx:444
 TF1.cxx:445
 TF1.cxx:446
 TF1.cxx:447
 TF1.cxx:448
 TF1.cxx:449
 TF1.cxx:450
 TF1.cxx:451
 TF1.cxx:452
 TF1.cxx:453
 TF1.cxx:454
 TF1.cxx:455
 TF1.cxx:456
 TF1.cxx:457
 TF1.cxx:458
 TF1.cxx:459
 TF1.cxx:460
 TF1.cxx:461
 TF1.cxx:462
 TF1.cxx:463
 TF1.cxx:464
 TF1.cxx:465
 TF1.cxx:466
 TF1.cxx:467
 TF1.cxx:468
 TF1.cxx:469
 TF1.cxx:470
 TF1.cxx:471
 TF1.cxx:472
 TF1.cxx:473
 TF1.cxx:474
 TF1.cxx:475
 TF1.cxx:476
 TF1.cxx:477
 TF1.cxx:478
 TF1.cxx:479
 TF1.cxx:480
 TF1.cxx:481
 TF1.cxx:482
 TF1.cxx:483
 TF1.cxx:484
 TF1.cxx:485
 TF1.cxx:486
 TF1.cxx:487
 TF1.cxx:488
 TF1.cxx:489
 TF1.cxx:490
 TF1.cxx:491
 TF1.cxx:492
 TF1.cxx:493
 TF1.cxx:494
 TF1.cxx:495
 TF1.cxx:496
 TF1.cxx:497
 TF1.cxx:498
 TF1.cxx:499
 TF1.cxx:500
 TF1.cxx:501
 TF1.cxx:502
 TF1.cxx:503
 TF1.cxx:504
 TF1.cxx:505
 TF1.cxx:506
 TF1.cxx:507
 TF1.cxx:508
 TF1.cxx:509
 TF1.cxx:510
 TF1.cxx:511
 TF1.cxx:512
 TF1.cxx:513
 TF1.cxx:514
 TF1.cxx:515
 TF1.cxx:516
 TF1.cxx:517
 TF1.cxx:518
 TF1.cxx:519
 TF1.cxx:520
 TF1.cxx:521
 TF1.cxx:522
 TF1.cxx:523
 TF1.cxx:524
 TF1.cxx:525
 TF1.cxx:526
 TF1.cxx:527
 TF1.cxx:528
 TF1.cxx:529
 TF1.cxx:530
 TF1.cxx:531
 TF1.cxx:532
 TF1.cxx:533
 TF1.cxx:534
 TF1.cxx:535
 TF1.cxx:536
 TF1.cxx:537
 TF1.cxx:538
 TF1.cxx:539
 TF1.cxx:540
 TF1.cxx:541
 TF1.cxx:542
 TF1.cxx:543
 TF1.cxx:544
 TF1.cxx:545
 TF1.cxx:546
 TF1.cxx:547
 TF1.cxx:548
 TF1.cxx:549
 TF1.cxx:550
 TF1.cxx:551
 TF1.cxx:552
 TF1.cxx:553
 TF1.cxx:554
 TF1.cxx:555
 TF1.cxx:556
 TF1.cxx:557
 TF1.cxx:558
 TF1.cxx:559
 TF1.cxx:560
 TF1.cxx:561
 TF1.cxx:562
 TF1.cxx:563
 TF1.cxx:564
 TF1.cxx:565
 TF1.cxx:566
 TF1.cxx:567
 TF1.cxx:568
 TF1.cxx:569
 TF1.cxx:570
 TF1.cxx:571
 TF1.cxx:572
 TF1.cxx:573
 TF1.cxx:574
 TF1.cxx:575
 TF1.cxx:576
 TF1.cxx:577
 TF1.cxx:578
 TF1.cxx:579
 TF1.cxx:580
 TF1.cxx:581
 TF1.cxx:582
 TF1.cxx:583
 TF1.cxx:584
 TF1.cxx:585
 TF1.cxx:586
 TF1.cxx:587
 TF1.cxx:588
 TF1.cxx:589
 TF1.cxx:590
 TF1.cxx:591
 TF1.cxx:592
 TF1.cxx:593
 TF1.cxx:594
 TF1.cxx:595
 TF1.cxx:596
 TF1.cxx:597
 TF1.cxx:598
 TF1.cxx:599
 TF1.cxx:600
 TF1.cxx:601
 TF1.cxx:602
 TF1.cxx:603
 TF1.cxx:604
 TF1.cxx:605
 TF1.cxx:606
 TF1.cxx:607
 TF1.cxx:608
 TF1.cxx:609
 TF1.cxx:610
 TF1.cxx:611
 TF1.cxx:612
 TF1.cxx:613
 TF1.cxx:614
 TF1.cxx:615
 TF1.cxx:616
 TF1.cxx:617
 TF1.cxx:618
 TF1.cxx:619
 TF1.cxx:620
 TF1.cxx:621
 TF1.cxx:622
 TF1.cxx:623
 TF1.cxx:624
 TF1.cxx:625
 TF1.cxx:626
 TF1.cxx:627
 TF1.cxx:628
 TF1.cxx:629
 TF1.cxx:630
 TF1.cxx:631
 TF1.cxx:632
 TF1.cxx:633
 TF1.cxx:634
 TF1.cxx:635
 TF1.cxx:636
 TF1.cxx:637
 TF1.cxx:638
 TF1.cxx:639
 TF1.cxx:640
 TF1.cxx:641
 TF1.cxx:642
 TF1.cxx:643
 TF1.cxx:644
 TF1.cxx:645
 TF1.cxx:646
 TF1.cxx:647
 TF1.cxx:648
 TF1.cxx:649
 TF1.cxx:650
 TF1.cxx:651
 TF1.cxx:652
 TF1.cxx:653
 TF1.cxx:654
 TF1.cxx:655
 TF1.cxx:656
 TF1.cxx:657
 TF1.cxx:658
 TF1.cxx:659
 TF1.cxx:660
 TF1.cxx:661
 TF1.cxx:662
 TF1.cxx:663
 TF1.cxx:664
 TF1.cxx:665
 TF1.cxx:666
 TF1.cxx:667
 TF1.cxx:668
 TF1.cxx:669
 TF1.cxx:670
 TF1.cxx:671
 TF1.cxx:672
 TF1.cxx:673
 TF1.cxx:674
 TF1.cxx:675
 TF1.cxx:676
 TF1.cxx:677
 TF1.cxx:678
 TF1.cxx:679
 TF1.cxx:680
 TF1.cxx:681
 TF1.cxx:682
 TF1.cxx:683
 TF1.cxx:684
 TF1.cxx:685
 TF1.cxx:686
 TF1.cxx:687
 TF1.cxx:688
 TF1.cxx:689
 TF1.cxx:690
 TF1.cxx:691
 TF1.cxx:692
 TF1.cxx:693
 TF1.cxx:694
 TF1.cxx:695
 TF1.cxx:696
 TF1.cxx:697
 TF1.cxx:698
 TF1.cxx:699
 TF1.cxx:700
 TF1.cxx:701
 TF1.cxx:702
 TF1.cxx:703
 TF1.cxx:704
 TF1.cxx:705
 TF1.cxx:706
 TF1.cxx:707
 TF1.cxx:708
 TF1.cxx:709
 TF1.cxx:710
 TF1.cxx:711
 TF1.cxx:712
 TF1.cxx:713
 TF1.cxx:714
 TF1.cxx:715
 TF1.cxx:716
 TF1.cxx:717
 TF1.cxx:718
 TF1.cxx:719
 TF1.cxx:720
 TF1.cxx:721
 TF1.cxx:722
 TF1.cxx:723
 TF1.cxx:724
 TF1.cxx:725
 TF1.cxx:726
 TF1.cxx:727
 TF1.cxx:728
 TF1.cxx:729
 TF1.cxx:730
 TF1.cxx:731
 TF1.cxx:732
 TF1.cxx:733
 TF1.cxx:734
 TF1.cxx:735
 TF1.cxx:736
 TF1.cxx:737
 TF1.cxx:738
 TF1.cxx:739
 TF1.cxx:740
 TF1.cxx:741
 TF1.cxx:742
 TF1.cxx:743
 TF1.cxx:744
 TF1.cxx:745
 TF1.cxx:746
 TF1.cxx:747
 TF1.cxx:748
 TF1.cxx:749
 TF1.cxx:750
 TF1.cxx:751
 TF1.cxx:752
 TF1.cxx:753
 TF1.cxx:754
 TF1.cxx:755
 TF1.cxx:756
 TF1.cxx:757
 TF1.cxx:758
 TF1.cxx:759
 TF1.cxx:760
 TF1.cxx:761
 TF1.cxx:762
 TF1.cxx:763
 TF1.cxx:764
 TF1.cxx:765
 TF1.cxx:766
 TF1.cxx:767
 TF1.cxx:768
 TF1.cxx:769
 TF1.cxx:770
 TF1.cxx:771
 TF1.cxx:772
 TF1.cxx:773
 TF1.cxx:774
 TF1.cxx:775
 TF1.cxx:776
 TF1.cxx:777
 TF1.cxx:778
 TF1.cxx:779
 TF1.cxx:780
 TF1.cxx:781
 TF1.cxx:782
 TF1.cxx:783
 TF1.cxx:784
 TF1.cxx:785
 TF1.cxx:786
 TF1.cxx:787
 TF1.cxx:788
 TF1.cxx:789
 TF1.cxx:790
 TF1.cxx:791
 TF1.cxx:792
 TF1.cxx:793
 TF1.cxx:794
 TF1.cxx:795
 TF1.cxx:796
 TF1.cxx:797
 TF1.cxx:798
 TF1.cxx:799
 TF1.cxx:800
 TF1.cxx:801
 TF1.cxx:802
 TF1.cxx:803
 TF1.cxx:804
 TF1.cxx:805
 TF1.cxx:806
 TF1.cxx:807
 TF1.cxx:808
 TF1.cxx:809
 TF1.cxx:810
 TF1.cxx:811
 TF1.cxx:812
 TF1.cxx:813
 TF1.cxx:814
 TF1.cxx:815
 TF1.cxx:816
 TF1.cxx:817
 TF1.cxx:818
 TF1.cxx:819
 TF1.cxx:820
 TF1.cxx:821
 TF1.cxx:822
 TF1.cxx:823
 TF1.cxx:824
 TF1.cxx:825
 TF1.cxx:826
 TF1.cxx:827
 TF1.cxx:828
 TF1.cxx:829
 TF1.cxx:830
 TF1.cxx:831
 TF1.cxx:832
 TF1.cxx:833
 TF1.cxx:834
 TF1.cxx:835
 TF1.cxx:836
 TF1.cxx:837
 TF1.cxx:838
 TF1.cxx:839
 TF1.cxx:840
 TF1.cxx:841
 TF1.cxx:842
 TF1.cxx:843
 TF1.cxx:844
 TF1.cxx:845
 TF1.cxx:846
 TF1.cxx:847
 TF1.cxx:848
 TF1.cxx:849
 TF1.cxx:850
 TF1.cxx:851
 TF1.cxx:852
 TF1.cxx:853
 TF1.cxx:854
 TF1.cxx:855
 TF1.cxx:856
 TF1.cxx:857
 TF1.cxx:858
 TF1.cxx:859
 TF1.cxx:860
 TF1.cxx:861
 TF1.cxx:862
 TF1.cxx:863
 TF1.cxx:864
 TF1.cxx:865
 TF1.cxx:866
 TF1.cxx:867
 TF1.cxx:868
 TF1.cxx:869
 TF1.cxx:870
 TF1.cxx:871
 TF1.cxx:872
 TF1.cxx:873
 TF1.cxx:874
 TF1.cxx:875
 TF1.cxx:876
 TF1.cxx:877
 TF1.cxx:878
 TF1.cxx:879
 TF1.cxx:880
 TF1.cxx:881
 TF1.cxx:882
 TF1.cxx:883
 TF1.cxx:884
 TF1.cxx:885
 TF1.cxx:886
 TF1.cxx:887
 TF1.cxx:888
 TF1.cxx:889
 TF1.cxx:890
 TF1.cxx:891
 TF1.cxx:892
 TF1.cxx:893
 TF1.cxx:894
 TF1.cxx:895
 TF1.cxx:896
 TF1.cxx:897
 TF1.cxx:898
 TF1.cxx:899
 TF1.cxx:900
 TF1.cxx:901
 TF1.cxx:902
 TF1.cxx:903
 TF1.cxx:904
 TF1.cxx:905
 TF1.cxx:906
 TF1.cxx:907
 TF1.cxx:908
 TF1.cxx:909
 TF1.cxx:910
 TF1.cxx:911
 TF1.cxx:912
 TF1.cxx:913
 TF1.cxx:914
 TF1.cxx:915
 TF1.cxx:916
 TF1.cxx:917
 TF1.cxx:918
 TF1.cxx:919
 TF1.cxx:920
 TF1.cxx:921
 TF1.cxx:922
 TF1.cxx:923
 TF1.cxx:924
 TF1.cxx:925
 TF1.cxx:926
 TF1.cxx:927
 TF1.cxx:928
 TF1.cxx:929
 TF1.cxx:930
 TF1.cxx:931
 TF1.cxx:932
 TF1.cxx:933
 TF1.cxx:934
 TF1.cxx:935
 TF1.cxx:936
 TF1.cxx:937
 TF1.cxx:938
 TF1.cxx:939
 TF1.cxx:940
 TF1.cxx:941
 TF1.cxx:942
 TF1.cxx:943
 TF1.cxx:944
 TF1.cxx:945
 TF1.cxx:946
 TF1.cxx:947
 TF1.cxx:948
 TF1.cxx:949
 TF1.cxx:950
 TF1.cxx:951
 TF1.cxx:952
 TF1.cxx:953
 TF1.cxx:954
 TF1.cxx:955
 TF1.cxx:956
 TF1.cxx:957
 TF1.cxx:958
 TF1.cxx:959
 TF1.cxx:960
 TF1.cxx:961
 TF1.cxx:962
 TF1.cxx:963
 TF1.cxx:964
 TF1.cxx:965
 TF1.cxx:966
 TF1.cxx:967
 TF1.cxx:968
 TF1.cxx:969
 TF1.cxx:970
 TF1.cxx:971
 TF1.cxx:972
 TF1.cxx:973
 TF1.cxx:974
 TF1.cxx:975
 TF1.cxx:976
 TF1.cxx:977
 TF1.cxx:978
 TF1.cxx:979
 TF1.cxx:980
 TF1.cxx:981
 TF1.cxx:982
 TF1.cxx:983
 TF1.cxx:984
 TF1.cxx:985
 TF1.cxx:986
 TF1.cxx:987
 TF1.cxx:988
 TF1.cxx:989
 TF1.cxx:990
 TF1.cxx:991
 TF1.cxx:992
 TF1.cxx:993
 TF1.cxx:994
 TF1.cxx:995
 TF1.cxx:996
 TF1.cxx:997
 TF1.cxx:998
 TF1.cxx:999
 TF1.cxx:1000
 TF1.cxx:1001
 TF1.cxx:1002
 TF1.cxx:1003
 TF1.cxx:1004
 TF1.cxx:1005
 TF1.cxx:1006
 TF1.cxx:1007
 TF1.cxx:1008
 TF1.cxx:1009
 TF1.cxx:1010
 TF1.cxx:1011
 TF1.cxx:1012
 TF1.cxx:1013
 TF1.cxx:1014
 TF1.cxx:1015
 TF1.cxx:1016
 TF1.cxx:1017
 TF1.cxx:1018
 TF1.cxx:1019
 TF1.cxx:1020
 TF1.cxx:1021
 TF1.cxx:1022
 TF1.cxx:1023
 TF1.cxx:1024
 TF1.cxx:1025
 TF1.cxx:1026
 TF1.cxx:1027
 TF1.cxx:1028
 TF1.cxx:1029
 TF1.cxx:1030
 TF1.cxx:1031
 TF1.cxx:1032
 TF1.cxx:1033
 TF1.cxx:1034
 TF1.cxx:1035
 TF1.cxx:1036
 TF1.cxx:1037
 TF1.cxx:1038
 TF1.cxx:1039
 TF1.cxx:1040
 TF1.cxx:1041
 TF1.cxx:1042
 TF1.cxx:1043
 TF1.cxx:1044
 TF1.cxx:1045
 TF1.cxx:1046
 TF1.cxx:1047
 TF1.cxx:1048
 TF1.cxx:1049
 TF1.cxx:1050
 TF1.cxx:1051
 TF1.cxx:1052
 TF1.cxx:1053
 TF1.cxx:1054
 TF1.cxx:1055
 TF1.cxx:1056
 TF1.cxx:1057
 TF1.cxx:1058
 TF1.cxx:1059
 TF1.cxx:1060
 TF1.cxx:1061
 TF1.cxx:1062
 TF1.cxx:1063
 TF1.cxx:1064
 TF1.cxx:1065
 TF1.cxx:1066
 TF1.cxx:1067
 TF1.cxx:1068
 TF1.cxx:1069
 TF1.cxx:1070
 TF1.cxx:1071
 TF1.cxx:1072
 TF1.cxx:1073
 TF1.cxx:1074
 TF1.cxx:1075
 TF1.cxx:1076
 TF1.cxx:1077
 TF1.cxx:1078
 TF1.cxx:1079
 TF1.cxx:1080
 TF1.cxx:1081
 TF1.cxx:1082
 TF1.cxx:1083
 TF1.cxx:1084
 TF1.cxx:1085
 TF1.cxx:1086
 TF1.cxx:1087
 TF1.cxx:1088
 TF1.cxx:1089
 TF1.cxx:1090
 TF1.cxx:1091
 TF1.cxx:1092
 TF1.cxx:1093
 TF1.cxx:1094
 TF1.cxx:1095
 TF1.cxx:1096
 TF1.cxx:1097
 TF1.cxx:1098
 TF1.cxx:1099
 TF1.cxx:1100
 TF1.cxx:1101
 TF1.cxx:1102
 TF1.cxx:1103
 TF1.cxx:1104
 TF1.cxx:1105
 TF1.cxx:1106
 TF1.cxx:1107
 TF1.cxx:1108
 TF1.cxx:1109
 TF1.cxx:1110
 TF1.cxx:1111
 TF1.cxx:1112
 TF1.cxx:1113
 TF1.cxx:1114
 TF1.cxx:1115
 TF1.cxx:1116
 TF1.cxx:1117
 TF1.cxx:1118
 TF1.cxx:1119
 TF1.cxx:1120
 TF1.cxx:1121
 TF1.cxx:1122
 TF1.cxx:1123
 TF1.cxx:1124
 TF1.cxx:1125
 TF1.cxx:1126
 TF1.cxx:1127
 TF1.cxx:1128
 TF1.cxx:1129
 TF1.cxx:1130
 TF1.cxx:1131
 TF1.cxx:1132
 TF1.cxx:1133
 TF1.cxx:1134
 TF1.cxx:1135
 TF1.cxx:1136
 TF1.cxx:1137
 TF1.cxx:1138
 TF1.cxx:1139
 TF1.cxx:1140
 TF1.cxx:1141
 TF1.cxx:1142
 TF1.cxx:1143
 TF1.cxx:1144
 TF1.cxx:1145
 TF1.cxx:1146
 TF1.cxx:1147
 TF1.cxx:1148
 TF1.cxx:1149
 TF1.cxx:1150
 TF1.cxx:1151
 TF1.cxx:1152
 TF1.cxx:1153
 TF1.cxx:1154
 TF1.cxx:1155
 TF1.cxx:1156
 TF1.cxx:1157
 TF1.cxx:1158
 TF1.cxx:1159
 TF1.cxx:1160
 TF1.cxx:1161
 TF1.cxx:1162
 TF1.cxx:1163
 TF1.cxx:1164
 TF1.cxx:1165
 TF1.cxx:1166
 TF1.cxx:1167
 TF1.cxx:1168
 TF1.cxx:1169
 TF1.cxx:1170
 TF1.cxx:1171
 TF1.cxx:1172
 TF1.cxx:1173
 TF1.cxx:1174
 TF1.cxx:1175
 TF1.cxx:1176
 TF1.cxx:1177
 TF1.cxx:1178
 TF1.cxx:1179
 TF1.cxx:1180
 TF1.cxx:1181
 TF1.cxx:1182
 TF1.cxx:1183
 TF1.cxx:1184
 TF1.cxx:1185
 TF1.cxx:1186
 TF1.cxx:1187
 TF1.cxx:1188
 TF1.cxx:1189
 TF1.cxx:1190
 TF1.cxx:1191
 TF1.cxx:1192
 TF1.cxx:1193
 TF1.cxx:1194
 TF1.cxx:1195
 TF1.cxx:1196
 TF1.cxx:1197
 TF1.cxx:1198
 TF1.cxx:1199
 TF1.cxx:1200
 TF1.cxx:1201
 TF1.cxx:1202
 TF1.cxx:1203
 TF1.cxx:1204
 TF1.cxx:1205
 TF1.cxx:1206
 TF1.cxx:1207
 TF1.cxx:1208
 TF1.cxx:1209
 TF1.cxx:1210
 TF1.cxx:1211
 TF1.cxx:1212
 TF1.cxx:1213
 TF1.cxx:1214
 TF1.cxx:1215
 TF1.cxx:1216
 TF1.cxx:1217
 TF1.cxx:1218
 TF1.cxx:1219
 TF1.cxx:1220
 TF1.cxx:1221
 TF1.cxx:1222
 TF1.cxx:1223
 TF1.cxx:1224
 TF1.cxx:1225
 TF1.cxx:1226
 TF1.cxx:1227
 TF1.cxx:1228
 TF1.cxx:1229
 TF1.cxx:1230
 TF1.cxx:1231
 TF1.cxx:1232
 TF1.cxx:1233
 TF1.cxx:1234
 TF1.cxx:1235
 TF1.cxx:1236
 TF1.cxx:1237
 TF1.cxx:1238
 TF1.cxx:1239
 TF1.cxx:1240
 TF1.cxx:1241
 TF1.cxx:1242
 TF1.cxx:1243
 TF1.cxx:1244
 TF1.cxx:1245
 TF1.cxx:1246
 TF1.cxx:1247
 TF1.cxx:1248
 TF1.cxx:1249
 TF1.cxx:1250
 TF1.cxx:1251
 TF1.cxx:1252
 TF1.cxx:1253
 TF1.cxx:1254
 TF1.cxx:1255
 TF1.cxx:1256
 TF1.cxx:1257
 TF1.cxx:1258
 TF1.cxx:1259
 TF1.cxx:1260
 TF1.cxx:1261
 TF1.cxx:1262
 TF1.cxx:1263
 TF1.cxx:1264
 TF1.cxx:1265
 TF1.cxx:1266
 TF1.cxx:1267
 TF1.cxx:1268
 TF1.cxx:1269
 TF1.cxx:1270
 TF1.cxx:1271
 TF1.cxx:1272
 TF1.cxx:1273
 TF1.cxx:1274
 TF1.cxx:1275
 TF1.cxx:1276
 TF1.cxx:1277
 TF1.cxx:1278
 TF1.cxx:1279
 TF1.cxx:1280
 TF1.cxx:1281
 TF1.cxx:1282
 TF1.cxx:1283
 TF1.cxx:1284
 TF1.cxx:1285
 TF1.cxx:1286
 TF1.cxx:1287
 TF1.cxx:1288
 TF1.cxx:1289
 TF1.cxx:1290
 TF1.cxx:1291
 TF1.cxx:1292
 TF1.cxx:1293
 TF1.cxx:1294
 TF1.cxx:1295
 TF1.cxx:1296
 TF1.cxx:1297
 TF1.cxx:1298
 TF1.cxx:1299
 TF1.cxx:1300
 TF1.cxx:1301
 TF1.cxx:1302
 TF1.cxx:1303
 TF1.cxx:1304
 TF1.cxx:1305
 TF1.cxx:1306
 TF1.cxx:1307
 TF1.cxx:1308
 TF1.cxx:1309
 TF1.cxx:1310
 TF1.cxx:1311
 TF1.cxx:1312
 TF1.cxx:1313
 TF1.cxx:1314
 TF1.cxx:1315
 TF1.cxx:1316
 TF1.cxx:1317
 TF1.cxx:1318
 TF1.cxx:1319
 TF1.cxx:1320
 TF1.cxx:1321
 TF1.cxx:1322
 TF1.cxx:1323
 TF1.cxx:1324
 TF1.cxx:1325
 TF1.cxx:1326
 TF1.cxx:1327
 TF1.cxx:1328
 TF1.cxx:1329
 TF1.cxx:1330
 TF1.cxx:1331
 TF1.cxx:1332
 TF1.cxx:1333
 TF1.cxx:1334
 TF1.cxx:1335
 TF1.cxx:1336
 TF1.cxx:1337
 TF1.cxx:1338
 TF1.cxx:1339
 TF1.cxx:1340
 TF1.cxx:1341
 TF1.cxx:1342
 TF1.cxx:1343
 TF1.cxx:1344
 TF1.cxx:1345
 TF1.cxx:1346
 TF1.cxx:1347
 TF1.cxx:1348
 TF1.cxx:1349
 TF1.cxx:1350
 TF1.cxx:1351
 TF1.cxx:1352
 TF1.cxx:1353
 TF1.cxx:1354
 TF1.cxx:1355
 TF1.cxx:1356
 TF1.cxx:1357
 TF1.cxx:1358
 TF1.cxx:1359
 TF1.cxx:1360
 TF1.cxx:1361
 TF1.cxx:1362
 TF1.cxx:1363
 TF1.cxx:1364
 TF1.cxx:1365
 TF1.cxx:1366
 TF1.cxx:1367
 TF1.cxx:1368
 TF1.cxx:1369
 TF1.cxx:1370
 TF1.cxx:1371
 TF1.cxx:1372
 TF1.cxx:1373
 TF1.cxx:1374
 TF1.cxx:1375
 TF1.cxx:1376
 TF1.cxx:1377
 TF1.cxx:1378
 TF1.cxx:1379
 TF1.cxx:1380
 TF1.cxx:1381
 TF1.cxx:1382
 TF1.cxx:1383
 TF1.cxx:1384
 TF1.cxx:1385
 TF1.cxx:1386
 TF1.cxx:1387
 TF1.cxx:1388
 TF1.cxx:1389
 TF1.cxx:1390
 TF1.cxx:1391
 TF1.cxx:1392
 TF1.cxx:1393
 TF1.cxx:1394
 TF1.cxx:1395
 TF1.cxx:1396
 TF1.cxx:1397
 TF1.cxx:1398
 TF1.cxx:1399
 TF1.cxx:1400
 TF1.cxx:1401
 TF1.cxx:1402
 TF1.cxx:1403
 TF1.cxx:1404
 TF1.cxx:1405
 TF1.cxx:1406
 TF1.cxx:1407
 TF1.cxx:1408
 TF1.cxx:1409
 TF1.cxx:1410
 TF1.cxx:1411
 TF1.cxx:1412
 TF1.cxx:1413
 TF1.cxx:1414
 TF1.cxx:1415
 TF1.cxx:1416
 TF1.cxx:1417
 TF1.cxx:1418
 TF1.cxx:1419
 TF1.cxx:1420
 TF1.cxx:1421
 TF1.cxx:1422
 TF1.cxx:1423
 TF1.cxx:1424
 TF1.cxx:1425
 TF1.cxx:1426
 TF1.cxx:1427
 TF1.cxx:1428
 TF1.cxx:1429
 TF1.cxx:1430
 TF1.cxx:1431
 TF1.cxx:1432
 TF1.cxx:1433
 TF1.cxx:1434
 TF1.cxx:1435
 TF1.cxx:1436
 TF1.cxx:1437
 TF1.cxx:1438
 TF1.cxx:1439
 TF1.cxx:1440
 TF1.cxx:1441
 TF1.cxx:1442
 TF1.cxx:1443
 TF1.cxx:1444
 TF1.cxx:1445
 TF1.cxx:1446
 TF1.cxx:1447
 TF1.cxx:1448
 TF1.cxx:1449
 TF1.cxx:1450
 TF1.cxx:1451
 TF1.cxx:1452
 TF1.cxx:1453
 TF1.cxx:1454
 TF1.cxx:1455
 TF1.cxx:1456
 TF1.cxx:1457
 TF1.cxx:1458
 TF1.cxx:1459
 TF1.cxx:1460
 TF1.cxx:1461
 TF1.cxx:1462
 TF1.cxx:1463
 TF1.cxx:1464
 TF1.cxx:1465
 TF1.cxx:1466
 TF1.cxx:1467
 TF1.cxx:1468
 TF1.cxx:1469
 TF1.cxx:1470
 TF1.cxx:1471
 TF1.cxx:1472
 TF1.cxx:1473
 TF1.cxx:1474
 TF1.cxx:1475
 TF1.cxx:1476
 TF1.cxx:1477
 TF1.cxx:1478
 TF1.cxx:1479
 TF1.cxx:1480
 TF1.cxx:1481
 TF1.cxx:1482
 TF1.cxx:1483
 TF1.cxx:1484
 TF1.cxx:1485
 TF1.cxx:1486
 TF1.cxx:1487
 TF1.cxx:1488
 TF1.cxx:1489
 TF1.cxx:1490
 TF1.cxx:1491
 TF1.cxx:1492
 TF1.cxx:1493
 TF1.cxx:1494
 TF1.cxx:1495
 TF1.cxx:1496
 TF1.cxx:1497
 TF1.cxx:1498
 TF1.cxx:1499
 TF1.cxx:1500
 TF1.cxx:1501
 TF1.cxx:1502
 TF1.cxx:1503
 TF1.cxx:1504
 TF1.cxx:1505
 TF1.cxx:1506
 TF1.cxx:1507
 TF1.cxx:1508
 TF1.cxx:1509
 TF1.cxx:1510
 TF1.cxx:1511
 TF1.cxx:1512
 TF1.cxx:1513
 TF1.cxx:1514
 TF1.cxx:1515
 TF1.cxx:1516
 TF1.cxx:1517
 TF1.cxx:1518
 TF1.cxx:1519
 TF1.cxx:1520
 TF1.cxx:1521
 TF1.cxx:1522
 TF1.cxx:1523
 TF1.cxx:1524
 TF1.cxx:1525
 TF1.cxx:1526
 TF1.cxx:1527
 TF1.cxx:1528
 TF1.cxx:1529
 TF1.cxx:1530
 TF1.cxx:1531
 TF1.cxx:1532
 TF1.cxx:1533
 TF1.cxx:1534
 TF1.cxx:1535
 TF1.cxx:1536
 TF1.cxx:1537
 TF1.cxx:1538
 TF1.cxx:1539
 TF1.cxx:1540
 TF1.cxx:1541
 TF1.cxx:1542
 TF1.cxx:1543
 TF1.cxx:1544
 TF1.cxx:1545
 TF1.cxx:1546
 TF1.cxx:1547
 TF1.cxx:1548
 TF1.cxx:1549
 TF1.cxx:1550
 TF1.cxx:1551
 TF1.cxx:1552
 TF1.cxx:1553
 TF1.cxx:1554
 TF1.cxx:1555
 TF1.cxx:1556
 TF1.cxx:1557
 TF1.cxx:1558
 TF1.cxx:1559
 TF1.cxx:1560
 TF1.cxx:1561
 TF1.cxx:1562
 TF1.cxx:1563
 TF1.cxx:1564
 TF1.cxx:1565
 TF1.cxx:1566
 TF1.cxx:1567
 TF1.cxx:1568
 TF1.cxx:1569
 TF1.cxx:1570
 TF1.cxx:1571
 TF1.cxx:1572
 TF1.cxx:1573
 TF1.cxx:1574
 TF1.cxx:1575
 TF1.cxx:1576
 TF1.cxx:1577
 TF1.cxx:1578
 TF1.cxx:1579
 TF1.cxx:1580
 TF1.cxx:1581
 TF1.cxx:1582
 TF1.cxx:1583
 TF1.cxx:1584
 TF1.cxx:1585
 TF1.cxx:1586
 TF1.cxx:1587
 TF1.cxx:1588
 TF1.cxx:1589
 TF1.cxx:1590
 TF1.cxx:1591
 TF1.cxx:1592
 TF1.cxx:1593
 TF1.cxx:1594
 TF1.cxx:1595
 TF1.cxx:1596
 TF1.cxx:1597
 TF1.cxx:1598
 TF1.cxx:1599
 TF1.cxx:1600
 TF1.cxx:1601
 TF1.cxx:1602
 TF1.cxx:1603
 TF1.cxx:1604
 TF1.cxx:1605
 TF1.cxx:1606
 TF1.cxx:1607
 TF1.cxx:1608
 TF1.cxx:1609
 TF1.cxx:1610
 TF1.cxx:1611
 TF1.cxx:1612
 TF1.cxx:1613
 TF1.cxx:1614
 TF1.cxx:1615
 TF1.cxx:1616
 TF1.cxx:1617
 TF1.cxx:1618
 TF1.cxx:1619
 TF1.cxx:1620
 TF1.cxx:1621
 TF1.cxx:1622
 TF1.cxx:1623
 TF1.cxx:1624
 TF1.cxx:1625
 TF1.cxx:1626
 TF1.cxx:1627
 TF1.cxx:1628
 TF1.cxx:1629
 TF1.cxx:1630
 TF1.cxx:1631
 TF1.cxx:1632
 TF1.cxx:1633
 TF1.cxx:1634
 TF1.cxx:1635
 TF1.cxx:1636
 TF1.cxx:1637
 TF1.cxx:1638
 TF1.cxx:1639
 TF1.cxx:1640
 TF1.cxx:1641
 TF1.cxx:1642
 TF1.cxx:1643
 TF1.cxx:1644
 TF1.cxx:1645
 TF1.cxx:1646
 TF1.cxx:1647
 TF1.cxx:1648
 TF1.cxx:1649
 TF1.cxx:1650
 TF1.cxx:1651
 TF1.cxx:1652
 TF1.cxx:1653
 TF1.cxx:1654
 TF1.cxx:1655
 TF1.cxx:1656
 TF1.cxx:1657
 TF1.cxx:1658
 TF1.cxx:1659
 TF1.cxx:1660
 TF1.cxx:1661
 TF1.cxx:1662
 TF1.cxx:1663
 TF1.cxx:1664
 TF1.cxx:1665
 TF1.cxx:1666
 TF1.cxx:1667
 TF1.cxx:1668
 TF1.cxx:1669
 TF1.cxx:1670
 TF1.cxx:1671
 TF1.cxx:1672
 TF1.cxx:1673
 TF1.cxx:1674
 TF1.cxx:1675
 TF1.cxx:1676
 TF1.cxx:1677
 TF1.cxx:1678
 TF1.cxx:1679
 TF1.cxx:1680
 TF1.cxx:1681
 TF1.cxx:1682
 TF1.cxx:1683
 TF1.cxx:1684
 TF1.cxx:1685
 TF1.cxx:1686
 TF1.cxx:1687
 TF1.cxx:1688
 TF1.cxx:1689
 TF1.cxx:1690
 TF1.cxx:1691
 TF1.cxx:1692
 TF1.cxx:1693
 TF1.cxx:1694
 TF1.cxx:1695
 TF1.cxx:1696
 TF1.cxx:1697
 TF1.cxx:1698
 TF1.cxx:1699
 TF1.cxx:1700
 TF1.cxx:1701
 TF1.cxx:1702
 TF1.cxx:1703
 TF1.cxx:1704
 TF1.cxx:1705
 TF1.cxx:1706
 TF1.cxx:1707
 TF1.cxx:1708
 TF1.cxx:1709
 TF1.cxx:1710
 TF1.cxx:1711
 TF1.cxx:1712
 TF1.cxx:1713
 TF1.cxx:1714
 TF1.cxx:1715
 TF1.cxx:1716
 TF1.cxx:1717
 TF1.cxx:1718
 TF1.cxx:1719
 TF1.cxx:1720
 TF1.cxx:1721
 TF1.cxx:1722
 TF1.cxx:1723
 TF1.cxx:1724
 TF1.cxx:1725
 TF1.cxx:1726
 TF1.cxx:1727
 TF1.cxx:1728
 TF1.cxx:1729
 TF1.cxx:1730
 TF1.cxx:1731
 TF1.cxx:1732
 TF1.cxx:1733
 TF1.cxx:1734
 TF1.cxx:1735
 TF1.cxx:1736
 TF1.cxx:1737
 TF1.cxx:1738
 TF1.cxx:1739
 TF1.cxx:1740
 TF1.cxx:1741
 TF1.cxx:1742
 TF1.cxx:1743
 TF1.cxx:1744
 TF1.cxx:1745
 TF1.cxx:1746
 TF1.cxx:1747
 TF1.cxx:1748
 TF1.cxx:1749
 TF1.cxx:1750
 TF1.cxx:1751
 TF1.cxx:1752
 TF1.cxx:1753
 TF1.cxx:1754
 TF1.cxx:1755
 TF1.cxx:1756
 TF1.cxx:1757
 TF1.cxx:1758
 TF1.cxx:1759
 TF1.cxx:1760
 TF1.cxx:1761
 TF1.cxx:1762
 TF1.cxx:1763
 TF1.cxx:1764
 TF1.cxx:1765
 TF1.cxx:1766
 TF1.cxx:1767
 TF1.cxx:1768
 TF1.cxx:1769
 TF1.cxx:1770
 TF1.cxx:1771
 TF1.cxx:1772
 TF1.cxx:1773
 TF1.cxx:1774
 TF1.cxx:1775
 TF1.cxx:1776
 TF1.cxx:1777
 TF1.cxx:1778
 TF1.cxx:1779
 TF1.cxx:1780
 TF1.cxx:1781
 TF1.cxx:1782
 TF1.cxx:1783
 TF1.cxx:1784
 TF1.cxx:1785
 TF1.cxx:1786
 TF1.cxx:1787
 TF1.cxx:1788
 TF1.cxx:1789
 TF1.cxx:1790
 TF1.cxx:1791
 TF1.cxx:1792
 TF1.cxx:1793
 TF1.cxx:1794
 TF1.cxx:1795
 TF1.cxx:1796
 TF1.cxx:1797
 TF1.cxx:1798
 TF1.cxx:1799
 TF1.cxx:1800
 TF1.cxx:1801
 TF1.cxx:1802
 TF1.cxx:1803
 TF1.cxx:1804
 TF1.cxx:1805
 TF1.cxx:1806
 TF1.cxx:1807
 TF1.cxx:1808
 TF1.cxx:1809
 TF1.cxx:1810
 TF1.cxx:1811
 TF1.cxx:1812
 TF1.cxx:1813
 TF1.cxx:1814
 TF1.cxx:1815
 TF1.cxx:1816
 TF1.cxx:1817
 TF1.cxx:1818
 TF1.cxx:1819
 TF1.cxx:1820
 TF1.cxx:1821
 TF1.cxx:1822
 TF1.cxx:1823
 TF1.cxx:1824
 TF1.cxx:1825
 TF1.cxx:1826
 TF1.cxx:1827
 TF1.cxx:1828
 TF1.cxx:1829
 TF1.cxx:1830
 TF1.cxx:1831
 TF1.cxx:1832
 TF1.cxx:1833
 TF1.cxx:1834
 TF1.cxx:1835
 TF1.cxx:1836
 TF1.cxx:1837
 TF1.cxx:1838
 TF1.cxx:1839
 TF1.cxx:1840
 TF1.cxx:1841
 TF1.cxx:1842
 TF1.cxx:1843
 TF1.cxx:1844
 TF1.cxx:1845
 TF1.cxx:1846
 TF1.cxx:1847
 TF1.cxx:1848
 TF1.cxx:1849
 TF1.cxx:1850
 TF1.cxx:1851
 TF1.cxx:1852
 TF1.cxx:1853
 TF1.cxx:1854
 TF1.cxx:1855
 TF1.cxx:1856
 TF1.cxx:1857
 TF1.cxx:1858
 TF1.cxx:1859
 TF1.cxx:1860
 TF1.cxx:1861
 TF1.cxx:1862
 TF1.cxx:1863
 TF1.cxx:1864
 TF1.cxx:1865
 TF1.cxx:1866
 TF1.cxx:1867
 TF1.cxx:1868
 TF1.cxx:1869
 TF1.cxx:1870
 TF1.cxx:1871
 TF1.cxx:1872
 TF1.cxx:1873
 TF1.cxx:1874
 TF1.cxx:1875
 TF1.cxx:1876
 TF1.cxx:1877
 TF1.cxx:1878
 TF1.cxx:1879
 TF1.cxx:1880
 TF1.cxx:1881
 TF1.cxx:1882
 TF1.cxx:1883
 TF1.cxx:1884
 TF1.cxx:1885
 TF1.cxx:1886
 TF1.cxx:1887
 TF1.cxx:1888
 TF1.cxx:1889
 TF1.cxx:1890
 TF1.cxx:1891
 TF1.cxx:1892
 TF1.cxx:1893
 TF1.cxx:1894
 TF1.cxx:1895
 TF1.cxx:1896
 TF1.cxx:1897
 TF1.cxx:1898
 TF1.cxx:1899
 TF1.cxx:1900
 TF1.cxx:1901
 TF1.cxx:1902
 TF1.cxx:1903
 TF1.cxx:1904
 TF1.cxx:1905
 TF1.cxx:1906
 TF1.cxx:1907
 TF1.cxx:1908
 TF1.cxx:1909
 TF1.cxx:1910
 TF1.cxx:1911
 TF1.cxx:1912
 TF1.cxx:1913
 TF1.cxx:1914
 TF1.cxx:1915
 TF1.cxx:1916
 TF1.cxx:1917
 TF1.cxx:1918
 TF1.cxx:1919
 TF1.cxx:1920
 TF1.cxx:1921
 TF1.cxx:1922
 TF1.cxx:1923
 TF1.cxx:1924
 TF1.cxx:1925
 TF1.cxx:1926
 TF1.cxx:1927
 TF1.cxx:1928
 TF1.cxx:1929
 TF1.cxx:1930
 TF1.cxx:1931
 TF1.cxx:1932
 TF1.cxx:1933
 TF1.cxx:1934
 TF1.cxx:1935
 TF1.cxx:1936
 TF1.cxx:1937
 TF1.cxx:1938
 TF1.cxx:1939
 TF1.cxx:1940
 TF1.cxx:1941
 TF1.cxx:1942
 TF1.cxx:1943
 TF1.cxx:1944
 TF1.cxx:1945
 TF1.cxx:1946
 TF1.cxx:1947
 TF1.cxx:1948
 TF1.cxx:1949
 TF1.cxx:1950
 TF1.cxx:1951
 TF1.cxx:1952
 TF1.cxx:1953
 TF1.cxx:1954
 TF1.cxx:1955
 TF1.cxx:1956
 TF1.cxx:1957
 TF1.cxx:1958
 TF1.cxx:1959
 TF1.cxx:1960
 TF1.cxx:1961
 TF1.cxx:1962
 TF1.cxx:1963
 TF1.cxx:1964
 TF1.cxx:1965
 TF1.cxx:1966
 TF1.cxx:1967
 TF1.cxx:1968
 TF1.cxx:1969
 TF1.cxx:1970
 TF1.cxx:1971
 TF1.cxx:1972
 TF1.cxx:1973
 TF1.cxx:1974
 TF1.cxx:1975
 TF1.cxx:1976
 TF1.cxx:1977
 TF1.cxx:1978
 TF1.cxx:1979
 TF1.cxx:1980
 TF1.cxx:1981
 TF1.cxx:1982
 TF1.cxx:1983
 TF1.cxx:1984
 TF1.cxx:1985
 TF1.cxx:1986
 TF1.cxx:1987
 TF1.cxx:1988
 TF1.cxx:1989
 TF1.cxx:1990
 TF1.cxx:1991
 TF1.cxx:1992
 TF1.cxx:1993
 TF1.cxx:1994
 TF1.cxx:1995
 TF1.cxx:1996
 TF1.cxx:1997
 TF1.cxx:1998
 TF1.cxx:1999
 TF1.cxx:2000
 TF1.cxx:2001
 TF1.cxx:2002
 TF1.cxx:2003
 TF1.cxx:2004
 TF1.cxx:2005
 TF1.cxx:2006
 TF1.cxx:2007
 TF1.cxx:2008
 TF1.cxx:2009
 TF1.cxx:2010
 TF1.cxx:2011
 TF1.cxx:2012
 TF1.cxx:2013
 TF1.cxx:2014
 TF1.cxx:2015
 TF1.cxx:2016
 TF1.cxx:2017
 TF1.cxx:2018
 TF1.cxx:2019
 TF1.cxx:2020
 TF1.cxx:2021
 TF1.cxx:2022
 TF1.cxx:2023
 TF1.cxx:2024
 TF1.cxx:2025
 TF1.cxx:2026
 TF1.cxx:2027
 TF1.cxx:2028
 TF1.cxx:2029
 TF1.cxx:2030
 TF1.cxx:2031
 TF1.cxx:2032
 TF1.cxx:2033
 TF1.cxx:2034
 TF1.cxx:2035
 TF1.cxx:2036
 TF1.cxx:2037
 TF1.cxx:2038
 TF1.cxx:2039
 TF1.cxx:2040
 TF1.cxx:2041
 TF1.cxx:2042
 TF1.cxx:2043
 TF1.cxx:2044
 TF1.cxx:2045
 TF1.cxx:2046
 TF1.cxx:2047
 TF1.cxx:2048
 TF1.cxx:2049
 TF1.cxx:2050
 TF1.cxx:2051
 TF1.cxx:2052
 TF1.cxx:2053
 TF1.cxx:2054
 TF1.cxx:2055
 TF1.cxx:2056
 TF1.cxx:2057
 TF1.cxx:2058
 TF1.cxx:2059
 TF1.cxx:2060
 TF1.cxx:2061
 TF1.cxx:2062
 TF1.cxx:2063
 TF1.cxx:2064
 TF1.cxx:2065
 TF1.cxx:2066
 TF1.cxx:2067
 TF1.cxx:2068
 TF1.cxx:2069
 TF1.cxx:2070
 TF1.cxx:2071
 TF1.cxx:2072
 TF1.cxx:2073
 TF1.cxx:2074
 TF1.cxx:2075
 TF1.cxx:2076
 TF1.cxx:2077
 TF1.cxx:2078
 TF1.cxx:2079
 TF1.cxx:2080
 TF1.cxx:2081
 TF1.cxx:2082
 TF1.cxx:2083
 TF1.cxx:2084
 TF1.cxx:2085
 TF1.cxx:2086
 TF1.cxx:2087
 TF1.cxx:2088
 TF1.cxx:2089
 TF1.cxx:2090
 TF1.cxx:2091
 TF1.cxx:2092
 TF1.cxx:2093
 TF1.cxx:2094
 TF1.cxx:2095
 TF1.cxx:2096
 TF1.cxx:2097
 TF1.cxx:2098
 TF1.cxx:2099
 TF1.cxx:2100
 TF1.cxx:2101
 TF1.cxx:2102
 TF1.cxx:2103
 TF1.cxx:2104
 TF1.cxx:2105
 TF1.cxx:2106
 TF1.cxx:2107
 TF1.cxx:2108
 TF1.cxx:2109
 TF1.cxx:2110
 TF1.cxx:2111
 TF1.cxx:2112
 TF1.cxx:2113
 TF1.cxx:2114
 TF1.cxx:2115
 TF1.cxx:2116
 TF1.cxx:2117
 TF1.cxx:2118
 TF1.cxx:2119
 TF1.cxx:2120
 TF1.cxx:2121
 TF1.cxx:2122
 TF1.cxx:2123
 TF1.cxx:2124
 TF1.cxx:2125
 TF1.cxx:2126
 TF1.cxx:2127
 TF1.cxx:2128
 TF1.cxx:2129
 TF1.cxx:2130
 TF1.cxx:2131
 TF1.cxx:2132
 TF1.cxx:2133
 TF1.cxx:2134
 TF1.cxx:2135
 TF1.cxx:2136
 TF1.cxx:2137
 TF1.cxx:2138
 TF1.cxx:2139
 TF1.cxx:2140
 TF1.cxx:2141
 TF1.cxx:2142
 TF1.cxx:2143
 TF1.cxx:2144
 TF1.cxx:2145
 TF1.cxx:2146
 TF1.cxx:2147
 TF1.cxx:2148
 TF1.cxx:2149
 TF1.cxx:2150
 TF1.cxx:2151
 TF1.cxx:2152
 TF1.cxx:2153
 TF1.cxx:2154
 TF1.cxx:2155
 TF1.cxx:2156
 TF1.cxx:2157
 TF1.cxx:2158
 TF1.cxx:2159
 TF1.cxx:2160
 TF1.cxx:2161
 TF1.cxx:2162
 TF1.cxx:2163
 TF1.cxx:2164
 TF1.cxx:2165
 TF1.cxx:2166
 TF1.cxx:2167
 TF1.cxx:2168
 TF1.cxx:2169
 TF1.cxx:2170
 TF1.cxx:2171
 TF1.cxx:2172
 TF1.cxx:2173
 TF1.cxx:2174
 TF1.cxx:2175
 TF1.cxx:2176
 TF1.cxx:2177
 TF1.cxx:2178
 TF1.cxx:2179
 TF1.cxx:2180
 TF1.cxx:2181
 TF1.cxx:2182
 TF1.cxx:2183
 TF1.cxx:2184
 TF1.cxx:2185
 TF1.cxx:2186
 TF1.cxx:2187
 TF1.cxx:2188
 TF1.cxx:2189
 TF1.cxx:2190
 TF1.cxx:2191
 TF1.cxx:2192
 TF1.cxx:2193
 TF1.cxx:2194
 TF1.cxx:2195
 TF1.cxx:2196
 TF1.cxx:2197
 TF1.cxx:2198
 TF1.cxx:2199
 TF1.cxx:2200
 TF1.cxx:2201
 TF1.cxx:2202
 TF1.cxx:2203
 TF1.cxx:2204
 TF1.cxx:2205
 TF1.cxx:2206
 TF1.cxx:2207
 TF1.cxx:2208
 TF1.cxx:2209
 TF1.cxx:2210
 TF1.cxx:2211
 TF1.cxx:2212
 TF1.cxx:2213
 TF1.cxx:2214
 TF1.cxx:2215
 TF1.cxx:2216
 TF1.cxx:2217
 TF1.cxx:2218
 TF1.cxx:2219
 TF1.cxx:2220
 TF1.cxx:2221
 TF1.cxx:2222
 TF1.cxx:2223
 TF1.cxx:2224
 TF1.cxx:2225
 TF1.cxx:2226
 TF1.cxx:2227
 TF1.cxx:2228
 TF1.cxx:2229
 TF1.cxx:2230
 TF1.cxx:2231
 TF1.cxx:2232
 TF1.cxx:2233
 TF1.cxx:2234
 TF1.cxx:2235
 TF1.cxx:2236
 TF1.cxx:2237
 TF1.cxx:2238
 TF1.cxx:2239
 TF1.cxx:2240
 TF1.cxx:2241
 TF1.cxx:2242
 TF1.cxx:2243
 TF1.cxx:2244
 TF1.cxx:2245
 TF1.cxx:2246
 TF1.cxx:2247
 TF1.cxx:2248
 TF1.cxx:2249
 TF1.cxx:2250
 TF1.cxx:2251
 TF1.cxx:2252
 TF1.cxx:2253
 TF1.cxx:2254
 TF1.cxx:2255
 TF1.cxx:2256
 TF1.cxx:2257
 TF1.cxx:2258
 TF1.cxx:2259
 TF1.cxx:2260
 TF1.cxx:2261
 TF1.cxx:2262
 TF1.cxx:2263
 TF1.cxx:2264
 TF1.cxx:2265
 TF1.cxx:2266
 TF1.cxx:2267
 TF1.cxx:2268
 TF1.cxx:2269
 TF1.cxx:2270
 TF1.cxx:2271
 TF1.cxx:2272
 TF1.cxx:2273
 TF1.cxx:2274
 TF1.cxx:2275
 TF1.cxx:2276
 TF1.cxx:2277
 TF1.cxx:2278
 TF1.cxx:2279
 TF1.cxx:2280
 TF1.cxx:2281
 TF1.cxx:2282
 TF1.cxx:2283
 TF1.cxx:2284
 TF1.cxx:2285
 TF1.cxx:2286
 TF1.cxx:2287
 TF1.cxx:2288
 TF1.cxx:2289
 TF1.cxx:2290
 TF1.cxx:2291
 TF1.cxx:2292
 TF1.cxx:2293
 TF1.cxx:2294
 TF1.cxx:2295
 TF1.cxx:2296
 TF1.cxx:2297
 TF1.cxx:2298
 TF1.cxx:2299
 TF1.cxx:2300
 TF1.cxx:2301
 TF1.cxx:2302
 TF1.cxx:2303
 TF1.cxx:2304
 TF1.cxx:2305
 TF1.cxx:2306
 TF1.cxx:2307
 TF1.cxx:2308
 TF1.cxx:2309
 TF1.cxx:2310
 TF1.cxx:2311
 TF1.cxx:2312
 TF1.cxx:2313
 TF1.cxx:2314
 TF1.cxx:2315
 TF1.cxx:2316
 TF1.cxx:2317
 TF1.cxx:2318
 TF1.cxx:2319
 TF1.cxx:2320
 TF1.cxx:2321
 TF1.cxx:2322
 TF1.cxx:2323
 TF1.cxx:2324
 TF1.cxx:2325
 TF1.cxx:2326
 TF1.cxx:2327
 TF1.cxx:2328
 TF1.cxx:2329
 TF1.cxx:2330
 TF1.cxx:2331
 TF1.cxx:2332
 TF1.cxx:2333
 TF1.cxx:2334
 TF1.cxx:2335
 TF1.cxx:2336
 TF1.cxx:2337
 TF1.cxx:2338
 TF1.cxx:2339
 TF1.cxx:2340
 TF1.cxx:2341
 TF1.cxx:2342
 TF1.cxx:2343
 TF1.cxx:2344
 TF1.cxx:2345
 TF1.cxx:2346
 TF1.cxx:2347
 TF1.cxx:2348
 TF1.cxx:2349
 TF1.cxx:2350
 TF1.cxx:2351
 TF1.cxx:2352
 TF1.cxx:2353
 TF1.cxx:2354
 TF1.cxx:2355
 TF1.cxx:2356
 TF1.cxx:2357
 TF1.cxx:2358
 TF1.cxx:2359
 TF1.cxx:2360
 TF1.cxx:2361
 TF1.cxx:2362
 TF1.cxx:2363
 TF1.cxx:2364
 TF1.cxx:2365
 TF1.cxx:2366
 TF1.cxx:2367
 TF1.cxx:2368
 TF1.cxx:2369
 TF1.cxx:2370
 TF1.cxx:2371
 TF1.cxx:2372
 TF1.cxx:2373
 TF1.cxx:2374
 TF1.cxx:2375
 TF1.cxx:2376
 TF1.cxx:2377
 TF1.cxx:2378
 TF1.cxx:2379
 TF1.cxx:2380
 TF1.cxx:2381
 TF1.cxx:2382
 TF1.cxx:2383
 TF1.cxx:2384
 TF1.cxx:2385
 TF1.cxx:2386
 TF1.cxx:2387
 TF1.cxx:2388
 TF1.cxx:2389
 TF1.cxx:2390
 TF1.cxx:2391
 TF1.cxx:2392
 TF1.cxx:2393
 TF1.cxx:2394
 TF1.cxx:2395
 TF1.cxx:2396
 TF1.cxx:2397
 TF1.cxx:2398
 TF1.cxx:2399
 TF1.cxx:2400
 TF1.cxx:2401
 TF1.cxx:2402
 TF1.cxx:2403
 TF1.cxx:2404
 TF1.cxx:2405
 TF1.cxx:2406
 TF1.cxx:2407
 TF1.cxx:2408
 TF1.cxx:2409
 TF1.cxx:2410
 TF1.cxx:2411
 TF1.cxx:2412
 TF1.cxx:2413
 TF1.cxx:2414
 TF1.cxx:2415
 TF1.cxx:2416
 TF1.cxx:2417
 TF1.cxx:2418
 TF1.cxx:2419
 TF1.cxx:2420
 TF1.cxx:2421
 TF1.cxx:2422
 TF1.cxx:2423
 TF1.cxx:2424
 TF1.cxx:2425
 TF1.cxx:2426
 TF1.cxx:2427
 TF1.cxx:2428
 TF1.cxx:2429
 TF1.cxx:2430
 TF1.cxx:2431
 TF1.cxx:2432
 TF1.cxx:2433
 TF1.cxx:2434
 TF1.cxx:2435
 TF1.cxx:2436
 TF1.cxx:2437
 TF1.cxx:2438
 TF1.cxx:2439
 TF1.cxx:2440
 TF1.cxx:2441
 TF1.cxx:2442
 TF1.cxx:2443
 TF1.cxx:2444
 TF1.cxx:2445
 TF1.cxx:2446
 TF1.cxx:2447
 TF1.cxx:2448
 TF1.cxx:2449
 TF1.cxx:2450
 TF1.cxx:2451
 TF1.cxx:2452
 TF1.cxx:2453
 TF1.cxx:2454
 TF1.cxx:2455
 TF1.cxx:2456
 TF1.cxx:2457
 TF1.cxx:2458
 TF1.cxx:2459
 TF1.cxx:2460
 TF1.cxx:2461
 TF1.cxx:2462
 TF1.cxx:2463
 TF1.cxx:2464
 TF1.cxx:2465
 TF1.cxx:2466
 TF1.cxx:2467
 TF1.cxx:2468
 TF1.cxx:2469
 TF1.cxx:2470
 TF1.cxx:2471
 TF1.cxx:2472
 TF1.cxx:2473
 TF1.cxx:2474
 TF1.cxx:2475
 TF1.cxx:2476
 TF1.cxx:2477
 TF1.cxx:2478
 TF1.cxx:2479
 TF1.cxx:2480
 TF1.cxx:2481
 TF1.cxx:2482
 TF1.cxx:2483
 TF1.cxx:2484
 TF1.cxx:2485
 TF1.cxx:2486
 TF1.cxx:2487
 TF1.cxx:2488
 TF1.cxx:2489
 TF1.cxx:2490
 TF1.cxx:2491
 TF1.cxx:2492
 TF1.cxx:2493
 TF1.cxx:2494
 TF1.cxx:2495
 TF1.cxx:2496
 TF1.cxx:2497
 TF1.cxx:2498
 TF1.cxx:2499
 TF1.cxx:2500
 TF1.cxx:2501
 TF1.cxx:2502
 TF1.cxx:2503
 TF1.cxx:2504
 TF1.cxx:2505
 TF1.cxx:2506
 TF1.cxx:2507
 TF1.cxx:2508
 TF1.cxx:2509
 TF1.cxx:2510
 TF1.cxx:2511
 TF1.cxx:2512
 TF1.cxx:2513
 TF1.cxx:2514
 TF1.cxx:2515
 TF1.cxx:2516
 TF1.cxx:2517
 TF1.cxx:2518
 TF1.cxx:2519
 TF1.cxx:2520
 TF1.cxx:2521
 TF1.cxx:2522
 TF1.cxx:2523
 TF1.cxx:2524
 TF1.cxx:2525
 TF1.cxx:2526
 TF1.cxx:2527
 TF1.cxx:2528
 TF1.cxx:2529
 TF1.cxx:2530
 TF1.cxx:2531
 TF1.cxx:2532
 TF1.cxx:2533
 TF1.cxx:2534
 TF1.cxx:2535
 TF1.cxx:2536
 TF1.cxx:2537
 TF1.cxx:2538
 TF1.cxx:2539
 TF1.cxx:2540
 TF1.cxx:2541
 TF1.cxx:2542
 TF1.cxx:2543
 TF1.cxx:2544
 TF1.cxx:2545
 TF1.cxx:2546
 TF1.cxx:2547
 TF1.cxx:2548
 TF1.cxx:2549
 TF1.cxx:2550
 TF1.cxx:2551
 TF1.cxx:2552
 TF1.cxx:2553
 TF1.cxx:2554
 TF1.cxx:2555
 TF1.cxx:2556
 TF1.cxx:2557
 TF1.cxx:2558
 TF1.cxx:2559
 TF1.cxx:2560
 TF1.cxx:2561
 TF1.cxx:2562
 TF1.cxx:2563
 TF1.cxx:2564
 TF1.cxx:2565
 TF1.cxx:2566
 TF1.cxx:2567
 TF1.cxx:2568
 TF1.cxx:2569
 TF1.cxx:2570
 TF1.cxx:2571
 TF1.cxx:2572
 TF1.cxx:2573
 TF1.cxx:2574
 TF1.cxx:2575
 TF1.cxx:2576
 TF1.cxx:2577
 TF1.cxx:2578
 TF1.cxx:2579
 TF1.cxx:2580
 TF1.cxx:2581
 TF1.cxx:2582
 TF1.cxx:2583
 TF1.cxx:2584
 TF1.cxx:2585
 TF1.cxx:2586
 TF1.cxx:2587
 TF1.cxx:2588
 TF1.cxx:2589
 TF1.cxx:2590
 TF1.cxx:2591
 TF1.cxx:2592
 TF1.cxx:2593
 TF1.cxx:2594
 TF1.cxx:2595
 TF1.cxx:2596
 TF1.cxx:2597
 TF1.cxx:2598
 TF1.cxx:2599
 TF1.cxx:2600
 TF1.cxx:2601
 TF1.cxx:2602
 TF1.cxx:2603
 TF1.cxx:2604
 TF1.cxx:2605
 TF1.cxx:2606
 TF1.cxx:2607
 TF1.cxx:2608
 TF1.cxx:2609
 TF1.cxx:2610
 TF1.cxx:2611
 TF1.cxx:2612
 TF1.cxx:2613
 TF1.cxx:2614
 TF1.cxx:2615
 TF1.cxx:2616
 TF1.cxx:2617
 TF1.cxx:2618
 TF1.cxx:2619
 TF1.cxx:2620
 TF1.cxx:2621
 TF1.cxx:2622
 TF1.cxx:2623
 TF1.cxx:2624
 TF1.cxx:2625
 TF1.cxx:2626
 TF1.cxx:2627
 TF1.cxx:2628
 TF1.cxx:2629
 TF1.cxx:2630
 TF1.cxx:2631
 TF1.cxx:2632
 TF1.cxx:2633
 TF1.cxx:2634
 TF1.cxx:2635
 TF1.cxx:2636
 TF1.cxx:2637
 TF1.cxx:2638
 TF1.cxx:2639
 TF1.cxx:2640
 TF1.cxx:2641
 TF1.cxx:2642
 TF1.cxx:2643
 TF1.cxx:2644
 TF1.cxx:2645
 TF1.cxx:2646
 TF1.cxx:2647
 TF1.cxx:2648
 TF1.cxx:2649
 TF1.cxx:2650
 TF1.cxx:2651
 TF1.cxx:2652
 TF1.cxx:2653
 TF1.cxx:2654
 TF1.cxx:2655
 TF1.cxx:2656
 TF1.cxx:2657
 TF1.cxx:2658
 TF1.cxx:2659
 TF1.cxx:2660
 TF1.cxx:2661
 TF1.cxx:2662
 TF1.cxx:2663
 TF1.cxx:2664
 TF1.cxx:2665
 TF1.cxx:2666
 TF1.cxx:2667
 TF1.cxx:2668
 TF1.cxx:2669
 TF1.cxx:2670
 TF1.cxx:2671
 TF1.cxx:2672
 TF1.cxx:2673
 TF1.cxx:2674
 TF1.cxx:2675
 TF1.cxx:2676
 TF1.cxx:2677
 TF1.cxx:2678
 TF1.cxx:2679
 TF1.cxx:2680
 TF1.cxx:2681
 TF1.cxx:2682
 TF1.cxx:2683
 TF1.cxx:2684
 TF1.cxx:2685
 TF1.cxx:2686
 TF1.cxx:2687
 TF1.cxx:2688
 TF1.cxx:2689
 TF1.cxx:2690
 TF1.cxx:2691
 TF1.cxx:2692
 TF1.cxx:2693
 TF1.cxx:2694
 TF1.cxx:2695
 TF1.cxx:2696
 TF1.cxx:2697
 TF1.cxx:2698
 TF1.cxx:2699
 TF1.cxx:2700
 TF1.cxx:2701
 TF1.cxx:2702
 TF1.cxx:2703
 TF1.cxx:2704
 TF1.cxx:2705
 TF1.cxx:2706
 TF1.cxx:2707
 TF1.cxx:2708
 TF1.cxx:2709
 TF1.cxx:2710
 TF1.cxx:2711
 TF1.cxx:2712
 TF1.cxx:2713
 TF1.cxx:2714
 TF1.cxx:2715
 TF1.cxx:2716
 TF1.cxx:2717
 TF1.cxx:2718
 TF1.cxx:2719
 TF1.cxx:2720
 TF1.cxx:2721
 TF1.cxx:2722
 TF1.cxx:2723
 TF1.cxx:2724
 TF1.cxx:2725
 TF1.cxx:2726
 TF1.cxx:2727
 TF1.cxx:2728
 TF1.cxx:2729
 TF1.cxx:2730
 TF1.cxx:2731
 TF1.cxx:2732
 TF1.cxx:2733
 TF1.cxx:2734
 TF1.cxx:2735
 TF1.cxx:2736
 TF1.cxx:2737
 TF1.cxx:2738
 TF1.cxx:2739
 TF1.cxx:2740
 TF1.cxx:2741
 TF1.cxx:2742
 TF1.cxx:2743
 TF1.cxx:2744
 TF1.cxx:2745
 TF1.cxx:2746
 TF1.cxx:2747
 TF1.cxx:2748
 TF1.cxx:2749
 TF1.cxx:2750
 TF1.cxx:2751
 TF1.cxx:2752
 TF1.cxx:2753
 TF1.cxx:2754
 TF1.cxx:2755
 TF1.cxx:2756
 TF1.cxx:2757
 TF1.cxx:2758
 TF1.cxx:2759
 TF1.cxx:2760
 TF1.cxx:2761
 TF1.cxx:2762
 TF1.cxx:2763
 TF1.cxx:2764
 TF1.cxx:2765
 TF1.cxx:2766
 TF1.cxx:2767
 TF1.cxx:2768
 TF1.cxx:2769
 TF1.cxx:2770
 TF1.cxx:2771
 TF1.cxx:2772
 TF1.cxx:2773
 TF1.cxx:2774
 TF1.cxx:2775
 TF1.cxx:2776
 TF1.cxx:2777
 TF1.cxx:2778
 TF1.cxx:2779
 TF1.cxx:2780
 TF1.cxx:2781
 TF1.cxx:2782
 TF1.cxx:2783
 TF1.cxx:2784
 TF1.cxx:2785
 TF1.cxx:2786
 TF1.cxx:2787
 TF1.cxx:2788
 TF1.cxx:2789
 TF1.cxx:2790
 TF1.cxx:2791
 TF1.cxx:2792
 TF1.cxx:2793
 TF1.cxx:2794
 TF1.cxx:2795
 TF1.cxx:2796
 TF1.cxx:2797
 TF1.cxx:2798
 TF1.cxx:2799
 TF1.cxx:2800
 TF1.cxx:2801
 TF1.cxx:2802
 TF1.cxx:2803
 TF1.cxx:2804
 TF1.cxx:2805
 TF1.cxx:2806
 TF1.cxx:2807
 TF1.cxx:2808
 TF1.cxx:2809
 TF1.cxx:2810
 TF1.cxx:2811
 TF1.cxx:2812
 TF1.cxx:2813
 TF1.cxx:2814
 TF1.cxx:2815
 TF1.cxx:2816
 TF1.cxx:2817
 TF1.cxx:2818
 TF1.cxx:2819
 TF1.cxx:2820
 TF1.cxx:2821
 TF1.cxx:2822
 TF1.cxx:2823
 TF1.cxx:2824
 TF1.cxx:2825
 TF1.cxx:2826
 TF1.cxx:2827
 TF1.cxx:2828
 TF1.cxx:2829
 TF1.cxx:2830
 TF1.cxx:2831
 TF1.cxx:2832
 TF1.cxx:2833
 TF1.cxx:2834
 TF1.cxx:2835
 TF1.cxx:2836
 TF1.cxx:2837
 TF1.cxx:2838
 TF1.cxx:2839
 TF1.cxx:2840
 TF1.cxx:2841
 TF1.cxx:2842
 TF1.cxx:2843
 TF1.cxx:2844
 TF1.cxx:2845
 TF1.cxx:2846
 TF1.cxx:2847
 TF1.cxx:2848
 TF1.cxx:2849
 TF1.cxx:2850
 TF1.cxx:2851
 TF1.cxx:2852
 TF1.cxx:2853
 TF1.cxx:2854
 TF1.cxx:2855
 TF1.cxx:2856
 TF1.cxx:2857
 TF1.cxx:2858
 TF1.cxx:2859
 TF1.cxx:2860
 TF1.cxx:2861
 TF1.cxx:2862
 TF1.cxx:2863
 TF1.cxx:2864
 TF1.cxx:2865
 TF1.cxx:2866
 TF1.cxx:2867
 TF1.cxx:2868
 TF1.cxx:2869
 TF1.cxx:2870
 TF1.cxx:2871
 TF1.cxx:2872
 TF1.cxx:2873
 TF1.cxx:2874
 TF1.cxx:2875
 TF1.cxx:2876
 TF1.cxx:2877
 TF1.cxx:2878
 TF1.cxx:2879
 TF1.cxx:2880
 TF1.cxx:2881
 TF1.cxx:2882
 TF1.cxx:2883
 TF1.cxx:2884
 TF1.cxx:2885
 TF1.cxx:2886
 TF1.cxx:2887
 TF1.cxx:2888
 TF1.cxx:2889
 TF1.cxx:2890
 TF1.cxx:2891
 TF1.cxx:2892
 TF1.cxx:2893
 TF1.cxx:2894
 TF1.cxx:2895
 TF1.cxx:2896
 TF1.cxx:2897
 TF1.cxx:2898
 TF1.cxx:2899
 TF1.cxx:2900
 TF1.cxx:2901
 TF1.cxx:2902
 TF1.cxx:2903
 TF1.cxx:2904
 TF1.cxx:2905
 TF1.cxx:2906
 TF1.cxx:2907
 TF1.cxx:2908
 TF1.cxx:2909
 TF1.cxx:2910
 TF1.cxx:2911
 TF1.cxx:2912
 TF1.cxx:2913
 TF1.cxx:2914
 TF1.cxx:2915
 TF1.cxx:2916
 TF1.cxx:2917
 TF1.cxx:2918
 TF1.cxx:2919
 TF1.cxx:2920
 TF1.cxx:2921
 TF1.cxx:2922
 TF1.cxx:2923
 TF1.cxx:2924
 TF1.cxx:2925
 TF1.cxx:2926
 TF1.cxx:2927
 TF1.cxx:2928
 TF1.cxx:2929
 TF1.cxx:2930
 TF1.cxx:2931
 TF1.cxx:2932
 TF1.cxx:2933
 TF1.cxx:2934
 TF1.cxx:2935
 TF1.cxx:2936
 TF1.cxx:2937
 TF1.cxx:2938
 TF1.cxx:2939
 TF1.cxx:2940
 TF1.cxx:2941
 TF1.cxx:2942
 TF1.cxx:2943
 TF1.cxx:2944
 TF1.cxx:2945
 TF1.cxx:2946
 TF1.cxx:2947
 TF1.cxx:2948
 TF1.cxx:2949
 TF1.cxx:2950
 TF1.cxx:2951
 TF1.cxx:2952
 TF1.cxx:2953
 TF1.cxx:2954
 TF1.cxx:2955
 TF1.cxx:2956
 TF1.cxx:2957
 TF1.cxx:2958
 TF1.cxx:2959
 TF1.cxx:2960
 TF1.cxx:2961
 TF1.cxx:2962
 TF1.cxx:2963
 TF1.cxx:2964
 TF1.cxx:2965
 TF1.cxx:2966
 TF1.cxx:2967
 TF1.cxx:2968
 TF1.cxx:2969
 TF1.cxx:2970
 TF1.cxx:2971
 TF1.cxx:2972
 TF1.cxx:2973
 TF1.cxx:2974
 TF1.cxx:2975
 TF1.cxx:2976
 TF1.cxx:2977
 TF1.cxx:2978
 TF1.cxx:2979
 TF1.cxx:2980
 TF1.cxx:2981
 TF1.cxx:2982
 TF1.cxx:2983
 TF1.cxx:2984
 TF1.cxx:2985
 TF1.cxx:2986
 TF1.cxx:2987
 TF1.cxx:2988
 TF1.cxx:2989
 TF1.cxx:2990
 TF1.cxx:2991
 TF1.cxx:2992
 TF1.cxx:2993
 TF1.cxx:2994
 TF1.cxx:2995
 TF1.cxx:2996
 TF1.cxx:2997
 TF1.cxx:2998
 TF1.cxx:2999
 TF1.cxx:3000
 TF1.cxx:3001
 TF1.cxx:3002
 TF1.cxx:3003
 TF1.cxx:3004
 TF1.cxx:3005
 TF1.cxx:3006
 TF1.cxx:3007
 TF1.cxx:3008
 TF1.cxx:3009
 TF1.cxx:3010
 TF1.cxx:3011
 TF1.cxx:3012
 TF1.cxx:3013
 TF1.cxx:3014
 TF1.cxx:3015
 TF1.cxx:3016
 TF1.cxx:3017
 TF1.cxx:3018
 TF1.cxx:3019
 TF1.cxx:3020
 TF1.cxx:3021
 TF1.cxx:3022
 TF1.cxx:3023
 TF1.cxx:3024
 TF1.cxx:3025
 TF1.cxx:3026
 TF1.cxx:3027
 TF1.cxx:3028
 TF1.cxx:3029
 TF1.cxx:3030
 TF1.cxx:3031
 TF1.cxx:3032
 TF1.cxx:3033
 TF1.cxx:3034
 TF1.cxx:3035
 TF1.cxx:3036
 TF1.cxx:3037
 TF1.cxx:3038
 TF1.cxx:3039
 TF1.cxx:3040
 TF1.cxx:3041
 TF1.cxx:3042
 TF1.cxx:3043
 TF1.cxx:3044
 TF1.cxx:3045
 TF1.cxx:3046
 TF1.cxx:3047
 TF1.cxx:3048
 TF1.cxx:3049
 TF1.cxx:3050
 TF1.cxx:3051
 TF1.cxx:3052
 TF1.cxx:3053
 TF1.cxx:3054
 TF1.cxx:3055
 TF1.cxx:3056
 TF1.cxx:3057
 TF1.cxx:3058
 TF1.cxx:3059
 TF1.cxx:3060
 TF1.cxx:3061
 TF1.cxx:3062
 TF1.cxx:3063
 TF1.cxx:3064
 TF1.cxx:3065
 TF1.cxx:3066
 TF1.cxx:3067
 TF1.cxx:3068
 TF1.cxx:3069
 TF1.cxx:3070
 TF1.cxx:3071
 TF1.cxx:3072
 TF1.cxx:3073
 TF1.cxx:3074
 TF1.cxx:3075
 TF1.cxx:3076
 TF1.cxx:3077
 TF1.cxx:3078
 TF1.cxx:3079
 TF1.cxx:3080
 TF1.cxx:3081
 TF1.cxx:3082
 TF1.cxx:3083
 TF1.cxx:3084
 TF1.cxx:3085
 TF1.cxx:3086
 TF1.cxx:3087
 TF1.cxx:3088
 TF1.cxx:3089
 TF1.cxx:3090
 TF1.cxx:3091
 TF1.cxx:3092
 TF1.cxx:3093
 TF1.cxx:3094
 TF1.cxx:3095
 TF1.cxx:3096
 TF1.cxx:3097
 TF1.cxx:3098
 TF1.cxx:3099
 TF1.cxx:3100
 TF1.cxx:3101
 TF1.cxx:3102
 TF1.cxx:3103
 TF1.cxx:3104
 TF1.cxx:3105
 TF1.cxx:3106
 TF1.cxx:3107
 TF1.cxx:3108
 TF1.cxx:3109
 TF1.cxx:3110
 TF1.cxx:3111
 TF1.cxx:3112
 TF1.cxx:3113
 TF1.cxx:3114
 TF1.cxx:3115
 TF1.cxx:3116
 TF1.cxx:3117
 TF1.cxx:3118
 TF1.cxx:3119
 TF1.cxx:3120
 TF1.cxx:3121
 TF1.cxx:3122
 TF1.cxx:3123
 TF1.cxx:3124
 TF1.cxx:3125
 TF1.cxx:3126
 TF1.cxx:3127
 TF1.cxx:3128
 TF1.cxx:3129
 TF1.cxx:3130
 TF1.cxx:3131
 TF1.cxx:3132
 TF1.cxx:3133
 TF1.cxx:3134
 TF1.cxx:3135
 TF1.cxx:3136
 TF1.cxx:3137
 TF1.cxx:3138
 TF1.cxx:3139
 TF1.cxx:3140
 TF1.cxx:3141
 TF1.cxx:3142
 TF1.cxx:3143
 TF1.cxx:3144
 TF1.cxx:3145
 TF1.cxx:3146
 TF1.cxx:3147
 TF1.cxx:3148
 TF1.cxx:3149
 TF1.cxx:3150
 TF1.cxx:3151
 TF1.cxx:3152
 TF1.cxx:3153
 TF1.cxx:3154
 TF1.cxx:3155
 TF1.cxx:3156
 TF1.cxx:3157
 TF1.cxx:3158
 TF1.cxx:3159
 TF1.cxx:3160
 TF1.cxx:3161
 TF1.cxx:3162
 TF1.cxx:3163
 TF1.cxx:3164
 TF1.cxx:3165
 TF1.cxx:3166
 TF1.cxx:3167
 TF1.cxx:3168
 TF1.cxx:3169
 TF1.cxx:3170
 TF1.cxx:3171
 TF1.cxx:3172
 TF1.cxx:3173
 TF1.cxx:3174
 TF1.cxx:3175
 TF1.cxx:3176
 TF1.cxx:3177
 TF1.cxx:3178
 TF1.cxx:3179
 TF1.cxx:3180
 TF1.cxx:3181
 TF1.cxx:3182
 TF1.cxx:3183
 TF1.cxx:3184
 TF1.cxx:3185
 TF1.cxx:3186
 TF1.cxx:3187
 TF1.cxx:3188
 TF1.cxx:3189
 TF1.cxx:3190
 TF1.cxx:3191
 TF1.cxx:3192
 TF1.cxx:3193
 TF1.cxx:3194
 TF1.cxx:3195
 TF1.cxx:3196
 TF1.cxx:3197
 TF1.cxx:3198
 TF1.cxx:3199
 TF1.cxx:3200
 TF1.cxx:3201
 TF1.cxx:3202
 TF1.cxx:3203
 TF1.cxx:3204
 TF1.cxx:3205
 TF1.cxx:3206
 TF1.cxx:3207
 TF1.cxx:3208
 TF1.cxx:3209
 TF1.cxx:3210
 TF1.cxx:3211
 TF1.cxx:3212
 TF1.cxx:3213
 TF1.cxx:3214
 TF1.cxx:3215
 TF1.cxx:3216
 TF1.cxx:3217
 TF1.cxx:3218
 TF1.cxx:3219
 TF1.cxx:3220
 TF1.cxx:3221
 TF1.cxx:3222
 TF1.cxx:3223
 TF1.cxx:3224
 TF1.cxx:3225
 TF1.cxx:3226
 TF1.cxx:3227
 TF1.cxx:3228
 TF1.cxx:3229
 TF1.cxx:3230
 TF1.cxx:3231
 TF1.cxx:3232
 TF1.cxx:3233
 TF1.cxx:3234
 TF1.cxx:3235
 TF1.cxx:3236
 TF1.cxx:3237
 TF1.cxx:3238
 TF1.cxx:3239
 TF1.cxx:3240
 TF1.cxx:3241
 TF1.cxx:3242
 TF1.cxx:3243
 TF1.cxx:3244
 TF1.cxx:3245
 TF1.cxx:3246
 TF1.cxx:3247
 TF1.cxx:3248
 TF1.cxx:3249
 TF1.cxx:3250
 TF1.cxx:3251
 TF1.cxx:3252
 TF1.cxx:3253
 TF1.cxx:3254
 TF1.cxx:3255
 TF1.cxx:3256
 TF1.cxx:3257
 TF1.cxx:3258
 TF1.cxx:3259
 TF1.cxx:3260
 TF1.cxx:3261
 TF1.cxx:3262
 TF1.cxx:3263
 TF1.cxx:3264
 TF1.cxx:3265
 TF1.cxx:3266
 TF1.cxx:3267
 TF1.cxx:3268
 TF1.cxx:3269
 TF1.cxx:3270
 TF1.cxx:3271
 TF1.cxx:3272
 TF1.cxx:3273
 TF1.cxx:3274
 TF1.cxx:3275
 TF1.cxx:3276
 TF1.cxx:3277
 TF1.cxx:3278
 TF1.cxx:3279
 TF1.cxx:3280
 TF1.cxx:3281
 TF1.cxx:3282
 TF1.cxx:3283
 TF1.cxx:3284
 TF1.cxx:3285
 TF1.cxx:3286
 TF1.cxx:3287
 TF1.cxx:3288
 TF1.cxx:3289
 TF1.cxx:3290
 TF1.cxx:3291
 TF1.cxx:3292
 TF1.cxx:3293
 TF1.cxx:3294
 TF1.cxx:3295
 TF1.cxx:3296
 TF1.cxx:3297
 TF1.cxx:3298
 TF1.cxx:3299
 TF1.cxx:3300
 TF1.cxx:3301
 TF1.cxx:3302
 TF1.cxx:3303
 TF1.cxx:3304
 TF1.cxx:3305
 TF1.cxx:3306
 TF1.cxx:3307
 TF1.cxx:3308
 TF1.cxx:3309
 TF1.cxx:3310
 TF1.cxx:3311
 TF1.cxx:3312
 TF1.cxx:3313
 TF1.cxx:3314
 TF1.cxx:3315
 TF1.cxx:3316
 TF1.cxx:3317
 TF1.cxx:3318
 TF1.cxx:3319
 TF1.cxx:3320
 TF1.cxx:3321
 TF1.cxx:3322
 TF1.cxx:3323
 TF1.cxx:3324
 TF1.cxx:3325
 TF1.cxx:3326
 TF1.cxx:3327
 TF1.cxx:3328
 TF1.cxx:3329
 TF1.cxx:3330
 TF1.cxx:3331
 TF1.cxx:3332
 TF1.cxx:3333
 TF1.cxx:3334
 TF1.cxx:3335
 TF1.cxx:3336
 TF1.cxx:3337
 TF1.cxx:3338
 TF1.cxx:3339
 TF1.cxx:3340
 TF1.cxx:3341
 TF1.cxx:3342
 TF1.cxx:3343
 TF1.cxx:3344
 TF1.cxx:3345
 TF1.cxx:3346
 TF1.cxx:3347
 TF1.cxx:3348
 TF1.cxx:3349
 TF1.cxx:3350
 TF1.cxx:3351
 TF1.cxx:3352
 TF1.cxx:3353
 TF1.cxx:3354
 TF1.cxx:3355
 TF1.cxx:3356
 TF1.cxx:3357
 TF1.cxx:3358
 TF1.cxx:3359
 TF1.cxx:3360
 TF1.cxx:3361
 TF1.cxx:3362
 TF1.cxx:3363
 TF1.cxx:3364
 TF1.cxx:3365
 TF1.cxx:3366
 TF1.cxx:3367
 TF1.cxx:3368
 TF1.cxx:3369
 TF1.cxx:3370
 TF1.cxx:3371
 TF1.cxx:3372
 TF1.cxx:3373
 TF1.cxx:3374
 TF1.cxx:3375
 TF1.cxx:3376
 TF1.cxx:3377
 TF1.cxx:3378
 TF1.cxx:3379
 TF1.cxx:3380
 TF1.cxx:3381
 TF1.cxx:3382
 TF1.cxx:3383
 TF1.cxx:3384
 TF1.cxx:3385
 TF1.cxx:3386