From 84a34433c0813c53bc942fcd8b0f7747865d4b05 Mon Sep 17 00:00:00 2001 From: Alessio Piucci Date: Sun, 29 Sep 2019 22:30:31 +0200 Subject: [PATCH 1/4] Implementation of two beauty --> Lc D, Lc D0 K lines --- .../Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py | 271 +++++++++++++ .../Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py | 364 ++++++++++++++++++ .../python/Hlt2Conf/lines/__init__.py | 2 + 3 files changed, 637 insertions(+) create mode 100644 Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py create mode 100644 Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py new file mode 100644 index 00000000000..35e4d5c71c4 --- /dev/null +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py @@ -0,0 +1,271 @@ +############################################################################### +# (c) Copyright 2019 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. # +############################################################################### + +""" +Definition of the Lb2LcDLc2pKPiD2HHH line, with Lc --> p K- p+ and D --> HHHH. +Translation of the Lb2LcDD2HHHPIDBeauty2CharmLine stripping line from Stripping 34. +""" + +from __future__ import absolute_import, division, print_function +import math + +from GaudiKernel.SystemOfUnits import GeV, MeV, mm, mrad, picosecond + +from RecoConf.hlt1_tracking import require_pvs, require_gec +from RecoConf.reco_objects_from_file import make_pvs + +from ..algorithms import require_all, ParticleFilterWithPVs, ParticleCombinerWithPVs, N3BodyCombinerWithPVs +from ..framework import configurable +from . import hlt2_line_builder + +# get the basic particles +from ..standard_particles import make_has_rich_long_kaons, make_has_rich_long_pions, make_has_rich_long_protons + +# get the filtered pions, kaons and Lc from the X2LcD0KLc2pKPiD02KPi module +from X2LcD0KLc2pKPiD02KPi import filter_D0_daughters, filter_Lc_daughters, make_Lc2pKPi + +def prefilters(): + """Basic prefilters: GEC and PV requirements""" + return [require_gec(), require_pvs(make_pvs())] + + +"""Start making the D""" + +@configurable +def filter_D_daughters(particles, + pvs, + maxTrackChi2=4.0, + minPt=100 * MeV, + minP=1000 * MeV, + minIPChi2=4.0, + maxTrackGhostProb=0.4): + """Filter the kaons/pions used to build the D. + Translation of the KInputsBeauty2CharmFilter/PiInputsBeauty2CharmFilter from the stripping. + It is the same as used in the X2LcD0KLc2pKPiD02KPi module.""" + + return filter_D0_daughters(particles=particles, pvs=pvs, + maxTrackChi2=maxTrackChi2, + minPt=minPt, + minP=minP, + minIPChi2=minIPChi2, + maxTrackGhostProb=maxTrackGhostProb) + +@configurable +def make_D2HHH(kaons, + pions, + pvs, + D_daughters, + decay_descriptors, + maxADOCA_comb12=0.5 * mm, + maxADOCA_comb13=0.5 * mm, + maxADOCA_comb23=0.5 * mm, + minSumPt=1800 * MeV, + minMass=1769.62 * MeV, + maxMass=2068.49 * MeV, + maxTrackChi2_daughter=4.0, + minPt_daughter=500 * MeV, + minP_daughter=5000 * MeV, + minDistChi2PV=1000, + maxVertexChi2_D0=10, + minDistChi2PV_D0=36, + minBPVDIRA_D0=0): + """Make the D --> H H H. + Translation of the ProtoD-2K-K-pi+Beauty2Charm combiner (and brothers) from the stripping. + The D_daughters argument must be a string of the form: "'K-','K-','pi+'" and similar.""" + + combination12_cut = require_all( + "ADOCA(1,2) < {maxADOCA_comb12}", + ).format( + maxADOCA_comb12=maxADOCA_comb12, + ) + + combination_cut = require_all( + "ASUM(PT) > {minSumPt}", + "in_range({minMass}, AWM({D_daughters}), {maxMass})", + "AHASCHILD((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2_daughter}) & (PT > {minPt_daughter}) & (P > {minP_daughter}))|((ABSID=='KS0') & (PT > {minPt_daughter}) & (P > {minP_daughter}) & (BPVVDCHI2 > {minDistChi2PV})))", + "ADOCA(1,3) < {maxADOCA_comb13}", + "ADOCA(2,3) < {maxADOCA_comb23}", + ).format( + minSumPt=minSumPt, + minMass=minMass, + D_daughters=D_daughters, + maxMass=maxMass, + maxTrackChi2_daughter=maxTrackChi2_daughter, + minPt_daughter=minPt_daughter, + minP_daughter=minP_daughter, + minDistChi2PV=minDistChi2PV, + maxADOCA_comb13=maxADOCA_comb13, + maxADOCA_comb23=maxADOCA_comb23, + ) + + mother_cut = require_all( + "VFASPF(VCHI2/VDOF) < {maxVertexChi2_D0}", + "BPVVDCHI2 > {minDistChi2PV_D0}", + "BPVDIRA > {minBPVDIRA_D0}", + ).format( + maxVertexChi2_D0=maxVertexChi2_D0, + minDistChi2PV_D0=minDistChi2PV_D0, + minBPVDIRA_D0=minBPVDIRA_D0, + ) + + return N3BodyCombinerWithPVs( + particles=[kaons, pions], + pvs=pvs, + DecayDescriptors=["[D- -> K- K- pi+]cc"], + Combination12Cut=combination12_cut, + CombinationCut=combination_cut, + MotherCut=mother_cut) + +@configurable +def filter_D(D, + pvs): + """Filter the D. + Translation of the D2HHHPIDBeauty2CharmFilter from the stripping.""" + + code = require_all( + "NINGENERATION(('p+'==ABSID) & (PIDp < -10),1) == 0", + "NINGENERATION(('K+'==ABSID) & (PIDK < -10), 1) == 0", + "NINGENERATION(('pi+'==ABSID) & (PIDK > 20), 1) == 0", + ) + + return ParticleFilterWithPVs(pions, pvs, Code=code) + +"""It is to build the Lb --> Lc D candidate""" + +@configurable +def make_Lb2LcD(particles, + pvs, + minSumPt=5000 * MeV, + minMass=5200 * MeV, + maxMass=7000 * MeV, + maxVertexChi2_Lb=10, + minP=10000 * MeV, + minPt=1700 * MeV, + maxTrackChi2=4., + minDistChi2=16, + minDistPV=0.1 * mm, + minP_2=5000 * MeV, + minPt_2=500 * MeV, + minDistChi2PV=1000, + min_lifetime=0.2 * ps, + maxIPChi2=25, + minBPVDira=0.999): + """Build the Lb candidate. + Translation of the Lb2LcDD2HHHPIDBeauty2Charm combiner from the stripping.""" + + combination_cut = require_all( + "ASUM(SUMTREE(PT,(ISBASIC | (ID=='gamma')),0.0)) > {minSumPt}", + "AM > {minMass}", + "AM < {maxMass}", + ).format( + minSumPt=minSumPt, + minMass=minMass, + maxMass=maxMass, + ) + + mother_cut = require_all( + "VFASPF(VCHI2/VDOF) < {maxVertexChi2_Lb}", + "INTREE(HASTRACK & (P > {minP}) & (PT> {minPt}) & (TRCHI2DOF < {maxTrackChi2}) & (MIPCHI2DV(PRIMARY) > {minDistChi2}) & (MIPDV(PRIMARY) > {minDistPV}))", + "NINTREE((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2}) & (PT > {minPt_2}) & (P > {minP_2}))|((ABSID=='KS0') & (PT > {minPt_2}) & (P > {minP_2}) & (BPVVDCHI2 > {minDistChi2PV}))) > 1", + "BPVLTIME() > {min_lifetime}", + "BPVIPCHI2() < {maxIPChi2}", + "BPVDIRA > {minBPVDira}" + ).format( + maxVertexChi2_Lb=maxVertexChi2, + minP_Lb=minP, + minPt_Lb=minPt, + maxTrackChi2_Lb=maxTrackChi2, + minDistChi2_Lb=minDistChi2, + minDistPV=minDistPV, + minPt_2=minPt_2, + minP_2=minP_2, + minDistChi2PV=minDistChi2PV, + min_lifetime=min_lifetime, + maxIPChi2=maxIPChi2, + minBPVDira=minBPVDira, + ) + + return ParticleCombinerWithPVs( + particles=particles, + pvs=pvs, + DecayDescriptors=['[Lambda_b0 -> Lambda_c+ D-]cc'], + CombinationCut=combination_cut, + MotherCut=mother_cut) + +@hlt2_line_builder('HLT2Lb2LcDLc2pKPiD2HHHLine') +def Lb2LcDLc2pKPiD2HHH(): + "Lb2LcDLc2pKPiD2HHH line" + + # get the PVs + pvs = make_pvs() + + # get the basic protons, kaons and pions + protons = make_has_rich_long_protons() + kaons = make_has_rich_long_kaons() + pions = make_has_rich_long_pions() + + # filter the D daughters + kaons_D = filter_D_daughters(particles=kaons, + pvs=pvs) + pions_D = filter_D_daughters(particles=pions, + pvs=pvs) + + # make the D --> K K K + D2KKK = make_D2HHH(kaons=kaons_D, + pions=pions_D, + D_daughters="'K-','K-','K+'", + decay_descriptors=['[D- -> K- K- K+]cc'], + pvs=pvs) + + # make the D --> K K pi + D2KKPi = make_D2HHH(kaons=kaons_D, + pions=pions_D, + D_daughters="'K-','K-','pi+'", + decay_descriptors=['[D- -> K- K- pi+]cc'], + pvs=pvs) + + # make the D --> K pi pi + D2KPiPi = make_D2HHH(kaons=kaons_D, + pions=pions_D, + D_daughters="'K-','pi-','pi+'", + decay_descriptors=['[D- -> K- pi- pi+]cc'], + pvs=pvs) + + # make the D --> pi pi pi + D2PiPiPi = make_D2HHH(kaons=kaons_D, + pions=pions_D, + D_daughters="'pi-','pi-','pi+'", + decay_descriptors=['[D- -> pi- pi- pi+]cc'], + pvs=pvs) + + # filter the Lc daughters + protons_Lc = filter_Lc_daughters(particles=protons, + pvs=pvs, + PID_code="PIDp>-10.0") + kaons_Lc = filter_Lc_daughters(particles=kaons, + pvs=pvs, + PID_code="PIDK>-10.0") + pions_Lc = filter_Lc_daughters(particles=kaons, + pvs=pvs, + PID_code="PIDK<20.0") + + # make the Lc + Lc = make_Lc2pKPi(protons=protons_Lc, + kaons=kaons_Lc, + pions=pions_Lc, + pvs=pvs) + + # make the X2LcD0K candidates + Lb2LcD = make_Lb2LcD(particles=[D2KKK, D2KKPi, D2KPiPi, D2PiPiPi, Lc], + pvs=pvs) + + return prefilters() + [Lb2LcD] + diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py new file mode 100644 index 00000000000..5c3ad0caeb4 --- /dev/null +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py @@ -0,0 +1,364 @@ +############################################################################### +# (c) Copyright 2019 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. # +############################################################################### + +""" +Definition of the X2LcD0K line, with Lc --> p K- pi+ and D0 --> K+ pi-. +Translation of the X2LcD0KD02KPiBeauty2CharmLine stripping line from Stripping 34. +""" + +from __future__ import absolute_import, division, print_function +import math + +from GaudiKernel.SystemOfUnits import GeV, MeV, mm, mrad, picosecond + +from RecoConf.hlt1_tracking import require_pvs, require_gec +from RecoConf.reco_objects_from_file import make_pvs + +from ..algorithms import require_all, ParticleFilterWithPVs, ParticleCombinerWithPVs, N3BodyCombinerWithPVs +from ..framework import configurable +from . import hlt2_line_builder + +# get the basic particles +from ..standard_particles import make_has_rich_long_kaons, make_has_rich_long_pions, make_has_rich_long_protons + +def prefilters(): + """Basic prefilters: GEC and PV requirements""" + return [require_gec(), require_pvs(make_pvs())] + + +"""Start making the D0""" + +@configurable +def filter_D0_daughters(particles, + pvs, + maxTrackChi2=4.0, + minPt=100 * MeV, + minP=1000 * MeV, + minIPChi2=4.0, + maxTrackGhostProb=0.4): + """Filter the kaons/pions used to build the D0. + Translation of the KInputsBeauty2CharmFilter/PiInputsBeauty2CharmFilter from the stripping.""" + + code = require_all( + "TRCHI2DOF < {maxTrackChi2}" + "PT > {minPt}", + "P > {minP}", + "MIPCHI2DV(PRIMARY) > {minIPChi2}", + "TRGHP < {maxTrackGhostProb}" + ).format( + maxTrackChi2=maxTrackChi2, + minPt=minPt, + minP=minP, + minIPChi2=minIPChi2, + maxTrackGhostProb=maxTrackGhostProb, + ) + + return ParticleFilterWithPVs(particles, pvs, Code=code) + +@configurable +def make_D02KPi(kaons, + pions, + pvs, + minSumPt=1800 * MeV, + minMass=1764.84 * MeV, + maxMass=1964.84 * MeV, + maxTrackChi2_daughter=4.0, + minPt_daughter=500 * MeV, + minP_daughter=5000 * MeV, + minDistChi2PV=1000, + maxVertexChi2_D0=10, + minDistChi2PV_D0=36, + minBPVDIRA_D0=0, + max_ADOCA=0.5 * mm): + """Make the D0 --> K Pi. + Translation of the ProtoD2K+pi-Beauty2Charm combiner from the stripping.""" + + combination_cut = require_all( + "ASUM(PT) > {minSumPt}", + "in_range({minMass}, AWM('K+','pi-'), {maxMass})", + "AHASCHILD((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2_daughter}) & (PT > {minPt_daughter}) & (P > {minP_daughter}))|((ABSID=='KS0') & (PT > {minPt_daughter}) & (P > {minP_daughter}) & (BPVVDCHI2 > {minDistChi2PV})))", + "ADOCA(1,2) < {max_ADOCA}", + ).format( + minSumPt=minSumPt, + minMass=minMass, + maxMass=maxMass, + maxTrackChi2_daughter=maxTrackChi2_daughter, + minPt_daughter=minPt_daughter, + minP_daughter=minP_daughter, + minDistChi2PV=minDistChi2PV, + max_ADOCA=max_ADOCA, + ) + + mother_cut = require_all( + "VFASPF(VCHI2/VDOF) < {maxVertexChi2_D0}", + "BPVVDCHI2 > {minDistChi2PV_D0}", + "BPVDIRA > {minBPVDIRA_D0}", + ).format( + maxVertexChi2_D0=maxVertexChi2_D0, + minDistChi2PV_D0=minDistChi2PV_D0, + minBPVDIRA_D0=minBPVDIRA_D0, + ) + + return ParticleCombinerWithPVs( + particles=[kaons, pions], + pvs=pvs, + DecayDescriptors=["D0 -> K+ pi-"], + CombinationCut=combination_cut, + MotherCut=mother_cut) + +@configurable +def filter_D0(D0, + pvs): + """Filter the D0. + Translation of the D2HHPIDBeauty2CharmFilter and D2KPIPIDBeauty2CharmFilter from the stripping.""" + + code = require_all( + "NINGENERATION(('p+'==ABSID) & (PIDp < -10),1) == 0", + "NINGENERATION(('K+'==ABSID) & (PIDK < -10), 1) == 0", + "NINGENERATION(('pi+'==ABSID) & (PIDK > 20), 1) == 0", + "NINTREE(ABSID=='K+') == 1" + ) + + return ParticleFilterWithPVs(pions, pvs, Code=code) + +"""Now it's time to make the Lc""" + +@configurable +def filter_Lc_daughters(particles, + pvs, + maxTrackChi2=4.0, + minPt=100 * MeV, + minP=1000 * MeV, + minIPChi2=4.0, + maxTrackGhostProb=0.4, + PID_code=PID_code): + """Filter the protons/kaons/pions used to build the Lc. + Translation of the P_PIDInputsBeauty2CharmFilter/K_PIDInputsBeauty2CharmFilter/Pi_PIDInputsBeauty2CharmFilter from the stripping.""" + + code = require_all( + "TRCHI2DOF < {maxTrackChi2}" + "PT > {minPt}", + "P > {minP}", + "MIPCHI2DV(PRIMARY) > {minIPChi2}", + "TRGHP < {maxTrackGhostProb}", + PID_code, + ).format( + maxTrackChi2=maxTrackChi2, + minPt=minPt, + minP=minP, + minIPChi2=minIPChi2, + maxTrackGhostProb=maxTrackGhostProb, + ) + + return ParticleFilterWithPVs(particles, pvs, Code=code) + + +@configurable +def make_Lc2pKPi(protons, + kaons, + pions, + pvs, + decay_descriptors, + maxADOCA_comb12=0.5 * mm, + maxADOCA_comb13=0.4 * mm, + maxADOCA_comb23=0.5 * mm, + minSumPt=1800 * MeV, + massWind_Lc=110 * MeV, + maxTrackChi2_daughter=4., + minPt_daughter=500 * MeV, + minP_daughter=5000 * MeV, + minDistChi2PV=1000, + maxVertexChi2_Lc=10, + minDistChi2PV_Lc=36, + minBPVDIRA_Lc=0): + """Make the Lc --> p K Pi. + Translation of N3BodyDecays/Lc2PKPiBeauty2Charm from the stripping.""" + + combination12_cut = require_all( + "ADOCA(1,2) < {maxADOCA_comb12}", + ).format( + maxADOCA_comb12=maxADOCA_comb12, + ) + + combination_cut = require_all( + "ASUM(PT) > {minSumPt}", + "ADAMASS('Lambda_c+') < {massWind_Lc}", + "(AHASCHILD((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2_daughter}) & (PT > {minPt_daughters}) & (P > {minP_daughters})) | ((ABSID=='KS0') & (PT > {minPt_daughter}) & (P > {minP_daughter}) & (BPVVDCHI2 > {minDistChi2PV}))))", + "ADOCA(1,3) < {maxADOCA_comb13}", + "ADOCA(2,3) < {maxADOCA_comb23}", + ).format( + minSumPt=minSumPt, + massWind_Lc=massWind_Lc, + maxTrackChi2_daughter=maxTrackChi2_daughter, + minPt_daughter=minPt_daughter, + minP_daughter=minP_daughter, + minDistChi2PV=minDistChi2PV, + maxADOCA_comb13=maxADOCA_comb13, + maxADOCA_comb23=maxADOCA_comb23, + ) + + mother_cut = require_all( + "ADMASS('Lambda_c+') < {massWind_Lc}", + "VFASPF(VCHI2/VDOF) < {maxVertexChi2_Lc}", + "BPVVDCHI2 > {minDistChi2PV_Lc}", + "BPVDIRA > {minBPVDIRA_Lc}", + ).format( + massWind_Lc=massWind_Lc, + maxVertexChi2_Lc=maxVertexChi2_Lc, + minDistChi2PV_Lc=minDistChi2PV_Lc, + minBPVDIRA_Lc=minBPVDIRA_Lc, + ) + + return N3BodyCombinerWithPVs( + particles=[protons, kaons, pions], + pvs=pvs, + DecayDescriptors=["[Lambda_c+ -> p+ K- pi+]cc"], + Combination12Cut=combination12_cut, + CombinationCut=combination_cut, + DaughtersCuts=daughters_cut) + +"""Filter the bachelor kaon""" + +@configurable +def filter_K_bachelor(kaons, + pvs, + maxTrackChi2=4.0, + minPt=100 * MeV, + minP=1000 * MeV, + minIPChi2=4.0, + maxTrackGhostProb=0.4): + """Filter the bachelor kaon of the Lb decay. + Use the same filter of the D0 daughters.""" + + return filter_D0_daughters(particles=kaons, + pvs=pvs, + maxTrackChi2=maxTrackChi2, + minPt=minPt, + minP=minP, + minIPChi2=minIPChi2, + maxTrackGhostProb=maxTrackGhostProb) + +"""It is finally time to build the X --> Lc D0 K candidate""" + +@configurable +def make_X2LcD0K(D0, + Lc, + K_bachelor, + pvs, + minSumPt=5000 * MeV, + minMass=5200 * MeV, + maxMass=9000 * MeV, + maxVertexChi2_Lb=10, + minP=10000 * MeV, + minPt=1700 * MeV, + maxTrackChi2=4., + minDistChi2=16, + minDistPV=0.1 * mm, + minP_2=5000 * MeV, + minPt_2=500 * MeV, + minDistChi2PV=1000, + min_lifetime=0.2 * ps, + maxIPChi2=25, + minBPVDira=0.999): + """Build the X candidate. + Translation of the X2LcD0KD02KPiBeauty2Charm combiner from the stripping.""" + + combination_cut = require_all( + "ASUM(SUMTREE(PT,(ISBASIC | (ID=='gamma')),0.0)) > {minSumPt}", + "AM > {minMass}", + "AM < {maxMass}", + ).format( + minSumPt=minSumPt, + minMass=minMass, + maxMass=maxMass, + ) + + mother_cut = require_all( + "VFASPF(VCHI2/VDOF) < {maxVertexChi2_Lb}", + "INTREE(HASTRACK & (P > {minP}) & (PT> {minPt}) & (TRCHI2DOF < {maxTrackChi2}) & (MIPCHI2DV(PRIMARY) > {minDistChi2}) & (MIPDV(PRIMARY) > {minDistPV}))", + "NINTREE((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2}) & (PT > {minPt_2}) & (P > {minP_2}))|((ABSID=='KS0') & (PT > {minPt_2}) & (P > {minP_2}) & (BPVVDCHI2 > {minDistChi2PV}))) > 1", + "BPVLTIME() > {min_lifetime}", + "BPVIPCHI2() < {maxIPChi2}", + "BPVDIRA > {minBPVDira}" + ).format( + maxVertexChi2_Lb=maxVertexChi2, + minP_Lb=minP, + minPt_Lb=minPt, + maxTrackChi2_Lb=maxTrackChi2, + minDistChi2_Lb=minDistChi2, + minDistPV=minDistPV, + minPt_2=minPt_2, + minP_2=minP_2, + minDistChi2PV=minDistChi2PV, + min_lifetime=min_lifetime, + maxIPChi2=maxIPChi2, + minBPVDira=minBPVDira, + ) + + return ParticleCombinerWithPVs( + particles=[Lc, D0, K_bachelor], + pvs=pvs, + DecayDescriptors=['B0 -> Lambda_c+ D0 K-', 'B0 -> Lambda_c~- D0 K+'], + CombinationCut=combination_cut, + MotherCut=mother_cut) + +@hlt2_line_builder('HLT2X2LcD0KLc2pKPiD02KPiLine') +def X2LcD0KLc2pKPiD02KPi(): + "X2LcD0KLc2pKPiD02KPi line" + + # get the PVs + pvs = make_pvs() + + # get the basic protons, kaons and pions + protons = make_has_rich_long_protons() + kaons = make_has_rich_long_kaons() + pions = make_has_rich_long_pions() + + # filter the D0 daughters + kaons_D0 = filter_D0_daughters(particles=kaons, + pvs=pvs) + pions_D0 = filter_D0_daughters(particles=pions, + pvs=pvs) + + # make the D0 + D0 = make_D02KPi(kaons=kaons_D0, + pions=pions_D0, + pvs=pvs) + + # filter the Lc daughters + protons_Lc = filter_Lc_daughters(particles=protons, + pvs=pvs, + PID_code="PIDp>-10.0") + kaons_Lc = filter_Lc_daughters(particles=kaons, + pvs=pvs, + PID_code="PIDK>-10.0") + pions_Lc = filter_Lc_daughters(particles=kaons, + pvs=pvs, + PID_code="PIDK<20.0") + + # make the Lc + Lc = make_Lc2pKPi(protons=protons_Lc, + kaons=kaons_Lc, + pions=pions_Lc, + pvs=pvs) + + # filter the bachelor kaons + K_bachelor = filter_K_bachelor(particles=kaons, + pvs=pvs) + + # make the X2LcD0K candidates + X2LcD0K = make_X2LcD0K(D0=D0, + Lc=Lc, + K_bachelor=K_bachelor, + pvs=pvs) + + return prefilters() + [X2LcD0K] + diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py index c0d7dc099d3..a141ce04894 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py @@ -60,3 +60,5 @@ def hlt2_line_builder(name): # Import each module so that the lines are registered from . import D02HH from . import Bs2JpsiPhi +from . import X2LcD0KLc2pKPiD02KPi +from . import Lb2LcDLc2pKPiD2HHH -- GitLab From 9bffb62124f86b823f71bfe9da7456dee56824db Mon Sep 17 00:00:00 2001 From: Alessio Piucci Date: Thu, 3 Oct 2019 18:34:23 +0200 Subject: [PATCH 2/4] Naming of the filters, update to the new HLT2 line builder --- .../Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py | 68 +++++++++------ .../Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py | 82 +++++++++++++------ 2 files changed, 100 insertions(+), 50 deletions(-) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py index 35e4d5c71c4..147466015d2 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py @@ -20,17 +20,19 @@ import math from GaudiKernel.SystemOfUnits import GeV, MeV, mm, mrad, picosecond from RecoConf.hlt1_tracking import require_pvs, require_gec -from RecoConf.reco_objects_from_file import make_pvs +from RecoConf.reco_objects_from_file import (make_pvs, upfront_reconstruction) from ..algorithms import require_all, ParticleFilterWithPVs, ParticleCombinerWithPVs, N3BodyCombinerWithPVs from ..framework import configurable -from . import hlt2_line_builder +from Moore.config import HltLine, register_line_builder # get the basic particles from ..standard_particles import make_has_rich_long_kaons, make_has_rich_long_pions, make_has_rich_long_protons # get the filtered pions, kaons and Lc from the X2LcD0KLc2pKPiD02KPi module -from X2LcD0KLc2pKPiD02KPi import filter_D0_daughters, filter_Lc_daughters, make_Lc2pKPi +from X2LcD0KLc2pKPiD02KPi import filter_d0_daughters, filter_lc_daughters, make_lc2pkpi + +all_lines = {} def prefilters(): """Basic prefilters: GEC and PV requirements""" @@ -51,7 +53,7 @@ def filter_D_daughters(particles, Translation of the KInputsBeauty2CharmFilter/PiInputsBeauty2CharmFilter from the stripping. It is the same as used in the X2LcD0KLc2pKPiD02KPi module.""" - return filter_D0_daughters(particles=particles, pvs=pvs, + return filter_d0_daughters(particles=particles, pvs=pvs, maxTrackChi2=maxTrackChi2, minPt=minPt, minP=minP, @@ -59,7 +61,8 @@ def filter_D_daughters(particles, maxTrackGhostProb=maxTrackGhostProb) @configurable -def make_D2HHH(kaons, +def make_d2hhh(name="D2HHHMaker", + kaons, pions, pvs, D_daughters, @@ -117,6 +120,7 @@ def make_D2HHH(kaons, ) return N3BodyCombinerWithPVs( + name=name, particles=[kaons, pions], pvs=pvs, DecayDescriptors=["[D- -> K- K- pi+]cc"], @@ -125,7 +129,8 @@ def make_D2HHH(kaons, MotherCut=mother_cut) @configurable -def filter_D(D, +def filter_d(name="DFilter", + D, pvs): """Filter the D. Translation of the D2HHHPIDBeauty2CharmFilter from the stripping.""" @@ -141,7 +146,8 @@ def filter_D(D, """It is to build the Lb --> Lc D candidate""" @configurable -def make_Lb2LcD(particles, +def make_lb2lcd(name="Lb2LcDMaker", + particles, pvs, minSumPt=5000 * MeV, minMass=5200 * MeV, @@ -194,14 +200,16 @@ def make_Lb2LcD(particles, ) return ParticleCombinerWithPVs( + name=name, particles=particles, pvs=pvs, DecayDescriptors=['[Lambda_b0 -> Lambda_c+ D-]cc'], CombinationCut=combination_cut, MotherCut=mother_cut) - -@hlt2_line_builder('HLT2Lb2LcDLc2pKPiD2HHHLine') -def Lb2LcDLc2pKPiD2HHH(): + +@register_line_builder(all_lines) +@configurable +def Lb2LcDLc2pKPiD2HHH(name="HLT2Lb2LcDLc2pKPiD2HHHLine", prescale=1): "Lb2LcDLc2pKPiD2HHH line" # get the PVs @@ -213,59 +221,73 @@ def Lb2LcDLc2pKPiD2HHH(): pions = make_has_rich_long_pions() # filter the D daughters - kaons_D = filter_D_daughters(particles=kaons, + kaons_D = filter_d_daughters(name="DDaughtersFilter_K_Lb2LcDLc2pKPiD2HHHLine", + particles=kaons, pvs=pvs) - pions_D = filter_D_daughters(particles=pions, + pions_D = filter_d_daughters(name="DDaughtersFilter_Pi_Lb2LcDLc2pKPiD2HHHLine", + particles=pions, pvs=pvs) # make the D --> K K K - D2KKK = make_D2HHH(kaons=kaons_D, + D2KKK = make_d2hhh(name="D2HHHMaker_KKK_Lb2LcDLc2pKPiD2HHHLine", + kaons=kaons_D, pions=pions_D, D_daughters="'K-','K-','K+'", decay_descriptors=['[D- -> K- K- K+]cc'], pvs=pvs) # make the D --> K K pi - D2KKPi = make_D2HHH(kaons=kaons_D, + D2KKPi = make_d2hhh(name="D2HHHMaker_KKPi_Lb2LcDLc2pKPiD2HHHLine", + kaons=kaons_D, pions=pions_D, D_daughters="'K-','K-','pi+'", decay_descriptors=['[D- -> K- K- pi+]cc'], pvs=pvs) # make the D --> K pi pi - D2KPiPi = make_D2HHH(kaons=kaons_D, + D2KPiPi = make_d2hhh(name="D2HHHMaker_KPiPi_Lb2LcDLc2pKPiD2HHHLine", + kaons=kaons_D, pions=pions_D, D_daughters="'K-','pi-','pi+'", decay_descriptors=['[D- -> K- pi- pi+]cc'], pvs=pvs) # make the D --> pi pi pi - D2PiPiPi = make_D2HHH(kaons=kaons_D, + D2PiPiPi = make_d2hhh(name="D2HHHMaker_PiPiPi_Lb2LcDLc2pKPiD2HHHLine", + kaons=kaons_D, pions=pions_D, D_daughters="'pi-','pi-','pi+'", decay_descriptors=['[D- -> pi- pi- pi+]cc'], pvs=pvs) # filter the Lc daughters - protons_Lc = filter_Lc_daughters(particles=protons, + protons_Lc = filter_lc_daughters(name="LcDaughtersFilter_p_Lb2LcDLc2pKPiD2HHHLine", + particles=protons, pvs=pvs, PID_code="PIDp>-10.0") - kaons_Lc = filter_Lc_daughters(particles=kaons, + kaons_Lc = filter_lc_daughters(name="LcDaughtersFilter_K_Lb2LcDLc2pKPiD2HHHLine", + particles=kaons, pvs=pvs, PID_code="PIDK>-10.0") - pions_Lc = filter_Lc_daughters(particles=kaons, + pions_Lc = filter_lc_daughters(name="LcDaughtersFilter_Pi_Lb2LcDLc2pKPiD2HHHLine", + particles=kaons, pvs=pvs, PID_code="PIDK<20.0") # make the Lc - Lc = make_Lc2pKPi(protons=protons_Lc, + Lc = make_Lc2pKPi(name="Lc2pKPiMaker_Lb2LcDLc2pKPiD2HHHLine", + protons=protons_Lc, kaons=kaons_Lc, pions=pions_Lc, pvs=pvs) # make the X2LcD0K candidates - Lb2LcD = make_Lb2LcD(particles=[D2KKK, D2KKPi, D2KPiPi, D2PiPiPi, Lc], + Lb2LcD = make_Lb2LcD(name="Lb2LcDMaker_Lb2LcDLc2pKPiD2HHHLine", + particles=[D2KKK, D2KKPi, D2KPiPi, D2PiPiPi, Lc], pvs=pvs) - - return prefilters() + [Lb2LcD] + return HltLine( + name=name, + algs=upfront_reconstruction() + prefilters() + [Lb2LcD], + prescale=prescale, + ) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py index 5c3ad0caeb4..c5e51be45df 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py @@ -20,24 +20,27 @@ import math from GaudiKernel.SystemOfUnits import GeV, MeV, mm, mrad, picosecond from RecoConf.hlt1_tracking import require_pvs, require_gec -from RecoConf.reco_objects_from_file import make_pvs +from RecoConf.reco_objects_from_file import (make_pvs, upfront_reconstruction) from ..algorithms import require_all, ParticleFilterWithPVs, ParticleCombinerWithPVs, N3BodyCombinerWithPVs from ..framework import configurable -from . import hlt2_line_builder +from Moore.config import HltLine, register_line_builder # get the basic particles from ..standard_particles import make_has_rich_long_kaons, make_has_rich_long_pions, make_has_rich_long_protons +all_lines = {} + def prefilters(): """Basic prefilters: GEC and PV requirements""" return [require_gec(), require_pvs(make_pvs())] - + """Start making the D0""" @configurable -def filter_D0_daughters(particles, +def filter_d0_daughters(name="D0DaughtersFilter", + particles, pvs, maxTrackChi2=4.0, minPt=100 * MeV, @@ -61,10 +64,11 @@ def filter_D0_daughters(particles, maxTrackGhostProb=maxTrackGhostProb, ) - return ParticleFilterWithPVs(particles, pvs, Code=code) + return ParticleFilterWithPVs(particles, pvs, name=name, Code=code) @configurable -def make_D02KPi(kaons, +def make_d02kpi(name="D02KPiMaker", + kaons, pions, pvs, minSumPt=1800 * MeV, @@ -108,6 +112,7 @@ def make_D02KPi(kaons, ) return ParticleCombinerWithPVs( + name=name, particles=[kaons, pions], pvs=pvs, DecayDescriptors=["D0 -> K+ pi-"], @@ -115,7 +120,8 @@ def make_D02KPi(kaons, MotherCut=mother_cut) @configurable -def filter_D0(D0, +def filter_d0(name="D0Filter", + D0, pvs): """Filter the D0. Translation of the D2HHPIDBeauty2CharmFilter and D2KPIPIDBeauty2CharmFilter from the stripping.""" @@ -127,12 +133,13 @@ def filter_D0(D0, "NINTREE(ABSID=='K+') == 1" ) - return ParticleFilterWithPVs(pions, pvs, Code=code) + return ParticleFilterWithPVs(pions, pvs, name=name, Code=code) """Now it's time to make the Lc""" @configurable -def filter_Lc_daughters(particles, +def filter_lc_daughters(name="LcDaughtersFilter", + particles, pvs, maxTrackChi2=4.0, minPt=100 * MeV, @@ -158,11 +165,12 @@ def filter_Lc_daughters(particles, maxTrackGhostProb=maxTrackGhostProb, ) - return ParticleFilterWithPVs(particles, pvs, Code=code) + return ParticleFilterWithPVs(particles, pvs, name=name, Code=code) @configurable -def make_Lc2pKPi(protons, +def make_lc2pkpi(name="Lc2pKPiMaker", + protons, kaons, pions, pvs, @@ -218,6 +226,7 @@ def make_Lc2pKPi(protons, ) return N3BodyCombinerWithPVs( + name=name, particles=[protons, kaons, pions], pvs=pvs, DecayDescriptors=["[Lambda_c+ -> p+ K- pi+]cc"], @@ -228,7 +237,8 @@ def make_Lc2pKPi(protons, """Filter the bachelor kaon""" @configurable -def filter_K_bachelor(kaons, +def filter_k_bachelor(name="KBachelorFilter", + kaons, pvs, maxTrackChi2=4.0, minPt=100 * MeV, @@ -238,7 +248,8 @@ def filter_K_bachelor(kaons, """Filter the bachelor kaon of the Lb decay. Use the same filter of the D0 daughters.""" - return filter_D0_daughters(particles=kaons, + return filter_D0_daughters(name=name, + particles=kaons, pvs=pvs, maxTrackChi2=maxTrackChi2, minPt=minPt, @@ -249,7 +260,8 @@ def filter_K_bachelor(kaons, """It is finally time to build the X --> Lc D0 K candidate""" @configurable -def make_X2LcD0K(D0, +def make_x2lcd0k(name="X2LcD0KMaker", + D0, Lc, K_bachelor, pvs, @@ -304,14 +316,16 @@ def make_X2LcD0K(D0, ) return ParticleCombinerWithPVs( + name=name, particles=[Lc, D0, K_bachelor], pvs=pvs, DecayDescriptors=['B0 -> Lambda_c+ D0 K-', 'B0 -> Lambda_c~- D0 K+'], CombinationCut=combination_cut, MotherCut=mother_cut) - -@hlt2_line_builder('HLT2X2LcD0KLc2pKPiD02KPiLine') -def X2LcD0KLc2pKPiD02KPi(): + +@register_line_builder(all_lines) +@configurable +def X2LcD0KLc2pKPiD02KPi(name="HLT2X2LcD0KLc2pKPiD02KPiLine", prescale=1): "X2LcD0KLc2pKPiD02KPi line" # get the PVs @@ -323,42 +337,56 @@ def X2LcD0KLc2pKPiD02KPi(): pions = make_has_rich_long_pions() # filter the D0 daughters - kaons_D0 = filter_D0_daughters(particles=kaons, + kaons_D0 = filter_d0_daughters(name="D0DaughtersFilter_K_X2LcD0KLc2pKPiD02KPiLine", + particles=kaons, pvs=pvs) - pions_D0 = filter_D0_daughters(particles=pions, + pions_D0 = filter_d0_daughters(name="D0DaughtersFilter_Pi_X2LcD0KLc2pKPiD02KPiLine", + particles=pions, pvs=pvs) # make the D0 - D0 = make_D02KPi(kaons=kaons_D0, + D0 = make_d02kpi(name="D02KPiMaker_X2LcD0KLc2pKPiD02KPiLine", + kaons=kaons_D0, pions=pions_D0, pvs=pvs) # filter the Lc daughters - protons_Lc = filter_Lc_daughters(particles=protons, + protons_Lc = filter_lc_daughters(name="LcDaughtersFilter_p_X2LcD0KLc2pKPiD02KPiLine", + particles=protons, pvs=pvs, PID_code="PIDp>-10.0") - kaons_Lc = filter_Lc_daughters(particles=kaons, + kaons_Lc = filter_lc_daughters(name="LcDaughtersFilter_K_X2LcD0KLc2pKPiD02KPiLine", + particles=kaons, pvs=pvs, PID_code="PIDK>-10.0") - pions_Lc = filter_Lc_daughters(particles=kaons, + pions_Lc = filter_lc_daughters(name="LcDaughtersFilter_Pi_X2LcD0KLc2pKPiD02KPiLine", + particles=kaons, pvs=pvs, PID_code="PIDK<20.0") # make the Lc - Lc = make_Lc2pKPi(protons=protons_Lc, + Lc = make_lc2pKPi(name="Lc2pKPiMaker_X2LcD0KLc2pKPiD02KPiLine", + protons=protons_Lc, kaons=kaons_Lc, pions=pions_Lc, pvs=pvs) # filter the bachelor kaons - K_bachelor = filter_K_bachelor(particles=kaons, + K_bachelor = filter_K_bachelor(name="KBachelorFilter_X2LcD0KLc2pKPiD02KPiLine", + particles=kaons, pvs=pvs) # make the X2LcD0K candidates - X2LcD0K = make_X2LcD0K(D0=D0, + X2LcD0K = make_x2lcd0k(name="X2LcD0KMaker_X2LcD0KLc2pKPiD02KPiLine", + D0=D0, Lc=Lc, K_bachelor=K_bachelor, pvs=pvs) - return prefilters() + [X2LcD0K] + return HltLine( + name=name, + algs=upfront_reconstruction() + prefilters() + [X2LcD0K], + prescale=prescale, + ) + -- GitLab From ef34d41fe2d5ab13cea1ccc94a77312a0ef9b5b0 Mon Sep 17 00:00:00 2001 From: Gitlab CI Date: Thu, 3 Oct 2019 16:35:17 +0000 Subject: [PATCH 3/4] Fixed formatting patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/5665631 --- .../Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py | 222 ++++++++------- .../Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py | 258 +++++++++--------- .../python/Hlt2Conf/lines/__init__.py | 15 +- 3 files changed, 251 insertions(+), 244 deletions(-) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py index 147466015d2..dc81b1fb6a0 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py @@ -8,7 +8,6 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### - """ Definition of the Lb2LcDLc2pKPiD2HHH line, with Lc --> p K- p+ and D --> HHHH. Translation of the Lb2LcDD2HHHPIDBeauty2CharmLine stripping line from Stripping 34. @@ -34,13 +33,15 @@ from X2LcD0KLc2pKPiD02KPi import filter_d0_daughters, filter_lc_daughters, make_ all_lines = {} + def prefilters(): """Basic prefilters: GEC and PV requirements""" return [require_gec(), require_pvs(make_pvs())] - - + + """Start making the D""" + @configurable def filter_D_daughters(particles, pvs, @@ -52,13 +53,16 @@ def filter_D_daughters(particles, """Filter the kaons/pions used to build the D. Translation of the KInputsBeauty2CharmFilter/PiInputsBeauty2CharmFilter from the stripping. It is the same as used in the X2LcD0KLc2pKPiD02KPi module.""" - - return filter_d0_daughters(particles=particles, pvs=pvs, - maxTrackChi2=maxTrackChi2, - minPt=minPt, - minP=minP, - minIPChi2=minIPChi2, - maxTrackGhostProb=maxTrackGhostProb) + + return filter_d0_daughters( + particles=particles, + pvs=pvs, + maxTrackChi2=maxTrackChi2, + minPt=minPt, + minP=minP, + minIPChi2=minIPChi2, + maxTrackGhostProb=maxTrackGhostProb) + @configurable def make_d2hhh(name="D2HHHMaker", @@ -84,19 +88,16 @@ def make_d2hhh(name="D2HHHMaker", Translation of the ProtoD-2K-K-pi+Beauty2Charm combiner (and brothers) from the stripping. The D_daughters argument must be a string of the form: "'K-','K-','pi+'" and similar.""" - combination12_cut = require_all( - "ADOCA(1,2) < {maxADOCA_comb12}", - ).format( - maxADOCA_comb12=maxADOCA_comb12, - ) - + combination12_cut = require_all("ADOCA(1,2) < {maxADOCA_comb12}", ).format( + maxADOCA_comb12=maxADOCA_comb12, ) + combination_cut = require_all( "ASUM(PT) > {minSumPt}", "in_range({minMass}, AWM({D_daughters}), {maxMass})", "AHASCHILD((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2_daughter}) & (PT > {minPt_daughter}) & (P > {minP_daughter}))|((ABSID=='KS0') & (PT > {minPt_daughter}) & (P > {minP_daughter}) & (BPVVDCHI2 > {minDistChi2PV})))", "ADOCA(1,3) < {maxADOCA_comb13}", "ADOCA(2,3) < {maxADOCA_comb23}", - ).format( + ).format( minSumPt=minSumPt, minMass=minMass, D_daughters=D_daughters, @@ -107,18 +108,18 @@ def make_d2hhh(name="D2HHHMaker", minDistChi2PV=minDistChi2PV, maxADOCA_comb13=maxADOCA_comb13, maxADOCA_comb23=maxADOCA_comb23, - ) - + ) + mother_cut = require_all( "VFASPF(VCHI2/VDOF) < {maxVertexChi2_D0}", "BPVVDCHI2 > {minDistChi2PV_D0}", "BPVDIRA > {minBPVDIRA_D0}", - ).format( + ).format( maxVertexChi2_D0=maxVertexChi2_D0, minDistChi2PV_D0=minDistChi2PV_D0, minBPVDIRA_D0=minBPVDIRA_D0, - ) - + ) + return N3BodyCombinerWithPVs( name=name, particles=[kaons, pions], @@ -128,23 +129,24 @@ def make_d2hhh(name="D2HHHMaker", CombinationCut=combination_cut, MotherCut=mother_cut) + @configurable -def filter_d(name="DFilter", - D, - pvs): +def filter_d(name="DFilter", D, pvs): """Filter the D. Translation of the D2HHHPIDBeauty2CharmFilter from the stripping.""" - + code = require_all( "NINGENERATION(('p+'==ABSID) & (PIDp < -10),1) == 0", "NINGENERATION(('K+'==ABSID) & (PIDK < -10), 1) == 0", "NINGENERATION(('pi+'==ABSID) & (PIDK > 20), 1) == 0", - ) - + ) + return ParticleFilterWithPVs(pions, pvs, Code=code) + """It is to build the Lb --> Lc D candidate""" + @configurable def make_lb2lcd(name="Lb2LcDMaker", particles, @@ -166,39 +168,37 @@ def make_lb2lcd(name="Lb2LcDMaker", minBPVDira=0.999): """Build the Lb candidate. Translation of the Lb2LcDD2HHHPIDBeauty2Charm combiner from the stripping.""" - + combination_cut = require_all( "ASUM(SUMTREE(PT,(ISBASIC | (ID=='gamma')),0.0)) > {minSumPt}", "AM > {minMass}", "AM < {maxMass}", - ).format( + ).format( minSumPt=minSumPt, minMass=minMass, maxMass=maxMass, - ) + ) mother_cut = require_all( "VFASPF(VCHI2/VDOF) < {maxVertexChi2_Lb}", "INTREE(HASTRACK & (P > {minP}) & (PT> {minPt}) & (TRCHI2DOF < {maxTrackChi2}) & (MIPCHI2DV(PRIMARY) > {minDistChi2}) & (MIPDV(PRIMARY) > {minDistPV}))", "NINTREE((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2}) & (PT > {minPt_2}) & (P > {minP_2}))|((ABSID=='KS0') & (PT > {minPt_2}) & (P > {minP_2}) & (BPVVDCHI2 > {minDistChi2PV}))) > 1", - "BPVLTIME() > {min_lifetime}", - "BPVIPCHI2() < {maxIPChi2}", - "BPVDIRA > {minBPVDira}" - ).format( - maxVertexChi2_Lb=maxVertexChi2, - minP_Lb=minP, - minPt_Lb=minPt, - maxTrackChi2_Lb=maxTrackChi2, - minDistChi2_Lb=minDistChi2, - minDistPV=minDistPV, - minPt_2=minPt_2, - minP_2=minP_2, - minDistChi2PV=minDistChi2PV, - min_lifetime=min_lifetime, - maxIPChi2=maxIPChi2, - minBPVDira=minBPVDira, + "BPVLTIME() > {min_lifetime}", "BPVIPCHI2() < {maxIPChi2}", + "BPVDIRA > {minBPVDira}").format( + maxVertexChi2_Lb=maxVertexChi2, + minP_Lb=minP, + minPt_Lb=minPt, + maxTrackChi2_Lb=maxTrackChi2, + minDistChi2_Lb=minDistChi2, + minDistPV=minDistPV, + minPt_2=minPt_2, + minP_2=minP_2, + minDistChi2PV=minDistChi2PV, + min_lifetime=min_lifetime, + maxIPChi2=maxIPChi2, + minBPVDira=minBPVDira, ) - + return ParticleCombinerWithPVs( name=name, particles=particles, @@ -207,6 +207,7 @@ def make_lb2lcd(name="Lb2LcDMaker", CombinationCut=combination_cut, MotherCut=mother_cut) + @register_line_builder(all_lines) @configurable def Lb2LcDLc2pKPiD2HHH(name="HLT2Lb2LcDLc2pKPiD2HHHLine", prescale=1): @@ -214,80 +215,91 @@ def Lb2LcDLc2pKPiD2HHH(name="HLT2Lb2LcDLc2pKPiD2HHHLine", prescale=1): # get the PVs pvs = make_pvs() - + # get the basic protons, kaons and pions protons = make_has_rich_long_protons() kaons = make_has_rich_long_kaons() pions = make_has_rich_long_pions() - + # filter the D daughters - kaons_D = filter_d_daughters(name="DDaughtersFilter_K_Lb2LcDLc2pKPiD2HHHLine", - particles=kaons, - pvs=pvs) - pions_D = filter_d_daughters(name="DDaughtersFilter_Pi_Lb2LcDLc2pKPiD2HHHLine", - particles=pions, - pvs=pvs) + kaons_D = filter_d_daughters( + name="DDaughtersFilter_K_Lb2LcDLc2pKPiD2HHHLine", + particles=kaons, + pvs=pvs) + pions_D = filter_d_daughters( + name="DDaughtersFilter_Pi_Lb2LcDLc2pKPiD2HHHLine", + particles=pions, + pvs=pvs) # make the D --> K K K - D2KKK = make_d2hhh(name="D2HHHMaker_KKK_Lb2LcDLc2pKPiD2HHHLine", - kaons=kaons_D, - pions=pions_D, - D_daughters="'K-','K-','K+'", - decay_descriptors=['[D- -> K- K- K+]cc'], - pvs=pvs) - + D2KKK = make_d2hhh( + name="D2HHHMaker_KKK_Lb2LcDLc2pKPiD2HHHLine", + kaons=kaons_D, + pions=pions_D, + D_daughters="'K-','K-','K+'", + decay_descriptors=['[D- -> K- K- K+]cc'], + pvs=pvs) + # make the D --> K K pi - D2KKPi = make_d2hhh(name="D2HHHMaker_KKPi_Lb2LcDLc2pKPiD2HHHLine", - kaons=kaons_D, - pions=pions_D, - D_daughters="'K-','K-','pi+'", - decay_descriptors=['[D- -> K- K- pi+]cc'], - pvs=pvs) + D2KKPi = make_d2hhh( + name="D2HHHMaker_KKPi_Lb2LcDLc2pKPiD2HHHLine", + kaons=kaons_D, + pions=pions_D, + D_daughters="'K-','K-','pi+'", + decay_descriptors=['[D- -> K- K- pi+]cc'], + pvs=pvs) # make the D --> K pi pi - D2KPiPi = make_d2hhh(name="D2HHHMaker_KPiPi_Lb2LcDLc2pKPiD2HHHLine", - kaons=kaons_D, - pions=pions_D, - D_daughters="'K-','pi-','pi+'", - decay_descriptors=['[D- -> K- pi- pi+]cc'], - pvs=pvs) + D2KPiPi = make_d2hhh( + name="D2HHHMaker_KPiPi_Lb2LcDLc2pKPiD2HHHLine", + kaons=kaons_D, + pions=pions_D, + D_daughters="'K-','pi-','pi+'", + decay_descriptors=['[D- -> K- pi- pi+]cc'], + pvs=pvs) # make the D --> pi pi pi - D2PiPiPi = make_d2hhh(name="D2HHHMaker_PiPiPi_Lb2LcDLc2pKPiD2HHHLine", - kaons=kaons_D, - pions=pions_D, - D_daughters="'pi-','pi-','pi+'", - decay_descriptors=['[D- -> pi- pi- pi+]cc'], - pvs=pvs) - + D2PiPiPi = make_d2hhh( + name="D2HHHMaker_PiPiPi_Lb2LcDLc2pKPiD2HHHLine", + kaons=kaons_D, + pions=pions_D, + D_daughters="'pi-','pi-','pi+'", + decay_descriptors=['[D- -> pi- pi- pi+]cc'], + pvs=pvs) + # filter the Lc daughters - protons_Lc = filter_lc_daughters(name="LcDaughtersFilter_p_Lb2LcDLc2pKPiD2HHHLine", - particles=protons, - pvs=pvs, - PID_code="PIDp>-10.0") - kaons_Lc = filter_lc_daughters(name="LcDaughtersFilter_K_Lb2LcDLc2pKPiD2HHHLine", - particles=kaons, - pvs=pvs, - PID_code="PIDK>-10.0") - pions_Lc = filter_lc_daughters(name="LcDaughtersFilter_Pi_Lb2LcDLc2pKPiD2HHHLine", - particles=kaons, - pvs=pvs, - PID_code="PIDK<20.0") - + protons_Lc = filter_lc_daughters( + name="LcDaughtersFilter_p_Lb2LcDLc2pKPiD2HHHLine", + particles=protons, + pvs=pvs, + PID_code="PIDp>-10.0") + kaons_Lc = filter_lc_daughters( + name="LcDaughtersFilter_K_Lb2LcDLc2pKPiD2HHHLine", + particles=kaons, + pvs=pvs, + PID_code="PIDK>-10.0") + pions_Lc = filter_lc_daughters( + name="LcDaughtersFilter_Pi_Lb2LcDLc2pKPiD2HHHLine", + particles=kaons, + pvs=pvs, + PID_code="PIDK<20.0") + # make the Lc - Lc = make_Lc2pKPi(name="Lc2pKPiMaker_Lb2LcDLc2pKPiD2HHHLine", - protons=protons_Lc, - kaons=kaons_Lc, - pions=pions_Lc, - pvs=pvs) - + Lc = make_Lc2pKPi( + name="Lc2pKPiMaker_Lb2LcDLc2pKPiD2HHHLine", + protons=protons_Lc, + kaons=kaons_Lc, + pions=pions_Lc, + pvs=pvs) + # make the X2LcD0K candidates - Lb2LcD = make_Lb2LcD(name="Lb2LcDMaker_Lb2LcDLc2pKPiD2HHHLine", - particles=[D2KKK, D2KKPi, D2KPiPi, D2PiPiPi, Lc], - pvs=pvs) + Lb2LcD = make_Lb2LcD( + name="Lb2LcDMaker_Lb2LcDLc2pKPiD2HHHLine", + particles=[D2KKK, D2KKPi, D2KPiPi, D2PiPiPi, Lc], + pvs=pvs) return HltLine( name=name, algs=upfront_reconstruction() + prefilters() + [Lb2LcD], prescale=prescale, - ) + ) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py index c5e51be45df..6594700755b 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py @@ -8,7 +8,6 @@ # granted to it by virtue of its status as an Intergovernmental Organization # # or submit itself to any jurisdiction. # ############################################################################### - """ Definition of the X2LcD0K line, with Lc --> p K- pi+ and D0 --> K+ pi-. Translation of the X2LcD0KD02KPiBeauty2CharmLine stripping line from Stripping 34. @@ -31,13 +30,15 @@ from ..standard_particles import make_has_rich_long_kaons, make_has_rich_long_pi all_lines = {} + def prefilters(): """Basic prefilters: GEC and PV requirements""" return [require_gec(), require_pvs(make_pvs())] - + """Start making the D0""" + @configurable def filter_d0_daughters(name="D0DaughtersFilter", particles, @@ -49,23 +50,21 @@ def filter_d0_daughters(name="D0DaughtersFilter", maxTrackGhostProb=0.4): """Filter the kaons/pions used to build the D0. Translation of the KInputsBeauty2CharmFilter/PiInputsBeauty2CharmFilter from the stripping.""" - - code = require_all( - "TRCHI2DOF < {maxTrackChi2}" - "PT > {minPt}", - "P > {minP}", - "MIPCHI2DV(PRIMARY) > {minIPChi2}", - "TRGHP < {maxTrackGhostProb}" - ).format( - maxTrackChi2=maxTrackChi2, - minPt=minPt, - minP=minP, - minIPChi2=minIPChi2, - maxTrackGhostProb=maxTrackGhostProb, - ) - + + code = require_all("TRCHI2DOF < {maxTrackChi2}" + "PT > {minPt}", "P > {minP}", + "MIPCHI2DV(PRIMARY) > {minIPChi2}", + "TRGHP < {maxTrackGhostProb}").format( + maxTrackChi2=maxTrackChi2, + minPt=minPt, + minP=minP, + minIPChi2=minIPChi2, + maxTrackGhostProb=maxTrackGhostProb, + ) + return ParticleFilterWithPVs(particles, pvs, name=name, Code=code) + @configurable def make_d02kpi(name="D02KPiMaker", kaons, @@ -84,13 +83,13 @@ def make_d02kpi(name="D02KPiMaker", max_ADOCA=0.5 * mm): """Make the D0 --> K Pi. Translation of the ProtoD2K+pi-Beauty2Charm combiner from the stripping.""" - + combination_cut = require_all( "ASUM(PT) > {minSumPt}", "in_range({minMass}, AWM('K+','pi-'), {maxMass})", "AHASCHILD((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2_daughter}) & (PT > {minPt_daughter}) & (P > {minP_daughter}))|((ABSID=='KS0') & (PT > {minPt_daughter}) & (P > {minP_daughter}) & (BPVVDCHI2 > {minDistChi2PV})))", "ADOCA(1,2) < {max_ADOCA}", - ).format( + ).format( minSumPt=minSumPt, minMass=minMass, maxMass=maxMass, @@ -99,18 +98,18 @@ def make_d02kpi(name="D02KPiMaker", minP_daughter=minP_daughter, minDistChi2PV=minDistChi2PV, max_ADOCA=max_ADOCA, - ) - + ) + mother_cut = require_all( "VFASPF(VCHI2/VDOF) < {maxVertexChi2_D0}", "BPVVDCHI2 > {minDistChi2PV_D0}", "BPVDIRA > {minBPVDIRA_D0}", - ).format( + ).format( maxVertexChi2_D0=maxVertexChi2_D0, minDistChi2PV_D0=minDistChi2PV_D0, minBPVDIRA_D0=minBPVDIRA_D0, - ) - + ) + return ParticleCombinerWithPVs( name=name, particles=[kaons, pions], @@ -119,24 +118,23 @@ def make_d02kpi(name="D02KPiMaker", CombinationCut=combination_cut, MotherCut=mother_cut) + @configurable -def filter_d0(name="D0Filter", - D0, - pvs): +def filter_d0(name="D0Filter", D0, pvs): """Filter the D0. Translation of the D2HHPIDBeauty2CharmFilter and D2KPIPIDBeauty2CharmFilter from the stripping.""" - - code = require_all( - "NINGENERATION(('p+'==ABSID) & (PIDp < -10),1) == 0", - "NINGENERATION(('K+'==ABSID) & (PIDK < -10), 1) == 0", - "NINGENERATION(('pi+'==ABSID) & (PIDK > 20), 1) == 0", - "NINTREE(ABSID=='K+') == 1" - ) - + + code = require_all("NINGENERATION(('p+'==ABSID) & (PIDp < -10),1) == 0", + "NINGENERATION(('K+'==ABSID) & (PIDK < -10), 1) == 0", + "NINGENERATION(('pi+'==ABSID) & (PIDK > 20), 1) == 0", + "NINTREE(ABSID=='K+') == 1") + return ParticleFilterWithPVs(pions, pvs, name=name, Code=code) + """Now it's time to make the Lc""" + @configurable def filter_lc_daughters(name="LcDaughtersFilter", particles, @@ -149,7 +147,7 @@ def filter_lc_daughters(name="LcDaughtersFilter", PID_code=PID_code): """Filter the protons/kaons/pions used to build the Lc. Translation of the P_PIDInputsBeauty2CharmFilter/K_PIDInputsBeauty2CharmFilter/Pi_PIDInputsBeauty2CharmFilter from the stripping.""" - + code = require_all( "TRCHI2DOF < {maxTrackChi2}" "PT > {minPt}", @@ -157,23 +155,23 @@ def filter_lc_daughters(name="LcDaughtersFilter", "MIPCHI2DV(PRIMARY) > {minIPChi2}", "TRGHP < {maxTrackGhostProb}", PID_code, - ).format( + ).format( maxTrackChi2=maxTrackChi2, minPt=minPt, minP=minP, minIPChi2=minIPChi2, maxTrackGhostProb=maxTrackGhostProb, - ) - + ) + return ParticleFilterWithPVs(particles, pvs, name=name, Code=code) - + @configurable def make_lc2pkpi(name="Lc2pKPiMaker", protons, kaons, pions, - pvs, + pvs, decay_descriptors, maxADOCA_comb12=0.5 * mm, maxADOCA_comb13=0.4 * mm, @@ -189,20 +187,17 @@ def make_lc2pkpi(name="Lc2pKPiMaker", minBPVDIRA_Lc=0): """Make the Lc --> p K Pi. Translation of N3BodyDecays/Lc2PKPiBeauty2Charm from the stripping.""" - - combination12_cut = require_all( - "ADOCA(1,2) < {maxADOCA_comb12}", - ).format( - maxADOCA_comb12=maxADOCA_comb12, - ) - + + combination12_cut = require_all("ADOCA(1,2) < {maxADOCA_comb12}", ).format( + maxADOCA_comb12=maxADOCA_comb12, ) + combination_cut = require_all( "ASUM(PT) > {minSumPt}", "ADAMASS('Lambda_c+') < {massWind_Lc}", "(AHASCHILD((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2_daughter}) & (PT > {minPt_daughters}) & (P > {minP_daughters})) | ((ABSID=='KS0') & (PT > {minPt_daughter}) & (P > {minP_daughter}) & (BPVVDCHI2 > {minDistChi2PV}))))", "ADOCA(1,3) < {maxADOCA_comb13}", "ADOCA(2,3) < {maxADOCA_comb23}", - ).format( + ).format( minSumPt=minSumPt, massWind_Lc=massWind_Lc, maxTrackChi2_daughter=maxTrackChi2_daughter, @@ -211,20 +206,20 @@ def make_lc2pkpi(name="Lc2pKPiMaker", minDistChi2PV=minDistChi2PV, maxADOCA_comb13=maxADOCA_comb13, maxADOCA_comb23=maxADOCA_comb23, - ) - + ) + mother_cut = require_all( "ADMASS('Lambda_c+') < {massWind_Lc}", "VFASPF(VCHI2/VDOF) < {maxVertexChi2_Lc}", "BPVVDCHI2 > {minDistChi2PV_Lc}", "BPVDIRA > {minBPVDIRA_Lc}", - ).format( + ).format( massWind_Lc=massWind_Lc, maxVertexChi2_Lc=maxVertexChi2_Lc, minDistChi2PV_Lc=minDistChi2PV_Lc, minBPVDIRA_Lc=minBPVDIRA_Lc, - ) - + ) + return N3BodyCombinerWithPVs( name=name, particles=[protons, kaons, pions], @@ -234,8 +229,10 @@ def make_lc2pkpi(name="Lc2pKPiMaker", CombinationCut=combination_cut, DaughtersCuts=daughters_cut) + """Filter the bachelor kaon""" + @configurable def filter_k_bachelor(name="KBachelorFilter", kaons, @@ -247,18 +244,21 @@ def filter_k_bachelor(name="KBachelorFilter", maxTrackGhostProb=0.4): """Filter the bachelor kaon of the Lb decay. Use the same filter of the D0 daughters.""" - - return filter_D0_daughters(name=name, - particles=kaons, - pvs=pvs, - maxTrackChi2=maxTrackChi2, - minPt=minPt, - minP=minP, - minIPChi2=minIPChi2, - maxTrackGhostProb=maxTrackGhostProb) + + return filter_D0_daughters( + name=name, + particles=kaons, + pvs=pvs, + maxTrackChi2=maxTrackChi2, + minPt=minPt, + minP=minP, + minIPChi2=minIPChi2, + maxTrackGhostProb=maxTrackGhostProb) + """It is finally time to build the X --> Lc D0 K candidate""" + @configurable def make_x2lcd0k(name="X2LcD0KMaker", D0, @@ -287,34 +287,32 @@ def make_x2lcd0k(name="X2LcD0KMaker", "ASUM(SUMTREE(PT,(ISBASIC | (ID=='gamma')),0.0)) > {minSumPt}", "AM > {minMass}", "AM < {maxMass}", - ).format( + ).format( minSumPt=minSumPt, minMass=minMass, maxMass=maxMass, - ) + ) mother_cut = require_all( "VFASPF(VCHI2/VDOF) < {maxVertexChi2_Lb}", "INTREE(HASTRACK & (P > {minP}) & (PT> {minPt}) & (TRCHI2DOF < {maxTrackChi2}) & (MIPCHI2DV(PRIMARY) > {minDistChi2}) & (MIPDV(PRIMARY) > {minDistPV}))", "NINTREE((ISBASIC & HASTRACK & (TRCHI2DOF < {maxTrackChi2}) & (PT > {minPt_2}) & (P > {minP_2}))|((ABSID=='KS0') & (PT > {minPt_2}) & (P > {minP_2}) & (BPVVDCHI2 > {minDistChi2PV}))) > 1", - "BPVLTIME() > {min_lifetime}", - "BPVIPCHI2() < {maxIPChi2}", - "BPVDIRA > {minBPVDira}" - ).format( - maxVertexChi2_Lb=maxVertexChi2, - minP_Lb=minP, - minPt_Lb=minPt, - maxTrackChi2_Lb=maxTrackChi2, - minDistChi2_Lb=minDistChi2, - minDistPV=minDistPV, - minPt_2=minPt_2, - minP_2=minP_2, - minDistChi2PV=minDistChi2PV, - min_lifetime=min_lifetime, - maxIPChi2=maxIPChi2, - minBPVDira=minBPVDira, + "BPVLTIME() > {min_lifetime}", "BPVIPCHI2() < {maxIPChi2}", + "BPVDIRA > {minBPVDira}").format( + maxVertexChi2_Lb=maxVertexChi2, + minP_Lb=minP, + minPt_Lb=minPt, + maxTrackChi2_Lb=maxTrackChi2, + minDistChi2_Lb=minDistChi2, + minDistPV=minDistPV, + minPt_2=minPt_2, + minP_2=minP_2, + minDistChi2PV=minDistChi2PV, + min_lifetime=min_lifetime, + maxIPChi2=maxIPChi2, + minBPVDira=minBPVDira, ) - + return ParticleCombinerWithPVs( name=name, particles=[Lc, D0, K_bachelor], @@ -323,6 +321,7 @@ def make_x2lcd0k(name="X2LcD0KMaker", CombinationCut=combination_cut, MotherCut=mother_cut) + @register_line_builder(all_lines) @configurable def X2LcD0KLc2pKPiD02KPi(name="HLT2X2LcD0KLc2pKPiD02KPiLine", prescale=1): @@ -330,63 +329,70 @@ def X2LcD0KLc2pKPiD02KPi(name="HLT2X2LcD0KLc2pKPiD02KPiLine", prescale=1): # get the PVs pvs = make_pvs() - + # get the basic protons, kaons and pions protons = make_has_rich_long_protons() kaons = make_has_rich_long_kaons() pions = make_has_rich_long_pions() - + # filter the D0 daughters - kaons_D0 = filter_d0_daughters(name="D0DaughtersFilter_K_X2LcD0KLc2pKPiD02KPiLine", - particles=kaons, - pvs=pvs) - pions_D0 = filter_d0_daughters(name="D0DaughtersFilter_Pi_X2LcD0KLc2pKPiD02KPiLine", - particles=pions, - pvs=pvs) + kaons_D0 = filter_d0_daughters( + name="D0DaughtersFilter_K_X2LcD0KLc2pKPiD02KPiLine", + particles=kaons, + pvs=pvs) + pions_D0 = filter_d0_daughters( + name="D0DaughtersFilter_Pi_X2LcD0KLc2pKPiD02KPiLine", + particles=pions, + pvs=pvs) # make the D0 - D0 = make_d02kpi(name="D02KPiMaker_X2LcD0KLc2pKPiD02KPiLine", - kaons=kaons_D0, - pions=pions_D0, - pvs=pvs) - + D0 = make_d02kpi( + name="D02KPiMaker_X2LcD0KLc2pKPiD02KPiLine", + kaons=kaons_D0, + pions=pions_D0, + pvs=pvs) + # filter the Lc daughters - protons_Lc = filter_lc_daughters(name="LcDaughtersFilter_p_X2LcD0KLc2pKPiD02KPiLine", - particles=protons, - pvs=pvs, - PID_code="PIDp>-10.0") - kaons_Lc = filter_lc_daughters(name="LcDaughtersFilter_K_X2LcD0KLc2pKPiD02KPiLine", - particles=kaons, - pvs=pvs, - PID_code="PIDK>-10.0") - pions_Lc = filter_lc_daughters(name="LcDaughtersFilter_Pi_X2LcD0KLc2pKPiD02KPiLine", - particles=kaons, - pvs=pvs, - PID_code="PIDK<20.0") + protons_Lc = filter_lc_daughters( + name="LcDaughtersFilter_p_X2LcD0KLc2pKPiD02KPiLine", + particles=protons, + pvs=pvs, + PID_code="PIDp>-10.0") + kaons_Lc = filter_lc_daughters( + name="LcDaughtersFilter_K_X2LcD0KLc2pKPiD02KPiLine", + particles=kaons, + pvs=pvs, + PID_code="PIDK>-10.0") + pions_Lc = filter_lc_daughters( + name="LcDaughtersFilter_Pi_X2LcD0KLc2pKPiD02KPiLine", + particles=kaons, + pvs=pvs, + PID_code="PIDK<20.0") # make the Lc - Lc = make_lc2pKPi(name="Lc2pKPiMaker_X2LcD0KLc2pKPiD02KPiLine", - protons=protons_Lc, - kaons=kaons_Lc, - pions=pions_Lc, - pvs=pvs) - + Lc = make_lc2pKPi( + name="Lc2pKPiMaker_X2LcD0KLc2pKPiD02KPiLine", + protons=protons_Lc, + kaons=kaons_Lc, + pions=pions_Lc, + pvs=pvs) + # filter the bachelor kaons - K_bachelor = filter_K_bachelor(name="KBachelorFilter_X2LcD0KLc2pKPiD02KPiLine", - particles=kaons, - pvs=pvs) - + K_bachelor = filter_K_bachelor( + name="KBachelorFilter_X2LcD0KLc2pKPiD02KPiLine", + particles=kaons, + pvs=pvs) + # make the X2LcD0K candidates - X2LcD0K = make_x2lcd0k(name="X2LcD0KMaker_X2LcD0KLc2pKPiD02KPiLine", - D0=D0, - Lc=Lc, - K_bachelor=K_bachelor, - pvs=pvs) - + X2LcD0K = make_x2lcd0k( + name="X2LcD0KMaker_X2LcD0KLc2pKPiD02KPiLine", + D0=D0, + Lc=Lc, + K_bachelor=K_bachelor, + pvs=pvs) + return HltLine( name=name, algs=upfront_reconstruction() + prefilters() + [X2LcD0K], prescale=prescale, - ) - - + ) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py index 42a978afc0b..1cdea4ee600 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py @@ -15,12 +15,7 @@ to export in a registry called `all_lines`. """ from Moore.config import add_line_to_registry -from . import ( - Bs2JpsiPhi, - D02HH, - Lb2LcDLc2pKPiD2HHH, - X2LcD0KLc2pKPiD02KPi -) +from . import (Bs2JpsiPhi, D02HH, Lb2LcDLc2pKPiD2HHH, X2LcD0KLc2pKPiD02KPi) __all__ = [ 'all_lines', @@ -42,12 +37,6 @@ def _get_all_lines(modules): return all_lines -modules = [ - Bs2JpsiPhi, - D02HH, - Lb2LcDLc2pKPiD2HHH, - X2LcD0KLc2pKPiD02KPi -] +modules = [Bs2JpsiPhi, D02HH, Lb2LcDLc2pKPiD2HHH, X2LcD0KLc2pKPiD02KPi] all_lines = _get_all_lines(modules) - -- GitLab From ab26f55d94cd4680a12c38f90a40c2f1cb77afc0 Mon Sep 17 00:00:00 2001 From: Alessio Piucci Date: Fri, 4 Oct 2019 14:30:11 +0200 Subject: [PATCH 4/4] Taking the basic particle filter from the D02HH module --- .../Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py | 2 +- .../Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py | 54 +++++++++++-------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py index dc81b1fb6a0..89bb26ac590 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/Lb2LcDLc2pKPiD2HHH.py @@ -210,7 +210,7 @@ def make_lb2lcd(name="Lb2LcDMaker", @register_line_builder(all_lines) @configurable -def Lb2LcDLc2pKPiD2HHH(name="HLT2Lb2LcDLc2pKPiD2HHHLine", prescale=1): +def lb2lcd_lc2pkpi_d2hhh(name="HLT2Lb2LcDLc2pKPiD2HHHLine", prescale=1): "Lb2LcDLc2pKPiD2HHH line" # get the PVs diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py index 6594700755b..da64fdb168c 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/X2LcD0KLc2pKPiD02KPi.py @@ -28,6 +28,9 @@ from Moore.config import HltLine, register_line_builder # get the basic particles from ..standard_particles import make_has_rich_long_kaons, make_has_rich_long_pions, make_has_rich_long_protons +# get the basic particle filter +from D02HH import make_selected_particles + all_lines = {} @@ -51,18 +54,20 @@ def filter_d0_daughters(name="D0DaughtersFilter", """Filter the kaons/pions used to build the D0. Translation of the KInputsBeauty2CharmFilter/PiInputsBeauty2CharmFilter from the stripping.""" - code = require_all("TRCHI2DOF < {maxTrackChi2}" - "PT > {minPt}", "P > {minP}", - "MIPCHI2DV(PRIMARY) > {minIPChi2}", - "TRGHP < {maxTrackGhostProb}").format( - maxTrackChi2=maxTrackChi2, - minPt=minPt, - minP=minP, - minIPChi2=minIPChi2, - maxTrackGhostProb=maxTrackGhostProb, - ) - - return ParticleFilterWithPVs(particles, pvs, name=name, Code=code) + # take as input the basic charm filter in D02HH + filtered_particles = make_selected_particles(make_particles=particles, make_pvs=pvs, + trchi2_max=maxTrackChi2, + mipchi2_min=minIPChi2, + pt_min=minPt, + p_min=minP, + pid_cut=None) + + # apply the TrackGhostProbability cut + code = require_all("TRGHP < {maxTrackGhostProb}").format( + maxTrackGhostProb=maxTrackGhostProb, + ) + + return ParticleFilterWithPVs(filtered_particles, pvs, name=name, Code=code) @configurable @@ -146,20 +151,23 @@ def filter_lc_daughters(name="LcDaughtersFilter", maxTrackGhostProb=0.4, PID_code=PID_code): """Filter the protons/kaons/pions used to build the Lc. - Translation of the P_PIDInputsBeauty2CharmFilter/K_PIDInputsBeauty2CharmFilter/Pi_PIDInputsBeauty2CharmFilter from the stripping.""" - + Translation of the filters + P_PIDInputsBeauty2CharmFilter/K_PIDInputsBeauty2CharmFilter/Pi_PIDInputsBeauty2CharmFilter + from the stripping.""" + + # take as input the basic charm filter in D02HH + filtered_particles = make_selected_particles(make_particles=particles, make_pvs=pvs, + trchi2_max=maxTrackChi2, + mipchi2_min=minIPChi2, + pt_min=minPt, + p_min=minP, + pid_cut=None) + + # apply the TrackGhostProbability and PID cut code = require_all( - "TRCHI2DOF < {maxTrackChi2}" - "PT > {minPt}", - "P > {minP}", - "MIPCHI2DV(PRIMARY) > {minIPChi2}", "TRGHP < {maxTrackGhostProb}", PID_code, - ).format( - maxTrackChi2=maxTrackChi2, - minPt=minPt, - minP=minP, - minIPChi2=minIPChi2, + ).format( maxTrackGhostProb=maxTrackGhostProb, ) -- GitLab