BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc > Class Template Reference

Description

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
class ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >

Definition at line 129 of file FitUtil.h.

Collaboration diagram for ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >:
[legend]

Public Member Functions

 IntegralEvaluator (const ParamFunc &func, const double *p, bool useIntegral=true)
 
 ~IntegralEvaluator ()
 
double F1 (double x) const
 
double FN (const double *x) const
 
double Integral (const double *x1, const double *x2)
 
double operator() (const double *x1, const double *x2)
 
void SetFunction (const ParamFunc &func, const double *p=0)
 
void SetParameters (const double *p)
 

Private Member Functions

 IntegralEvaluator (const IntegralEvaluator &rhs)
 
template<class T >
double ExecFunc (T *f, const double *x, const double *p) const
 
IntegralEvaluatoroperator= (const IntegralEvaluator &rhs)
 

Private Attributes

unsigned int fDim
 
const ParamFunc * fFunc
 
ROOT::Math::IGenFunctionfFunc1Dim
 
ROOT::Math::IMultiGenFunctionfFuncNDim
 
ROOT::Math::IntegratorOneDim * fIg1Dim
 
ROOT::Math::IntegratorMultiDim * fIgNDim
 
const double * fParams
 

Constructor & Destructor Documentation

◆ IntegralEvaluator() [1/2]

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::IntegralEvaluator ( const ParamFunc &  func,
const double *  p,
bool  useIntegral = true 
)
inline

Definition at line 132 of file FitUtil.h.

133  : fDim(0), fParams(0), fFunc(0), fIg1Dim(0), fIgNDim(0), fFunc1Dim(0), fFuncNDim(0)
134  {
135  if (useIntegral) {
136  SetFunction(func, p);
137  }
138  }
void SetFunction(const ParamFunc &func, const double *p=0)
Definition: FitUtil.h:140
ROOT::Math::IGenFunction * fFunc1Dim
Definition: FitUtil.h:259
ROOT::Math::IntegratorMultiDim * fIgNDim
Definition: FitUtil.h:258
ROOT::Math::IntegratorOneDim * fIg1Dim
Definition: FitUtil.h:257
ROOT::Math::IMultiGenFunction * fFuncNDim
Definition: FitUtil.h:260

References ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::SetFunction().

Referenced by ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::SetFunction().

Here is the call graph for this function:

◆ ~IntegralEvaluator()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::~IntegralEvaluator ( )
inline

Definition at line 175 of file FitUtil.h.

176  {
177  if (fIg1Dim)
178  delete fIg1Dim;
179  if (fIgNDim)
180  delete fIgNDim;
181  if (fFunc1Dim)
182  delete fFunc1Dim;
183  if (fFuncNDim)
184  delete fFuncNDim;
185  // if (fFunc) delete fFunc;
186  }

References ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFunc1Dim, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFuncNDim, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fIg1Dim, and ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fIgNDim.

◆ IntegralEvaluator() [2/2]

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::IntegralEvaluator ( const IntegralEvaluator< ParamFunc > &  rhs)
private

Member Function Documentation

◆ ExecFunc()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
template<class T >
double ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::ExecFunc ( T *  f,
const double *  x,
const double *  p 
) const
inlineprivate

Definition at line 223 of file FitUtil.h.

224  {
225  return (*f)(x, p);
226  }

Referenced by ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::F1(), and ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::FN().

◆ F1()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
double ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::F1 ( double  x) const
inline

Definition at line 189 of file FitUtil.h.

190  {
191  double xx = x;
192  return ExecFunc(fFunc, &xx, fParams);
193  }
double ExecFunc(T *f, const double *x, const double *p) const
Definition: FitUtil.h:223

References ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::ExecFunc(), ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFunc, and ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fParams.

Referenced by ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::SetFunction().

Here is the call graph for this function:

◆ FN()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
double ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::FN ( const double *  x) const
inline

Definition at line 195 of file FitUtil.h.

195 { return ExecFunc(fFunc, x, fParams); }

References ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::ExecFunc(), ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFunc, and ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fParams.

Referenced by ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::SetFunction().

Here is the call graph for this function:

◆ Integral()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
double ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::Integral ( const double *  x1,
const double *  x2 
)
inline

