Dear experts
I’m using TMinuit2
to fit some chi2 minimum, the result of Minuit2 seems didn’t converge, as follows:
Warning in <Minuit2>: VariableMetricBuilder No improvement in line search
Warning in <Minuit2>: VariableMetricBuilder Iterations finish without convergence; Edm 8.38155e+06 Requested 2e-06
Warning in <Minuit2>: VariableMetricBuilder FunctionMinimum is invalid after second try
Warning in <Minuit2>: Minuit2Minimizer::Minimize Minimization did NOT converge, Edm is above max
Minuit2Minimizer : Invalid minimum - status = 3
FVAL = 325.788
Edm = 2.09539e+06
Nfcn = 214
but when I check the residual, they were not large. Please give me some suggestions what I did wrong.
void fitting(){
ROOT::Math::Minimizer* fFit = nullptr;
//setup
fFit = ROOT::Math::Factory::CreateMinimizer("Minuit2");
fFit->SetTolerance(0.001);
fFit->SetStrategy(2);
fFit->SetMaxFunctionCalls(1e4);
step = 1e-5;
double dRho = 2.;
double dPhi = 2e-2;
double dAlpha = 2e-2;
double dTheta = 0.2;
rhoMin = rho - dRho;
rhoMax = rho + dRho;
phiMin = phi - dPhi;
phiMax = phi + dPhi;
alphaMin = alpha - dAlpha;
alphaMax = alpha + dAlpha;
thetaMin = theta - dTheta;
thetaMax = theta + dTheta;
fFit->SetVariable(0, "rho", rho, step);
fFit->SetVariable(1, "phi", phi, step);
fFit->SetVariable(2, "alpha", alpha, step);
fFit->SetVariable(3, "theta", theta, step);
fFit->SetVariableLimits(0, rhoMin, rhoMax);
fFit->SetVariableLimits(1, phiMin, phiMax);
fFit->SetVariableLimits(2, alphaMin, alphaMax);
fFit->SetVariableLimits(3, thetaMin, thetaMax);
//fitting
}