Logo ROOT   6.12/07
Reference Guide
ParametricFunction.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_ParametricFunction
11 #define ROOT_Minuit2_ParametricFunction
12 
13 #include "Minuit2/MnConfig.h"
14 #include <vector>
15 #include <cassert>
16 
17 #include "Minuit2/FCNBase.h"
18 
19 namespace ROOT {
20 
21  namespace Minuit2 {
22 
23 
24 
25 /**
26 
27 Function which has parameters. For example, one could define
28 a one-dimensional Gaussian, by considering x as an input coordinate
29 for the evaluation of the function, and the mean and the square root
30 of the variance as parameters.
31 <p>
32 AS OF NOW PARAMETRICFUNCTION INHERITS FROM FCNBASE INSTEAD OF
33 GENERICFUNCTION. THIS IS ONLY BECAUSE NUMERICAL2PGRADIENTCALCULATOR
34 NEEDS AN FCNBASE OBJECT AND WILL BE CHANGED!!!!!!!!!!!!!!!!
35 
36 @ingroup Minuit
37 
38 \todo ParametricFunction and all the classes that inherit from it
39 are inheriting also FCNBase so that the Gradient calculation has
40 the Up() member function. That is not really good...
41 
42 
43  */
44 
45 class ParametricFunction : public FCNBase {
46 
47 public:
48 
49 
50  /**
51 
52  Constructor which initializes the ParametricFunction with the
53  parameters given as input.
54 
55  @param params vector containing the initial Parameter values
56 
57  */
58 
59  ParametricFunction(const std::vector<double>& params) : par(params) {}
60 
61 
62 
63  /**
64 
65  Constructor which initializes the ParametricFunction by setting
66  the number of parameters.
67 
68  @param nparams number of parameters of the parametric function
69 
70  */
71 
72  ParametricFunction(int nparams) : par(nparams) {}
73 
74 
75 
76  virtual ~ParametricFunction() {}
77 
78 
79 
80  /**
81 
82  Sets the parameters of the ParametricFunction.
83 
84  @param params vector containing the Parameter values
85 
86  */
87 
88  virtual void SetParameters(const std::vector<double>& params) const {
89 
90  assert(params.size() == par.size());
91  par = params;
92 
93  }
94 
95 
96 
97  /**
98 
99  Accessor for the state of the parameters.
100 
101  @return vector containing the present Parameter settings
102 
103  */
104 
105  virtual const std::vector<double> & GetParameters() const { return par; }
106 
107 
108 
109 
110  /**
111 
112  Accessor for the number of parameters.
113 
114  @return the number of function parameters
115 
116  */
117  virtual unsigned int NumberOfParameters() const { return par.size(); }
118 
119  // Why do I need to declare it here, it should be inherited without
120  // any problems, no?
121 
122  /**
123 
124  Evaluates the function with the given coordinates.
125 
126  @param x vector containing the input coordinates
127 
128  @return the result of the function evaluation with the given
129  coordinates.
130 
131  */
132 
133  virtual double operator()(const std::vector<double>& x) const=0;
134 
135 
136 
137  /**
138 
139  Evaluates the function with the given coordinates and Parameter
140  values. This member function is useful to implement when speed
141  is an issue as it is faster to call only one function instead
142  of two (SetParameters and operator()). The default implementation,
143  provided for convenience, does the latter.
144 
145  @param x vector containing the input coordinates
146 
147  @param params vector containing the Parameter values
148 
149  @return the result of the function evaluation with the given
150  coordinates and parameters
151 
152  */
153 
154  virtual double operator()(const std::vector<double>& x, const std::vector<double>& params) const {
155  SetParameters(params);
156  return operator()(x);
157 
158  }
159 
160 
161  /**
162 
163  Member function returning the Gradient of the function with respect
164  to its variables (but without including gradients with respect to
165  its internal parameters).
166 
167  @param x vector containing the coordinates of the point where the
168  Gradient is to be calculated.
169 
170  @return the Gradient vector of the function at the given point.
171 
172  */
173 
174  virtual std::vector<double> GetGradient(const std::vector<double>& x) const;
175 
176 
177 
178 
179  protected:
180 
181  /**
182 
183  The vector containing the parameters of the function
184  It is mutable for "historical reasons" as in the hierarchy
185  methods and classes are const and all the implications of changing
186  them back to non-const are not clear.
187 
188  */
189 
190 
191  mutable std::vector<double> par;
192 
193 };
194 
195  } // namespace Minuit2
196 
197 } // namespace ROOT
198 
199 #endif // ROOT_Minuit2_ParametricFunction
virtual void SetParameters(const std::vector< double > &params) const
Sets the parameters of the ParametricFunction.
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21
virtual unsigned int NumberOfParameters() const
Accessor for the number of parameters.
virtual const std::vector< double > & GetParameters() const
Accessor for the state of the parameters.
virtual std::vector< double > GetGradient(const std::vector< double > &x) const
Member function returning the Gradient of the function with respect to its variables (but without inc...
virtual double operator()(const std::vector< double > &x, const std::vector< double > &params) const
Evaluates the function with the given coordinates and Parameter values.
Double_t x[n]
Definition: legend1.C:17
Interface (abstract class) defining the function to be minimized, which has to be implemented by the ...
Definition: FCNBase.h:47
Function which has parameters.
ParametricFunction(const std::vector< double > &params)
Constructor which initializes the ParametricFunction with the parameters given as input...
ParametricFunction(int nparams)
Constructor which initializes the ParametricFunction by setting the number of parameters.
std::vector< double > par
The vector containing the parameters of the function It is mutable for "historical reasons" as in the...
virtual double operator()(const std::vector< double > &x) const =0
Evaluates the function with the given coordinates.