From 932bdb92cf55ab9166c037c28f56a8c18c5a1ac7 Mon Sep 17 00:00:00 2001 From: yzhao Date: Thu, 3 Aug 2023 10:20:00 +0200 Subject: [PATCH 1/4] Delete 'test_trigger.py' --- test_trigger.py | 726 ------------------------------------------------ 1 file changed, 726 deletions(-) delete mode 100644 test_trigger.py diff --git a/test_trigger.py b/test_trigger.py deleted file mode 100644 index ab9b433..0000000 --- a/test_trigger.py +++ /dev/null @@ -1,726 +0,0 @@ -############################################################################### -# (c) Copyright 2020 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. # -############################################################################### -""" -Lines to select the decay D*+ -> D0 pi+ with D0 -> KS0 KS0 and KS0 -> pi+ pi-. -The KS0 can be reconstructed either from long or downstream tracks, resulting -in the combinations LLLL, LLDD, DDDD. -The tight lines apply tighter cuts on the KS0 and D*+ invariant masses for -the LLLL and LLDD lines, and on the KS0 invariant masses for the DDDD line. - -""" - -import Functors as F -from Functors.math import in_range -from GaudiKernel.SystemOfUnits import MeV, mm, GeV -from Moore.config import register_line_builder -from Moore.lines import Hlt2Line -from RecoConf.reconstruction_objects import make_pvs -from Hlt2Conf.standard_particles import make_down_pions, make_long_pions, make_up_pions -from Hlt2Conf.algorithms import ParticleContainersMerger -from Hlt2Conf.algorithms_thor import (ParticleCombiner, ParticleFilter) -from Hlt2Conf.lines.charm.particle_properties import _KS_M -from Hlt2Conf.lines.charm.prefilters import charm_prefilters -# from Hlt2Conf.lines.charm.up_taggers import make_tagging_pions -from PyConf.Algorithms import Monitor__ParticleRange - - -##################################################################### -### Shortcuts for filters and builders used throughout the module ### -##################################################################### -def make_tagging_pions(): - return ParticleFilter( - make_long_pions(), - F.FILTER(F.require_all(F.PT > 200 * MeV, F.P > 1 * GeV)), - ) - - -def _make_long_pions_from_ks(): - return ParticleFilter( - make_long_pions(), - F.FILTER(F.MINIPCHI2CUT(IPChi2Cut=36., Vertices=make_pvs()))) - - -def _make_down_pions_from_ks(): - return ParticleFilter( - make_down_pions(), - F.FILTER(F.require_all(F.PT > 175 * MeV, F.P > 3000 * MeV))) - - -def _make_down_pions_from_ks_LD(): - return ParticleFilter( - make_down_pions(), - F.FILTER(F.require_all(F.PT > 100 * MeV, F.P > 2000 * MeV))) - - -def _make_up_pions_from_ks(): - return ParticleFilter( - make_up_pions(), - F.FILTER(F.MINIPCHI2CUT(IPChi2Cut=10., Vertices=make_pvs()))) - - -def _make_ll_ks_tight(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two long pions with a tighter mass cut.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LL_Tight_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 50 * MeV, F.MASS, _KS_M + 50 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 30 * MeV, F.MASS, _KS_M + 30 * MeV), - F.CHI2DOF < 7, # TODO: study if this cut can be tightened - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_ll_ks_tight_ULLL(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two long pions with a tighter mass cut for ULLL.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LL_Tight_ULLL{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 50 * MeV, F.MASS, _KS_M + 50 * MeV), - F.PT > 250 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 30 * MeV, F.MASS, _KS_M + 30 * MeV), - F.CHI2DOF < 7, # TODO: study if this cut can be tightened - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 300 * MeV, - ), - ) - - -def _make_ld_ks_tight(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with a long and down pion with a tighter mass cut.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_down_pions_from_ks_LD()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LD_Tight_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 85 * MeV, F.MASS, _KS_M + 85 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 65 * MeV, F.MASS, _KS_M + 65 * MeV), - F.CHI2DOF < 10, # TODO: study if this cut can be tightened - in_range(50 * mm, F.END_VZ, 500 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_dd_ks_tight(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two downstream pions with a tighter mass cut.""" - return ParticleCombiner( - [_make_down_pions_from_ks(), - _make_down_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_DD_Tight_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 80 * MeV, F.MASS, _KS_M + 80 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 60 * MeV, F.MASS, _KS_M + 60 * MeV), - F.CHI2DOF < 10, # TODO: study if this cut can be tightened - in_range(300 * mm, F.END_VZ, 2275 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_ul_ks_tight(descriptor="KS0 -> pi+ pi-"): # change req - """Returns maker for KS0 -> pi+ pi- constructed with one long and one up pion with a tighter mass cut.""" - return ParticleCombiner( - [_make_up_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_UL_Tight_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 90 * MeV, F.MASS, _KS_M + 90 * MeV), - F.PT < 5050 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 70 * MeV, F.MASS, _KS_M + 70 * MeV), - F.CHI2DOF < 10, # TODO: study if this cut can be tightened - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 400 * MeV, - ), - ) - - -def _make_dstars_tight(dzeros, pions, descriptor): - """Returns maker for D*+- -> D0 pi+- with a tighter mass cut.""" - return ParticleCombiner( - [dzeros, pions], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_DstarsTight_{hash}', - CombinationCut=F.MASS - F.CHILD(1, F.MASS) < 160 * MeV, - CompositeCut=F.require_all( - F.MASS - F.CHILD(1, F.MASS) < 150 * MeV, - F.CHI2DOF < 25, # fix due to control channel - ), - ) - - -######################### -### Lines definition ### -######################### - -all_lines = {} - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_ll_tightline( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLL_Tight"): - pvs = make_pvs() - kshorts = _make_ll_ks_tight() - dzeros = ParticleCombiner( - [kshorts, kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_LLLL_Tight", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.BPVFDCHI2(pvs) > 5, - F.CHI2DOF < 10, # fix - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - dstarp = _make_dstars_tight(dzeros, pitag, - "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars_tight(dzeros, pitag, - "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - pisoft_pt = Monitor__ParticleRange( - Input=pitag, - Variable=F.PT, - HistogramName=f"/{name}/pisoft_PT", - Bins=50, - Range=(0 * MeV, 1000 * MeV), - ) - - delta_m = Monitor__ParticleRange( - Input=dstars, - Variable=F.MASS - F.CHILD(1, F.MASS), - HistogramName=f"/{name}/delta_m", - Bins=200, - Range=(100 * MeV, 200 * MeV), - ) - - pi1 = Monitor__ParticleRange( - Input=dzeros, - Variable=F.CHILD(1, F.CHILD(1, F.PT)), - HistogramName=f"/{name}/pi_l1", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi2 = Monitor__ParticleRange( - Input=dzeros, - Variable=F.CHILD(1, F.CHILD(2, F.PT)), - HistogramName=f"/{name}/pi_l2", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi3 = Monitor__ParticleRange( - Input=dzeros, - Variable=F.CHILD(2, F.CHILD(1, F.PT)), - HistogramName=f"/{name}/pi_l3", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi4 = Monitor__ParticleRange( - Input=dzeros, - Variable=F.CHILD(2, F.CHILD(2, F.PT)), - HistogramName=f"/{name}/pi_l4", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - - return Hlt2Line( - name=name, algs=charm_prefilters() + [kshorts, dzeros, dstars, pisoft_pt, delta_m, pi1, pi2, pi3, pi4]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_ld_tightline( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLDD_Tight"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks_tight("KS0 -> pi+ pi-") - ll_kshorts = _make_ll_ks_tight() - dzeros = ParticleCombiner( - [dd_kshorts, ll_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - AllowDiffInputsForSameIDChildren=True, - name="Charm_D0ToKsKs_D0ToKsKs_LLDD_Tight", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars_tight(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars_tight(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - pisoft_pt = Monitor__ParticleRange( - Input=pitag, - Variable=F.PT, - HistogramName=f"/{name}/pisoft_PT", - Bins=50, - Range=(0 * MeV, 1000 * MeV), - ) - - delta_m = Monitor__ParticleRange( - Input=dstars, - Variable=F.MASS - F.CHILD(1, F.MASS), - HistogramName=f"/{name}/delta_m", - Bins=200, - Range=(100 * MeV, 200 * MeV), - ) - - pi1 = Monitor__ParticleRange( - Input=ll_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_l1", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi2 = Monitor__ParticleRange( - Input=ll_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_l2", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi3 = Monitor__ParticleRange( - Input=dd_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_d1", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi4 = Monitor__ParticleRange( - Input=dd_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_d2", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - - return Hlt2Line( - name=name, algs=charm_prefilters() + [dd_kshorts, dzeros, dstars, pisoft_pt, delta_m, pi1, pi2, pi3, pi4]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_dd_tightline( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_DDDD_Tight"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks_tight() - dzeros = ParticleCombiner( - [dd_kshorts, dd_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_DDDD_Tight", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars_tight(dzeros, pitag, - "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars_tight(dzeros, pitag, - "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - pisoft_pt = Monitor__ParticleRange( - Input=pitag, - Variable=F.PT, - HistogramName=f"/{name}/pisoft_PT", - Bins=50, - Range=(0 * MeV, 1000 * MeV), - ) - - delta_m = Monitor__ParticleRange( - Input=dstars, - Variable=F.MASS - F.CHILD(1, F.MASS), - HistogramName=f"/{name}/delta_m", - Bins=200, - Range=(100 * MeV, 200 * MeV), - ) - - pi1 = Monitor__ParticleRange( - Input=dzeros, - Variable=F.CHILD(1, F.CHILD(1, F.PT)), - HistogramName=f"/{name}/pi_d1", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi2 = Monitor__ParticleRange( - Input=dzeros, - Variable=F.CHILD(1, F.CHILD(2, F.PT)), - HistogramName=f"/{name}/pi_d2", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi3 = Monitor__ParticleRange( - Input=dzeros, - Variable=F.CHILD(2, F.CHILD(1, F.PT)), - HistogramName=f"/{name}/pi_d3", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi4 = Monitor__ParticleRange( - Input=dzeros, - Variable=F.CHILD(2, F.CHILD(2, F.PT)), - HistogramName=f"/{name}/pi_d4", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - - return Hlt2Line( - name=name, algs=charm_prefilters() + [dd_kshorts, dzeros, dstars, pisoft_pt, delta_m, pi1, pi2, pi3, pi4]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_ulll_tightline( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULLL_Tight"): - pvs = make_pvs() - ll_kshorts = _make_ll_ks_tight_ULLL() - ul_kshorts = _make_ul_ks_tight() - dzeros = ParticleCombiner( - [ll_kshorts, ul_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_ULLL_Tight", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars_tight(dzeros, make_tagging_pions(), "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars_tight(dzeros, make_tagging_pions(), "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - pisoft_pt = Monitor__ParticleRange( - Input=pitag, - Variable=F.PT, - HistogramName=f"/{name}/pisoft_PT", - Bins=50, - Range=(0 * MeV, 1000 * MeV), - ) - - delta_m = Monitor__ParticleRange( - Input=dstars, - Variable=F.MASS - F.CHILD(1, F.MASS), - HistogramName=f"/{name}/delta_m", - Bins=200, - Range=(100 * MeV, 200 * MeV), - ) - - pi1 = Monitor__ParticleRange( - Input=ul_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_u", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi2 = Monitor__ParticleRange( - Input=ul_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_l1", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi3 = Monitor__ParticleRange( - Input=ll_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_l2", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi4 = Monitor__ParticleRange( - Input=ll_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_l3", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - - return Hlt2Line( - name=name, algs=charm_prefilters() + [ul_kshorts, dzeros, dstars, pisoft_pt, delta_m, pi1, pi2, pi3, pi4]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_uldd_tightline( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULDD_Tight"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks_tight() - ul_kshorts = _make_ul_ks_tight() - dzeros = ParticleCombiner( - [dd_kshorts, ul_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_ULDD_Tight", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars_tight(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars_tight(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - pisoft_pt = Monitor__ParticleRange( - Input=pitag, - Variable=F.PT, - HistogramName=f"/{name}/pisoft_PT", - Bins=50, - Range=(0 * MeV, 1000 * MeV), - ) - - delta_m = Monitor__ParticleRange( - Input=dstars, - Variable=F.MASS - F.CHILD(1, F.MASS), - HistogramName=f"/{name}/delta_m", - Bins=200, - Range=(100 * MeV, 200 * MeV), - ) - - pi1 = Monitor__ParticleRange( - Input=ul_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_u", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi2 = Monitor__ParticleRange( - Input=ul_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_l", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi3 = Monitor__ParticleRange( - Input=dd_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_d1", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi4 = Monitor__ParticleRange( - Input=dd_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_d2", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - - return Hlt2Line( - name=name, algs=charm_prefilters() + [ul_kshorts, dzeros, dstars, pisoft_pt, delta_m, pi1, pi2, pi3, pi4]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_lddd_tightline( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LDDD_Tight"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks_tight() - ld_kshorts = _make_ld_ks_tight() - dzeros = ParticleCombiner( - [dd_kshorts, ld_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_LDDD_Tight", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars_tight(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars_tight(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - pisoft_pt = Monitor__ParticleRange( - Input=pitag, - Variable=F.PT, - HistogramName=f"/{name}/pisoft_PT", - Bins=50, - Range=(0 * MeV, 1000 * MeV), - ) - - delta_m = Monitor__ParticleRange( - Input=dstars, - Variable=F.MASS - F.CHILD(1, F.MASS), - HistogramName=f"/{name}/delta_m", - Bins=200, - Range=(100 * MeV, 200 * MeV), - ) - - pi1 = Monitor__ParticleRange( - Input=ld_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_l", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi2 = Monitor__ParticleRange( - Input=ld_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_d", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi3 = Monitor__ParticleRange( - Input=dd_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_d2", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi4 = Monitor__ParticleRange( - Input=dd_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_d3", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - - return Hlt2Line( - name=name, algs=charm_prefilters() + [ld_kshorts, dzeros, dstars, pisoft_pt, delta_m, pi1, pi2, pi3, pi4]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_llld_tightline( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLD_Tight"): - pvs = make_pvs() - ll_kshorts = _make_ll_ks_tight() - ld_kshorts = _make_ld_ks_tight() - dzeros = ParticleCombiner( - [ll_kshorts, ld_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_LLLD_Tight", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars_tight(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars_tight(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - pisoft_pt = Monitor__ParticleRange( - Input=pitag, - Variable=F.PT, - HistogramName=f"/{name}/pisoft_PT", - Bins=50, - Range=(0 * MeV, 1000 * MeV), - ) - - delta_m = Monitor__ParticleRange( - Input=dstars, - Variable=F.MASS - F.CHILD(1, F.MASS), - HistogramName=f"/{name}/delta_m", - Bins=200, - Range=(100 * MeV, 200 * MeV), - ) - - pi1 = Monitor__ParticleRange( - Input=ll_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_l1", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi2 = Monitor__ParticleRange( - Input=ll_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_l2", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi3 = Monitor__ParticleRange( - Input=ld_kshorts, - Variable=F.CHILD(1, F.PT), - HistogramName=f"/{name}/pi_l3", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - pi4 = Monitor__ParticleRange( - Input=ld_kshorts, - Variable=F.CHILD(2, F.PT), - HistogramName=f"/{name}/pi_d", - Bins=200, - Range=(0 * MeV, 3000 * MeV), - ) - - return Hlt2Line( - name=name, algs=charm_prefilters() + [ld_kshorts, dzeros, dstars, pisoft_pt, delta_m, pi1, pi2, pi3, pi4]) From 3d424bcb5bdd544aa5e46c1e8b364c2c2473eb5f Mon Sep 17 00:00:00 2001 From: yzhao Date: Mon, 14 Aug 2023 12:01:30 +0200 Subject: [PATCH 2/4] Delete 'd0_to_ksks.py' --- d0_to_ksks.py | 417 -------------------------------------------------- 1 file changed, 417 deletions(-) delete mode 100644 d0_to_ksks.py diff --git a/d0_to_ksks.py b/d0_to_ksks.py deleted file mode 100644 index 9270218..0000000 --- a/d0_to_ksks.py +++ /dev/null @@ -1,417 +0,0 @@ -############################################################################### -# (c) Copyright 2020 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. # -############################################################################### -""" -Lines to select the decay D*+ -> D0 pi+ with D0 -> KS0 KS0 and KS0 -> pi+ pi-. -The KS0 can be reconstructed either from long, downstream or upstream track, resulting -in the combinations LLLL, LLLD, LLDD, LDDD, DDDD, ULLL, ULDD. - -""" - -import Functors as F -from Functors.math import in_range -from GaudiKernel.SystemOfUnits import MeV, mm, GeV -from Moore.config import register_line_builder -from Moore.lines import Hlt2Line -from RecoConf.reconstruction_objects import make_pvs -from Hlt2Conf.standard_particles import make_down_pions, make_long_pions, make_up_pions -from Hlt2Conf.algorithms import ParticleContainersMerger -from Hlt2Conf.algorithms_thor import (ParticleCombiner, ParticleFilter) -from Hlt2Conf.lines.charm.particle_properties import _KS_M -from Hlt2Conf.lines.charm.prefilters import charm_prefilters - - -##################################################################### -### Shortcuts for filters and builders used throughout the module ### -##################################################################### - - -def make_tagging_pions(): - return ParticleFilter( - make_long_pions(), - F.FILTER(F.require_all(F.PT > 200 * MeV, F.P > 1 * GeV)), - ) - - -def _make_long_pions_from_ks(): - return ParticleFilter( - make_long_pions(), - F.FILTER(F.MINIPCHI2CUT(IPChi2Cut=36., Vertices=make_pvs()))) - - -def _make_down_pions_from_ks(): - return ParticleFilter( - make_down_pions(), - F.FILTER(F.require_all(F.PT > 175 * MeV, F.P > 3000 * MeV))) - - -def _make_down_pions_from_ks_LD(): - return ParticleFilter( - make_down_pions(), - F.FILTER(F.require_all(F.PT > 100 * MeV, F.P > 2000 * MeV))) - - -def _make_up_pions_from_ks(): - return ParticleFilter( - make_up_pions(), - F.FILTER(F.MINIPCHI2CUT(IPChi2Cut=10., Vertices=make_pvs()))) - - -def _make_ll_ks(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two long pions.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LL_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 50 * MeV, F.MASS, _KS_M + 50 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 30 * MeV, F.MASS, _KS_M + 30 * MeV), - F.CHI2DOF < 7, - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_ll_ks_ULLL(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two long pions only for ULLL.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LL_ULLL_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 50 * MeV, F.MASS, _KS_M + 50 * MeV), - F.PT > 250 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 30 * MeV, F.MASS, _KS_M + 30 * MeV), - F.CHI2DOF < 7, - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 300 * MeV, - ), - ) - - -def _make_ld_ks(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with a long and downstream pion.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_down_pions_from_ks_LD()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LD_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 85 * MeV, F.MASS, _KS_M + 85 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 65 * MeV, F.MASS, _KS_M + 65 * MeV), - F.CHI2DOF < 10, - in_range(50 * mm, F.END_VZ, 500 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_dd_ks(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two downstream pions.""" - return ParticleCombiner( - [_make_down_pions_from_ks(), - _make_down_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_DD_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 80 * MeV, F.MASS, _KS_M + 80 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 60 * MeV, F.MASS, _KS_M + 60 * MeV), - F.CHI2DOF < 10, - in_range(300 * mm, F.END_VZ, 2275 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_ul_ks(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with one long and one upstream pion.""" - return ParticleCombiner( - [_make_up_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_UL_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 90 * MeV, F.MASS, _KS_M + 90 * MeV), - F.PT < 5050 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 70 * MeV, F.MASS, _KS_M + 70 * MeV), - F.CHI2DOF < 10, - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 400 * MeV, - ), - ) - - -def _make_dstars(dzeros, pions, descriptor): - """Returns maker for D*+- -> D0 pi+-.""" - return ParticleCombiner( - [dzeros, pions], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Dstars_{hash}', - CombinationCut=F.MASS - F.CHILD(1, F.MASS) < 160 * MeV, - CompositeCut=F.require_all( - F.MASS - F.CHILD(1, F.MASS) < 150 * MeV, - F.CHI2DOF < 25, # fix due to control channel - ), - ) - - -######################### -### Lines definition ### -######################### - -all_lines = {} - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_llll( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLL"): - pvs = make_pvs() - kshorts = _make_ll_ks() - dzeros = ParticleCombiner( - [kshorts, kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_LLLL", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.BPVFDCHI2(pvs) > 5, - F.CHI2DOF < 10, # fix - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_llld_line( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLD"): - pvs = make_pvs() - ll_kshorts = _make_ll_ks() - ld_kshorts = _make_ld_ks() - dzeros = ParticleCombiner( - [ll_kshorts, ld_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_LLLD", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - return Hlt2Line(name=name, algs=charm_prefilters() + [ld_kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_lldd( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLDD"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks() - ll_kshorts = _make_ll_ks() - dzeros = ParticleCombiner( - [dd_kshorts, ll_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - AllowDiffInputsForSameIDChildren=True, - name="Charm_D0ToKsKs_D0ToKsKs_LLDD", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [dd_kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_lddd( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LDDD"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks() - ld_kshorts = _make_ld_ks() - dzeros = ParticleCombiner( - [dd_kshorts, ld_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_LDDD", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [ld_kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_dddd( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_DDDD"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks() - dzeros = ParticleCombiner( - [dd_kshorts, dd_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_DDDD", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [dd_kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_ulll( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULLL"): - pvs = make_pvs() - ll_kshorts = _make_ll_ks_ULLL() - ul_kshorts = _make_ul_ks() - dzeros = ParticleCombiner( - [ll_kshorts, ul_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_ULLL", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, make_tagging_pions(), "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, make_tagging_pions(), "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [ul_kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_uldd( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULDD"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks() - ul_kshorts = _make_ul_ks() - dzeros = ParticleCombiner( - [dd_kshorts, ul_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_ULDD", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [ul_kshorts, dzeros, dstars]) - - - - - - From f0a89ac6d7e32260a42257401719e0af68f533d0 Mon Sep 17 00:00:00 2001 From: yzhao Date: Mon, 14 Aug 2023 12:03:23 +0200 Subject: [PATCH 3/4] Upload files to '' --- d0_to_ksks.py | 345 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 345 insertions(+) create mode 100644 d0_to_ksks.py diff --git a/d0_to_ksks.py b/d0_to_ksks.py new file mode 100644 index 0000000..2ff71bd --- /dev/null +++ b/d0_to_ksks.py @@ -0,0 +1,345 @@ +############################################################################### +# (c) Copyright 2020 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. # +############################################################################### +""" +Lines to select the decay D*+ -> D0 pi+ with D0 -> KS0 KS0 and KS0 -> pi+ pi-. +The KS0 can be reconstructed either from long, downstream or upstream track, resulting +in the combinations LLLL, LLLD, LLDD, LDDD, DDDD, ULLL, ULDD. + +""" + +import Functors as F +from Functors.math import in_range +from GaudiKernel.SystemOfUnits import MeV, mm, GeV +from Moore.config import register_line_builder +from Moore.lines import Hlt2Line +from RecoConf.reconstruction_objects import make_pvs +from Hlt2Conf.standard_particles import make_down_pions, make_long_pions, make_up_pions +from Hlt2Conf.algorithms import ParticleContainersMerger +from Hlt2Conf.algorithms_thor import (ParticleCombiner, ParticleFilter) +from Hlt2Conf.lines.charm.particle_properties import _KS_M +from Hlt2Conf.lines.charm.prefilters import charm_prefilters + + +##################################################################### +### Shortcuts for filters and builders used throughout the module ### +##################################################################### + + +def make_tagging_pions(): + return ParticleFilter( + make_long_pions(), + F.FILTER(F.require_all(F.PT > 200 * MeV, F.P > 1 * GeV)), + ) + + +def _make_long_pions_from_ks(): + return ParticleFilter( + make_long_pions(), + F.FILTER(F.MINIPCHI2CUT(IPChi2Cut=36., Vertices=make_pvs()))) + + +def _make_down_pions_from_ks(): + return ParticleFilter( + make_down_pions(), + F.FILTER(F.require_all(F.PT > 175 * MeV, F.P > 3000 * MeV))) + + +def _make_down_pions_from_ks_LD(): + return ParticleFilter( + make_down_pions(), + F.FILTER(F.require_all(F.PT > 100 * MeV, F.P > 2000 * MeV))) + + +def _make_up_pions_from_ks(): + return ParticleFilter( + make_up_pions(), + F.FILTER(F.MINIPCHI2CUT(IPChi2Cut=10., Vertices=make_pvs()))) + + +def _make_ll_ks(descriptor="KS0 -> pi+ pi-"): + """Returns maker for KS0 -> pi+ pi- constructed with two long pions.""" + return ParticleCombiner( + [_make_long_pions_from_ks(), + _make_long_pions_from_ks()], + DecayDescriptor=descriptor, + name='Charm_D0ToKsKs_Ks_LL_{hash}', + CombinationCut=F.require_all( + in_range(_KS_M - 50 * MeV, F.MASS, _KS_M + 50 * MeV), + F.PT > 450 * MeV, + ), + CompositeCut=F.require_all( + in_range(_KS_M - 30 * MeV, F.MASS, _KS_M + 30 * MeV), + F.CHI2DOF < 7, + in_range(-100 * mm, F.END_VZ, 500 * mm), + F.PT > 500 * MeV, + ), + ) + + +def _make_ll_ks_ULLL(descriptor="KS0 -> pi+ pi-"): + """Returns maker for KS0 -> pi+ pi- constructed with two long pions only for ULLL.""" + return ParticleCombiner( + [_make_long_pions_from_ks(), + _make_long_pions_from_ks()], + DecayDescriptor=descriptor, + name='Charm_D0ToKsKs_Ks_LL_ULLL_{hash}', + CombinationCut=F.require_all( + in_range(_KS_M - 50 * MeV, F.MASS, _KS_M + 50 * MeV), + F.PT > 250 * MeV, + ), + CompositeCut=F.require_all( + in_range(_KS_M - 30 * MeV, F.MASS, _KS_M + 30 * MeV), + F.CHI2DOF < 7, + in_range(-100 * mm, F.END_VZ, 500 * mm), + F.PT > 300 * MeV, + ), + ) + + +def _make_ld_ks(descriptor="KS0 -> pi+ pi-"): + """Returns maker for KS0 -> pi+ pi- constructed with a long and downstream pion.""" + return ParticleCombiner( + [_make_long_pions_from_ks(), + _make_down_pions_from_ks_LD()], + DecayDescriptor=descriptor, + name='Charm_D0ToKsKs_Ks_LD_{hash}', + CombinationCut=F.require_all( + in_range(_KS_M - 85 * MeV, F.MASS, _KS_M + 85 * MeV), + F.PT > 450 * MeV, + ), + CompositeCut=F.require_all( + in_range(_KS_M - 65 * MeV, F.MASS, _KS_M + 65 * MeV), + F.CHI2DOF < 10, + in_range(50 * mm, F.END_VZ, 500 * mm), + F.PT > 500 * MeV, + ), + ) + + +def _make_dd_ks(descriptor="KS0 -> pi+ pi-"): + """Returns maker for KS0 -> pi+ pi- constructed with two downstream pions.""" + return ParticleCombiner( + [_make_down_pions_from_ks(), + _make_down_pions_from_ks()], + DecayDescriptor=descriptor, + name='Charm_D0ToKsKs_Ks_DD_{hash}', + CombinationCut=F.require_all( + in_range(_KS_M - 80 * MeV, F.MASS, _KS_M + 80 * MeV), + F.PT > 450 * MeV, + ), + CompositeCut=F.require_all( + in_range(_KS_M - 60 * MeV, F.MASS, _KS_M + 60 * MeV), + F.CHI2DOF < 10, + in_range(300 * mm, F.END_VZ, 2275 * mm), + F.PT > 500 * MeV, + ), + ) + + +def _make_ul_ks(descriptor="KS0 -> pi+ pi-"): + """Returns maker for KS0 -> pi+ pi- constructed with one long and one upstream pion.""" + return ParticleCombiner( + [_make_up_pions_from_ks(), + _make_long_pions_from_ks()], + DecayDescriptor=descriptor, + name='Charm_D0ToKsKs_Ks_UL_{hash}', + CombinationCut=F.require_all( + in_range(_KS_M - 90 * MeV, F.MASS, _KS_M + 90 * MeV), + F.PT < 5050 * MeV, + ), + CompositeCut=F.require_all( + in_range(_KS_M - 70 * MeV, F.MASS, _KS_M + 70 * MeV), + F.CHI2DOF < 10, + in_range(-100 * mm, F.END_VZ, 500 * mm), + F.PT > 400 * MeV, + ), + ) + + +def _make_dstars(dzeros, pions, descriptor): + """Returns maker for D*+- -> D0 pi+-.""" + return ParticleCombiner( + [dzeros, pions], + DecayDescriptor=descriptor, + name='Charm_D0ToKsKs_Dstars_{hash}', + CombinationCut=F.MASS - F.CHILD(1, F.MASS) < 160 * MeV, + CompositeCut=F.require_all( + F.MASS - F.CHILD(1, F.MASS) < 150 * MeV, + F.CHI2DOF < 25, # fix due to control channel + ), + ) + + +######################### +### Lines definition ### +######################### + +all_lines = {} + + +@register_line_builder(all_lines) +def dst_to_d0pi_d0toksks_llll( + name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLL"): + pvs = make_pvs() + kshorts = _make_ll_ks() + dzeros = ParticleCombiner( + [kshorts, kshorts], + DecayDescriptor="D0 -> KS0 KS0", + name="Charm_D0ToKsKs_D0ToKsKs_LLLL", + CombinationCut=F.require_all( + in_range(1730 * MeV, F.MASS, 2000 * MeV), + F.SUM(F.PT) > 1500 * MeV, + ), + CompositeCut=F.require_all( + in_range(1775 * MeV, F.MASS, 1955 * MeV), + F.BPVFDCHI2(pvs) > 5, + F.CHI2DOF < 10, # fix + F.BPVDIRA(pvs) > 0.9994, + ), + ) + + pitag = make_tagging_pions() + + dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") + dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") + dstars = ParticleContainersMerger([dstarp, dstarm]) + + + return Hlt2Line( + name=name, algs=charm_prefilters() + [kshorts, dzeros, dstars]) + + +@register_line_builder(all_lines) +def dst_to_d0pi_d0toksks_llld_line( + name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLD"): + pvs = make_pvs() + ll_kshorts = _make_ll_ks() + ld_kshorts = _make_ld_ks() + dzeros = ParticleCombiner( + [ll_kshorts, ld_kshorts], + DecayDescriptor="D0 -> KS0 KS0", + name="Charm_D0ToKsKs_D0ToKsKs_LLLD", + AllowDiffInputsForSameIDChildren=True, + CombinationCut=F.require_all( + in_range(1730 * MeV, F.MASS, 2000 * MeV), + F.SUM(F.PT) > 1500 * MeV, + ), + CompositeCut=F.require_all( + in_range(1775 * MeV, F.MASS, 1955 * MeV), + F.CHI2DOF < 10, + F.BPVDIRA(pvs) > 0.9994, + ), + ) + + pitag = make_tagging_pions() + + dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") + dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") + dstars = ParticleContainersMerger([dstarp, dstarm]) + + return Hlt2Line(name=name, algs=charm_prefilters() + [ld_kshorts, dzeros, dstars]) + + +@register_line_builder(all_lines) +def dst_to_d0pi_d0toksks_lldd( + name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLDD"): + pvs = make_pvs() + dd_kshorts = _make_dd_ks() + ll_kshorts = _make_ll_ks() + dzeros = ParticleCombiner( + [dd_kshorts, ll_kshorts], + DecayDescriptor="D0 -> KS0 KS0", + AllowDiffInputsForSameIDChildren=True, + name="Charm_D0ToKsKs_D0ToKsKs_LLDD", + CombinationCut=F.require_all( + in_range(1730 * MeV, F.MASS, 2000 * MeV), + F.SUM(F.PT) > 1500 * MeV, + ), + CompositeCut=F.require_all( + in_range(1775 * MeV, F.MASS, 1955 * MeV), + F.CHI2DOF < 10, + F.BPVDIRA(pvs) > 0.9994, + ), + ) + + pitag = make_tagging_pions() + + dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") + dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") + dstars = ParticleContainersMerger([dstarp, dstarm]) + + + return Hlt2Line( + name=name, algs=charm_prefilters() + [dd_kshorts, dzeros, dstars]) + + +@register_line_builder(all_lines) +def dst_to_d0pi_d0toksks_dddd( + name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_DDDD"): + pvs = make_pvs() + dd_kshorts = _make_dd_ks() + dzeros = ParticleCombiner( + [dd_kshorts, dd_kshorts], + DecayDescriptor="D0 -> KS0 KS0", + name="Charm_D0ToKsKs_D0ToKsKs_DDDD", + CombinationCut=F.require_all( + in_range(1730 * MeV, F.MASS, 2000 * MeV), + F.SUM(F.PT) > 1500 * MeV, + ), + CompositeCut=F.require_all( + in_range(1775 * MeV, F.MASS, 1955 * MeV), + F.CHI2DOF < 10, + F.BPVDIRA(pvs) > 0.9994, + ), + ) + + pitag = make_tagging_pions() + + dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") + dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") + dstars = ParticleContainersMerger([dstarp, dstarm]) + + + return Hlt2Line( + name=name, algs=charm_prefilters() + [dd_kshorts, dzeros, dstars]) + + +@register_line_builder(all_lines) +def dst_to_d0pi_d0toksks_ulll( + name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULLL"): + pvs = make_pvs() + ll_kshorts = _make_ll_ks_ULLL() + ul_kshorts = _make_ul_ks() + dzeros = ParticleCombiner( + [ll_kshorts, ul_kshorts], + DecayDescriptor="D0 -> KS0 KS0", + name="Charm_D0ToKsKs_D0ToKsKs_ULLL", + AllowDiffInputsForSameIDChildren=True, + CombinationCut=F.require_all( + in_range(1730 * MeV, F.MASS, 2000 * MeV), + F.SUM(F.PT) > 1500 * MeV, + ), + CompositeCut=F.require_all( + in_range(1775 * MeV, F.MASS, 1955 * MeV), + F.CHI2DOF < 10, + F.BPVDIRA(pvs) > 0.9994, + ), + ) + + pitag = make_tagging_pions() + + dstarp = _make_dstars(dzeros, make_tagging_pions(), "D*(2010)+ -> D0 pi+") + dstarm = _make_dstars(dzeros, make_tagging_pions(), "D*(2010)- -> D0 pi-") + dstars = ParticleContainersMerger([dstarp, dstarm]) + + + return Hlt2Line( + name=name, algs=charm_prefilters() + [ul_kshorts, dzeros, dstars]) \ No newline at end of file From c4ed6cf81b2e5bd30e29682da03896ad6ca206db Mon Sep 17 00:00:00 2001 From: yzhao Date: Fri, 15 Sep 2023 14:26:46 +0200 Subject: [PATCH 4/4] Delete 'd0_to_ksks.py' --- d0_to_ksks.py | 345 -------------------------------------------------- 1 file changed, 345 deletions(-) delete mode 100644 d0_to_ksks.py diff --git a/d0_to_ksks.py b/d0_to_ksks.py deleted file mode 100644 index 2ff71bd..0000000 --- a/d0_to_ksks.py +++ /dev/null @@ -1,345 +0,0 @@ -############################################################################### -# (c) Copyright 2020 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. # -############################################################################### -""" -Lines to select the decay D*+ -> D0 pi+ with D0 -> KS0 KS0 and KS0 -> pi+ pi-. -The KS0 can be reconstructed either from long, downstream or upstream track, resulting -in the combinations LLLL, LLLD, LLDD, LDDD, DDDD, ULLL, ULDD. - -""" - -import Functors as F -from Functors.math import in_range -from GaudiKernel.SystemOfUnits import MeV, mm, GeV -from Moore.config import register_line_builder -from Moore.lines import Hlt2Line -from RecoConf.reconstruction_objects import make_pvs -from Hlt2Conf.standard_particles import make_down_pions, make_long_pions, make_up_pions -from Hlt2Conf.algorithms import ParticleContainersMerger -from Hlt2Conf.algorithms_thor import (ParticleCombiner, ParticleFilter) -from Hlt2Conf.lines.charm.particle_properties import _KS_M -from Hlt2Conf.lines.charm.prefilters import charm_prefilters - - -##################################################################### -### Shortcuts for filters and builders used throughout the module ### -##################################################################### - - -def make_tagging_pions(): - return ParticleFilter( - make_long_pions(), - F.FILTER(F.require_all(F.PT > 200 * MeV, F.P > 1 * GeV)), - ) - - -def _make_long_pions_from_ks(): - return ParticleFilter( - make_long_pions(), - F.FILTER(F.MINIPCHI2CUT(IPChi2Cut=36., Vertices=make_pvs()))) - - -def _make_down_pions_from_ks(): - return ParticleFilter( - make_down_pions(), - F.FILTER(F.require_all(F.PT > 175 * MeV, F.P > 3000 * MeV))) - - -def _make_down_pions_from_ks_LD(): - return ParticleFilter( - make_down_pions(), - F.FILTER(F.require_all(F.PT > 100 * MeV, F.P > 2000 * MeV))) - - -def _make_up_pions_from_ks(): - return ParticleFilter( - make_up_pions(), - F.FILTER(F.MINIPCHI2CUT(IPChi2Cut=10., Vertices=make_pvs()))) - - -def _make_ll_ks(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two long pions.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LL_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 50 * MeV, F.MASS, _KS_M + 50 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 30 * MeV, F.MASS, _KS_M + 30 * MeV), - F.CHI2DOF < 7, - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_ll_ks_ULLL(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two long pions only for ULLL.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LL_ULLL_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 50 * MeV, F.MASS, _KS_M + 50 * MeV), - F.PT > 250 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 30 * MeV, F.MASS, _KS_M + 30 * MeV), - F.CHI2DOF < 7, - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 300 * MeV, - ), - ) - - -def _make_ld_ks(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with a long and downstream pion.""" - return ParticleCombiner( - [_make_long_pions_from_ks(), - _make_down_pions_from_ks_LD()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_LD_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 85 * MeV, F.MASS, _KS_M + 85 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 65 * MeV, F.MASS, _KS_M + 65 * MeV), - F.CHI2DOF < 10, - in_range(50 * mm, F.END_VZ, 500 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_dd_ks(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with two downstream pions.""" - return ParticleCombiner( - [_make_down_pions_from_ks(), - _make_down_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_DD_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 80 * MeV, F.MASS, _KS_M + 80 * MeV), - F.PT > 450 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 60 * MeV, F.MASS, _KS_M + 60 * MeV), - F.CHI2DOF < 10, - in_range(300 * mm, F.END_VZ, 2275 * mm), - F.PT > 500 * MeV, - ), - ) - - -def _make_ul_ks(descriptor="KS0 -> pi+ pi-"): - """Returns maker for KS0 -> pi+ pi- constructed with one long and one upstream pion.""" - return ParticleCombiner( - [_make_up_pions_from_ks(), - _make_long_pions_from_ks()], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Ks_UL_{hash}', - CombinationCut=F.require_all( - in_range(_KS_M - 90 * MeV, F.MASS, _KS_M + 90 * MeV), - F.PT < 5050 * MeV, - ), - CompositeCut=F.require_all( - in_range(_KS_M - 70 * MeV, F.MASS, _KS_M + 70 * MeV), - F.CHI2DOF < 10, - in_range(-100 * mm, F.END_VZ, 500 * mm), - F.PT > 400 * MeV, - ), - ) - - -def _make_dstars(dzeros, pions, descriptor): - """Returns maker for D*+- -> D0 pi+-.""" - return ParticleCombiner( - [dzeros, pions], - DecayDescriptor=descriptor, - name='Charm_D0ToKsKs_Dstars_{hash}', - CombinationCut=F.MASS - F.CHILD(1, F.MASS) < 160 * MeV, - CompositeCut=F.require_all( - F.MASS - F.CHILD(1, F.MASS) < 150 * MeV, - F.CHI2DOF < 25, # fix due to control channel - ), - ) - - -######################### -### Lines definition ### -######################### - -all_lines = {} - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_llll( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLL"): - pvs = make_pvs() - kshorts = _make_ll_ks() - dzeros = ParticleCombiner( - [kshorts, kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_LLLL", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.BPVFDCHI2(pvs) > 5, - F.CHI2DOF < 10, # fix - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_llld_line( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLLD"): - pvs = make_pvs() - ll_kshorts = _make_ll_ks() - ld_kshorts = _make_ld_ks() - dzeros = ParticleCombiner( - [ll_kshorts, ld_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_LLLD", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - return Hlt2Line(name=name, algs=charm_prefilters() + [ld_kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_lldd( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_LLDD"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks() - ll_kshorts = _make_ll_ks() - dzeros = ParticleCombiner( - [dd_kshorts, ll_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - AllowDiffInputsForSameIDChildren=True, - name="Charm_D0ToKsKs_D0ToKsKs_LLDD", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [dd_kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_dddd( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_DDDD"): - pvs = make_pvs() - dd_kshorts = _make_dd_ks() - dzeros = ParticleCombiner( - [dd_kshorts, dd_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_DDDD", - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, pitag, "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, pitag, "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [dd_kshorts, dzeros, dstars]) - - -@register_line_builder(all_lines) -def dst_to_d0pi_d0toksks_ulll( - name="Hlt2Charm_DstpToD0Pip_D0ToKsKs_ULLL"): - pvs = make_pvs() - ll_kshorts = _make_ll_ks_ULLL() - ul_kshorts = _make_ul_ks() - dzeros = ParticleCombiner( - [ll_kshorts, ul_kshorts], - DecayDescriptor="D0 -> KS0 KS0", - name="Charm_D0ToKsKs_D0ToKsKs_ULLL", - AllowDiffInputsForSameIDChildren=True, - CombinationCut=F.require_all( - in_range(1730 * MeV, F.MASS, 2000 * MeV), - F.SUM(F.PT) > 1500 * MeV, - ), - CompositeCut=F.require_all( - in_range(1775 * MeV, F.MASS, 1955 * MeV), - F.CHI2DOF < 10, - F.BPVDIRA(pvs) > 0.9994, - ), - ) - - pitag = make_tagging_pions() - - dstarp = _make_dstars(dzeros, make_tagging_pions(), "D*(2010)+ -> D0 pi+") - dstarm = _make_dstars(dzeros, make_tagging_pions(), "D*(2010)- -> D0 pi-") - dstars = ParticleContainersMerger([dstarp, dstarm]) - - - return Hlt2Line( - name=name, algs=charm_prefilters() + [ul_kshorts, dzeros, dstars]) \ No newline at end of file