From 573ce403bf4d86962e73e7d094a60fba501d4e88 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 4 Mar 2025 17:45:30 +0100
Subject: [PATCH 01/20] Adding a new D->ksksh line

---
 .../python/Hlt2Conf/lines/charm/d_to_ksksh.py | 408 ++++++++++++++++++
 1 file changed, 408 insertions(+)
 create mode 100644 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
new file mode 100644
index 00000000000..26a50211aed
--- /dev/null
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -0,0 +1,408 @@
+###############################################################################
+# (c) Copyright 2021 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.                                       #
+###############################################################################
+"""Following lines are defined:
+
+  1. D+ -> KS0 (-> pi+ pi-) KS0 (-> pi+ pi-) pi+
+  2. D+ -> KS0 (-> pi+ pi-) KS0 (-> pi+ pi-) K+
+  3. D_s+ -> KS0 (-> pi+ pi-) KS0 (-> pi+ pi-) pi+
+  4. D_s+ -> KS0 (-> pi+ pi-) KS0 (-> pi+ pi-) K+
+
+All LLLL, LLDD and DDDD modes of KS are included as a separate lines.
+The D+ and Ds+ decaying to the same final state are included in same line as
+in Run 2.
+
+Proponents: Gediminas Sarpis
+
+TODO:
+- check BPVIPCHI2 based on the data
+- apply BPVLTIME requirements to KS and D(s)+ when functor will be fully working / not flooding logs with warnings
+"""
+
+import Functors as F
+import Functors.math as fmath
+from Functors.math import in_range
+from GaudiKernel.SystemOfUnits import GeV, MeV, mm
+from GaudiKernel.SystemOfUnits import micrometer as um
+from Moore.config import register_line_builder
+from Moore.lines import Hlt2Line
+from RecoConf.algorithms_thor import ParticleCombiner, ParticleFilter
+from RecoConf.reconstruction_objects import make_pvs
+from RecoConf.standard_particles import (
+    make_has_rich_down_pions,
+    make_has_rich_long_kaons,
+    make_has_rich_long_pions,
+)
+
+from .prefilters import charm_prefilters
+
+# from . import charm_isolation as isolation
+
+all_lines = {}
+
+###################
+## track filters ##
+###################
+
+## The code is based on a similar line: https://gitlab.cern.ch/lhcb/Moore/-/blob/master/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksh.py
+
+
+def filter_long_pions(
+    pvs, pt_min=250 * MeV, p_min=2 * GeV, mipchi2_min=35.0, pion_pidk_max=5.0
+):
+    """Filter long pions with P PT, MINIPCHI2CUT and PIDk cuts."""
+    cut = F.require_all(
+        F.PT > pt_min,
+        F.P > p_min,
+        F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs),
+        F.PID_K < pion_pidk_max,
+    )
+    return ParticleFilter(make_has_rich_long_pions(), F.FILTER(cut))
+
+
+def filter_long_kaons(
+    pvs, pt_min=250 * MeV, p_min=3 * GeV, mipchi2_min=35.0, pidk_min=-5.0
+):
+    """Filter long kaons with P PT, MINIPCHI2CUT and PIDk cuts."""
+    cut = F.require_all(
+        F.PT > pt_min,
+        F.P > p_min,
+        F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs),
+        F.PID_K > pidk_min,
+    )
+    return ParticleFilter(make_has_rich_long_kaons(), F.FILTER(cut))
+
+
+def filter_long_pions_from_ks(
+    pvs, pt_min=250 * MeV, p_min=2 * GeV, mipchi2_min=35.0, pion_pidk_max=15.0
+):
+    """Filter long pions with P PT, MINIPCHI2CUT and PIDk cuts."""
+    cut = F.require_all(
+        F.PT > pt_min,
+        F.P > p_min,
+        F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs),
+        F.PID_K < pion_pidk_max,
+    )
+    return ParticleFilter(make_has_rich_long_pions(), F.FILTER(cut))
+
+
+def filter_down_pions_from_ks(pvs, pt_min=250 * MeV, p_min=2 * GeV, pion_pidk_max=15.0):
+    """Filter downstream pions with P PT, and PIDk cuts."""
+    cut = F.require_all(F.PT > pt_min, F.P > p_min, F.PID_K < pion_pidk_max)
+    return ParticleFilter(make_has_rich_down_pions(), F.FILTER(cut))
+
+
+#######################
+## strange combiners ##
+#######################
+def make_ks_ll(
+    pions1,
+    pions2,
+    pvs,
+    name="Charm_DToKsH_KsLL_{hash}",
+    comb_m_min=445 * MeV,
+    comb_m_max=550 * MeV,
+    m_min=460 * MeV,
+    m_max=535 * MeV,
+    comb_pt_min=300 * MeV,
+    pt_min=350 * MeV,
+    comb_p_min=3.5 * GeV,
+    p_min=4 * GeV,
+    doca_max=1 * mm,
+    vchi2pdof_max=7.0,
+    bpvvdz_min=10 * mm,
+    bpvfdchi2_min=3.0,
+    mipchi2_min=2,
+    # bpvltime_min=1. * picosecond
+):
+    """Make KS -> pi+ pi- from long tracks."""
+    comb_cut = F.require_all(
+        F.MAXDOCACUT(doca_max),
+        in_range(comb_m_min, F.MASS, comb_m_max),
+        F.PT > comb_pt_min,
+        F.P > comb_p_min,
+    )
+    vertex_cut = F.require_all(
+        in_range(m_min, F.MASS, m_max),
+        F.PT > pt_min,
+        F.P > p_min,
+        F.CHI2DOF < vchi2pdof_max,
+        F.BPVVDZ(pvs) > bpvvdz_min,
+        F.BPVFDCHI2(pvs) > bpvfdchi2_min,
+        F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs),
+        # F.BPVLTIME(pvs) > bpvltime_min  #<-- not converging at all
+    )
+    return ParticleCombiner(
+        [pions1, pions2],
+        name=name,
+        DecayDescriptor="KS0 -> pi+ pi-",
+        CombinationCut=comb_cut,
+        CompositeCut=vertex_cut,
+    )
+
+
+def make_ks_dd(
+    pions1,
+    pions2,
+    pvs,
+    name="Charm_DToKsH_KsDD_{hash}",
+    comb_m_min=417 * MeV,
+    comb_m_max=577 * MeV,
+    m_min=437 * MeV,
+    m_max=557 * MeV,
+    comb_pt_min=400 * MeV,
+    pt_min=450 * MeV,
+    sum_pt_min=500 * MeV,
+    comb_p_min=4.5 * GeV,
+    p_min=5 * GeV,
+    doca_max=2 * mm,
+    docachi2_max=12.0,
+    vchi2pdof_max=10.0,
+    # bpvltime_min=1. * picosecond
+):
+    """
+    Make KS -> pi+ pi- from downstream tracks.
+    """
+    comb_cut = F.require_all(
+        F.MAXDOCACUT(doca_max),
+        F.MAXDOCACHI2CUT(docachi2_max),
+        in_range(comb_m_min, F.MASS, comb_m_max),
+        F.PT > comb_pt_min,
+        F.SUM(F.PT) > sum_pt_min,
+        F.P > comb_p_min,
+    )
+    vertex_cut = F.require_all(
+        in_range(m_min, F.MASS, m_max),
+        F.PT > pt_min,
+        F.P > p_min,
+        F.CHI2DOF < vchi2pdof_max,
+        # F.BPVLTIME(pvs) > bpvltime_min #--- not converging
+    )
+    return ParticleCombiner(
+        [pions1, pions2],
+        name=name,
+        DecayDescriptor="KS0 -> pi+ pi-",
+        CombinationCut=comb_cut,
+        CompositeCut=vertex_cut,
+    )
+
+
+########################
+## D mesons combiners ##
+########################
+def combine_d_ks_ks_h(
+    ks0,
+    ks1,
+    particle,
+    pvs,
+    decay_descriptor,
+    name="Charm_DToKsKsH_DToKsKsHCombiner_{hash}",
+    comb_m_min=1779 * MeV,
+    comb_m_max=2059 * MeV,
+    m_min=1789 * MeV,  # lower range for D+
+    m_max=2049 * MeV,  # upper range for Ds+
+    comb_pt_min=1.5 * GeV,
+    pt_min=2.0 * GeV,
+    sum_pt_min=1.8 * GeV,
+    comb_p_min=15 * GeV,
+    p_min=16 * GeV,
+    doca_max=100 * um,
+    vchi2pdof_max=5.0,
+    # bpvltime_min=0.25 * picosecond,
+    bpvvdz_min=0.5 * mm,
+    bpvfdchi2_min=25.0,
+    bpfdrho_max=5 * mm,
+    # bpvipchi2_max=999.,
+    bpvdira_min=0.995,
+    dz1_min=5.0 * mm,
+    ks_fdrho_min=1 * mm,
+    dzero_vz_min=-300 * mm,
+):
+    """Combine D meson with Ks Ks and additonal hadron (K/pi).
+    Make MASS, P, PT, SUM(PT), MAXDOCACUT cuts in the combination;
+    MASS, P, PT, CHI2DOF, BPVVDZ, BPVFDCHI2, BPVIPCHI2, BPVDIRA cuts after the vertex fit.
+    Cuts generally based on Run2 Turbo lines.
+    """
+    comb_cut = F.require_all(
+        F.MAXSDOCACUT(doca_max),
+        in_range(comb_m_min, F.MASS, comb_m_max),
+        F.PT > comb_pt_min,
+        F.SUM(F.PT) > sum_pt_min,
+        F.P > comb_p_min,
+    )
+    vertex_cut = F.require_all(
+        in_range(m_min, F.MASS, m_max),
+        F.END_VZ > dzero_vz_min,
+        F.BPVVDRHO() < bpfdrho_max,
+        F.PT > pt_min,
+        F.P > p_min,
+        F.CHI2DOF < vchi2pdof_max,
+        # F.BPVLTIME(pvs) > bpvltime_min,
+        F.BPVVDZ(pvs) > bpvvdz_min,
+        F.BPVFDCHI2(pvs) > bpvfdchi2_min,  # <-- to be checked
+        # F.BPVIPCHI2(pvs) < bpvipchi2_max, #<-- to be checked
+        F.BPVDIRA(pvs) > bpvdira_min,
+        F.CHILD(1, F.END_VZ) - F.END_VZ > dz1_min,
+        fmath.sqrt(
+            (F.CHILD(1, F.END_VX) - F.END_VX) ** 2
+            + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
+        )
+        > ks_fdrho_min,
+    )
+    return ParticleCombiner(
+        [ks0, ks1, particle],
+        name=name,
+        DecayDescriptor=decay_descriptor,
+        CombinationCut=comb_cut,
+        CompositeCut=vertex_cut,
+    )
+
+
+###########################
+## Hlt2 lines definition ##
+###########################
+@register_line_builder(all_lines)
+def dp_to_kskspi_llll_line(name="Hlt2Charm_DpDspToKsKsPip_LLLL", prescale=1):
+    pvs = make_pvs()
+    long_pions = filter_long_pions(pvs)
+    ks_ll = make_ks_ll(
+        filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
+    )
+    dp_kskspi_llll = combine_d_ks_ks_h(
+        ks_ll, ks_ll, long_pions, pvs, "[D+ -> KS0 KS0 pi+]cc", name=f"{name}_Combiner"
+    )
+    return Hlt2Line(
+        name=name,
+        algs=charm_prefilters() + [ks_ll, dp_kskspi_llll],
+        prescale=prescale,
+        # extra_outputs=isolation.make_iso_particles(dp_kspi_ll, coneangle=0.5)
+    )
+
+
+@register_line_builder(all_lines)
+def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
+    pvs = make_pvs()
+    long_pions = filter_long_pions(pvs)
+    ks_ld = make_ks_dd(
+        filter_long_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+    )  # Naming convention slightly misleading, this creates LD KS0, but function called is make_ks_dd
+    dp_kskspi_lldd = combine_d_ks_ks_h(
+        ks_ld,
+        ks_ld,
+        long_pions,
+        pvs,
+        "[D+ -> KS0 KS0 pi+]cc",
+        name=f"{name}_Combiner",
+        doca_max=2.0 * mm,
+        dz1_min=50.0 * mm,
+        ks_fdrho_min=10 * mm,
+    )
+    return Hlt2Line(
+        name=name,
+        algs=charm_prefilters() + [ks_ld, dp_kskspi_lldd],
+        prescale=prescale,
+        # extra_outputs=isolation.make_iso_particles(dp_kspi_ld, coneangle=0.5, DownstreamTrackIso=True)
+    )
+
+
+@register_line_builder(all_lines)
+def dp_to_kskspi_dddd_line(name="Hlt2Charm_DpDspToKsKsPip_DDDD", prescale=1):
+    pvs = make_pvs()
+    long_pions = filter_long_pions(pvs)
+    ks_dd = make_ks_dd(
+        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+    )
+    dp_kskspi_dddd = combine_d_ks_ks_h(
+        ks_dd,
+        ks_dd,
+        long_pions,
+        pvs,
+        "[D+ -> KS0 KS0 pi+]cc",
+        name=f"{name}_Combiner",
+        doca_max=2.0 * mm,
+        dz1_min=50.0 * mm,
+        ks_fdrho_min=10 * mm,
+    )
+    return Hlt2Line(
+        name=name,
+        algs=charm_prefilters() + [ks_dd, dp_kskspi_dddd],
+        prescale=prescale,
+        # extra_outputs=isolation.make_iso_particles(dp_kspi_dd, coneangle=0.5, DownstreamTrackIso=True)
+    )
+
+
+@register_line_builder(all_lines)
+def dp_to_kskskp_llll_line(name="Hlt2Charm_DpDspToKsKsKp_LLLL", prescale=1):
+    pvs = make_pvs()
+    long_kaons = filter_long_kaons(pvs)
+    ks_ll = make_ks_ll(
+        filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
+    )
+    dp_kskskp_llll = combine_d_ks_ks_h(
+        ks_ll, ks_ll, long_kaons, pvs, "[D+ -> KS0 KS0 K+]cc", name=f"{name}_Combiner"
+    )
+    return Hlt2Line(
+        name=name,
+        algs=charm_prefilters() + [ks_ll, dp_kskskp_llll],
+        prescale=prescale,
+        # extra_outputs=isolation.make_iso_particles(dp_kskp_ll, coneangle=0.5)
+    )
+
+
+@register_line_builder(all_lines)
+def dp_to_kskskp_lldd_line(name="Hlt2Charm_DpDspToKsKsKp_LLDD", prescale=1):
+    pvs = make_pvs()
+    long_kaons = filter_long_kaons(pvs)
+    ks_ld = make_ks_dd(
+        filter_long_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+    )
+    dp_kskskp_lldd = combine_d_ks_ks_h(
+        ks_ld,
+        ks_ld,
+        long_kaons,
+        pvs,
+        "[D+ -> KS0 KS0 K+]cc",
+        name=f"{name}_Combiner",
+        doca_max=2.0 * mm,
+        dz1_min=50.0 * mm,
+        ks_fdrho_min=10 * mm,
+    )
+    return Hlt2Line(
+        name=name,
+        algs=charm_prefilters() + [ks_ld, dp_kskskp_lldd],
+        prescale=prescale,
+        # extra_outputs=isolation.make_iso_particles(dp_kskp_ld, coneangle=0.5, DownstreamTrackIso=True)
+    )
+
+
+@register_line_builder(all_lines)
+def dp_to_kskskp_dddd_line(name="Hlt2Charm_DpDspToKsKsKp_DDDD", prescale=1):
+    pvs = make_pvs()
+    long_kaons = filter_long_kaons(pvs)
+    ks_dd = make_ks_dd(
+        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+    )
+    dp_kskskp_dddd = combine_d_ks_ks_h(
+        ks_dd,
+        ks_dd,
+        long_kaons,
+        pvs,
+        "[D+ -> KS0 KS0 K+]cc",
+        name=f"{name}_Combiner",
+        doca_max=2.0 * mm,
+        dz1_min=50.0 * mm,
+        ks_fdrho_min=10 * mm,
+    )
+    return Hlt2Line(
+        name=name,
+        algs=charm_prefilters() + [ks_dd, dp_kskskp_dddd],
+        prescale=prescale,
+        # extra_outputs=isolation.make_iso_particles(dp_kskp_dd, coneangle=0.5, DownstreamTrackIso=True)
+    )
-- 
GitLab


From 98c5d7a4331d7ac487f64fe73cb7cfd097b0fed3 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Mon, 17 Mar 2025 10:40:24 +0100
Subject: [PATCH 02/20] Updated CODEOWNERS

---
 CODEOWNERS                                             | 1 +
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/CODEOWNERS b/CODEOWNERS
index 60647c93915..6ca68d53938 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -137,6 +137,7 @@
 /Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/rare_charm_*.py @dbrundu @dmitzel @smaccoli
 /Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/taggers.py @lpica @mstahl @tpajero
 /Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d0_to_pi0pi0.py @smaccoli
+/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py @gesarpis
 # Inclusive detached dilepton lines
 /Hlt/Hlt2Conf/python/Hlt2Conf/lines/inclusive_detached_dilepton/cutbased_dilepton_*.py @jagoodin
 /Hlt/Hlt2Conf/python/Hlt2Conf/lines/inclusive_detached_dilepton/dilepton_mva_builder.py @lecarus
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 26a50211aed..418bb8980b5 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -19,8 +19,6 @@ All LLLL, LLDD and DDDD modes of KS are included as a separate lines.
 The D+ and Ds+ decaying to the same final state are included in same line as
 in Run 2.
 
-Proponents: Gediminas Sarpis
-
 TODO:
 - check BPVIPCHI2 based on the data
 - apply BPVLTIME requirements to KS and D(s)+ when functor will be fully working / not flooding logs with warnings
