Skip to content
Snippets Groups Projects
Commit c6a118b6 authored by gitlabCI's avatar gitlabCI
Browse files

test on campaign 24x

parent caefc9ee
No related branches found
No related tags found
1 merge request!2585Draft: [Not for merge] B2OC: Lb2LcPi respruce validation
Analysis Production for the Run 3 2024 MC Lb2LcPi (and backgrounds) polarity Up
# B2OC Run3 2024 Analysis Production
## Hlt2 stripping line:
Hlt2B2OC_LbToLcpPi_LcpToPKPi
targetting the decay: Lb -> Lc(->pKpi) pi
## decay of interest:
Lb -> Lc(->pKpi) pi
\ No newline at end of file
# Based on:
# https://gitlab.cern.ch/lhcb/DaVinci/-/blob/v63r2/DaVinciExamples/python/DaVinciExamples/tupling/option_davinci_tupling_from_hlt2.py
import Functors as F
import FunTuple.functorcollections as FC
from FunTuple import FunctorCollection, FunTuple_Particles as Funtuple
from PyConf.reading import get_particles, get_pvs, get_rec_summary, get_odin
from GaudiKernel.SystemOfUnits import GeV
from DaVinci.algorithms import create_lines_filter
from DaVinci import Options, make_config
from DaVinciMCTools import MCTruthAndBkgCat
from DecayTreeFitter import DecayTreeFitter
from Hlt2Conf.flavourTagging import run2_all_taggers
# specific for the B2OC SigmaNet
import Functors.math as fmath
import os
def alg_config(options: Options):
line = "Hlt2B2OC_BdToDmPi_DmToPimPimKp"
line_data = get_particles(f"/Event/Turbo/{line}/Particles")
my_filter = create_lines_filter("Hlt2Line_Filter",
lines=[f"{line}"])
Hlt1_decisions = [
"Hlt1TrackMVADecision",
"Hlt1TwoTrackMVADecision",
]
Hlt2_decisions = ['Hlt2B2OC_BdToDmPi_DmToPimPimKpDecision',
'Hlt2Topo2BodyDecision',
'Hlt2Topo3BodyDecision']
fields = {
"lab0": "[[B0]CC -> (D- -> K+ pi- pi-) pi+]CC",
"lab1": "[[B0]CC -> (D- -> K+ pi- pi-) ^pi+]CC",
"lab2": "[[B0]CC -> ^(D- -> K+ pi- pi-) pi+]CC",
"lab3": "[[B0]CC -> (D- -> ^K+ pi- pi-) pi+]CC",
"lab4": "[[B0]CC -> (D- -> K+ ^pi- pi-) pi+]CC",
"lab5": "[[B0]CC -> (D- -> K+ pi- ^pi-) pi+]CC",
}
pvs = get_pvs()
DTF_MassFitConsD = DecayTreeFitter(name="DTF_MassFitConsD",
input_particles=line_data,
mass_constraints=["D-"])
DTF_LifetimeFit = DecayTreeFitter(name="DTF_LifetimeFit",
input_particles=line_data,
input_pvs=pvs)
all_tagging = run2_all_taggers(line_data)
# define helper functors
get_child = F.CHILD(1, F.FORWARDARG0) # change here the index of the child
get_SV = F.ENDVERTEX @ F.FORWARDARG0
get_SV_pos = F.TOLINALG @ F.POSITION @ get_SV # only if composite (i.e. has vertex)
get_child_endvtx_pos = F.ENDVERTEX_POS @ get_child
get_fdvec_child = get_child_endvtx_pos - get_SV_pos
# define observables
IP_wrt_SV = F.IP.bind(get_SV_pos , get_child)
IPCHI2_wrt_SV = F.IPCHI2.bind(get_SV , get_child) # only if child is composite (i.e. has vertex)
FD_wrt_SV = F.MAGNITUDE @ get_fdvec_child
FDCHI2_wrt_SV = F.VTX_FDCHI2.bind(get_SV, get_child)
B_variables = FunctorCollection(
{
"ID": F.PARTICLE_ID,
"PT": F.PT,
"ETA": F.ETA,
"P": F.P,
"SUMPT": F.SUM(F.PT),
"MASS": F.MASS,
"BPVDIRA": F.BPVDIRA(pvs),
"CHI2DOF": F.CHI2DOF,
"BPVIPCHI2": F.BPVIPCHI2(pvs),
"BPVIP": F.BPVIP(pvs),
"BPVFDCHI2": F.BPVFDCHI2(pvs),
"BPVLTIME": F.BPVLTIME(pvs),
"BPVFD": F.BPVFD(pvs),
"CHILD1_IPwrtSV": IP_wrt_SV,
"CHILD1_IPCHI2wrtSV": IPCHI2_wrt_SV,
"CHILD1_FDwrtSV": FD_wrt_SV,
"CHILD1_FDCHI2wrtSV": FDCHI2_wrt_SV,
"DTF_MassFitConsD_MASS": DTF_MassFitConsD(F.MASS),
"DTF_MassFitConsD_CHI2DOF": DTF_MassFitConsD(F.CHI2DOF), # track or vertex chi2/ndf
"DTF_MassFitConsD_P": DTF_MassFitConsD(F.P),
"DTF_LifetimeFit_MASS": DTF_LifetimeFit(F.MASS),
"DTF_LifetimeFit_CHI2DOF": DTF_LifetimeFit(F.CHI2DOF), # track or vertex chi2/ndf
"DTF_LifetimeFit_CTAU": DTF_LifetimeFit.CTAU,
"DTF_LifetimeFit_CTAUERR": DTF_LifetimeFit.CTAUERR,
"PX": F.PX,
"PY": F.PY,
"PZ": F.PZ,
"BPVX": F.BPVX(pvs),
"BPVY": F.BPVY(pvs),
"BPVZ": F.BPVZ(pvs),
"END_VX": F.END_VX,
"END_VY": F.END_VY,
"END_VZ": F.END_VZ,
"END_VCHI2DOF": F.CHI2DOF @ F.ENDVERTEX,
"BPVCHI2DOF": F.CHI2DOF @ F.BPV(pvs),
# B2OC generic B hadron NN Hlt2 algorithm,
# not planning to use it directly for B2OC EM
"MVA": F.MVA(
MVAType="SigmaNet",
Config={
"File":
"paramfile://data/Hlt2B2OC_B_SigmaNet_Run3-v2.json",
"Name":
"B2OC_SigmaNet_Generic",
"Lambda":
"2.0",
"NLayers":
"3",
"InputSize":
"6",
"Monotone_Constraints":
"[1,-1,-1,-1,-1,-1]",
"Variables":
"log_B_PT,B_ETA,log_B_DIRA,log_B_ENDVERTEX_CHI2,log_B_IPCHI2_OWNPV,log_B_IP_OWNPV",
},
Inputs={
"log_B_PT": fmath.log(F.PT),
"B_ETA": F.ETA,
"log_B_DIRA": fmath.log(1. +1.e-6 - F.BPVDIRA(pvs)),
"log_B_ENDVERTEX_CHI2": fmath.log(F.CHI2DOF),
"log_B_IPCHI2_OWNPV": fmath.log(F.BPVIPCHI2(pvs)),
"log_B_IP_OWNPV": fmath.log(F.BPVIP(pvs)),
}),
}
)
B_variables+=FC.HltTisTos(selection_type="Hlt1", trigger_lines=Hlt1_decisions, data=line_data)
B_variables+=FC.FlavourTaggingResults(all_tagging)
C_variables = FunctorCollection(
{
"ID": F.PARTICLE_ID,
"PT": F.PT,
"ETA": F.ETA,
"P": F.P,
"SUMPT": F.SUM(F.PT),
"MASS": F.MASS,
"DOCA12": F.DOCA(1, 2),
"DOCA13": F.DOCA(1, 3),
"DOCA23": F.DOCA(2, 3),
"BPVDIRA": F.BPVDIRA(pvs),
"CHI2DOF": F.CHI2DOF,
"BPVIP": F.BPVIP(pvs),
"BPVIPCHI2": F.BPVIPCHI2(pvs),
"BPVFD": F.BPVFD(pvs),
"BPVFDCHI2": F.BPVFDCHI2(pvs),
"MINIPCHI2": F.MINIPCHI2(pvs),
"PX": F.PX,
"PY": F.PY,
"PZ": F.PZ,
"BPVX": F.BPVX(pvs),
"BPVY": F.BPVY(pvs),
"BPVZ": F.BPVZ(pvs),
"END_VX": F.END_VX,
"END_VY": F.END_VY,
"END_VZ": F.END_VZ,
"END_VCHI2DOF": F.CHI2DOF @ F.ENDVERTEX,
}
)
fs_variables = FunctorCollection(
{
"ID": F.PARTICLE_ID,
"PT": F.PT,
"ETA": F.ETA,
"PHI": F.PHI,
"P": F.P,
"MASS": F.MASS,
"CHI2DOF": F.CHI2DOF,
"MINIPCHI2": F.MINIPCHI2(pvs),
"BPVIPCHI2": F.BPVIPCHI2(pvs),
"PX": F.PX,
"PY": F.PY,
"PZ": F.PZ,
"hasRICH": F.PPHASRICH() @ F.PROTOPARTICLE(),
"PIDK": F.PID_K,
"PIDp": F.PID_P,
"PIDe": F.PID_E,
"PIDmu": F.PID_MU,
"isMuon": F.ISMUON,
"TRACK_GhostProb": F.GHOSTPROB,
"ProbNNp": F.PROBNN_P,
"NHITS": F.VALUE_OR(-1) @ F.NHITS @ F.TRACK,
"NVPHITS": F.VALUE_OR(-1) @ F.NVPHITS @ F.TRACK, # VeloPixel hits
"NUTHITS": F.VALUE_OR(-1) @ F.NUTHITS @ F.TRACK, # UpstreamTracker hits
"NFTHITS": F.VALUE_OR(-1) @ F.NFTHITS @ F.TRACK, # ForwardTracker hits
"TRACKHASVELO": F.VALUE_OR(-1) @ F.TRACKHASVELO @ F.TRACK,
}
)
variables = {
"lab0": B_variables,
"lab1": fs_variables,
"lab2": C_variables,
"lab3": fs_variables,
"lab4": fs_variables,
"lab5": fs_variables,
}
if options.simulation:
# get configured "MCTruthAndBkgCatAlg" algorithm for HLT2 output
mctruth = MCTruthAndBkgCat(line_data)
# add helper lambda that configures a functor to get truth information
MCTRUTH = lambda func: F.MAP_INPUT(Functor=func, Relations=mctruth.MCAssocTable)
trueid_bkgcat_info = {
# Important note: specify an invalid value for integer functors if there exists no truth info.
# The invalid value for floating point functors is set to nan.
"TRUEID": F.VALUE_OR(0) @ MCTRUTH(F.PARTICLE_ID),
"TRUEKEY": F.VALUE_OR(-1) @ MCTRUTH(F.OBJECT_KEY),
#
"TRUEPT": MCTRUTH(F.PT),
"TRUEPX": MCTRUTH(F.PX),
"TRUEPY": MCTRUTH(F.PY),
"TRUEPZ": MCTRUTH(F.PZ),
"TRUEENERGY": MCTRUTH(F.ENERGY),
"TRUEP": MCTRUTH(F.P),
"TRUEFOURMOMENTUM": MCTRUTH(F.FOURMOMENTUM),
"BKGCAT": F.BKGCAT(Relations=mctruth.BkgCatTable),
}
for field in variables.keys():
variables[field] += FunctorCollection(trueid_bkgcat_info)
odin = get_odin()
rec_summary = get_rec_summary()
# define event level variables
evt_variables = FunctorCollection({
"RUNNUMBER": F.RUNNUMBER(odin),
"EVENTNUMBER": F.EVENTNUMBER(odin),
"nVPClusters" : F.VALUE_OR(-1) @ F.RECSUMMARY_INFO( rec_summary, "nVPClusters"),
"nFTClusters" : F.VALUE_OR(-1) @ F.RECSUMMARY_INFO( rec_summary, "nFTClusters"),
"nPVs": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nPVs"),
"nLongTracks": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nLongTracks"),
"nVeloTracks": F.VALUE_OR(-1) @F.RECSUMMARY_INFO(rec_summary,"nVeloTracks"),
})
evt_variables+=FC.SelectionInfo(selection_type="Hlt1", trigger_lines=Hlt1_decisions)
evt_variables+=FC.SelectionInfo(selection_type="Hlt2", trigger_lines=Hlt2_decisions)
# define FunTuple instance
my_tuple = Funtuple(
name="Tuple",
tuple_name="DecayTree",
fields=fields,
variables=variables,
event_variables=evt_variables,
inputs=line_data,
store_multiple_cand_info=True,
)
return make_config(options, [my_filter, my_tuple])
# Based on:
# https://gitlab.cern.ch/lhcb/DaVinci/-/blob/v63r2/DaVinciExamples/python/DaVinciExamples/tupling/option_davinci_tupling_from_hlt2.py
import Functors as F
import FunTuple.functorcollections as FC
from FunTuple import FunctorCollection, FunTuple_Particles as Funtuple
from PyConf.reading import get_particles, get_pvs, get_rec_summary, get_odin
from GaudiKernel.SystemOfUnits import GeV
from Hlt2Conf.algorithms_thor import ParticleFilter
from DaVinci.algorithms import create_lines_filter
from DaVinci import Options, make_config
from DaVinciMCTools import MCTruthAndBkgCat
from DecayTreeFitter import DecayTreeFitter
from Hlt2Conf.flavourTagging import run2_all_taggers
# specific for the B2OC SigmaNet
import Functors.math as fmath
import os
def alg_config(options: Options):
line = "Hlt2B2OC_LbToLcpPi_LcpToPKPi"
line_data = get_particles(f"/Event/Turbo/{line}/Particles")
my_filter = create_lines_filter("Hlt2Line_Filter",
lines=[f"{line}"])
Hlt1_decisions = [
"Hlt1TrackMVADecision",
"Hlt1TwoTrackMVADecision",
]
Hlt2_decisions = ['Hlt2B2OC_LbToLcpPi_LcpToPKPiDecision',
'Hlt2Topo2BodyDecision',
'Hlt2Topo3BodyDecision']
fields = {
'lab0': '[Lambda_b0 -> (Lambda_c+ -> p+ K- pi+) pi-]CC',
'lab1': '[Lambda_b0 -> (Lambda_c+ -> p+ K- pi+) ^pi-]CC',
'lab2': '[Lambda_b0 -> ^(Lambda_c+ -> p+ K- pi+) pi-]CC',
'lab3': '[Lambda_b0 -> (Lambda_c+ -> ^p+ K- pi+) pi-]CC',
'lab4': '[Lambda_b0 -> (Lambda_c+ -> p+ ^K- pi+) pi-]CC',
'lab5': '[Lambda_b0 -> (Lambda_c+ -> p+ K- ^pi+) pi-]CC'
}
pvs = get_pvs()
DTF_MassFitConsLc = DecayTreeFitter(
name="DTF_MassFitConsLc",
input_particles=line_data,
mass_constraints=["Lambda_c+"])
DTF_LifetimeFit = DecayTreeFitter(
name="DTF_LifetimeFit", input_particles=line_data, input_pvs=pvs)
# all_tagging = run2_all_taggers(line_data)
# define helper functors
get_child = F.CHILD(1, F.FORWARDARG0) # change here the index of the child
get_SV = F.ENDVERTEX @ F.FORWARDARG0
get_SV_pos = F.TOLINALG @ F.POSITION @ get_SV # only if composite (i.e. has vertex)
get_child_endvtx_pos = F.ENDVERTEX_POS @ get_child
get_fdvec_child = get_child_endvtx_pos - get_SV_pos
# define observables
IP_wrt_SV = F.IP.bind(get_SV_pos , get_child)
IPCHI2_wrt_SV = F.IPCHI2.bind(get_SV , get_child) # only if child is composite (i.e. has vertex)
FD_wrt_SV = F.MAGNITUDE @ get_fdvec_child
FDCHI2_wrt_SV = F.VTX_FDCHI2.bind(get_SV, get_child)
B_variables = FunctorCollection(
{
"ID": F.PARTICLE_ID,
"PT": F.PT,
"ETA": F.ETA,
"P": F.P,
"SUMPT": F.SUM(F.PT),
"MASS": F.MASS,
"BPVDIRA": F.BPVDIRA(pvs),
"CHI2DOF": F.CHI2DOF,
"BPVIPCHI2": F.BPVIPCHI2(pvs),
"BPVIP": F.BPVIP(pvs),
"BPVFDCHI2": F.BPVFDCHI2(pvs),
"BPVLTIME": F.BPVLTIME(pvs),
"BPVFD": F.BPVFD(pvs),
"CHILD1_IPwrtSV": IP_wrt_SV,
"CHILD1_IPCHI2wrtSV": IPCHI2_wrt_SV,
"CHILD1_FDwrtSV": FD_wrt_SV,
"CHILD1_FDCHI2wrtSV": FDCHI2_wrt_SV,
"DTF_MassFitConsLc_MASS": DTF_MassFitConsLc(F.MASS),
"DTF_MassFitConsLc_CHI2DOF": DTF_MassFitConsLc(F.CHI2DOF), # track or vertex chi2/ndf
"DTF_MassFitConsLc_P": DTF_MassFitConsLc(F.P),
"DTF_LifetimeFit_MASS": DTF_LifetimeFit(F.MASS),
"DTF_LifetimeFit_CHI2DOF": DTF_LifetimeFit(F.CHI2DOF), # track or vertex chi2/ndf
"DTF_LifetimeFit_CTAU": DTF_LifetimeFit.CTAU,
"DTF_LifetimeFit_CTAUERR": DTF_LifetimeFit.CTAUERR,
"PX": F.PX,
"PY": F.PY,
"PZ": F.PZ,
"BPVX": F.BPVX(pvs),
"BPVY": F.BPVY(pvs),
"BPVZ": F.BPVZ(pvs),
"END_VX": F.END_VX,
"END_VY": F.END_VY,
"END_VZ": F.END_VZ,
"END_VCHI2DOF": F.CHI2DOF @ F.ENDVERTEX,
"BPVCHI2DOF": F.CHI2DOF @ F.BPV(pvs),
# B2OC generic B hadron NN Hlt2 algorithm,
# not planning to use it directly for B2OC EM
"MVA": F.MVA(
MVAType="SigmaNet",
Config={
"File":
"paramfile://data/Hlt2B2OC_B_SigmaNet_Run3-v2.json",
"Name":
"B2OC_SigmaNet_Generic",
"Lambda":
"2.0",
"NLayers":
"3",
"InputSize":
"6",
"Monotone_Constraints":
"[1,-1,-1,-1,-1,-1]",
"Variables":
"log_B_PT,B_ETA,log_B_DIRA,log_B_ENDVERTEX_CHI2,log_B_IPCHI2_OWNPV,log_B_IP_OWNPV",
},
Inputs={
"log_B_PT": fmath.log(F.PT),
"B_ETA": F.ETA,
"log_B_DIRA": fmath.log(1. +1.e-6 - F.BPVDIRA(pvs)),
"log_B_ENDVERTEX_CHI2": fmath.log(F.CHI2DOF),
"log_B_IPCHI2_OWNPV": fmath.log(F.BPVIPCHI2(pvs)),
"log_B_IP_OWNPV": fmath.log(F.BPVIP(pvs)),
}),
}
)
B_variables+=FC.HltTisTos(selection_type="Hlt1", trigger_lines=Hlt1_decisions, data=line_data)
# B_variables+=FC.FlavourTaggingResults(all_tagging)
C_variables = FunctorCollection(
{
"ID": F.PARTICLE_ID,
"PT": F.PT,
"ETA": F.ETA,
"P": F.P,
"SUMPT": F.SUM(F.PT),
"MASS": F.MASS,
"DOCA12": F.DOCA(1, 2),
"DOCA13": F.DOCA(1, 3),
"DOCA23": F.DOCA(2, 3),
"BPVDIRA": F.BPVDIRA(pvs),
"CHI2DOF": F.CHI2DOF,
"BPVIP": F.BPVIP(pvs),
"BPVIPCHI2": F.BPVIPCHI2(pvs),
"BPVFD": F.BPVFD(pvs),
"BPVFDCHI2": F.BPVFDCHI2(pvs),
"MINIPCHI2": F.MINIPCHI2(pvs),
"PX": F.PX,
"PY": F.PY,
"PZ": F.PZ,
"BPVX": F.BPVX(pvs),
"BPVY": F.BPVY(pvs),
"BPVZ": F.BPVZ(pvs),
"END_VX": F.END_VX,
"END_VY": F.END_VY,
"END_VZ": F.END_VZ,
"END_VCHI2DOF": F.CHI2DOF @ F.ENDVERTEX,
}
)
fs_variables = FunctorCollection(
{
"ID": F.PARTICLE_ID,
"PT": F.PT,
"ETA": F.ETA,
"PHI": F.PHI,
"P": F.P,
"MASS": F.MASS,
"CHI2DOF": F.CHI2DOF,
"MINIPCHI2": F.MINIPCHI2(pvs),
"BPVIPCHI2": F.BPVIPCHI2(pvs),
"PX": F.PX,
"PY": F.PY,
"PZ": F.PZ,
"hasRICH": F.PPHASRICH() @ F.PROTOPARTICLE(),
"PIDK": F.PID_K,
"PIDp": F.PID_P,
"PIDe": F.PID_E,
"PIDmu": F.PID_MU,
"isMuon": F.ISMUON,
"TRACK_GhostProb": F.GHOSTPROB,
"ProbNNp": F.PROBNN_P,
"NHITS": F.VALUE_OR(-1) @ F.NHITS @ F.TRACK,
"NVPHITS": F.VALUE_OR(-1) @ F.NVPHITS @ F.TRACK, # VeloPixel hits
"NUTHITS": F.VALUE_OR(-1) @ F.NUTHITS @ F.TRACK, # UpstreamTracker hits
"NFTHITS": F.VALUE_OR(-1) @ F.NFTHITS @ F.TRACK, # ForwardTracker hits
"TRACKHASVELO": F.VALUE_OR(-1) @ F.TRACKHASVELO @ F.TRACK,
}
)
variables = {
"lab0": B_variables,
"lab1": fs_variables,
"lab2": C_variables,
"lab3": fs_variables,
"lab4": fs_variables,
"lab5": fs_variables,
}
if options.simulation:
# get configured "MCTruthAndBkgCatAlg" algorithm for HLT2 output
mctruth = MCTruthAndBkgCat(line_data)
# add helper lambda that configures a functor to get truth information
MCTRUTH = lambda func: F.MAP_INPUT(Functor=func, Relations=mctruth.MCAssocTable)
trueid_bkgcat_info = {
# Important note: specify an invalid value for integer functors if there exists no truth info.
# The invalid value for floating point functors is set to nan.
"TRUEID": F.VALUE_OR(0) @ MCTRUTH(F.PARTICLE_ID),
"TRUEKEY": F.VALUE_OR(-1) @ MCTRUTH(F.OBJECT_KEY),
#
"TRUEPT": MCTRUTH(F.PT),
"TRUEPX": MCTRUTH(F.PX),
"TRUEPY": MCTRUTH(F.PY),
"TRUEPZ": MCTRUTH(F.PZ),
"TRUEENERGY": MCTRUTH(F.ENERGY),
"TRUEP": MCTRUTH(F.P),
"TRUEFOURMOMENTUM": MCTRUTH(F.FOURMOMENTUM),
"BKGCAT": F.BKGCAT(Relations=mctruth.BkgCatTable),
}
for field in variables.keys():
variables[field] += FunctorCollection(trueid_bkgcat_info)
odin = get_odin()
rec_summary = get_rec_summary()
# define event level variables
evt_variables = FunctorCollection({
"RUNNUMBER": F.RUNNUMBER(odin),
"EVENTNUMBER": F.EVENTNUMBER(odin),
"nVPClusters" : F.VALUE_OR(-1) @ F.RECSUMMARY_INFO( rec_summary, "nVPClusters"),
"nFTClusters" : F.VALUE_OR(-1) @ F.RECSUMMARY_INFO( rec_summary, "nFTClusters"),
"nPVs": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nPVs"),
"nLongTracks": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nLongTracks"),
"nVeloTracks": F.VALUE_OR(-1) @F.RECSUMMARY_INFO(rec_summary,"nVeloTracks"),
})
evt_variables+=FC.SelectionInfo(selection_type="Hlt1", trigger_lines=Hlt1_decisions)
evt_variables+=FC.SelectionInfo(selection_type="Hlt2", trigger_lines=Hlt2_decisions)
# define FunTuple instance
my_tuple = Funtuple(
name="Tuple",
tuple_name="DecayTree",
fields=fields,
variables=variables,
event_variables=evt_variables,
inputs=line_data,
store_multiple_cand_info=True,
)
return make_config(options, [my_filter, my_tuple])
###############################################################################
# (c) Copyright 2023 CERN for the benefit of the LHCb Collaboration #
# #
# This software is distributed under the terms of the GNU General Public #
# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". #
# #
# In applying this licence, CERN does not waive the privileges and immunities #
# granted to it by virtue of its status as an Intergovernmental Organization #
# or submit itself to any jurisdiction. #
###############################################################################
"""
Configures running HLT1 via Moore.
"""
from Moore import Options
from Moore.config import allen_control_flow
from RecoConf.hlt1_allen import allen_gaudi_config, get_allen_line_names
from PyConf.application import configure_input, configure
def alg_config(options: Options):
"""
Configures algorithm running of HLT1 via Moore to be passed to Analysis Productions.
"""
config = configure_input(options)
with allen_gaudi_config.bind(sequence="hlt1_pp_matching_1000KHz"):
line_names = get_allen_line_names()
allen_node = allen_control_flow(options)
config.update(configure(options, allen_node))
return config
###############################################################################
# (c) Copyright 2023 CERN for the benefit of the LHCb Collaboration #
# #
# This software is distributed under the terms of the GNU General Public #
# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". #
# #
# In applying this licence, CERN does not waive the privileges and immunities #
# granted to it by virtue of its status as an Intergovernmental Organization #
# or submit itself to any jurisdiction. #
###############################################################################
"""
Configures running HLT2 via Moore.
"""
from Moore import options, Options, run_moore
from Hlt2Conf.lines.b_to_open_charm import all_lines
#
from RecoConf.global_tools import stateProvider_with_simplified_geom, trackMasterExtrapolator_with_simplified_geom
from RecoConf.reconstruction_objects import reconstruction
all_lines = {}
from Hlt2Conf.lines.b_to_open_charm.hlt2_b2oc import make_hlt2_lines
default_lines = [
'LbToLcpPi_LcpToPKPi',
]
extra_config = {}
make_hlt2_lines(
line_dict=all_lines,
all_lines=default_lines,
extra_config=extra_config)
def make_lines():
lines = [builder() for builder in all_lines.values()]
return lines
def alg_config(options: Options):
make_tight_pions.global_bind(pi_pidk_max=None)
make_lc_to_pkpi.global_bind(pi_pidk_max=None,k_pidk_min=None,p_pidkmp_max=None)
public_tools = [
trackMasterExtrapolator_with_simplified_geom(),
stateProvider_with_simplified_geom()
]
# config_pp_2024_without_UT or config_pp_2024
from Hlt2Conf.settings.hlt2_binds import config_pp_2024
with reconstruction.bind(from_file=False), config_pp_2024():
config = run_moore(options, make_lines, public_tools)
return config
checks:
hist_lab0_MASS:
type: range
expression: lab0_MASS
limits:
min: 5_000
max: 7_000
n_bins: 100
defaults:
application: DaVinci/v65r1@x86_64_v2-el9-clang16-opt
output: DATA.ROOT
options:
entrypoint: Lb2LcPi_Run3_respruce_test.dv_simple:alg_config
extra_options:
input_raw_format: 0.5
input_type: ROOT # ROOT for SprucingPass, RAW for RAW data (Hlt2 output)
simulation: False
data_type: "Upgrade"
geometry_version: run3/trunk
conditions_version: master
input_process: "TurboSpruce" # for SprucingPass, "Hlt2" for RAW data (Hlt2 output)
input_stream: "b2oc" # for streamed data
inform:
- maciej.artur.giza@cern.ch
wg: B2OC
{%- set datasets = [
('2024Data', 'MagDown-Excl-UT', '24x'),
('2024Data', 'MagUp-Excl-UT', '24x'),
('2024Data', 'MagDown', '24x'),
('2024Data', 'MagUp', '24x'),
]%}
{%- for evttype, polarity, campain in datasets %}
Lb2LcPi_{{ evttype }}_{{ polarity }}_{{ campain }}:
input:
bk_query: "/validation/Collision24/Beam6800GeV-VeloClosed-{{ polarity }}/Real Data/Sprucing{{ campain }}/94000000/B2OC.DST"
dq_flags:
- UNCHECKED
- OK
keep_running: false
n_test_lfns: 2
checks:
- hist_lab0_MASS
{%- endfor %}
checks:
hist_lab0_MASS:
type: range
expression: lab0_MASS
limits:
min: 5_000
max: 7_000
n_bins: 100
defaults:
application: DaVinci/v64r10@x86_64_v2-el9-clang16-opt
output: DATA.ROOT
options:
entrypoint: Lb2LcPi_Run3.dv_simple:alg_config
extra_options:
input_raw_format: 0.5
input_type: ROOT # ROOT for SprucingPass, RAW for RAW data (Hlt2 output)
simulation: True
data_type: "Upgrade"
geometry_version: run3/trunk
conditions_version: master
input_process: "Hlt2" # for SprucingPass, "Hlt2" for RAW data (Hlt2 output)
inform:
- maciej.artur.giza@cern.ch
wg: B2OC
{%- set datasets = [
('15364010', 'MagUp'), # Lb2LcPi
('11264001', 'MagUp'), # Bd2DPi
('13264021', 'MagUp'), # Bs2DsPi
('15364011', 'MagUp'), # Lb2LcK
]%}
{%- for evttype, polarity in datasets %}
Lb2LcPi_{{ evttype }}_{{ polarity }}:
input:
bk_query: "/MC/2024/Beam6800GeV-2024.W31.34-{{ polarity }}-Nu6.3-25ns-Pythia8/Sim10d/HLT2-2024.W31.34/{{ evttype }}/DST"
dq_flags:
- UNCHECKED
- OK
keep_running: false
n_test_lfns: 1
checks:
- hist_lab0_MASS
{%- endfor %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment