diff --git a/machine_learning_hep/analysis/analyzerdhadrons.py b/machine_learning_hep/analysis/analyzerdhadrons.py index 24672b0303..ac2ce043a7 100644 --- a/machine_learning_hep/analysis/analyzerdhadrons.py +++ b/machine_learning_hep/analysis/analyzerdhadrons.py @@ -304,7 +304,7 @@ def fit(self): self.lpt_finbinmax[ipt], lpt_probcutfin[ipt], ) - h_invmass = rfile.Get("hmass" + suffix) + h_invmass = rfile.Get("hmass_" + suffix) # Rebin h_invmass.Rebin(self.p_rebin[ipt]) if h_invmass.GetEntries() < 100: # TODO: reconsider criterion @@ -341,6 +341,7 @@ def fit(self): roows.var(fixpar).setConstant(True) if h_invmass.GetEntries() == 0: continue + roo_res, roo_ws = self._roofit_mass( level, h_invmass, @@ -418,7 +419,7 @@ def efficiency(self): print(self.n_fileff) lfileeff = TFile.Open(self.n_fileff) lfileeff.ls() - fileouteff = TFile.Open(f"{self.d_resultsallpmc}/{self.efficiency_filename}{self.case}{self.typean}.root", "recreate") + fileouteff = TFile.Open(f"{self.d_resultsallpmc}/efficiencies{self.case}{self.typean}.root", "recreate") cEff = TCanvas("cEff", "The Fit Canvas") cEff.SetCanvasSize(1900, 1500) cEff.SetWindowSize(500, 500) @@ -494,7 +495,7 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b if not os.path.exists(yield_filename): self.logger.fatal("Yield file %s could not be found", yield_filename) - fileouteff = f"{self.d_resultsallpmc}/{self.efficiency_filename}{self.case}{self.typean}.root" + fileouteff = f"{self.d_resultsallpmc}/efficiencies{self.case}{self.typean}.root" if not os.path.exists(fileouteff): self.logger.fatal("Efficiency file %s could not be found", fileouteff) @@ -506,12 +507,13 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b histonorm = TH1F("histonorm", "histonorm", 1, 0, 1) + filemass = TFile.Open(self.n_filemass) + hevents = filemass.Get("all_events") + hselevents = filemass.Get("sel_events") + if self.p_nevents is not None: selnorm = self.p_nevents else: - filemass = TFile.Open(self.n_filemass) - hevents = filemass.Get("all_events") - hselevents = filemass.Get("sel_events") norm, selnorm = self.calculate_norm(self.logger, hevents, hselevents) histonorm.SetBinContent(1, selnorm) self.logger.warning("Number of events %d", norm) @@ -554,9 +556,7 @@ def makenormyields(self): # pylint: disable=import-outside-toplevel, too-many-b f_fileoutcross = TFile.Open(fileoutcross) if f_fileoutcross: hcross = f_fileoutcross.Get("hptspectrum") - hcrossbr = f_fileoutcross.Get("hptspectrum_wo_br") fileoutcrosstot.cd() hcross.Write() - hcrossbr.Write() histonorm.Write() fileoutcrosstot.Close() diff --git a/machine_learning_hep/analysis/analyzerdhadrons_mult.py b/machine_learning_hep/analysis/analyzerdhadrons_mult.py index cd62e163eb..2350205ae9 100644 --- a/machine_learning_hep/analysis/analyzerdhadrons_mult.py +++ b/machine_learning_hep/analysis/analyzerdhadrons_mult.py @@ -50,7 +50,7 @@ ) from machine_learning_hep.hf_pt_spectrum import hf_pt_spectrum from machine_learning_hep.logger import get_logger -from machine_learning_hep.utils.hist import get_dim, project_hist +from machine_learning_hep.utils.hist import get_dim # pylint: disable=too-few-public-methods, too-many-instance-attributes, too-many-statements, fixme @@ -320,7 +320,7 @@ def fit(self): for ipt in range(len(self.lpt_finbinmin)): lpt_probcutfin[ipt] = self.lpt_probcutfin_tmp[self.bin_matching[ipt]] self.logger.debug("fitting %s - %i - %i", level, ipt, ibin2) - roows = self.roows.get(ipt) + roows = self.roows.get((ibin2, ipt)) if self.mltype == "MultiClassification": suffix = "%s%d_%d_%.2f%.2f%s_%.2f_%.2f" % ( self.v_var_binning, @@ -342,7 +342,7 @@ def fit(self): self.lvar2_binmin[ibin2], self.lvar2_binmax[ibin2], ) - h_invmass = rfile.Get("hmass" + suffix) + h_invmass = rfile.Get("hmass_" + suffix) # Rebin h_invmass.Rebin(self.p_rebin[ipt]) if h_invmass.GetEntries() < 100: # TODO: reconsider criterion @@ -378,12 +378,14 @@ def fit(self): break self.logger.debug("Using fit config for %i: %s", ipt, fitcfg) if datasel := fitcfg.get("datasel"): - h = rfile.Get(f"h_mass-pthf_{datasel}") - h_invmass = project_hist(h, [0], {1: (ipt + 1, ipt + 1)}) + h_invmass = rfile.Get(f"hmass_{datasel}_{suffix}") for fixpar in fitcfg.get("fix_params", []): if roows.var(fixpar): roows.var(fixpar).setConstant(True) + for par in fitcfg.get("free_params", []): + if roows.var(par): + roows.var(par).setConstant(False) if h_invmass.GetEntries() == 0: continue @@ -405,8 +407,8 @@ def fit(self): ) # if level == 'mc': # roo_ws.Print() - self.roo_ws[level][ipt] = roo_ws - self.roows[ipt] = roo_ws + self.roows[(ibin2, ipt)] = roo_ws.Clone() + self.roo_ws[(level, ibin2, ipt)] = roo_ws.Clone() if roo_res.status() == 0: if level in ("data", "mc_sig"): self.fit_mean[level][ipt] = roo_ws.var(self.p_param_names["gauss_mean"]).getValV() diff --git a/machine_learning_hep/data/data_run3/database_ml_parameters_Bplus_ml.yml b/machine_learning_hep/data/data_run3/database_ml_parameters_Bplus_ml.yml new file mode 100644 index 0000000000..b05c5041e4 --- /dev/null +++ b/machine_learning_hep/data/data_run3/database_ml_parameters_Bplus_ml.yml @@ -0,0 +1,882 @@ +--- +############################################################################# +## © Copyright CERN 2018. All rights not expressly granted are reserved. ## +## Author: Gian.Michele.Innocenti@cern.ch ## +## This program is free software: you can redistribute it and/or modify it ## +## under the terms of the GNU General Public License as published by the ## +## Free Software Foundation, either version 3 of the License, or (at your ## +## option) any later version. This program is distributed in the hope that ## +## it will be useful, but WITHOUT ANY WARRANTY; without even the implied ## +## warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ## +## See the GNU General Public License for more details. ## +## You should have received a copy of the GNU General Public License ## +## along with this program. if not, see . ## +############################################################################# + +BPlus_ml: + doml: true + mass: 5.279 + sel_reco_unp: "fPt > 1." + sel_reco_singletrac_unp: null + #sel_gen_unp: "fPt > 1. and fPt < 10." + sel_gen_unp: null + sel_cen_unp: null + sel_good_evt_unp: null + #sel_reco_skim: ["mlBkgScore < 0.2", "mlBkgScore < 0.4", "mlBkgScore < 0.6", "mlBkgScore < .08"] + sel_reco_skim: [null, null, null, null] # sel_skim_binmin bins + sel_gen_skim: [null, null, null, null] # sel_skim_binmin bins + sel_skim_binmin: [2, 4, 6, 12] # skimming pt bins (sel_skim_binmin bins) + sel_skim_binmax: [4, 6, 12, 24] # skimming pt bins (sel_skim_binmin bins) + var_binning: fPt + dofullevtmerge: false + + # obsolete, to be removed + var_cand: fCandidateSelFlag + bitmap_sel: + var_name: fFlagMcMatchRec + var_name_gen: fFlagMcMatchGen + var_name_origgen: fOriginMcGen + var_name_origrec: fOriginMcRec + var_isstd: isstd + var_ismcsignal: ismcsignal + var_ismcprompt: ismcprompt + var_ismcfd: ismcfd + var_ismcbkg: ismcbkg + var_ismcrefl: ismcrefl + isstd: [[1], []] + ismcsignal: [[0], []] + ismcprompt: [[0], []] + ismcfd: [[1], []] + ismcbkg: [[], [1]] + ismcrefl: [[1], [1]] # probably missing from tree creator + + #region dfs + dfs: + read: + evtorig: + level: all + index: fIndexHFBPCOLLBASES + trees: + O2hfbpcollbase: [fPosX, fPosY, fPosZ, fNumContrib, fMultZeqNTracksPV, fCentFT0A, fCentFT0C, fCentFT0M, fCentFV0A] + extra: + fIsEventReject: 0 + + reco: + level: all + index: fIndexHfHBpBases + trees: + O2hfbpbase: [fIndexHFBPCOLLBASES, fPt, fEta, fPhi, fM, fY] + O2hfbppar: [fCpa, fCpaXY, fChi2PCA, fDecayLength, fDecayLengthXY, fDecayLengthNormalised, fDecayLengthXYNormalised, fPtProng0, fPtProng1, fImpactParameter0, fImpactParameter1, fImpactParameterNormalised0, fImpactParameterNormalised1, fMaxNormalisedDeltaIP, fImpactParameterProduct, fNSigTpcTofPiExpPi] + O2hfbppard0: [fCpaCharm, fDecayLengthCharm, fImpactParameter0Charm, fImpactParameter1Charm, fImpactParameterProductCharm, fNSigTpcTofPiExpPiCharm, fNSigTpcTofKaExpKaCharm] + O2hfbpmld0: [fMlScoresCharm] + O2hfbpmc: + level: mc + vars: [fFlagMcMatchRec, fOriginMcRec] + O2hfbpsel: + level: mc + vars: [fCandidateSelFlag] + filter: "fPt > 0." + tags: + isstd: {var: fFlagMcMatchRec, req: 1, level: mc} + ismcsignal: {var: fFlagMcMatchRec, req: 1, abs: true, level: mc} + ismcbkg: {var: ismcsignal, req: 0, level: mc} + ismcprompt: {var: fOriginMcRec, req: 1, level: mc} + ismcfd: {var: fOriginMcRec, req: 2, level: mc} + extract_component: + - {var: fMlScoresCharm, newvar: mlScoreNonPrompt, component: 2,} + + gen: + level: mc + trees: + O2hfbppbase: [fPt, fEta, fPhi, fFlagMcMatchGen, fOriginMcGen] + tags: + isstd: {var: fFlagMcMatchGen, req: 1, level: mc} + ismcsignal: {var: fFlagMcMatchGen, req: 1, abs: true, level: mc} + ismcbkg: {var: ismcsignal, req: 0, level: mc} + ismcprompt: {var: fOriginMcGen, req: 1, level: mc} + ismcfd: {var: fOriginMcGen, req: 2, level: mc} + + write: + evtorig: + level: all + file: AnalysisResultsEvtOrig.parquet + evt: + level: all + source: evtorig + file: AnalysisResultsEvt.parquet + reco: + level: all + file: AnalysisResultsReco.parquet + gen: + level: mc + file: AnalysisResultsGen.parquet + + variables: + var_all: [fM, fCpa, fCpaXY, fChi2PCA, fDecayLength, fDecayLengthXY, fDecayLengthNormalised, fDecayLengthXYNormalised, fPtProng0, fPtProng1, fImpactParameter0, fImpactParameter1, fImpactParameterNormalised0, fImpactParameterNormalised1, fMaxNormalisedDeltaIP, fImpactParameterProduct, fNSigTpcTofPiExpPi, fCpaCharm, fDecayLengthCharm, fImpactParameter0Charm, fImpactParameter1Charm, fImpactParameterProductCharm, fNSigTpcTofPiExpPiCharm, fNSigTpcTofKaExpKaCharm, mlScoreNonPrompt] + var_training: [[mlScoreNonPrompt, fImpactParameterProduct, fImpactParameter1, fDecayLength, fCpa, fNSigTpcTofPiExpPi], [mlScoreNonPrompt, fImpactParameterProduct, fImpactParameter1, fDecayLength, fCpa, fNSigTpcTofPiExpPi], [mlScoreNonPrompt, fImpactParameterProduct, fImpactParameter1, fDecayLength, fCpa, fNSigTpcTofPiExpPi], [mlScoreNonPrompt, fImpactParameterProduct, fImpactParameter1, fDecayLength, fCpa, fNSigTpcTofPiExpPi]] + # sel_skim_binmin bins + var_boundaries: [fPtProng] + var_correlation: + - [fPtProng0] + - [fPtProng1] + var_signal: signal + var_class: class + var_inv_mass: fM + var_y: fY + var_evt_sel: fIsEventReject + var_cuts: + - [fPtProng0, lt, null] + - [fPtProng1, lt, null] + + plot_options: + prob_cut_scan: + fPtProng0: + xlim: + - 0 + - 10 + fPtProng1: + xlim: + - 0 + - 10 + eff_cut_scan: + fPtProng0: + xlim: + - 0 + - 10 + fPtProng1: + xlim: + - 0 + - 10 + + files_names: + namefile_unmerged_tree: AO2D.root + namefile_reco: AnalysisResultsReco.parquet + namefile_evt: AnalysisResultsEvt.parquet + namefile_collcnt: AnalysisResultsCollCnt.parquet + namefile_bccnt: AnalysisResultsBcCnt.parquet + namefile_evtvalroot: AnalysisResultsROOTEvtVal.root + namefile_evtorig: AnalysisResultsEvtOrig.parquet + namefile_gen: AnalysisResultsGen.parquet + namefile_reco_applieddata: AnalysisResultsRecoAppliedData.parquet + namefile_reco_appliedmc: AnalysisResultsRecoAppliedMC.parquet + namefile_mcweights: mcweights.root + treeoutput: "Bptree" + histofilename: "masshisto.root" + efffilename: "effhisto.root" + respfilename: "resphisto.root" + crossfilename: "cross_section_tot.root" + resultfilename: "results.root" + + #region multi + multi: + data: + nprocessesparallel: 60 + maxfiles: [-1] #list of periods + chunksizeunp: [100] #list of periods + chunksizeskim: [100] #list of periods + fracmerge: [1.0, 1.0, 1.0, 1.0] #list of periods + seedmerge: [12] #list of periods + period: [LHC24ao] #list of periods + select_period: [1] + # prefix_dir: /data2/MLhep/real/train_235436/ + prefix_dir: /data2/MLhep/trains/400294/ + unmerged_tree_dir: [alice/] #list of periods + pkl: ['${USER}/train_400294/Bpml/pkl'] #list of periods + pkl_skimmed: ['${USER}/train_400294/Bpml/pklsk'] #list of periods + pkl_skimmed_merge_for_ml: ['${USER}/train_400294/Bpml/pklskml'] #list of periods + pkl_skimmed_merge_for_ml_all: '${USER}/train_400294/Bpml/pp_data_mltot' + pkl_evtcounter_all: '${USER}/train_400294/Bpml/pp_data_evttot' + mcreweights: [../Analyses] #list of periods + mc: + nprocessesparallel: 60 + maxfiles: [-1] #list of periods + chunksizeunp: [100] #list of periods + chunksizeskim: [100] #list of periods + fracmerge: [1.0, 1.0, 1.0, 1.0] #list of periods + seedmerge: [12] #list of periods + period: [LHC24i4] #list of periods + select_period: [1] + # prefix_dir: /data2/MLhep/sim/train_235437/ + prefix_dir: /data2/MLhep/trains/400102/ + unmerged_tree_dir: [alice/] + pkl: ['${USER}/train_400102/Bpml/pkl'] #list of periods + pkl_skimmed: ['${USER}/train_400102/Bpml/pklsk'] #list of periods + pkl_skimmed_merge_for_ml: ['${USER}/train_400102/Bpml/pklskml'] #list of periods + pkl_skimmed_merge_for_ml_all: '${USER}/pass1/Bpml/pp_mc_prod_mltot' + pkl_evtcounter_all: '${USER}/pass1/Bpml/pp_mc_prod_evttot' + mcreweights: [../Analyses] #list of periods + + ml: + evtsel: null # TODO: fIsEventReject == 0 + triggersel: + data: null + mc: null + + nclasses: [100000, 100000] + equalise_sig_bkg: True + mult_bkg: [1, 2, 3, 4] + sampletags: [0, 1] + sel_bkg: (fM >5.35 or fM <5.22) # for plotting significance; should agree with bkg selection in sel_ml + sel_ml: [(fM >5.35 or fM <5.22), ismcsignal == 1] + class_labels: [bkg, sig] + nkfolds: 5 + rnd_shuffle: 12 + rnd_splt: 12 + rnd_all: 12 + test_frac: 0.2 + binmin: [2, 4, 6, 12] # must be equal to sel_skim_binmin (sel_skim_binmin bins) + binmax: [4, 6, 12, 24] # must be equal to sel_skim_binmax (sel_skim_binmin bins) + mltype: BinaryClassification + ncorescrossval: 10 + prefix_dir_ml: /data2/ldellost/MLhep_bp/ + mlplot: mlplot + mlout: mlout + + opt: + isFONLLfromROOT: true + filename_fonll: 'data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root' # file with FONLL predictions + fonll_particle: 'hD0Kpipred' + fonll_pred: 'max' # edge of the FONLL prediction + FF: 0.6086 # fragmentation fraction + sigma_MB: 57.8e-3 # Minimum Bias cross section (pp) 50.87e-3 [b], 1 for Pb-Pb + Taa: 1 # 23260 [b^-1] in 0-10% Pb-Pb, 3917 [b^-1] in 30-50% Pb-Pb, 1 for pp + BR: 3.95e-2 # branching ratio of the decay D0 -> K- pi+ + f_prompt: 0.9 # estimated fraction of prompt candidates + bkg_data_fraction: 0.1 # fraction of real data used in the estimation + num_steps: 111 # number of steps used in efficiency and signif. estimation + bkg_function: pol2 # fit function for bkg (among TH1 predefined fit functions, e.g. expo, pol1, pol2, ...) + save_fit: True # save bkg fits with the various cuts on ML output + raahp: [1, 1, 1, 1] # sel_skim_binmin bins + # presel_gen_eff: "abs(fY) < 0.5 and abs(fPosZ) < 10" + presel_gen_eff: "fPt > 0." # TODO: fix + + mlapplication: + data: + prefix_dir_app: /data2/ldellost/MLHEP_bp_fixTOF/ + pkl_skimmed_dec: [LHC22pp/MLapplication/prod_LHC22o/skpkldecdata] #list of periods + pkl_skimmed_decmerged: [LHC22pp/MLapplication/prod_LHC22o/skpkldecdatamerged] #list of periods + mc: + prefix_dir_app: /data2/ldellost/MLHEP_bp_fixTOF/ + pkl_skimmed_dec: [LHC22pp_mc/MLapplication/LHC24d3a/skpkldecmc, LHC22pp_mc/MLapplication/LHC24d3b/skpkldecmc] #list of periods + pkl_skimmed_decmerged: [LHC22pp_mc/MLapplication/LHC24d3a/skpkldecmcmerged, LHC22pp_mc/MLapplication/LHC24d3b/skpkldecmcmerged] #list of periods + modelname: xgboost + modelsperptbin: [xgboost_classifierBpml_pp_dfselection_fPt_2.0_4.0.sav, xgboost_classifierBpml_pp_dfselection_fPt_4.0_6.0.sav, xgboost_classifierBpml_pp_dfselection_fPt_6.0_12.0.sav, xgboost_classifierBpml_pp_dfselection_fPt_12.0_24.0.sav] # sel_skim_binmin bins + probcutpresel: + probcutpresel: + data: [0.5, 0.5, 0.5, 0.5] #list of nbins + mc: [0.5, 0.5, 0.5, 0.5] #list of nbins + probcutoptimal: [0.5, 0.5, 0.5, 0.5] #list of nbins + + #region analysis + analysis: + anahptspectrum: "D0Kpi" #D0Kpi, DplusKpipi, DstarD0pi, DsKKpi, LctopKpi, LcK0Sp + fd_method: "Nb" #fc, Nb + cctype: "pp" + inputfonllpred: data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root + dir_general_plots: /data2/ldellost/data/analysis_plots + + jet_obs: &jet_default + sel_an_binmin: [2, 4, 6, 12] # hadron pt bins (sel_an_binmin bins) + sel_an_binmax: [4, 6, 12, 24] # hadron pt bins (sel_an_binmin bins) + bins_ptjet: [5, 7, 15, 30, 50] + + sigmamb: 57.8e-3 #NB: multiplied by 1e12 before giving to HFPtSpectrum! + + # TODO: add separate binnings for MC and data + observables: + zg: + bins_fix: [6, -.1, .5] + label: 'z_{g}' + nsd: + bins_fix: [10, -.5, 9.5] + label: 'N_{sd}' + rg: + bins_fix: [11, -.1, 1.] + label: 'R_{g}' + zpar: + bins_fix: [10, 0., 1.] + label: 'z_{#parallel}' + dr: + bins_fix: [10, 0., 1.] + label: '#Deltar' + lntheta: + bins_fix: [10, 0., 5.] + label: '-ln(#theta)' + arraycols: [3] + lnkt: + bins_fix: [10, -8., 2.] + label: 'ln k_{T}' + arraycols: [3] + lntheta-lnkt: + arraycols: [3, 4] + + data_selections: + mcsig: + level: mc + query: '(isd0 & seld0) or (isd0bar & seld0bar)' + mcrefl: + level: mc + query: '(isd0 & seld0bar) or (isd0bar & seld0))' + + fit_levels: ['mcsig', 'mcrefl', 'mc', 'data'] + pdf_names: + pdf_sig: "sig" + pdf_bkg: "bkg" + param_names: + mass: "m" + gauss_mean: "mean" + gauss_sigma: "sigma_g1" + double_gauss_sigma: "sigma_wide" + fraction_refl: "frac_refl" + + mass_roofit: + - level: mcsig + datasel: mcsig + range: [1.69, 2.04] # systematics? or propagate bg fit uncertainty directly? + components: + sig: + fn: 'Gaussian::peak(m[1.,5.], mean[1.85,1.89], sigma_g1[.01,.08])' + bkg: + fn: 'Gaussian::wide(m, mean, sigma_wide[.05,1.])' + model: + fn: 'SUM::sig(frac_wide[0.,.3]*wide, peak)' + - level: mcrefl + ptrange: [1., 3.] + datasel: mcrefl + range: [1.69, 2.04] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.7,1.865], sigma_l[.01,.1])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.0], sigma_r[.01,.1])' + model: + fn: 'SUM::refl(frac_l[0.1,.9]*refl_l, refl_r)' + - level: mcrefl + ptrange: [3., 4.] + datasel: mcrefl + range: [1.68, 2.06] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.7,1.865], sigma_l[.01,.2])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.0], sigma_r[.01,.2])' + model: + fn: 'SUM::refl(frac_l[0.,1.]*refl_l, refl_r)' + - level: mcrefl + ptrange: [4., 5.] + datasel: mcrefl + range: [1.64, 2.08] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.7,1.865], sigma_l[.01,.2])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.0], sigma_r[.01,.2])' + model: + fn: 'SUM::refl(frac_l[0.,1.]*refl_l, refl_r)' + - level: mcrefl + ptrange: [5., 6.] + datasel: mcrefl + range: [1.64, 2.10] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.8,1.865], sigma_l[.01,.2])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.0], sigma_r[.01,.2])' + model: + fn: 'SUM::refl(frac_l[0.,1.]*refl_l, refl_r)' + - level: mcrefl + ptrange: [6., 8.] + datasel: mcrefl + range: [1.60, 2.14] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.7,1.865], sigma_l[.01,.2])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.1], sigma_r[.01,.2])' + model: + fn: 'SUM::refl(frac_l[0.,1.]*refl_l, refl_r)' + - level: mcrefl + ptrange: [8., 12.] + datasel: mcrefl + range: [1.52, 2.30] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.7,1.865], sigma_l[.01,.2])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.1], sigma_r[.01,.2])' + model: + fn: 'SUM::refl(frac_l[0.,1.]*refl_l, refl_r)' + - level: mcrefl + ptrange: [12., 48.] + datasel: mcrefl + range: [1.40, 2.4] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.7,1.865], sigma_l[.01,.2])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.1], sigma_r[.01,.2])' + model: + fn: 'SUM::refl(frac_l[0.,1.]*refl_l, refl_r)' + - level: mc + ptrange: [1., 3.] + range: [1.69, 2.04] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - level: mc + ptrange: [3., 4.] + range: [1.68, 2.06] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - level: mc + ptrange: [4., 5.] + range: [1.64, 2.08] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - level: mc + ptrange: [5., 6.] + range: [1.64, 2.10] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - level: mc + ptrange: [6., 8.] + range: [1.60, 2.14] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - level: mc + ptrange: [8., 12.] + range: [1.52, 2.30] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - level: mc + ptrange: [12., 48.] + range: [1.40, 2.40] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - ptrange: [1., 2.] + per_ptjet: true + range: [1.72, 2.02] + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + fix_params_ptjet: ['mean', 'sigma_g1'] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + - ptrange: [2., 3.] + per_ptjet: true + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + fix_params_ptjet: ['mean', 'sigma_g1'] + range: [1.72, 2.04] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + - ptrange: [3., 4.] + per_ptjet: true + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + fix_params_ptjet: ['mean', 'sigma_g1'] + range: [1.72, 2.06] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + - ptrange: [4., 5.] + per_ptjet: true + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + fix_params_ptjet: ['mean', 'sigma_g1'] + # fix_params: ['mean', 'sigma_g1', 'frac_refl'] + range: [1.72, 2.08] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + - ptrange: [5., 6.] + per_ptjet: true + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + fix_params_ptjet: ['mean', 'sigma_g1'] + range: [1.72, 2.10] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + - ptrange: [6., 8.] + per_ptjet: true + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + fix_params_ptjet: ['mean', 'sigma_g1'] + range: [1.72, 2.14] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + - range: [1.72, 2.20] + per_ptjet: true + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + fix_params_ptjet: ['mean', 'sigma_g1'] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + + sidesub: + - ptrange: [24., 100.] + regions: + left: [-2., -2.] + signal: [-2., 2.] + right: [3., 5.] + - regions: + left: [-5.5, -3.] + signal: [-2., 2.] + right: [3., 5.5] + + mass_fit: + func_sig: 'gaus' + func_bkg: 'expo' + # par_start: {1: 1.86} + # par_fix: {1: 1.86} + par_constrain: {1: [1.85, 1.87], 2: [.01, .08]} + range: [1.695, 2.06] + mass_fit_lim: [1.5, 2.2] # histogram range of the invariant mass distribution [GeV/c^2] + bin_width: 0.05 # bin width of the invariant mass histogram + efficiency: + extra_cols: ['isd0', 'isd0bar', 'seld0', 'seld0bar'] + filter_det: '(isd0 & seld0) or (isd0bar & seld0bar)' + index_match: fIndexArrayD0CMCPJETOS_hf + store_matched: true + + unfolding_iterations: 8 + + frac_mcana: .2 + fd_root: '/data2/vkucera/powheg/trees_powheg_fd_central.root' + fd_parquet: '/data2/ldellost/powheg/trees_powheg_fd_central.parquet' + + # obsolete? + proc_type: Jets + useperiod: [1, 1] #list of periods + usejetptbinned_deff: false + doeff_resp: true #efficiency correction for the response matrix + unmatched_gen: true + latexnamehadron: "D^{0}" + latexnamedecay: "K^{#minus} #pi^{#plus}" + var_binning2: pt_jet + var_binning2_gen: pt_gen_jet + latexbin2var: "#it{p}_{T}^{jet ch}" + sel_binmin2_reco: [7.0, 15.0, 30.] # rec jet pt bins (sel_binmin2_reco bins) + sel_binmax2_reco: [15.0, 30., 50.] # rec jet pt bins (sel_binmin2_reco bins) + sel_binmin2_gen: [7.0, 15.0, 30.] # gen jet pt bins (sel_binmin2_gen bins) + sel_binmax2_gen: [15.0, 30., 50.] # gen jet pt bins (sel_binmin2_gen bins) + var_binningshape: zg_jet + var_binningshape_gen: zg_gen_jet + var_shape_latex: "#it{z}_{g}" + sel_binminshape_reco: [-0.1, 0.1, 0.2, 0.3, 0.4] + sel_binmaxshape_reco: [0.1, 0.2, 0.3, 0.4, 0.5] + sel_binminshape_gen: [-0.1, 0.1, 0.2, 0.3, 0.4] + sel_binmaxshape_gen: [0.1, 0.2, 0.3, 0.4, 0.5] + sel_closure_frac: 0.2 + triggerbit: INT7 + #jetsel_gen: "abs(y_cand) < 0.8 and abs(z_vtx_gen) < 10 and abs(eta_jet) < 0.5" + #jetsel_sim: "abs(y_cand) < 0.8 and abs(eta_jet) < 0.5" # jet selection in simulations + #jetsel_reco: "abs(y_cand) < 0.8 and abs(z_vtx_reco) < 10 and abs(eta_jet) < 0.5" + #jetsel_gen_matched_reco: "abs(eta_gen_jet) < 5.0" + jetsel_gen: "abs(y_cand) < 0.5 and abs(z_vtx_gen) < 10 and abs(eta_jet) < 0.5" + jetsel_sim: "abs(y_cand) < 0.5 and abs(eta_jet) < 0.5" # jet selection in simulations + jetsel_reco: "abs(y_cand) < 0.5 and abs(z_vtx_reco) < 10 and abs(eta_jet) < 0.5" + jetsel_gen_matched_reco: "abs(y_cand) < 0.5 and abs(z_vtx_gen) < 10 and abs(eta_gen_jet) < 0.5" + evtsel: null # fIsEventReject==0 + triggersel: + data: "trigger_hasbit_INT7==1" + mc: null + data: &data_out_default + runselection: [null] #FIXME + results: ['/home/${USER}/mlhep/data/test/D0ml/resultsMBjetvspt'] #list of periods + resultsallp: '/home/${USER}/mlhep/data/test/D0ml/resultsMBjetvspt_all' + mc: &mc_out_default + runselection: [null, null] #FIXME + results: ['/home/${USER}/mlhep/data/mctest/D0ml/resultsMBjetvspt', '/home/${USER}/mlhep/data/mctest/D0ml/resultsMBjetvspt'] #list of periods + resultsallp: '/home/${USER}/mlhep/data/mctest/D0ml/resultsMBjetvspt_all' + data_proc: # alternative processor output used as the analyzer input + <<: *data_out_default + mc_proc: # alternative processor output used as the analyzer input + <<: *mc_out_default + + # simple fitter START + sgnfunc: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # kGaus=0, k2Gaus=1, k2GausSigmaRatioPar=2 (sel_an_binmin bins) + bkgfunc: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # kExpo=0, kLin=1, kPol2=2, kNoBk=3, kPow=4, kPowEx=5 (sel_an_binmin bins) + masspeak: 1.864 + massmin: [1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66, 1.66] # sel_an_binmin bins, fit region of the invariant mass distribution [GeV/c^2] + massmax: [2.06, 2.06, 2.06, 2.06, 2.06, 2.06, 2.06, 2.06, 2.06, 2.06, 2.06, 2.06] # sel_an_binmin bins, fit region of the invariant mass distribution [GeV/c^2] + rebin: [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] # sel_an_binmin bins + fix_mean: [false, false, false, false, false, false, false, false, false, false, false, false] # sel_an_binmin bins + masspeaksec: 1.864 + + # If SetArraySigma true: sigma_initial is taken from sigmaarray; false: sigma_initial is taken from MC + # If SetFixGaussianSigma true: sigma fixed to sigma_initial + # SetFixGaussianSigma: [false, false, false, false, false, false, false, false, false, false, false, false] # sel_an_binmin bins + SetFixGaussianSigma: [true, true, true, true, true, true, true, true, true, true, true, true] # sel_an_binmin bins + SetArraySigma: [false, false, false, false, false, false, false, false, false, false, false, false] # sel_an_binmin bins + sigmaarray: [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] # initial sigma (sel_an_binmin bins) + + fix_sigmasec: [true, true, true, true, true, true, true, true, true, true, true, true] # sel_an_binmin bins + sigmaarraysec: [0.07497, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] # sel_an_binmin bins + use_reflections: true + # simple fitter END + + signal_sigma: 2.0 + sigma_scale: 0.9545 + sideband_sigma_1_left: 4 + sideband_sigma_2_left: 9 + sideband_sigma_1_right: 4 + sideband_sigma_2_right: 9 + sidebandleftonly: false + + niterunfolding: 15 + niterunfoldingchosen: 4 + + branching_ratio: 3.95e-2 + xsection_inel: 57.8 # (mb) cross-section of minimum-bias events + + doprior: false + domodeldep: false + path_modeldep: /home/nzardosh/PYTHIA_Sim/PYTHIA8_Simulations/Plots/D0_Substructure_Simulations_Output.root + + powheg_path_nonprompt: /data/POWHEG/trees_powheg_fd_central.root + + powheg_path_prompt: /data/POWHEG/trees_powheg_pr_central.root + powheg_prompt_variations_path: /data/POWHEG/trees_powheg_pr_ + powheg_prompt_variations: ["F1_R05", "F05_R1", "F2_R1", "F1_R2", "F2_R2", "F05_R05", "Mhigh", "Mlow"] + + pythia8_prompt_variations_path: /data/PYTHIA8/trees_pythia8_pr_ + pythia8_prompt_variations: ["default", "charm_lo"] #["default","colour0soft"] + pythia8_prompt_variations_legend: ["PYTHIA 8 (Monash)", "PYTHIA 8 charm LO"] # ["PYTHIA 8 (Monash)","PYTHIA 8 SoftQCD, mode 0"] + + variations_db: ./data/data_prod_20210223/database_variations_D0pp_jet_zg.yml + + # Additional cuts applied before mass histogram is filled + use_cuts: False + # cuts: # (sel_an_binmin bins) + # - Null + # - Null + # - Null + # - Null + # - Null + # - Null + # - Null + # - Null + + jet_qa: + <<: *jet_default + + jet_rg: + <<: *jet_default + var_binningshape: rg_jet + var_binningshape_gen: rg_gen_jet + var_shape_latex: "#it{R}_{g}" + sel_binminshape_reco: [-0.1, 0., 0.1, 0.2, 0.3] + sel_binmaxshape_reco: [0., 0.1, 0.2, 0.3, 0.4] + sel_binminshape_gen: [-0.1, 0., 0.1, 0.2, 0.3] + sel_binmaxshape_gen: [0., 0.1, 0.2, 0.3, 0.4] + data: &data_out_rg + <<: *data_out_default + results: [/data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/rg/default/default/pp_2016_data/593_20210223-2051/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/rg/default/default/pp_2017_data/593_20210223-2051/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/rg/default/default/pp_2018_data/593_20210223-2051/resultsMBjetvspt] #list of periods + resultsallp: /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/rg/default/default/pp_data/resultsMBjetvspt + mc: &mc_out_rg + <<: *mc_out_default + results: [/data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/rg/default/default/pp_2016_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/rg/default/default/pp_2017_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/rg/default/default/pp_2018_mc_prodD2H/594_20210301-1015/resultsMBjetvspt] #list of periods + resultsallp: /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/rg/default/default/pp_mc_prodD2H/resultsMBjetvspt + data_proc: # alternative processor output used as the analyzer input + <<: *data_out_rg + mc_proc: # alternative processor output used as the analyzer input + <<: *mc_out_rg + variations_db: ./data/data_prod_20210223/database_variations_D0pp_jet_rg.yml + + jet_nsd: + <<: *jet_default + var_binningshape: nsd_jet + var_binningshape_gen: nsd_gen_jet + var_shape_latex: "#it{n}_{SD}" + sel_binminshape_reco: [-0.5, 0.5, 1.5, 2.5, 3.5] + sel_binmaxshape_reco: [0.5, 1.5, 2.5, 3.5, 4.5] + sel_binminshape_gen: [-0.5, 0.5, 1.5, 2.5, 3.5] + sel_binmaxshape_gen: [0.5, 1.5, 2.5, 3.5, 4.5] + data: &data_out_nsd + <<: *data_out_default + results: [/data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/nsd/default/default/pp_2016_data/593_20210223-2051/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/nsd/default/default/pp_2017_data/593_20210223-2051/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/nsd/default/default/pp_2018_data/593_20210223-2051/resultsMBjetvspt] #list of periods + resultsallp: /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/nsd/default/default/pp_data/resultsMBjetvspt + mc: &mc_out_nsd + <<: *mc_out_default + results: [/data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/nsd/default/default/pp_2016_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/nsd/default/default/pp_2017_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/nsd/default/default/pp_2018_mc_prodD2H/594_20210301-1015/resultsMBjetvspt] #list of periods + resultsallp: /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/nsd/default/default/pp_mc_prodD2H/resultsMBjetvspt + data_proc: # alternative processor output used as the analyzer input + <<: *data_out_nsd + mc_proc: # alternative processor output used as the analyzer input + <<: *mc_out_nsd + variations_db: ./data/data_prod_20210223/database_variations_D0pp_jet_nsd.yml + + jet_FF: + <<: *jet_default + + pythia8_prompt_variations: ["default", "colour2soft"] + pythia8_prompt_variations_legend: ["PYTHIA 8 (Monash)", "PYTHIA 8 SoftQCD, mode 2"] + + sel_binmin2_reco: [5.0, 7.0, 10., 15.0] # rec jet pt bins (sel_binmin2_reco bins) + sel_binmax2_reco: [7.0, 10., 15.0, 50.] # rec jet pt bins (sel_binmin2_reco bins) + sel_binmin2_gen: [5.0, 7.0, 10., 15.0] # gen jet pt bins (sel_binmin2_gen bins) + sel_binmax2_gen: [7.0, 10., 15.0, 50.] # gen jet pt bins (sel_binmin2_gen bins) + var_binningshape: z + var_binningshape_gen: z_gen + var_shape_latex: "#it{z}_{#parallel}^{ch}" + sel_binminshape_reco: [0.2001, 0.4001, 0.5001, 0.6001, 0.7001, 0.8001, 0.9001] + sel_binmaxshape_reco: [0.4001, 0.5001, 0.6001, 0.7001, 0.8001, 0.9001, 1.0001] + sel_binminshape_gen: [0.2001, 0.4001, 0.5001, 0.6001, 0.7001, 0.8001, 0.9001] + sel_binmaxshape_gen: [0.4001, 0.5001, 0.6001, 0.7001, 0.8001, 0.9001, 1.0001] + data: &data_out_ff + <<: *data_out_default + results: [/data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/ff/default/default/pp_2016_data/593_20210223-2051/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/ff/default/default/pp_2017_data/593_20210223-2051/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/ff/default/default/pp_2018_data/593_20210223-2051/resultsMBjetvspt] #list of periods + resultsallp: /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/ff/default/default/pp_data/resultsMBjetvspt + mc: &mc_out_ff + <<: *mc_out_default + results: [/data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/ff/default/default/pp_2016_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/ff/default/default/pp_2017_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/ff/default/default/pp_2018_mc_prodD2H/594_20210301-1015/resultsMBjetvspt] #list of periods + resultsallp: /data/DerivedResultsJets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/ff/default/default/pp_mc_prodD2H/resultsMBjetvspt + data_proc: # alternative processor output used as the analyzer input + <<: *data_out_ff + mc_proc: # alternative processor output used as the analyzer input + <<: *mc_out_ff + variations_db: ./data/data_prod_20210223/database_variations_D0pp_jet_FF.yml + + jet_r_shape_2_6: + <<: *jet_default + lc_d0_ratio: true #make ratio of D0 and corresponding Lc analysis + xsec: false + use_inclusive_systematics: true + + pythia8_prompt_variations: ["default", "colour2soft"] + pythia8_prompt_variations_legend: ["PYTHIA 8 (Monash)", "PYTHIA 8 SoftQCD, mode 2"] + + var_binningshape: delta_r_jet + var_binningshape_gen: delta_r_gen_jet + var_shape_latex: "#it{r}" + sel_binminshape_reco: [0., 0.5, 0.1] + sel_binmaxshape_reco: [0.5, 0.1, 0.2] + sel_binminshape_gen: [0., 0.5, 0.1] + sel_binmaxshape_gen: [0.5, 0.1, 0.2] + sel_an_binmin: [2, 3, 4, 5] # hadron pt bins (sel_an_binmin bins) + sel_an_binmax: [3, 4, 5, 6] # hadron pt bins (sel_an_binmin bins) + binning_matching: [1, 1, 2, 2] # mapping to skimming pt bins (sel_an_binmin bins) + sel_binmin2_reco: [3.0, 5.0, 7.0, 15.0] # rec jet pt bins (sel_binmin2_reco bins) + sel_binmax2_reco: [5.0, 7.0, 15.0, 30.] # rec jet pt bins (sel_binmin2_reco bins) + sel_binmin2_gen: [3.0, 5.0, 7.0, 15.0] # gen jet pt bins (sel_binmin2_gen bins) + sel_binmax2_gen: [5.0, 7.0, 15.0, 30.] # gen jet pt bins (sel_binmin2_gen bins) + cuts: + - Null + - Null + - Null + - Null + data: &data_out_r_shape_2_6 + <<: *data_out_default + results: [/data/Derived_testResults/Jets/D0kAnywithJets_Vit/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2016_data/593_20210223-2051/resultsMBjetvspt, /data/Derived_testResults/Jets/D0kAnywithJets_Vit/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2017_data/593_20210223-2051/resultsMBjetvspt, /data/Derived_testResults/Jets/D0kAnywithJets_Vit/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2018_data/593_20210223-2051/resultsMBjetvspt] #list of periods + resultsallp: /data/Derived_testResults/Jets/D0kAnywithJets_Vit/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_data/resultsMBjetvspt + + resultslc: /data/Derived_testResults/Jets/Lc/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_data/resultsMBjetvspt + + mc: &mc_out_r_shape_2_6 + <<: *mc_out_default + results: [/data/Derived_testResults/Jets/D0kAnywithJets_Vit/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2016_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/Derived_testResults/Jets/D0kAnywithJets_Vit/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2017_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/Derived_testResults/Jets/D0kAnywithJets_Vit/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2018_mc_prodD2H/594_20210301-1015/resultsMBjetvspt] #list of periods + resultsallp: /data/Derived_testResults/Jets/D0kAnywithJets_Vit/2_6/vAN-20210223_ROOT6-1/r_shape/default/default/pp_mc_prodD2H/resultsMBjetvspt + resultsinclusive: /data/Derived_testResults/Jets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/r_shape_fullpt/default/default/pp_mc_prodD2H/resultsMBjetvspt + data_proc: # alternative processor output used as the analyzer input + <<: *data_out_r_shape_2_6 + mc_proc: # alternative processor output used as the analyzer input + <<: *mc_out_r_shape_2_6 + variations_db: ./data/data_prod_20210223/database_variations_D0pp_jet_r_shape_2_6.yml + + jet_r_shape_6_12: + <<: *jet_default + lc_d0_ratio: true + xsec: false + use_inclusive_systematics: true + + pythia8_prompt_variations: ["default", "colour2soft"] + pythia8_prompt_variations_legend: ["PYTHIA 8 (Monash)", "PYTHIA 8 SoftQCD, mode 2"] + + var_binningshape: delta_r_jet + var_binningshape_gen: delta_r_gen_jet + var_shape_latex: "#it{r}" + sel_binminshape_reco: [0., 0.5, 0.1] + sel_binmaxshape_reco: [0.5, 0.1, 0.2] + sel_binminshape_gen: [0., 0.5, 0.1] + sel_binmaxshape_gen: [0.5, 0.1, 0.2] + + sel_an_binmin: [6, 7, 8, 10] # hadron pt bins (sel_an_binmin bins) + sel_an_binmax: [7, 8, 10, 12] # hadron pt bins (sel_an_binmin bins) + binning_matching: [3, 3, 4, 4] # mapping to skimming pt bins (sel_an_binmin bins) + sel_binmin2_reco: [5.0, 7.0, 15.0] # rec jet pt bins (sel_binmin2_reco bins) + sel_binmax2_reco: [7.0, 15.0, 30.] # rec jet pt bins (sel_binmin2_reco bins) + sel_binmin2_gen: [5.0, 7.0, 15.0] # gen jet pt bins (sel_binmin2_gen bins) + sel_binmax2_gen: [7.0, 15.0, 30.] # gen jet pt bins (sel_binmin2_gen bins) + cuts: + - Null + - Null + - Null + - Null + + data: &data_out_r_shape_6_12 + <<: *data_out_default + results: [/data/Derived_testResults/Jets/D0kAnywithJets_Vit/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2016_data/593_20210223-2051/resultsMBjetvspt, /data/Derived_testResults/Jets/D0kAnywithJets_Vit/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2017_data/593_20210223-2051/resultsMBjetvspt, /data/Derived_testResults/Jets/D0kAnywithJets_Vit/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2018_data/593_20210223-2051/resultsMBjetvspt] #list of periods + resultsallp: /data/Derived_testResults/Jets/D0kAnywithJets_Vit/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_data/resultsMBjetvspt + + resultslc: /data/Derived_testResults/Jets/Lc/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_data/resultsMBjetvspt + + mc: &mc_out_r_shape_6_12 + <<: *mc_out_default + results: [/data/Derived_testResults/Jets/D0kAnywithJets_Vit/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2016_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/Derived_testResults/Jets/D0kAnywithJets_Vit/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2017_mc_prodD2H/594_20210301-1015/resultsMBjetvspt, /data/Derived_testResults/Jets/D0kAnywithJets_Vit/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_2018_mc_prodD2H/594_20210301-1015/resultsMBjetvspt] #list of periods + resultsallp: /data/Derived_testResults/Jets/D0kAnywithJets_Vit/6_12/vAN-20210223_ROOT6-1/r_shape/default/default/pp_mc_prodD2H/resultsMBjetvspt + resultsinclusive: /data/Derived_testResults/Jets/D0kAnywithJets_Vit/vAN-20210223_ROOT6-1/r_shape_fullpt/default/default/pp_mc_prodD2H/resultsMBjetvspt + data_proc: # alternative processor output used as the analyzer input + <<: *data_out_r_shape_6_12 + mc_proc: # alternative processor output used as the analyzer input + <<: *mc_out_r_shape_6_12 + variations_db: ./data/data_prod_20210223/database_variations_D0pp_jet_r_shape_6_12.yml + + systematics: + probvariation: + useperiod: [0, 0, 1] #period from where to define prob cuts + ncutvar: 10 #number of looser and tighter variations + maxperccutvar: 0.25 #max diff in efficiency for loosest/tightest var + cutvarminrange: [[0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.7, 0.9], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.7, 0.9]] #Min starting point for scan + cutvarmaxrange: [[0.7, 0.9], [0.7, 0.9], [0.7, 0.9], [0.7, 0.9], [0.7, 0.9], [0.7, 0.9], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.7, 0.9]] #Max starting point for scan + fixedmean: True #Fix mean cutvar histo to central fit + fixedsigma: True #Fix sigma cutvar histo to central fit + mcptshape: + #FONLL / generated LHC19h4c1 + weights: [1.000000] + #From SetPtWeightsFromFONLL13overLHC17c3a12 in AliPhysics + #weights: [1.429770] + weights_min_pt: 0 + weights_max_pt: 40 + weights_bins: 400 diff --git a/machine_learning_hep/data/data_run3/database_ml_parameters_D0pp_mult.yml b/machine_learning_hep/data/data_run3/database_ml_parameters_D0pp_mult.yml new file mode 100644 index 0000000000..7655385a44 --- /dev/null +++ b/machine_learning_hep/data/data_run3/database_ml_parameters_D0pp_mult.yml @@ -0,0 +1,495 @@ +--- +############################################################################# +## © Copyright CERN 2018. All rights not expressly granted are reserved. ## +## Author: Gian.Michele.Innocenti@cern.ch ## +## This program is free software: you can redistribute it and/or modify it ## +## under the terms of the GNU General Public License as published by the ## +## Free Software Foundation, either version 3 of the License, or (at your ## +## option) any later version. This program is distributed in the hope that ## +## it will be useful, but WITHOUT ANY WARRANTY; without even the implied ## +## warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ## +## See the GNU General Public License for more details. ## +## You should have received a copy of the GNU General Public License ## +## along with this program. if not, see . ## +############################################################################# + +D0ml_pp: + doml: true + mass: 1.864 + sel_reco_unp: "fPt > 0." + sel_gen_unp: null + sel_cen_unp: null + sel_good_evt_unp: null + #sel_reco_skim: ["mlBkgScore < 0.2", "mlBkgScore < 0.4", "mlBkgScore < 0.6", "mlBkgScore < .08", "mlBkgScore < 0.14", "mlBkgScore < 0.26", "mlBkgScore < 0.46", "mlBkgScore < 0.52", "mlBkgScore < 0.46"] + sel_reco_skim: [null, null, null, null, null, null, null, null, null, null, null, null] # sel_skim_binmin bins + sel_gen_skim: [null, null, null, null, null, null, null, null, null, null, null, null] # sel_skim_binmin bins + sel_skim_binmin: [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16] # skimming pt bins (sel_skim_binmin bins) + sel_skim_binmax: [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16, 24] # skimming pt bins (sel_skim_binmin bins) + var_binning: fPt + dofullevtmerge: false + + var_cand: fCandidateSelFlag + bitmap_sel: + var_name: fFlagMcMatchRec + var_name_gen: fFlagMcMatchGen + var_name_origgen: fOriginMcGen + var_name_origrec: fOriginMcRec + var_isstd: isstd + var_ismcsignal: ismcsignal + var_ismcprompt: ismcprompt + var_ismcfd: ismcfd + var_ismcbkg: ismcbkg + var_is_part: isd0 + var_is_antipart: isd0bar + var_issel_part: seld0 + var_issel_antipart: seld0bar + + dfs: + read: + evtorig: + level: all + index: fIndexHFD0COLLBASES + trees: + O2hfd0collbase: [fNumContrib, fMultZeqNTracksPV, fCentFT0M] + extra: + fIsEventReject: 0 + + evtoriggen: + level: gen + index: fIndexHFD0MCCOLLBASES + trees: + O2hfd0mccollbase: [fPosX, fPosY, fPosZ, fCentFT0M] + O2hfd0mcrcollid: [fIndexArrayHFD0COLLBASES] + rename: {old: fCentFT0M, new: fCentFT0Mmc} #CHECK IF IT'S NEEDED + + reco: + level: all + index: fIndexHfD0Bases + trees: + O2hfd0base: [fIndexHFD0COLLBASES, fPt, fY, fEta, fPhi, fM] + O2hfd0par: [fCpa, fCpaXY, fChi2PCA, fDecayLength, fDecayLengthXY, fDecayLengthNormalised, fDecayLengthXYNormalised, fPtProng0, fPtProng1, fImpactParameter0, fImpactParameter1, fImpactParameterNormalised0, fImpactParameterNormalised1, fMaxNormalisedDeltaIP, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa] + O2hfd0mc: + level: mc + vars: [fFlagMcMatchRec, fOriginMcRec] + O2hfd0sel: + level: mc + vars: [fCandidateSelFlag] + filter: "fPt > 0." + tags: + isstd: {var: fFlagMcMatchRec, req: 1, level: mc} + ismcsignal: {var: fFlagMcMatchRec, req: 1, abs: true, level: mc} + ismcbkg: {var: ismcsignal, req: 0, level: mc} + ismcprompt: {var: fOriginMcRec, req: 1, level: mc} + ismcfd: {var: fOriginMcRec, req: 2, level: mc} + isd0: {var: fFlagMcMatchRec, req: 1, level: mc} + isd0bar: {var: fFlagMcMatchRec, req: -1, level: mc} + seld0: {var: fCandidateSelFlag, req: 1, level: mc} + seld0bar: {var: fCandidateSelFlag, req: 2, level: mc} + + gen: + level: mc + trees: + O2hfd0pbase: [fIndexHFD0MCCOLLBASES, fPt, fY, fEta, fPhi, fFlagMcMatchGen, fOriginMcGen] + tags: + isstd: {var: fFlagMcMatchGen, req: 1, level: mc} + ismcsignal: {var: fFlagMcMatchGen, req: 1, abs: true, level: mc} + ismcbkg: {var: ismcsignal, req: 0, level: mc} + ismcprompt: {var: fOriginMcGen, req: 1, level: mc} + ismcfd: {var: fOriginMcGen, req: 2, level: mc} + + merge: + - {base: reco, ref: evtorig} + - {base: gen, ref: evtoriggen} + - {base: gen, ref: evtorig, left_on: fIndexArrayHFD0COLLBASES, out: genrec,} + + write: + evtorig: + level: all + file: AnalysisResultsEvtOrig.parquet + evt: + level: all + source: evtorig + file: AnalysisResultsEvt.parquet + evtmc: + level: mc + source: evtoriggen + file: AnalysisResultsEvtGen.parquet + reco: + level: all + file: AnalysisResultsReco.parquet + gen: + level: mc + file: AnalysisResultsGenSl.parquet + genrec: + level: mc + file: AnalysisResultsGen.parquet + + variables: + var_all: [fPt, fEta, fM, fCpa, fCpaXY, fChi2PCA, fDecayLength, fDecayLengthXY, fDecayLengthNormalised, fDecayLengthXYNormalised, fPtProng0, fPtProng1, fImpactParameter0, fImpactParameter1, fImpactParameterNormalised0, fImpactParameterNormalised1, fMaxNormalisedDeltaIP, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa] + var_training: [[fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa], [fDecayLength, fDecayLengthXY, fChi2PCA, fCpa, fImpactParameterProduct, fNSigTpcTofPiExpPi, fNSigTpcTofKaExpKa]] + #TODO: add new variables for dca, max_norm_d0d0exp + # sel_skim_binmin bins + var_boundaries: [fPtProng] + var_correlation: + - [fPtProng0] + - [fPtProng1] + var_signal: signal + var_class: class + var_inv_mass: fM + var_y: fY + var_evt_sel: fIsEventReject + var_cuts: + - [fPtProng0, lt, null] + - [fPtProng1, lt, null] + + plot_options: + prob_cut_scan: + fPtProng0: + xlim: + - 0 + - 1 + fPtProng1: + xlim: + - 0 + - 1 + eff_cut_scan: + fPtProng0: + xlim: + - 0 + - 1 + fPtProng1: + xlim: + - 0 + - 1 + + files_names: + namefile_unmerged_tree: AO2D.root + namefile_reco: AnalysisResultsReco.parquet + namefile_evt: AnalysisResultsEvt.parquet + namefile_collcnt: AnalysisResultsCollCnt.parquet + namefile_bccnt: AnalysisResultsBcCnt.parquet + namefile_evtvalroot: AnalysisResultsROOTEvtVal.root + namefile_evtorig: AnalysisResultsEvtOrig.parquet + namefile_gen: AnalysisResultsGen.parquet + namefile_gen_sl: AnalysisResultsGenSl.parquet + namefile_reco_applieddata: AnalysisResultsRecoAppliedData.parquet + namefile_reco_appliedmc: AnalysisResultsRecoAppliedMC.parquet + namefile_mcweights: mcweights.root + treeoutput: "D0tree" + histofilename: "masshisto.root" + efffilename: "effhisto.root" + respfilename: "resphisto.root" + crossfilename: "cross_section_tot.root" + resultfilename: "results.root" + + #region multi + multi: + data: + nprocessesparallel: 20 + maxfiles: [-1] #list of periods + chunksizeunp: [100] #list of periods + chunksizeskim: [100] #list of periods + fracmerge: [0.10, 0.03, 0.05, 0.1, 0.2, 0.3, 0.4, 0.6, 0.6, 0.8, 1.0, 1.0] #list of periods + #fracmerge: [0.05, 0.10, 0.40, 0.80, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] #list of periods + seedmerge: [12] #list of periods + period: [LHC22o] #list of periods + select_period: [1] + # prefix_dir: /data2/MLhep/real/train_235436/ + prefix_dir: /data2/MLhep/trains/ + unmerged_tree_dir: [489217/alice/] #list of periods + pkl: ['${USER}/train_489217/D0ml/pkl'] #list of periods + pkl_skimmed: ['${USER}/train_489217/D0ml/pklsk'] #list of periods + pkl_skimmed_merge_for_ml: ['${USER}/train_489217/D0ml/pklskml'] #list of periods + pkl_skimmed_merge_for_ml_all: '${USER}/train_489217/D0ml/pp_data_mltot' + pkl_evtcounter_all: '${USER}/train_489217/D0ml/pp_data_evttot' + mcreweights: [../Analyses] #list of periods + mc: + nprocessesparallel: 20 + maxfiles: [-1] #list of periods + chunksizeunp: [100] #list of periods + chunksizeskim: [1000] #list of periods + fracmerge: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] #list of periods + seedmerge: [12] #list of periods + period: [LHC24b1b] #list of periods + select_period: [1] + # prefix_dir: /data2/MLhep/sim/train_235437/ + prefix_dir: /data2/MLhep/trains/ + unmerged_tree_dir: [508674/alice/] + pkl: ['${USER}/train_508674/D0ml/pkl'] #list of periods + pkl_skimmed: ['${USER}/train_508674/D0ml/pklsk'] #list of periods + pkl_skimmed_merge_for_ml: ['${USER}/train_508674/D0ml/pklskml'] #list of periods + pkl_skimmed_merge_for_ml_all: '${USER}/pass6/D0ml/pp_mc_prod_mltot' + pkl_evtcounter_all: '${USER}/pass6/D0ml/pp_mc_prod_evttot' + mcreweights: [../Analyses] #list of periods + + ml: + evtsel: null # TODO: fIsEventReject == 0 + triggersel: + data: null + mc: null + + nclasses: [2000000, 2000000, 2000000] + equalise_sig_bkg: True + mult_bkg: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + sampletags: [0, 1, 1] + sel_bkg: (fM >1.72 and fM <1.8) or fM >1.92 # for plotting significance; should agree with bkg selection in sel_ml + sel_ml: [(fM >1.72 and fM <1.8) or fM >1.92, ((isd0 and seld0) or (isd0bar and seld0bar)) and ismcsignal == 1 and ismcprompt == 1, ((isd0 and seld0) or (isd0bar and seld0bar)) and ismcsignal == 1 and ismcfd == 1] + class_labels: [bkg, prompt, non-prompt] + nkfolds: 5 + rnd_shuffle: 12 + rnd_splt: 12 + rnd_all: 12 + test_frac: 0.2 + binmin: [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16] # must be equal to sel_skim_binmin (sel_skim_binmin bins) + binmax: [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16, 24] # must be equal to sel_skim_binmax (sel_skim_binmin bins) + mltype: MultiClassification + ncorescrossval: 10 + prefix_dir_ml: /data2/ldellost/MLhep_d0_norefl/ + mlplot: mlplot + mlout: mlout + + opt: + isFONLLfromROOT: true + filename_fonll: 'data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root' # file with FONLL predictions + fonll_particle: 'hD0Kpipred' + fonll_pred: 'max' # edge of the FONLL prediction + FF: 0.6086 # fragmentation fraction + sigma_MB: 59.4e-3 # Minimum Bias cross section (pp) 50.87e-3 [b], 1 for Pb-Pb + Taa: 1 # 23260 [b^-1] in 0-10% Pb-Pb, 3917 [b^-1] in 30-50% Pb-Pb, 1 for pp + BR: 3.95e-2 # branching ratio of the decay D0 -> K- pi+ + f_prompt: 0.9 # estimated fraction of prompt candidates + bkg_data_fraction: 0.1 # fraction of real data used in the estimation + num_steps: 111 # number of steps used in efficiency and signif. estimation + bkg_function: pol2 # fit function for bkg (among TH1 predefined fit functions, e.g. expo, pol1, pol2, ...) + save_fit: True # save bkg fits with the various cuts on ML output + raahp: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] # sel_skim_binmin bins + # presel_gen_eff: "abs(fY) < 0.5 and abs(fPosZ) < 10" + presel_gen_eff: "fPt > 0." # TODO: fix + + mlapplication: + data: + prefix_dir_app: /data2/ldellost/MLHEP_d0/ + pkl_skimmed_dec: [LHC22pp/MLapplication/prod_LHC22o/skpkldecdata] #list of periods + pkl_skimmed_decmerged: [LHC22pp/MLapplication/prod_LHC22o/skpkldecdatamerged] #list of periods + mc: + prefix_dir_app: /data2/ldellost/MLHEP_d0/ + pkl_skimmed_dec: [LHC22pp_mc/MLapplication/LHC24d3a/skpkldecmc] #list of periods + pkl_skimmed_decmerged: [LHC22pp_mc/MLapplication/LHC24d3a/skpkldecmcmerged] #list of periods + modelname: xgboost + modelsperptbin: [xgboost_classifierD0ml_pp_dfselection_fPt_0.0_1.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_1.0_2.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_2.0_3.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_3.0_4.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_4.0_5.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_5.0_6.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_6.0_7.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_7.0_8.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_8.0_10.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_10.0_12.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_12.0_16.0.sav, xgboost_classifierD0ml_pp_dfselection_fPt_16.0_24.0.sav] # sel_skim_binmin bins + probcutpresel: + probcutpresel: + data: [[0.05, 0., 0.], [0.05, 0., 0.], [0.05, 0., 0.], [0.05, 0., 0.], [0.1, 0., 0.], [0.1, 0., 0.], [0.2, 0., 0.], [0.2, 0., 0.], [0.2, 0., 0.], [0.3, 0., 0.], [0.5, 0., 0.], [0.5, 0., 0.]] #list of nbins + mc: [[0.05, 0., 0.], [0.05, 0., 0.], [0.05, 0., 0.], [0.05, 0., 0.], [0.1, 0., 0.], [0.1, 0., 0.], [0.2, 0., 0.], [0.2, 0., 0.], [0.2, 0., 0.], [0.3, 0., 0.], [0.5, 0., 0.], [0.5, 0., 0.]] #list of nbins + probcutoptimal: [[0.02, 0., 0.], [0.02, 0., 0.], [0.02, 0., 0.], [0.02, 0., 0.], [0.05, 0., 0.], [0.06, 0., 0.], [0.08, 0., 0.], [0.08, 0., 0.], [0.1, 0., 0.], [0.1, 0., 0.], [0.2, 0., 0.], [0.25, 0., 0.]] #list of nbins + + #region analysis + analysis: + anahptspectrum: "D0Kpi" #D0Kpi, DplusKpipi, DstarD0pi, DsKKpi, LctopKpi, LcK0Sp + fd_method: "Nb" # fc, Nb, ext, dd, dd_N + crosssec_prompt: True # True for prompt, False for non-prompt + cctype: "pp" + sigmamb: 59.4e+9 # 50.87e+9 pp5TeV, 57.8e+9 pp13TeV, 59.4e+9 pp Run3, pb + inputfonllpred: data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root #data/fonll/CutVarLc_pp13TeV_LHC23_pass4_wide.root # + dir_general_plots: analysis_plots + + Run3analysis_forward: + proc_type: Dhadrons_mult + useperiod: [1] + plotbin: [1, 1, 1, 1, 1, 1, 1] + usesinglebineff: null + fprompt_from_mb: false + corrEffMult: [false, true, true, true, true, true, true, true] + event_cand_validation: False + sel_binmin2: [0, 85, 70, 50, 30, 10, 1, 0] #list of var2 splittng nbins + sel_binmax2: [100, 100, 85, 70, 50, 30, 10, 1] + var_binning2: fCentFT0M + var_binning2_gen: fCentFT0M + var_binning2_weights: fMultZeqNTracksPV + mc_cut_on_binning2: false + signal_loss: true + signal_loss_idx: fIndexArrayHFD0COLLBASES + nbinshisto: 100 + minvaluehisto: -0.0005 + maxvaluehisto: 100.0005 + triggerbit: '' + + variations_db: database_variations_LcToPKPi_mult.yml + observables: + hptspectrum: + bins_gen_var: [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16] + bins_det_var: [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16, 24] + label: "#it{p}_{T}" + label_y: "D^{0} Cross section" + + event_weighting_mc: + LHC24h1: + - filepath: data/event_weighting_mc/MultWeigths.root + histo_name: MultWeigths_0_1 + according_to: fMultZeqNTracksPV + - filepath: data/event_weighting_mc/MultWeigths.root + histo_name: MultWeigths_85_100 + according_to: fMultZeqNTracksPV + - filepath: data/event_weighting_mc/MultWeigths.root + histo_name: MultWeigths_70_85 + according_to: fMultZeqNTracksPV + - filepath: data/event_weighting_mc/MultWeigths.root + histo_name: MultWeigths_50_70 + according_to: fMultZeqNTracksPV + - filepath: data/event_weighting_mc/MultWeigths.root + histo_name: MultWeigths_30_50 + according_to: fMultZeqNTracksPV + - filepath: data/event_weighting_mc/MultWeigths.root + histo_name: MultWeigths_10_30 + according_to: fMultZeqNTracksPV + - filepath: data/event_weighting_mc/MultWeigths.root + histo_name: MultWeigths_1_10 + according_to: fMultZeqNTracksPV + - filepath: data/event_weighting_mc/MultWeigths.root + histo_name: MultWeigths_0_1 + according_to: fMultZeqNTracksPV + + use_cuts: False + reflections: True + sel_an_binmin: [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16] + sel_an_binmax: [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16, 24] + binning_matching: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] + presel_gen_eff: "abs(fY) < 0.5" + evtsel: null + #evtsel: "abs(fPosZ)<10" + triggersel: + data: null + mc: null + weighttrig: false + + data: + runselection: [null] #FIXME + prefix_dir_res: /data2/ldellost/D0analysis/ + results: [LHC23pp_forw/ResultsFit/prod_LHC23/resultsdata/default/default] #list of periods + resultsallp: LHC23pp_forw/ResultsFit/resultsdatatot/default/default + mc: + runselection: [null] #FIXME + prefix_dir_res: /data2/ldellost/D0analysis/ + results: [LHC23pp_forw_mc/ResultsFit/prod_LHC24h1/resultsmc/default/default] #list of periods + resultsallp: LHC23pp_forw_mc/ResultsFit/prod_LHC23/resultsmctot/default/default + + fitcase: D0 + latexnamehadron: "D^{0}#arrow{K#pi}" + latexbin2var: "FT0M" + nevents: 290860860000 + dobkgfromsideband: false + mass_fit_lim: [1.5, 2.22] # region for the fit of the invariant mass distribution [GeV/c^2] + bin_width: 0.001 # bin width of the invariant mass histogram + n_rebin: [2, 3, 3, 3, 3, 4, 4, 4, 5, 6, 7, 8] # number of mass bins to merge + + data_selections: + mcsig: + level: mc + query: '(isd0 & seld0) or (isd0bar & seld0bar)' + mcrefl: + level: mc + query: '(isd0 & seld0bar) or (isd0bar & seld0))' + + fit_levels: ['mcsig', 'mcrefl', 'mc', 'data'] + pdf_names: + pdf_sig: "sig" + pdf_bkg: "bkg" + param_names: + mass: "m" + gauss_mean: "mean" + gauss_sigma: "sigma_g1" + double_gauss_sigma: "sigma_wide" + fraction_refl: "frac_refl" + + mass_roofit: + - level: mcsig + ptrange: [0., 24.] + datasel: mcsig + range: [1.60, 2.14] + components: + sig: + fn: 'Gaussian::peak(m[1.,5.], mean[1.84,1.89], sigma_g1[.008,.25])' + bkg: + fn: 'Gaussian::wide(m, mean, sigma_wide[.05,1.])' + model: + fn: 'SUM::sig(frac_wide[0.,.3]*wide, peak)' + - level: mcrefl + ptrange: [0., 8.] + datasel: mcrefl + range: [1.60, 2.14] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.7,1.865], sigma_l[.01,.1])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.0], sigma_r[.01,.1])' + model: + fn: 'SUM::refl(frac_l[0.1,.9]*refl_l, refl_r)' + - level: mcrefl + ptrange: [8., 48.] + datasel: mcrefl + range: [1.40, 2.40] + components: + refl_l: + fn: 'Gaussian::refl_l(m, mean_l[1.7,1.865], sigma_l[.01,.2])' + refl_r: + fn: 'Gaussian::refl_r(m, mean_r[1.865,2.1], sigma_r[.01,.2])' + model: + fn: 'SUM::refl(frac_l[0.,1.]*refl_l, refl_r)' + - level: mc + ptrange: [0., 8.] + range: [1.60, 2.14] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - level: mc + ptrange: [8., 48.] + range: [1.40, 2.40] + fix_params: ['frac_l', 'mean_l', 'mean_r', 'sigma_l', 'sigma_r', 'frac_wide', 'sigma_g1', 'sigma_wide'] + components: + model: + fn: 'SUM::sigrefl(frac_refl[0.,1.]*refl, sig)' + - ptrange: [0., 6] + range: [1.72, 2.06] + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + - ptrange: [6., 8.] + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + range: [1.72, 2.12] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + - range: [1.72, 2.20] + fix_params: ['frac_refl'] + free_params: ['sigma_g1'] + components: + bkg: + fn: 'Exponential::bkg(m, alpha[-100,0])' + model: + fn: 'SUM::sum(frac[0.,1.]*sigrefl, bkg)' + + systematics: + probvariation: + useperiod: [0, 0, 1] #period from where to define prob cuts + ncutvar: 10 #number of looser and tighter variations + maxperccutvar: 0.25 #max diff in efficiency for loosest/tightest var + cutvarminrange: [[0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.7, 0.9], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.7, 0.9]] #Min starting point for scan + cutvarmaxrange: [[0.7, 0.9], [0.7, 0.9], [0.7, 0.9], [0.7, 0.9], [0.7, 0.9], [0.7, 0.9], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.1, 0.3], [0.7, 0.9]] #Max starting point for scan + fixedmean: True #Fix mean cutvar histo to central fit + fixedsigma: True #Fix sigma cutvar histo to central fit + mcptshape: + #FONLL / generated LHC19h4c1 + weights: [1.000000] + #From SetPtWeightsFromFONLL13overLHC17c3a12 in AliPhysics + #weights: [1.429770] + weights_min_pt: 0 + weights_max_pt: 40 + weights_bins: 400 diff --git a/machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi.yml b/machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi.yml index 3cc0fc1b3a..30373d7f62 100644 --- a/machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi.yml +++ b/machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi.yml @@ -82,11 +82,11 @@ LcpKpi: #extra: #fY: log((sqrt(2.28646**2 + (fPt * cosh(fEta))**2) + fPt * sinh(fEta)) / sqrt(2.28646**2 + fPt**2)) #TODO : change mass or make sure Lc mass is updated tags: - isstd: {var: fFlagMcMatchRec, req: [[1], []], level: mc} - ismcsignal: {var: fFlagMcMatchRec, req: [[1], []], abs: true, level: mc} - ismcbkg: {var: fFlagMcMatchRec, req: [[], [1]], abs: true, level: mc} - ismcprompt: {var: fOriginMcRec, req: [[0], []], level: mc} - ismcfd: {var: fOriginMcRec, req: [[1], []], level: mc} + isstd: {var: fFlagMcMatchRec, req: 17, level: mc} + ismcsignal: {var: fFlagMcMatchRec, req: 17, abs: true, level: mc} + ismcbkg: {var: ismcsignal, req: 0, level: mc} + ismcprompt: {var: fOriginMcRec, req: 1, level: mc} + ismcfd: {var: fOriginMcRec, req: 2, level: mc} swap: {cand: fCandidateSelFlag, var_swap: fIsCandidateSwapped, vars: [ismcsignal, ismcprompt, ismcfd], level: mc} gen: @@ -94,11 +94,11 @@ LcpKpi: trees: O2hflcpbase: [fIndexHFLCMCCOLLBASES, fPt, fY, fEta, fPhi, fFlagMcMatchGen, fOriginMcGen] tags: - isstd: {var: fFlagMcMatchGen, req: [[1], []], level: mc} - ismcsignal: {var: fFlagMcMatchGen, req: [[1], []], abs: true, level: mc} - ismcbkg: {var: fFlagMcMatchGen, req: [[], [1]], abs: true, level: mc} - ismcprompt: {var: fOriginMcGen, req: [[0], []], level: mc} - ismcfd: {var: fOriginMcGen, req: [[1], []], level: mc} + isstd: {var: fFlagMcMatchGen, req: 17, level: mc} + ismcsignal: {var: fFlagMcMatchGen, req: 17, abs: true, level: mc} + ismcbkg: {var: ismcsignal, req: 0, level: mc} + ismcprompt: {var: fOriginMcGen, req: 1, level: mc} + ismcfd: {var: fOriginMcGen, req: 2, level: mc} #extra: #fY: log((sqrt(2.28646**2 + (fPt * cosh(fEta))**2) + fPt * sinh(fEta)) / sqrt(2.28646**2 + fPt**2)) #TODO : change mass or make sure Lc mass is updated @@ -276,13 +276,13 @@ LcpKpi: period: [LHC24h1] #list of periods select_period: [1] prefix_dir: /data2/MLhep/ - #unmerged_tree_dir: [sim/train_339426/alice/cern.ch/user/a/alihyperloop/jobs/0130] #list of periods training - unmerged_tree_dir: [sim/train_341075/alice/cern.ch/user/a/alihyperloop/jobs/0132] #list of periods - pkl: [LHC23pp_mc_tuner_mb/prod_LHC24h1/pklmc] #list of periods - pkl_skimmed: [LHC23pp_mc_tuner_mb/prod_LHC24h1/pklskmc] #list of periods - pkl_skimmed_merge_for_ml: [LHC23pp_mc_tuner_mb/prod_LHC24h1/pklskmlmc] #list of periods - pkl_skimmed_merge_for_ml_all: LHC23pp_mc_tuner_mb/prod_LHC24_ana/mltotmc - pkl_evtcounter_all: LHC23pp_mc_tuner_mb/prod_LHC24_ana/evttotmc + #unmerged_tree_dir: [trains/428708/alice] #list of periods + unmerged_tree_dir: [trains/428753/alice] #list of periods + pkl: ["${USER}/LHC23pp_mc_tuner_mb/prod_LHC24h1b/pklmc"] #list of periods + pkl_skimmed: ["${USER}/LHC23pp_mc_tuner_mb/prod_LHC24h1b/pklskmc"] #list of periods + pkl_skimmed_merge_for_ml: ["${USER}/LHC23pp_mc_tuner_mb/prod_LHC24h1/pklskmlmc"] #list of periods + pkl_skimmed_merge_for_ml_all: "${USER}/HC23pp_mc_tuner_mb/prod_LHC24_ana/mltotmc" + pkl_evtcounter_all: "${USER}/LHC23pp_mc_tuner_mb/prod_LHC24_anab/evttotmc" #select_jobs: [[hy_396609], [hy_396597]] mcreweights: [../Analyses] ml: @@ -334,11 +334,11 @@ LcpKpi: mlapplication: data: - prefix_dir_app: /data2/ldellost/MLhep_newformat_mb/ + prefix_dir_app: /data2/ldellost/MLhep_newformat_mb_DD/ pkl_skimmed_dec: [LHC23pp/MLapplication/prod_LHC23/skpkldecdata] #list of periods pkl_skimmed_decmerged: [LHC23pp/MLapplication/prod_LHC23/skpkldecdatamerged] #list of periods mc: - prefix_dir_app: /data2/ldellost/MLhep_newformat_mb/ + prefix_dir_app: /data2/ldellost/MLhep_newformat_mb_DD_h1b/ pkl_skimmed_dec: [LHC23pp_mc/MLapplication_mult/prod_LHC24h1/skpkldecmc] #list of periods pkl_skimmed_decmerged: [LHC23pp_mc/MLapplication_mult/prod_LHC24h1/skpkldecmcmerged] #list of periods modelname: xgboost @@ -432,148 +432,40 @@ LcpKpi: # Decide whether to take the sigma from MC or data for individual fits mass_roofit: - level: mc - ptrange: [0., 4.] - range: [2.18, 2.39] - components: - sig: - fn: 'Gaussian::sig(m[1., 10], mean[2.286, 2.2832,2.289], sigma_g1[.007,.007,.012])' - #wide: - # fn: 'Gaussian::wide(m, mean, expr("n*sigma_g1", n[1.,5.], sigma_g1))' - #model: - # fn: 'SUM::sig(f_peak[0.,1.]*peak, wide)' - bkg: - fn: 'Exponential::mcbkg(m, mcalpha[0.])' - model: - fn: 'SUM::mctot(mcfrac[0., 0., 1.0]*sig, mcbkg)' - - level: mc - ptrange: [4., 6.] - range: [2.18, 2.39] - components: - sig: - fn: 'Gaussian::sig(m[1., 10], mean[2.286, 2.283,2.289], sigma_g1[.012,.01,.016])' - #wide: - # fn: 'Gaussian::wide(m, mean, expr("n*sigma_g1", n[1.,5.], sigma_g1))' - #model: - # fn: 'SUM::sig(f_peak[0.,1.]*peak, wide)' - bkg: - fn: 'Exponential::mcbkg(m, mcalpha[0.])' - model: - fn: 'SUM::mctot(mcfrac[0., 0., 1.0]*sig, mcbkg)' - - level: mc - ptrange: [6., 10.] + ptrange: [0., 24.] range: [2.10, 2.45] components: sig: - fn: 'Gaussian::sig(m[1., 10], mean[2.2865, 2.283,2.289], sigma_g1[.013,.013,.020])' - #wide: - # fn: 'Gaussian::wide(m, mean, expr("n*sigma_g1", n[1.,5.], sigma_g1))' - #model: - # fn: 'SUM::sig(f_peak[0.,1.]*peak, wide)' - bkg: - fn: 'Exponential::mcbkg(m, mcalpha[0.])' - model: - fn: 'SUM::mctot(mcfrac[0., 0., 1.0]*sig, mcbkg)' - - level: mc - ptrange: [10., 24.] - range: [2.10, 2.45] - components: - sig: - fn: 'Gaussian::sig(m[1., 10], mean[2.2865, 2.283,2.289], sigma_g1[.013,.020,.029])' - #wide: - # fn: 'Gaussian::wide(m, mean, expr("n*sigma_g1", n[1.,5.], sigma_g1))' - #model: - # fn: 'SUM::sig(f_peak[0.,1.]*peak, wide)' - bkg: - fn: 'Exponential::mcbkg(m, mcalpha[0.])' - model: - fn: 'SUM::mctot(mcfrac[0., 0., 1.0]*sig, mcbkg)' - - ptrange: [0., 2.] - range: [2.216, 2.36] #2.216, 2.36 - #fix_params: ['n', 'f_peak'] - components: - #sig: - #fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' - bkg: - fn: 'Polynomial::bkg(m, {a0[-1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' + fn: 'Gaussian::peak(m[1., 10], mean[2.283,2.289], sigma_g1[.007,.025])' + wide: + fn: 'Gaussian::wide(m, mean, expr("n*sigma_g1", n[1.,5.], sigma_g1))' model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [2., 3.] + fn: 'SUM::sig(f_peak[0.,1.]*peak, wide)' + - ptrange: [0., 4.] range: [2.21, 2.36] - #fix_params: ['n', 'f_peak'] - components: - #sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' - bkg: - fn: 'Polynomial::bkg(m, {a0[-1e8, 1e8], a1[-1e8, 1e8], a2[-1e8, 1e8]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [3., 4.] - range: [2.20, 2.37] - #fix_params: ['n', 'f_peak'] - components: - #sig: - #fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' - bkg: - fn: 'Polynomial::bkg(m, {a0[-1e8, 1e8], a1[-1e8, 1e8], a2[-1e8, 1e8]})' - model: - fn: 'SUM::sum(f_sig[0., 0., 0.8]*sig, bkg)' - - ptrange: [4., 5.] - range: [2.19, 2.38] - #fix_params: ['n', 'f_peak'] - components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' - bkg: - fn: 'Polynomial::bkg(m, {a0[2000, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [5., 6.] - range: [2.18, 2.39] - #fix_params: ['n', 'f_peak'] - components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' - bkg: - fn: 'Polynomial::bkg(m, {a0[8000, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [6., 7.] - range: [2.16, 2.42] - #fix_params: ['n', 'f_peak'] + fix_params: ['n', 'f_peak'] components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.03])' bkg: - fn: 'Polynomial::bkg(m, {a0[2000, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' + #fn: 'Polynomial::bkg(m, {a0[-1,1], a1[-1,1]})' + fn: 'Chebychev::bkg(m, {a0[-1,1], a1[-1,1]})' model: fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [7., 8.] - range: [2.16, 2.42] - #fix_params: ['n', 'f_peak'] + - ptrange: [4., 8.] + range: [2.16, 2.40] + fix_params: ['n', 'f_peak'] components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.03])' bkg: - fn: 'Polynomial::bkg(m, {a0[2000, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' + #fn: 'Polynomial::bkg(m, {a0[-1,1], a1[-1,1]})' + fn: 'Chebychev::bkg(m, {a0[-1,1], a1[-1,1]})' model: fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [8., 10.] + - ptrange: [8., 24.] range: [2.1, 2.46] - #fix_params: ['n', 'f_peak'] - components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.03])' - bkg: - fn: 'Polynomial::bkg(m, {a0[1000, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - range: [2.1, 2.46] - #fix_params: ['n', 'f_peak'] + fix_params: ['n', 'f_peak'] components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.03])' bkg: - fn: 'Polynomial::bkg(m, {a0[2000, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' + #fn: 'Polynomial::bkg(m, {a0[-1,1], a1[-1,1]})' + fn: 'Chebychev::bkg(m, {a0[-1,1], a1[-1,1]})' model: fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' diff --git a/machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi_mult.yml b/machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi_mult.yml index 1d0415c30a..731b72bcea 100644 --- a/machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi_mult.yml +++ b/machine_learning_hep/data/data_run3/database_ml_parameters_LcToPKPi_mult.yml @@ -64,6 +64,7 @@ LcpKpi: trees: O2hflcmccollbase: [fPosX, fPosY, fPosZ, fCentFT0M] O2hflcmcrcollid: [fIndexArrayHFLCCOLLBASES] + rename: {old: fCentFT0M, new: fCentFT0Mmc} reco: level: all @@ -81,11 +82,11 @@ LcpKpi: #extra: #fY: log((sqrt(2.28646**2 + (fPt * cosh(fEta))**2) + fPt * sinh(fEta)) / sqrt(2.28646**2 + fPt**2)) #TODO : change mass or make sure Lc mass is updated tags: - isstd: {var: fFlagMcMatchRec, req: [[1], []], level: mc} - ismcsignal: {var: fFlagMcMatchRec, req: [[1], []], abs: true, level: mc} - ismcbkg: {var: fFlagMcMatchRec, req: [[], [1]], abs: true, level: mc} - ismcprompt: {var: fOriginMcRec, req: [[0], []], level: mc} - ismcfd: {var: fOriginMcRec, req: [[1], []], level: mc} + isstd: {var: fFlagMcMatchRec, req: 17, level: mc} + ismcsignal: {var: fFlagMcMatchRec, req: 17, abs: true, level: mc} + ismcbkg: {var: ismcsignal, req: 0, level: mc} + ismcprompt: {var: fOriginMcRec, req: 1, level: mc} + ismcfd: {var: fOriginMcRec, req: 2, level: mc} swap: {cand: fCandidateSelFlag, var_swap: fIsCandidateSwapped, vars: [ismcsignal, ismcprompt, ismcfd], level: mc} gen: @@ -93,11 +94,11 @@ LcpKpi: trees: O2hflcpbase: [fIndexHFLCMCCOLLBASES, fPt, fY, fEta, fPhi, fFlagMcMatchGen, fOriginMcGen] tags: - isstd: {var: fFlagMcMatchGen, req: [[1], []], level: mc} - ismcsignal: {var: fFlagMcMatchGen, req: [[1], []], abs: true, level: mc} - ismcbkg: {var: fFlagMcMatchGen, req: [[], [1]], abs: true, level: mc} - ismcprompt: {var: fOriginMcGen, req: [[0], []], level: mc} - ismcfd: {var: fOriginMcGen, req: [[1], []], level: mc} + isstd: {var: fFlagMcMatchGen, req: 17, level: mc} + ismcsignal: {var: fFlagMcMatchGen, req: 17, abs: true, level: mc} + ismcbkg: {var: ismcsignal, req: 0, level: mc} + ismcprompt: {var: fOriginMcGen, req: 1, level: mc} + ismcfd: {var: fOriginMcGen, req: 2, level: mc} #extra: #fY: log((sqrt(2.28646**2 + (fPt * cosh(fEta))**2) + fPt * sinh(fEta)) / sqrt(2.28646**2 + fPt**2)) #TODO : change mass or make sure Lc mass is updated @@ -249,6 +250,7 @@ LcpKpi: namefile_evtvalroot: AnalysisResultsROOTEvtVal.root namefile_evtorig: AnalysisResultsEvtOrig.parquet namefile_gen: AnalysisResultsGen.parquet + namefile_gen_sl: AnalysisResultsGenSl.parquet namefile_reco_applieddata: AnalysisResultsRecoAppliedData.parquet namefile_reco_appliedmc: AnalysisResultsRecoAppliedMC.parquet namefile_mcweights: mcweights.root @@ -264,7 +266,7 @@ LcpKpi: maxfiles: [-1] #list of periods chunksizeunp: [100] #list of periods chunksizeskim: [100] #list of periods - fracmerge: [0.05] #list of periods + fracmerge: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05] #list of periods seedmerge: [12] #list of periods period: [LHC23] #list of periods select_period: [1] @@ -282,13 +284,13 @@ LcpKpi: maxfiles: [-1] #list of periods chunksizeunp: [100] #list of periods chunksizeskim: [100] #list of periods - fracmerge: [1.0] #list of periods + fracmerge: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] #list of periods seedmerge: [1] #list of periods period: [LHC24h1] #list of periods select_period: [1] prefix_dir: /data2/MLhep/ unmerged_tree_dir: [sim/train_341075/alice/cern.ch/user/a/alihyperloop/jobs/0132] #list of periods - pkl: [LHC23pp_mc_tuner_mult/prod_LHC24h1/pklmc] #list of periods + pkl: [LHC23pp_mc_tuner_mult/prod_LHC24h1/pklmc2] #list of periods pkl_skimmed: [LHC23pp_mc_tuner_mult/prod_LHC24h1/pklskmc] #list of periods pkl_skimmed_merge_for_ml: [LHC23pp_mc_tuner_mult/prod_LHC24h1/pklskmlmc] #list of periods pkl_skimmed_merge_for_ml_all: LHC23pp_mc_tuner_mult/prod_LHC24_ana/mltotmc @@ -363,17 +365,18 @@ LcpKpi: - xgboost_classifierLcpKpi_dfselection_fPt_10.0_12.0.sav - xgboost_classifierLcpKpi_dfselection_fPt_12.0_24.0.sav probcutpresel: - data: [[0.05, 0.0, 0.0], [0.05, 0.0, 0.0], [0.05, 0.0, 0.0], [0.1, 0.0, 0.0], [0.2, 0.0, 0.0], [0.2, 0.0, 0.0], [0.2, 0.0, 0.0], [0.2, 0.0, 0.0], [0.3, 0.0, 0.0], [0.4, 0.0, 0.0]] #list of nbins - mc: [[0.05, 0.0, 0.0], [0.05, 0.0, 0.0], [0.05, 0.0, 0.0], [0.1, 0.0, 0.0], [0.2, 0.0, 0.0], [0.2, 0.0, 0.0], [0.2, 0.0, 0.0], [0.2, 0.0, 0.0], [0.3, 0.0, 0.0], [0.4, 0.0, 0.0]] #list of nbins - probcutoptimal: [[0.02, 0.0, 0.0], [0.03, 0.0, 0.0], [0.04, 0.0, 0.0], [0.07, 0.0, 0.0], [0.09, 0.0, 0.0], [0.11, 0.0, 0.0], [0.15, 0.0, 0.0], [0.18, 0.0, 0.0], [0.25, 0.0, 0.0], [0.35, 0.0, 0.0]] #list of nbins + data: [[0.05, 0.0, 0.0], [0.05, 0.0, 0.0], [0.08, 0.0, 0.0], [0.15, 0.0, 0.0], [0.20, 0.0, 0.0], [0.30, 0.0, 0.0], [0.40, 0.0, 0.0], [0.50, 0.0, 0.0], [0.60, 0.0, 0.0], [0.80, 0.0, 0.0]] #list of nbins + mc: [[0.05, 0.0, 0.0], [0.05, 0.0, 0.0], [0.08, 0.0, 0.0], [0.15, 0.0, 0.0], [0.20, 0.0, 0.0], [0.30, 0.0, 0.0], [0.40, 0.0, 0.0], [0.50, 0.0, 0.0], [0.60, 0.0, 0.0], [0.80, 0.0, 0.0]] #list of nbins + probcutoptimal: [[0.02, 0.40, 0.0], [0.03, 0.25, 0.0], [0.04, 0.25, 0.0], [0.07, 0.25, 0.0], [0.10, 0.25, 0.0], [0.11, 0.25, 0.0], [0.15, 0.25, 0.0], [0.18, 0.25, 0.0], [0.25, 0.25, 0.0], [0.35, 0.25, 0.0]] #list of nbins analysis: anahptspectrum: "LctopKpi" #D0Kpi, DplusKpipi, DstarD0pi, DsKKpi, LctopKpi, LcK0Sp - fd_method: "Nb" # fc, Nb, ext, dd, dd_N - crosssec_prompt: true # true for prompt, false for non-prompt + fd_method: "dd" # fc, Nb, ext, dd, dd_N + crosssec_prompt: True # True for prompt, False for non-prompt cctype: "pp" sigmamb: 59.4e+9 # 50.87e+9 pp5TeV, 57.8e+9 pp13TeV, 59.4e+9 pp Run3, pb - inputfonllpred: data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root #data/fonll/CutVarLc_pp13TeV_LHC23_pass4_wide.root # + inputfonllpred: data/fonll/CutVarLc_pp13TeV_LHC23_pass4_wide.root #data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root # + #inputfonllpred: data/fonll/DmesonLcPredictions_13TeV_y05_FFptDepLHCb_BRpythia8_PDG2020.root dir_general_plots: analysis_plots Run3analysis_forward: @@ -381,7 +384,7 @@ LcpKpi: useperiod: [1] plotbin: [1, 1, 1, 1, 1, 1, 1] usesinglebineff: null - fprompt_from_mb: true + fprompt_from_mb: false corrEffMult: [false, true, true, true, true, true, true, true] event_cand_validation: False sel_binmin2: [0, 85, 70, 50, 30, 10, 1, 0] #list of var2 splittng nbins @@ -397,6 +400,14 @@ LcpKpi: maxvaluehisto: 100.0005 triggerbit: '' + variations_db: database_variations_LcToPKPi.yml + observables: + hptspectrum: + bins_gen_var: [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 24] + bins_det_var: [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 24] + label: "#it{p}_{T}" + label_y: "#Lambda_{c} Cross section" + event_weighting_mc: LHC24h1: - filepath: data/event_weighting_mc/MultWeigths.root @@ -450,23 +461,24 @@ LcpKpi: data: runselection: [null] #FIXME - prefix_dir_res: /data2/ldellost/MLhep_newformat/ + prefix_dir_res: /data2/ldellost/MLhep_newformat_fixed/ results: [LHC23pp_forw/Results/prod_LHC23/resultsdata] #list of periods resultsallp: LHC23pp_forw/Results/resultsdatatot mc: runselection: [null] #FIXME - prefix_dir_res: /data2/ldellost/MLhep_newformat/ + prefix_dir_res: /data2/ldellost/MLhep_newformat_fixed/ results: [LHC23pp_mc_forw/Results/prod_LHC24h1/resultsmc] #list of periods resultsallp: LHC23pp_mc_forw/Results/prod_LHC23/resultsmctot fitcase: Lc latexnamehadron: "#Lambda_{c}^{pK#pi}" latexbin2var: "FT0M" - nevents: 258442910841 + #nevents: 258442910841 + nevents: 290860860000 dobkgfromsideband: false mass_fit_lim: [2.10, 2.47] # region for the fit of the invariant mass distribution [GeV/c^2] bin_width: 0.001 # bin width of the invariant mass histogram - n_rebin: [2, 2, 2, 2, 3, 3, 3, 4, 5, 6] # number of mass bins to merge + n_rebin: [2, 2, 2, 2, 2, 3, 3, 4, 5, 6] pdf_names: pdf_sig: "sig" @@ -477,110 +489,47 @@ LcpKpi: gauss_sigma: "sigma_g1" double_gauss_sigma: "sigma_wide" fraction_refl: "frac_refl" + alpha_l: "alpha1" + n_l: "n1" # To initialize the individual fits in pT bins # Decide whether to take the sigma from MC or data for individual fits mass_roofit: - level: mc + ptrange: [0., 24.] range: [2.10, 2.45] components: sig: - fn: 'Gaussian::sig(m[2., 4.], mean[2.282,2.29], sigma_g1[.006,.006,.025])' - #wide: - # fn: 'Gaussian::wide(m, mean, expr("n*sigma_g1", n[1.,5.], sigma_g1))' - #model: - # fn: 'SUM::sig(f_peak[0.,1.]*peak, wide)' - bkg: - fn: 'Exponential::mcbkg(m, mcalpha[0.])' - model: - fn: 'SUM::mctot(mcfrac[0., 0., 1.0]*sig, mcbkg)' - - ptrange: [1., 2.] - range: [2.216, 2.36] #2.21, 2.36 - #fix_params: ['n', 'f_peak'] - components: - #sig: - #fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' - bkg: - fn: 'Polynomial::bkg(m, {a0[-1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [2., 3.] - range: [2.20, 2.37] - #fix_params: ['n', 'f_peak'] - components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' - bkg: - fn: 'Polynomial::bkg(m, {a0[-1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [3., 4.] - range: [2.19, 2.38] - #fix_params: ['n', 'f_peak'] - components: - #sig: - #fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' - bkg: - fn: 'Polynomial::bkg(m, {a0[-1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' + fn: 'Gaussian::peak(m[1., 10], mean[2.283,2.289], sigma_g1[.007,.025])' + wide: + fn: 'Gaussian::wide(m, mean, expr("n*sigma_g1", n[1.,5.], sigma_g1))' model: - fn: 'SUM::sum(f_sig[0., 0., 0.8]*sig, bkg)' - - ptrange: [4., 5.] - range: [2.18, 2.40] - #fix_params: ['n', 'f_peak'] + fn: 'SUM::sig(f_peak[0.,1.]*peak, wide)' + - ptrange: [0., 4.] + range: [2.21, 2.36] + fix_params: ['n', 'f_peak'] components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' bkg: - fn: 'Polynomial::bkg(m, {a0[5000, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' + #fn: 'Polynomial::bkg(m, {a0[-1,1], a1[-1,1]})' + fn: 'Chebychev::bkg(m, {a0[-1,1], a1[-1,1]})' model: fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [5., 6.] - range: [2.18, 2.40] - #fix_params: ['n', 'f_peak'] + - ptrange: [4., 8.] + range: [2.16, 2.40] + fix_params: ['n', 'f_peak'] components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.005,.015])' bkg: - fn: 'Polynomial::bkg(m, {a0[8000, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' + #fn: 'Polynomial::bkg(m, {a0[-1,1], a1[-1,1]})' + fn: 'Chebychev::bkg(m, {a0[-1,1], a1[-1,1]})' model: fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [6., 7.] - range: [2.18, 2.40] - #fix_params: ['n', 'f_peak'] - components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.03])' - bkg: - fn: 'Polynomial::bkg(m, {a0[219, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [7., 8.] - range: [2.16, 2.42] - #fix_params: ['n', 'f_peak'] - components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.03])' - bkg: - fn: 'Polynomial::bkg(m, {a0[200, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - ptrange: [8., 10.] + - ptrange: [8., 24.] range: [2.1, 2.46] - #fix_params: ['n', 'f_peak'] - components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.03])' - bkg: - fn: 'Polynomial::bkg(m, {a0[500, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' - model: - fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' - - range: [2.1, 2.46] - #fix_params: ['n', 'f_peak'] + fix_params: ['n', 'f_peak'] components: - # sig: - # fn: 'Gaussian::sig(m, mean[2.28,2.29], sigma_g1[.005,.03])' bkg: - fn: 'Polynomial::bkg(m, {a0[200, -1e10, 1e10], a1[-1e10, 1e10], a2[-1e10, 1e10]})' + #fn: 'Polynomial::bkg(m, {a0[-1,1], a1[-1,1]})' + fn: 'Chebychev::bkg(m, {a0[-1,1], a1[-1,1]})' model: fn: 'SUM::sum(f_sig[0.,1.]*sig, bkg)' diff --git a/machine_learning_hep/processerdhadrons.py b/machine_learning_hep/processerdhadrons.py index a46e90ee37..f3f3e45f9a 100755 --- a/machine_learning_hep/processerdhadrons.py +++ b/machine_learning_hep/processerdhadrons.py @@ -164,7 +164,7 @@ def process_histomass_single(self, index): self.lpt_probcutfin[ipt], ) - h_invmass = TH1F("hmass" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1]) + h_invmass = TH1F("hmass_" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1]) fill_hist(h_invmass, df[self.v_invmass]) myfile.cd() @@ -174,10 +174,10 @@ def process_histomass_single(self, index): df_sig = df[df[self.v_ismcsignal] == 1] df_bkg = df[df[self.v_ismcbkg] == 1] h_invmass_sig = TH1F( - "hmass_sig" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1] + "hmass_sig_" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1] ) h_invmass_bkg = TH1F( - "hmass_bkg" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1] + "hmass_bkg_" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1] ) fill_hist(h_invmass_sig, df_sig[self.v_invmass]) diff --git a/machine_learning_hep/processerdhadrons_mult.py b/machine_learning_hep/processerdhadrons_mult.py index c0d060a9c0..e11198af51 100755 --- a/machine_learning_hep/processerdhadrons_mult.py +++ b/machine_learning_hep/processerdhadrons_mult.py @@ -95,9 +95,14 @@ def __init__( d_mcreweights, ) + self.v_is_part = datap["bitmap_sel"].get("var_is_part", "") + self.v_is_antipart = datap["bitmap_sel"].get("var_is_antipart", "") + self.v_issel_part = datap["bitmap_sel"].get("var_issel_part", "") + self.v_issel_antipart = datap["bitmap_sel"].get("var_issel_antipart", "") self.v_invmass = datap["variables"].get("var_inv_mass", "fM") self.p_mass_fit_lim = datap["analysis"][self.typean]["mass_fit_lim"] self.p_bin_width = datap["analysis"][self.typean]["bin_width"] + self.reflections = datap["analysis"][self.typean].get("reflections", False) self.binarray_pthf = np.asarray(self.cfg("sel_an_binmin", []) + self.cfg("sel_an_binmax", [])[-1:], "d") limits_mass = datap["analysis"][self.typean]["mass_fit_lim"] nbins_mass = int(round((limits_mass[1] - limits_mass[0]) / self.p_bin_width)) @@ -237,7 +242,7 @@ def process_histomass_single(self, index): self.lvar2_binmin[ibin2], self.lvar2_binmax[ibin2], ) - h_invmass = TH1F("hmass" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1]) + h_invmass = TH1F("hmass_" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1]) df_bin = seldf_singlevar_inclusive( df, self.v_var2_binning, self.lvar2_binmin[ibin2], self.lvar2_binmax[ibin2] ) @@ -247,13 +252,36 @@ def process_histomass_single(self, index): if self.mcordata == "mc": df_bin_sig = df_bin[df_bin[self.v_ismcsignal] == 1] + if self.reflections: + df_bin_sig = df_bin[ + ((df_bin[self.v_is_part] == 1) & (df_bin[self.v_issel_part] == 1)) + | ((df_bin[self.v_is_antipart] == 1) & (df_bin[self.v_issel_antipart] == 1)) + & (df_bin[self.v_ismcsignal] == 1) + ] h_invmass_sig = TH1F( - "hmass_sig" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1] + "hmass_mcsig_" + suffix, "", self.p_num_bins, self.p_mass_fit_lim[0], self.p_mass_fit_lim[1] ) fill_hist(h_invmass_sig, df_bin_sig[self.v_invmass]) + myfile.cd() h_invmass_sig.Write() + if self.reflections: + df_bin_refl = df_bin[ + ((df_bin[self.v_is_part] == 1) & (df_bin[self.v_issel_antipart] == 1)) + | ((df_bin[self.v_is_antipart] == 1) & (df_bin[self.v_issel_part] == 1)) + & (df_bin[self.v_ismcsignal] == 1) + ] + h_invmass_refl = TH1F( + "hmass_mcrefl_" + suffix, + "", + self.p_num_bins, + self.p_mass_fit_lim[0], + self.p_mass_fit_lim[1], + ) + fill_hist(h_invmass_refl, df_bin_refl[self.v_invmass]) + h_invmass_refl.Write() + if self.event_cand_validation is True: label = "h%s" % self.v_var2_binning histomult = TH1F(label, label, self.nbinshisto, self.minvaluehisto, self.maxvaluehisto) @@ -335,9 +363,7 @@ def process_efficiency_single(self, index): out_file = TFile.Open(self.l_histoeff[index], "recreate") h_list = [] for ibin2, _ in enumerate(self.lvar2_binmin): - stringbin2 = "_{}_{:.2f}_{:.2f}".format( - self.v_var2_binning, self.lvar2_binmin[ibin2], self.lvar2_binmax[ibin2] - ) + stringbin2 = f"_{self.v_var2_binning}_{self.lvar2_binmin[ibin2]:.2f}_{self.lvar2_binmax[ibin2]:.2f}" n_bins = len(self.lpt_finbinmin) analysis_bin_lims_temp = self.lpt_finbinmin.copy() analysis_bin_lims_temp.append(self.lpt_finbinmax[n_bins - 1])