26 MnApplication::MnApplication(
const FCNBase& fcn,
const MnUserParameterState& state,
const MnStrategy& stra,
unsigned int nfcn) :
27 fFCN(fcn), fState(state), fStrategy(stra), fNumCall(nfcn), fUseGrad(false)
31 MnApplication::MnApplication(
const FCNGradientBase& fcn,
const MnUserParameterState& state,
const MnStrategy& stra,
unsigned int nfcn) :
32 fFCN(fcn), fState(state), fStrategy(stra), fNumCall(nfcn), fUseGrad(true)
36 FunctionMinimum MnApplication::operator()(
unsigned int maxfcn,
double toler) {
39 assert(fState.IsValid());
40 unsigned int npar = VariableParameters();
42 if(maxfcn == 0) maxfcn = 200 + 100*npar + 5*npar*npar;
44 const FCNBase * fcn = &(Fcnbase());
47 const FCNGradientBase * gfcn =
dynamic_cast<const FCNGradientBase *
>(fcn);
50 FunctionMinimum min = Minimizer().Minimize( *gfcn, fState, fStrategy, maxfcn, toler);
51 fNumCall += min.NFcn();
52 fState = min.UserState();
57 FunctionMinimum min = Minimizer().Minimize( *fcn, fState, fStrategy, maxfcn, toler);
58 fNumCall += min.NFcn();
59 fState = min.UserState();
63 std::cout <<
"State resulting from Migrad. Total Function calls " << fNumCall << fState << std::endl;
64 const std::vector<ROOT::Minuit2::MinimumState>& iterationStates = min.States();
65 std::cout <<
"Number of iterations " << iterationStates.size() << std::endl;
66 for (
unsigned int i = 0; i < iterationStates.size(); ++i) {
68 const ROOT::Minuit2::MinimumState & st = iterationStates[i];
69 std::cout <<
"----------> Iteration " << i << std::endl;
70 int pr = std::cout.precision(18);
71 std::cout <<
" FVAL = " << st.Fval()
72 <<
" Edm = " << st.Edm() <<
" Nfcn = " << st.NFcn() << std::endl;
73 std::cout.precision(pr);
74 std::cout <<
" Error matrix change = " << st.Error().Dcovar()
76 std::cout <<
" Internal parameters : ";
77 for (
int j = 0; j < st.size() ; ++j)
78 std::cout <<
" p" << j <<
" = " << st.Vec()(j);
79 std::cout << std::endl;
92 const std::vector<MinuitParameter>& MnApplication::MinuitParameters()
const {
94 return fState.MinuitParameters();
97 std::vector<double> MnApplication::Params()
const {
return fState.Params();}
98 std::vector<double> MnApplication::Errors()
const {
return fState.Errors();}
101 const MinuitParameter& MnApplication::Parameter(
unsigned int i)
const {
103 return fState.Parameter(i);
107 void MnApplication::Add(
const char* name,
double val,
double err) {
109 fState.Add(name, val, err);
112 void MnApplication::Add(
const char* name,
double val,
double err,
double low,
double up) {
114 fState.Add(name, val, err, low, up);
117 void MnApplication::Add(
const char* name,
double val) {
119 fState.Add(name, val);
123 void MnApplication::Fix(
unsigned int i) {fState.Fix(i);}
124 void MnApplication::Release(
unsigned int i) {fState.Release(i);}
125 void MnApplication::SetValue(
unsigned int i,
double val) {
127 fState.SetValue(i, val);
129 void MnApplication::SetError(
unsigned int i,
double val) {
131 fState.SetError(i, val);
133 void MnApplication::SetLimits(
unsigned int i,
double low,
double up) {
135 fState.SetLimits(i, low, up);
137 void MnApplication::RemoveLimits(
unsigned int i) {fState.RemoveLimits(i);}
139 double MnApplication::Value(
unsigned int i)
const {
return fState.Value(i);}
140 double MnApplication::Error(
unsigned int i)
const {
return fState.Error(i);}
143 void MnApplication::Fix(
const char* i) {fState.Fix(i);}
144 void MnApplication::Release(
const char* i) {fState.Release(i);}
145 void MnApplication::SetValue(
const char* i,
double val) {fState.SetValue(i, val);}
146 void MnApplication::SetError(
const char* i,
double val) {fState.SetError(i, val);}
147 void MnApplication::SetLimits(
const char* i,
double low,
double up) { fState.SetLimits(i, low, up);}
148 void MnApplication::RemoveLimits(
const char* i) {fState.RemoveLimits(i);}
149 void MnApplication::SetPrecision(
double eps) {fState.SetPrecision(eps);}
151 double MnApplication::Value(
const char* i)
const {
return fState.Value(i);}
152 double MnApplication::Error(
const char* i)
const {
return fState.Error(i);}
155 unsigned int MnApplication::Index(
const char* name)
const {
157 return fState.Index(name);
160 const char* MnApplication::Name(
unsigned int i)
const {
162 return fState.Name(i);
166 double MnApplication::Int2ext(
unsigned int i,
double val)
const {
168 return fState.Int2ext(i, val);
170 double MnApplication::Ext2int(
unsigned int e,
double val)
const {
172 return fState.Ext2int(e, val);
174 unsigned int MnApplication::IntOfExt(
unsigned int ext)
const {
176 return fState.IntOfExt(ext);
178 unsigned int MnApplication::ExtOfInt(
unsigned int internal)
const {
180 return fState.ExtOfInt(
internal);
182 unsigned int MnApplication::VariableParameters()
const {
184 return fState.VariableParameters();