Skip to content

Commit 1177d53

Browse files
authored
Merge branch 'AliceO2Group:master' into Update
2 parents 00ca8e3 + 7ad2bd8 commit 1177d53

File tree

5 files changed

+568
-67
lines changed

5 files changed

+568
-67
lines changed

PWGHF/D2H/Macros/compute_fraction_cutvar.py

Lines changed: 80 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,18 @@ def main(config):
8383

8484
hist_corry_prompt = hist_rawy[0].Clone("hCorrYieldsPrompt")
8585
hist_corry_nonprompt = hist_rawy[0].Clone("hCorrYieldsNonPrompt")
86-
hist_covariance = hist_rawy[0].Clone("hCovPromptNonPrompt")
86+
hist_covariance_pnp = hist_rawy[0].Clone("hCovPromptNonPrompt")
87+
hist_covariance_pp = hist_rawy[0].Clone("hCovPromptPrompt")
88+
hist_covariance_npnp = hist_rawy[0].Clone("hCovNonPromptNonPrompt")
8789
hist_corrfrac_prompt = hist_rawy[0].Clone("hCorrFracPrompt")
8890
hist_corrfrac_nonprompt = hist_rawy[0].Clone("hCorrFracNonPrompt")
89-
for histo in hist_corry_prompt, hist_corry_nonprompt, hist_covariance, hist_corrfrac_prompt, hist_corrfrac_nonprompt:
91+
for histo in hist_corry_prompt, hist_corry_nonprompt, hist_covariance_pnp, hist_covariance_pp, hist_covariance_npnp, hist_corrfrac_prompt, hist_corrfrac_nonprompt:
9092
histo.Reset()
9193
hist_corry_prompt.GetYaxis().SetTitle("corrected yields prompt")
9294
hist_corry_nonprompt.GetYaxis().SetTitle("corrected yields non-prompt")
93-
hist_covariance.GetYaxis().SetTitle("#sigma(prompt, non-prompt)")
95+
hist_covariance_pnp.GetYaxis().SetTitle("#sigma(prompt, non-prompt)")
96+
hist_covariance_pp.GetYaxis().SetTitle("#sigma(prompt, prompt)")
97+
hist_covariance_npnp.GetYaxis().SetTitle("#sigma(non-prompt, non-prompt)")
9498
hist_corrfrac_prompt.GetYaxis().SetTitle("corrected fraction prompt")
9599
hist_corrfrac_nonprompt.GetYaxis().SetTitle("corrected fraction non-prompt")
96100
set_object_style(
@@ -105,7 +109,9 @@ def main(config):
105109
fillstyle=0,
106110
markerstyle=ROOT.kFullSquare,
107111
)
108-
set_object_style(hist_covariance)
112+
set_object_style(hist_covariance_pnp)
113+
set_object_style(hist_covariance_pp)
114+
set_object_style(hist_covariance_npnp)
109115
set_object_style(
110116
hist_corrfrac_prompt,
111117
color=ROOT.kRed + 1,
@@ -172,62 +178,73 @@ def main(config):
172178
print(f"raw yield uncertainties vector elements = {unc_rawy}\n")
173179

174180
minimiser = CutVarMinimiser(rawy, effp, effnp, unc_rawy, unc_effp, unc_effnp)
175-
minimiser.minimise_system(cfg["minimisation"]["correlated"])
176-
177-
hist_corry_prompt.SetBinContent(ipt + 1, minimiser.get_prompt_yield_and_error()[0])
178-
hist_corry_prompt.SetBinError(ipt + 1, minimiser.get_prompt_yield_and_error()[1])
179-
hist_corry_nonprompt.SetBinContent(ipt + 1, minimiser.get_nonprompt_yield_and_error()[0])
180-
hist_corry_nonprompt.SetBinError(ipt + 1, minimiser.get_nonprompt_yield_and_error()[1])
181-
hist_covariance.SetBinContent(ipt + 1, minimiser.get_prompt_nonprompt_cov())
182-
hist_covariance.SetBinError(ipt + 1, 0)
183-
corr_frac_prompt = minimiser.get_corr_prompt_fraction()
184-
corr_frac_nonprompt = minimiser.get_corr_nonprompt_fraction()
185-
hist_corrfrac_prompt.SetBinContent(ipt + 1, corr_frac_prompt[0])
186-
hist_corrfrac_prompt.SetBinError(ipt + 1, corr_frac_prompt[1])
187-
hist_corrfrac_nonprompt.SetBinContent(ipt + 1, corr_frac_nonprompt[0])
188-
hist_corrfrac_nonprompt.SetBinError(ipt + 1, corr_frac_nonprompt[1])
189-
if cfg["central_efficiency"]["computerawfrac"]:
190-
raw_frac_prompt = minimiser.get_raw_prompt_fraction(
191-
hist_central_effp.GetBinContent(ipt + 1), hist_central_effnp.GetBinContent(ipt + 1)
192-
)
193-
raw_frac_nonprompt = minimiser.get_raw_nonprompt_fraction(
194-
hist_central_effp.GetBinContent(ipt + 1), hist_central_effnp.GetBinContent(ipt + 1)
195-
)
196-
hist_frac_raw_prompt.SetBinContent(ipt + 1, raw_frac_prompt[0])
197-
hist_frac_raw_prompt.SetBinError(ipt + 1, raw_frac_prompt[1])
198-
hist_frac_raw_nonprompt.SetBinContent(ipt + 1, raw_frac_nonprompt[0])
199-
hist_frac_raw_nonprompt.SetBinError(ipt + 1, raw_frac_nonprompt[1])
200-
201-
hist_bin_title = f"bin # {ipt+1}; {pt_axis_title}#in ({pt_min}; {pt_max})"
202-
203-
canv_rawy, histos_rawy, leg_r = minimiser.plot_result(f"_pt{pt_min}_{pt_max}", hist_bin_title)
204-
output.cd()
205-
canv_rawy.Write()
206-
for _, hist in histos_rawy.items():
207-
hist.Write()
208-
209-
canv_unc, histos_unc, leg_unc = minimiser.plot_uncertainties(f"_pt{pt_min}_{pt_max}", hist_bin_title)
210-
output.cd()
211-
canv_unc.Write()
212-
for _, hist in histos_unc.items():
213-
hist.Write()
214-
215-
canv_eff, histos_eff, leg_e = minimiser.plot_efficiencies(f"_pt{pt_min}_{pt_max}", hist_bin_title)
216-
output.cd()
217-
canv_eff.Write()
218-
for _, hist in histos_eff.items():
219-
hist.Write()
220-
221-
canv_frac, histos_frac, leg_f = minimiser.plot_fractions(f"_pt{pt_min}_{pt_max}", hist_bin_title)
222-
output.cd()
223-
canv_frac.Write()
224-
for _, hist in histos_frac.items():
225-
hist.Write()
226-
227-
canv_cov, histo_cov = minimiser.plot_cov_matrix(True, f"_pt{pt_min}_{pt_max}", hist_bin_title)
228-
output.cd()
229-
canv_cov.Write()
230-
histo_cov.Write()
181+
status = minimiser.minimise_system(cfg["minimisation"]["correlated"])
182+
183+
if status:
184+
hist_corry_prompt.SetBinContent(ipt + 1, minimiser.get_prompt_yield_and_error()[0])
185+
hist_corry_prompt.SetBinError(ipt + 1, minimiser.get_prompt_yield_and_error()[1])
186+
hist_corry_nonprompt.SetBinContent(ipt + 1, minimiser.get_nonprompt_yield_and_error()[0])
187+
hist_corry_nonprompt.SetBinError(ipt + 1, minimiser.get_nonprompt_yield_and_error()[1])
188+
hist_covariance_pnp.SetBinContent(ipt + 1, minimiser.get_prompt_nonprompt_cov())
189+
hist_covariance_pnp.SetBinError(ipt + 1, 0)
190+
hist_covariance_pp.SetBinContent(ipt + 1, minimiser.get_prompt_prompt_cov())
191+
hist_covariance_pp.SetBinError(ipt + 1, 0)
192+
hist_covariance_npnp.SetBinContent(ipt + 1, minimiser.get_nonprompt_nonprompt_cov())
193+
hist_covariance_npnp.SetBinError(ipt + 1, 0)
194+
corr_frac_prompt = minimiser.get_corr_prompt_fraction()
195+
corr_frac_nonprompt = minimiser.get_corr_nonprompt_fraction()
196+
hist_corrfrac_prompt.SetBinContent(ipt + 1, corr_frac_prompt[0])
197+
hist_corrfrac_prompt.SetBinError(ipt + 1, corr_frac_prompt[1])
198+
hist_corrfrac_nonprompt.SetBinContent(ipt + 1, corr_frac_nonprompt[0])
199+
hist_corrfrac_nonprompt.SetBinError(ipt + 1, corr_frac_nonprompt[1])
200+
if cfg["central_efficiency"]["computerawfrac"]:
201+
raw_frac_prompt = minimiser.get_raw_prompt_fraction(
202+
hist_central_effp.GetBinContent(ipt + 1), hist_central_effnp.GetBinContent(ipt + 1)
203+
)
204+
raw_frac_nonprompt = minimiser.get_raw_nonprompt_fraction(
205+
hist_central_effp.GetBinContent(ipt + 1), hist_central_effnp.GetBinContent(ipt + 1)
206+
)
207+
hist_frac_raw_prompt.SetBinContent(ipt + 1, raw_frac_prompt[0])
208+
hist_frac_raw_prompt.SetBinError(ipt + 1, raw_frac_prompt[1])
209+
hist_frac_raw_nonprompt.SetBinContent(ipt + 1, raw_frac_nonprompt[0])
210+
hist_frac_raw_nonprompt.SetBinError(ipt + 1, raw_frac_nonprompt[1])
211+
212+
hist_bin_title = f"bin # {ipt+1}; {pt_axis_title}#in ({pt_min}; {pt_max})"
213+
214+
canv_rawy, histos_rawy, leg_r = minimiser.plot_result(f"_pt{pt_min}_{pt_max}", hist_bin_title)
215+
output.cd()
216+
canv_rawy.Write()
217+
for _, hist in histos_rawy.items():
218+
hist.Write()
219+
220+
canv_unc, histos_unc, leg_unc = minimiser.plot_uncertainties(f"_pt{pt_min}_{pt_max}", hist_bin_title)
221+
output.cd()
222+
canv_unc.Write()
223+
for _, hist in histos_unc.items():
224+
hist.Write()
225+
226+
canv_eff, histos_eff, leg_e = minimiser.plot_efficiencies(f"_pt{pt_min}_{pt_max}", hist_bin_title)
227+
output.cd()
228+
canv_eff.Write()
229+
for _, hist in histos_eff.items():
230+
hist.Write()
231+
232+
canv_frac, histos_frac, leg_f = minimiser.plot_fractions(f"_pt{pt_min}_{pt_max}", hist_bin_title)
233+
output.cd()
234+
canv_frac.Write()
235+
for _, hist in histos_frac.items():
236+
hist.Write()
237+
238+
canv_cov, histo_cov = minimiser.plot_cov_matrix(True, f"_pt{pt_min}_{pt_max}", hist_bin_title)
239+
output.cd()
240+
canv_cov.Write()
241+
histo_cov.Write()
242+
else:
243+
print(f"Minimization for pT {pt_min}, {pt_max} not successful")
244+
canv_rawy = ROOT.TCanvas("c_rawy_minimization_error", "Minimization error", 500, 500)
245+
canv_eff = ROOT.TCanvas("c_eff_minimization_error", "Minimization error", 500, 500)
246+
canv_frac = ROOT.TCanvas("c_frac_minimization_error", "Minimization error", 500, 500)
247+
canv_cov = ROOT.TCanvas("c_conv_minimization_error", "Minimization error", 500, 500)
231248

232249
canv_combined = ROOT.TCanvas(f"canv_combined_{ipt}", "", 1000, 1000)
233250
canv_combined.Divide(2, 2)
@@ -267,7 +284,9 @@ def main(config):
267284
output.cd()
268285
hist_corry_prompt.Write()
269286
hist_corry_nonprompt.Write()
270-
hist_covariance.Write()
287+
hist_covariance_pnp.Write()
288+
hist_covariance_pp.Write()
289+
hist_covariance_npnp.Write()
271290
hist_corrfrac_prompt.Write()
272291
hist_corrfrac_nonprompt.Write()
273292
if cfg["central_efficiency"]["computerawfrac"]:

PWGHF/D2H/Macros/cut_variation.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,18 @@ def minimise_system(self, correlated=True, precision=1.0e-8, max_iterations=100)
168168
self.m_cov_sets[i_row, i_col] = cov_row_col
169169

170170
self.m_cov_sets = np.matrix(self.m_cov_sets)
171-
self.m_weights = np.linalg.inv(np.linalg.cholesky(self.m_cov_sets))
171+
try:
172+
self.m_weights = np.linalg.inv(np.linalg.cholesky(self.m_cov_sets))
173+
except np.linalg.LinAlgError:
174+
return False
172175
self.m_weights = self.m_weights.T * self.m_weights
173176
m_eff_tr = self.m_eff.T
174177

175178
self.m_covariance = (m_eff_tr * self.m_weights) * self.m_eff
176-
self.m_covariance = np.linalg.inv(np.linalg.cholesky(self.m_covariance))
179+
try:
180+
self.m_covariance = np.linalg.inv(np.linalg.cholesky(self.m_covariance))
181+
except np.linalg.LinAlgError:
182+
return False
177183
self.m_covariance = self.m_covariance.T * self.m_covariance
178184

179185
self.m_corr_yields = self.m_covariance * (m_eff_tr * self.m_weights) * self.m_rawy
@@ -223,6 +229,8 @@ def minimise_system(self, correlated=True, precision=1.0e-8, max_iterations=100)
223229
self.unc_frac_prompt[i_set] = unc_fp
224230
self.unc_frac_nonprompt[i_set] = unc_fnp
225231

232+
return True
233+
226234
def get_red_chi2(self):
227235
"""
228236
Helper function to get reduced chi2
@@ -271,6 +279,30 @@ def get_prompt_nonprompt_cov(self):
271279

272280
return self.m_covariance.item(1, 0)
273281

282+
def get_prompt_prompt_cov(self):
283+
"""
284+
Helper function to get covariance between prompt and prompt corrected yields
285+
286+
Returns
287+
-----------------------------------------------------
288+
- cov_p_np: float
289+
covariance between prompt and prompt corrected yields
290+
"""
291+
292+
return self.m_covariance.item(0, 0)
293+
294+
def get_nonprompt_nonprompt_cov(self):
295+
"""
296+
Helper function to get covariance between non-prompt and non-prompt corrected yields
297+
298+
Returns
299+
-----------------------------------------------------
300+
- cov_p_np: float
301+
covariance between non-prompt and non-prompt corrected yields
302+
"""
303+
304+
return self.m_covariance.item(1, 1)
305+
274306
def get_raw_prompt_fraction(self, effacc_p, effacc_np):
275307
"""
276308
Helper function to get the raw prompt fraction given the efficiencies

PWGHF/D2H/Tasks/taskXic.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -377,9 +377,9 @@ struct HfTaskXic {
377377
outputFD = candidate.mlProbXicToPKPi()[2]; /// non-prompt score
378378
}
379379
/// Fill the ML outputScores and variables of candidate Xic
380-
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXic, ptCandidate, outputBkg, outputPrompt, outputFD, 0, 0.0, 0.0, false);
380+
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXic, ptCandidate, outputBkg, outputPrompt, outputFD, false);
381381
} else {
382-
registry.get<THnSparse>(HIST("hnXicVars"))->Fill(massXic, ptCandidate, candidate.chi2PCA(), candidate.decayLength(), candidate.decayLengthXY(), candidate.cpa(), 0, 0.0, 0.0, false);
382+
registry.get<THnSparse>(HIST("hnXicVars"))->Fill(massXic, ptCandidate, candidate.chi2PCA(), candidate.decayLength(), candidate.decayLengthXY(), candidate.cpa(), false);
383383
}
384384
}
385385
if (candidate.isSelXicToPiKP() >= selectionFlagXic) {
@@ -391,9 +391,9 @@ struct HfTaskXic {
391391
outputFD = candidate.mlProbXicToPiKP()[2]; /// non-prompt score
392392
}
393393
/// Fill the ML outputScores and variables of candidate
394-
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXic, ptCandidate, outputBkg, outputPrompt, outputFD, 0, 0.0, 0.0, false);
394+
registry.get<THnSparse>(HIST("hnXicVarsWithBdt"))->Fill(massXic, ptCandidate, outputBkg, outputPrompt, outputFD, false);
395395
} else {
396-
registry.get<THnSparse>(HIST("hnXicVars"))->Fill(massXic, ptCandidate, candidate.chi2PCA(), candidate.decayLength(), candidate.decayLengthXY(), candidate.cpa(), 0, 0.0, 0.0, false);
396+
registry.get<THnSparse>(HIST("hnXicVars"))->Fill(massXic, ptCandidate, candidate.chi2PCA(), candidate.decayLength(), candidate.decayLengthXY(), candidate.cpa(), false);
397397
}
398398
}
399399
} // thn for Xic

PWGLF/TableProducer/Nuspex/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,8 @@ o2physics_add_dpl_workflow(hyperhelium4sigma-reco-task
9898
SOURCES hyperhelium4sigmaRecoTask.cxx
9999
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
100100
COMPONENT_NAME Analysis)
101+
102+
o2physics_add_dpl_workflow(he3-lambda-analysis
103+
SOURCES he3LambdaAnalysis.cxx
104+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::EventFilteringUtils
105+
COMPONENT_NAME Analysis)

0 commit comments

Comments
 (0)