diff --git a/src/classes/PFitter.cpp b/src/classes/PFitter.cpp index 9f4131f0..c6039ee2 100644 --- a/src/classes/PFitter.cpp +++ b/src/classes/PFitter.cpp @@ -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; iSetMsrParamStep(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; iSetMsrParamValue(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; iSetMsrParamValue(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); diff --git a/src/classes/PMsrHandler.cpp b/src/classes/PMsrHandler.cpp index 67d5137c..9b405fe5 100644 --- a/src/classes/PMsrHandler.cpp +++ b/src/classes/PMsrHandler.cpp @@ -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 diff --git a/src/include/PFitter.h b/src/include/PFitter.h index bcbac3b5..8b2b9070 100644 --- a/src/include/PFitter.h +++ b/src/include/PFitter.h @@ -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();