Skip to content

Commit

Permalink
Systematics: Add distributions of variation/default
Browse files Browse the repository at this point in the history
  • Loading branch information
vkucera committed Sep 9, 2024
1 parent e848f85 commit b4830c6
Showing 1 changed file with 29 additions and 4 deletions.
33 changes: 29 additions & 4 deletions machine_learning_hep/analysis/do_systematics.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@
from machine_learning_hep.logger import get_logger

# HF specific imports
from machine_learning_hep.utilities import ( # make_plot,
from machine_learning_hep.utilities import (
make_plot,
combine_graphs,
draw_latex,
get_colour,
Expand Down Expand Up @@ -545,11 +546,12 @@ def do_jet_systematics(self, var: str):
)
input_histograms_sys[iptjet][sys_cat][sys_var].Draw("same")
nsys = nsys + 1
latex_text = "%g #leq %s < %g GeV/#it{c}" % (self.edges_ptjet_gen_min[iptjet],
self.latex_ptjet, self.edges_ptjet_gen_max[iptjet])
latex = TLatex(
0.15,
0.82,
"%g #leq %s < %g GeV/#it{c}"
% (self.edges_ptjet_gen_min[iptjet], self.latex_ptjet, self.edges_ptjet_gen_max[iptjet]),
latex_text,
)
draw_latex(latex)
leg_sysvar_each.Draw("same")
Expand All @@ -566,19 +568,28 @@ def do_jet_systematics(self, var: str):
leg_sysvar_ratio = TLegend(0.77, 0.2, 0.95, 0.85, self.systematic_catlabels[sys_cat]) # Rg
setup_legend(leg_sysvar_ratio)
histo_ratio = []

n_bins = input_histograms_default[iptjet].GetNbinsX()
# Make the histograms for the distribution of var/default values per bin of observable.
list_his_cat_vars = [TH1F(f"his_cat_vars_{var}_{suffix}_{suffix2}_{ibin + 1}",
f"{self.systematic_catlabels[sys_cat]} distribution, bin {ibin + 1};"
"var/def;counts", 6, 0., 2.) for ibin in range(n_bins)]

for sys_var in range(self.systematic_variations[sys_cat]):
default_his = input_histograms_default[iptjet].Clone("default_his")
var_his = input_histograms_sys[iptjet][sys_cat][sys_var].Clone("var_his")
var_his.Divide(default_his)
histo_ratio.append(var_his)
# Fill the histogram for the distribution of var/default values.
for ibin in range(n_bins):
list_his_cat_vars[ibin].Fill(var_his.GetBinContent(ibin + 1))
l_his_all = []
for his_var in histo_ratio:
if his_var.Integral() != 0:
l_his_all.append(his_var)
y_min, y_max = get_y_window_his(l_his_all, False)
y_margin_up = 0.15
y_margin_down = 0.05

for sys_var in range(self.systematic_variations[sys_cat]):
if sys_var == 0:
histo_ratio[sys_var].GetYaxis().SetRangeUser(
Expand All @@ -605,6 +616,20 @@ def do_jet_systematics(self, var: str):
leg_sysvar_ratio.Draw("same")
self.save_canvas(csysvar_ratio, f"sys_var_{var}_{suffix}_{suffix2}_ratio")

# print([[h.GetBinContent(i + 1) for i in range(h.GetNbinsX())] for h in list_his_cat_vars])
axis_x = var_his.GetXaxis()
can_dist, _ = make_plot(f"sys_var_{var}_{suffix}_{suffix2}_ratio_dist",
list_obj=list_his_cat_vars, labels_obj=[f"{axis_x.GetBinLowEdge(ibin + 1)}-"
f"{axis_x.GetBinUpEdge(ibin + 1)}"
for ibin in range(n_bins)],
opt_leg_g=self.opt_leg_g, opt_plot_g=self.opt_plot_g, opt_plot_h="p l",
offsets_xy=self.offsets_axes,
leg_pos=[0.7, 0.7, 0.8, 0.85],
margins_y=[0.05, 0.05], margins_c=self.margins_can,
title=f"{latex_obs} {latex_text} {self.systematic_catlabels[sys_cat]};"
"var/default;counts")
self.save_canvas(can_dist, f"sys_var_{var}_{suffix}_{suffix2}_ratio_dist")

# Plot efficiency variations

csysvar_eff = TCanvas(
Expand Down

0 comments on commit b4830c6

Please sign in to comment.