From a5898a62762cf12f1b1dc13849481c01e1669f93 Mon Sep 17 00:00:00 2001 From: Jochen Klein Date: Wed, 4 Sep 2024 19:40:28 +0200 Subject: [PATCH] Draft for prior --- machine_learning_hep/analysis/analyzer_jets.py | 15 +++++++++++---- .../data_run3/database_ml_parameters_D0Jet_pp.yml | 2 ++ .../data_run3/database_ml_parameters_LcJet_pp.yml | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/machine_learning_hep/analysis/analyzer_jets.py b/machine_learning_hep/analysis/analyzer_jets.py index dbb4fb0cdf..3691296820 100644 --- a/machine_learning_hep/analysis/analyzer_jets.py +++ b/machine_learning_hep/analysis/analyzer_jets.py @@ -1051,9 +1051,11 @@ def _build_effkine(self, h_nocuts, h_cuts): h_cuts.Divide(h_nocuts) return h_cuts - def _build_response_matrix(self, h_response, h_eff = None): + + def _build_response_matrix(self, h_response, h_eff = None, frac_flat = 0.): rm = ROOT.RooUnfoldResponse( project_hist(h_response, [0, 1], {}), project_hist(h_response, [2, 3], {})) + h_gen = project_hist(h_response, [2, 3], {}) for hbin in itertools.product( enumerate(get_axis(h_response, 0).GetXbins(), 1), enumerate(get_axis(h_response, 1).GetXbins(), 1), @@ -1066,8 +1068,12 @@ def _build_response_matrix(self, h_response, h_eff = None): if np.isclose(eff, 0.): self.logger.error('efficiency 0 for %s', hbin[4]) continue - for _ in range(int(n)): - rm.Fill(hbin[0][1], hbin[1][1], hbin[2][1], hbin[3][1], 1./eff) + if (cnt_gen := h_gen.GetBinContent(hbin[2][0], hbin[3][0])) > 0.: + fac = 1. + if frac_flat > 0.: + fac += frac_flat * (1. / cnt_gen - 1.) + for _ in range(int(n)): + rm.Fill(hbin[0][1], hbin[1][1], hbin[2][1], hbin[3][1], 1./eff * fac) # rm.Mresponse().Print() return rm @@ -1096,7 +1102,8 @@ def _unfold(self, hist, var, mcordata): self.logger.error('Response matrix for %s not available, cannot unfold', var + suffix) return [] response_matrix_pr = self._build_response_matrix( - h_response, self.hcandeff['pr'] if mcordata == 'data' else None) + h_response, self.hcandeff['pr'] if mcordata == 'data' else None, + self.cfg('unfolding_frac_flat', 0.)) self._save_hist(response_matrix_pr.Hresponse(), f'uf/h_ptjet-{var}-responsematrix_pr_lin_{mcordata}.png', 'colz') diff --git a/machine_learning_hep/data/data_run3/database_ml_parameters_D0Jet_pp.yml b/machine_learning_hep/data/data_run3/database_ml_parameters_D0Jet_pp.yml index 64bf1eb168..6ab812b7dd 100644 --- a/machine_learning_hep/data/data_run3/database_ml_parameters_D0Jet_pp.yml +++ b/machine_learning_hep/data/data_run3/database_ml_parameters_D0Jet_pp.yml @@ -675,6 +675,8 @@ D0Jet_pp: unfolding_iterations: 8 # used, maximum iteration unfolding_iterations_sel: 4 # used, selected iteration # systematics + # unfolding_frac_flat: .1 + closure: pure_signal: false # exclude_feeddown_det: 'ismcsignal==1 & ismcprompt==1' diff --git a/machine_learning_hep/data/data_run3/database_ml_parameters_LcJet_pp.yml b/machine_learning_hep/data/data_run3/database_ml_parameters_LcJet_pp.yml index aa54125cee..61e0e730f2 100644 --- a/machine_learning_hep/data/data_run3/database_ml_parameters_LcJet_pp.yml +++ b/machine_learning_hep/data/data_run3/database_ml_parameters_LcJet_pp.yml @@ -463,6 +463,7 @@ LcJet_pp: unfolding_iterations: 8 # used, maximum iteration unfolding_iterations_sel: 5 # used, selected iteration # systematics + # unfolding_frac_flat: .1 fd_folding_method: 3d fd_root: '/data2/vkucera/powheg/trees_powheg_fd_F05_R05.root'