diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/D02HHKS.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/D02HHKS.py new file mode 100644 index 0000000000000000000000000000000000000000..f862bb59afe283fae7703c1ad7d55df2ea2f4c6c --- /dev/null +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/D02HHKS.py @@ -0,0 +1,550 @@ +############################################################################### +# (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 D0 -> Ks h+ h- HLT2 lines. +Dst+ -> (D0 -> K+ K- (KS -> pi+ pi-))pi+; it's charge conjugate; LTUNB; and LL and DD lines +Dst+ -> (D0 -> pi+ pi- (KS -> pi+ pi-))pi+, it's charge conjugate; LTUNB; and LL and DD lines +Dst+ -> (D0 -> pi+ K- (KS -> pi+ pi-))pi+, it's charge conjugate; LTUNB; and LL and DD lines +Untagged D0 -> K+ K- (KS -> pi+ pi-), and it's charge conjugate +""" +import math + +from Moore.config import HltLine, register_line_builder + +from GaudiKernel.SystemOfUnits import GeV, MeV, picosecond, mm, mrad, rad + +from RecoConf.hlt1_tracking import require_pvs, require_gec + +from RecoConf.reco_objects_from_file import make_pvs, upfront_reconstruction + +from ..algorithms import (require_all, ParticleCombiner, ParticleCombinerWithPVs, ParticleFilter, + ParticleFilterWithPVs, N3BodyCombinerWithPVs) +from ..framework import configurable +from ..standard_particles import (make_long_pions, make_has_rich_long_kaons, + make_has_rich_long_pions, make_KsDD, + make_KsLL) + +all_lines = {} + + +@configurable +def make_selected_particles(make_particles=make_has_rich_long_kaons, + make_pvs=make_pvs, + trchi2dof_max=3, + trghost_max=0.4, + mipchi2_min=None, + pt_min=200 * MeV, + p_min=1000 * MeV, + pid_cut="PIDK > 5"): + + code = require_all("TRCHI2DOF < {trchi2dof_max}", + "TRGHOSTPROB < {trghost_max}", "PT > {pt_min}", + "P > {p_min}").format( + trchi2dof_max=trchi2dof_max, + trghost_max=trghost_max, + mipchi2_min=mipchi2_min, + pt_min=pt_min, + p_min=p_min, + ) + + code += " & ({})".format(pid_cut) + if mipchi2_min is not None: + code += " & MIPCHI2DV(PRIMARY) > {mipchi2_min}".format(mipchi2_min) + + return ParticleFilterWithPVs(make_particles(), make_pvs(), Code=code) + + +@configurable +def make_charm_pions(pid_cut="PIDK < 5"): + + return make_selected_particles( + make_particles=make_has_rich_long_pions, pid_cut=pid_cut) + + +@configurable +def make_charm_kaons(mipchi2_min=4, pid_cut="PIDK > 5"): + + return make_selected_particles( + make_particles=make_has_rich_long_kaons, pid_cut=pid_cut) + + +@configurable +def make_charm_pions_ltunb(pid_cut="PIDK < 0"): + + return make_selected_particles( + make_particles=make_has_rich_long_pions, pid_cut=pid_cut) + + +@configurable +def make_charm_kaons_ltunb(pt_min=500 * MeV, pid_cut="PIDK > 10"): + + return make_selected_particles( + make_particles=make_has_rich_long_kaons, + pt_min=pt_min, + pid_cut=pid_cut) + + +@configurable +def make_kshortLL(make_particles=make_KsLL, + bpvltime_min=0.0005, + vfaspf_min=-100, + vfaspf_max=500): + + code = require_all( + "BPVLTIME() > {bpvltime_min}", + "in_range({vfaspf_min}, VFASPF(VZ), {vfaspf_max})").format( + bpvltime_min=bpvltime_min, + vfaspf_min=vfaspf_min, + vfaspf_max=vfaspf_max) + + return ParticleFilter(make_particles(), Code=code) + + +@configurable +def make_kshortDD(make_particles=make_KsDD, + bpvltime_min=0.0005, + vfaspf_min=300, + vfaspf_max=2275): + + code = require_all( + "BPVLTIME() > {bpvltime_min}", + "in_range({vfaspf_min}, VFASPF(VZ), {vfaspf_max})").format( + bpvltime_min=bpvltime_min, + vfaspf_min=vfaspf_min, + vfaspf_max=vfaspf_max) + + return ParticleFilter(make_particles(), Code=code) + + +@configurable +def make_charm_soft_pions(make_particles=make_long_pions, + pt_min=200 * MeV, + p_min=1 * GeV, + trchi2dof_max=3.0, + trghostprob_max=0.25): + + code = require_all("TRCHI2DOF < {trchi2dof_max}", + "TRGHOSTPROB < {trghostprob_max}", "PT > {pt_min}", + "P > {p_min}").format( + trchi2dof_max=trchi2dof_max, + trghostprob_max=trghostprob_max, + pt_min=pt_min, + p_min=p_min) + + return ParticleFilter(make_particles(), Code=code) + + +@configurable +def make_dzeros(particles, + descriptors, + pvs, + am_min=1740 * MeV, + am_max=1990 * MeV, + achildsum_pt_min=1500 * MeV, + pt_min=1800 * MeV, + vchi2pdof_max=5, + bpvdira_min=math.cos(0.0346) * rad, + bpvvdchi2_min=20, + bpvltime_min=0.0001, + d2dvvdchi2_min=math.exp(5.0), + m_min=1765 * MeV, + m_max=1965 * MeV): + + combination_code = require_all( + "in_range({am_min}, AM, {am_max})", + "(APT1+APT2+APT3) > {achildsum_pt_min}").format( + am_min=am_min, am_max=am_max, achildsum_pt_min=achildsum_pt_min) + + vertex_code = require_all("PT > {pt_min}", + #"CHI2VXNDOF < {vchi2pdof_max}", + #"BPVDIRA() > {bpvdira_min}", + #"BPVVDCHI2() > {bpvvdchi2_min}", + #"BPVLTIME() > {bpvltime_min}", + #"D2DVVDCHI2(3) > {d2dvvdchi2_min}" + ).format( + pt_min=pt_min,) + #vchi2pdof_max=vchi2pdof_max, + #bpvdira_min=bpvdira_min, + #bpvvdchi2_min=bpvvdchi2_min, + #bpvltime_min=bpvltime_min, + #d2dvvdchi2_min=d2dvvdchi2_min) + + return ParticleCombinerWithPVs( + particles=particles, + pvs=pvs, + DecayDescriptors=descriptors, + CombinationCut=combination_code, + MotherCut=vertex_code) + ''' + code = require_all("in_range({m_min}, M, {m_max})").format( + m_min=m_min, m_max=m_max) + + return ParticleFilter(dzeros, Code=code) + ''' + + +@configurable +def make_dzeros_ltunb(particles, + descriptors, + pvs, + am_min=1740 * MeV, + am_max=1990 * MeV, + achildsum_pt_min=1500 * MeV, + pt_min=1800 * MeV, + vchi2pdof_max=5, + bpvdira_min=math.cos(0.01415) * rad, + bpvltime_min=0.00025, + d2dvvdchi2_min=math.exp(5.0), + m_min=1765 * MeV, + m_max=1965 * MeV): + + combination_code = require_all( + "in_range({am_min}, AM, {am_max})", + "(APT1+APT2+APT3) > {achildsum_pt_min}").format( + am_min=am_min, am_max=am_max, achildsum_pt_min=achildsum_pt_min) + + vertex_code = require_all( + "PT > {pt_min}", "VFASPF(VCHI2PDOF) < {vchi2pdof_max}", + "BPVDIRA() > {bpvdira_min}", "BPVLTIME() > {bpvltime_min}", + "D2DVVDCHI2(3) > {d2dvvdchi2_min}").format( + pt_min=pt_min, + vchi2pdof_max=vchi2pdof_max, + bpvdira_min=bpvdira_min, + bpvltime_min=bpvltime_min, + d2dvvdchi2_min=d2dvvdchi2_min) + + return ParticleCombinerWithPVs( + particles=particles, + pvs=pvs, + DecayDescriptors=descriptors, + CombinationCut=combination_code, + MotherCut=vertex_code) + ''' + code = require_all("in_range({m_min}, M, {m_max})").format( + m_min=m_min, m_max=m_max) + + return ParticleFilter(dzeros, Code=code) + ''' + + +@configurable +def make_dstars(dzeros, + soft_pions, + descriptors, + pvs, + q_am_min=-4.57018 * MeV, + q_am_max=35.42982 * MeV, + q_m_min=-4.57018 * MeV, + q_m_max=25.42982 * MeV, + vchi2pdof_max=10.0): + + combination_code = require_all( + "in_range({q_am_min}, (AM - AM1 - AM2), {q_am_max})").format( + q_am_min=q_am_min, q_am_max=q_am_max) + + vertex_code = require_all( + "in_range({q_m_min}, (M - M1 - M2), {q_m_max})").format( + q_m_min=q_m_min, q_m_max=q_m_max) + + return ParticleCombinerWithPVs( + particles=[dzeros, soft_pions], + pvs=pvs, + DecayDescriptors=descriptors, + CombinationCut=combination_code, + MotherCut=vertex_code) + + +def charm_prefilters(): + """Return a list of prefilters common to charm HLT2 lines.""" + return [require_gec(), require_pvs(make_pvs())] + + +""" +D* -> (D0 -> Ks K+ K-) pi+ +""" + + +@register_line_builder(all_lines) +@configurable +def dstarp2dzeropip_dzero2kpkmksLL_line( + name='Hlt2CharmDstpToD0Pip_D0ToKpKmKsLLLine', prescale=1): + + kaons = make_charm_kaons() + Ks = make_kshortLL() + pvs = make_pvs() + + dzeros = make_dzeros( + particles=[kaons, Ks], + descriptors=['[D0 -> KS0 K+ K-]cc'], + pvs=make_pvs()) + soft_pions = make_charm_soft_pions() + + dstars = make_dstars( + dzeros=dzeros, + soft_pions=soft_pions, + descriptors=['[D*(2010)+ -> D0 pi+]cc'], + pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dstars], + prescale=prescale, + ) + + +@register_line_builder(all_lines) +@configurable +def dstarp2dzeropip_dzero2kpkmksDD_line( + name='Hlt2CharmDstpToD0Pip_D0ToKpKmKsDDLine', prescale=1): + + kaons = make_charm_kaons() + Ks = make_kshortDD() + pvs = make_pvs() + + dzeros = make_dzeros( + particles=[kaons, Ks], + descriptors=['[D0 -> KS0 K+ K-]cc'], + pvs=make_pvs()) + soft_pions = make_charm_soft_pions() + + dstars = make_dstars( + dzeros=dzeros, + soft_pions=soft_pions, + descriptors=['[D*(2010)+ -> D0 pi+]cc'], + pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dstars], + prescale=prescale, + ) + + +""" +Dst+ -> (D0 -> K+ K- (KS -> pi+ pi-)) pi+ LTUNB +""" + + +@register_line_builder(all_lines) +@configurable +def dstarp2dzeropip_dzero2kpkmksLL_ltunb_line( + name='Hlt2CharmDstpToD0Pip_D0ToKpKmKsLL_LTUNBLine', prescale=1): + + kaons = make_charm_kaons_ltunb() + Ks = make_kshortDD() + pvs = make_pvs() + + dzeros = make_dzeros_ltunb( + particles=[kaons, Ks], + descriptors=['[D0 -> KS0 K+ K-]cc'], + pvs=make_pvs()) + soft_pions = make_charm_soft_pions() + + dstars = make_dstars( + dzeros=dzeros, + soft_pions=soft_pions, + descriptors=['[D*(2010)+ -> D0 pi+]cc'], + pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dstars], + prescale=prescale, + ) + + +@register_line_builder(all_lines) +@configurable +def dstarp2dzeropip_dzero2kpkmksDD_ltunb_line( + name='Hlt2CharmDstpToD0Pip_D0ToKpKmKsDD_LTUNBLine', prescale=1): + + kaons = make_charm_kaons_ltunb() + Ks = make_kshortDD() + pvs = make_pvs() + + dzeros = make_dzeros( + particles=[kaons, Ks], + descriptors=['[D0 -> KS0 K+ K-]cc'], + pvs=make_pvs()) + soft_pions = make_charm_soft_pions() + + dstars = make_dstars( + dzeros=dzeros, + soft_pions=soft_pions, + descriptors=['[D*(2010)+ -> D0 pi+]cc'], + pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dstars], + prescale=prescale, + ) + + +""" +D*+ -> (D0 -> Ks pi- pi+) pi+ +""" + + +@register_line_builder(all_lines) +@configurable +def dstarp2dzeropip_dzero2kpippimksLL_line( + name='Hlt2CharmDstpToD0Pip_D0ToPipPimKsLLLine', prescale=1): + + pions = make_charm_pions() + Ks = make_kshortLL() + pvs = make_pvs() + + dzeros = make_dzeros( + particles=[pions, Ks], + descriptors=['[D0 -> KS0 pi+ pi-]cc'], + pvs=make_pvs()) + soft_pions = make_charm_soft_pions() + + dstars = make_dstars( + dzeros=dzeros, + soft_pions=soft_pions, + descriptors=['[D*(2010)+ -> D0 pi+]cc'], + pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dstars], + prescale=prescale, + ) + + +@register_line_builder(all_lines) +@configurable +def dstarp2dzeropip_dzero2pippimksDD_line( + name='Hlt2CharmDstpToD0Pip_D0ToPipPimKsDDLine', prescale=1): + + pions = make_charm_pions() + Ks = make_kshortDD() + pvs = make_pvs() + + dzeros = make_dzeros( + particles=[pions, Ks], + descriptors=['[D0 -> KS0 pi+ pi-]cc'], + pvs=make_pvs()) + soft_pions = make_charm_soft_pions() + + dstars = make_dstars( + dzeros=dzeros, + soft_pions=soft_pions, + descriptors=['[D*(2010)+ -> D0 pi+]cc'], + pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dstars], + prescale=prescale, + ) + + +""" +D* -> (D0 -> Ks pi- pi+) pi+ LTUNB +""" + + +@register_line_builder(all_lines) +@configurable +def dstarp2dzeropip_dzero2pippimksLL_ltunb_line( + name='Hlt2CharmDstpToD0Pip_D0ToPipPimKsLL_LTUNBLine', prescale=1): + + pions = make_charm_pions_ltunb() + Ks = make_kshortDD() + pvs = make_pvs() + + dzeros = make_dzeros_ltunb( + particles=[pions, Ks], + descriptors=['[D0 -> KS0 pi+ pi-]cc'], + pvs=make_pvs()) + soft_pions = make_charm_soft_pions() + + dstars = make_dstars( + dzeros=dzeros, + soft_pions=soft_pions, + descriptors=['[D*(2010)+ -> D0 pi+]cc'], + pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dstars], + prescale=prescale, + ) + + +@register_line_builder(all_lines) +@configurable +def dstarp2dzeropip_dzero2pippimksDD_ltunb_line( + name='Hlt2CharmDstpToD0Pip_D0ToPipPimKsDD_LTUNBLine', prescale=1): + + pions = make_charm_pions_ltunb() + Ks = make_kshortDD() + pvs = make_pvs() + + dzeros = make_dzeros( + particles=[pions, Ks], + descriptors=['[D0 -> KS0 pi+ pi-]cc'], + pvs=make_pvs()) + soft_pions = make_charm_soft_pions() + + dstars = make_dstars( + dzeros=dzeros, + soft_pions=soft_pions, + descriptors=['[D*(2010)+ -> D0 pi+]cc'], + pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dstars], + prescale=prescale, + ) + + +""" +D0 -> K+ K- (KS -> pi+ pi-) +""" + + +@register_line_builder(all_lines) +@configurable +def dzero2kpkmksLL_line(name='Hlt2CharmD0ToKpKmKsLL_Line', prescale=1): + + kaons = make_charm_kaons() + Ks = make_kshortLL() + pvs = make_pvs() + + dzeros = make_dzeros( + particles=[kaons, Ks], descriptors=['[D0 -> KS0 K+ K-]cc'], pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dzeros], + prescale=prescale) + + +@register_line_builder(all_lines) +@configurable +def dzero2kpkmksDD_line(name='Hlt2CharmD0ToKpKmKsDD_Line', prescale=1): + + kaons = make_charm_kaons() + Ks = make_kshortDD() + pvs = make_pvs() + + dzeros = make_dzeros( + particles=[kaons, Ks], descriptors=['[D0 -> KS0 K+ K-]cc'], pvs=pvs) + + return HltLine( + name=name, + algs=upfront_reconstruction() + charm_prefilters() + [dzeros], + prescale=prescale) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py index ff66e2d8bfa34502d41f7cdec5f873acb1aa2048..6c8ab36694530178a0ffbe47e45a9477af4023f8 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/__init__.py @@ -22,6 +22,7 @@ from . import ( D02HH, D2HHH, D02HHHH, + D02HHKS, b_to_open_charm, RareCharmLines, dimuon, @@ -60,6 +61,7 @@ modules = [ D02HH, D2HHH, D02HHHH, + D02HHKS, b_to_open_charm, RareCharmLines, dimuon, diff --git a/Hlt/RecoConf/python/RecoConf/mc_cuts.py b/Hlt/RecoConf/python/RecoConf/mc_cuts.py new file mode 100644 index 0000000000000000000000000000000000000000..961e9293c0a4d8c2394a50f16eb2395437057fcd --- /dev/null +++ b/Hlt/RecoConf/python/RecoConf/mc_cuts.py @@ -0,0 +1,156 @@ +############################################################################### +# (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. # +############################################################################### +from GaudiKernel.SystemOfUnits import mm, GeV +MCCuts = { + "Velo": { + "01_velo": "isVelo", + "02_long": "isLong", + "03_long>5GeV": "isLong & over5", + "04_long_strange": "isLong & strange", + "05_long_strange>5GeV": "isLong & strange & over5", + "06_long_fromB": "isLong & fromB", + "07_long_fromB>5GeV": "isLong & fromB & over5", + "08_long_electrons": "isLong & isElectron", + "09_long_fromB_electrons": "isLong & isElectron & fromB", + "10_long_fromB_electrons_P>5GeV": "isLong & isElectron & over5 & fromB" + }, + "Forward": { + "01_long": "isLong", + "02_long>5GeV": "isLong & over5", + "03_long_strange": "isLong & strange", + "04_long_strange>5GeV": "isLong & strange & over5", + "05_long_fromB": "isLong & fromB", + "06_long_fromB>5GeV": "isLong & fromB & over5", + "07_long_electrons": "isLong & isElectron", + "08_long_fromB_electrons": "isLong & isElectron & fromB", + "09_long_fromB_electrons_P>5GeV": "isLong & isElectron & over5 & fromB" + }, + "Up": { + "01_velo": "isVelo", + "02_velo+UT": "isVelo & isUT", + "03_velo+UT>5GeV": "isVelo & isUT & over5", + "04_velo+notLong": "isNotLong & isVelo ", + "05_velo+UT+notLong": "isNotLong & isVelo & isUT", + "06_velo+UT+notLong>5GeV": "isNotLong & isVelo & isUT & over5", + "07_long": "isLong", + "08_long>5GeV": "isLong & over5 ", + "09_long_fromB": "isLong & fromB", + "10_long_fromB>5GeV": "isLong & fromB & over5", + "11_long_electrons": "isLong & isElectron", + "12_long_fromB_electrons": "isLong & isElectron & fromB", + "13_long_fromB_electrons_P>5GeV": "isLong & isElectron & over5 & fromB" + }, + "T": { + "01_hasT": + "isSeed ", + "02_long": + "isLong", + "03_long>5GeV": + "isLong & over5", + "04_long_fromB": + "isLong & fromB", + "05_long_fromB>5GeV": + "isLong & fromB & over5", + "06_UT+T_strange": + "strange & isDown", + "07_UT+T_strange>5GeV": + "strange & isDown & over5", + "08_noVelo+UT+T_strange": + "strange & isDown & isNotVelo", + "09_noVelo+UT+T_strange>5GeV": + "strange & isDown & over5 & isNotVelo", + "10_UT+T_SfromDB": + "strange & isDown & ( fromB | fromD )", + "11_UT+T_SfromDB>5GeV": + "strange & isDown & over5 & ( fromB | fromD )", + "12_noVelo+UT+T_SfromDB>5GeV": + "strange & isDown & isNotVelo & over5 & ( fromB | fromD )" + }, + "Down": { + "01_UT+T": + "isDown ", + "02_UT+T>5GeV": + "isDown & over5", + "03_UT+T_strange": + " strange & isDown", + "04_UT+T_strange>5GeV": + " strange & isDown & over5", + "05_noVelo+UT+T_strange": + " strange & isDown & isNotVelo", + "06_noVelo+UT+T_strange>5GeV": + " strange & isDown & over5 & isNotVelo", + "07_UT+T_fromB": + "isDown & fromB", + "08_UT+T_fromB>5GeV": + "isDown & fromB & over5", + "09_noVelo+UT+T_fromB": + "isDown & fromB & isNotVelo", + "10_noVelo+UT+T_fromB>5GeV": + "isDown & fromB & over5 & isNotVelo", + "11_UT+T_SfromDB": + " strange & isDown & ( fromB | fromD )", + "12_UT+T_SfromDB>5GeV": + " strange & isDown & over5 & ( fromB | fromD )", + "13_noVelo+UT+T_SfromDB": + " strange & isDown & isNotVelo & ( fromB | fromD )", + "14_noVelo+UT+T_SfromDB>5GeV": + " strange & isDown & isNotVelo & over5 & ( fromB | fromD ) " + }, + "UTForward": { + "01_long": "isLong", + "02_long>5GeV": "isLong & over5" + }, + "UTDown": { + "01_has seed": "isSeed", + "02_has seed +noVelo, T+UT": "isSeed & isNotVelo & isDown", + "03_down+strange": "strange & isDown", + "04_down+strange+>5GeV": "strange & isDown & over5", + "05_pi<-Ks<-B": "fromKsFromB", + "06_pi<-Ks<-B+> 5 GeV": "fromKsFromB & over5" + }, +} +TriggerMCCuts = { + "Velo": { + "11_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger", + "12_UT_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger & isUT" + }, + "Forward": { + "10_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger", + "11_UT_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger & isUT" + }, + "Up": { + "14_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger", + "15_UT_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger & isUT" + }, + "New": { + "long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger", + "UT_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger & isUT" + }, + "UTForward": { + "03_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger", + "04_UT_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger & isUT" + }, + "UTDown": { + "07_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger", + "08_UT_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger & isUT" + }, + "UTNew": { + "long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger", + "UT_long_fromB_P>3GeV_Pt>0.5GeV": "isLong & fromB & trigger & isUT" + }, +} + + +def get_mc_cuts(key, triggerNumbers=False): + cuts = MCCuts[key] if key in MCCuts else {} + if triggerNumbers and key in TriggerMCCuts: + cuts.update(TriggerMCCuts[key]) + return cuts