better handling of some formating issues
This commit is contained in:
@ -366,6 +366,10 @@ bool PFitter::ExecuteMigrad()
|
|||||||
ROOT::Minuit2::FunctionMinimum min = migrad(maxfcn, tolerance);
|
ROOT::Minuit2::FunctionMinimum min = migrad(maxfcn, tolerance);
|
||||||
if (!min.IsValid()) {
|
if (!min.IsValid()) {
|
||||||
cout << endl << "**WARNING**: PFitter::ExecuteMigrad(): Fit did not converge, sorry ...";
|
cout << endl << "**WARNING**: PFitter::ExecuteMigrad(): Fit did not converge, sorry ...";
|
||||||
|
// set flag positive error present to false
|
||||||
|
for (unsigned int i=0; i<fParams.size(); i++) {
|
||||||
|
fRunInfo->SetMsrParamPosErrorPresent(i, false);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -419,18 +423,22 @@ bool PFitter::ExecuteMinimize()
|
|||||||
fMnUserParams = fFcnMin->UserParameters();
|
fMnUserParams = fFcnMin->UserParameters();
|
||||||
|
|
||||||
// create minimizer object
|
// create minimizer object
|
||||||
// set MnStrategy to high == 2, see MINUIT2 manual MnStrategy
|
// set MnStrategy to default == 1, high == 2, see MINUIT2 manual MnStrategy
|
||||||
ROOT::Minuit2::MnMinimize minimize((*fFitterFcn), fMnUserParams, 2);
|
ROOT::Minuit2::MnMinimize minimize((*fFitterFcn), fMnUserParams, 1);
|
||||||
|
|
||||||
// minimize
|
// minimize
|
||||||
// maxfcn is 10*MINUIT2 Default maxfcn
|
// maxfcn is MINUIT2 Default maxfcn
|
||||||
unsigned int maxfcn = 10*(200 + 100*fParams.size() + 5*fParams.size()*fParams.size());
|
unsigned int maxfcn = (200 + 100*fParams.size() + 5*fParams.size()*fParams.size());
|
||||||
cout << endl << "maxfcn=" << maxfcn << endl;
|
//cout << endl << "maxfcn=" << maxfcn << endl;
|
||||||
// tolerance = MINUIT2 Default tolerance
|
// tolerance = MINUIT2 Default tolerance
|
||||||
double tolerance = 0.1;
|
double tolerance = 0.1;
|
||||||
ROOT::Minuit2::FunctionMinimum min = minimize(maxfcn, tolerance);
|
ROOT::Minuit2::FunctionMinimum min = minimize(maxfcn, tolerance);
|
||||||
if (!min.IsValid()) {
|
if (!min.IsValid()) {
|
||||||
cout << endl << "**WARNING**: PFitter::ExecuteMinimize(): Fit did not converge, sorry ...";
|
cout << endl << "**WARNING**: PFitter::ExecuteMinimize(): Fit did not converge, sorry ...";
|
||||||
|
// set flag positive error present to false
|
||||||
|
for (unsigned int i=0; i<fParams.size(); i++) {
|
||||||
|
fRunInfo->SetMsrParamPosErrorPresent(i, false);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -635,11 +643,14 @@ bool PFitter::ExecuteSave()
|
|||||||
for (unsigned int i=0; i<cov.Nrow(); i++) {
|
for (unsigned int i=0; i<cov.Nrow(); i++) {
|
||||||
fout << endl;
|
fout << endl;
|
||||||
for (unsigned int j=0; j<i; j++) {
|
for (unsigned int j=0; j<i; j++) {
|
||||||
if (cov(i,j) > 0.0)
|
|
||||||
fout << " ";
|
|
||||||
fout.setf(ios::left, ios::adjustfield);
|
fout.setf(ios::left, ios::adjustfield);
|
||||||
fout.precision(6);
|
fout.precision(6);
|
||||||
fout.width(14);
|
if (cov(i,j) > 0.0) {
|
||||||
|
fout << " ";
|
||||||
|
fout.width(13);
|
||||||
|
} else {
|
||||||
|
fout.width(14);
|
||||||
|
}
|
||||||
fout << cov(i,j);
|
fout << cov(i,j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -656,12 +667,12 @@ bool PFitter::ExecuteSave()
|
|||||||
ROOT::Minuit2::MnGlobalCorrelationCoeff corr = mnState.GlobalCC();
|
ROOT::Minuit2::MnGlobalCorrelationCoeff corr = mnState.GlobalCC();
|
||||||
ROOT::Minuit2::MnUserCovariance cov = mnState.Covariance();
|
ROOT::Minuit2::MnUserCovariance cov = mnState.Covariance();
|
||||||
PIntVector parNo;
|
PIntVector parNo;
|
||||||
fout << endl << " No Global ";
|
fout << endl << " No Global ";
|
||||||
for (unsigned int i=0; i<fParams.size(); i++) {
|
for (unsigned int i=0; i<fParams.size(); i++) {
|
||||||
fout.setf(ios::left, ios::adjustfield);
|
|
||||||
fout.width(9);
|
|
||||||
// only free parameters, i.e. not fixed, and not unsed ones!
|
// only free parameters, i.e. not fixed, and not unsed ones!
|
||||||
if ((fParams[i].fStep != 0) && fRunInfo->ParameterInUse(i) > 0) {
|
if ((fParams[i].fStep != 0) && fRunInfo->ParameterInUse(i) > 0) {
|
||||||
|
fout.setf(ios::left, ios::adjustfield);
|
||||||
|
fout.width(9);
|
||||||
fout << i+1;
|
fout << i+1;
|
||||||
parNo.push_back(i);
|
parNo.push_back(i);
|
||||||
}
|
}
|
||||||
@ -686,15 +697,16 @@ bool PFitter::ExecuteSave()
|
|||||||
fout << parNo[i]+1;
|
fout << parNo[i]+1;
|
||||||
// global correlation coefficient
|
// global correlation coefficient
|
||||||
fout.setf(ios::left, ios::adjustfield);
|
fout.setf(ios::left, ios::adjustfield);
|
||||||
|
fout.precision(6);
|
||||||
fout.width(12);
|
fout.width(12);
|
||||||
fout << corr.GlobalCC()[i];
|
fout << corr.GlobalCC()[i];
|
||||||
// correlations matrix
|
// correlations matrix
|
||||||
for (unsigned int j=0; j<cov.Nrow(); j++) {
|
for (unsigned int j=0; j<cov.Nrow(); j++) {
|
||||||
fout.setf(ios::left, ios::adjustfield);
|
fout.setf(ios::left, ios::adjustfield);
|
||||||
fout.precision(4);
|
// fout.precision(4);
|
||||||
fout.width(9);
|
|
||||||
if (i==j) {
|
if (i==j) {
|
||||||
fout << "1.0";
|
fout.width(9);
|
||||||
|
fout << " 1.0 ";
|
||||||
hcorr->Fill((double)i,(double)i,1.0);
|
hcorr->Fill((double)i,(double)i,1.0);
|
||||||
} else {
|
} else {
|
||||||
// check that errors are none zero
|
// 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]));
|
dval = cov(i,j)/(fMnUserParams.Error(parNo[i])*fMnUserParams.Error(parNo[j]));
|
||||||
}
|
}
|
||||||
hcorr->Fill((double)i,(double)j,dval);
|
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 << " ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user