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::FumiliMaximumLikelihoodFCN 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. In this cased the function to be minimized is the sum of the logarithms of the model function for the different measurements times -1.

Author
Andras Zsenei and Lorenzo Moneta, Creation date: 3 Sep 2004
See also
MINUIT Tutorial on function minimization, section 5
FumiliStandardMaximumLikelihoodFCN
Todo:
Insert a nice latex formula...

Definition at line 51 of file FumiliMaximumLikelihoodFCN.h.

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

Public Member Functions

 FumiliMaximumLikelihoodFCN ()
 
virtual ~FumiliMaximumLikelihoodFCN ()
 
virtual unsigned int Dimension ()
 
virtual std::vector< double > Elements (const std::vector< double > &par) const =0
 
virtual double ErrorDef () const
 
virtual void EvaluateAll (const std::vector< double > &par)=0
 
virtual const std::vector< double > & GetMeasurement (int Index) const =0
 
virtual int GetNumberOfMeasurements () const =0
 
virtual const std::vector< double > & Gradient () const
 
virtual double Hessian (unsigned int row, unsigned int col) const
 
const ParametricFunctionModelFunction () const
 
double operator() (const std::vector< double > &par) const
 
virtual void SetErrorDef (double)
 
void SetModelFunction (const ParametricFunction &modelFCN)
 
virtual double Up () const
 
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
 
const ParametricFunctionfModelFunction
 
unsigned int fNumberOfParameters
 
double fValue
 

Constructor & Destructor Documentation

◆ FumiliMaximumLikelihoodFCN()

ROOT::Minuit2::FumiliMaximumLikelihoodFCN::FumiliMaximumLikelihoodFCN ( )
inline

Definition at line 55 of file FumiliMaximumLikelihoodFCN.h.

55 {}

◆ ~FumiliMaximumLikelihoodFCN()

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

Definition at line 57 of file FumiliMaximumLikelihoodFCN.h.

57 {}

Member Function Documentation

◆ Dimension()

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

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

Definition at line 132 of file FumiliFCNBase.h.

132 { return fNumberOfParameters; }

References ROOT::Minuit2::FumiliFCNBase::fNumberOfParameters.

◆ Elements()

virtual std::vector<double> ROOT::Minuit2::FumiliMaximumLikelihoodFCN::Elements ( const std::vector< double > &  par) const
pure virtual

Evaluates the model function for the different measurement points and the Parameter values supplied, calculates a figure-of-merit for each measurement and returns a vector containing the result of this evaluation.

Parameters
parvector of Parameter values to feed to the model function.
Returns
A vector containing the figures-of-merit for the model function evaluated for each set of measurements.

Implemented in ROOT::Minuit2::FumiliStandardMaximumLikelihoodFCN.

Referenced by operator()().

◆ 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 virtualinherited

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.

◆ GetMeasurement()

virtual const std::vector<double>& ROOT::Minuit2::FumiliMaximumLikelihoodFCN::GetMeasurement ( int  Index) const
pure virtual

Accessor to the parameters of a given measurement. For example in the case of a chi-square fit with a one-dimensional Gaussian, the Parameter characterizing the measurement will be the position. It is the Parameter that is feeded to the model function.

Parameters
IndexIndex of the measueremnt the parameters of which to return
Returns
A vector containing the values characterizing a measurement

Implemented in ROOT::Minuit2::FumiliStandardMaximumLikelihoodFCN.

◆ GetNumberOfMeasurements()

virtual int ROOT::Minuit2::FumiliMaximumLikelihoodFCN::GetNumberOfMeasurements ( ) const
pure virtual

Accessor to the number of measurements used for calculating the present figure of merit.

Returns
the number of measurements

Implemented in ROOT::Minuit2::FumiliStandardMaximumLikelihoodFCN.

◆ Gradient() [1/2]

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

Definition at line 149 of file FumiliFCNBase.h.

149 { return fGradient; }
std::vector< double > fGradient

References ROOT::Minuit2::FumiliFCNBase::fGradient.

◆ Gradient() [2/2]

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

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 ROOT::Minuit2::FumiliFCNBase::fGradient.

◆ Hessian() [1/2]

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

Definition at line 151 of file FumiliFCNBase.h.

