Find out whether fit parameter hit limit

Hi ,

is there a simple way to find out whether one or more fit parameters hit the limit after fitting e.g. a TF1 to a graph or histogram?

Best,
Klaus

ROOT Version: v6-24-04
Platform: Linux
Compiler: Not Provided


Hi Klaus!

Well, “simple” I don’t know but this:

TH1F h("h", "hist", 10, 0., 1.);
h.Fill(0.1, 1000);
TF1 f("f", "pol0", 0., 1.);
f.SetParLimits(0, .2, .3);
f.SetParameter(0, .25);
auto r = h.Fit(&f, "LS");
double low, up;
r->ParameterBounds(0, low, up);
bool atLimit = TMath::AreEqualRel(r->Parameter(0), low, 0.01) || TMath::AreEqualRel(r->Parameter(0), up, 0.01);

might work?

(Btw the return value of ParameterBounds gets fixed by [mathcore] Fix return of FitResult::ParameterBounds as doc says. by Axel-Naumann · Pull Request #13305 · root-project/root · GitHub )

…and I find this a good question and maybe it’d be nice to transport the minimizer info that a param has hit the limit to the FitResult. @moneta what do you think?

Hi Alex,

thanks, I indeed currently use something like this in a helper function. It just came to my mind that parameters of interest hitting the limit might be invalid measurements, therefore one needs to take care. I imagine a function like

bool TF1::IsParAtLimit(int parnum)

or so to check this for individual parameters might be useful.

Best,
Klaus

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.