Skip to content

Commit 318dc9b

Browse files
author
Luigi Dello Stritto
committed
RooFit improvements, processer clean up and small bug fixing
1 parent 8f2d5ae commit 318dc9b

11 files changed

+1219
-649
lines changed

machine_learning_hep/analysis/analyzer_jets.py

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
from ROOT import TF1, TCanvas, TFile, gStyle
2121

2222
from machine_learning_hep.analysis.analyzer import Analyzer
23-
from machine_learning_hep.fitting.roofitter import RooFitter
23+
from machine_learning_hep.fitting.roofitter import RooFitter, calc_signif
24+
from machine_learning_hep.fitting.roofitter import create_text_info, add_text_info_fit, add_text_info_perf
2425
from machine_learning_hep.utilities import folding, make_message_notfound
2526
from machine_learning_hep.utils.hist import (bin_array, create_hist, norm_response, fold_hist,
2627
fill_hist_fast, get_axis, get_dim, get_bin_limits,
@@ -71,6 +72,8 @@ def __init__(self, datap, case, typean, period):
7172
self.n_fileresp = os.path.join(self.d_resultsallpmc_proc, self.n_fileresp)
7273
file_result_name = datap["files_names"]["resultfilename"]
7374
self.n_fileresult = os.path.join(self.d_resultsallpdata, file_result_name)
75+
self.p_pdfnames = datap["analysis"][self.typean]['pdf_names']
76+
self.p_param_names = datap["analysis"][self.typean]['param_names']
7477

7578
self.observables = {
7679
'qa': ['zg', 'rg', 'nsd', 'zpar', 'dr', 'lntheta', 'lnkt', 'lntheta-lnkt'],
@@ -341,17 +344,41 @@ def _correct_efficiency(self, hist, ipt):
341344

342345

343346
#region fitting
344-
def _roofit_mass(self, hist, ipt, fitcfg, roows = None, filename = None):
347+
def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows = None, filename = None):
345348
if fitcfg is None:
346349
return None, None
347-
res, ws, frame = self.fitter.fit_mass_new(hist, fitcfg, roows, True)
350+
res, ws, frame, residual_frame = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level, roows, True)
348351
frame.SetTitle(f'inv. mass for p_{{T}} {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]} GeV/c')
349352
c = TCanvas()
353+
354+
textInfoRight = create_text_info(0.62, 0.68, 1.0, 0.89)
355+
add_text_info_fit(textInfoRight, frame, ws, param_names)
356+
357+
textInfoLeft = create_text_info(0.12, 0.68, 0.6, 0.89)
358+
if level == "data":
359+
mean_sgn = ws.var(self.p_param_names["gauss_mean"])
360+
sigma_sgn = ws.var(self.p_param_names["gauss_sigma"])
361+
(sig, sig_err, bkg, bkg_err,
362+
signif, signif_err, s_over_b, s_over_b_err
363+
) = calc_signif(ws, res, pdfnames, param_names, mean_sgn, sigma_sgn)
364+
365+
add_text_info_perf(textInfoLeft, sig, sig_err, bkg, bkg_err, s_over_b, s_over_b_err, signif, signif_err)
366+
350367
frame.Draw()
368+
textInfoRight.Draw()
369+
textInfoLeft.Draw()
351370
if res.status() != 0:
352371
self.logger.warning('Invalid fit result for %s', hist.GetName())
353372
filename = filename.replace('.png', '_invalid.png')
354373
self._save_canvas(c, filename)
374+
375+
if level == "data":
376+
residual_frame.SetTitle(f'inv. mass for p_{{T}} {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]} GeV/c')
377+
cres = TCanvas()
378+
residual_frame.Draw()
379+
filename = filename.replace('.png', '_residual.png')
380+
self._save_canvas(cres, filename)
381+
355382
return res, ws
356383

357384

@@ -493,7 +520,7 @@ def fit(self):
493520
if var := roows.var(par):
494521
var.setConstant(True)
495522
roo_res, roo_ws = self._roofit_mass(
496-
h_invmass, ipt, fitcfg, roows,
523+
level, h_invmass, ipt, self.p_pdfnames, self.p_param_names, fitcfg, roows,
497524
f'roofit/h_mass_fitted{jetptlabel}_{string_range_pthf(range_pthf)}_{level}.png')
498525
if roo_res.status() != 0:
499526
self.logger.error('RooFit failed for %s iptjet %s ipt %d', level, iptjet, ipt)
@@ -514,8 +541,8 @@ def fit(self):
514541
self.roo_ws_ptjet[level][jptjet][ipt] = roo_ws.Clone()
515542
# TODO: take parameter names from DB
516543
if level in ('data', 'mc'):
517-
varname_mean = fitcfg.get('var_mean', 'mean')
518-
varname_sigma = fitcfg.get('var_sigma', 'sigma_g1')
544+
varname_mean = fitcfg.get('var_mean', self.p_param_names["gauss_mean"])
545+
varname_sigma = fitcfg.get('var_sigma', self.p_param_names["gauss_sigma"])
519546
self.fit_mean[level][ipt] = roo_ws.var(varname_mean).getValV()
520547
self.fit_sigma[level][ipt] = roo_ws.var(varname_sigma).getValV()
521548
varname_m = fitcfg.get('var', 'm')

0 commit comments

Comments
 (0)