151 { return fHessian; }
std::vector< double > fHessian

References ROOT::Minuit2::FumiliFCNBase::fHessian.

◆ Hessian() [2/2]

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

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 ROOT::Minuit2::FumiliFCNBase::fGradient, and ROOT::Minuit2::FumiliFCNBase::fHessian.

◆ InitAndReset()

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

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 ROOT::Minuit2::FumiliFCNBase::fGradient, ROOT::Minuit2::FumiliFCNBase::fHessian, and ROOT::Minuit2::FumiliFCNBase::fNumberOfParameters.

◆ ModelFunction()

const ParametricFunction* ROOT::Minuit2::FumiliMaximumLikelihoodFCN::ModelFunction ( ) const
inline

Returns the model function used for the data.

Returns
Returns a pointer to the model function.

Definition at line 80 of file FumiliMaximumLikelihoodFCN.h.

80 { return fModelFunction; }

References fModelFunction.

◆ operator()()

double ROOT::Minuit2::FumiliMaximumLikelihoodFCN::operator() ( const std::vector< double > &  par) const
inlinevirtual

Calculates the function for the maximum likelihood method. The user must implement in a class which inherits from FumiliChi2FCN the member function Elements() which will supply the Elements for the sum.

Parameters
parvector containing the Parameter values for the model function
Returns
The sum of the natural logarithm of the Elements multiplied by -1
See also
FumiliFCNBase::elements

Implements ROOT::Minuit2::FCNBase.

Definition at line 144 of file FumiliMaximumLikelihoodFCN.h.

144  {
145 
146  double sumoflogs = 0.0;
147  std::vector<double> vecElements = Elements(par);
148  unsigned int vecElementsSize = vecElements.size();
149 
150  for (unsigned int i = 0; i < vecElementsSize; ++i) {
151  double tmp = vecElements[i];
152  //for max likelihood probability have to be positive
153  assert(tmp >= 0);
154  sumoflogs -= ROOT::Math::Util::EvalLog(tmp);
155  //std::cout << " i " << tmp << " lik " << sumoflogs << std::endl;
156  }
157 
158 
159  return sumoflogs;
160  }
virtual std::vector< double > Elements(const std::vector< double > &par) const =0
T EvalLog(T x)
safe evaluation of log(x) with a protections against negative or zero argument to the log smooth line...
Definition: Util.h:56

References Elements(), and ROOT::Math::Util::EvalLog().

Here is the call graph for this function:

◆ 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)
inlineprotectedinherited

Definition at line 147 of file FumiliFCNBase.h.

147 { fValue = value; }

References ROOT::Minuit2::FumiliFCNBase::fValue.

◆ SetModelFunction()

void ROOT::Minuit2::FumiliMaximumLikelihoodFCN::SetModelFunction ( const ParametricFunction modelFCN)
inline

Sets the model function for the data (for example gaussian+linear for a peak)

Parameters
modelFunctiona reference to the model function.

Definition at line 68 of file FumiliMaximumLikelihoodFCN.h.

68 { fModelFunction = &modelFCN; }

References fModelFunction.

Referenced by ROOT::Minuit2::FumiliStandardMaximumLikelihoodFCN::FumiliStandardMaximumLikelihoodFCN().

◆ Up()

virtual double ROOT::Minuit2::FumiliMaximumLikelihoodFCN::Up ( ) const
inlinevirtual

!!!!!!!!!!!! to be commented

Implements ROOT::Minuit2::FCNBase.

Definition at line 170 of file FumiliMaximumLikelihoodFCN.h.

170 { return 0.5; }

◆ Value()

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

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 ROOT::Minuit2::FumiliFCNBase::fValue.

Member Data Documentation

◆ fGradient

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

◆ fHessian

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

◆ fModelFunction

const ParametricFunction* ROOT::Minuit2::FumiliMaximumLikelihoodFCN::fModelFunction
private

Definition at line 175 of file FumiliMaximumLikelihoodFCN.h.

Referenced by ModelFunction(), and SetModelFunction().

◆ fNumberOfParameters

unsigned int ROOT::Minuit2::FumiliFCNBase::fNumberOfParameters
privateinherited

◆ fValue

double ROOT::Minuit2::FumiliFCNBase::fValue
privateinherited

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