-- 
GitLab


From 7636f459bbca2583a5e2ad9db72092ddcc477cd4 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 12:20:31 +0200
Subject: [PATCH 03/20] Major changes following D2Ksh updates

---
 .../python/Hlt2Conf/lines/charm/d_to_ksksh.py | 96 ++++++++++---------
 1 file changed, 50 insertions(+), 46 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 418bb8980b5..7e8369e9a60 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -1,5 +1,5 @@
 ###############################################################################
-# (c) Copyright 2021 CERN for the benefit of the LHCb Collaboration           #
+# (c) Copyright 2021-2025 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".   #
@@ -20,8 +20,8 @@ The D+ and Ds+ decaying to the same final state are included in same line as
 in Run 2.
 
 TODO:
-- check BPVIPCHI2 based on the data
-- apply BPVLTIME requirements to KS and D(s)+ when functor will be fully working / not flooding logs with warnings
+- check OWNPVIPCHI2 based on the data
+- apply OWNPVLTIME requirements to KS and D(s)+ when functor will be fully working / not flooding logs with warnings
 """
 
 import Functors as F
@@ -29,6 +29,7 @@ import Functors.math as fmath
 from Functors.math import in_range
 from GaudiKernel.SystemOfUnits import GeV, MeV, mm
 from GaudiKernel.SystemOfUnits import micrometer as um
+from GaudiKernel.SystemOfUnits import picosecond as ps
 from Moore.config import register_line_builder
 from Moore.lines import Hlt2Line
 from RecoConf.algorithms_thor import ParticleCombiner, ParticleFilter
@@ -37,6 +38,7 @@ from RecoConf.standard_particles import (
     make_has_rich_down_pions,
     make_has_rich_long_kaons,
     make_has_rich_long_pions,
+    make_KsTT,
 )
 
 from .prefilters import charm_prefilters
@@ -104,7 +106,7 @@ def make_ks_ll(
     pions1,
     pions2,
     pvs,
-    name="Charm_DToKsH_KsLL_{hash}",
+    name="Charm_DToKsKsH_KsLL_{hash}",
     comb_m_min=445 * MeV,
     comb_m_max=550 * MeV,
     m_min=460 * MeV,
@@ -115,10 +117,10 @@ def make_ks_ll(
     p_min=4 * GeV,
     doca_max=1 * mm,
     vchi2pdof_max=7.0,
-    bpvvdz_min=10 * mm,
-    bpvfdchi2_min=3.0,
+    ownpvvdz_min=10 * mm,
+    ownpvfdchi2_min=3.0,
     mipchi2_min=2,
-    # bpvltime_min=1. * picosecond
+    ownpvltime_min=1.0 * ps
 ):
     """Make KS -> pi+ pi- from long tracks."""
     comb_cut = F.require_all(
@@ -132,10 +134,10 @@ def make_ks_ll(
         F.PT > pt_min,
         F.P > p_min,
         F.CHI2DOF < vchi2pdof_max,
-        F.BPVVDZ(pvs) > bpvvdz_min,
-        F.BPVFDCHI2(pvs) > bpvfdchi2_min,
+        F.OWNPVVDZ(pvs) > ownpvvdz_min,
+        F.OWNPVFDCHI2(pvs) > ownpvfdchi2_min,
         F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs),
-        # F.BPVLTIME(pvs) > bpvltime_min  #<-- not converging at all
+        F.OWNPVLTIME(pvs) > ownpvltime_min
     )
     return ParticleCombiner(
         [pions1, pions2],
@@ -149,8 +151,7 @@ def make_ks_ll(
 def make_ks_dd(
     pions1,
     pions2,
-    pvs,
-    name="Charm_DToKsH_KsDD_{hash}",
+    name="Charm_DToKsKsH_KsDD_{hash}",
     comb_m_min=417 * MeV,
     comb_m_max=577 * MeV,
     m_min=437 * MeV,
@@ -163,7 +164,7 @@ def make_ks_dd(
     doca_max=2 * mm,
     docachi2_max=12.0,
     vchi2pdof_max=10.0,
-    # bpvltime_min=1. * picosecond
+    ownpvltime_min=1. * ps
 ):
     """
     Make KS -> pi+ pi- from downstream tracks.
