# How to fit landau functions to histograms using parameters

Hello. I just started working with Root, and I’m writing a script to take a histogram and fit it to a landau function using Pyroot. To my knowledge, the first parameter of the landau function is the location of its peak, so I set it to be the location of the peak of my plot. However, the landau function is shifted rightward, and its peak is not placed at the value which I set it to.
Here’s the relevant portion of my code:

``````for E, file in files.iteritems():

hists[E].Rebin(50)

xAxis = hists[E].GetXaxis()
nBins = xAxis.GetNbins()

peakN = hists[E].GetMaximumBin()
peakX = hists[E].GetXaxis().GetBinCenter(peakN)
peak = hists[E].GetBinContent(peakN)

print('final peak:', peak)
print('final peak X:', peakX)
fit = r.TF1("landau","landau(0)")                         # Define the fit object to be landau
fit.SetParameter(0,peakX)             # Initialize the fit object to the mean of the histogram...

hists[E].Draw("Same PLC PMC")                              # Draw the histogram, the "Same" argument keeps previous content on the Canvas

hists[E].Fit(fit, "B")                                  # Fit the curve
fit.Draw("Same")                                      # Draw the fit onto the histogram

## SAVE THE HISTOGRAM

canvas.SaveAs("output.pdf");
``````

I get an output of peakX = 252.5. This is the resulting plot and fitted function.

I would prefer that the landau function be fit so that its peak matches up with the peak of my histogram plot. How would I achieve this? Thanks a lot in advance.

I’m using Root 6.26.04 and Python 3.10.5

Try with (see also “`fit.Print()`”):
`fit.SetParameters(peak / 0.18, peakX, hists[E].GetStdDev() / 5.) # (Constant, MPV, Sigma)`