Skip to content
Snippets Groups Projects
Commit d9f75e3f authored by Peilian Li's avatar Peilian Li
Browse files

Merge branch 'rowina-hadint-mc24' into 'master'

run with HadInt lines over block 1 dst

See merge request !2360
parents 37e35c21 e504aa6a
No related branches found
No related tags found
2 merge requests!2360run with HadInt lines over block 1 dst,!2313Draft: Rquaglia rd ap 2024 for b->v ee very low q2 fixes on DTF and vertex errors
###############################################################################
# (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. #
###############################################################################
"""
Read an HLT2 file and create an ntuple with the new DaVinci configuration, accessing HLT2 decisions.
"""
import Functors as F
from FunTuple import FunctorCollection, FunTuple_Particles as Funtuple
from PyConf.reading import (
get_particles,
get_pvs,
get_rec_summary,
)
from DaVinci import Options, make_config
from FunTuple.functorcollections import Kinematics, EventInfo, SelectionInfo, ParticleID, HltTisTos
from DaVinciMCTools import MCTruthAndBkgCat
from Functors.math import log
from DaVinci.algorithms import create_lines_filter
from GaudiConf.LbExec import HltSourceID
from PyConf.dataflow import DataHandle
from PyConf.reading import get_odin, get_decreports, get_hlt1_selreports, get_particles
import DaVinciMCTools
dstar_kpi_branches = {
"Dstp": "[D*(2010)+ -> (D0 -> K- pi+) pi+]CC",
"Pip_slow": "[D*(2010)+ -> (D0 -> K- pi+) ^pi+]CC",
"D0": "[D*(2010)+ -> ^(D0 -> K- pi+) pi+]CC",
"Km": "[D*(2010)+ -> (D0 -> ^K- pi+) pi+]CC",
"Pip": "[D*(2010)+ -> (D0 -> K- ^pi+) pi+]CC",
}
dstar_k3pi_branches = {
"Dstp": "[D*(2010)+ -> (D0 -> K- pi- pi+ pi+) pi+]CC",
"Pip_slow": "[D*(2010)+ -> (D0 -> K- pi- pi+ pi+) ^pi+]CC",
"D0": "[D*(2010)+ -> ^(D0 -> K- pi- pi+ pi+) pi+]CC",
"Km": "[D*(2010)+ -> (D0 -> ^K- pi- pi+ pi+) pi+]CC",
"Pim": "[D*(2010)+ -> (D0 -> K- ^pi- pi+ pi+) pi+]CC",
"Pip1": "[D*(2010)+ -> (D0 -> K- pi- ^pi+ pi+) pi+]CC",
"Pip2": "[D*(2010)+ -> (D0 -> K- pi- pi+ ^pi+) pi+]CC",
}
dstar_lines = [
"Hlt2HadInt_DstpToD0Pip_D0ToKmPip",
"Hlt2HadInt_DstpToD0Pip_D0ToKmPimPipPip",
]
hlt1_decisions = [
'Hlt1D2KK',
'Hlt1D2KPi',
'Hlt1D2PiPi',
'Hlt1DiMuonHighMass',
'Hlt1DiMuonLowMass',
'Hlt1KsToPiPi',
'Hlt1LowPtDiMuon',
'Hlt1LowPtMuon',
'Hlt1OneMuonTrackLine',
'Hlt1SingleHighEt',
'Hlt1SingleHighPtElectron',
'Hlt1SingleHighPtMuon',
'Hlt1SingleHighPtMuonNoMuID',
'Hlt1TrackElectronMVA',
'Hlt1TrackMVA',
'Hlt1TrackMuonMVA',
'Hlt1TwoKs',
'Hlt1TwoTrackKs',
'Hlt1TwoTrackMVACharmXSec',
'Hlt1TwoTrackMVA',
]
def get_mother_variables():
v2_pvs = get_pvs()
mother_variables = (
FunctorCollection(
{
"ETA": F.ETA,
"ENDVERTEX_CHI2": F.CHI2,
"ENDVERTEX_X": F.END_VX,
"ENDVERTEX_Y": F.END_VY,
"ENDVERTEX_Z": F.END_VZ,
"OWNPV_X": F.BPVX(v2_pvs),
"OWNPV_Y": F.BPVY(v2_pvs),
"OWNPV_Z": F.BPVZ(v2_pvs),
"IP_OWNPV": F.BPVIP(v2_pvs),
"TAU": F.BPVLTIME(v2_pvs),
"PHI": F.PHI,
"ID": F.PARTICLE_ID,
"KEY": F.OBJECT_KEY,
"MAX_PT": F.MAX(F.PT),
"MIN_PT": F.MIN(F.PT),
"SUM_PT": F.SUM(F.PT),
"MAX_P": F.MAX(F.P),
"MIN_P": F.MIN(F.P),
"SUMPT": F.SUM(F.PT),
"DOCA": F.DOCA(1, 2),
"DOCACHI2": F.DOCACHI2(1, 2),
"DOCACHI2": F.DOCACHI2(1, 2),
"MAXDOCA": F.MAXDOCA(),
"MAXDOCACHI2": F.MAXDOCACHI2(),
"BPVDIRA": F.BPVDIRA(v2_pvs),
"TRACK_CHI2NDOF": F.CHI2DOF,
"BPVFDCHI2": F.BPVFDCHI2(v2_pvs),
"BPVVDRHO": F.BPVVDRHO(v2_pvs),
"IPCHI2_OWNPV": F.BPVIPCHI2(v2_pvs),
"LOGIPCHI2_OWNPV": log(F.BPVIPCHI2(v2_pvs)),
"MAX_BPVIPCHI2": F.MAX(F.BPVIPCHI2(v2_pvs)),
"MIN_BPVIPCHI2": F.MIN(F.BPVIPCHI2(v2_pvs)),
"MINIPCHI2": F.MINIPCHI2(v2_pvs),
"ISMUON": F.ISMUON,
}
)
+ Kinematics()
+ ParticleID(extra_info=True)
)
return mother_variables
def get_daughter_variables():
v2_pvs = get_pvs()
daughter_variables = (
FunctorCollection(
{
"NDOF": F.VALUE_OR(-1) @ F.NDOF @ F.TRACK,
"NFTHITS": F.VALUE_OR(-1) @ F.NFTHITS @ F.TRACK,
"NHITS": F.VALUE_OR(-1) @ F.NHITS @ F.TRACK,
"NUTHITS": F.VALUE_OR(-1) @ F.NUTHITS @ F.TRACK,
"NVPHITS": F.VALUE_OR(-1) @ F.NVPHITS @ F.TRACK,
"TRACKHASVELO": F.VALUE_OR(-1) @ F.TRACKHASVELO @ F.TRACK,
"TRACKHISTORY": F.VALUE_OR(-1) @ F.TRACKHISTORY @ F.TRACK,
"TRACKPT": F.TRACK_PT,
"ETA": F.ETA,
"PHI": F.PHI,
"IPCHI2_OWNPV": F.BPVIPCHI2(v2_pvs),
"OWNPV_X": F.BPVX(v2_pvs),
"OWNPV_Y": F.BPVY(v2_pvs),
"OWNPV_Z": F.BPVZ(v2_pvs),
"IP_OWNPV": F.BPVIP(v2_pvs),
"TRACK_CHI2NDOF": F.CHI2DOF @ F.TRACK,
"ID": F.PARTICLE_ID,
"MINIPCHI2": F.MINIPCHI2(v2_pvs),
"GhostProb": F.GHOSTPROB,
"PIDK": F.PID_K,
"PIDe": F.PID_E,
"PIDmu": F.PID_MU,
"PIDp": F.PID_P,
"PIDpi": F.PID_PI,
"ISMUON": F.ISMUON,
"FirstStatePosition_": F.POSITION @ F.FRONT @ F.STATES @ F.TRACK,
"LastStatePosition_": F.POSITION @ F.BACK @ F.STATES @ F.TRACK,
}
)
+ Kinematics()
+ ParticleID(extra_info=True)
)
return daughter_variables
def get_evt_variables():
rec_summary = get_rec_summary()
evt_variables = FunctorCollection(
{
"nPVs": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nPVs"),
"nTracks": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nTracks"), # but always 0 ...
"nLongTracks": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nLongTracks"),
"nFTClusters": F.VALUE_OR(-1) @ F.RECSUMMARY_INFO(rec_summary, "nFTClusters"),
}
)
evt_variables += EventInfo()
evt_variables += SelectionInfo(
selection_type="Hlt2", trigger_lines=dstar_lines
)
evt_variables += SelectionInfo(
selection_type="Hlt1", trigger_lines=hlt1_decisions
)
return evt_variables
def get_trueid_bkgcat_info(data, name):
MC_TRUTH = MCTruthAndBkgCat(data, name=name)
MCMOTHER_ID = lambda n: F.VALUE_OR(0) @ MC_TRUTH(F.MC_MOTHER(n, F.PARTICLE_ID))
MCMOTHER_KEY = lambda n: F.VALUE_OR(-1) @ MC_TRUTH(F.MC_MOTHER(n, F.OBJECT_KEY))
trueid_bkgcat_info = FunctorCollection(
{
"TRUEID": F.VALUE_OR(0) @ MC_TRUTH(F.PARTICLE_ID),
"TRUEKEY": F.VALUE_OR(-1) @ MC_TRUTH(F.OBJECT_KEY),
"TRUEPT": MC_TRUTH(F.PT),
"TRUEPX": MC_TRUTH(F.PX),
"TRUEPY": MC_TRUTH(F.PY),
"TRUEPZ": MC_TRUTH(F.PZ),
"TRUEENERGY": MC_TRUTH(F.ENERGY),
"TRUEP": MC_TRUTH(F.P),
"TRUEM": MC_TRUTH(F.MASS),
"TRUEETA": MC_TRUTH(F.ETA),
"TRUEPHI": MC_TRUTH(F.PHI),
"TRUEFOURMOMENTUM": MC_TRUTH(F.FOURMOMENTUM),
"MC_MOTHER_ID": MCMOTHER_ID(1),
"MC_MOTHER_KEY": MCMOTHER_KEY(1),
"MC_GD_MOTHER_ID": MCMOTHER_ID(2),
"MC_GD_MOTHER_KEY": MCMOTHER_KEY(2),
"MC_GD_GD_MOTHER_ID": MCMOTHER_ID(3),
"MC_GD_GD_MOTHER_KEY": MCMOTHER_KEY(3),
"TRUEORIGIN_VX": MC_TRUTH(F.ORIGIN_VX),
"TRUEORIGIN_VY": MC_TRUTH(F.ORIGIN_VY),
"TRUEORIGIN_VZ": MC_TRUTH(F.ORIGIN_VZ),
"TRUEEND_VX": MC_TRUTH(F.END_VX),
"TRUEEND_VY": MC_TRUTH(F.END_VY),
"TRUEEND_VZ": MC_TRUTH(F.END_VZ),
"BKGCAT": MC_TRUTH.BkgCat,
}
)
return trueid_bkgcat_info
def get_dstar_kpi_tuples(Tuples):
mother_variables = get_mother_variables()
daughter_variables = get_daughter_variables()
evt_variables = get_evt_variables()
dstar_kpi_data = get_particles(f"/Event/HLT2/Hlt2HadInt_DstpToD0Pip_D0ToKmPip/Particles")
dstar_kpi_hlt1tistos = HltTisTos(
selection_type="Hlt1",
trigger_lines=[f"{x}Decision" for x in hlt1_decisions],
data=dstar_kpi_data
)
dstar_kpi_hlt2tistos = HltTisTos(
selection_type="Hlt2",
trigger_lines=[f"{x}Decision" for x in dstar_lines],
data=dstar_kpi_data,
trigger_particles=[get_particles(f"/Event/HLT2/{line}/Particles") for line in dstar_lines],
)
trueid_bkgcat_info = get_trueid_bkgcat_info(dstar_kpi_data, name='MCTruthAndBkgCat_dstar_kpi')
variables_kpi_dstar = {
"Dstp": mother_variables
+ FunctorCollection({"DELTA_M": F.MASS - F.CHILD(1, F.MASS)})
+ trueid_bkgcat_info
+ dstar_kpi_hlt1tistos + dstar_kpi_hlt2tistos,
"Pip_slow": daughter_variables + trueid_bkgcat_info + dstar_kpi_hlt1tistos + dstar_kpi_hlt2tistos,
"D0": mother_variables + trueid_bkgcat_info + dstar_kpi_hlt1tistos + dstar_kpi_hlt2tistos,
"Km": daughter_variables + trueid_bkgcat_info + dstar_kpi_hlt1tistos + dstar_kpi_hlt2tistos,
"Pip": daughter_variables + trueid_bkgcat_info + dstar_kpi_hlt1tistos + dstar_kpi_hlt2tistos,
}
dstar_kpi_tuple = Funtuple(
name="Tuple_DstpToD0Pip_D0ToKmPip",
tuple_name="DecayTree",
fields=dstar_kpi_branches,
variables=variables_kpi_dstar,
event_variables=evt_variables,
inputs=dstar_kpi_data,
)
dstar_kpi_filter = create_lines_filter(
name="Filter_Dst_D0pi-Kpi",
lines=["Hlt2HadInt_DstpToD0Pip_D0ToKmPip"]
)
Tuples["Hlt2HadInt_DstpToD0Pip_D0ToKmPip"] = [dstar_kpi_filter, dstar_kpi_tuple]
def get_dstar_k3pi_tuples(Tuples):
mother_variables = get_mother_variables()
daughter_variables = get_daughter_variables()
evt_variables = get_evt_variables()
dstar_k3pi_data = get_particles(f"/Event/HLT2/Hlt2HadInt_DstpToD0Pip_D0ToKmPimPipPip/Particles")
dstar_k3pi_hlt1tistos = HltTisTos(
selection_type="Hlt1",
trigger_lines=[f"{x}Decision" for x in hlt1_decisions],
data=dstar_k3pi_data
)
dstar_k3pi_hlt2tistos = HltTisTos(
selection_type="Hlt2",
trigger_lines=[f"{x}Decision" for x in dstar_lines],
data=dstar_k3pi_data,
trigger_particles=[get_particles(f"/Event/HLT2/{line}/Particles") for line in dstar_lines],
)
trueid_bkgcat_info = get_trueid_bkgcat_info(dstar_k3pi_data, name='MCTruthAndBkgCat_dstar_k3pi')
variables_k3pi_dstar = {
"Dstp": mother_variables
+ FunctorCollection({"DELTA_M": F.MASS - F.CHILD(1, F.MASS)})
+ trueid_bkgcat_info
+ dstar_k3pi_hlt1tistos + dstar_k3pi_hlt2tistos,
"Pip_slow": daughter_variables + trueid_bkgcat_info + dstar_k3pi_hlt1tistos + dstar_k3pi_hlt2tistos,
"D0": mother_variables + trueid_bkgcat_info + dstar_k3pi_hlt1tistos + dstar_k3pi_hlt2tistos,
"Km": daughter_variables + trueid_bkgcat_info + dstar_k3pi_hlt1tistos + dstar_k3pi_hlt2tistos,
"Pim": daughter_variables + trueid_bkgcat_info + dstar_k3pi_hlt1tistos + dstar_k3pi_hlt2tistos,
"Pip1": daughter_variables + trueid_bkgcat_info + dstar_k3pi_hlt1tistos + dstar_k3pi_hlt2tistos,
"Pip2": daughter_variables + trueid_bkgcat_info + dstar_k3pi_hlt1tistos + dstar_k3pi_hlt2tistos,
}
dstar_k3pi_tuple = Funtuple(
name="Tuple_DstpToD0Pip_D0ToKmPimPipPip",
tuple_name="DecayTree",
fields=dstar_k3pi_branches,
variables=variables_k3pi_dstar,
event_variables=evt_variables,
inputs=dstar_k3pi_data,
)
dstar_k3pi_filter = create_lines_filter(
name="Filter_Dst_D0pi-Kpipipi",
lines=["Hlt2HadInt_DstpToD0Pip_D0ToKmPimPipPip"],
)
Tuples["Hlt2HadInt_DstpToD0Pip_D0ToKmPimPipPip"] = [dstar_k3pi_filter, dstar_k3pi_tuple]
def alg_config(options: Options):
Tuples = {}
get_dstar_kpi_tuples(Tuples)
get_dstar_k3pi_tuples(Tuples)
return make_config(options, Tuples)
defaults:
inform:
- rowina.caspary@cern.ch
- peilian.li@cern.ch
wg: Calib
#####################
#
# MC
#
#####################
{%- set datasets = [
('DstToD0Pip_D0ToKmPip', '27163003'),
('DstToD0Pip_D0ToKmPimPipPip', '27165073'),
]%}
{%- for name, dec in datasets %}
MagUp_MC_{{name}}_Nu63_Tuple:
application: "DaVinci/v64r12@x86_64_v2-el9-gcc13+detdesc-opt"
input:
bk_query: "/MC/2024/Beam6800GeV-2024.W31.34-MagUp-Nu6.3-25ns-Pythia8/Sim10d/HLT2-2024.W31.34/{{dec}}/DST"
dq_flags:
- OK
n_test_lfns: 1
output: MC.ROOT
options:
entrypoint: TrackingEfficiencyLines.davinci_charm_mc:alg_config
extra_options:
input_raw_format: 0.5
input_type: ROOT
simulation: True
data_type: "Upgrade"
conddb_tag: 'sim10-2024.Q3.4-v1.3-mu100'
dddb_tag: 'dddb-20240427'
input_process: "Hlt2"
{%- 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