Skip to content

Commit e3871aa

Browse files
author
Luigi Dello Stritto
committed
Non-prompt Lc cross section code
1 parent 293e78c commit e3871aa

8 files changed

+1509
-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: 26 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,10 @@ 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 (ptspec[0] > ptrange[0] or ptspec[1] < ptrange[1]):
374+
continue
387375
fitcfg = entry
388376
break
389377
self.logger.debug("Using fit config for %i: %s", ipt, fitcfg)
@@ -491,14 +479,8 @@ def efficiency(self):
491479
legsl.SetTextSize(0.035)
492480

493481
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-
)
482+
stringbin2 = f"_{self.v_var2_binning}_{self.lvar2_binmin[imult]:.2f}_{self.lvar2_binmax[imult]:.2f}"
483+
legeffstring = f"{self.lvar2_binmin[imult]:.1f} #leq {self.p_latexbin2var} < {self.lvar2_binmax[imult]:.1f}"
502484

503485
if self.signal_loss:
504486
h_gen_pr_sl = lfileeff.Get("h_signal_loss_gen_pr" + stringbin2)
@@ -571,13 +553,9 @@ def efficiency(self):
571553
legeffFD.SetTextSize(0.035)
572554

573555
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],
556+
stringbin2 = f"_{self.v_var2_binning}_{self.lvar2_binmin[imult]:.2f}_{self.lvar2_binmax[imult]:.2f}"
557+
legeffFDstring = (
558+
f"{self.lvar2_binmin[imult]:.1f} #leq {self.p_latexbin2var} < {self.lvar2_binmax[imult]:.1f}"
581559
)
582560

583561
if self.signal_loss:
@@ -674,10 +652,8 @@ def plotter(self):
674652
hcross.GetYaxis().SetTitle(f"d#sigma/d#it{{p}}_{{T}} ({self.p_latexnhadron}) {self.typean}")
675653
hcross.SetName("hcross%d" % imult)
676654
hcross.GetYaxis().SetRangeUser(1e1, 1e10)
677-
legvsvar1endstring = "{:.1f} < {} < {:.1f}".format(
678-
self.lvar2_binmin[imult],
679-
self.p_latexbin2var,
680-
self.lvar2_binmax[imult],
655+
legvsvar1endstring = (
656+
f"{self.lvar2_binmin[imult]:.1f} < {self.p_latexbin2var} < {self.lvar2_binmax[imult]:.1f}"
681657
)
682658
legvsvar1.AddEntry(hcross, legvsvar1endstring, "LEP")
683659
hcross.Draw("same")
@@ -781,14 +757,12 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
781757
# pylint: disable=logging-not-lazy
782758
self.logger.warning("Number of events %d for mult bin %d" % (norm, imult))
783759

760+
if self.p_nevents is not None:
761+
norm = self.p_nevents
784762
if self.p_fprompt_from_mb:
785763
if imult == 0:
786-
fileoutcrossmb = "{}/finalcross{}{}mult0.root".format(
787-
self.d_resultsallpdata, self.case, self.typean
788-
)
764+
fileoutcrossmb = f"{self.d_resultsallpdata}/finalcross{self.case}{self.typean}mult0.root"
789765
output_prompt = []
790-
if self.p_nevents is not None:
791-
norm = self.p_nevents
792766
self.logger.warning("Corrected Number of events %d for mult bin %d" % (norm, imult))
793767
hf_pt_spectrum(
794768
self.p_anahpt,
@@ -803,6 +777,7 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
803777
nameyield,
804778
norm,
805779
self.p_sigmamb,
780+
self.p_crosssec_prompt,
806781
output_prompt,
807782
fileoutcrossmb,
808783
)
@@ -824,10 +799,12 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
824799
nameyield,
825800
norm,
826801
self.p_sigmamb,
802+
self.p_crosssec_prompt,
827803
output_prompt,
828804
fileoutcrossmult,
829805
)
830806
else:
807+
output_prompt = []
831808
hf_pt_spectrum(
832809
self.p_anahpt,
833810
self.p_br,
@@ -841,6 +818,7 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b
841818
nameyield,
842819
norm,
843820
self.p_sigmamb,
821+
self.p_crosssec_prompt,
844822
output_prompt,
845823
fileoutcrossmult,
846824
)
@@ -884,17 +862,13 @@ def plotternormyields(self):
884862
hcross.GetYaxis().SetTitleOffset(1.3)
885863
hcross.GetYaxis().SetTitle(f"Corrected yield/events ({self.p_latexnhadron}) {self.typean}")
886864
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],
865+
legvsvar1endstring = (
866+
f"{self.lvar2_binmin[imult]:.1f} #leq {self.p_latexbin2var} < {self.lvar2_binmax[imult]:.1f}"
891867
)
892868
legvsvar1.AddEntry(hcross, legvsvar1endstring, "LEP")
893869
hcross.Draw("same")
894870
legvsvar1.Draw()
895871
cCrossvsvar1.SaveAs(
896-
"{}/CorrectedYieldsNorm{}{}Vs{}.eps".format(
897-
self.d_resultsallpdata, self.case, self.typean, self.v_var_binning
898-
)
872+
f"{self.d_resultsallpdata}/CorrectedYieldsNorm{self.case}{self.typean}Vs{self.v_var_binning}.eps"
899873
)
900874
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)