Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
MnApplication.cxx
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
13#include "Minuit2/FCNBase.h"
14#include "Minuit2/MnPrint.h"
15
16namespace ROOT {
17
18namespace Minuit2 {
19
20// constructor from non-gradient functions
22 unsigned int nfcn)
23 : fFCN(fcn), fState(state), fStrategy(stra), fNumCall(nfcn)
24{
25}
26
27FunctionMinimum MnApplication::operator()(unsigned int maxfcn, double toler)
28{
29 // constructor from macfcn calls and tolerance
30 MnPrint print("MnApplication");
31
32 assert(fState.IsValid());
33 unsigned int npar = VariableParameters();
34 // assert(npar > 0);
35 if (maxfcn == 0)
36 maxfcn = 200 + 100 * npar + 5 * npar * npar;
37
38 const FCNBase &fcn = Fcnbase();
39
40 FunctionMinimum min = Minimizer().Minimize(fcn, fState, fStrategy, maxfcn, toler);
41 fNumCall += min.NFcn();
42 fState = min.UserState();
43
44 const std::vector<ROOT::Minuit2::MinimumState> &iterationStates = min.States();
45 print.Debug("State resulting from Migrad after", iterationStates.size(), "iterations:", fState);
46
47 print.Debug([&](std::ostream &os) {
48 for (unsigned int i = 0; i < iterationStates.size(); ++i) {
49 // std::cout << iterationStates[i] << std::endl;
50 const ROOT::Minuit2::MinimumState &st = iterationStates[i];
51 os << "\n----------> Iteration " << i << '\n';
52 int pr = os.precision(18);
53 os << " FVAL = " << st.Fval() << " Edm = " << st.Edm() << " Nfcn = " << st.NFcn() << '\n';
54 os.precision(pr);
55 os << " Error matrix change = " << st.Error().Dcovar() << '\n';
56 os << " Internal parameters : ";
57 for (int j = 0; j < st.size(); ++j)
58 os << " p" << j << " = " << st.Vec()(j);
59 }
60 });
61
62 return min;
63}
64
65// facade: forward interface of MnUserParameters and MnUserTransformation
66// via MnUserParameterState
67
68const std::vector<MinuitParameter> &MnApplication::MinuitParameters() const
69{
70 // access to parameters (row-wise)
71 return fState.MinuitParameters();
72}
73// access to parameters and errors in column-wise representation
74std::vector<double> MnApplication::Params() const
75{
76 return fState.Params();
77}
78std::vector<double> MnApplication::Errors() const
79{
80 return fState.Errors();
81}
82
83const MinuitParameter &MnApplication::Parameter(unsigned int i) const
84{
85 // access to single Parameter
86 return fState.Parameter(i);
87}
88
89void MnApplication::Add(const char *name, double val, double err)
90{
91 // add free Parameter
92 fState.Add(name, val, err);
93}
94
95void MnApplication::Add(const char *name, double val, double err, double low, double up)
96{
97 // add limited Parameter
98 fState.Add(name, val, err, low, up);
99}
100
101void MnApplication::Add(const char *name, double val)
102{
103 // add const Parameter
104 fState.Add(name, val);
105}
106
107// interaction via external number of Parameter
108void MnApplication::Fix(unsigned int i)
109{
110 fState.Fix(i);
111}
112void MnApplication::Release(unsigned int i)
113{
114 fState.Release(i);
115}
116void MnApplication::SetValue(unsigned int i, double val)
117{
118 // set value for parameter i
119 fState.SetValue(i, val);
120}
121void MnApplication::SetError(unsigned int i, double val)
122{
123 // set parameter error
124 fState.SetError(i, val);
125}
126void MnApplication::SetLimits(unsigned int i, double low, double up)
127{
128 // set parameter limits
129 fState.SetLimits(i, low, up);
130}
131void MnApplication::RemoveLimits(unsigned int i)
132{
134}
135
136double MnApplication::Value(unsigned int i) const
137{
138 return fState.Value(i);
139}
140double MnApplication::Error(unsigned int i) const
141{
142 return fState.Error(i);
143}
144
145// interaction via Name of Parameter
146void MnApplication::Fix(const char *i)
147{
148 fState.Fix(i);
149}
150void MnApplication::Release(const char *i)
151{
152 fState.Release(i);
153}
154void MnApplication::SetValue(const char *i, double val)
155{
156 fState.SetValue(i, val);
157}
158void MnApplication::SetError(const char *i, double val)
159{
160 fState.SetError(i, val);
161}
162void MnApplication::SetLimits(const char *i, double low, double up)
163{
164 fState.SetLimits(i, low, up);
165}
167{
169}
171{
172 fState.SetPrecision(eps);
173}
174
175double MnApplication::Value(const char *i) const
176{
177 return fState.Value(i);
178}
179double MnApplication::Error(const char *i) const
180{
181 return fState.Error(i);
182}
183
184unsigned int MnApplication::Index(const char *name) const
185{
186 // convert name into external number of Parameter
187 return fState.Index(name);
188}
189
190const char *MnApplication::Name(unsigned int i) const
191{
192 // convert external number into name of Parameter
193 return fState.Name(i);
194}
195
196double MnApplication::Int2ext(unsigned int i, double val) const
197{
198 // transformation internal -> external
199 return fState.Int2ext(i, val);
200}
201double MnApplication::Ext2int(unsigned int e, double val) const
202{
203 // transformation external -> internal
204 return fState.Ext2int(e, val);
205}
206unsigned int MnApplication::IntOfExt(unsigned int ext) const
207{
208 // get internal index for external parameter with index ext
209 return fState.IntOfExt(ext);
210}
211unsigned int MnApplication::ExtOfInt(unsigned int internal) const
212{
213 // get external index for internal parameter with index internal
214 return fState.ExtOfInt(internal);
215}
217{
218 // get number of variable parameters
219 return fState.VariableParameters();
220}
221
222} // namespace Minuit2
223
224} // namespace ROOT
#define e(i)
Definition RSha256.hxx:103
char name[80]
Definition TGX11.cxx:110
Interface (abstract class) defining the function to be minimized, which has to be implemented by the ...
Definition FCNBase.h:51
class holding the full result of the minimization; both internal and external (MnUserParameterState) ...
const std::vector< MinimumState > & States() const
const MnUserParameterState & UserState() const
MinimumState keeps the information (position, Gradient, 2nd deriv, etc) after one minimization step (...
const MinimumError & Error() const
const MnAlgebraicVector & Vec() const
class for the individual Minuit Parameter with Name and number; contains the input numbers for the mi...
void SetError(unsigned int, double)
MnUserParameterState fState
double Int2ext(unsigned int, double) const
void Add(const char *Name, double val, double err)
std::vector< double > Errors() const
void RemoveLimits(unsigned int)
double Value(unsigned int) const
const std::vector< ROOT::Minuit2::MinuitParameter > & MinuitParameters() const
virtual ModularFunctionMinimizer & Minimizer()=0
unsigned int ExtOfInt(unsigned int) const
unsigned int Index(const char *) const
unsigned int IntOfExt(unsigned int) const
virtual FunctionMinimum operator()(unsigned int maxfcn=0, double tolerance=0.1)
Minimize the function.
virtual const FCNBase & Fcnbase() const
double Ext2int(unsigned int, double) const
const MinuitParameter & Parameter(unsigned int i) const
MnApplication(const FCNBase &fcn, const MnUserParameterState &state, const MnStrategy &stra, unsigned int nfcn=0)
constructor from non-gradient functions
const char * Name(unsigned int) const
std::vector< double > Params() const
void SetLimits(unsigned int, double, double)
double Error(unsigned int) const
void SetValue(unsigned int, double)
unsigned int VariableParameters() const
void Debug(const Ts &... args)
Definition MnPrint.h:147
API class for defining four levels of strategies: low (0), medium (1), high (2), very high (>=3); act...
Definition MnStrategy.h:27
class which holds the external user and/or internal Minuit representation of the parameters and error...
void SetLimits(unsigned int, double, double)
unsigned int Index(const std::string &) const
double Int2ext(unsigned int, double) const
const MinuitParameter & Parameter(unsigned int i) const
double Ext2int(unsigned int, double) const
void Add(const std::string &name, double val, double err)
unsigned int ExtOfInt(unsigned int) const
const char * Name(unsigned int) const
const std::vector< ROOT::Minuit2::MinuitParameter > & MinuitParameters() const
facade: forward interface of MnUserParameters and MnUserTransformation
unsigned int IntOfExt(unsigned int) const
virtual FunctionMinimum Minimize(const FCNBase &, const MnUserParameterState &, const MnStrategy &=MnStrategy{1}, unsigned int maxfcn=0, double toler=0.1) const
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...