Why when I make my function to fit my data does the Fit method change the values?


_ROOT Version: 6.19
_Platform: OS 10.14.3


I have some data i want to fit to a function, this function is a gausian EXCEPT its standard deviation is equal to the square root of the mean, so I did this:

def fitHist(hist,name):
    print '################# MY FIT ##########################'
    f = TF1('f'+name, '[0]*exp(-0.5*((x-[1])/[2])**2)', -10000, 10000)
    print hist, name
    cons = hist.GetFunction('gaus').GetParameter(0)
    f.SetParameter(0, cons)
    mean = hist.GetFunction('gaus').GetParameter(1)
    f.SetParameter(1, mean)
    print ''
    print 'the mean is '+str(mean)
    print 'sqrt(mean) is '+str(sqrt(mean))
    print ''
    f.SetParameter(2, sqrt(mean))
    hist.Fit('f'+name)

However look at this, if I just use Fit(‘gaus’) I get a sigma of ~135, but I want to know how well would a gausian with a sigma of 139 fit that same data, however when I try to fit the funtion I did with that sigma, it changes it to 135, look:

Maybe what is happening is that my data doesn’t quite match the function I did, but that’s the point!, I want to know how closely the data fits my function, I don’t want to know what other function would fit it better.

What should I do?, how do I fix this?

Try:

f.FixParameter(2, sqrt(mean))
hist.Fit('f'+name)
f.ReleaseParameter(2)

it didn’t work, I was thinking of doing:

f = TF1('f'+name, '[0]*exp(-0.5*((x-[1])/sqrt([1]))**2)', 0, 50000)

but still not understanding why the Fit method changes my function makes me distrust it .

Do I understand correctly that you are asking why fit parameters change when you fit a function to the data?

From what I see, your code snippet initialises the fit parameters, and then you fit to data. This will change all three parameters.