Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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
28{
29 // constructor from macfcn calls and tolerance
30 MnPrint print("MnApplication");
31
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
41 if (npar == 0) {
42 double fval = fcn(fState.Params());
43 print.Info("Function has zero parameters - returning current function value - ",fval);
44 // create a valid Minuit-Parameter object with just the function value
48 }
49
51
52 fNumCall += min.NFcn();
53 fState = min.UserState();
54
55 const std::vector<ROOT::Minuit2::MinimumState> &iterationStates = min.States();
56 print.Debug("State resulting from Migrad after", iterationStates.size(), "iterations:", fState);
57
58 print.Debug([&](std::ostream &os) {
59 for (unsigned int i = 0; i < iterationStates.size(); ++i) {
60 // std::cout << iterationStates[i] << std::endl;
62 os << "\n----------> Iteration " << i << '\n';
63 int pr = os.precision(18);
64 os << " FVAL = " << st.Fval() << " Edm = " << st.Edm() << " Nfcn = " << st.NFcn() << '\n';
65 os.precision(pr);
66 os << " Error matrix change = " << st.Error().Dcovar() << '\n';
67 os << " Internal parameters : ";
68 for (int j = 0; j < st.size(); ++j)
69 os << " p" << j << " = " << st.Vec()(j);
70 }
71 });
72
73 return min;
74}
75
76// facade: forward interface of MnUserParameters and MnUserTransformation
77// via MnUserParameterState
78
79const std::vector<MinuitParameter> &MnApplication::MinuitParameters() const
80{
81 // access to parameters (row-wise)
82 return fState.MinuitParameters();
83}
84// access to parameters and errors in column-wise representation
85std::vector<double> MnApplication::Params() const
86{
87 return fState.Params();
88}
89std::vector<double> MnApplication::Errors() const
90{
91 return fState.Errors();
92}
93
94const MinuitParameter &MnApplication::Parameter(unsigned int i) const
95{
96 // access to single Parameter
97 return fState.Parameter(i);
98}
99
100void MnApplication::Add(const char *name, double val, double err)
101{
102 // add free Parameter
103 fState.Add(name, val, err);
104}
105
106void MnApplication::Add(const char *name, double val, double err, double low, double up)
107{
108 // add limited Parameter
109 fState.Add(name, val, err, low, up);
110}
111
112void MnApplication::Add(const char *name, double val)
113{
114 // add const Parameter
115 fState.Add(name, val);
116}
117
118// interaction via external number of Parameter
119void MnApplication::Fix(unsigned int i)
120{
121 fState.Fix(i);
122}
123void MnApplication::Release(unsigned int i)
124{
125 fState.Release(i);
126}
127void MnApplication::SetValue(unsigned int i, double val)
128{
129 // set value for parameter i
130 fState.SetValue(i, val);
131}
132void MnApplication::SetError(unsigned int i, double val)
133{
134 // set parameter error
135 fState.SetError(i, val);
136}
137void MnApplication::SetLimits(unsigned int i, double low, double up)
138{
139 // set parameter limits
140 fState.SetLimits(i, low, up);
141}
142void MnApplication::RemoveLimits(unsigned int i)
143{
145}
146
147double MnApplication::Value(unsigned int i) const
148{
149 return fState.Value(i);
150}
151double MnApplication::Error(unsigned int i) const
152{
153 return fState.Error(i);
154}
155
156// interaction via Name of Parameter
157void MnApplication::Fix(const char *i)
158{
159 fState.Fix(i);
160}
161void MnApplication::Release(const char *i)
162{
163 fState.Release(i);
164}
165void MnApplication::SetValue(const char *i, double val)
166{
167 fState.SetValue(i, val);
168}
169void MnApplication::SetError(const char *i, double val)
170{
171 fState.SetError(i, val);
172}
173void MnApplication::SetLimits(const char *i, double low, double up)
174{
175 fState.SetLimits(i, low, up);
176}
178{
180}
182{
183 fState.SetPrecision(eps);
184}
185
186double MnApplication::Value(const char *i) const
187{
188 return fState.Value(i);
189}
190double MnApplication::Error(const char *i) const
191{
192 return fState.Error(i);
193}
194
195unsigned int MnApplication::Index(const char *name) const
196{
197 // convert name into external number of Parameter
198 return fState.Index(name);
199}
200
201const char *MnApplication::Name(unsigned int i) const
202{
203 // convert external number into name of Parameter
204 return fState.Name(i);
205}
206
207double MnApplication::Int2ext(unsigned int i, double val) const
208{
209 // transformation internal -> external
210 return fState.Int2ext(i, val);
211}
212double MnApplication::Ext2int(unsigned int e, double val) const
213{
214 // transformation external -> internal
215 return fState.Ext2int(e, val);
216}
217unsigned int MnApplication::IntOfExt(unsigned int ext) const
218{
219 // get internal index for external parameter with index ext
220 return fState.IntOfExt(ext);
221}
222unsigned int MnApplication::ExtOfInt(unsigned int internal) const
223{
224 // get external index for internal parameter with index internal
225 return fState.ExtOfInt(internal);
226}
228{
229 // get number of variable parameters
230 return fState.VariableParameters();
231}
232
233} // namespace Minuit2
234
235} // namespace ROOT
#define e(i)
Definition RSha256.hxx:103
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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) ...
MinimumState keeps the information (position, Gradient, 2nd deriv, etc) after one minimization step (...
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:135
void Info(const Ts &... args)
Definition MnPrint.h:129
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
const MnUserTransformation & Trafo() const
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...