fixed error handling in order to make it coherent

This commit is contained in:
nemu 2008-09-02 08:54:46 +00:00
parent 13c48c72f0
commit 0508e8173d
3 changed files with 22 additions and 3 deletions

View File

@ -70,6 +70,7 @@ PFitter::PFitter(PMsrHandler *runInfo, PRunListCollection *runListCollection) :
// init class variables
fFitterFcn = 0;
fFcnMin = 0;
fMnUserParamState = 0;
// check msr minuit commands
if (!CheckCommands()) {
@ -324,6 +325,12 @@ bool PFitter::ExecuteHesse()
return false;
}
// keep the user parameter state
if (fMnUserParamState) {
delete fMnUserParamState;
}
fMnUserParamState = new ROOT::Minuit2::MnUserParameterState(mnState);
// fill parabolic errors
for (unsigned int i=0; i<fParams.size(); i++) {
fRunInfo->SetMsrParamStep(i, mnState.Error(i));
@ -368,6 +375,12 @@ bool PFitter::ExecuteMigrad()
}
fFcnMin = new ROOT::Minuit2::FunctionMinimum(min);
// keep user parameter state
if (fMnUserParamState) {
delete fMnUserParamState;
}
fMnUserParamState = new ROOT::Minuit2::MnUserParameterState(min.UserState());
// fill run info
for (unsigned int i=0; i<fParams.size(); i++) {
fRunInfo->SetMsrParamValue(i, min.UserState().Value(i));
@ -427,6 +440,12 @@ cout << endl << "maxfcn=" << maxfcn << endl;
}
fFcnMin = new ROOT::Minuit2::FunctionMinimum(min);
// keep user parameter state
if (fMnUserParamState) {
delete fMnUserParamState;
}
fMnUserParamState = new ROOT::Minuit2::MnUserParameterState(min.UserState());
// fill run info
for (unsigned int i=0; i<fParams.size(); i++) {
fRunInfo->SetMsrParamValue(i, min.UserState().Value(i));
@ -568,7 +587,7 @@ bool PFitter::ExecuteSave()
fout.setf(ios::left, ios::adjustfield);
fout.precision(6);
fout.width(11);
fout << mnState.Error(i);
fout << fMnUserParamState->Error(i);
// write minos errors
if (fParams[i].fPosErrorPresent) {
fout.setf(ios::left, ios::adjustfield);

View File

@ -992,7 +992,6 @@ bool PMsrHandler::HandleFitParameterEntry(PMsrLines &lines)
cout << endl;
} else { // everything is OK, therefore add the parameter to the parameter list
fParam.push_back(param);
cout << endl << ">> PMsrHandler::HandleFitParameterEntry: i=" << fParam.size() << ", param.fLowerBoundary=" << param.fLowerBoundary << ", param.fUpperBoundary=" << param.fUpperBoundary;
}
// clean up

View File

@ -82,7 +82,8 @@ class PFitter
PFitterFcn *fFitterFcn;
ROOT::Minuit2::MnUserParameters fMnUserParams; ///< minuit2 input parameter list
ROOT::Minuit2::FunctionMinimum *fFcnMin; ///<
ROOT::Minuit2::FunctionMinimum *fFcnMin; ///< function minimum object
ROOT::Minuit2::MnUserParameterState *fMnUserParamState; ///< keeps the current user parameter state
bool CheckCommands();
bool SetParameters();