BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
RootResidualFunction Class Reference

Minimizer function with access to single data element residuals, required by Fumili2 and GSLMultiMin minimizers. More...

Inheritance diagram for RootResidualFunction:
[legend]
Collaboration diagram for RootResidualFunction:
[legend]

Public Types

typedef ROOT::Math::BasicFitMethodFunction< ROOT::Math::IMultiGenFunction >::Type_t Type_t
 

Public Member Functions

 RootResidualFunction (scalar_function_t objective_fun, gradient_function_t gradient_fun, size_t npars, size_t ndatasize)
 Constructs RootResidualFunction. More...
 
ROOT::Math::IMultiGenFunction * Clone () const override
 
double DataElement (const double *pars, unsigned int index, double *gradients=0) const override
 Evaluation of single data element residual. Will be called by ROOT minimizer. More...
 
Type_t Type () const override
 

Private Member Functions

double DoEval (const double *pars) const override
 evaluation of chi2 More...
 

Private Attributes

size_t m_datasize
 
gradient_function_t m_gradient_fun
 User function to get residual and gradients. More...
 
size_t m_npars
 
scalar_function_t m_objective_fun
 User function to get value to minimizer. More...
 

Detailed Description

Minimizer function with access to single data element residuals, required by Fumili2 and GSLMultiMin minimizers.

Definition at line 37 of file RootResidualFunction.h.

Member Typedef Documentation

◆ Type_t

typedef ROOT::Math::BasicFitMethodFunction<ROOT::Math::IMultiGenFunction>::Type_t RootResidualFunction::Type_t

Definition at line 39 of file RootResidualFunction.h.

Constructor & Destructor Documentation

◆ RootResidualFunction()

RootResidualFunction::RootResidualFunction ( scalar_function_t  objective_fun,
gradient_function_t  gradient_fun,
size_t  npars,
size_t  ndatasize 
)

Constructs RootResidualFunction.

Definition at line 17 of file RootResidualFunction.cpp.

20  : ROOT::Math::FitMethodFunction(static_cast<int>(npars), static_cast<int>(ndatasize))
21  , m_objective_fun(objective_fun)
22  , m_gradient_fun(gradient_fun)
23  , m_npars(npars)
24  , m_datasize(ndatasize)
25 {
26 }
scalar_function_t m_objective_fun
User function to get value to minimizer.
gradient_function_t m_gradient_fun
User function to get residual and gradients.

Referenced by Clone().

Member Function Documentation

◆ Clone()

ROOT::Math::IMultiGenFunction * RootResidualFunction::Clone ( ) const
override

Definition at line 33 of file RootResidualFunction.cpp.

34 {
36 }
RootResidualFunction(scalar_function_t objective_fun, gradient_function_t gradient_fun, size_t npars, size_t ndatasize)
Constructs RootResidualFunction.

References RootResidualFunction(), m_datasize, m_gradient_fun, m_npars, and m_objective_fun.

Here is the call graph for this function:

◆ DataElement()

double RootResidualFunction::DataElement ( const double *  pars,
unsigned int  index,
double *  gradients = 0 
) const
override

Evaluation of single data element residual. Will be called by ROOT minimizer.

Returns residual value for given data element index.

Transform call of ancient pointer based function to safer gradient_function_t.

Parameters
parsarray of fit parameter values from the minimizer
indexindex of residual element
gradientsif not zero, then array where we have to put gradients
Returns
value of residual for given data element index

Definition at line 45 of file RootResidualFunction.cpp.

47 {
48  std::vector<double> par_values;
49  par_values.resize(m_npars, 0.0);
50  std::copy(pars, pars + m_npars, par_values.begin());
51 
52  std::vector<double> par_gradients;
53 
54  if (gradients)
55  par_gradients.resize(m_npars);
56 
57  // retrieving result from user function
58  double result = m_gradient_fun(par_values, index, par_gradients);
59 
60  // packing result back to minimizer's array
61  if (gradients)
62  for (size_t i = 0; i < m_npars; ++i)
63  gradients[i] = par_gradients[i];
64 
65  return result;
66 }

References m_gradient_fun, and m_npars.

◆ DoEval()

double RootResidualFunction::DoEval ( const double *  pars) const
overrideprivate

evaluation of chi2

Definition at line 68 of file RootResidualFunction.cpp.

69 {
70  std::vector<double> par_values;
71  par_values.resize(m_npars, 0.0);
72  std::copy(pars, pars + m_npars, par_values.begin());
73  return m_objective_fun(par_values);
74 }

References m_npars, and m_objective_fun.

◆ Type()

RootResidualFunction::Type_t RootResidualFunction::Type ( ) const
override

Definition at line 28 of file RootResidualFunction.cpp.

29 {
30  return ROOT::Math::FitMethodFunction::kLeastSquare;
31 }

Member Data Documentation

◆ m_datasize

size_t RootResidualFunction::m_datasize
private

Definition at line 60 of file RootResidualFunction.h.

Referenced by Clone().

◆ m_gradient_fun

gradient_function_t RootResidualFunction::m_gradient_fun
private

User function to get residual and gradients.

Definition at line 58 of file RootResidualFunction.h.

Referenced by Clone(), and DataElement().

◆ m_npars

size_t RootResidualFunction::m_npars
private

Definition at line 59 of file RootResidualFunction.h.

Referenced by Clone(), DataElement(), and DoEval().

◆ m_objective_fun

scalar_function_t RootResidualFunction::m_objective_fun
private

User function to get value to minimizer.

Definition at line 57 of file RootResidualFunction.h.

Referenced by Clone(), and DoEval().


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