Skip to content

Commit 565a49f

Browse files
committed
Add the possibility of setting fixed sigma
1 parent 5943d7c commit 565a49f

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

machine_learning_hep/analysis/analyzerdhadrons.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ def __init__(self, datap, case, typean, period):
100100
self.n_fileff = os.path.join(self.d_resultsallpmc, self.n_fileff)
101101
self.p_bin_width = datap["analysis"][self.typean]["bin_width"]
102102
self.p_rebin = datap["analysis"][self.typean]["n_rebin"]
103+
self.p_fixed_sigma = datap["analysis"][self.typean]["fixed_sigma"]
104+
self.p_fixed_sigma_val = datap["analysis"][self.typean]["fixed_sigma_val"]
103105
self.p_pdfnames = datap["analysis"][self.typean]["pdf_names"]
104106
self.p_param_names = datap["analysis"][self.typean]["param_names"]
105107

@@ -169,11 +171,14 @@ def _save_hist(self, hist, filename, option=""):
169171
self.rfigfile.WriteObject(hist, rfilename)
170172

171173
# region fitting
172-
def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows=None, filename=None):
174+
def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, fixed_sigma, fixed_sigma_val, # pylint: disable=too-many-arguments
175+
roows=None, filename=None):
173176
if fitcfg is None:
174177
return None, None, None, None, None
175178
try:
176-
res, ws, frame, residual_frame, data_hist, model = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level,
179+
res, ws, frame, residual_frame, data_hist, model = self.fitter.fit_mass_new(hist, pdfnames, param_names,
180+
fitcfg, level,
181+
fixed_sigma, fixed_sigma_val,
177182
roows=roows, plot=True)
178183
except ValueError:
179184
self.logger.error(f"Could not do fitting on {level} for pt {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]}")
@@ -356,6 +361,8 @@ def fit(self):
356361
self.p_pdfnames,
357362
self.p_param_names,
358363
fitcfg,
364+
self.p_fixed_sigma[ipt],
365+
self.p_fixed_sigma_val[ipt],
359366
roows,
360367
f"roofit/h_mass_fitted_pthf-{ptrange[0]}-{ptrange[1]}_{level}.png",
361368
)

machine_learning_hep/analysis/analyzerdhadrons_mult.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ def __init__(self, datap, case, typean, period):
105105
self.p_bin_width = datap["analysis"][self.typean]["bin_width"]
106106

107107
self.p_rebin = datap["analysis"][self.typean]["n_rebin"]
108+
self.p_fixed_sigma = datap["analysis"][self.typean]["fixed_sigma"]
109+
self.p_fixed_sigma_val = datap["analysis"][self.typean]["fixed_sigma_val"]
108110
self.p_pdfnames = datap["analysis"][self.typean]["pdf_names"]
109111
self.p_param_names = datap["analysis"][self.typean]["param_names"]
110112

@@ -197,11 +199,14 @@ def _save_hist(self, hist, filename, option=""):
197199
self.rfigfile.WriteObject(hist, rfilename)
198200

199201
# region fitting
200-
def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, roows=None, filename=None):
202+
def _roofit_mass(self, level, hist, ipt, pdfnames, param_names, fitcfg, fixed_sigma, fixed_sigma_val, # pylint: disable=too-many-arguments
203+
roows=None, filename=None):
201204
if fitcfg is None:
202205
return None, None, None, None, None
203206
try:
204-
res, ws, frame, residual_frame, data_hist, model = self.fitter.fit_mass_new(hist, pdfnames, fitcfg, level,
207+
res, ws, frame, residual_frame, data_hist, model = self.fitter.fit_mass_new(hist, pdfnames, param_names,
208+
fitcfg, level,
209+
fixed_sigma, fixed_sigma_val,
205210
roows=roows, plot=True)
206211
except ValueError:
207212
self.logger.error(f"Could not do fitting on {level} for pt {self.bins_candpt[ipt]} - {self.bins_candpt[ipt+1]}")
@@ -406,6 +411,8 @@ def fit(self):
406411
self.p_pdfnames,
407412
self.p_param_names,
408413
fitcfg,
414+
self.p_fixed_sigma[ipt],
415+
self.p_fixed_sigma_val[ipt],
409416
roows,
410417
f"roofit/mult_{multrange[0]}-{multrange[1]}/"
411418
f"h_mass_fitted_pthf-{ptrange[0]}-{ptrange[1]}"

machine_learning_hep/fitting/roofitter.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ def __init__(self):
3434

3535
# pylint: disable=too-many-branches
3636
def fit_mass_new(
37-
self, hist, pdfnames: dict, fit_spec: dict, level: str, roows: ROOT.RooWorkspace = None, plot: bool = False
37+
self, hist, pdfnames: dict, param_names: dict, fit_spec: dict, level: str,
38+
fixed_sigma: bool = False, fixed_sigma_val: float = 0., roows: ROOT.RooWorkspace = None, plot: bool = False
3839
):
3940
"""New fit method"""
4041
if hist.GetEntries() == 0:
@@ -54,6 +55,11 @@ def fit_mass_new(
5455
raise ValueError("model not set")
5556

5657
m = ws.var(var_m)
58+
if level == "mc":
59+
sigma_sgn = ws.var(param_names["gauss_sigma"])
60+
if fixed_sigma:
61+
sigma_sgn.setVal(fixed_sigma_val)
62+
sigma_sgn.setConstant(True)
5763

5864
if level == "data" and USE_EXTMODEL:
5965
signal_pdf = ws.pdf(pdfnames["pdf_sig"])

0 commit comments

Comments
 (0)