It’s been a while since I’ve had to fit curves and I’m new to how Root does it. My issue is how to handle boundary conditions between two fit functions. Attached is my macro and a graphic showing my results. I do a Gaussian fit inside the peak, then a Lorentzian fit outside the peak. The two fits are discontinuous at the boundary.

Intuition tells me that I should define the requirement f(a) = g(a) and f’(a) = g’(a) in the definitions of the fit functions. But, this doesn’t seem to be that simple. I’m not sure how to proceed.

My original code, as you’ll see, uses an if else statement to compute one or the other function. I removed that and that has gotten rid of the discontinuity. However, the functions do not have a common maximum, which introduces a “bump” at the top.

Thank you! That was an excellent solution. I’m curious about parameter p[3], which is used in

Double_t D = abs(x[0] - p[1])/p[2];
return p[0]*exp(-pow(D,p[3])) + p[4];

Normally, in a gaussian, p[3] would be 2, but you set it as less than two. Moreover, you use the absolute value, which I assume is because p[3] is not 2. I have not seen this approach before.

Yes, it is not a gaussian. The peak in your data can not be fitted with one gaussian. But you can fit it with two gaussians, see the attached macrofit2.C (19.7 KB)