ROOT   6.08/07 Reference Guide
FumiliMaximumLikelihoodFCN.h
Go to the documentation of this file.
1 // @(#)root/minuit2:$Id$
2 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005
3
4 /**********************************************************************
5  * *
6  * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT *
7  * *
8  **********************************************************************/
9
10 #ifndef ROOT_Minuit2_FumiliMaximumLikelihoodFCN
11 #define ROOT_Minuit2_FumiliMaximumLikelihoodFCN
12
13 #include "FumiliFCNBase.h"
14 #include <vector>
15 #include <cmath>
16 #include <float.h>
18 #include "Math/Util.h"
19
20 namespace ROOT {
21
22  namespace Minuit2 {
23
24
25 //#include <iostream>
26
27 /**
28
29 Extension of the FCNBase for the Fumili method. Fumili applies only to
30 minimization problems used for fitting. The method is based on a
31 linearization of the model function negleting second derivatives.
32 User needs to provide the model function. In this cased the function
33 to be minimized is the sum of the logarithms of the model function
34 for the different measurements times -1.
35
36
37 @author Andras Zsenei and Lorenzo Moneta, Creation date: 3 Sep 2004
38
39 @see <A HREF="http://www.cern.ch/winkler/minuit/tutorial/mntutorial.pdf">MINUIT Tutorial</A> on function minimization, section 5
40
41 @see FumiliStandardMaximumLikelihoodFCN
42
43 @ingroup Minuit
44
45 \todo Insert a nice latex formula...
46
47 */
48
49
50
52
53 public:
54
56
58
59
60  /**
61
62  Sets the model function for the data (for example gaussian+linear for a peak)
63
64  @param modelFunction a reference to the model function.
65
66  */
67
68  void SetModelFunction(const ParametricFunction& modelFCN) { fModelFunction = &modelFCN; }
69
70
71
72  /**
73
74  Returns the model function used for the data.
75
76  @return Returns a pointer to the model function.
77
78  */
79
80  const ParametricFunction* ModelFunction() const { return fModelFunction; }
81
82
83
84  /**
85
86  Evaluates the model function for the different measurement points and
87  the Parameter values supplied, calculates a figure-of-merit for each
88  measurement and returns a vector containing the result of this
89  evaluation.
90
91  @param par vector of Parameter values to feed to the model function.
92
93  @return A vector containing the figures-of-merit for the model function evaluated
94  for each set of measurements.
95
96  */
97
98  virtual std::vector<double> Elements(const std::vector<double>& par) const = 0;
99
100
101
102  /**
103
104  Accessor to the parameters of a given measurement. For example in the
105  case of a chi-square fit with a one-dimensional Gaussian, the Parameter
106  characterizing the measurement will be the position. It is the Parameter
107  that is feeded to the model function.
108
109  @param Index Index of the measueremnt the parameters of which to return
110  @return A vector containing the values characterizing a measurement
111
112  */
113
114  virtual const std::vector<double> & GetMeasurement(int Index) const = 0;
115
116
117  /**
118
119  Accessor to the number of measurements used for calculating the
120  present figure of merit.
121
122  @return the number of measurements
123
124  */
125
126  virtual int GetNumberOfMeasurements() const = 0;
127
128
129  /**
130
131  Calculates the function for the maximum likelihood method. The user must
132  implement in a class which inherits from FumiliChi2FCN the member function
133  Elements() which will supply the Elements for the sum.
134
135
136  @param par vector containing the Parameter values for the model function
137
138  @return The sum of the natural logarithm of the Elements multiplied by -1
139
140  @see FumiliFCNBase#elements
141
142  */
143
144  double operator()(const std::vector<double>& par) const {
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  }
161
162
163
164  /**
165
166  !!!!!!!!!!!! to be commented
167
168  */
169
170  virtual double Up() const { return 0.5; }
171
172  private:
173
174  // A pointer to the model function which describes the data
176
177 };
178
179  } // namespace Minuit2
180
181 } // namespace ROOT
182
183 #endif // ROOT_Minuit2_FumiliMaximumLikelihoodFCN
double par[1]
Definition: unuranDistr.cxx:38
This namespace contains pre-defined functions to be used in conjuction with TExecutor::Map and TExecu...
Definition: StringConv.hxx:21
virtual double Up() const
!!!!!!!!!!!! to be commented
const ParametricFunction * ModelFunction() const
Returns the model function used for the data.
virtual std::vector< double > Elements(const std::vector< double > &par) const =0
Evaluates the model function for the different measurement points and the Parameter values supplied...
Function which has parameters.
double operator()(const std::vector< double > &par) const
Calculates the function for the maximum likelihood method.
RooCmdArg Index(RooCategory &icat)
double EvalLog(double x)
safe evaluation of log(x) with a protections against negative or zero argument to the log smooth line...
Definition: Util.h:55
Extension of the FCNBase for the Fumili method.
Definition: FumiliFCNBase.h:47
Extension of the FCNBase for the Fumili method.
virtual const std::vector< double > & GetMeasurement(int Index) const =0
Accessor to the parameters of a given measurement.
void SetModelFunction(const ParametricFunction &modelFCN)
Sets the model function for the data (for example gaussian+linear for a peak)
virtual int GetNumberOfMeasurements() const =0
Accessor to the number of measurements used for calculating the present figure of merit...