@@ -181,7 +182,7 @@ def make_ks_dd(
         F.PT > pt_min,
         F.P > p_min,
         F.CHI2DOF < vchi2pdof_max,
-        # F.BPVLTIME(pvs) > bpvltime_min #--- not converging
+        F.OWNPVLTIME(pvs) > ownpvltime_min
     )
     return ParticleCombiner(
         [pions1, pions2],
@@ -213,40 +214,42 @@ def combine_d_ks_ks_h(
     p_min=16 * GeV,
     doca_max=100 * um,
     vchi2pdof_max=5.0,
-    # bpvltime_min=0.25 * picosecond,
-    bpvvdz_min=0.5 * mm,
-    bpvfdchi2_min=25.0,
+    ownpvltime_min=0.2 * ps,
+    ownpvvdz_min=0.5 * mm,
+    ownpvfdchi2_min=25.0,
     bpfdrho_max=5 * mm,
-    # bpvipchi2_max=999.,
-    bpvdira_min=0.995,
-    dz1_min=5.0 * mm,
+    ownpvdira_min=0.9995,
+    dz1_min=20.0 * mm,
     ks_fdrho_min=1 * mm,
     dzero_vz_min=-300 * mm,
 ):
     """Combine D meson with Ks Ks and additonal hadron (K/pi).
     Make MASS, P, PT, SUM(PT), MAXDOCACUT cuts in the combination;
-    MASS, P, PT, CHI2DOF, BPVVDZ, BPVFDCHI2, BPVIPCHI2, BPVDIRA cuts after the vertex fit.
+    MASS, P, PT, CHI2DOF, OWNPVVDZ, OWNPVFDCHI2, OWNPVIPCHI2, OWNPVDIRA cuts after the vertex fit.
     Cuts generally based on Run2 Turbo lines.
     """
     comb_cut = F.require_all(
-        F.MAXSDOCACUT(doca_max),
         in_range(comb_m_min, F.MASS, comb_m_max),
         F.PT > comb_pt_min,
         F.SUM(F.PT) > sum_pt_min,
         F.P > comb_p_min,
     )
+
+
+    if doca_max is not None:
+        comb_cut &= F.MAXSDOCACUT(doca_max)
+
     vertex_cut = F.require_all(
         in_range(m_min, F.MASS, m_max),
         F.END_VZ > dzero_vz_min,
-        F.BPVVDRHO() < bpfdrho_max,
+        F.OWNPVVDRHO() < bpfdrho_max,
         F.PT > pt_min,
         F.P > p_min,
         F.CHI2DOF < vchi2pdof_max,
-        # F.BPVLTIME(pvs) > bpvltime_min,
-        F.BPVVDZ(pvs) > bpvvdz_min,
-        F.BPVFDCHI2(pvs) > bpvfdchi2_min,  # <-- to be checked
-        # F.BPVIPCHI2(pvs) < bpvipchi2_max, #<-- to be checked
-        F.BPVDIRA(pvs) > bpvdira_min,
+        F.OWNPVLTIME > ownpvltime_min,
+        F.OWNPVVDZ > ownpvvdz_min,
+        F.OWNPVFDCHI2 > ownpvfdchi2_min,
+        F.OWNPVDIRA > ownpvdira_min,
         F.CHILD(1, F.END_VZ) - F.END_VZ > dz1_min,
         fmath.sqrt(
             (F.CHILD(1, F.END_VX) - F.END_VX) ** 2
@@ -280,7 +283,6 @@ def dp_to_kskspi_llll_line(name="Hlt2Charm_DpDspToKsKsPip_LLLL", prescale=1):
         name=name,
         algs=charm_prefilters() + [ks_ll, dp_kskspi_llll],
         prescale=prescale,
-        # extra_outputs=isolation.make_iso_particles(dp_kspi_ll, coneangle=0.5)
     )
 
 
@@ -288,12 +290,15 @@ def dp_to_kskspi_llll_line(name="Hlt2Charm_DpDspToKsKsPip_LLLL", prescale=1):
 def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
     pvs = make_pvs()
     long_pions = filter_long_pions(pvs)
-    ks_ld = make_ks_dd(
-        filter_long_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
-    )  # Naming convention slightly misleading, this creates LD KS0, but function called is make_ks_dd
+    ks_ll = make_ks_ll(
+        filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
+    )
+    ks_dd = make_ks_dd(
+        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+    )
     dp_kskspi_lldd = combine_d_ks_ks_h(
-        ks_ld,
-        ks_ld,
+        ks_ll,
+        ks_dd,
         long_pions,
         pvs,
         "[D+ -> KS0 KS0 pi+]cc",
@@ -305,8 +310,7 @@ def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
     return Hlt2Line(
         name=name,
         algs=charm_prefilters() + [ks_ld, dp_kskspi_lldd],
-        prescale=prescale,
-        # extra_outputs=isolation.make_iso_particles(dp_kspi_ld, coneangle=0.5, DownstreamTrackIso=True)
+        prescale=prescale
     )
 
 
@@ -331,8 +335,7 @@ def dp_to_kskspi_dddd_line(name="Hlt2Charm_DpDspToKsKsPip_DDDD", prescale=1):
     return Hlt2Line(
         name=name,
         algs=charm_prefilters() + [ks_dd, dp_kskspi_dddd],
-        prescale=prescale,
-        # extra_outputs=isolation.make_iso_particles(dp_kspi_dd, coneangle=0.5, DownstreamTrackIso=True)
+        prescale=prescale
     )
 
 
@@ -349,8 +352,7 @@ def dp_to_kskskp_llll_line(name="Hlt2Charm_DpDspToKsKsKp_LLLL", prescale=1):
     return Hlt2Line(
         name=name,
         algs=charm_prefilters() + [ks_ll, dp_kskskp_llll],
-        prescale=prescale,
-        # extra_outputs=isolation.make_iso_particles(dp_kskp_ll, coneangle=0.5)
+        prescale=prescale
     )
 
 
@@ -358,12 +360,15 @@ def dp_to_kskskp_llll_line(name="Hlt2Charm_DpDspToKsKsKp_LLLL", prescale=1):
 def dp_to_kskskp_lldd_line(name="Hlt2Charm_DpDspToKsKsKp_LLDD", prescale=1):
     pvs = make_pvs()
     long_kaons = filter_long_kaons(pvs)
-    ks_ld = make_ks_dd(
-        filter_long_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+    ks_ll = make_ks_ll(
+        filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
+    )
+    ks_dd = make_ks_dd(
+        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
     )
     dp_kskskp_lldd = combine_d_ks_ks_h(
-        ks_ld,
-        ks_ld,
+        ks_ll,
+        ks_dd,
         long_kaons,
         pvs,
         "[D+ -> KS0 KS0 K+]cc",
@@ -401,6 +406,5 @@ def dp_to_kskskp_dddd_line(name="Hlt2Charm_DpDspToKsKsKp_DDDD", prescale=1):
     return Hlt2Line(
         name=name,
         algs=charm_prefilters() + [ks_dd, dp_kskskp_dddd],
-        prescale=prescale,
-        # extra_outputs=isolation.make_iso_particles(dp_kskp_dd, coneangle=0.5, DownstreamTrackIso=True)
+        prescale=prescale
     )
-- 
GitLab


From 2ca0ef08c8135b35134891faed7d49d0b264b804 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 12:24:20 +0200
Subject: [PATCH 04/20] Quick Fixes

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 7e8369e9a60..dba4627c994 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -182,7 +182,7 @@ def make_ks_dd(
         F.PT > pt_min,
         F.P > p_min,
         F.CHI2DOF < vchi2pdof_max,
-        F.OWNPVLTIME(pvs) > ownpvltime_min
+        F.OWNPVLTIME > ownpvltime_min
     )
     return ParticleCombiner(
         [pions1, pions2],
@@ -309,7 +309,7 @@ def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
     )
     return Hlt2Line(
         name=name,
-        algs=charm_prefilters() + [ks_ld, dp_kskspi_lldd],
+        algs=charm_prefilters() + [ks_ll, ks_dd, dp_kskspi_lldd],
         prescale=prescale
     )
 
@@ -379,7 +379,7 @@ def dp_to_kskskp_lldd_line(name="Hlt2Charm_DpDspToKsKsKp_LLDD", prescale=1):
     )
     return Hlt2Line(
         name=name,
-        algs=charm_prefilters() + [ks_ld, dp_kskskp_lldd],
+        algs=charm_prefilters() + [ks_ll, ks_dd, dp_kskskp_lldd],
         prescale=prescale,
         # extra_outputs=isolation.make_iso_particles(dp_kskp_ld, coneangle=0.5, DownstreamTrackIso=True)
     )
-- 
GitLab


From f2c697a1bfecee2ef8da9f7f3905d360765ade8c Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 12:59:30 +0200
Subject: [PATCH 05/20] Removing outdated brackets from OWNPVVDZ

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index dba4627c994..0b4a1009944 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -134,7 +134,7 @@ def make_ks_ll(
         F.PT > pt_min,
         F.P > p_min,
         F.CHI2DOF < vchi2pdof_max,
-        F.OWNPVVDZ(pvs) > ownpvvdz_min,
+        F.OWNPVVDZ > ownpvvdz_min,
         F.OWNPVFDCHI2(pvs) > ownpvfdchi2_min,
         F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs),
         F.OWNPVLTIME(pvs) > ownpvltime_min
@@ -256,6 +256,12 @@ def combine_d_ks_ks_h(
             + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
         )
         > ks_fdrho_min,
+        # F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
+        # fmath.sqrt(
+        #     (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
+        #     + (F.CHILD(2, F.END_VY) - F.END_VY) ** 2
+        # )
+        # > ks_fdrho_min,
     )
     return ParticleCombiner(
         [ks0, ks1, particle],
-- 
GitLab


From 498e005e29beedbb9e37f69efde6d7ff84c44ff2 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 13:35:36 +0200
Subject: [PATCH 06/20] Removed pvs from make_ks_dd definition and calls

---
 .../python/Hlt2Conf/lines/charm/d_to_ksksh.py         | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 0b4a1009944..105bd8d23a1 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -254,8 +254,7 @@ def combine_d_ks_ks_h(
         fmath.sqrt(
             (F.CHILD(1, F.END_VX) - F.END_VX) ** 2
             + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
-        )
-        > ks_fdrho_min,
+        ) > ks_fdrho_min,
         # F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
         # fmath.sqrt(
         #     (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
@@ -300,7 +299,7 @@ def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
         filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
     )
     ks_dd = make_ks_dd(
-        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs)
     )
     dp_kskspi_lldd = combine_d_ks_ks_h(
         ks_ll,
@@ -325,7 +324,7 @@ def dp_to_kskspi_dddd_line(name="Hlt2Charm_DpDspToKsKsPip_DDDD", prescale=1):
     pvs = make_pvs()
     long_pions = filter_long_pions(pvs)
     ks_dd = make_ks_dd(
-        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs)
     )
     dp_kskspi_dddd = combine_d_ks_ks_h(
         ks_dd,
@@ -370,7 +369,7 @@ def dp_to_kskskp_lldd_line(name="Hlt2Charm_DpDspToKsKsKp_LLDD", prescale=1):
         filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
     )
     ks_dd = make_ks_dd(
-        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs)
     )
     dp_kskskp_lldd = combine_d_ks_ks_h(
         ks_ll,
@@ -396,7 +395,7 @@ def dp_to_kskskp_dddd_line(name="Hlt2Charm_DpDspToKsKsKp_DDDD", prescale=1):
     pvs = make_pvs()
     long_kaons = filter_long_kaons(pvs)
     ks_dd = make_ks_dd(
-        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs), pvs
+        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs)
     )
     dp_kskskp_dddd = combine_d_ks_ks_h(
         ks_dd,
-- 
GitLab


From c16b679b6f375b942574635d9edf09d705dc9a32 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 13:43:43 +0200
Subject: [PATCH 07/20] syntax

---
 .../python/Hlt2Conf/lines/charm/d_to_ksksh.py | 43 ++++++-------------
 1 file changed, 14 insertions(+), 29 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 105bd8d23a1..4d1dfb0c272 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -120,7 +120,7 @@ def make_ks_ll(
     ownpvvdz_min=10 * mm,
     ownpvfdchi2_min=3.0,
     mipchi2_min=2,
-    ownpvltime_min=1.0 * ps
+    ownpvltime_min=1.0 * ps,
 ):
     """Make KS -> pi+ pi- from long tracks."""
     comb_cut = F.require_all(
@@ -137,7 +137,7 @@ def make_ks_ll(
         F.OWNPVVDZ > ownpvvdz_min,
         F.OWNPVFDCHI2(pvs) > ownpvfdchi2_min,
         F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs),
-        F.OWNPVLTIME(pvs) > ownpvltime_min
+        F.OWNPVLTIME(pvs) > ownpvltime_min,
     )
     return ParticleCombiner(
         [pions1, pions2],
@@ -164,7 +164,7 @@ def make_ks_dd(
     doca_max=2 * mm,
     docachi2_max=12.0,
     vchi2pdof_max=10.0,
-    ownpvltime_min=1. * ps
+    ownpvltime_min=1.0 * ps,
 ):
     """
     Make KS -> pi+ pi- from downstream tracks.
@@ -182,7 +182,7 @@ def make_ks_dd(
         F.PT > pt_min,
         F.P > p_min,
         F.CHI2DOF < vchi2pdof_max,
-        F.OWNPVLTIME > ownpvltime_min
+        F.OWNPVLTIME > ownpvltime_min,
     )
     return ParticleCombiner(
         [pions1, pions2],
@@ -235,7 +235,6 @@ def combine_d_ks_ks_h(
         F.P > comb_p_min,
     )
 
-
     if doca_max is not None:
         comb_cut &= F.MAXSDOCACUT(doca_max)
 
@@ -254,7 +253,8 @@ def combine_d_ks_ks_h(
         fmath.sqrt(
             (F.CHILD(1, F.END_VX) - F.END_VX) ** 2
             + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
-        ) > ks_fdrho_min,
+        )
+        > ks_fdrho_min,
         # F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
         # fmath.sqrt(
         #     (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
@@ -298,9 +298,7 @@ def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
     ks_ll = make_ks_ll(
         filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
     )
-    ks_dd = make_ks_dd(
-        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs)
-    )
+    ks_dd = make_ks_dd(filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs))
     dp_kskspi_lldd = combine_d_ks_ks_h(
         ks_ll,
         ks_dd,
@@ -315,7 +313,7 @@ def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
     return Hlt2Line(
         name=name,
         algs=charm_prefilters() + [ks_ll, ks_dd, dp_kskspi_lldd],
-        prescale=prescale
+        prescale=prescale,
     )
 
 
@@ -323,9 +321,7 @@ def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
 def dp_to_kskspi_dddd_line(name="Hlt2Charm_DpDspToKsKsPip_DDDD", prescale=1):
     pvs = make_pvs()
     long_pions = filter_long_pions(pvs)
-    ks_dd = make_ks_dd(
-        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs)
-    )
+    ks_dd = make_ks_dd(filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs))
     dp_kskspi_dddd = combine_d_ks_ks_h(
         ks_dd,
         ks_dd,
@@ -338,9 +334,7 @@ def dp_to_kskspi_dddd_line(name="Hlt2Charm_DpDspToKsKsPip_DDDD", prescale=1):
         ks_fdrho_min=10 * mm,
     )
     return Hlt2Line(
-        name=name,
-        algs=charm_prefilters() + [ks_dd, dp_kskspi_dddd],
-        prescale=prescale
+        name=name, algs=charm_prefilters() + [ks_dd, dp_kskspi_dddd], prescale=prescale
     )
 
 
@@ -354,10 +348,7 @@ def dp_to_kskskp_llll_line(name="Hlt2Charm_DpDspToKsKsKp_LLLL", prescale=1):
     dp_kskskp_llll = combine_d_ks_ks_h(
         ks_ll, ks_ll, long_kaons, pvs, "[D+ -> KS0 KS0 K+]cc", name=f"{name}_Combiner"
     )
-    return Hlt2Line(
-        name=name,
-        algs=charm_prefilters() + [ks_ll, dp_kskskp_llll],
-        prescale=prescale
+    return Hlt2Line(name=name, algs=charm_prefilters() + [ks_ll, dp_kskskp_llll], prescale=prescale
     )
 
 
@@ -368,9 +359,7 @@ def dp_to_kskskp_lldd_line(name="Hlt2Charm_DpDspToKsKsKp_LLDD", prescale=1):
     ks_ll = make_ks_ll(
         filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
     )
-    ks_dd = make_ks_dd(
-        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs)
-    )
+    ks_dd = make_ks_dd(filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs))
     dp_kskskp_lldd = combine_d_ks_ks_h(
         ks_ll,
         ks_dd,
@@ -394,9 +383,7 @@ def dp_to_kskskp_lldd_line(name="Hlt2Charm_DpDspToKsKsKp_LLDD", prescale=1):
 def dp_to_kskskp_dddd_line(name="Hlt2Charm_DpDspToKsKsKp_DDDD", prescale=1):
     pvs = make_pvs()
     long_kaons = filter_long_kaons(pvs)
-    ks_dd = make_ks_dd(
-        filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs)
-    )
+    ks_dd = make_ks_dd(filter_down_pions_from_ks(pvs), filter_down_pions_from_ks(pvs))
     dp_kskskp_dddd = combine_d_ks_ks_h(
         ks_dd,
         ks_dd,
@@ -409,7 +396,5 @@ def dp_to_kskskp_dddd_line(name="Hlt2Charm_DpDspToKsKsKp_DDDD", prescale=1):
         ks_fdrho_min=10 * mm,
     )
     return Hlt2Line(
-        name=name,
-        algs=charm_prefilters() + [ks_dd, dp_kskskp_dddd],
-        prescale=prescale
+        name=name, algs=charm_prefilters() + [ks_dd, dp_kskskp_dddd], prescale=prescale
     )
-- 
GitLab


From 647d4650e81deca17d6123204ed2ebf041cca0b2 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 13:46:34 +0200
Subject: [PATCH 08/20] more syntax

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 4d1dfb0c272..a8002f18565 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -348,7 +348,8 @@ def dp_to_kskskp_llll_line(name="Hlt2Charm_DpDspToKsKsKp_LLLL", prescale=1):
     dp_kskskp_llll = combine_d_ks_ks_h(
         ks_ll, ks_ll, long_kaons, pvs, "[D+ -> KS0 KS0 K+]cc", name=f"{name}_Combiner"
     )
-    return Hlt2Line(name=name, algs=charm_prefilters() + [ks_ll, dp_kskskp_llll], prescale=prescale
+    return Hlt2Line(
+        name=name, algs=charm_prefilters() + [ks_ll, dp_kskskp_llll], prescale=prescale
     )
 
 
-- 
GitLab


From 35ebcc497cefcdc3693b58861f6bcd74b20bd7af Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 15:18:09 +0200
Subject: [PATCH 09/20] Partial implementation of Run2 selection

---
 .../python/Hlt2Conf/lines/charm/d_to_ksksh.py | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index a8002f18565..c2138af072f 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -112,14 +112,14 @@ def make_ks_ll(
     m_min=460 * MeV,
     m_max=535 * MeV,
     comb_pt_min=300 * MeV,
-    pt_min=350 * MeV,
+    pt_min=500 * MeV,
     comb_p_min=3.5 * GeV,
     p_min=4 * GeV,
     doca_max=1 * mm,
-    vchi2pdof_max=7.0,
+    vchi2pdof_max=8.0,
     ownpvvdz_min=10 * mm,
     ownpvfdchi2_min=3.0,
-    mipchi2_min=2,
+    mipchi2_min=9.0,
     ownpvltime_min=1.0 * ps,
 ):
     """Make KS -> pi+ pi- from long tracks."""
@@ -157,13 +157,14 @@ def make_ks_dd(
     m_min=437 * MeV,
     m_max=557 * MeV,
     comb_pt_min=400 * MeV,
-    pt_min=450 * MeV,
+    pt_min=500 * MeV,
     sum_pt_min=500 * MeV,
     comb_p_min=4.5 * GeV,
     p_min=5 * GeV,
     doca_max=2 * mm,
     docachi2_max=12.0,
     vchi2pdof_max=10.0,
+    mipchi2_min=9.0,
     ownpvltime_min=1.0 * ps,
 ):
     """
@@ -203,17 +204,17 @@ def combine_d_ks_ks_h(
     pvs,
     decay_descriptor,
     name="Charm_DToKsKsH_DToKsKsHCombiner_{hash}",
-    comb_m_min=1779 * MeV,
-    comb_m_max=2059 * MeV,
-    m_min=1789 * MeV,  # lower range for D+
-    m_max=2049 * MeV,  # upper range for Ds+
+    comb_m_min=1765 * MeV,
+    comb_m_max=2065 * MeV,
+    m_min=1840 * MeV,  # lower range for D+
+    m_max=2090 * MeV,  # upper range for Ds+
     comb_pt_min=1.5 * GeV,
     pt_min=2.0 * GeV,
     sum_pt_min=1.8 * GeV,
     comb_p_min=15 * GeV,
     p_min=16 * GeV,
     doca_max=100 * um,
-    vchi2pdof_max=5.0,
+    vchi2pdof_max=8.0,
     ownpvltime_min=0.2 * ps,
     ownpvvdz_min=0.5 * mm,
     ownpvfdchi2_min=25.0,
-- 
GitLab


From 86c0939f8c292ee75ae4b261c77f765239581bd8 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 15:40:25 +0200
Subject: [PATCH 10/20] Aligning with Run2 selection

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index c2138af072f..ffe812355e9 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -163,7 +163,7 @@ def make_ks_dd(
     p_min=5 * GeV,
     doca_max=2 * mm,
     docachi2_max=12.0,
-    vchi2pdof_max=10.0,
+    vchi2pdof_max=8.0,
     mipchi2_min=9.0,
     ownpvltime_min=1.0 * ps,
 ):
@@ -208,14 +208,14 @@ def combine_d_ks_ks_h(
     comb_m_max=2065 * MeV,
     m_min=1840 * MeV,  # lower range for D+
     m_max=2090 * MeV,  # upper range for Ds+
-    comb_pt_min=1.5 * GeV,
+    comb_pt_min=3 * GeV,
     pt_min=2.0 * GeV,
-    sum_pt_min=1.8 * GeV,
-    comb_p_min=15 * GeV,
+    sum_pt_min=1.5 * GeV,
+    comb_p_min=20 * GeV,
     p_min=16 * GeV,
     doca_max=100 * um,
     vchi2pdof_max=8.0,
-    ownpvltime_min=0.2 * ps,
+    ownpvltime_min=0.4 * ps,
     ownpvvdz_min=0.5 * mm,
     ownpvfdchi2_min=25.0,
     bpfdrho_max=5 * mm,
-- 
GitLab


From b6b2d6dad512ad116621fcad2a24fa00be42a946 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Tue, 18 Mar 2025 15:56:54 +0200
Subject: [PATCH 11/20] applied cuts to 2nd Ks and aligned more cuts to Run2

---
 .../python/Hlt2Conf/lines/charm/d_to_ksksh.py | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index ffe812355e9..22baab1abee 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -111,8 +111,8 @@ def make_ks_ll(
     comb_m_max=550 * MeV,
     m_min=460 * MeV,
     m_max=535 * MeV,
-    comb_pt_min=300 * MeV,
-    pt_min=500 * MeV,
+    comb_pt_min=500 * MeV,
+    pt_min=300 * MeV,
     comb_p_min=3.5 * GeV,
     p_min=4 * GeV,
     doca_max=1 * mm,
@@ -156,8 +156,8 @@ def make_ks_dd(
     comb_m_max=577 * MeV,
     m_min=437 * MeV,
     m_max=557 * MeV,
-    comb_pt_min=400 * MeV,
-    pt_min=500 * MeV,
+    comb_pt_min=500 * MeV,
+    pt_min=450 * MeV,
     sum_pt_min=500 * MeV,
     comb_p_min=4.5 * GeV,
     p_min=5 * GeV,
@@ -256,12 +256,12 @@ def combine_d_ks_ks_h(
             + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
         )
         > ks_fdrho_min,
-        # F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
-        # fmath.sqrt(
-        #     (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
-        #     + (F.CHILD(2, F.END_VY) - F.END_VY) ** 2
-        # )
-        # > ks_fdrho_min,
+        F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
+        fmath.sqrt(
+            (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
+            + (F.CHILD(2, F.END_VY) - F.END_VY) ** 2
+        )
+        > ks_fdrho_min,
     )
     return ParticleCombiner(
         [ks0, ks1, particle],
-- 
GitLab


From a50642b96bc9822f353ddcd8962610fd3e9c80a1 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Wed, 19 Mar 2025 16:45:14 +0200
Subject: [PATCH 12/20] Removed (pvs) after local testing and debugging 2nd Ks

---
 .../python/Hlt2Conf/lines/charm/d_to_ksksh.py    | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 22baab1abee..c838d06bde3 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -135,9 +135,9 @@ def make_ks_ll(
         F.P > p_min,
         F.CHI2DOF < vchi2pdof_max,
         F.OWNPVVDZ > ownpvvdz_min,
-        F.OWNPVFDCHI2(pvs) > ownpvfdchi2_min,
+        F.OWNPVFDCHI2 > ownpvfdchi2_min,
         F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs),
-        F.OWNPVLTIME(pvs) > ownpvltime_min,
+        F.OWNPVLTIME > ownpvltime_min,
     )
     return ParticleCombiner(
         [pions1, pions2],
@@ -256,12 +256,12 @@ def combine_d_ks_ks_h(
             + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
         )
         > ks_fdrho_min,
-        F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
-        fmath.sqrt(
-            (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
-            + (F.CHILD(2, F.END_VY) - F.END_VY) ** 2
-        )
-        > ks_fdrho_min,
+        # F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
+        # fmath.sqrt(
+        #     (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
+        #     + (F.CHILD(2, F.END_VY) - F.END_VY) ** 2
+        # )
+        # > ks_fdrho_min,
     )
     return ParticleCombiner(
         [ks0, ks1, particle],
-- 
GitLab


From 2bf4fa2c294d29043837ce2ba4927e0ad2dd1a4e Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Wed, 19 Mar 2025 17:14:55 +0200
Subject: [PATCH 13/20] Adding AllowDiffInputsForSameIDChildren=True

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index c838d06bde3..557c62d8b3c 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -283,7 +283,7 @@ def dp_to_kskspi_llll_line(name="Hlt2Charm_DpDspToKsKsPip_LLLL", prescale=1):
         filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
     )
     dp_kskspi_llll = combine_d_ks_ks_h(
-        ks_ll, ks_ll, long_pions, pvs, "[D+ -> KS0 KS0 pi+]cc", name=f"{name}_Combiner"
+        ks_ll, ks_ll, long_pions, pvs, "[D+ -> KS0 KS0 pi+]cc", name=f"{name}_Combiner", AllowDiffInputsForSameIDChildren=True
     )
     return Hlt2Line(
         name=name,
@@ -307,6 +307,7 @@ def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 pi+]cc",
         name=f"{name}_Combiner",
+        AllowDiffInputsForSameIDChildren=True,
         doca_max=2.0 * mm,
         dz1_min=50.0 * mm,
         ks_fdrho_min=10 * mm,
@@ -330,6 +331,7 @@ def dp_to_kskspi_dddd_line(name="Hlt2Charm_DpDspToKsKsPip_DDDD", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 pi+]cc",
         name=f"{name}_Combiner",
+        AllowDiffInputsForSameIDChildren=True,
         doca_max=2.0 * mm,
         dz1_min=50.0 * mm,
         ks_fdrho_min=10 * mm,
@@ -347,7 +349,7 @@ def dp_to_kskskp_llll_line(name="Hlt2Charm_DpDspToKsKsKp_LLLL", prescale=1):
         filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
     )
     dp_kskskp_llll = combine_d_ks_ks_h(
-        ks_ll, ks_ll, long_kaons, pvs, "[D+ -> KS0 KS0 K+]cc", name=f"{name}_Combiner"
+        ks_ll, ks_ll, long_kaons, pvs, "[D+ -> KS0 KS0 K+]cc", name=f"{name}_Combiner", AllowDiffInputsForSameIDChildren=True,
     )
     return Hlt2Line(
         name=name, algs=charm_prefilters() + [ks_ll, dp_kskskp_llll], prescale=prescale
@@ -369,6 +371,7 @@ def dp_to_kskskp_lldd_line(name="Hlt2Charm_DpDspToKsKsKp_LLDD", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 K+]cc",
         name=f"{name}_Combiner",
+        AllowDiffInputsForSameIDChildren=True,
         doca_max=2.0 * mm,
         dz1_min=50.0 * mm,
         ks_fdrho_min=10 * mm,
@@ -393,6 +396,7 @@ def dp_to_kskskp_dddd_line(name="Hlt2Charm_DpDspToKsKsKp_DDDD", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 K+]cc",
         name=f"{name}_Combiner",
+        AllowDiffInputsForSameIDChildren=True,
         doca_max=2.0 * mm,
         dz1_min=50.0 * mm,
         ks_fdrho_min=10 * mm,
-- 
GitLab


From 4c005d5de7c349074c49c4e597651b1373b431dc Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Wed, 19 Mar 2025 17:56:01 +0200
Subject: [PATCH 14/20] Syntax

---
 .../python/Hlt2Conf/lines/charm/d_to_ksksh.py | 28 +++++++++++++------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 557c62d8b3c..edda0916fd8 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -256,12 +256,12 @@ def combine_d_ks_ks_h(
             + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
         )
         > ks_fdrho_min,
-        # F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
-        # fmath.sqrt(
-        #     (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
-        #     + (F.CHILD(2, F.END_VY) - F.END_VY) ** 2
-        # )
-        # > ks_fdrho_min,
+        F.CHILD(2, F.END_VZ) - F.END_VZ > dz1_min,
+        fmath.sqrt(
+            (F.CHILD(2, F.END_VX) - F.END_VX) ** 2
+            + (F.CHILD(2, F.END_VY) - F.END_VY) ** 2
+        )
+        > ks_fdrho_min,
     )
     return ParticleCombiner(
         [ks0, ks1, particle],
@@ -283,7 +283,13 @@ def dp_to_kskspi_llll_line(name="Hlt2Charm_DpDspToKsKsPip_LLLL", prescale=1):
         filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
     )
     dp_kskspi_llll = combine_d_ks_ks_h(
-        ks_ll, ks_ll, long_pions, pvs, "[D+ -> KS0 KS0 pi+]cc", name=f"{name}_Combiner", AllowDiffInputsForSameIDChildren=True
+        ks_ll,
+        ks_ll,
+        long_pions,
+        pvs,
+        "[D+ -> KS0 KS0 pi+]cc",
+        name=f"{name}_Combiner",
+        AllowDiffInputsForSameIDChildren=True,
     )
     return Hlt2Line(
         name=name,
@@ -349,7 +355,13 @@ def dp_to_kskskp_llll_line(name="Hlt2Charm_DpDspToKsKsKp_LLLL", prescale=1):
         filter_long_pions_from_ks(pvs), filter_long_pions_from_ks(pvs), pvs
     )
     dp_kskskp_llll = combine_d_ks_ks_h(
-        ks_ll, ks_ll, long_kaons, pvs, "[D+ -> KS0 KS0 K+]cc", name=f"{name}_Combiner", AllowDiffInputsForSameIDChildren=True,
+        ks_ll,
+        ks_ll,
+        long_kaons,
+        pvs,
+        "[D+ -> KS0 KS0 K+]cc",
+        name=f"{name}_Combiner",
+        AllowDiffInputsForSameIDChildren=True,
     )
     return Hlt2Line(
         name=name, algs=charm_prefilters() + [ks_ll, dp_kskskp_llll], prescale=prescale
-- 
GitLab


From 9b43bd784a90a50427c081664267a60b1a4f6279 Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Wed, 19 Mar 2025 19:30:32 +0200
Subject: [PATCH 15/20] Shuffling location of allow-statement

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index edda0916fd8..78c734573cc 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -266,6 +266,7 @@ def combine_d_ks_ks_h(
     return ParticleCombiner(
         [ks0, ks1, particle],
         name=name,
+        AllowDiffInputsForSameIDChildren=True,
         DecayDescriptor=decay_descriptor,
         CombinationCut=comb_cut,
         CompositeCut=vertex_cut,
@@ -289,7 +290,6 @@ def dp_to_kskspi_llll_line(name="Hlt2Charm_DpDspToKsKsPip_LLLL", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 pi+]cc",
         name=f"{name}_Combiner",
-        AllowDiffInputsForSameIDChildren=True,
     )
     return Hlt2Line(
         name=name,
@@ -313,7 +313,6 @@ def dp_to_kskspi_lldd_line(name="Hlt2Charm_DpDspToKsKsPip_LLDD", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 pi+]cc",
         name=f"{name}_Combiner",
-        AllowDiffInputsForSameIDChildren=True,
         doca_max=2.0 * mm,
         dz1_min=50.0 * mm,
         ks_fdrho_min=10 * mm,
@@ -337,7 +336,6 @@ def dp_to_kskspi_dddd_line(name="Hlt2Charm_DpDspToKsKsPip_DDDD", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 pi+]cc",
         name=f"{name}_Combiner",
-        AllowDiffInputsForSameIDChildren=True,
         doca_max=2.0 * mm,
         dz1_min=50.0 * mm,
         ks_fdrho_min=10 * mm,
@@ -361,7 +359,6 @@ def dp_to_kskskp_llll_line(name="Hlt2Charm_DpDspToKsKsKp_LLLL", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 K+]cc",
         name=f"{name}_Combiner",
-        AllowDiffInputsForSameIDChildren=True,
     )
     return Hlt2Line(
         name=name, algs=charm_prefilters() + [ks_ll, dp_kskskp_llll], prescale=prescale
@@ -383,7 +380,6 @@ def dp_to_kskskp_lldd_line(name="Hlt2Charm_DpDspToKsKsKp_LLDD", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 K+]cc",
         name=f"{name}_Combiner",
-        AllowDiffInputsForSameIDChildren=True,
         doca_max=2.0 * mm,
         dz1_min=50.0 * mm,
         ks_fdrho_min=10 * mm,
@@ -408,7 +404,6 @@ def dp_to_kskskp_dddd_line(name="Hlt2Charm_DpDspToKsKsKp_DDDD", prescale=1):
         pvs,
         "[D+ -> KS0 KS0 K+]cc",
         name=f"{name}_Combiner",
-        AllowDiffInputsForSameIDChildren=True,
         doca_max=2.0 * mm,
         dz1_min=50.0 * mm,
         ks_fdrho_min=10 * mm,
-- 
GitLab


From 21006a7656fd0674dfd3a69c6f7dc2c79d4e8a5e Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Thu, 20 Mar 2025 14:23:31 +0200
Subject: [PATCH 16/20] Added suggestions 20.03

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
index 78c734573cc..90141a6ee29 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/d_to_ksksh.py
@@ -55,7 +55,7 @@ all_lines = {}
 
 
 def filter_long_pions(
-    pvs, pt_min=250 * MeV, p_min=2 * GeV, mipchi2_min=35.0, pion_pidk_max=5.0
+    pvs, pt_min=250 * MeV, p_min=2 * GeV, mipchi2_min=4.0, pion_pidk_max=5.0
 ):
     """Filter long pions with P PT, MINIPCHI2CUT and PIDk cuts."""
     cut = F.require_all(
@@ -68,7 +68,7 @@ def filter_long_pions(
 
 
 def filter_long_kaons(
-    pvs, pt_min=250 * MeV, p_min=3 * GeV, mipchi2_min=35.0, pidk_min=-5.0
+    pvs, pt_min=250 * MeV, p_min=3 * GeV, mipchi2_min=4.0, pidk_min=-5.0
 ):
     """Filter long kaons with P PT, MINIPCHI2CUT and PIDk cuts."""
     cut = F.require_all(
@@ -242,7 +242,7 @@ def combine_d_ks_ks_h(
     vertex_cut = F.require_all(
         in_range(m_min, F.MASS, m_max),
         F.END_VZ > dzero_vz_min,
-        F.OWNPVVDRHO() < bpfdrho_max,
+        F.OWNPVVDRHO < bpfdrho_max,
         F.PT > pt_min,
         F.P > p_min,
         F.CHI2DOF < vchi2pdof_max,
-- 
GitLab


From eda29019f508fe38c70e6f243b50205dd56d55ec Mon Sep 17 00:00:00 2001
From: Gediminas Sarpis <gediminas.sarpis@cern.ch>
Date: Wed, 26 Mar 2025 12:28:00 +0200
Subject: [PATCH 17/20] rebased to pick up new changes

---
 .../lines/charm/detection_asymmetry_lines.py   | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/detection_asymmetry_lines.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/detection_asymmetry_lines.py
index e3aae8c982d..aa1e42e1323 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/detection_asymmetry_lines.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/detection_asymmetry_lines.py
@@ -252,10 +252,18 @@ def make_prompt_dplus_to_kspi(
     cos_bpvdira_min = math.cos(acos_bpvdira_max)
     vertex_cuts = F.require_all(
         F.CHI2DOF < vchi2pdof_max,
+<<<<<<< HEAD
         F.OWNPVDIRA > cos_bpvdira_min,
         F.ETA < charm_eta_max,
         F.OWNPVFDCHI2 > fdchi2_pv_min,
         F.OWNPVIPCHI2 < max_ipchi2_best_pv,
+=======
+        F.BPVDIRA(pvs) > cos_bpvdira_min,
+        F.ETA < charm_eta_max,
+        F.BPVFDCHI2(pvs) > fdchi2_pv_min,
+        (F.CHILD(1, F.OWNPVZ) - F.OWNPVZ) ** 2 < pv_compatibility_z2,
+        F.BPVIPCHI2(pvs) < max_ipchi2_best_pv,
+>>>>>>> 1194bdd1d (Charm detection asymmetry lines tuning for 2025)
         (F.CHILD(1, F.END_VZ) - F.END_VZ) > dz1_min,
         F.OWNPVVDRHO < vertex_rho_max,
         F.OWNPVLTIME > bpvltime_min,
@@ -333,6 +341,7 @@ def make_prompt_ds_to_ksk(
     vertex_cuts = F.require_all(
         F.CHI2DOF < vchi2pdof_max,
         in_range(am_min, F.MASS, am_max),
+<<<<<<< HEAD
         F.OWNPVDIRA > cos_bpvdira_min,
         F.OWNPVFDCHI2 > fdchi2_pv_min,
         F.OWNPVLTIME > bpvltime_min,
@@ -340,6 +349,15 @@ def make_prompt_ds_to_ksk(
         F.ETA < charm_eta_max,
         (F.CHILD(1, F.OWNPVZ) - F.OWNPVZ) ** 2 < pv_compatibility_z2,
         F.OWNPVIPCHI2 < max_ipchi2_best_pv,
+=======
+        F.BPVDIRA(pvs) > cos_bpvdira_min,
+        F.BPVFDCHI2(pvs) > fdchi2_pv_min,
+        F.BPVLTIME(pvs) > bpvltime_min,
+        F.BPVVDRHO(pvs) < vertex_rho_max,
+        F.ETA < charm_eta_max,
+        (F.CHILD(1, F.OWNPVZ) - F.OWNPVZ) ** 2 < pv_compatibility_z2,
+        F.BPVIPCHI2(pvs) < max_ipchi2_best_pv,
+>>>>>>> 1194bdd1d (Charm detection asymmetry lines tuning for 2025)
         (
             (F.CHILD(1, F.END_VX) - F.END_VX) ** 2  # FD of KS
             + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
-- 
GitLab


From bbde28a5e1a2481389e2d2b04cfe3c5c7f962a73 Mon Sep 17 00:00:00 2001
From: Carlos Eduardo Cocha Toapaxi <carlos.eduardo.cocha.toapaxi@cern.ch>
Date: Wed, 26 Mar 2025 13:07:15 +0100
Subject: [PATCH 18/20] Checkout differences from target branch

---
 .../lines/charm/detection_asymmetry_lines.py   | 18 ------------------
 1 file changed, 18 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/detection_asymmetry_lines.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/detection_asymmetry_lines.py
index aa1e42e1323..e3aae8c982d 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/detection_asymmetry_lines.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/detection_asymmetry_lines.py
@@ -252,18 +252,10 @@ def make_prompt_dplus_to_kspi(
     cos_bpvdira_min = math.cos(acos_bpvdira_max)
     vertex_cuts = F.require_all(
         F.CHI2DOF < vchi2pdof_max,
-<<<<<<< HEAD
         F.OWNPVDIRA > cos_bpvdira_min,
         F.ETA < charm_eta_max,
         F.OWNPVFDCHI2 > fdchi2_pv_min,
         F.OWNPVIPCHI2 < max_ipchi2_best_pv,
-=======
-        F.BPVDIRA(pvs) > cos_bpvdira_min,
-        F.ETA < charm_eta_max,
-        F.BPVFDCHI2(pvs) > fdchi2_pv_min,
-        (F.CHILD(1, F.OWNPVZ) - F.OWNPVZ) ** 2 < pv_compatibility_z2,
-        F.BPVIPCHI2(pvs) < max_ipchi2_best_pv,
->>>>>>> 1194bdd1d (Charm detection asymmetry lines tuning for 2025)
         (F.CHILD(1, F.END_VZ) - F.END_VZ) > dz1_min,
         F.OWNPVVDRHO < vertex_rho_max,
         F.OWNPVLTIME > bpvltime_min,
@@ -341,7 +333,6 @@ def make_prompt_ds_to_ksk(
     vertex_cuts = F.require_all(
         F.CHI2DOF < vchi2pdof_max,
         in_range(am_min, F.MASS, am_max),
-<<<<<<< HEAD
         F.OWNPVDIRA > cos_bpvdira_min,
         F.OWNPVFDCHI2 > fdchi2_pv_min,
         F.OWNPVLTIME > bpvltime_min,
@@ -349,15 +340,6 @@ def make_prompt_ds_to_ksk(
         F.ETA < charm_eta_max,
         (F.CHILD(1, F.OWNPVZ) - F.OWNPVZ) ** 2 < pv_compatibility_z2,
         F.OWNPVIPCHI2 < max_ipchi2_best_pv,
-=======
-        F.BPVDIRA(pvs) > cos_bpvdira_min,
-        F.BPVFDCHI2(pvs) > fdchi2_pv_min,
-        F.BPVLTIME(pvs) > bpvltime_min,
-        F.BPVVDRHO(pvs) < vertex_rho_max,
-        F.ETA < charm_eta_max,
-        (F.CHILD(1, F.OWNPVZ) - F.OWNPVZ) ** 2 < pv_compatibility_z2,
-        F.BPVIPCHI2(pvs) < max_ipchi2_best_pv,
->>>>>>> 1194bdd1d (Charm detection asymmetry lines tuning for 2025)
         (
             (F.CHILD(1, F.END_VX) - F.END_VX) ** 2  # FD of KS
             + (F.CHILD(1, F.END_VY) - F.END_VY) ** 2
-- 
GitLab


From e4ffb92c645f5069d4f789251070367a08ee56bf Mon Sep 17 00:00:00 2001
From: Carlos Eduardo Cocha Toapaxi <carlos.eduardo.cocha.toapaxi@cern.ch>
Date: Fri, 28 Mar 2025 18:44:13 +0100
Subject: [PATCH 19/20] Enabling d_to_ksksh module

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py
index 9edd2dbf9e3..783e7023388 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py
@@ -35,6 +35,7 @@ from . import (
     d_to_hhh,
     d_to_hhhgamma,
     d_to_ksh,
+    d_to_ksksh,
     detection_asymmetry_lines,
     dsstar_to_dspipi,
     dst_to_dee,
@@ -63,7 +64,8 @@ all_lines.update(d_to_etah.all_lines)
 all_lines.update(d_to_hhh.all_lines)
 all_lines.update(d_to_hhhgamma.all_lines)
 all_lines.update(d_to_ksh.all_lines)
-all_lines.update(d0_to_hh.all_lines)
+all_lines.update(d_to_ksh.all_lines)
+all_lines.update(d_to_ksksh.all_lines)
 all_lines.update(d0_to_hhgamma.all_lines)
 all_lines.update(d0_to_hhhh.all_lines)
 all_lines.update(d0_to_hhpi0.all_lines)
-- 
GitLab


From 5522bd05ac752d2c4d909e309291340490689901 Mon Sep 17 00:00:00 2001
From: Carlos Eduardo Cocha Toapaxi <carlos.eduardo.cocha.toapaxi@cern.ch>
Date: Fri, 28 Mar 2025 18:46:21 +0100
Subject: [PATCH 20/20] Fix typo

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py
index 783e7023388..3b523a1a989 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/__init__.py
@@ -64,8 +64,8 @@ all_lines.update(d_to_etah.all_lines)
 all_lines.update(d_to_hhh.all_lines)
 all_lines.update(d_to_hhhgamma.all_lines)
 all_lines.update(d_to_ksh.all_lines)
-all_lines.update(d_to_ksh.all_lines)
 all_lines.update(d_to_ksksh.all_lines)
+all_lines.update(d0_to_hh.all_lines)
 all_lines.update(d0_to_hhgamma.all_lines)
 all_lines.update(d0_to_hhhh.all_lines)
 all_lines.update(d0_to_hhpi0.all_lines)
-- 
GitLab