13#ifndef ROOT_Math_WrappedMultiTF1
14#define ROOT_Math_WrappedMultiTF1
191 Error(
"DoParameterDerivative",
"The vectorized implementation of DoParameterDerivative does not support"
192 "general linear functions built in TFormula with ++");
205 return (
const_cast<TFormula *
>(df))->EvalPar(
x);
231 while (
fLinear && ip < fFunc->GetNpar()) {
246 fLinear(rhs.fLinear),
247 fPolynomial(rhs.fPolynomial),
248 fOwnFunc(rhs.fOwnFunc),
261 if (
this == &rhs)
return *
this;
280 fFunc->SetParameters(par);
282 double prec = this->GetDerivPrecision();
283 fFunc->GradientPar(
x, grad, prec);
285 unsigned int np = NPar();
286 for (
unsigned int i = 0; i < np; ++i)
287 grad[i] = DoParameterDerivative(
x, par, i);
297 fFunc->SetParameters(p);
298 double prec = this->GetDerivPrecision();
299 return fFunc->GradientPar(ipar,
x, prec);
304 if (ipar == 0)
return 1.0;
306 return vecCore::math::Pow(
x[0],
static_cast<T>(ipar));
308 return std::pow(
x[0],
static_cast<int>(ipar));
330 const TF1 *funcToCopy = (
f) ?
f : fFunc;
void Error(const char *location, const char *msgfmt,...)
double pow(double, double)
Documentation for the abstract class IBaseFunctionMultiDim.
Interface (abstract class) for parametric gradient multi-dimensional functions providing in addition ...
Class to Wrap a ROOT Function class (like TF1) in a IParamMultiFunction interface of multi-dimensions...
void SetParameters(const double *p)
set parameter values (only the cached one in this class,leave unchanges those of TF1)
void ParameterGradient(const T *x, const double *par, T *grad) const
Evaluate the all the derivatives (gradient vector) of the function with respect to the parameters at ...
unsigned int NDim() const
Retrieve the dimension of the function.
T DoParameterDerivative(const T *x, const double *p, unsigned int ipar) const
evaluate the partial derivative with respect to the parameter
void SetAndCopyFunction(const TF1 *f=0)
method to set a new function pointer and copy it inside.
unsigned int NPar() const
return number of parameters
static void SetDerivPrecision(double eps)
precision value used for calculating the derivative step-size h = eps * |x|.
const double * Parameters() const
get the parameter values (return values from TF1)
static double GetDerivPrecision()
get precision value used for calculating the derivative step-size
ROOT::Math::IParametricGradFunctionMultiDimTempl< T > BaseParamFunc
WrappedMultiTF1Templ & operator=(const WrappedMultiTF1Templ< T > &rhs)
Assignment operator.
T DoEval(const T *x) const
evaluate function using the cached parameter values (of TF1) re-implement for better efficiency
T DoEvalPar(const T *x, const double *p) const
evaluate function passing coordinates x and vector of parameters
std::string ParameterName(unsigned int i) const
return parameter name (from TF1)
const TF1 * GetFunction() const
method to retrieve the internal function pointer
ROOT::Math::IParametricFunctionMultiDimTempl< T >::BaseFunc BaseFunc
T DoEvalVec(const T *x) const
evaluate function using the cached parameter values (of TF1) re-implement for better efficiency
WrappedMultiTF1Templ(TF1 &f, unsigned int dim=0)
constructor from a function pointer to a TF1 If dim = 0 dimension is taken from TF1::GetNdim().
IMultiGenFunctionTempl< T > * Clone() const
Clone the wrapper but not the original function.
~WrappedMultiTF1Templ()
Destructor (no operations).
virtual Int_t GetNumber() const
virtual Int_t GetNpar() const
virtual Double_t * GetParameters() const
virtual Double_t EvalPar(const Double_t *x, const Double_t *params=0)
Evaluate function with given coordinates and parameters.
virtual const char * GetParName(Int_t ipar) const
virtual Bool_t IsLinear() const
virtual void SetParameters(const Double_t *params)
virtual Int_t GetNdim() const
virtual const TObject * GetLinearPart(Int_t i) const
Namespace for new Math classes and functions.
double DerivPrecision(double eps)
TF1 * CopyTF1Ptr(const TF1 *funcToCopy)
Namespace for new ROOT classes and functions.
Double_t SignalingNaN()
Returns a signaling NaN as defined by IEEE 754](http://en.wikipedia.org/wiki/NaN#Signaling_NaN)
static double DoParameterDerivative(const WrappedMultiTF1Templ< double > *wrappedFunc, const double *x, unsigned int ipar)
Auxiliar class to bypass the (provisional) lack of vectorization in TFormula::EvalPar.
static T DoParameterDerivative(const WrappedMultiTF1Templ< T > *, const T *, unsigned int)