diff --git a/src/classes/PFitter.cpp b/src/classes/PFitter.cpp index c0879607..ca8dec02 100644 --- a/src/classes/PFitter.cpp +++ b/src/classes/PFitter.cpp @@ -366,6 +366,10 @@ bool PFitter::ExecuteMigrad() ROOT::Minuit2::FunctionMinimum min = migrad(maxfcn, tolerance); if (!min.IsValid()) { cout << endl << "**WARNING**: PFitter::ExecuteMigrad(): Fit did not converge, sorry ..."; + // set flag positive error present to false + for (unsigned int i=0; iSetMsrParamPosErrorPresent(i, false); + } return false; } @@ -419,18 +423,22 @@ bool PFitter::ExecuteMinimize() fMnUserParams = fFcnMin->UserParameters(); // create minimizer object - // set MnStrategy to high == 2, see MINUIT2 manual MnStrategy - ROOT::Minuit2::MnMinimize minimize((*fFitterFcn), fMnUserParams, 2); + // set MnStrategy to default == 1, high == 2, see MINUIT2 manual MnStrategy + ROOT::Minuit2::MnMinimize minimize((*fFitterFcn), fMnUserParams, 1); // minimize - // maxfcn is 10*MINUIT2 Default maxfcn - unsigned int maxfcn = 10*(200 + 100*fParams.size() + 5*fParams.size()*fParams.size()); -cout << endl << "maxfcn=" << maxfcn << endl; + // maxfcn is MINUIT2 Default maxfcn + unsigned int maxfcn = (200 + 100*fParams.size() + 5*fParams.size()*fParams.size()); +//cout << endl << "maxfcn=" << maxfcn << endl; // tolerance = MINUIT2 Default tolerance double tolerance = 0.1; ROOT::Minuit2::FunctionMinimum min = minimize(maxfcn, tolerance); if (!min.IsValid()) { cout << endl << "**WARNING**: PFitter::ExecuteMinimize(): Fit did not converge, sorry ..."; + // set flag positive error present to false + for (unsigned int i=0; iSetMsrParamPosErrorPresent(i, false); + } return false; } @@ -635,11 +643,14 @@ bool PFitter::ExecuteSave() for (unsigned int i=0; i 0.0) - fout << " "; fout.setf(ios::left, ios::adjustfield); fout.precision(6); - fout.width(14); + if (cov(i,j) > 0.0) { + fout << " "; + fout.width(13); + } else { + fout.width(14); + } fout << cov(i,j); } } @@ -656,12 +667,12 @@ bool PFitter::ExecuteSave() ROOT::Minuit2::MnGlobalCorrelationCoeff corr = mnState.GlobalCC(); ROOT::Minuit2::MnUserCovariance cov = mnState.Covariance(); PIntVector parNo; - fout << endl << " No Global "; + fout << endl << " No Global "; for (unsigned int i=0; iParameterInUse(i) > 0) { + fout.setf(ios::left, ios::adjustfield); + fout.width(9); fout << i+1; parNo.push_back(i); } @@ -686,15 +697,16 @@ bool PFitter::ExecuteSave() fout << parNo[i]+1; // global correlation coefficient fout.setf(ios::left, ios::adjustfield); + fout.precision(6); fout.width(12); fout << corr.GlobalCC()[i]; // correlations matrix for (unsigned int j=0; jFill((double)i,(double)i,1.0); } else { // check that errors are none zero @@ -710,7 +722,20 @@ bool PFitter::ExecuteSave() dval = cov(i,j)/(fMnUserParams.Error(parNo[i])*fMnUserParams.Error(parNo[j])); } hcorr->Fill((double)i,(double)j,dval); - fout << dval; + // handle precision, ugly but ... + if (dval < 1.0e-2) { + fout.precision(2); + } else { + fout.precision(4); + } + // handle sign + if (dval > 0.0) { + fout << " "; + fout.width(7); + } else { + fout.width(8); + } + fout << dval << " "; } } }