13 #ifndef ROOT_Math_MultiDimParamFunctionAdapter
14 #define ROOT_Math_MultiDimParamFunctionAdapter
43 class MultiDimParamFunctionAdapter :
public IParametricFunctionMultiDimTempl<double> {
47 typedef IParamMultiFunction::BaseFunc BaseFunc;
54 MultiDimParamFunctionAdapter(
const IParamFunction &f) :
57 fFunc =
dynamic_cast<IParamFunction *
>(f.Clone());
64 MultiDimParamFunctionAdapter(IParamFunction &f) :
73 MultiDimParamFunctionAdapter(
const MultiDimParamFunctionAdapter &rhs) :
75 IParamMultiFunction(),
80 fFunc =
dynamic_cast<IParamFunction *
>((rhs.fFunc)->Clone());
86 virtual ~MultiDimParamFunctionAdapter()
88 if (fOwn && fFunc != 0)
delete fFunc;
95 MultiDimParamFunctionAdapter &operator=(
const MultiDimParamFunctionAdapter &rhs)
99 if (fFunc)
delete fFunc;
100 fFunc =
dynamic_cast<IParamFunction *
>((rhs.fFunc)->Clone());
110 virtual BaseFunc *Clone()
const
112 return new MultiDimParamFunctionAdapter(*
this);
118 const double *Parameters()
const
120 return fFunc->Parameters();
123 void SetParameters(
const double *p)
125 fFunc->SetParameters(p);
128 unsigned int NPar()
const
130 return fFunc->NPar();
133 unsigned int NDim()
const
142 double DoEvalPar(
const double *x,
const double *p)
const
144 return (*fFunc)(*x, p);
151 IParamFunction *fFunc;
174 class MultiDimParamGradFunctionAdapter :
public IParamMultiGradFunction {
178 typedef IParamMultiGradFunction::BaseFunc BaseFunc;
185 MultiDimParamGradFunctionAdapter(
const IParamGradFunction &f) :
188 fFunc =
dynamic_cast<IParamGradFunction *
>(f.Clone());
195 MultiDimParamGradFunctionAdapter(IParamGradFunction &f) :
204 MultiDimParamGradFunctionAdapter(
const MultiDimParamGradFunctionAdapter &rhs) :
206 IParamMultiGradFunction(),
211 fFunc =
dynamic_cast<IParamGradFunction *
>((rhs.fFunc)->Clone());
217 virtual ~MultiDimParamGradFunctionAdapter()
219 if (fOwn && fFunc != 0)
delete fFunc;
226 MultiDimParamGradFunctionAdapter &operator=(
const MultiDimParamGradFunctionAdapter &rhs)
230 if (fFunc)
delete fFunc;
231 fFunc =
dynamic_cast<IParamGradFunction *
>((rhs.fFunc)->Clone());
241 virtual BaseFunc *Clone()
const
243 return new MultiDimParamGradFunctionAdapter(*
this);
249 const double *Parameters()
const
251 return fFunc->Parameters();
254 void SetParameters(
const double *p)
256 fFunc->SetParameters(p);
259 unsigned int NPar()
const
261 return fFunc->NPar();
264 unsigned int NDim()
const
273 void ParameterGradient(
const double *x,
const double *p,
double *grad)
const
275 fFunc->ParameterGradient(*x, p, grad);
283 double DoEvalPar(
const double *x,
const double *p)
const
285 return (*fFunc)(*x, p);
292 double DoParameterDerivative(
const double *x,
const double *p,
unsigned int ipar)
const
294 return fFunc->ParameterDerivative(*x, p, ipar);
300 IParamGradFunction *fFunc;