BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
ROOT::Minuit2::FumiliFCNBase Class Referenceabstract

Description

Extension of the FCNBase for the Fumili method. Fumili applies only to minimization problems used for fitting. The method is based on a linearization of the model function negleting second derivatives. User needs to provide the model function. The figure-of-merit describing the difference between the model function and the actual measurements has to be implemented by the user in a subclass of FumiliFCNBase. For an example see the FumiliChi2FCN and FumiliStandardChi2FCN classes.

Author
Andras Zsenei and Lorenzo Moneta, Creation date: 23 Aug 2004
See also
MINUIT Tutorial on function minimization, section 5
FumiliChi2FCN
FumiliStandardChi2FCN

Definition at line 47 of file FumiliFCNBase.h.

Inheritance diagram for ROOT::Minuit2::FumiliFCNBase:
[legend]
Collaboration diagram for ROOT::Minuit2::FumiliFCNBase:
[legend]

Public Member Functions

 FumiliFCNBase ()
 
 FumiliFCNBase (unsigned int npar)
 
virtual ~FumiliFCNBase ()
 
virtual unsigned int Dimension ()
 
virtual double ErrorDef () const
 
virtual void EvaluateAll (const std::vector< double > &par)=0
 
virtual const std::vector< double > & Gradient () const
 
virtual double Hessian (unsigned int row, unsigned int col) const
 
virtual double operator() (const std::vector< double > &x) const =0
 
virtual void SetErrorDef (double)
 
virtual double Up () const =0
 
virtual double Value () const
 

Protected Member Functions

std::vector< double > & Gradient ()
 
std::vector< double > & Hessian ()
 
virtual void InitAndReset (unsigned int npar)
 
void SetFCNValue (double value)
 

Private Attributes

std::vector< double > fGradient
 
std::vector< double > fHessian
 
unsigned int fNumberOfParameters
 
double fValue
 

Constructor & Destructor Documentation

◆ FumiliFCNBase() [1/2]

ROOT::Minuit2::FumiliFCNBase::FumiliFCNBase ( )
inline

Default Constructor. Need in this case to create when implementing EvaluateAll the Gradient and Hessian vectors with the right size

Definition at line 55 of file FumiliFCNBase.h.

55  :
57  fValue(0)
58  {}

◆ FumiliFCNBase() [2/2]

ROOT::Minuit2::FumiliFCNBase::FumiliFCNBase ( unsigned int  npar)
inline

Constructor which initializes the class with the function provided by the user for modeling the data.

Parameters
nparthe number of parameters

Definition at line 70 of file FumiliFCNBase.h.

70  :
71  fNumberOfParameters(npar),
72  fValue(0),
73  fGradient(std::vector<double>(npar)),
74  fHessian(std::vector<double>(static_cast<int>( 0.5*npar*(npar+1) )) )
75  {}
std::vector< double > fGradient
std::vector< double > fHessian

◆ ~FumiliFCNBase()

virtual ROOT::Minuit2::FumiliFCNBase::~FumiliFCNBase ( )
inlinevirtual

Definition at line 83 of file FumiliFCNBase.h.

83 {}

Member Function Documentation

◆ Dimension()

virtual unsigned int ROOT::Minuit2::FumiliFCNBase::Dimension ( )
inlinevirtual

return number of function variable (parameters) , i.e. function dimension

Definition at line 132 of file FumiliFCNBase.h.

132 { return fNumberOfParameters; }

References fNumberOfParameters.

◆ ErrorDef()

virtual double ROOT::Minuit2::FCNBase::ErrorDef ( ) const
inlinevirtualinherited

Error definition of the function. MINUIT defines Parameter errors as the change in Parameter Value required to change the function Value by up. Normally, for chisquared fits it is 1, and for negative log likelihood, its Value is 0.5. If the user wants instead the 2-sigma errors for chisquared fits, it becomes 4, as Chi2(x+n*sigma) = Chi2(x) + n*n.

Comment a little bit better with links!!!!!!!!!!!!!!!!!

Definition at line 93 of file FCNBase.h.

93 {return Up();}
virtual double Up() const =0

References ROOT::Minuit2::FCNBase::Up().

Here is the call graph for this function:

◆ EvaluateAll()

virtual void ROOT::Minuit2::FumiliFCNBase::EvaluateAll ( const std::vector< double > &  par)
pure virtual

Evaluate function Value, Gradient and Hessian using Fumili approximation, for values of parameters p The resul is cached inside and is return from the FumiliFCNBase::Value , FumiliFCNBase::Gradient and FumiliFCNBase::Hessian methods

Parameters
parvector of parameters

Implemented in ROOT::Minuit2::FumiliFCNAdapter< Function >, ROOT::Minuit2::FumiliStandardMaximumLikelihoodFCN, and ROOT::Minuit2::FumiliStandardChi2FCN.

◆ Gradient() [1/2]

std::vector<double>& ROOT::Minuit2::FumiliFCNBase::Gradient ( )
inlineprotected

Definition at line 149 of file FumiliFCNBase.h.

149 { return fGradient; }

References fGradient.

◆ Gradient() [2/2]

virtual const std::vector<double>& ROOT::Minuit2::FumiliFCNBase::Gradient ( ) const
inlinevirtual

Return cached Value of function Gradient estimated previously using the FumiliFCNBase::EvaluateAll method

Definition at line 112 of file FumiliFCNBase.h.

112 { return fGradient; }

References fGradient.

◆ Hessian() [1/2]

