def fit_hist(hist, fit_options="LR"): # I: fit using integral of func (not value @ centre, better for rapid function) # L: Loglikelihood (better @ low stats) # V: verbose mode # E: better errors # M: More, improve fit results (looks for alt local minima) # R: fit to function range def get_fit_goodness(func): return (func.GetChisquare()/func.GetNDF()) initial_settings = get_initial_settings(hist) fit_func = get_func_with_named_initialised_param("f_"+hist.GetTitle(), hist, func_fmt, initial_settings, l_bound, u_bound) fit_func.SetNpx(10000) # number of points for drawing the function hist.Fit(fit_func, fit_options) # best_t = t = initial_settings[2][1](hist) # d=0.05 # min_goodness = goodness = get_fit_goodness(fit_func) # while (goodness)>3.0: # t+=d # fit_func.SetParameter(2,t) # hist.Fit(fit_func, fit_options) # goodness = get_fit_goodness(fit_func) # if goodness < min_goodness: # min_goodness=goodness # best_t = t # if t > (initial_settings[2][1](hist)+ d*100): # print "breaking fit loop, best fit {} for t={}".format(min_goodness, best_t) # break hist.fit_func = fit_func hist.fit_param = get_fit_parameters(fit_func)
def fit_hist(hist, fit_options="LIMER"): def get_fit_goodness(func): return (func.GetChisquare()/func.GetNDF()) initial_settings = get_initial_settings(hist) fit_func = get_func_with_named_initialised_param("f_"+hist.GetTitle(), hist, func_fmt, initial_settings, l_bound, u_bound) fit_func.SetNpx(100000) hist.Fit(fit_func, fit_options) hist.fit_func = fit_func hist.fit_param = get_fit_parameters(fit_func)
def fit_histogram(hist, func_fmt, initial_settings, func_name, fit_options="MER",img_name=""): func = get_func_with_named_initialised_param(func_name, hist, func_fmt, initial_settings) if img_name: canvas = make_canvas(img_name, resize=True) hist.Draw() hist.Fit(func, fit_options) canvas.Update() canvas.SaveAs(img_name+".eps") canvas.SaveAs(img_name+".svg") else: hist.Fit(func, fit_options+"N") hist.func = func hist.fit_param = get_fit_parameters(func)