24 #include "RConfigure.h" 55 for (
int i = 0; i < npar; ++i) {
67 if (&rhs ==
this)
return *
this;
123 void SetParNames(
const char *name0 =
"p0",
const char *name1 =
"p1",
const char *name2 =
"p2",
124 const char *name3 =
"p3",
const char *name4 =
"p4",
const char *name5 =
"p5",
125 const char *name6 =
"p6",
const char *name7 =
"p7",
const char *name8 =
"p8",
126 const char *name9 =
"p9",
const char *name10 =
"p10");
148 static void Build(
TF1 *f, Func func);
153 static void Build(
TF1 *f, Func *func);
162 template<
typename F,
typename T>
167 template<
typename F,
typename T>
172 template<
typename F,
typename T>
177 template<
typename F,
typename T>
184 template<
typename T,
typename F>
190 template<
typename T,
typename F>
191 auto GetTheRightOp(
T(
F::*opPtr)(
const T *,
const double *)
const) -> decltype(opPtr)
196 template<
typename T,
typename F>
202 template<
typename T,
typename F>
277 TString &formula,
int termStart,
int termEnd,
325 fType = std::is_same<T, double>::value ? TF1::EFType::kTemplScalar : TF1::EFType::kTemplVec;
356 template <
typename Func>
365 template <
typename Func>
381 template <
class PtrObj,
typename MemFn>
387 template <
class PtrObj,
typename MemFn>
601 template <
class PtrObj,
typename MemFn>
603 template <
typename Func>
637 if (
fFormula)
fFormula->
SetParameters(p0,
p1,
p2,
p3, p4, p5, p6, p7, p8, p9, p10);
638 else fParams->
SetParameters(p0,
p1,
p2,
p3, p4, p5, p6, p7, p8, p9, p10);
642 virtual void SetParNames(
const char *name0 =
"p0",
const char *name1 =
"p1",
const char *name2 =
"p2",
643 const char *name3 =
"p3",
const char *name4 =
"p4",
const char *name5 =
"p5",
644 const char *name6 =
"p6",
const char *name7 =
"p7",
const char *name8 =
"p8",
645 const char *name9 =
"p9",
const char *name10 =
"p10");
657 virtual void SetTitle(
const char *title =
"");
663 Warning(
"SetVectorized",
"Can only set vectorized flag on formula-based TF1");
694 #ifdef R__HAS_VECCORE 708 f->
fType = std::is_same<Fnc_t, double>::value? TF1::EFType::kTemplScalar : TF1::EFType::kTemplVec;
717 f->
fType = std::is_same<Fnc_t, double>::value? TF1::EFType::kTemplScalar : TF1::EFType::kTemplVec;
728 f->
fType = TF1::EFType::kFormula;
730 TString formulaExpression(formula);
756 if (
fType == EFType::kTemplVec ||
fType == EFType::kTemplScalar) {
758 }
else if (
fType == EFType::kFormula) {
781 assert(
fType == EFType::kTemplScalar ||
fType == EFType::kTemplVec);
791 #ifdef R__HAS_VECCORE 795 assert(
fType == EFType::kTemplVec);
796 std::vector<ROOT::Double_v> d(
fNdim);
799 for(
auto i=0; i<
fNdim; i++) {
804 res = ((TF1FunctorPointerImpl<ROOT::Double_v> *)
fFunctor)->fImpl(d.data(), params);
809 return vecCore::Get<ROOT::Double_v>(res, 0);
822 template <
typename Func>
826 fType = EFType::kPtrScalarFreeFcn;
829 template <
class PtrObj,
typename MemFn>
833 fType = EFType::kPtrScalarFreeFcn;
840 if (
fType == EFType::kTemplVec ||
fType == EFType::kTemplScalar) {
841 return GradientParTempl<T>(ipar,
x, eps);
843 return GradientParTempl<Double_t>(ipar, (
const Double_t *)
x, eps);
852 if (eps < 1e-10 || eps > 1) {
853 Warning(
"Derivative",
"parameter esp=%g out of allowed range[1e-10,1], reset to 0.01", eps);
864 std::vector<Double_t> parametersCopy;
866 parametersCopy.resize(
GetNpar());
867 std::copy(parameters, parameters +
GetNpar(), parametersCopy.begin());
868 parameters = parametersCopy.data();
872 T f1, f2, g1, g2, d0, d2;
875 if (al * bl != 0 && al >= bl) {
889 parameters[ipar] = par0 +
h;
891 parameters[ipar] = par0 -
h;
893 parameters[ipar] = par0 +
h / 2;
895 parameters[ipar] = par0 -
h / 2;
903 T grad = h2 * (4 * d2 - d0) / 3.;
906 parameters[ipar] = par0;
914 if (
fType == EFType::kTemplVec ||
fType == EFType::kTemplScalar) {
915 GradientParTempl<T>(
x, grad, eps);
923 if (eps < 1e-10 || eps > 1) {
924 Warning(
"Derivative",
"parameter esp=%g out of allowed range[1e-10,1], reset to 0.01", eps);
929 grad[ipar] = GradientParTempl<T>(ipar,
x, eps);
TF1(EFType functionType, const char *name, Double_t xmin, Double_t xmax, Int_t npar, Int_t ndim, EAddToList addToGlobList, TF1Parameters *params=nullptr, TF1FunctorPointer *functor=nullptr)
General constructor for TF1. Most of the other constructors delegate on it.
TF1(const char *name, std::function< T(const T *data, const Double_t *param)> &fcn, Double_t xmin=0, Double_t xmax=1, Int_t npar=0, Int_t ndim=1, EAddToList addToGlobList=EAddToList::kDefault)
virtual TString GetExpFormula(Option_t *option="") const
virtual void SetParameters(Double_t p0, Double_t p1, Double_t p2=0, Double_t p3=0, Double_t p4=0, Double_t p5=0, Double_t p6=0, Double_t p7=0, Double_t p8=0, Double_t p9=0, Double_t p10=0)
virtual Int_t GetQuantiles(Int_t nprobSum, Double_t *q, const Double_t *probSum)
Compute Quantiles for density distribution of this function.
TF1Parameters(Int_t npar)
UInt_t GetImplicitMTPoolSize()
Returns the size of the pool used for implicit multi-threading.
virtual Double_t GetMaximum(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
Returns the maximum value of the function.
virtual void AddParameter(const TString &name, Double_t value)
virtual void SetParameters(const Double_t *params)
virtual Double_t GetRandom()
Return a random number following this function shape.
Bool_t fNormalized
Pointer to MethodCall in case of interpreted function.
virtual Double_t operator()(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Param Functor class for Multidimensional functions.
virtual TFormula * GetFormula()
virtual Int_t GetNpx() const
virtual void SetNpx(Int_t npx=100)
Set the number of points used to draw the function.
virtual void ReleaseParameter(Int_t ipar)
Release parameter number ipar If used in a fit, the parameter can vary freely.
virtual Double_t GetMinimumX(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
Returns the X value corresponding to the minimum value of the function on the (xmin, xmax) interval.
static double p3(double t, double a, double b, double c, double d)
virtual void SetParName(Int_t ipar, const char *name)
Set name of parameter number ipar.
virtual void Copy(TObject &f1) const
Copy this F1 to a new F1.
Namespace for new ROOT classes and functions.
virtual void SetParNames(const char *name0="p0", const char *name1="p1", const char *name2="p2", const char *name3="p3", const char *name4="p4", const char *name5="p5", const char *name6="p6", const char *name7="p7", const char *name8="p8", const char *name9="p9", const char *name10="p10")
Set up to 10 parameter names.
ROOT::Math::ParamFunctorTempl< T > fImpl
virtual TF1 * DrawCopy(Option_t *option="") const
Draw a copy of this function with its current attributes.
static std::atomic< Bool_t > fgAbsValue
virtual Int_t GetNumberFreeParameters() const
Return the number of free parameters.
TF1(const char *name, const PtrObj &p, MemFn memFn, Double_t xmin, Double_t xmax, Int_t npar, const char *, const char *, EAddToList addToGlobList=EAddToList::kDefault)
TMethodCall * GetMethodCall() const
void DoInitialize(EAddToList addToGlobList)
Common initialization of the TF1.
virtual Double_t IntegralFast(Int_t num, Double_t *x, Double_t *w, Double_t a, Double_t b, Double_t *params=0, Double_t epsilon=1e-12)
Gauss-Legendre integral, see CalcGaussLegendreSamplingPoints.
static TF1 * GetCurrent()
Static function returning the current function being processed.
virtual Double_t GetMinimumStored() const
TObject * fParent
Array gamma.
virtual void SetRange(Double_t xmin, Double_t xmax)
Initialize the upper and lower bounds to draw the function.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
virtual void Save(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax)
Save values of function in array fSave.
virtual Double_t IntegralMultiple(Int_t n, const Double_t *a, const Double_t *b, Int_t maxpts, Double_t epsrel, Double_t epsabs, Double_t &relerr, Int_t &nfnevl, Int_t &ifail)
This function computes, to an attempted specified accuracy, the value of the integral.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
std::vector< std::string > fParNames
TAxis * GetXaxis() const
Get x axis of the function.
virtual void SetNumberFitPoints(Int_t npfits)
static Bool_t DefaultAddToGlobalList(Bool_t on=kTRUE)
Static method to add/avoid to add automatically functions to the global list (gROOT->GetListOfFunctio...
static Double_t DerivativeError()
Static function returning the error of the last call to the of Derivative's functions.
void SetParameter(const char *name, Double_t value)
virtual Double_t GetMaximumX(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
Returns the X value corresponding to the maximum value of the function.
virtual void Draw(Option_t *option="")
Draw this function with its current attributes.
virtual Double_t GetParError(Int_t ipar) const
Return value of parameter number ipar.
virtual Double_t Derivative2(Double_t x, Double_t *params=0, Double_t epsilon=0.001) const
Returns the second derivative of the function at point x, computed by Richardson's extrapolation meth...
void SetFunction(PtrObj &p, MemFn memFn)
Internal class used by TF1 for defining template specialization for different TF1 constructors...
void IntegrateForNormalization()
virtual void SetMinimum(Double_t minimum=-1111)
Set the minimum value along Y for this function In case the function is already drawn, set also the minimum in the helper histogram.
virtual Double_t Integral(Double_t a, Double_t b, Double_t epsrel=1.e-12)
IntegralOneDim or analytical integral.
virtual void SetNormalized(Bool_t flag)
virtual TObject * DrawIntegral(Option_t *option="al")
Draw integral of this function.
virtual Double_t Derivative3(Double_t x, Double_t *params=0, Double_t epsilon=0.001) const
Returns the third derivative of the function at point x, computed by Richardson's extrapolation metho...
static void SetCurrent(TF1 *f1)
Static function setting the current function.
TF1(const char *name, T(*fcn)(const T *, const Double_t *), Double_t xmin=0, Double_t xmax=1, Int_t npar=0, Int_t ndim=1, EAddToList addToGlobList=EAddToList::kDefault)
Constructor using a pointer to function.
Double_t GetParameter(Int_t iparam) const
virtual Double_t Derivative(Double_t x, Double_t *params=0, Double_t epsilon=0.001) const
Returns the first derivative of the function at point x, computed by Richardson's extrapolation metho...
TF1AbsComposition * fComposition_ptr
Pointer to composition (NSUM or CONV)
virtual Double_t GetProb() const
Return the fit probability.
TF1(const char *name, Func f, Double_t xmin, Double_t xmax, Int_t npar, const char *, EAddToList addToGlobList=EAddToList::kDefault)
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute distance from point px,py to a function.
virtual Int_t GetNDF() const
Return the number of degrees of freedom in the fit the fNDF parameter has been previously computed du...
TAxis * GetYaxis() const
Get y axis of the function.
virtual void SetParent(TObject *p=0)
virtual Double_t Moment(Double_t n, Double_t a, Double_t b, const Double_t *params=0, Double_t epsilon=0.000001)
Return nth moment of function between a and b.
TFormula * fFormula
Functor object to wrap any C++ callable object.
Fill Area Attributes class.
#define ClassDef(name, id)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
The TNamed class is the base class for all named ROOT classes.
const char * GetParName(Int_t iparam) const
virtual Double_t GetVariable(const TString &name)
virtual void GetParameters(Double_t *params)
virtual void DrawF1(Double_t xmin, Double_t xmax, Option_t *option="")
Draw function between xmin and xmax.
bool CheckIndex(Int_t i) const
static double p2(double t, double a, double b, double c)
TF1()
TF1 default constructor.
void SetParameters(const Double_t *params)
virtual Double_t IntegralMultiple(Int_t n, const Double_t *a, const Double_t *b, Int_t, Int_t maxpts, Double_t epsrel, Double_t &relerr, Int_t &nfnevl, Int_t &ifail)
void function(const Char_t *name_, T fun, const Char_t *docstring=0)
virtual Int_t GetNdim() const
Method or function calling interface.
virtual Double_t GetMaximumStored() const
int TermCoeffLength(TString &term)
TF1Parameters & operator=(const TF1Parameters &rhs)
std::vector< Double_t > fIntegral
virtual Double_t GradientPar(Int_t ipar, const Double_t *x, Double_t eps=0.01)
Compute the gradient (derivative) wrt a parameter ipar.
virtual const char * GetParName(Int_t ipar) const
Using a TBrowser one can browse all ROOT objects.
TF1(const char *name, Func f, Double_t xmin, Double_t xmax, Int_t npar, Int_t ndim=1, EAddToList addToGlobList=EAddToList::kDefault)
virtual void SetChisquare(Double_t chi2)
virtual void SetParLimits(Int_t ipar, Double_t parmin, Double_t parmax)
Set limits for parameter ipar.
static Bool_t fgRejectPoint
std::vector< Double_t > fParameters
TH1 * fHistogram
Parent object hooking this function (if one)
virtual const Double_t * GetParErrors() const
virtual Double_t GetMinimum(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
Returns the minimum value of the function on the (xmin, xmax) interval.
virtual Bool_t IsValid() const
Return kTRUE if the function is valid.
Class to manage histogram axis.
virtual Int_t GetNumberFitPoints() const
virtual void SetParError(Int_t ipar, Double_t error)
Set error for parameter number ipar.
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Redefines TObject::GetObjectInfo.
virtual const TObject * GetLinearPart(Int_t i) const
std::unique_ptr< TF1AbsComposition > fComposition
virtual void FixParameter(Int_t ipar, Double_t value)
Fix the value of a parameter The specified value will be used in a fit operation. ...
virtual Bool_t IsLinear() const
Double_t GetParameter(const char *name) const
virtual const TFormula * GetFormula() const
static void RejectPoint(Bool_t reject=kTRUE)
Static function to set the global flag to reject points the fgRejectPoint global flag is tested by al...
static void InitStandardFunctions()
Create the basic function objects.
static double p1(double t, double a, double b)
const std::vector< double > & ParamsVec() const
virtual Double_t GetParameter(const TString &name) const
auto GetTheRightOp(T(F::*opPtr)(const T *, const double *)) -> decltype(opPtr)
virtual void Update()
Called by functions such as SetRange, SetNpx, SetParameters to force the deletion of the associated h...
virtual ~TF1()
TF1 default destructor.
virtual Double_t GetXmin() const
virtual void SetParameter(const TString &name, Double_t value)
virtual TH1 * DoCreateHistogram(Double_t xmin, Double_t xmax, Bool_t recreate=kFALSE)
Create histogram with bin content equal to function value computed at the bin center This histogram w...
void SetParameter(Int_t iparam, Double_t value)
virtual Double_t Mean(Double_t a, Double_t b, const Double_t *params=0, Double_t epsilon=0.000001)
void DefineNSUMTerm(TObjArray *newFuncs, TObjArray *coeffNames, TString &fullFormula, TString &formula, int termStart, int termEnd, Double_t xmin, Double_t xmax)
Helper functions for NSUM parsing.
static void CalcGaussLegendreSamplingPoints(Int_t num, Double_t *x, Double_t *w, Double_t eps=3.0e-11)
Type safe interface (static method) The number of sampling points are taken from the TGraph...
TF1FunctorPointerImpl(const ROOT::Math::ParamFunctorTempl< T > &func)
virtual void SetMaximum(Double_t maximum=-1111)
Set the maximum value along Y for this function In case the function is already drawn, set also the maximum in the helper histogram.
virtual Bool_t IsEvalNormalized() const
virtual void SetTitle(const char *title="")
Set function title if title has the form "fffffff;xxxx;yyyy", it is assumed that the function title i...
TF1(const char *name, const PtrObj &p, MemFn memFn, Double_t xmin, Double_t xmax, Int_t npar, Int_t ndim=1, EAddToList addToGlobList=EAddToList::kDefault)
Double_t GetChisquare() const
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Evaluate this function.
class containg the result of the fit and all the related information (fitted parameter values...
T EvalParTempl(const T *data, const Double_t *params=0)
Eval for vectorized functions.
std::vector< Double_t > fSave
Ssiz_t Last(char c) const
Find last occurrence of a character c.
std::vector< Double_t > fParErrors
TFitResultPtr Fit(FitObject *h1, TF1 *f1, Foption_t &option, const ROOT::Math::MinimizerOptions &moption, const char *goption, ROOT::Fit::DataRange &range)
void SetParName(Int_t iparam, const char *name)
TF1FunctorPointer * fFunctor
Int_t GetParNumber(const char *name) const
Returns the parameter number given a name not very efficient but list of parameters is typically smal...
std::vector< Double_t > fGamma
Array beta. is approximated by x = alpha +beta*r *gamma*r**2.
virtual Double_t Variance(Double_t a, Double_t b, const Double_t *params=0, Double_t epsilon=0.000001)
virtual Double_t GetX(Double_t y, Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
Returns the X value corresponding to the function value fy for (xmin<x<xmax).
virtual Double_t GetXmax() const
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save primitive as a C++ statement(s) on output stream out.
std::vector< Double_t > fAlpha
Integral of function binned on fNpx bins.
Namespace for new Math classes and functions.
virtual void InitArgs(const Double_t *x, const Double_t *params)
Initialize parameters addresses.
std::vector< Double_t > fBeta
Array alpha. for each bin in x the deconvolution r of fIntegral.
void SetParNames(const char *name0="p0", const char *name1="p1", const char *name2="p2", const char *name3="p3", const char *name4="p4", const char *name5="p5", const char *name6="p6", const char *name7="p7", const char *name8="p8", const char *name9="p9", const char *name10="p10")
Set parameter names.
TObject * GetParent() const
virtual Double_t GetSave(const Double_t *x)
Get value corresponding to X in array of fSave values.
Mother of all ROOT objects.
you should not use this method at all Int_t Int_t z
virtual Bool_t IsInside(const Double_t *x) const
return kTRUE if the point is inside the function range
TMethodCall * fMethodCall
Pointer to histogram used for visualisation.
virtual TH1 * CreateHistogram()
virtual Int_t GetNpar() const
virtual Double_t IntegralOneDim(Double_t a, Double_t b, Double_t epsrel, Double_t epsabs, Double_t &err)
Return Integral of function between a and b using the given parameter values and relative and absolut...
virtual void GetParLimits(Int_t ipar, Double_t &parmin, Double_t &parmax) const
Return limits for parameter ipar.
virtual void SetVectorized(Bool_t vectorized)
static void Build(TF1 *f, Func func)
static Bool_t RejectedPoint()
See TF1::RejectPoint above.
virtual Double_t GetMinMaxNDim(Double_t *x, Bool_t findmax, Double_t epsilon=0, Int_t maxiter=0) const
Find the minimum of a function of whatever dimension.
virtual void SetParErrors(const Double_t *errors)
Set errors for all active parameters when calling this function, the array errors must have at least ...
virtual Double_t GetParameter(Int_t ipar) const
virtual void GetRange(Double_t *xmin, Double_t *xmax) const
Return range of a generic N-D function.
virtual Bool_t AddToGlobalList(Bool_t on=kTRUE)
Add to global list of functions (gROOT->GetListOfFunctions() ) return previous status (true if the fu...
virtual void SetSavedPoint(Int_t point, Double_t value)
Restore value of function saved at point.
virtual void SetFitResult(const ROOT::Fit::FitResult &result, const Int_t *indpar=0)
Set the result from the fit parameter values, errors, chi2, etc...
static void Build(TF1 *f, const char *formula)
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
const Double_t * GetParameters() const
static std::atomic< Bool_t > fgAddToGlobList
virtual void Print(Option_t *option="") const
Print TNamed name and title.
static void AbsValue(Bool_t reject=kTRUE)
Static function: set the fgAbsValue flag.
virtual void 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...
virtual Double_t * GetParameters() const
virtual Double_t IntegralError(Double_t a, Double_t b, const Double_t *params=0, const Double_t *covmat=0, Double_t epsilon=1.E-2)
Return Error on Integral of a parametric function between a and b due to the parameter uncertainties...
virtual TH1 * GetHistogram() const
Return a pointer to the histogram used to visualise the function.
TF1 & operator=(const TF1 &rhs)
Operator =.
virtual void SetParameter(Int_t param, Double_t value)
ParamFunctorTempl< double > ParamFunctor
T GradientParTempl(Int_t ipar, const T *x, Double_t eps=0.01)
std::vector< Double_t > fParMax
virtual Double_t CentralMoment(Double_t n, Double_t a, Double_t b, const Double_t *params=0, Double_t epsilon=0.000001)
Return nth central moment of function between a and b (i.e the n-th moment around the mean value) ...
virtual Double_t EvalPar(const Double_t *x, const Double_t *params=0)
Evaluate function with given coordinates and parameters.
virtual void Browse(TBrowser *b)
Browse.
virtual Int_t GetNumber() const
std::vector< Double_t > fParMin
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual Int_t GetParNumber(const char *name) const
TAxis * GetZaxis() const
Get z axis of the function. (In case this object is a TF2 or TF3)
virtual void Paint(Option_t *option="")
Paint this function with its current attributes.
virtual TObject * DrawDerivative(Option_t *option="al")
Draw derivative of this function.
TF1Parameters(const TF1Parameters &rhs)