std::vector<double>& ROOT::Minuit2::FumiliFCNBase::Hessian ( )
inlineprotected

Definition at line 151 of file FumiliFCNBase.h.

151 { return fHessian; }

References fHessian.

◆ Hessian() [2/2]

virtual double ROOT::Minuit2::FumiliFCNBase::Hessian ( unsigned int  row,
unsigned int  col 
) const
inlinevirtual

Return Value of the i-th j-th element of the Hessian matrix estimated previously using the FumiliFCNBase::EvaluateAll method

Parameters
rowrow Index of the matrix
colcol Index of the matrix

Definition at line 120 of file FumiliFCNBase.h.

120  {
121  assert( row < fGradient.size() && col < fGradient.size() );
122  if(row > col)
123  return fHessian[col+row*(row+1)/2];
124  else
125  return fHessian[row+col*(col+1)/2];
126  }

References fGradient, and fHessian.

◆ InitAndReset()

virtual void ROOT::Minuit2::FumiliFCNBase::InitAndReset ( unsigned int  npar)
inlineprotectedvirtual

initialize and reset values of gradien and Hessian

Definition at line 140 of file FumiliFCNBase.h.

140  {
141  fNumberOfParameters = npar;
142  fGradient = std::vector<double>(npar);
143  fHessian = std::vector<double>(static_cast<int>( 0.5*npar*(npar+1) ));
144  }

References fGradient, fHessian, and fNumberOfParameters.

◆ operator()()

virtual double ROOT::Minuit2::FCNBase::operator() ( const std::vector< double > &  x) const
pure virtualinherited

The meaning of the vector of parameters is of course defined by the user, who uses the values of those parameters to calculate their function Value. The order and the position of these parameters is strictly the one specified by the user when supplying the starting values for minimization. The starting values must be specified by the user, either via an std::vector<double> or the MnUserParameters supplied as input to the MINUIT minimizers such as VariableMetricMinimizer or MnMigrad. Later values are determined by MINUIT as it searches for the Minimum or performs whatever analysis is requested by the user.

Parameters
parfunction parameters as defined by the user.
Returns
the Value of the function.
See also
MnUserParameters
VariableMetricMinimizer
MnMigrad

Implements ROOT::Minuit2::GenericFunction.

Implemented in ROOT::Minuit2::ParametricFunction, ROOT::Minuit2::FumiliFCNAdapter< Function >, ROOT::Minuit2::FCNGradAdapter< Function >, ROOT::Minuit2::FCNAdapter< Function >, ROOT::Minuit2::FumiliMaximumLikelihoodFCN, and ROOT::Minuit2::FumiliChi2FCN.

◆ SetErrorDef()

virtual void ROOT::Minuit2::FCNBase::SetErrorDef ( double  )
inlinevirtualinherited

add interface to set dynamically a new error definition Re-implement this function if needed.

Reimplemented in ROOT::Minuit2::FumiliFCNAdapter< Function >, and ROOT::Minuit2::FCNAdapter< Function >.

Definition at line 114 of file FCNBase.h.

114 {};

◆ SetFCNValue()

void ROOT::Minuit2::FumiliFCNBase::SetFCNValue ( double  value)
inlineprotected

Definition at line 147 of file FumiliFCNBase.h.

147 { fValue = value; }

References fValue.

◆ Up()

virtual double ROOT::Minuit2::FCNBase::Up ( ) const
pure virtualinherited

Error definition of the function. MINUIT defines Parameter errors as the change in Parameter Value required to change the function Value by up. Normally, for chisquared fits it is 1, and for negative log likelihood, its Value is 0.5. If the user wants instead the 2-sigma errors for chisquared fits, it becomes 4, as Chi2(x+n*sigma) = Chi2(x) + n*n.

Todo:
Comment a little bit better with links!!!!!!!!!!!!!!!!! Idem for ErrorDef()

Implemented in ROOT::Minuit2::FumiliMaximumLikelihoodFCN, ROOT::Minuit2::FumiliFCNAdapter< Function >, ROOT::Minuit2::FumiliChi2FCN, ROOT::Minuit2::FCNGradAdapter< Function >, and ROOT::Minuit2::FCNAdapter< Function >.

Referenced by ROOT::Minuit2::FCNBase::ErrorDef().

◆ Value()

virtual double ROOT::Minuit2::FumiliFCNBase::Value ( ) const
inlinevirtual

Return cached Value of objective function estimated previously using the FumiliFCNBase::EvaluateAll method

Definition at line 106 of file FumiliFCNBase.h.

106 { return fValue; }

References fValue.

Member Data Documentation

◆ fGradient

std::vector<double> ROOT::Minuit2::FumiliFCNBase::fGradient
private

Definition at line 160 of file FumiliFCNBase.h.

Referenced by Gradient(), Hessian(), and InitAndReset().

◆ fHessian

std::vector<double> ROOT::Minuit2::FumiliFCNBase::fHessian
private

Definition at line 161 of file FumiliFCNBase.h.

Referenced by Hessian(), and InitAndReset().

◆ fNumberOfParameters

unsigned int ROOT::Minuit2::FumiliFCNBase::fNumberOfParameters
private

Definition at line 158 of file FumiliFCNBase.h.

Referenced by Dimension(), and InitAndReset().

◆ fValue

double ROOT::Minuit2::FumiliFCNBase::fValue
private

Definition at line 159 of file FumiliFCNBase.h.

Referenced by SetFCNValue(), and Value().


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