BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
mumufit::ScalarFunctionAdapter Class Reference

Description

Converts user objective function to chi2 like function which ROOT expects.

More precisely, ROOT call to std::function<double(const double*)> will cause the call of user function std::function<double(std::vector<double>)>, where function input parameters will be current values fit parameters.

Definition at line 40 of file ScalarFunctionAdapter.h.

Inheritance diagram for mumufit::ScalarFunctionAdapter:
[legend]
Collaboration diagram for mumufit::ScalarFunctionAdapter:
[legend]

Public Member Functions

 ScalarFunctionAdapter (fcn_scalar_t func, Parameters parameters)
 
int numberOfCalls () const
 
int numberOfGradientCalls () const
 
const RootScalarFunctionrootObjectiveFunction ()
 

Protected Attributes

int m_number_of_calls
 
int m_number_of_gradient_calls
 

Private Attributes

fcn_scalar_t m_fcn
 
Parameters m_parameters
 
std::unique_ptr< RootScalarFunctionm_root_objective
 

Constructor & Destructor Documentation

◆ ScalarFunctionAdapter()

ScalarFunctionAdapter::ScalarFunctionAdapter ( fcn_scalar_t  func,
Parameters  parameters 
)

Definition at line 22 of file ScalarFunctionAdapter.cpp.

23  : m_fcn(std::move(func))
24  , m_parameters(std::move(parameters))
25 {
26 }

Member Function Documentation

◆ numberOfCalls()

int IFunctionAdapter::numberOfCalls ( ) const
inherited

Definition at line 27 of file IFunctionAdapter.cpp.

28 {
29  return m_number_of_calls;
30 }

References mumufit::IFunctionAdapter::m_number_of_calls.

◆ numberOfGradientCalls()

int IFunctionAdapter::numberOfGradientCalls ( ) const
inherited

◆ rootObjectiveFunction()

const RootScalarFunction * ScalarFunctionAdapter::rootObjectiveFunction ( )

Definition at line 28 of file ScalarFunctionAdapter.cpp.

29 {
30  root_scalar_t rootfun = [&](const double* pars) {
31  std::vector<double> vec;
32  vec.resize(m_parameters.size(), 0.0);
33  std::copy(pars, pars + m_parameters.size(), vec.begin());
36  return m_fcn(m_parameters);
37  };
38 
40  std::make_unique<RootScalarFunction>(rootfun, static_cast<int>(m_parameters.size()));
41  return m_root_objective.get();
42 }
std::function< double(const double *)> root_scalar_t
Definition: Types.h:36
void setValues(const std::vector< double > &values)
Definition: Parameters.cpp:64
size_t size() const
Definition: Parameters.cpp:51
std::unique_ptr< RootScalarFunction > m_root_objective

References m_fcn, mumufit::IFunctionAdapter::m_number_of_calls, m_parameters, m_root_objective, mumufit::Parameters::setValues(), and mumufit::Parameters::size().

Here is the call graph for this function:

Member Data Documentation

◆ m_fcn

fcn_scalar_t mumufit::ScalarFunctionAdapter::m_fcn
private

Definition at line 47 of file ScalarFunctionAdapter.h.

Referenced by rootObjectiveFunction().

◆ m_number_of_calls

int mumufit::IFunctionAdapter::m_number_of_calls
protectedinherited

◆ m_number_of_gradient_calls

int mumufit::IFunctionAdapter::m_number_of_gradient_calls
protectedinherited

◆ m_parameters

Parameters mumufit::ScalarFunctionAdapter::m_parameters
private

Definition at line 48 of file ScalarFunctionAdapter.h.

Referenced by rootObjectiveFunction().

◆ m_root_objective

std::unique_ptr<RootScalarFunction> mumufit::ScalarFunctionAdapter::m_root_objective
private

Definition at line 49 of file ScalarFunctionAdapter.h.

Referenced by rootObjectiveFunction().


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