Definition at line 197 of file FitUtil.h.

198  {
199  // return unormalized integral
200  return (fIg1Dim) ? fIg1Dim->Integral(*x1, *x2) : fIgNDim->Integral(x1, x2);
201  }

References ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fIg1Dim, and ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fIgNDim.

◆ operator()()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
double ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::operator() ( const double *  x1,
const double *  x2 
)
inline

Definition at line 203 of file FitUtil.h.

204  {
205  // return normalized integral, divided by bin volume (dx1*dx...*dxn)
206  if (fIg1Dim) {
207  double dV = *x2 - *x1;
208  return fIg1Dim->Integral(*x1, *x2) / dV;
209  } else if (fIgNDim) {
210  double dV = 1;
211  for (unsigned int i = 0; i < fDim; ++i)
212  dV *= (x2[i] - x1[i]);
213  return fIgNDim->Integral(x1, x2) / dV;
214  // std::cout << " do integral btw x " << x1[0] << " " << x2[0] << " y " << x1[1] << " "
215  // << x2[1] << " dV = " << dV << " result = " << result << std::endl; return result;
216  } else
217  assert(1.); // should never be here
218  return 0;
219  }

References ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fDim, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fIg1Dim, and ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fIgNDim.

◆ operator=()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
IntegralEvaluator& ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::operator= ( const IntegralEvaluator< ParamFunc > &  rhs)
private

◆ SetFunction()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
void ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::SetFunction ( const ParamFunc &  func,
const double *  p = 0 
)
inline

Definition at line 140 of file FitUtil.h.

141  {
142  // set the integrand function and create required wrapper
143  // to perform integral in (x) of a generic f(x,p)
144  fParams = p;
145  fDim = func.NDim();
146  // copy the function object to be able to modify the parameters
147  // fFunc = dynamic_cast<ROOT::Math::IParamMultiFunction *>( func.Clone() );
148  fFunc = &func;
149  assert(fFunc != 0);
150  // set parameters in function
151  // fFunc->SetParameters(p);
152  if (fDim == 1) {
153  fFunc1Dim =
155  *this, &IntegralEvaluator::F1);
156  fIg1Dim = new ROOT::Math::IntegratorOneDim();
157  // fIg1Dim->SetFunction( static_cast<const ROOT::Math::IMultiGenFunction & >(*fFunc),false);
158  fIg1Dim->SetFunction(static_cast<const ROOT::Math::IGenFunction &>(*fFunc1Dim));
159  } else if (fDim > 1) {
160  fFuncNDim =
162  const>(*this, &IntegralEvaluator::FN, fDim);
163  fIgNDim = new ROOT::Math::IntegratorMultiDim();
164  fIgNDim->SetFunction(*fFuncNDim);
165  } else
166  assert(fDim > 0);
167  }
IntegralEvaluator(const ParamFunc &func, const double *p, bool useIntegral=true)
Definition: FitUtil.h:132
double F1(double x) const
Definition: FitUtil.h:189
double FN(const double *x) const
Definition: FitUtil.h:195

References ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::IntegralEvaluator(), ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::F1(), ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fDim, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFunc, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFunc1Dim, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFuncNDim, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fIg1Dim, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fIgNDim, ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::FN(), and ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fParams.

Referenced by ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::IntegralEvaluator().

Here is the call graph for this function:

◆ SetParameters()

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
void ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::SetParameters ( const double *  p)
inline

Definition at line 169 of file FitUtil.h.

170  {
171  // copy just the pointer
172  fParams = p;
173  }

References ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fParams.

Member Data Documentation

◆ fDim

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
unsigned int ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fDim
private

◆ fFunc

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
const ParamFunc* ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFunc
private

◆ fFunc1Dim

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
ROOT::Math::IGenFunction* ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFunc1Dim
private

◆ fFuncNDim

template<class ParamFunc = ROOT::Math::IParamMultiFunctionTempl<double>>
ROOT::Math::IMultiGenFunction* ROOT::Fit::FitUtil::IntegralEvaluator< ParamFunc >::fFuncNDim
private

◆ fIg1Dim

◆ fIgNDim

◆ fParams


The documentation for this class was generated from the following file: