Skip to content

Commit 8f9a9d8

Browse files
DelloStrittoLuigi Dello Stritto
andauthored
Non-prompt Lc cross section code (alisw#1034)
* Non-prompt Lc cross section code * Non-prompt Lc cross section code * fix --------- Co-authored-by: Luigi Dello Stritto <[email protected]>
1 parent 293e78c commit 8f9a9d8

8 files changed

+1512
-124
lines changed

machine_learning_hep/analysis/analyzerdhadrons.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,9 @@
2929
TF1,
3030
TH1,
3131
TH1F,
32-
TH2F,
33-
TArrow,
3432
TCanvas,
35-
TDirectory,
3633
TFile,
3734
TLegend,
38-
TLine,
39-
TPad,
40-
TPaveLabel,
41-
TPaveText,
42-
TText,
43-
gInterpreter,
4435
gPad,
4536
gROOT,
4637
gStyle,
@@ -131,7 +122,7 @@ def __init__(self, datap, case, typean, period):
131122
self.fit_func_bkg = {}
132123
self.fit_range = {}
133124

134-
self.path_fig = Path(f'{os.path.expandvars(self.d_resultsallpdata)}/fig')
125+
self.path_fig = Path(f"{os.path.expandvars(self.d_resultsallpdata)}/fig")
135126
for folder in ["qa", "fit", "roofit", "sideband", "signalextr", "fd", "uf"]:
136127
(self.path_fig / folder).mkdir(parents=True, exist_ok=True)
137128

@@ -147,6 +138,7 @@ def __init__(self, datap, case, typean, period):
147138

148139
self.p_anahpt = datap["analysis"]["anahptspectrum"]
149140
self.p_fd_method = datap["analysis"]["fd_method"]
141+
self.p_crosssec_prompt = datap["analysis"]["crosssec_prompt"]
150142
self.p_cctype = datap["analysis"]["cctype"]
151143
self.p_inputfonllpred = datap["analysis"]["inputfonllpred"]
152144
self.p_triggereff = datap["analysis"][self.typean].get("triggereff", [1])
@@ -160,7 +152,7 @@ def __init__(self, datap, case, typean, period):
160152
# region helpers
161153
def _save_canvas(self, canvas, filename):
162154
# folder = self.d_resultsallpmc if mcordata == 'mc' else self.d_resultsallpdata
163-
canvas.SaveAs(f'{self.path_fig}/{filename}')
155+
canvas.SaveAs(f"{self.path_fig}/{filename}")
164156

165157
def _save_hist(self, hist, filename, option=""):
166158
if not hist:
@@ -333,12 +325,10 @@ def fit(self):
333325

334326
if self.cfg("mass_roofit"):
335327
for entry in self.cfg("mass_roofit", []):
336-
if lvl := entry.get("level"):
337-
if lvl != level:
338-
continue
339-
if ptspec := entry.get("ptrange"):
340-
if ptspec[0] > ptrange[0] or ptspec[1] < ptrange[1]:
341-
continue
328+
if (lvl := entry.get("level")) and lvl != level:
329+
continue
330+
if (ptspec := entry.get("ptrange")) and (ptspec[0] > ptrange[0] or ptspec[1] < ptrange[1]):
331+
continue
342332
fitcfg = entry
343333
break
344334
self.logger.debug("Using fit config for %i: %s", ipt, fitcfg)
@@ -555,6 +545,7 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
555545
nameyield,
556546
selnorm,
557547
self.p_sigmamb,
548+
self.p_crosssec_prompt,
558549
output_prompt,
559550
fileoutcross,
560551
)

machine_learning_hep/analysis/analyzerdhadrons_mult.py

Lines changed: 28 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,10 @@
2828
from ROOT import (
2929
TF1,
3030
TH1,
31-
TH1D,
3231
TH1F,
33-
TH2F,
34-
TArrow,
3532
TCanvas,
36-
TDirectory,
3733
TFile,
3834
TLegend,
39-
TLine,
40-
TPad,
41-
TPaveLabel,
42-
TPaveText,
43-
TStyle,
44-
TText,
45-
gInterpreter,
46-
gPad,
4735
gROOT,
4836
gStyle,
4937
kBlue,
@@ -62,7 +50,6 @@
6250
)
6351
from machine_learning_hep.hf_pt_spectrum import hf_pt_spectrum
6452
from machine_learning_hep.logger import get_logger
65-
from machine_learning_hep.root import save_root_object
6653
from machine_learning_hep.utils.hist import get_dim, project_hist
6754

6855

@@ -144,7 +131,8 @@ def __init__(self, datap, case, typean, period):
144131
self.fit_func_bkg = {}
145132
self.fit_range = {}
146133

147-
self.path_fig = Path(f"fig/{self.case}/{self.typean}")
134+
# self.path_fig = Path(f"fig/{self.case}/{self.typean}")
135+
self.path_fig = Path(f"{os.path.expandvars(self.d_resultsallpdata)}/fig")
148136
for folder in ["qa", "fit", "roofit", "sideband", "signalextr", "fd", "uf"]:
149137
(self.path_fig / folder).mkdir(parents=True, exist_ok=True)
150138

@@ -156,6 +144,7 @@ def __init__(self, datap, case, typean, period):
156144

157145
self.p_anahpt = datap["analysis"]["anahptspectrum"]
158146
self.p_fd_method = datap["analysis"]["fd_method"]
147+
self.p_crosssec_prompt = datap["analysis"]["crosssec_prompt"]
159148
self.p_cctype = datap["analysis"]["cctype"]
160149
self.p_sigmamb = datap["analysis"]["sigmamb"]
161150
self.p_inputfonllpred = datap["analysis"]["inputfonllpred"]
@@ -190,7 +179,8 @@ def __init__(self, datap, case, typean, period):
190179
# region helpers
191180
def _save_canvas(self, canvas, filename):
192181
# folder = self.d_resultsallpmc if mcordata == 'mc' else self.d_resultsallpdata
193-
canvas.SaveAs(f"fig/{self.case}/{self.typean}/{filename}")
182+
# canvas.SaveAs(f"fig/{self.case}/{self.typean}/{filename}")
183+
canvas.SaveAs(f"{self.path_fig}/{filename}")
194184

195185
def _save_hist(self, hist, filename, option=""):
196186
if not hist:
@@ -378,12 +368,12 @@ def fit(self):
378368

379369
if self.cfg("mass_roofit"):
380370
for entry in self.cfg("mass_roofit", []):
381-
if lvl := entry.get("level"):
382-
if lvl != level:
383-
continue
384-
if ptspec := entry.get("ptrange"):
385-
if ptspec[0] > ptrange[0] or ptspec[1] < ptrange[1]:
386-
continue
371+
if (lvl := entry.get("level")) and lvl != level:
372+
continue
373+
if (ptspec := entry.get("ptrange")) and (
374+
ptspec[0] > ptrange[0] or ptspec[1] < ptrange[1]
375+
):
376+
continue
387377
fitcfg = entry
388378
break
389379
self.logger.debug("Using fit config for %i: %s", ipt, fitcfg)
@@ -491,14 +481,8 @@ def efficiency(self):
491481
legsl.SetTextSize(0.035)
492482

493483
for imult in range(self.p_nbin2):
494-
stringbin2 = "_{}_{:.2f}_{:.2f}".format(
495-
self.v_var2_binning, self.lvar2_binmin[imult], self.lvar2_binmax[imult]
496-
)
497-
legeffstring = "{:.1f} #leq {} < {:.1f}".format(
498-
self.lvar2_binmin[imult],
499-
self.p_latexbin2var,
500-
self.lvar2_binmax[imult],
501-
)
484+
stringbin2 = f"_{self.v_var2_binning}_{self.lvar2_binmin[imult]:.2f}_{self.lvar2_binmax[imult]:.2f}"
485+
legeffstring = f"{self.lvar2_binmin[imult]:.1f} #leq {self.p_latexbin2var} < {self.lvar2_binmax[imult]:.1f}"
502486

503487
if self.signal_loss:
504488
h_gen_pr_sl = lfileeff.Get("h_signal_loss_gen_pr" + stringbin2)
@@ -571,13 +555,9 @@ def efficiency(self):
571555
legeffFD.SetTextSize(0.035)
572556

573557
for imult in range(self.p_nbin2):
574-
stringbin2 = "_{}_{:.2f}_{:.2f}".format(
575-
self.v_var2_binning, self.lvar2_binmin[imult], self.lvar2_binmax[imult]
576-
)
577-
legeffFDstring = "{:.1f} #leq {} < {:.1f}".format(
578-
self.lvar2_binmin[imult],
579-
self.p_latexbin2var,
580-
self.lvar2_binmax[imult],
558+
stringbin2 = f"_{self.v_var2_binning}_{self.lvar2_binmin[imult]:.2f}_{self.lvar2_binmax[imult]:.2f}"
559+
legeffFDstring = (
560+
f"{self.lvar2_binmin[imult]:.1f} #leq {self.p_latexbin2var} < {self.lvar2_binmax[imult]:.1f}"
581561
)
582562

583563
if self.signal_loss:
@@ -674,10 +654,8 @@ def plotter(self):
674654
hcross.GetYaxis().SetTitle(f"d#sigma/d#it{{p}}_{{T}} ({self.p_latexnhadron}) {self.typean}")
675655
hcross.SetName("hcross%d" % imult)
676656
hcross.GetYaxis().SetRangeUser(1e1, 1e10)
677-
legvsvar1endstring = "{:.1f} < {} < {:.1f}".format(
678-
self.lvar2_binmin[imult],
679-
self.p_latexbin2var,
680-
self.lvar2_binmax[imult],
657+
legvsvar1endstring = (
658+
f"{self.lvar2_binmin[imult]:.1f} < {self.p_latexbin2var} < {self.lvar2_binmax[imult]:.1f}"
681659
)
682660
legvsvar1.AddEntry(hcross, legvsvar1endstring, "LEP")
683661
hcross.Draw("same")
@@ -781,14 +759,12 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
781759
# pylint: disable=logging-not-lazy
782760
self.logger.warning("Number of events %d for mult bin %d" % (norm, imult))
783761

762+
if self.p_nevents is not None:
763+
norm = self.p_nevents
784764
if self.p_fprompt_from_mb:
785765
if imult == 0:
786-
fileoutcrossmb = "{}/finalcross{}{}mult0.root".format(
787-
self.d_resultsallpdata, self.case, self.typean
788-
)
766+
fileoutcrossmb = f"{self.d_resultsallpdata}/finalcross{self.case}{self.typean}mult0.root"
789767
output_prompt = []
790-
if self.p_nevents is not None:
791-
norm = self.p_nevents
792768
self.logger.warning("Corrected Number of events %d for mult bin %d" % (norm, imult))
793769
hf_pt_spectrum(
794770
self.p_anahpt,
@@ -803,6 +779,7 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
803779
nameyield,
804780
norm,
805781
self.p_sigmamb,
782+
self.p_crosssec_prompt,
806783
output_prompt,
807784
fileoutcrossmb,
808785
)
@@ -824,10 +801,12 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
824801
nameyield,
825802
norm,
826803
self.p_sigmamb,
804+
self.p_crosssec_prompt,
827805
output_prompt,
828806
fileoutcrossmult,
829807
)
830808
else:
809+
output_prompt = []
831810
hf_pt_spectrum(
832811
self.p_anahpt,
833812
self.p_br,
@@ -841,6 +820,7 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
841820
nameyield,
842821
norm,
843822
self.p_sigmamb,
823+
self.p_crosssec_prompt,
844824
output_prompt,
845825
fileoutcrossmult,
846826
)
@@ -884,17 +864,13 @@ def plotternormyields(self):
884864
hcross.GetYaxis().SetTitleOffset(1.3)
885865
hcross.GetYaxis().SetTitle(f"Corrected yield/events ({self.p_latexnhadron}) {self.typean}")
886866
hcross.GetYaxis().SetRangeUser(1e-10, 1)
887-
legvsvar1endstring = "{:.1f} #leq {} < {:.1f}".format(
888-
self.lvar2_binmin[imult],
889-
self.p_latexbin2var,
890-
self.lvar2_binmax[imult],
867+
legvsvar1endstring = (
868+
f"{self.lvar2_binmin[imult]:.1f} #leq {self.p_latexbin2var} < {self.lvar2_binmax[imult]:.1f}"
891869
)
892870
legvsvar1.AddEntry(hcross, legvsvar1endstring, "LEP")
893871
hcross.Draw("same")
894872
legvsvar1.Draw()
895873
cCrossvsvar1.SaveAs(
896-
"{}/CorrectedYieldsNorm{}{}Vs{}.eps".format(
897-
self.d_resultsallpdata, self.case, self.typean, self.v_var_binning
898-
)
874+
f"{self.d_resultsallpdata}/CorrectedYieldsNorm{self.case}{self.typean}Vs{self.v_var_binning}.eps"
899875
)
900876
fileoutcrosstot.Close()

machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi_newformat.yml renamed to machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,10 +350,11 @@ LcpKpi:
350350

351351
analysis:
352352
anahptspectrum: "LctopKpi" #D0Kpi, DplusKpipi, DstarD0pi, DsKKpi, LctopKpi, LcK0Sp
353-
fd_method: "Nb" # fc, Nb, ext
353+
fd_method: "Nb" # fc, Nb, ext, dd, dd_N
354+
crosssec_prompt: true # true for prompt, false for non-prompt
354355
cctype: "pp"
355356
sigmamb: 59.4e+9 # 50.87e+9 pp5TeV, 57.8e+9 pp13TeV, 59.4e+9 pp Run3, pb
356-
inputfonllpred: data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root
357+
inputfonllpred: data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root #data/fonll/CutVarLc_pp13TeV_LHC23_pass4_wide.root
357358
dir_general_plots: analysis_plots
358359

359360
Run3analysis:

0 commit comments

Comments
 (0)