Skip to content

Commit b9e0b14

Browse files
author
Luigi Dello Stritto
committed
Add residual plots
1 parent 38b36a3 commit b9e0b14

File tree

4 files changed

+46
-6
lines changed

4 files changed

+46
-6
lines changed

machine_learning_hep/analysis/analyzer_jets.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ def _correct_efficiency(self, hist, ipt):
348348
def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows = None, filename = None):
349349
if fitcfg is None:
350350
return None, None
351-
res, ws, frame = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level, roows, True)
351+
res, ws, frame, residual_frame = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level, roows, True)
352352
frame.SetTitle(f'inv. mass for p_{{T}} {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]} GeV/c')
353353
c = TCanvas()
354354

@@ -372,6 +372,14 @@ def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows =
372372
self.logger.warning('Invalid fit result for %s', hist.GetName())
373373
filename = filename.replace('.png', '_invalid.png')
374374
self._save_canvas(c, filename)
375+
376+
if level == "data":
377+
residual_frame.SetTitle(f'inv. mass for p_{{T}} {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]} GeV/c')
378+
cres = TCanvas()
379+
residual_frame.Draw()
380+
filename = filename.replace('.png', '_residual.png')
381+
self._save_canvas(cres, filename)
382+
375383
return res, ws
376384

377385

machine_learning_hep/analysis/analyzerdhadrons.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def _save_hist(self, hist, filename, option = ''):
159159
def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows = None, filename = None):
160160
if fitcfg is None:
161161
return None, None
162-
res, ws, frame = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level, roows, True)
162+
res, ws, frame, residual_frame = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level, roows, True)
163163
frame.SetTitle(f'inv. mass for p_{{T}} {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]} GeV/c')
164164
c = TCanvas()
165165

@@ -187,6 +187,14 @@ def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows =
187187
# func_tot.Print('v')
188188
filename = filename.replace('.png', '_invalid.png')
189189
self._save_canvas(c, filename)
190+
191+
if level == "data":
192+
residual_frame.SetTitle(f'inv. mass for p_{{T}} {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]} GeV/c')
193+
cres = TCanvas()
194+
residual_frame.Draw()
195+
filename = filename.replace('.png', '_residual.png')
196+
self._save_canvas(cres, filename)
197+
190198
return res, ws
191199

192200

@@ -320,8 +328,6 @@ def fit(self):
320328
roo_res, roo_ws = self._roofit_mass(
321329
level, h_invmass, ipt, self.p_pdfnames, self.p_param_names, fitcfg, roows,
322330
f'roofit/h_mass_fitted_pthf-{ptrange[0]}-{ptrange[1]}_{level}.png')
323-
# if level == 'mc':
324-
# roo_ws.Print()
325331
self.roo_ws[level][ipt] = roo_ws
326332
self.roows[ipt] = roo_ws
327333
if roo_res.status() == 0:

machine_learning_hep/analysis/analyzerdhadrons_mult.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ def _save_hist(self, hist, filename, option = ''):
176176
def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows = None, filename = None):
177177
if fitcfg is None:
178178
return None, None
179-
res, ws, frame = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level, roows, True)
179+
res, ws, frame, residual_frame = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level, roows, True)
180180
frame.SetTitle(f'inv. mass for p_{{T}} {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]} GeV/c')
181181
c = TCanvas()
182182

@@ -204,6 +204,14 @@ def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows =
204204
# func_tot.Print('v')
205205
filename = filename.replace('.png', '_invalid.png')
206206
self._save_canvas(c, filename)
207+
208+
if level == "data":
209+
residual_frame.SetTitle(f'inv. mass for p_{{T}} {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]} GeV/c')
210+
cres = TCanvas()
211+
residual_frame.Draw()
212+
filename = filename.replace('.png', '_residual.png')
213+
self._save_canvas(cres, filename)
214+
207215
return res, ws
208216

209217

machine_learning_hep/fitting/roofitter.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def fit_mass_new(self, hist, pdfnames, fit_spec, level, roows = None, plot = Fal
6161
else:
6262
res = model.fitTo(dh, Save=True, PrintLevel=-1)
6363
frame = None
64+
residual_frame = None
6465
if plot:
6566
c = ROOT.TCanvas()
6667
c.SetLogy()
@@ -89,7 +90,24 @@ def fit_mass_new(self, hist, pdfnames, fit_spec, level, roows = None, plot = Fal
8990
# ROOT.RooFit.LineStyle(ROOT.ELineStyle.kDashed))
9091
# c.Modified()
9192
# c.Update()
92-
return (res, ws, frame)
93+
94+
if level == "data":
95+
residuals = frame.residHist()
96+
residual_frame = m.frame()
97+
residual_frame.addPlotable(residuals, "P")
98+
99+
n_signal_ext = ROOT.RooRealVar("n_signal_ext", "Expected signal events", n_signal.getVal(), 0, 1e6)
100+
signal_pdf_ext = ROOT.RooExtendPdf("signal_pdf_ext", "Extended signal PDF", signal_pdf, n_signal_ext)
101+
102+
signal_pdf_ext.plotOn(
103+
residual_frame,
104+
ROOT.RooFit.LineColor(ROOT.kBlue),
105+
ROOT.RooFit.Normalization(1.0, ROOT.RooAbsReal.RelativeExpected))
106+
107+
residual_frame.SetAxisRange(range_m[0], range_m[1], "X")
108+
residual_frame.SetYTitle("Residuals")
109+
110+
return (res, ws, frame, residual_frame)
93111

94112

95113
def fit_mass(self, hist, fit_spec, plot = False):

0 commit comments

Comments
 (0)