Skip to content
Snippets Groups Projects

Add charmed-baryon lines with T-track

Merged Ziyi Wang requested to merge ziyi_charm_hyperonsTT into master
@@ -28,7 +28,21 @@ The Lambda -> proton pi are reconstrcted based on T-tracks
- Xic0 -> L K- pi+
Hlt2Charm_Xic0ToL0KmPip_TT_LL
Hlt2Charm_Xic0ToL0KmPip_TT_DD
4-body lines:
---------------------
- Lc+ -> L pi+ pi+ pi-
Hlt2Charm_LcpToL0PimPipPip_TT_LLL
Hlt2Charm_LcpToL0PimPipPip_TT_DDD
- Xic+ -> L K- pi+ pi+
Hlt2Charm_XicpToL0KmPipPip_TT_LLL
Hlt2Charm_XicpToL0KmPipPip_TT_DDD
- Xic0 -> Xi- pi+ pi+ pi-
Hlt2Charm_Xic0ToXimPimPipPip_TTL_LLL
Hlt2Charm_Xic0ToXimPimPipPip_TTD_LLL
Hlt2Charm_Xic0ToXimPimPipPip_TTD_DDD
"""
import Functors as F
from GaudiKernel.SystemOfUnits import (GeV, MeV, mm)
@@ -41,30 +55,24 @@ from ...standard_particles import (
from ...algorithms_thor import ParticleFilter, ParticleCombiner
from .prefilters import charm_prefilters
from Hlt2Conf.standard_particles import (make_ttrack_pions,
make_ttrack_protons)
from Hlt2Conf.standard_particles import (
make_ttrack_pions, make_ttrack_protons, _make_V0TT,
make_ttrack_pions_for_V0, make_ttrack_protons_for_V0)
from RecoConf.ttrack_selections_reco import make_ttrack_MVAfiltered_protoparticles
from Hlt2Conf.lines.bandq.builders.V0_to_TT_builders import (
_make_V0TT, make_ttrack_pions_for_V0, make_ttrack_protons_for_V0)
# re-definitions of functors
def _DZ_CHILD(i):
return F.CHILD(i, F.END_VZ) - F.END_VZ
def _MIPCHI2_MIN(cut, pvs=make_pvs):
return F.MINIPCHI2CUT(IPChi2Cut=cut, Vertices=pvs())
def _make_long_pions_for_xi():
pvs = make_pvs()
return ParticleFilter(
make_long_pions(),
F.FILTER(F.require_all(F.PT > 100 * MeV,
F.MINIPCHI2(pvs) < 20.)))
F.MINIPCHI2(pvs) > 2.)))
def _make_down_pions_for_xi():
@@ -72,7 +80,7 @@ def _make_down_pions_for_xi():
return ParticleFilter(
make_down_pions(),
F.FILTER(F.require_all(F.PT > 100 * MeV,
F.MINIPCHI2(pvs) < 20.)))
F.MINIPCHI2(pvs) > 2.)))
#########################################################
@@ -84,7 +92,7 @@ def _make_loose_pions_for_charm():
make_has_rich_long_pions(),
F.FILTER(
F.require_all(F.PT > 250 * MeV, F.P > 2.0 * GeV,
F.MINIPCHI2(pvs) < 3., F.PID_K < 5.), ),
F.MINIPCHI2(pvs) > 3., F.PID_K < 5.), ),
)
@@ -94,7 +102,7 @@ def _make_loose_kaons_for_charm():
make_has_rich_long_kaons(),
F.FILTER(
F.require_all(F.PT > 500 * MeV, F.P > 10 * GeV,
F.MINIPCHI2(pvs) < 2., F.PID_K > -2.)))
F.MINIPCHI2(pvs) > 2., F.PID_K > -2.)))
def _make_loose_down_pions_for_charm():
@@ -105,7 +113,7 @@ def _make_loose_down_pions_for_charm():
F.require_all(
F.PT > 150 * MeV,
F.P > 2 * GeV,
F.MINIPCHI2(pvs) < 3.,
F.MINIPCHI2(pvs) > 3.,
F.PID_K < 5.,
)))
@@ -116,7 +124,7 @@ def _make_loose_down_kaons_for_charm():
make_has_rich_down_kaons(),
F.FILTER(
F.require_all(F.PT > 150 * MeV, F.P > 2 * GeV,
F.MINIPCHI2(pvs) < 2., F.PID_K > -2.)))
F.MINIPCHI2(pvs) > 2., F.PID_K > -2.)))
def _make_mva_pions():
@@ -149,20 +157,17 @@ def _make_ttrack_protons():
def _make_tt_lambdas():
"""Make Lambda -> p+ pi- from t-tracks."""
pvs = make_pvs()
ttrack_pions = _make_ttrack_pions()
ttrack_protons = _make_ttrack_protons()
descriptors = "[Lambda0 -> p+ pi-]cc"
return _make_V0TT(
particles=[ttrack_protons, ttrack_pions],
descriptors=descriptors,
pvs=pvs,
maxdoca=30.,
maxdocachi2=80.,
p_min=25 * GeV,
max_chi2=5.,
bpv_ip_chi2_max=5.,
RKextrapolation=True,
name="Charm_Hyperons_Lambda0RKTTCombiner_{hash}")
@@ -569,3 +574,365 @@ def xicz_to_lkpi_tt_dd_line(name="Hlt2Charm_Xic0ToL0KmPip_TT_DD"):
_make_ttrack_protons(),
_make_ttrack_pions(), tt_lambdas, xic0s
])
# Lc+ -> Lambda pi- pi+ pi+. Lambda for TT, 3pi for L
@register_line_builder(all_lines)
def lc_to_l0pipipi_tt_lll_line(name="Hlt2Charm_LcpToL0PimPipPip_TT_LLL"):
pvs = make_pvs()
tt_lambdas = _make_tt_lambdas()
long_lc_pions = _make_loose_pions_for_charm()
lcs = ParticleCombiner(
[tt_lambdas, long_lc_pions, long_lc_pions, long_lc_pions],
DecayDescriptor="[Lambda_c+ -> Lambda0 pi- pi+ pi+]cc",
name='Charm_Hyperons_LcpToL0PimPipPip_TT_LLL_{hash}',
Combination12Cut=F.require_all(
F.math.in_range(1400 * MeV, F.MASS, 3000 * MeV),
F.MAXDOCACUT(50 * mm),
),
Combination123Cut=F.require_all(
F.math.in_range(1600 * MeV, F.MASS, 2900 * MeV),
F.DOCA(1, 2) < 30 * mm,
F.DOCA(2, 3) < 0.12 * mm,
),
CombinationCut=F.require_all(
F.math.in_range(2000 * MeV, F.MASS, 2800 * MeV),
F.PT > 2 * GeV,
F.P > 20 * GeV,
F.SUM(F.PT) > 3. * GeV,
F.DOCA(1, 4) < 30 * mm,
F.DOCA(2, 4) < 0.12 * mm,
F.DOCA(3, 4) < 0.12 * mm,
F.MAXDOCACUT(30. * mm),
F.MAXDOCACHI2CUT(8.),
),
CompositeCut=F.require_all(
F.math.in_range(2150 * MeV, F.MASS, 2700 * MeV),
F.PT > 3 * GeV,
F.P > 60 * GeV,
F.CHI2DOF < 3.,
_DZ_CHILD(1) > 3000 * mm,
F.BPVVDZ(pvs) > 2. * mm,
F.BPVFDCHI2(pvs) > 10.,
F.BPVIPCHI2(pvs) < 20,
F.BPVDIRA(pvs) > 0.995,
),
)
return Hlt2Line(
name=name,
algs=charm_prefilters() + [
long_lc_pions,
_make_ttrack_protons(),
_make_ttrack_pions(), tt_lambdas, lcs
])
# Lc+ -> Lambda pi- pi+ pi+. Lambda for TT, 3pi for D
@register_line_builder(all_lines)
def lc_to_l0pipipi_tt_ddd_line(name="Hlt2Charm_LcpToL0PimPipPip_TT_DDD"):
pvs = make_pvs()
tt_lambdas = _make_tt_lambdas()
down_lc_pions = _make_loose_down_pions_for_charm()
lcs = ParticleCombiner(
[tt_lambdas, down_lc_pions, down_lc_pions, down_lc_pions],
DecayDescriptor="[Lambda_c+ -> Lambda0 pi- pi+ pi+]cc",
name='Charm_Hyperons_LcpToL0PimPipPip_TT_DDD_{hash}',
Combination12Cut=F.require_all(
F.math.in_range(1400 * MeV, F.MASS, 3000 * MeV),
F.MAXDOCACUT(50 * mm),
),
Combination123Cut=F.require_all(
F.math.in_range(1600 * MeV, F.MASS, 2900 * MeV),
F.DOCA(1, 2) < 30 * mm,
F.DOCA(2, 3) < 0.12 * mm,
),
CombinationCut=F.require_all(
F.math.in_range(2000 * MeV, F.MASS, 2800 * MeV),
F.PT > 2 * GeV,
F.P > 20 * GeV,
F.SUM(F.PT) > 3. * GeV,
F.DOCA(1, 4) < 30 * mm,
F.DOCA(2, 4) < 0.12 * mm,
F.DOCA(3, 4) < 0.12 * mm,
F.MAXDOCACUT(30. * mm),
F.MAXDOCACHI2CUT(8.),
),
CompositeCut=F.require_all(
F.math.in_range(2150 * MeV, F.MASS, 2700 * MeV),
F.PT > 3 * GeV,
F.P > 60 * GeV,
F.CHI2DOF < 3.,
_DZ_CHILD(1) > 100 * mm,
F.BPVVDZ(pvs) > 2. * mm,
F.BPVFDCHI2(pvs) > 10.,
F.BPVIPCHI2(pvs) < 20,
F.BPVDIRA(pvs) > 0.995,
),
)
return Hlt2Line(
name=name,
algs=charm_prefilters() + [
down_lc_pions,
_make_ttrack_protons(),
_make_ttrack_pions(), tt_lambdas, lcs
])
# Xic+ -> Lambda K- pi+ pi+. Lambda for TT, K and pi for L
@register_line_builder(all_lines)
def xicp_to_lkpipi_tt_lll_line(name="Hlt2Charm_XicpToL0KmPipPip_TT_LLL"):
pvs = make_pvs()
tt_lambdas = _make_tt_lambdas()
long_xicp_pions = _make_loose_pions_for_charm()
long_xicp_kaons = _make_loose_kaons_for_charm()
xicps = ParticleCombiner(
[tt_lambdas, long_xicp_kaons, long_xicp_pions, long_xicp_pions],
DecayDescriptor="[Xi_c+ -> Lambda0 K- pi+ pi+]cc",
name='Charm_Hyperons_XicpToL0KmPipPip_TT_LLL_{hash}',
Combination12Cut=F.require_all(
F.math.in_range(1800 * MeV, F.MASS, 3000 * MeV),
F.MAXDOCACUT(50 * mm),
),
Combination123Cut=F.require_all(
F.MASS < 3000 * MeV,
F.DOCA(1, 2) < 30 * mm,
F.DOCA(2, 3) < 0.12 * mm,
),
CombinationCut=F.require_all(
F.math.in_range(2000 * MeV, F.MASS, 2900 * MeV),
F.PT > 2 * GeV,
F.P > 20 * GeV,
F.SUM(F.PT) > 3. * GeV,
F.DOCA(1, 4) < 30 * mm,
F.DOCA(2, 4) < 0.12 * mm,
F.DOCA(3, 4) < 0.12 * mm,
F.MAXDOCACUT(30. * mm),
F.MAXDOCACHI2CUT(8.),
),
CompositeCut=F.require_all(
F.math.in_range(2300 * MeV, F.MASS, 2800 * MeV),
F.PT > 3 * GeV,
F.P > 60 * GeV,
F.CHI2DOF < 3.,
_DZ_CHILD(1) > 3000 * mm,
F.BPVVDZ(pvs) > 2 * mm,
F.BPVFDCHI2(pvs) > 10.,
F.BPVIPCHI2(pvs) < 20.,
F.BPVDIRA(pvs) > 0.995,
),
)
return Hlt2Line(
name=name,
algs=charm_prefilters() + [
long_xicp_pions, long_xicp_kaons,
_make_ttrack_protons(),
_make_ttrack_pions(), tt_lambdas, xicps
])
# Xic+ -> Lambda K- pi+ pi+. Lambda for TT, K and pi for D
@register_line_builder(all_lines)
def xicp_to_lkpipi_tt_ddd_line(name="Hlt2Charm_XicpToL0KmPipPip_TT_DDD"):
pvs = make_pvs()
tt_lambdas = _make_tt_lambdas()
down_xicp_pions = _make_loose_down_pions_for_charm()
down_xicp_kaons = _make_loose_down_kaons_for_charm()
xicps = ParticleCombiner(
[tt_lambdas, down_xicp_kaons, down_xicp_pions, down_xicp_pions],
DecayDescriptor="[Xi_c+ -> Lambda0 K- pi+ pi+]cc",
name='Charm_Hyperons_XicpToL0KmPipPip_TT_DDD_{hash}',
Combination12Cut=F.require_all(
F.math.in_range(1800 * MeV, F.MASS, 3000 * MeV),
F.MAXDOCACUT(50 * mm),
),
Combination123Cut=F.require_all(
F.MASS < 3000 * MeV,
F.DOCA(1, 2) < 30 * mm,
F.DOCA(2, 3) < 0.12 * mm,
),
CombinationCut=F.require_all(
F.math.in_range(2000 * MeV, F.MASS, 2900 * MeV),
F.PT > 2 * GeV,
F.P > 20 * GeV,
F.SUM(F.PT) > 3 * GeV,
F.DOCA(1, 4) < 30 * mm,
F.DOCA(2, 4) < 0.12 * mm,
F.DOCA(3, 4) < 0.12 * mm,
F.MAXDOCACUT(30. * mm),
F.MAXDOCACHI2CUT(8.),
),
CompositeCut=F.require_all(
F.math.in_range(2300 * MeV, F.MASS, 2800 * MeV),
F.PT > 3 * GeV,
F.P > 60 * GeV,
F.CHI2DOF < 3.,
_DZ_CHILD(1) > 100 * mm,
F.BPVVDZ(pvs) > 2. * mm,
F.BPVFDCHI2(pvs) > 10.,
F.BPVIPCHI2(pvs) < 20.,
F.BPVDIRA(pvs) > 0.995,
),
)
return Hlt2Line(
name=name,
algs=charm_prefilters() + [
down_xicp_pions, down_xicp_kaons,
_make_ttrack_protons(),
_make_ttrack_pions(), tt_lambdas, xicps
])
# Xic0 -> Xi- pi- pi+ pi+. Xi- for TTL, pi for L
@register_line_builder(all_lines)
def xicz_to_xim3pi_ttl_lll_line(name="Hlt2Charm_Xic0ToXimPimPipPip_TTL_LLL"):
pvs = make_pvs()
ttl_xis = _make_ttl_xis()
long_xics_pions = _make_loose_pions_for_charm()
xic0s = ParticleCombiner(
[ttl_xis, long_xics_pions, long_xics_pions, long_xics_pions],
DecayDescriptor="[Xi_c0 -> Xi- pi- pi+ pi+]cc",
name='Charm_Hyperons_Xic0ToXimPimPipPip_TTL_LLL_{hash}',
Combination12Cut=F.require_all(
F.MASS < 3000 * MeV,
F.MAXDOCACUT(40 * mm),
),
Combination123Cut=F.require_all(
F.MASS < 3000 * MeV,
F.DOCA(1, 3) < 20 * mm,
F.DOCA(2, 3) < 0.2 * mm,
),
CombinationCut=F.require_all(
F.math.in_range(2000 * MeV, F.MASS, 3000 * MeV),
F.PT > 2 * GeV,
F.P > 20 * GeV,
F.SUM(F.PT) > 3 * GeV,
F.DOCA(1, 4) < 20 * mm,
F.DOCA(2, 4) < 0.2 * mm,
F.DOCA(3, 4) < 0.2 * mm,
F.MAXDOCACUT(30. * mm),
F.MAXDOCACHI2CUT(20.),
),
CompositeCut=F.require_all(
F.math.in_range(2300 * MeV, F.MASS, 2800 * MeV),
F.PT > 3 * GeV,
F.P > 60 * GeV,
F.CHI2DOF < 10.,
_DZ_CHILD(1) > 100 * mm,
F.BPVVDZ(pvs) > 1. * mm,
F.BPVFDCHI2(pvs) > 5.,
F.BPVIPCHI2(pvs) < 20.,
F.BPVDIRA(pvs) > 0.995,
),
)
return Hlt2Line(
name=name,
algs=charm_prefilters() + [
long_xics_pions,
_make_ttrack_protons(),
_make_ttrack_pions(),
_make_tt_lambdas(), ttl_xis, xic0s
])
# Xic0 -> Xi- pi- pi+ pi+. Xi- for TTD, pi for L
@register_line_builder(all_lines)
def xicz_to_xim3pi_ttd_lll_line(name="Hlt2Charm_Xic0ToXimPimPipPip_TTD_LLL"):
pvs = make_pvs()
ttd_xis = _make_ttd_xis()
long_xics_pions = _make_loose_pions_for_charm()
xic0s = ParticleCombiner(
[ttd_xis, long_xics_pions, long_xics_pions, long_xics_pions],
DecayDescriptor="[Xi_c0 -> Xi- pi- pi+ pi+]cc",
name='Charm_Hyperons_Xic0ToXimPimPipPip_TTD_LLL_{hash}',
Combination12Cut=F.require_all(
F.MASS < 3000 * MeV,
F.MAXDOCACUT(40 * mm),
),
Combination123Cut=F.require_all(
F.MASS < 3000 * MeV,
F.DOCA(1, 3) < 20 * mm,
F.DOCA(2, 3) < 0.2 * mm,
),
CombinationCut=F.require_all(
F.math.in_range(2000 * MeV, F.MASS, 3000 * MeV),
F.PT > 2 * GeV,
F.P > 20 * GeV,
F.SUM(F.PT) > 3 * GeV,
F.DOCA(1, 4) < 20 * mm,
F.DOCA(2, 4) < 0.2 * mm,
F.DOCA(3, 4) < 0.2 * mm,
F.MAXDOCACUT(30. * mm),
F.MAXDOCACHI2CUT(20.),
),
CompositeCut=F.require_all(
F.math.in_range(2300 * MeV, F.MASS, 2800 * MeV),
F.PT > 3 * GeV,
F.P > 60 * GeV,
F.CHI2DOF < 10.,
_DZ_CHILD(1) > 300 * mm,
F.BPVVDZ(pvs) > 1 * mm,
F.BPVFDCHI2(pvs) > 5.,
F.BPVIPCHI2(pvs) < 20.,
F.BPVDIRA(pvs) > 0.995,
),
)
return Hlt2Line(
name=name,
algs=charm_prefilters() + [
long_xics_pions,
_make_ttrack_protons(),
_make_ttrack_pions(),
_make_tt_lambdas(), ttd_xis, xic0s
])
# Xic0 -> Xi- pi- pi+ pi+. Xi- for TTD, pi for D
@register_line_builder(all_lines)
def xicz_to_xim3pi_ttd_ddd_line(name="Hlt2Charm_Xic0ToXimPimPipPip_TTD_DDD"):
pvs = make_pvs()
ttd_xis = _make_ttd_xis()
down_xics_pions = _make_loose_down_pions_for_charm()
xic0s = ParticleCombiner(
[ttd_xis, down_xics_pions, down_xics_pions, down_xics_pions],
DecayDescriptor="[Xi_c0 -> Xi- pi- pi+ pi+]cc",
name='Charm_Hyperons_Xic0ToXimPimPipPip_TTD_DDD_{hash}',
Combination12Cut=F.require_all(
F.MASS < 3000 * MeV,
F.MAXDOCACUT(40 * mm),
),
Combination123Cut=F.require_all(
F.MASS < 3000 * MeV,
F.DOCA(1, 3) < 30 * mm,
F.DOCA(2, 3) < 0.3 * mm,
),
CombinationCut=F.require_all(
F.math.in_range(2000 * MeV, F.MASS, 3000 * MeV),
F.PT > 1 * GeV,
F.P > 10 * GeV,
F.SUM(F.PT) > 2 * GeV,
F.DOCA(1, 4) < 30 * mm,
F.DOCA(2, 4) < 0.3 * mm,
F.DOCA(3, 4) < 0.3 * mm,
F.MAXDOCACUT(30. * mm),
F.MAXDOCACHI2CUT(20.),
),
CompositeCut=F.require_all(
F.math.in_range(2300 * MeV, F.MASS, 2800 * MeV),
F.PT > 2 * GeV,
F.P > 60 * GeV,
F.CHI2DOF < 10.,
_DZ_CHILD(1) > 300 * mm,
F.BPVVDZ(pvs) > 1 * mm,
F.BPVFDCHI2(pvs) > 5.,
F.BPVIPCHI2(pvs) < 20.,
F.BPVDIRA(pvs) > 0.995,
),
)
return Hlt2Line(
name=name,
algs=charm_prefilters() + [
down_xics_pions,
_make_ttrack_protons(),
_make_ttrack_pions(),
_make_tt_lambdas(), ttd_xis, xic0s
])
Loading