From 7678d248cd6ebdfb57459c197de3bc7a02ca8d22 Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 20 Mar 2025 20:55:46 +0800
Subject: [PATCH 01/17] Add neutron channel for B->JpsiK

---
 .../lines/b_to_charmonia/b_to_jpsix.py        |  50 +++++
 .../b_to_charmonia/builders/basic_builder.py  | 173 +++++++++++++++++-
 .../lines/b_to_charmonia/hlt2_b2cc.py         |  27 +++
 3 files changed, 249 insertions(+), 1 deletion(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 42345998816..340e75627b0 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -139,6 +139,56 @@ def make_B2JpsiX(
         CompositeCut=vertex_code,
     )
 
+def make_BuToJpsiK_Neutron(
+    particles,
+    descriptor,
+    name="B2CC_BuToJpsiK_Neutron_Combiner_{hash}",
+    am_min=2100 * MeV,  # Adjust these values as needed
+    am_max=4400 * MeV,  # Adjust these values as needed
+    asumpt_min=2000 * MeV,
+    asumpt_max=22 * GeV,
+    max_vtxchi2pdof=10,
+    max_ipchi2=None,
+    AllowDiffInputsForSameIDChildren=False,
+):
+    combination_code = F.require_all(in_range(am_min, F.MASS, am_max))
+    #vertex_code = require_all(
+    #    in_range(am_min, F.MASS, am_max),
+    #    (F.CHI2DOF < max_vtxchi2pdof),
+    #)
+    #if max_ipchi2:
+    #    vertex_code = require_all(vertex_code, F.OWNPVIPCHI2 < max_ipchi2)
+    if asumpt_min is not None:
+        combination_code &= F.SUM(F.PT) > asumpt_min
+    if asumpt_max is not None:
+        combination_code &= F.SUM(F.PT) < asumpt_max
+    return ParticleCombiner(
+        particles,
+        name=name,
+        DecayDescriptor=descriptor,
+        CombinationCut=combination_code,
+        AllowDiffInputsForSameIDChildren=AllowDiffInputsForSameIDChildren,
+    )
+
+### Define function for each line
+def make_BuToJpsiK_Neutron_line(process):
+    assert process in ["hlt2", "spruce"], (
+        "Line must be defined as Hlt2 or Sprucing line!"
+    )
+
+    Jpsi = basic_builder.make_Neutron_Jpsi()
+    Kaons = basic_builder.make_BachelorKaonsforB2JpsiK(
+            pid=2, mipchi2_min=9, ghostProb_max=0.1
+    )
+    #Kaons = basic_builder.make_kaons(pt=1.0 * GeV, pid=5, p=4.0 * GeV)
+    line_alg = make_BuToJpsiK_Neutron(
+        particles=[Jpsi, Kaons], 
+        descriptor="[B+ -> J/psi(1S) K+]cc"
+    )
+
+    return [Jpsi, Kaons, line_alg]
+
+
 
 def make_Bs2Jpsif0(
     particles,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index d6e460bd49b..6753ab3a3cd 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -51,16 +51,25 @@ def make_selected_particles(
     mipchi2_min=0,
     pt_min=250 * MeV,
     p_min=0 * GeV,
+    pt_max=None,
+    p_max=None,
     pt_with_brem_min=None,
     max_eta=None,
     pid=None,
+    Geometry_cut=None,
     max_trghostprob=None,
+    mipchi2dvprimary_min=None,
+    track_chisquareperdof_max=None,
     isMuon=None,
     nPVs=None,
 ):
     code = require_all(F.PT > pt_min, F.P > p_min)
     if mipchi2_min is not None:
         code = code & (F.MINIPCHI2(make_pvs()) > mipchi2_min)
+    if pt_max is not None:
+        code &= F.PT < pt_max
+    if p_max is not None:
+        code &= F.P < p_max
     if pid is not None:
         code &= pid
     if isMuon is not None:
@@ -73,7 +82,13 @@ def make_selected_particles(
         code &= F.SIZE(make_pvs()) < nPVs
     if max_trghostprob is not None:
         code &= F.GHOSTPROB < max_trghostprob
-
+    if mipchi2dvprimary_min is not None:
+        code &= F.OWNPVIPCHI2 > mipchi2dvprimary_min
+    if track_chisquareperdof_max is not None:
+        F.CHI2DOF < track_chisquareperdof_max 
+    if Geometry_cut is not None:
+        code &= F.PX < Geometry_cut[0] * (F.PZ - Geometry_cut[1])
+        code &= F.PX > Geometry_cut[0] * (Geometry_cut[1] - F.PZ)
     return ParticleFilter(make_particles(), F.FILTER(code))
 
 
@@ -93,6 +108,36 @@ def make_pions(pid=5, pt=200 * MeV, p=1 * GeV, mipchi2_min=0, **decay_arguments)
         **decay_arguments,
     )
 
+@configurable
+def make_PionsforB2JpsiK(
+    pid=0,
+    p_min=1.5 * GeV,
+    pt_min=500 * MeV,
+    p_max= 200* GeV,
+    pt_max=10 * GeV,
+    mipchi2_min=9,
+    track_chisquareperdof_max=2,
+    ghostProb_max=None,
+    mipchi2dvprimary_min=10,
+):
+    """Return pions filtered by thresholds common to BnoC decay product selections."""
+    if pid is not None:
+        pid = F.PID_K < pid
+        pid &= F.ISMUON == 0
+    return make_selected_particles(
+        make_particles=make_has_rich_long_pions,
+        pt_min=pt_min,
+        p_min=p_min,
+        pt_max=pt_max,
+        p_max=p_max,
+        pid=pid,
+        mipchi2_min=mipchi2_min,
+        max_trghostprob=ghostProb_max,
+        mipchi2dvprimary_min=mipchi2dvprimary_min,
+        track_chisquareperdof_max=track_chisquareperdof_max,
+        
+    )
+
 
 @configurable
 def make_kaons(pid=-3, pt=200 * MeV, p=2 * GeV, **decay_arguments):
@@ -106,6 +151,68 @@ def make_kaons(pid=-3, pt=200 * MeV, p=2 * GeV, **decay_arguments):
         **decay_arguments,
     )
 
+@configurable
+def make_BachelorKaonsforB2JpsiK(
+    pid=2.0,
+    p_min=1.5 * GeV,
+    pt_min=500 * MeV,
+    p_max=200 * GeV,
+    pt_max=15 * GeV,
+    mipchi2_min=9,
+    track_chisquareperdof_max=2,
+    invert_pid=False,
+    ghostProb_max=None,
+    mipchi2dvprimary_min=10,
+    Geometry_cut=(0.294, 2000 * MeV)
+    #alpha=0.294,
+    #p0=2000 * MeV,
+):
+    """Return pions filtered by thresholds common to BnoC decay product selections."""
+    #kaons = filter_particles(
+    #    make_particles=make_has_rich_long_kaons,
+    #    p_min=p_min,
+    #    pt_min=pt_min,
+    #    mipchi2_min=mipchi2_min,
+    #)
+    #pvs = make_pvs()
+    #kanos = make_has_rich_long_kaons
+    #code = F.require_all(F.PT > pt_min, F.P > p_min, F.MINIPCHI2(pvs) > mipchi2_min)
+    #if k_pidk_min is not None:
+    #    code = F.PID_K > k_pidk_min
+    #    if invert_pid:
+    #        code = F.PID_K < k_pidk_min
+    #    kaons = ParticleFilter(kaons, F.FILTER(code))
+    #code &= F.require_all(F.OWNPVIPCHI2 > mipchi2dvprimary_min
+    #, F.CHI2DOF < track_chisquareperdof_max
+    #)
+    #if ghostProb_max is not None:
+    #    code &= F.GHOSTPROB < ghostProb_max
+    #if Geometry_cut:
+    #    code &= F.PX < Geometry[0] * (F.PZ - Geometry[1])
+    #    code &= F.PX > Geometry[0] * (Geometry[1] - F.PZ)
+    #kaons = ParticleFilter(kaons, F.FILTER(code))
+    #return kaons
+
+    if pid is not None:
+        pid = F.PID_K > pid
+        pid &= F.ISMUON == 0
+    
+    return make_selected_particles(
+        make_particles=make_has_rich_long_kaons,
+        pt_min=pt_min,
+        p_min=p_min,
+        pt_max=pt_max,
+        p_max=p_max,
+        pid=pid,
+        mipchi2_min=mipchi2_min,
+        max_trghostprob=ghostProb_max,
+        mipchi2dvprimary_min=mipchi2dvprimary_min,
+        track_chisquareperdof_max=track_chisquareperdof_max,
+        Geometry_cut=Geometry_cut    
+    )
+
+
+
 
 @configurable
 def make_muons(
@@ -170,6 +277,39 @@ def make_protons(
         **decay_arguments,
     )
 
+@configurable
+def make_ProtonsforB2JpsiK(
+    pid=0,
+    p_pid_pkdiff=-5.0,
+    p_min=1.5 * GeV,
+    pt_min=500 * MeV,
+    p_max=200 * GeV,
+    pt_max=15 * GeV,
+    mipchi2_min=9,
+    track_chisquareperdof_max=2,
+    ghostProb_max=None,
+    mipchi2dvprimary_min=10,
+):
+    """Return protons filtered by thresholds common to BnoC decay product selections."""
+    if pid is not None:
+        pid = F.PID_P > pid
+        pid &= F.ISMUON == 0
+        pid &= F.PID_P - F.PID_K > p_pid_pkdiff
+    return make_selected_particles(
+        make_particles=make_has_rich_long_protons,
+        pt_min=pt_min,
+        p_min=p_min,
+        pt_max=pt_max,
+        p_max=p_max,
+        pid=pid,
+        mipchi2_min=mipchi2_min,
+        max_trghostprob=ghostProb_max,
+        mipchi2dvprimary_min=mipchi2dvprimary_min,
+        track_chisquareperdof_max=track_chisquareperdof_max,
+        
+    )
+
+
 
 @configurable
 def make_down_pions(p_min=2.0 * GeV, pt_min=250 * MeV, mipchi2_min=4.0, pid=None):
@@ -1105,3 +1245,34 @@ def make_dedicated_lambda_DD(
         CombinationCut=combination_code,
         CompositeCut=vertex_code,
     )
+
+@configurable
+def make_Neutron_Jpsi(
+    name="B2CC_Neutron_Jpsi_{hash}",
+    make_pvs=make_pvs,
+    adoca_chi2_max=10.0,
+    p_min=600.0 * MeV,
+    pt_min=100.0 * MeV,
+    am_min=1000 * MeV,
+    am_max=2200 * MeV,
+    maxVertexChi2=25,
+):
+    pions = make_PionsforB2JpsiK(pid=0, ghostProb_max=0.1)
+    protons = make_ProtonsforB2JpsiK(pid=0, ghostProb_max=0.1)
+    descriptor = "[J/psi(1S) -> p+ pi-]cc"
+    combination_code = F.require_all(
+        in_range(am_min, F.MASS, am_max), F.SDOCACHI2(1, 2) < adoca_chi2_max
+    )
+    vertex_code = F.require_all(
+        F.P > p_min,
+        F.PT > pt_min
+    )
+    return ParticleCombiner(
+        [protons, pions],
+        name=name,
+        DecayDescriptor=descriptor,
+        CombinationCut=combination_code,
+        CompositeCut=vertex_code,
+    )
+
+
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index 5792c4b2e64..c5dd144e43e 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -212,6 +212,18 @@ def BsToJpsikstar_line(name="Hlt2B2CC_BsToJpsiKstar", prescale=1, persistreco=Fa
         pv_tracks=True,
     )
 
+@register_line_builder(all_lines)
+def BuToJpsiK_NeutronPrescaled_line(name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.01, persistreco=True):
+    line_alg = b_to_jpsix.make_BuToJpsiK_Neutron_line(process=PROCESS)
+    return Hlt2Line(
+        name=name,
+        prescale=prescale,
+        algs=b2cc_prefilters() + line_alg,
+        persistreco=persistreco,
+        calo_digits=False,
+        calo_clusters=False, 
+    )
+
 
 @register_line_builder(all_lines)
 def LbToJpsipH_line(name="Hlt2B2CC_LbToJpsipH", prescale=1, persistreco=False):
@@ -586,6 +598,21 @@ def BuToJpsiKstPlus(name="Hlt2B2CC_BuToJpsiKstPlus", prescale=1.0, persistreco=F
         pv_tracks=True,
     )
 
+@register_line_builder(all_lines)
+def BuToJpsiK_Neutron(name="Hlt2B2CC_BuToJpsiKi_Neutron", prescale=0.01, persistreco=False):
+    line_alg = b_to_jpsix0.make_BuToJpsiK_neutron_line(process=PROCESS)
+    iso_parts = isolation.make_iso_particles(line_alg, name="B")
+
+    return Hlt2Line(
+        name=name,
+        prescale=prescale,
+        algs=b2cc_prefilters() + line_alg,
+        extra_outputs=iso_parts,
+        persistreco=persistreco,
+        pv_tracks=True,
+    )
+
+
 
 @register_line_builder(all_lines)
 def BuToChicKPlus(name="Hlt2B2CC_BuToChicKPlus", prescale=1.0, persistreco=False):
-- 
GitLab


From 4283916c624992ea8ce6a4946f07673ab9a05570 Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 20 Mar 2025 21:00:01 +0800
Subject: [PATCH 02/17] remove persistreco

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

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index c5dd144e43e..faba68e1c85 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -213,7 +213,7 @@ def BsToJpsikstar_line(name="Hlt2B2CC_BsToJpsiKstar", prescale=1, persistreco=Fa
     )
 
 @register_line_builder(all_lines)
-def BuToJpsiK_NeutronPrescaled_line(name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.01, persistreco=True):
+def BuToJpsiK_NeutronPrescaled_line(name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.01, persistreco=False):
     line_alg = b_to_jpsix.make_BuToJpsiK_Neutron_line(process=PROCESS)
     return Hlt2Line(
         name=name,
-- 
GitLab


From 8b4eabd739293828b80fb76dd51f83ba9b2e6e12 Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 20 Mar 2025 21:06:59 +0800
Subject: [PATCH 03/17] remove commented content

---
 .../b_to_charmonia/builders/basic_builder.py  | 27 -------------------
 1 file changed, 27 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index 6753ab3a3cd..beeb990870c 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -164,35 +164,8 @@ def make_BachelorKaonsforB2JpsiK(
     ghostProb_max=None,
     mipchi2dvprimary_min=10,
     Geometry_cut=(0.294, 2000 * MeV)
-    #alpha=0.294,
-    #p0=2000 * MeV,
 ):
     """Return pions filtered by thresholds common to BnoC decay product selections."""
-    #kaons = filter_particles(
-    #    make_particles=make_has_rich_long_kaons,
-    #    p_min=p_min,
-    #    pt_min=pt_min,
-    #    mipchi2_min=mipchi2_min,
-    #)
-    #pvs = make_pvs()
-    #kanos = make_has_rich_long_kaons
-    #code = F.require_all(F.PT > pt_min, F.P > p_min, F.MINIPCHI2(pvs) > mipchi2_min)
-    #if k_pidk_min is not None:
-    #    code = F.PID_K > k_pidk_min
-    #    if invert_pid:
-    #        code = F.PID_K < k_pidk_min
-    #    kaons = ParticleFilter(kaons, F.FILTER(code))
-    #code &= F.require_all(F.OWNPVIPCHI2 > mipchi2dvprimary_min
-    #, F.CHI2DOF < track_chisquareperdof_max
-    #)
-    #if ghostProb_max is not None:
-    #    code &= F.GHOSTPROB < ghostProb_max
-    #if Geometry_cut:
-    #    code &= F.PX < Geometry[0] * (F.PZ - Geometry[1])
-    #    code &= F.PX > Geometry[0] * (Geometry[1] - F.PZ)
-    #kaons = ParticleFilter(kaons, F.FILTER(code))
-    #return kaons
-
     if pid is not None:
         pid = F.PID_K > pid
         pid &= F.ISMUON == 0
-- 
GitLab


From bf265ec6ed44d18d18ad24f0bc2e15980d1ad713 Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 20 Mar 2025 21:34:22 +0800
Subject: [PATCH 04/17] remove unused variables and commented content

---
 .../python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py    | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 340e75627b0..858f014884b 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -147,17 +147,9 @@ def make_BuToJpsiK_Neutron(
     am_max=4400 * MeV,  # Adjust these values as needed
     asumpt_min=2000 * MeV,
     asumpt_max=22 * GeV,
-    max_vtxchi2pdof=10,
-    max_ipchi2=None,
     AllowDiffInputsForSameIDChildren=False,
 ):
     combination_code = F.require_all(in_range(am_min, F.MASS, am_max))
-    #vertex_code = require_all(
-    #    in_range(am_min, F.MASS, am_max),
-    #    (F.CHI2DOF < max_vtxchi2pdof),
-    #)
-    #if max_ipchi2:
-    #    vertex_code = require_all(vertex_code, F.OWNPVIPCHI2 < max_ipchi2)
     if asumpt_min is not None:
         combination_code &= F.SUM(F.PT) > asumpt_min
     if asumpt_max is not None:
-- 
GitLab


From dc82d730278f214753de56d849ab61f3bc79e7aa Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 20 Mar 2025 22:10:05 +0800
Subject: [PATCH 05/17] fix format

---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 858f014884b..9a957661410 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -154,6 +154,7 @@ def make_BuToJpsiK_Neutron(
         combination_code &= F.SUM(F.PT) > asumpt_min
     if asumpt_max is not None:
         combination_code &= F.SUM(F.PT) < asumpt_max
+
     return ParticleCombiner(
         particles,
         name=name,
-- 
GitLab


From a85f173249b68a0d5fdbe743a9a7ac5e84ea7302 Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 20 Mar 2025 22:14:23 +0800
Subject: [PATCH 06/17] calo_digits=True, calo_cluster=True

---
 .../python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py         | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index faba68e1c85..37546b6d35a 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -220,8 +220,8 @@ def BuToJpsiK_NeutronPrescaled_line(name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled",
         prescale=prescale,
         algs=b2cc_prefilters() + line_alg,
         persistreco=persistreco,
-        calo_digits=False,
-        calo_clusters=False, 
+        calo_digits=True,
+        calo_clusters=True, 
     )
 
 
-- 
GitLab


From 8463ba22d0f1340116d33c5e999b3682adf64dd5 Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 20 Mar 2025 22:28:51 +0800
Subject: [PATCH 07/17] fix format

---
 .../Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py     | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index beeb990870c..87c54242c63 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -1236,10 +1236,12 @@ def make_Neutron_Jpsi(
     combination_code = F.require_all(
         in_range(am_min, F.MASS, am_max), F.SDOCACHI2(1, 2) < adoca_chi2_max
     )
+
     vertex_code = F.require_all(
         F.P > p_min,
         F.PT > pt_min
     )
+
     return ParticleCombiner(
         [protons, pions],
         name=name,
-- 
GitLab


From d814347c5b43b62e7c9137daeadb4b4edfe96791 Mon Sep 17 00:00:00 2001
From: Gitlab CI <noreply@cern.ch>
Date: Thu, 20 Mar 2025 14:29:33 +0000
Subject: [PATCH 08/17] pre-commit fixes

patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/53061356
---
 .../lines/b_to_charmonia/b_to_jpsix.py        | 10 +++----
 .../b_to_charmonia/builders/basic_builder.py  | 26 +++++++------------
 .../lines/b_to_charmonia/hlt2_b2cc.py         | 13 +++++++---
 3 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 9a957661410..7a45477a2de 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -139,6 +139,7 @@ def make_B2JpsiX(
         CompositeCut=vertex_code,
     )
 
+
 def make_BuToJpsiK_Neutron(
     particles,
     descriptor,
@@ -163,6 +164,7 @@ def make_BuToJpsiK_Neutron(
         AllowDiffInputsForSameIDChildren=AllowDiffInputsForSameIDChildren,
     )
 
+
 ### Define function for each line
 def make_BuToJpsiK_Neutron_line(process):
     assert process in ["hlt2", "spruce"], (
@@ -171,18 +173,16 @@ def make_BuToJpsiK_Neutron_line(process):
 
     Jpsi = basic_builder.make_Neutron_Jpsi()
     Kaons = basic_builder.make_BachelorKaonsforB2JpsiK(
-            pid=2, mipchi2_min=9, ghostProb_max=0.1
+        pid=2, mipchi2_min=9, ghostProb_max=0.1
     )
-    #Kaons = basic_builder.make_kaons(pt=1.0 * GeV, pid=5, p=4.0 * GeV)
+    # Kaons = basic_builder.make_kaons(pt=1.0 * GeV, pid=5, p=4.0 * GeV)
     line_alg = make_BuToJpsiK_Neutron(
-        particles=[Jpsi, Kaons], 
-        descriptor="[B+ -> J/psi(1S) K+]cc"
+        particles=[Jpsi, Kaons], descriptor="[B+ -> J/psi(1S) K+]cc"
     )
 
     return [Jpsi, Kaons, line_alg]
 
 
-
 def make_Bs2Jpsif0(
     particles,
     descriptor,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index 87c54242c63..6f70f48b80e 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -85,7 +85,7 @@ def make_selected_particles(
     if mipchi2dvprimary_min is not None:
         code &= F.OWNPVIPCHI2 > mipchi2dvprimary_min
     if track_chisquareperdof_max is not None:
-        F.CHI2DOF < track_chisquareperdof_max 
+        F.CHI2DOF < track_chisquareperdof_max
     if Geometry_cut is not None:
         code &= F.PX < Geometry_cut[0] * (F.PZ - Geometry_cut[1])
         code &= F.PX > Geometry_cut[0] * (Geometry_cut[1] - F.PZ)
@@ -108,12 +108,13 @@ def make_pions(pid=5, pt=200 * MeV, p=1 * GeV, mipchi2_min=0, **decay_arguments)
         **decay_arguments,
     )
 
+
 @configurable
 def make_PionsforB2JpsiK(
     pid=0,
     p_min=1.5 * GeV,
     pt_min=500 * MeV,
-    p_max= 200* GeV,
+    p_max=200 * GeV,
     pt_max=10 * GeV,
     mipchi2_min=9,
     track_chisquareperdof_max=2,
@@ -135,7 +136,6 @@ def make_PionsforB2JpsiK(
         max_trghostprob=ghostProb_max,
         mipchi2dvprimary_min=mipchi2dvprimary_min,
         track_chisquareperdof_max=track_chisquareperdof_max,
-        
     )
 
 
@@ -151,6 +151,7 @@ def make_kaons(pid=-3, pt=200 * MeV, p=2 * GeV, **decay_arguments):
         **decay_arguments,
     )
 
+
 @configurable
 def make_BachelorKaonsforB2JpsiK(
     pid=2.0,
@@ -163,13 +164,13 @@ def make_BachelorKaonsforB2JpsiK(
     invert_pid=False,
     ghostProb_max=None,
     mipchi2dvprimary_min=10,
-    Geometry_cut=(0.294, 2000 * MeV)
+    Geometry_cut=(0.294, 2000 * MeV),
 ):
     """Return pions filtered by thresholds common to BnoC decay product selections."""
     if pid is not None:
         pid = F.PID_K > pid
         pid &= F.ISMUON == 0
-    
+
     return make_selected_particles(
         make_particles=make_has_rich_long_kaons,
         pt_min=pt_min,
@@ -181,12 +182,10 @@ def make_BachelorKaonsforB2JpsiK(
         max_trghostprob=ghostProb_max,
         mipchi2dvprimary_min=mipchi2dvprimary_min,
         track_chisquareperdof_max=track_chisquareperdof_max,
-        Geometry_cut=Geometry_cut    
+        Geometry_cut=Geometry_cut,
     )
 
 
-
-
 @configurable
 def make_muons(
     pid=None,
@@ -250,6 +249,7 @@ def make_protons(
         **decay_arguments,
     )
 
+
 @configurable
 def make_ProtonsforB2JpsiK(
     pid=0,
@@ -279,11 +279,9 @@ def make_ProtonsforB2JpsiK(
         max_trghostprob=ghostProb_max,
         mipchi2dvprimary_min=mipchi2dvprimary_min,
         track_chisquareperdof_max=track_chisquareperdof_max,
-        
     )
 
 
-
 @configurable
 def make_down_pions(p_min=2.0 * GeV, pt_min=250 * MeV, mipchi2_min=4.0, pid=None):
     """
@@ -1219,6 +1217,7 @@ def make_dedicated_lambda_DD(
         CompositeCut=vertex_code,
     )
 
+
 @configurable
 def make_Neutron_Jpsi(
     name="B2CC_Neutron_Jpsi_{hash}",
@@ -1237,10 +1236,7 @@ def make_Neutron_Jpsi(
         in_range(am_min, F.MASS, am_max), F.SDOCACHI2(1, 2) < adoca_chi2_max
     )
 
-    vertex_code = F.require_all(
-        F.P > p_min,
-        F.PT > pt_min
-    )
+    vertex_code = F.require_all(F.P > p_min, F.PT > pt_min)
 
     return ParticleCombiner(
         [protons, pions],
@@ -1249,5 +1245,3 @@ def make_Neutron_Jpsi(
         CombinationCut=combination_code,
         CompositeCut=vertex_code,
     )
-
-
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index 37546b6d35a..154b8a02630 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -212,8 +212,11 @@ def BsToJpsikstar_line(name="Hlt2B2CC_BsToJpsiKstar", prescale=1, persistreco=Fa
         pv_tracks=True,
     )
 
+
 @register_line_builder(all_lines)
-def BuToJpsiK_NeutronPrescaled_line(name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.01, persistreco=False):
+def BuToJpsiK_NeutronPrescaled_line(
+    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.01, persistreco=False
+):
     line_alg = b_to_jpsix.make_BuToJpsiK_Neutron_line(process=PROCESS)
     return Hlt2Line(
         name=name,
@@ -221,7 +224,7 @@ def BuToJpsiK_NeutronPrescaled_line(name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled",
         algs=b2cc_prefilters() + line_alg,
         persistreco=persistreco,
         calo_digits=True,
-        calo_clusters=True, 
+        calo_clusters=True,
     )
 
 
@@ -598,8 +601,11 @@ def BuToJpsiKstPlus(name="Hlt2B2CC_BuToJpsiKstPlus", prescale=1.0, persistreco=F
         pv_tracks=True,
     )
 
+
 @register_line_builder(all_lines)
-def BuToJpsiK_Neutron(name="Hlt2B2CC_BuToJpsiKi_Neutron", prescale=0.01, persistreco=False):
+def BuToJpsiK_Neutron(
+    name="Hlt2B2CC_BuToJpsiKi_Neutron", prescale=0.01, persistreco=False
+):
     line_alg = b_to_jpsix0.make_BuToJpsiK_neutron_line(process=PROCESS)
     iso_parts = isolation.make_iso_particles(line_alg, name="B")
 
@@ -613,7 +619,6 @@ def BuToJpsiK_Neutron(name="Hlt2B2CC_BuToJpsiKi_Neutron", prescale=0.01, persist
     )
 
 
-
 @register_line_builder(all_lines)
 def BuToChicKPlus(name="Hlt2B2CC_BuToChicKPlus", prescale=1.0, persistreco=False):
     line_alg = b_to_jpsix0.make_B2Chic2JpsiGK_line(process=PROCESS)
-- 
GitLab


From b7bc14b347ee1067ffbc9e217152b1379de1ba99 Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Mon, 24 Mar 2025 14:19:13 +0800
Subject: [PATCH 09/17] prescale to 0.002

---
 .../lines/b_to_charmonia/hlt2_b2cc.py         | 19 +------------------
 1 file changed, 1 insertion(+), 18 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index 154b8a02630..b5119ebe36f 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -215,7 +215,7 @@ def BsToJpsikstar_line(name="Hlt2B2CC_BsToJpsiKstar", prescale=1, persistreco=Fa
 
 @register_line_builder(all_lines)
 def BuToJpsiK_NeutronPrescaled_line(
-    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.01, persistreco=False
+    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.002, persistreco=False
 ):
     line_alg = b_to_jpsix.make_BuToJpsiK_Neutron_line(process=PROCESS)
     return Hlt2Line(
@@ -602,23 +602,6 @@ def BuToJpsiKstPlus(name="Hlt2B2CC_BuToJpsiKstPlus", prescale=1.0, persistreco=F
     )
 
 
-@register_line_builder(all_lines)
-def BuToJpsiK_Neutron(
-    name="Hlt2B2CC_BuToJpsiKi_Neutron", prescale=0.01, persistreco=False
-):
-    line_alg = b_to_jpsix0.make_BuToJpsiK_neutron_line(process=PROCESS)
-    iso_parts = isolation.make_iso_particles(line_alg, name="B")
-
-    return Hlt2Line(
-        name=name,
-        prescale=prescale,
-        algs=b2cc_prefilters() + line_alg,
-        extra_outputs=iso_parts,
-        persistreco=persistreco,
-        pv_tracks=True,
-    )
-
-
 @register_line_builder(all_lines)
 def BuToChicKPlus(name="Hlt2B2CC_BuToChicKPlus", prescale=1.0, persistreco=False):
     line_alg = b_to_jpsix0.make_B2Chic2JpsiGK_line(process=PROCESS)
-- 
GitLab


From fe8d1111d4bb123f7f7ff95208088351dfc0778c Mon Sep 17 00:00:00 2001
From: Youhua Yang <youhua.yang@cern.ch>
Date: Wed, 26 Mar 2025 15:51:14 +0000
Subject: [PATCH 10/17] Lb->nJ/psi Ks reduction more bw

---
 .../lines/b_to_charmonia/b_to_jpsix.py        | 37 ++++++++++++++-----
 .../b_to_charmonia/builders/basic_builder.py  | 11 +++++-
 .../lines/b_to_charmonia/hlt2_b2cc.py         |  8 ++--
 .../lines/b_to_charmonia/prefilters.py        | 19 ++++++++--
 4 files changed, 57 insertions(+), 18 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 1f2c5fd2d85..7177549b8cf 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -19,6 +19,7 @@ from Functors.math import in_range
 from GaudiKernel.SystemOfUnits import GeV, MeV, picosecond
 from PyConf.Tools import ParticleVertexFitter
 from RecoConf.algorithms_thor import ParticleCombiner, ParticleContainersMerger
+from RecoConf.reconstruction_objects import make_pvs
 from RecoConf.standard_particles import make_long_muons
 
 from Hlt2Conf.lines.b_to_charmonia.builders import basic_builder, special_builder
@@ -212,11 +213,11 @@ def make_LbToJpsiKs_Neutron_tight(
     particles,
     descriptor,
     name="B2CC_LbToJpsiKshort_Neutron_Combiner_{hash}",
+    pvs=make_pvs,
     comb_m_min=6050 * MeV,
     comb_m_max=6555 * MeV,
 ):
     combination_code = in_range(comb_m_min, F.MASS, comb_m_max)
-
     return ParticleCombiner(
         name=name,
         Inputs=particles,
@@ -607,7 +608,7 @@ def make_LbToJpsipH_line(
 
 def make_LbToJpsiKs_LL_Neutron_tight_line(
     process,
-    comb_m_min_jpsi=2916 * MeV,
+    comb_m_min_jpsi=3016 * MeV,
     comb_m_max_jpsi=3276 * MeV,
     comb_m_min=3550 * MeV,
     comb_m_max=4750 * MeV,
@@ -615,18 +616,23 @@ def make_LbToJpsiKs_LL_Neutron_tight_line(
     assert process in ["hlt2", "spruce"], (
         "Line must be defined as Hlt2 or Sprucing line!"
     )
+    pvs = make_pvs()
     muons = basic_builder.filter_muons_loose(
         particles=make_long_muons(), mu_pidk=10, mu_pidp=10
     )
+    # jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
+    #    muons=muons, max_vchi2pdof=4
+    # )
     jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
-        muons=muons, max_vchi2pdof=4
+        muons=muons, max_vchi2pdof=4, max_docachi2=9
     )
     kshort_LL = basic_builder.make_ks_LL(bpvvdchi2=4, chi2vx=4, pi_mipchi2pv=4)
 
     Lb2jpsiKs = make_LbToJpsiKs_Neutron_tight(
-        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
         particles=[jpsi, kshort_LL],
         descriptor="[Lambda_b0 -> J/psi(1S) KS0 ]cc",
+        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
+        pvs=pvs,
         comb_m_min=comb_m_min,
         comb_m_max=comb_m_max,
     )
@@ -636,7 +642,7 @@ def make_LbToJpsiKs_LL_Neutron_tight_line(
 
 def make_LbToJpsiKs_DD_Neutron_tight_line(
     process,
-    comb_m_min_jpsi=2916 * MeV,
+    comb_m_min_jpsi=3016 * MeV,
     comb_m_max_jpsi=3276 * MeV,
     comb_m_min=3550 * MeV,
     comb_m_max=4750 * MeV,
@@ -644,18 +650,24 @@ def make_LbToJpsiKs_DD_Neutron_tight_line(
     assert process in ["hlt2", "spruce"], (
         "Line must be defined as Hlt2 or Sprucing line!"
     )
+    pvs = make_pvs()
     muons = basic_builder.filter_muons_loose(
         particles=make_long_muons(), mu_pidk=10, mu_pidp=10
     )
     jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
-        muons=muons, max_vchi2pdof=4
+        muons=muons, max_vchi2pdof=4, max_docachi2=9
     )
+    # jpsi = basic_builder.make_selected_jpsi2mumu(
+    #    max_vchi2pdof=9,
+    #    max_docachi2=9,
+    # )
     kshort_DD = basic_builder.make_ks_DD(bpvvdchi2=4, chi2vx=4)
 
     Lb2jpsiKs = make_LbToJpsiKs_Neutron_tight(
-        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
         particles=[jpsi, kshort_DD],
         descriptor="[Lambda_b0 -> J/psi(1S) KS0 ]cc",
+        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
+        pvs=pvs,
         comb_m_min=comb_m_min,
         comb_m_max=comb_m_max,
     )
@@ -665,7 +677,7 @@ def make_LbToJpsiKs_DD_Neutron_tight_line(
 
 def make_LbToJpsiKs_LD_Neutron_tight_line(
     process,
-    comb_m_min_jpsi=2916 * MeV,
+    comb_m_min_jpsi=3016 * MeV,
     comb_m_max_jpsi=3276 * MeV,
     comb_m_min=3550 * MeV,
     comb_m_max=4750 * MeV,
@@ -673,18 +685,23 @@ def make_LbToJpsiKs_LD_Neutron_tight_line(
     assert process in ["hlt2", "spruce"], (
         "Line must be defined as Hlt2 or Sprucing line!"
     )
+    pvs = make_pvs()
     muons = basic_builder.filter_muons_loose(
         particles=make_long_muons(), mu_pidk=10, mu_pidp=10
     )
     jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
-        muons=muons, max_vchi2pdof=4
+        muons=muons, max_vchi2pdof=4, max_docachi2=9
     )
+    # jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
+    #    muons=muons, max_vchi2pdof=4
+    # )
     kshort_LD = basic_builder.make_ks_LD(bpvvdchi2=4, chi2vx=4, pi_mipchi2pv=4)
 
     Lb2jpsiKs = make_LbToJpsiKs_Neutron_tight(
-        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
         particles=[jpsi, kshort_LD],
         descriptor="[Lambda_b0 -> J/psi(1S) KS0 ]cc",
+        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
+        pvs=pvs,
         comb_m_min=comb_m_min,
         comb_m_max=comb_m_max,
     )
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index 82c72724532..b75ac95e3f9 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -486,7 +486,12 @@ def make_selected_jpsi2mumu(
 
 @configurable
 def make_selected_jpsi_bd2jpsimumukshort(
-    muons, admass=100 * MeV, admass_vtx=100 * MeV, max_vchi2pdof=20, psi2S=False
+    muons,
+    admass=100 * MeV,
+    admass_vtx=100 * MeV,
+    max_vchi2pdof=20,
+    psi2S=False,
+    max_docachi2=None,
 ):
     """
     Filter jpsi candiates for B2CC.  Default cuts refered to Bd2JpsimumuKshort.
@@ -503,6 +508,10 @@ def make_selected_jpsi_bd2jpsimumukshort(
     combination_code = require_all(
         in_range(reference_mass - admass, F.MASS, reference_mass + admass)
     )
+    if max_docachi2 is not None:
+        combination_code = require_all(
+            combination_code, F.MAXSDOCACHI2CUT(float(max_docachi2))
+        )
     vertex_code = require_all(
         in_range(reference_mass - admass_vtx, F.MASS, reference_mass + admass_vtx),
         F.CHI2DOF < max_vchi2pdof,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index 96166a2ae06..784aca4ff73 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -237,7 +237,7 @@ def LbToJpsiKs_Neutron_LL_tight_line(
     return Hlt2Line(
         name=name,
         prescale=prescale,
-        algs=b2cc_prefilters() + line_alg,
+        algs=b2cc_prefilters(require_GEC=True, require_topo=True) + line_alg,
         persistreco=persistreco,
         calo_digits=True,
         calo_clusters=True,
@@ -253,10 +253,11 @@ def LbToJpsiKs_Neutron_DD_tight_line(
     return Hlt2Line(
         name=name,
         prescale=prescale,
-        algs=b2cc_prefilters() + line_alg,
+        algs=b2cc_prefilters(require_GEC=True, require_topo=True) + line_alg,
         persistreco=persistreco,
         calo_digits=True,
         calo_clusters=True,
+        raw_banks=["Calo"],
     )
 
 
@@ -268,10 +269,11 @@ def LbToJpsiKs_Neutron_LD_tight_line(
     return Hlt2Line(
         name=name,
         prescale=prescale,
-        algs=b2cc_prefilters() + line_alg,
+        algs=b2cc_prefilters(require_GEC=True, require_topo=True) + line_alg,
         persistreco=persistreco,
         calo_digits=True,
         calo_clusters=True,
+        raw_banks=["Calo"],
     )
 
 
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
index 2702c3d7891..12ccbc6679a 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
@@ -15,11 +15,22 @@
 from RecoConf.event_filters import require_gec, require_pvs
 from RecoConf.reconstruction_objects import make_pvs, upfront_reconstruction
 
+from Hlt2Conf.lines.topological_b import require_topo_candidate
+
 
 # make sure we have a PV
 # at the momement GEC not mandatory
-def b2cc_prefilters(require_GEC=False):
+def b2cc_prefilters(
+    require_GEC=False, require_topo=False, min_twobody_mva=0.1, min_threebody_mva=0.1
+):
+    filters = list(upfront_reconstruction())  # create a copy
     if require_GEC:
-        return upfront_reconstruction() + [require_gec(), require_pvs(make_pvs())]
-    else:
-        return upfront_reconstruction() + [require_pvs(make_pvs())]
+        filters.append(require_gec())
+    filters.append(require_pvs(make_pvs()))
+    if require_topo:
+        filters.append(
+            require_topo_candidate(
+                min_twobody_mva=min_twobody_mva, min_threebody_mva=min_threebody_mva
+            )
+        )
+    return filters
-- 
GitLab


From 8b5f8fd180f1fd33c2f641fa5ef0ba98cc57913b Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 27 Mar 2025 00:45:57 +0800
Subject: [PATCH 11/17] further reduce bw

---
 .../lines/b_to_charmonia/b_to_jpsix.py        | 109 +++++++++++++++++-
 .../b_to_charmonia/builders/basic_builder.py  |  93 ++++++++++++---
 .../lines/b_to_charmonia/hlt2_b2cc.py         |   5 +-
 .../lines/b_to_charmonia/prefilters.py        |  18 ++-
 .../lines/bandq/builders/dimuon_lines.py      |   1 +
 5 files changed, 199 insertions(+), 27 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 7a45477a2de..8c6b7863e91 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -16,7 +16,8 @@ Definition of B -> J/psi X HLT2/Sprucing lines for B2CC.
 import Functors as F
 from Functors import require_all
 from Functors.math import in_range
-from GaudiKernel.SystemOfUnits import GeV, MeV, picosecond
+from RecoConf.reconstruction_objects import make_pvs
+from GaudiKernel.SystemOfUnits import GeV, MeV, mm, picosecond
 from RecoConf.algorithms_thor import ParticleCombiner, ParticleContainersMerger
 from RecoConf.standard_particles import make_long_muons
 
@@ -139,28 +140,34 @@ def make_B2JpsiX(
         CompositeCut=vertex_code,
     )
 
-
 def make_BuToJpsiK_Neutron(
     particles,
     descriptor,
     name="B2CC_BuToJpsiK_Neutron_Combiner_{hash}",
     am_min=2100 * MeV,  # Adjust these values as needed
-    am_max=4400 * MeV,  # Adjust these values as needed
+    am_max=5500 * MeV,  # Adjust these values as needed
     asumpt_min=2000 * MeV,
     asumpt_max=22 * GeV,
+    bpvfdchi2_min=450,
+    vchi2pdof_max=25,
     AllowDiffInputsForSameIDChildren=False,
 ):
+    pvs= make_pvs()
     combination_code = F.require_all(in_range(am_min, F.MASS, am_max))
     if asumpt_min is not None:
         combination_code &= F.SUM(F.PT) > asumpt_min
     if asumpt_max is not None:
         combination_code &= F.SUM(F.PT) < asumpt_max
-
+    composite_code = F.require_all(
+        F.CHI2 < vchi2pdof_max,
+        F.BPVFDCHI2(pvs) > bpvfdchi2_min,
+    )
     return ParticleCombiner(
         particles,
         name=name,
         DecayDescriptor=descriptor,
         CombinationCut=combination_code,
+        CompositeCut=composite_code,
         AllowDiffInputsForSameIDChildren=AllowDiffInputsForSameIDChildren,
     )
 
@@ -173,7 +180,7 @@ def make_BuToJpsiK_Neutron_line(process):
 
     Jpsi = basic_builder.make_Neutron_Jpsi()
     Kaons = basic_builder.make_BachelorKaonsforB2JpsiK(
-        pid=2, mipchi2_min=9, ghostProb_max=0.1
+        pid=5, mipchi2_min=16, ghostProb_max=0.05
     )
     # Kaons = basic_builder.make_kaons(pt=1.0 * GeV, pid=5, p=4.0 * GeV)
     line_alg = make_BuToJpsiK_Neutron(
@@ -183,6 +190,98 @@ def make_BuToJpsiK_Neutron_line(process):
     return [Jpsi, Kaons, line_alg]
 
 
+
+
+#def make_BuToJpsiK_Neutron(
+#    particles,
+#    descriptor,
+#    name="B2CC_BuToJpsiK_Neutron_Combiner_{hash}",
+#    am_min=2350 * MeV,  # Adjust these values as needed
+#    am_max=4400 * MeV,  # Adjust these values as needed
+#    am12_min=1150 * MeV,
+#    am12_max=2200 * MeV,
+#    asumpt_min=2000 * MeV,
+#    asumpt_max=22 * GeV,
+#    adoca_chi2_max=5.0,
+#    adoca_max= 0.2 * mm,
+#    dira=-10.0,
+#    max_ipchi2=25,
+#    max_vtxchi2pdof=25,
+#    AllowDiffInputsForSameIDChildren=False,
+#):
+#    
+#    combination12_code = F.require_all(
+#            in_range(am12_min, F.MASS, am12_max),
+#            (F.MASSWITHHYPOTHESES(("K+", "pi-")) < 1750 * MeV) |
+#            (F.MASSWITHHYPOTHESES(("K+", "pi-")) > 1950 * MeV),
+#            (F.MASSWITHHYPOTHESES(("pi+", "pi-")) < 1750 * MeV) |
+#            (F.MASSWITHHYPOTHESES(("pi+", "pi-")) > 1950 * MeV),
+#            (F.MASSWITHHYPOTHESES(("p+", "p~-")) < 2950 * MeV) |
+#            (F.MASSWITHHYPOTHESES(("p+", "p~-")) > 3150 * MeV),
+#            ) 
+#    combination_code = F.require_all(in_range(am_min, F.MASS, am_max))
+#    composite_code = F.require_all(
+#            F.SDOCACHI2(1, 2) < adoca_chi2_max,
+#            F.SDOCA(1, 2) < adoca_max,
+#            (F.SUBCOMB(Functor=F.MASS, Indices=[2, 3]) < 1750 * MeV ) |
+#            (F.SUBCOMB(Functor=F.MASS, Indices=[2, 3]) > 1950 * MeV),
+#            (F.MASSWITHHYPOTHESES(("p+", "pi-", "pi+")) < 2200 * MeV) |
+#            (F.MASSWITHHYPOTHESES(("p+", "pi-", "pi+")) > 2340 * MeV),
+#            (F.MASSWITHHYPOTHESES(("p+", "K-", "pi+")) < 2200 * MeV) |
+#            (F.MASSWITHHYPOTHESES(("p+", "K-", "pi+")) > 2340 * MeV),
+#            in_range(0., F.ALV(1,2), 1),
+#            in_range(0., F.ALV(1,3), 1),
+#            in_range(0., F.ALV(2,3), 1),
+#            (F.OWNPVDIRA > dira),
+#            (F.CHI2DOF < max_vtxchi2pdof),
+#
+#    )
+#    if max_ipchi2:
+#        composite_code = require_all(composite_code, F.OWNPVIPCHI2 < max_ipchi2)
+#    
+#    if asumpt_min is not None:
+#        combination_code &= F.SUM(F.PT) > asumpt_min
+#    if asumpt_max is not None:
+#        combination_code &= F.SUM(F.PT) < asumpt_max
+#
+#    return ParticleCombiner(
+#        particles,
+#        name=name,
+#        DecayDescriptor=descriptor,
+#        Combination12Cut=combination12_code,
+#        CombinationCut=combination_code,
+#        CompositeCut=composite_code,
+#        AllowDiffInputsForSameIDChildren=AllowDiffInputsForSameIDChildren,
+#    )
+#
+#
+#### Define function for each line
+#def make_BuToJpsiK_Neutron_line(process):
+#    assert process in ["hlt2", "spruce"], (
+#        "Line must be defined as Hlt2 or Sprucing line!"
+#    )
+#
+#    #Jpsi = basic_builder.make_Neutron_Jpsi()
+#    Protons = basic_builder.make_ProtonsforB2JpsiK(
+#        pid=5, mipchi2_min=16, ghostProb_max=0.05
+#    )
+#    Pions = basic_builder.make_PionsforB2JpsiK(
+#        pid=-5, mipchi2_min=16, ghostProb_max=0.05
+#    )
+#    Kaons = basic_builder.make_BachelorKaonsforB2JpsiK(
+#        pid=5, mipchi2_min=16, ghostProb_max=0.05
+#    )
+#    
+#    #persistable_photons = basic_builder.make_photons_to_preserve(Kaons)
+#    #print("persistable_photons.OutputLocation ", persistable_photons.OutputLocation)
+#    # Kaons = basic_builder.make_kaons(pt=1.0 * GeV, pid=5, p=4.0 * GeV)
+#    line_alg = make_BuToJpsiK_Neutron(
+#        particles=[Protons, Pions, Kaons], descriptor="[B+ -> p+ pi- K+]cc"
+#    )
+#
+#    return [Protons, Pions, Kaons, line_alg]
+
+
 def make_Bs2Jpsif0(
     particles,
     descriptor,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index 6f70f48b80e..aaad1a035ad 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -20,6 +20,7 @@ from RecoConf.algorithms_thor import (
     ParticleContainersMerger,
     ParticleFilter,
 )
+from PyConf.Algorithms import SelectionFromRelationTable, WeightedRelTableAlg
 from RecoConf.reconstruction_objects import make_pvs
 from RecoConf.standard_particles import (
     _make_dielectron_with_brem,
@@ -37,6 +38,7 @@ from RecoConf.standard_particles import (
     make_long_electrons_no_brem,
     make_long_pions_for_V0,
     make_up_pions_for_V0,
+    make_photons,
 )
 
 ####################################
@@ -119,7 +121,7 @@ def make_PionsforB2JpsiK(
     mipchi2_min=9,
     track_chisquareperdof_max=2,
     ghostProb_max=None,
-    mipchi2dvprimary_min=10,
+    mipchi2dvprimary_min=16,
 ):
     """Return pions filtered by thresholds common to BnoC decay product selections."""
     if pid is not None:
@@ -155,22 +157,32 @@ def make_kaons(pid=-3, pt=200 * MeV, p=2 * GeV, **decay_arguments):
 @configurable
 def make_BachelorKaonsforB2JpsiK(
     pid=2.0,
-    p_min=1.5 * GeV,
-    pt_min=500 * MeV,
+    p_min=2. * GeV,
+    pt_min=800 * MeV,
     p_max=200 * GeV,
     pt_max=15 * GeV,
     mipchi2_min=9,
     track_chisquareperdof_max=2,
     invert_pid=False,
     ghostProb_max=None,
-    mipchi2dvprimary_min=10,
+    mipchi2dvprimary_min=16,
     Geometry_cut=(0.294, 2000 * MeV),
 ):
     """Return pions filtered by thresholds common to BnoC decay product selections."""
     if pid is not None:
         pid = F.PID_K > pid
         pid &= F.ISMUON == 0
-
+    print("PID_K  ",  F.PID_K())
+    print("CALOCELLID_ALL  ",  F.CALOCELLID_ALL())
+    print("CALOCELLID_COLUMN  ",  F.CALOCELLID_COLUMN())
+    print("CALOCELLID_ROW  ",  F.CALOCELLID_ROW())
+    print("CALO_NEUTRAL_1TO9_ENERGY_RATIO  ",  F.CALO_NEUTRAL_1TO9_ENERGY_RATIO())
+    print("CALO_CLUSTER_MASS  ",  F.CALO_CLUSTER_MASS())
+    print("CALO_NEUTRAL_ECAL_ENERGY  ",  F.CALO_NEUTRAL_ECAL_ENERGY())
+    print("CALO_NEUTRAL_HCAL2ECAL_ENERGY_RATIO  ",  F.CALO_NEUTRAL_HCAL2ECAL_ENERGY_RATIO())
+    print("CALO_NEUTRAL_SHOWER_SHAPE  ",  F.CALO_NEUTRAL_SHOWER_SHAPE())
+    print("CALO_NEUTRAL_ID  ",  F.CALO_NEUTRAL_ID())
+    print("CALO_NUM_SATURATED_CELLS  ",  F.CALO_NUM_SATURATED_CELLS())
     return make_selected_particles(
         make_particles=make_has_rich_long_kaons,
         pt_min=pt_min,
@@ -185,6 +197,31 @@ def make_BachelorKaonsforB2JpsiK(
         Geometry_cut=Geometry_cut,
     )
 
+@configurable
+def make_photons_to_preserve(tracks):
+    """Return photon maker filtered to preserve photons near the dielectron candidates."""
+    photons = ParticleFilter(
+        make_photons(),
+        F.FILTER(
+            F.require_all(
+                F.PT > 100 * MeV,
+                F.P > 0 * MeV,
+                F.IS_PHOTON > 0.0,
+                F.IS_NOT_H > 0.2,
+                F.CALO_NEUTRAL_SHOWER_SHAPE > 0,
+            ),
+        ),
+    )
+
+    photons_table = WeightedRelTableAlg(
+        InputCandidates=photons,
+        ReferenceParticles=tracks,
+        Cut=in_range(0.0 * MeV, F.COMB_MASS(), 600.0 * MeV),
+    )
+
+    return SelectionFromRelationTable(InputRelations=photons_table.OutputRelations)
+
+
 
 @configurable
 def make_muons(
@@ -261,7 +298,7 @@ def make_ProtonsforB2JpsiK(
     mipchi2_min=9,
     track_chisquareperdof_max=2,
     ghostProb_max=None,
-    mipchi2dvprimary_min=10,
+    mipchi2dvprimary_min=16,
 ):
     """Return protons filtered by thresholds common to BnoC decay product selections."""
     if pid is not None:
@@ -1132,6 +1169,7 @@ def make_dedicated_lambda_LL(
     bpvltime_min=1.0 * ps,
     vchi2pdof_max=15.0,
     endvz_min=0 * mm,
+    endvz_max=200 * mm,
 ):
     protons = make_protons(
         p_min=p_p_min,
@@ -1150,7 +1188,7 @@ def make_dedicated_lambda_LL(
         in_range(mass_window_min, F.MASS, mass_window_max),
         F.PT > lambda_pt_min,
         F.CHI2DOF < vchi2pdof_max,
-        F.END_VZ > endvz_min,
+        F.math.in_range(endvz_min, F.END_VZ, endvz_max),
         F.OWNPVLTIME > bpvltime_min,
         F.OWNPVFDCHI2 > bpvfdchi2_min,
         F.OWNPVVDZ > bpvvdz_min,
@@ -1222,21 +1260,44 @@ def make_dedicated_lambda_DD(
 def make_Neutron_Jpsi(
     name="B2CC_Neutron_Jpsi_{hash}",
     make_pvs=make_pvs,
-    adoca_chi2_max=10.0,
-    p_min=600.0 * MeV,
-    pt_min=100.0 * MeV,
-    am_min=1000 * MeV,
+    adoca_chi2_max=5.0,
+    adoca_max= 0.2 * mm,
+    p_min=1000.0 * MeV,
+    pt_min=500.0 * MeV,
+    am_min=1150 * MeV,
     am_max=2200 * MeV,
-    maxVertexChi2=25,
+    minRho=3,
+    minVDz=0.0,
+    maxVDz=200.0,
+    ownpvdira_min=0.0,
+    maxVz=650 * mm,
+    max_vtxchi2pdof=9,
 ):
-    pions = make_PionsforB2JpsiK(pid=0, ghostProb_max=0.1)
-    protons = make_ProtonsforB2JpsiK(pid=0, ghostProb_max=0.1)
+    pions = make_PionsforB2JpsiK(pid=-5, mipchi2_min=16, ghostProb_max=0.05)
+    protons = make_ProtonsforB2JpsiK(pid=5, mipchi2_min=16, ghostProb_max=0.05)
     descriptor = "[J/psi(1S) -> p+ pi-]cc"
     combination_code = F.require_all(
-        in_range(am_min, F.MASS, am_max), F.SDOCACHI2(1, 2) < adoca_chi2_max
+        in_range(am_min, F.MASS, am_max), 
+        F.SDOCACHI2(1, 2) < adoca_chi2_max,
+        F.SDOCA(1, 2) < adoca_max,
+        in_range(0.2, F.ALV(1,2), 1.),
+        (F.MASSWITHHYPOTHESES(("K+", "pi-")) < 1750 * MeV) |
+        (F.MASSWITHHYPOTHESES(("K+", "pi-")) > 1950 * MeV),
+        (F.MASSWITHHYPOTHESES(("pi+", "pi-")) < 1750 * MeV) |
+        (F.MASSWITHHYPOTHESES(("pi+", "pi-")) > 1950 * MeV),
+        (F.MASSWITHHYPOTHESES(("p+", "p~-")) < 2950 * MeV) |
+        (F.MASSWITHHYPOTHESES(("p+", "p~-")) > 3150 * MeV),
     )
 
-    vertex_code = F.require_all(F.P > p_min, F.PT > pt_min)
+    vertex_code = F.require_all(
+                F.P > p_min, 
+                F.PT > pt_min,
+                F.CHI2 < max_vtxchi2pdof,
+                F.math.in_range(minVDz, F.OWNPVVDZ, maxVDz),
+                F.OWNPVDIRA > ownpvdira_min,
+                F.END_VZ < maxVz,
+                F.END_VRHO < minRho,
+        )
 
     return ParticleCombiner(
         [protons, pions],
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index b5119ebe36f..0df9f44f017 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -215,16 +215,17 @@ def BsToJpsikstar_line(name="Hlt2B2CC_BsToJpsiKstar", prescale=1, persistreco=Fa
 
 @register_line_builder(all_lines)
 def BuToJpsiK_NeutronPrescaled_line(
-    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.002, persistreco=False
+    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.4, persistreco=False
 ):
     line_alg = b_to_jpsix.make_BuToJpsiK_Neutron_line(process=PROCESS)
     return Hlt2Line(
         name=name,
         prescale=prescale,
-        algs=b2cc_prefilters() + line_alg,
+        algs=b2cc_prefilters(require_GEC=True, require_topo=True, min_twobody_mva=0.9, min_threebody_mva=0.9) + line_alg,
         persistreco=persistreco,
         calo_digits=True,
         calo_clusters=True,
+        raw_banks=["Calo"],
     )
 
 
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
index 2702c3d7891..1225f2bb0da 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
@@ -14,12 +14,22 @@
 
 from RecoConf.event_filters import require_gec, require_pvs
 from RecoConf.reconstruction_objects import make_pvs, upfront_reconstruction
+from Hlt2Conf.lines.topological_b import require_topo_candidate
 
 
 # make sure we have a PV
 # at the momement GEC not mandatory
-def b2cc_prefilters(require_GEC=False):
+def b2cc_prefilters(
+    require_GEC=False, require_topo=False, min_twobody_mva=0.1, min_threebody_mva=0.1
+):
+    filters = list(upfront_reconstruction())  # create a copy
     if require_GEC:
-        return upfront_reconstruction() + [require_gec(), require_pvs(make_pvs())]
-    else:
-        return upfront_reconstruction() + [require_pvs(make_pvs())]
+        filters.append(require_gec())
+    filters.append(require_pvs(make_pvs()))
+    if require_topo:
+        filters.append(
+            require_topo_candidate(
+                min_twobody_mva=min_twobody_mva, min_threebody_mva=min_threebody_mva
+            )
+        )
+    return filters
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/bandq/builders/dimuon_lines.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/bandq/builders/dimuon_lines.py
index bfb05f4c7c1..b018fe82a71 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/bandq/builders/dimuon_lines.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/bandq/builders/dimuon_lines.py
@@ -273,3 +273,4 @@ def make_loose_samesign_dimuon(
         minMass_dimuon=minMass_dimuon,
         minPt_muon=minPt_muon,
     )
+
-- 
GitLab


From 78aa454bdc1b0450ff6c37c61271756a56838eee Mon Sep 17 00:00:00 2001
From: Yiming Liu <yiming.liu@cern.ch>
Date: Wed, 26 Mar 2025 17:47:56 +0100
Subject: [PATCH 12/17] Revert "Merge branch 'optimize_LbTonJpsiKs_b2cc' into
 'b2cc_202501'"

This reverts commit 37d9ad2857fce05d5868e0308edf8ae2a24f5c3b, reversing
changes made to 6472e33139b4af1e78821cf17669a02d92271958.
---
 .../lines/b_to_charmonia/b_to_jpsix.py        | 37 +++++--------------
 .../b_to_charmonia/builders/basic_builder.py  | 11 +-----
 .../lines/b_to_charmonia/hlt2_b2cc.py         |  8 ++--
 .../lines/b_to_charmonia/prefilters.py        | 19 ++--------
 4 files changed, 18 insertions(+), 57 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 7177549b8cf..1f2c5fd2d85 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -19,7 +19,6 @@ from Functors.math import in_range
 from GaudiKernel.SystemOfUnits import GeV, MeV, picosecond
 from PyConf.Tools import ParticleVertexFitter
 from RecoConf.algorithms_thor import ParticleCombiner, ParticleContainersMerger
-from RecoConf.reconstruction_objects import make_pvs
 from RecoConf.standard_particles import make_long_muons
 
 from Hlt2Conf.lines.b_to_charmonia.builders import basic_builder, special_builder
@@ -213,11 +212,11 @@ def make_LbToJpsiKs_Neutron_tight(
     particles,
     descriptor,
     name="B2CC_LbToJpsiKshort_Neutron_Combiner_{hash}",
-    pvs=make_pvs,
     comb_m_min=6050 * MeV,
     comb_m_max=6555 * MeV,
 ):
     combination_code = in_range(comb_m_min, F.MASS, comb_m_max)
+
     return ParticleCombiner(
         name=name,
         Inputs=particles,
@@ -608,7 +607,7 @@ def make_LbToJpsipH_line(
 
 def make_LbToJpsiKs_LL_Neutron_tight_line(
     process,
-    comb_m_min_jpsi=3016 * MeV,
+    comb_m_min_jpsi=2916 * MeV,
     comb_m_max_jpsi=3276 * MeV,
     comb_m_min=3550 * MeV,
     comb_m_max=4750 * MeV,
@@ -616,23 +615,18 @@ def make_LbToJpsiKs_LL_Neutron_tight_line(
     assert process in ["hlt2", "spruce"], (
         "Line must be defined as Hlt2 or Sprucing line!"
     )
-    pvs = make_pvs()
     muons = basic_builder.filter_muons_loose(
         particles=make_long_muons(), mu_pidk=10, mu_pidp=10
     )
-    # jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
-    #    muons=muons, max_vchi2pdof=4
-    # )
     jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
-        muons=muons, max_vchi2pdof=4, max_docachi2=9
+        muons=muons, max_vchi2pdof=4
     )
     kshort_LL = basic_builder.make_ks_LL(bpvvdchi2=4, chi2vx=4, pi_mipchi2pv=4)
 
     Lb2jpsiKs = make_LbToJpsiKs_Neutron_tight(
+        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
         particles=[jpsi, kshort_LL],
         descriptor="[Lambda_b0 -> J/psi(1S) KS0 ]cc",
-        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
-        pvs=pvs,
         comb_m_min=comb_m_min,
         comb_m_max=comb_m_max,
     )
@@ -642,7 +636,7 @@ def make_LbToJpsiKs_LL_Neutron_tight_line(
 
 def make_LbToJpsiKs_DD_Neutron_tight_line(
     process,
-    comb_m_min_jpsi=3016 * MeV,
+    comb_m_min_jpsi=2916 * MeV,
     comb_m_max_jpsi=3276 * MeV,
     comb_m_min=3550 * MeV,
     comb_m_max=4750 * MeV,
@@ -650,24 +644,18 @@ def make_LbToJpsiKs_DD_Neutron_tight_line(
     assert process in ["hlt2", "spruce"], (
         "Line must be defined as Hlt2 or Sprucing line!"
     )
-    pvs = make_pvs()
     muons = basic_builder.filter_muons_loose(
         particles=make_long_muons(), mu_pidk=10, mu_pidp=10
     )
     jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
-        muons=muons, max_vchi2pdof=4, max_docachi2=9
+        muons=muons, max_vchi2pdof=4
     )
-    # jpsi = basic_builder.make_selected_jpsi2mumu(
-    #    max_vchi2pdof=9,
-    #    max_docachi2=9,
-    # )
     kshort_DD = basic_builder.make_ks_DD(bpvvdchi2=4, chi2vx=4)
 
     Lb2jpsiKs = make_LbToJpsiKs_Neutron_tight(
+        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
         particles=[jpsi, kshort_DD],
         descriptor="[Lambda_b0 -> J/psi(1S) KS0 ]cc",
-        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
-        pvs=pvs,
         comb_m_min=comb_m_min,
         comb_m_max=comb_m_max,
     )
@@ -677,7 +665,7 @@ def make_LbToJpsiKs_DD_Neutron_tight_line(
 
 def make_LbToJpsiKs_LD_Neutron_tight_line(
     process,
-    comb_m_min_jpsi=3016 * MeV,
+    comb_m_min_jpsi=2916 * MeV,
     comb_m_max_jpsi=3276 * MeV,
     comb_m_min=3550 * MeV,
     comb_m_max=4750 * MeV,
@@ -685,23 +673,18 @@ def make_LbToJpsiKs_LD_Neutron_tight_line(
     assert process in ["hlt2", "spruce"], (
         "Line must be defined as Hlt2 or Sprucing line!"
     )
-    pvs = make_pvs()
     muons = basic_builder.filter_muons_loose(
         particles=make_long_muons(), mu_pidk=10, mu_pidp=10
     )
     jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
-        muons=muons, max_vchi2pdof=4, max_docachi2=9
+        muons=muons, max_vchi2pdof=4
     )
-    # jpsi = basic_builder.make_selected_jpsi_bd2jpsimumukshort(
-    #    muons=muons, max_vchi2pdof=4
-    # )
     kshort_LD = basic_builder.make_ks_LD(bpvvdchi2=4, chi2vx=4, pi_mipchi2pv=4)
 
     Lb2jpsiKs = make_LbToJpsiKs_Neutron_tight(
+        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
         particles=[jpsi, kshort_LD],
         descriptor="[Lambda_b0 -> J/psi(1S) KS0 ]cc",
-        name="B2CC_LbToJpsiKshort_neutron_Combiner_{hash}",
-        pvs=pvs,
         comb_m_min=comb_m_min,
         comb_m_max=comb_m_max,
     )
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index b75ac95e3f9..82c72724532 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -486,12 +486,7 @@ def make_selected_jpsi2mumu(
 
 @configurable
 def make_selected_jpsi_bd2jpsimumukshort(
-    muons,
-    admass=100 * MeV,
-    admass_vtx=100 * MeV,
-    max_vchi2pdof=20,
-    psi2S=False,
-    max_docachi2=None,
+    muons, admass=100 * MeV, admass_vtx=100 * MeV, max_vchi2pdof=20, psi2S=False
 ):
     """
     Filter jpsi candiates for B2CC.  Default cuts refered to Bd2JpsimumuKshort.
@@ -508,10 +503,6 @@ def make_selected_jpsi_bd2jpsimumukshort(
     combination_code = require_all(
         in_range(reference_mass - admass, F.MASS, reference_mass + admass)
     )
-    if max_docachi2 is not None:
-        combination_code = require_all(
-            combination_code, F.MAXSDOCACHI2CUT(float(max_docachi2))
-        )
     vertex_code = require_all(
         in_range(reference_mass - admass_vtx, F.MASS, reference_mass + admass_vtx),
         F.CHI2DOF < max_vchi2pdof,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index 784aca4ff73..96166a2ae06 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -237,7 +237,7 @@ def LbToJpsiKs_Neutron_LL_tight_line(
     return Hlt2Line(
         name=name,
         prescale=prescale,
-        algs=b2cc_prefilters(require_GEC=True, require_topo=True) + line_alg,
+        algs=b2cc_prefilters() + line_alg,
         persistreco=persistreco,
         calo_digits=True,
         calo_clusters=True,
@@ -253,11 +253,10 @@ def LbToJpsiKs_Neutron_DD_tight_line(
     return Hlt2Line(
         name=name,
         prescale=prescale,
-        algs=b2cc_prefilters(require_GEC=True, require_topo=True) + line_alg,
+        algs=b2cc_prefilters() + line_alg,
         persistreco=persistreco,
         calo_digits=True,
         calo_clusters=True,
-        raw_banks=["Calo"],
     )
 
 
@@ -269,11 +268,10 @@ def LbToJpsiKs_Neutron_LD_tight_line(
     return Hlt2Line(
         name=name,
         prescale=prescale,
-        algs=b2cc_prefilters(require_GEC=True, require_topo=True) + line_alg,
+        algs=b2cc_prefilters() + line_alg,
         persistreco=persistreco,
         calo_digits=True,
         calo_clusters=True,
-        raw_banks=["Calo"],
     )
 
 
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
index 12ccbc6679a..2702c3d7891 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
@@ -15,22 +15,11 @@
 from RecoConf.event_filters import require_gec, require_pvs
 from RecoConf.reconstruction_objects import make_pvs, upfront_reconstruction
 
-from Hlt2Conf.lines.topological_b import require_topo_candidate
-
 
 # make sure we have a PV
 # at the momement GEC not mandatory
-def b2cc_prefilters(
-    require_GEC=False, require_topo=False, min_twobody_mva=0.1, min_threebody_mva=0.1
-):
-    filters = list(upfront_reconstruction())  # create a copy
+def b2cc_prefilters(require_GEC=False):
     if require_GEC:
-        filters.append(require_gec())
-    filters.append(require_pvs(make_pvs()))
-    if require_topo:
-        filters.append(
-            require_topo_candidate(
-                min_twobody_mva=min_twobody_mva, min_threebody_mva=min_threebody_mva
-            )
-        )
-    return filters
+        return upfront_reconstruction() + [require_gec(), require_pvs(make_pvs())]
+    else:
+        return upfront_reconstruction() + [require_pvs(make_pvs())]
-- 
GitLab


From 65e41bf613756ac769f8f014321f0f9d28314d5c Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 27 Mar 2025 00:49:27 +0800
Subject: [PATCH 13/17] delete unused variable and commented content

---
 .../lines/b_to_charmonia/b_to_jpsix.py        | 93 -------------------
 .../b_to_charmonia/builders/basic_builder.py  | 11 ---
 .../lines/bandq/builders/dimuon_lines.py      |  1 -
 3 files changed, 105 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 8c6b7863e91..25071213592 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -182,7 +182,6 @@ def make_BuToJpsiK_Neutron_line(process):
     Kaons = basic_builder.make_BachelorKaonsforB2JpsiK(
         pid=5, mipchi2_min=16, ghostProb_max=0.05
     )
-    # Kaons = basic_builder.make_kaons(pt=1.0 * GeV, pid=5, p=4.0 * GeV)
     line_alg = make_BuToJpsiK_Neutron(
         particles=[Jpsi, Kaons], descriptor="[B+ -> J/psi(1S) K+]cc"
     )
@@ -190,98 +189,6 @@ def make_BuToJpsiK_Neutron_line(process):
     return [Jpsi, Kaons, line_alg]
 
 
-
-
-#def make_BuToJpsiK_Neutron(
-#    particles,
-#    descriptor,
-#    name="B2CC_BuToJpsiK_Neutron_Combiner_{hash}",
-#    am_min=2350 * MeV,  # Adjust these values as needed
-#    am_max=4400 * MeV,  # Adjust these values as needed
-#    am12_min=1150 * MeV,
-#    am12_max=2200 * MeV,
-#    asumpt_min=2000 * MeV,
-#    asumpt_max=22 * GeV,
-#    adoca_chi2_max=5.0,
-#    adoca_max= 0.2 * mm,
-#    dira=-10.0,
-#    max_ipchi2=25,
-#    max_vtxchi2pdof=25,
-#    AllowDiffInputsForSameIDChildren=False,
-#):
-#    
-#    combination12_code = F.require_all(
-#            in_range(am12_min, F.MASS, am12_max),
-#            (F.MASSWITHHYPOTHESES(("K+", "pi-")) < 1750 * MeV) |
-#            (F.MASSWITHHYPOTHESES(("K+", "pi-")) > 1950 * MeV),
-#            (F.MASSWITHHYPOTHESES(("pi+", "pi-")) < 1750 * MeV) |
-#            (F.MASSWITHHYPOTHESES(("pi+", "pi-")) > 1950 * MeV),
-#            (F.MASSWITHHYPOTHESES(("p+", "p~-")) < 2950 * MeV) |
-#            (F.MASSWITHHYPOTHESES(("p+", "p~-")) > 3150 * MeV),
-#            ) 
-#    combination_code = F.require_all(in_range(am_min, F.MASS, am_max))
-#    composite_code = F.require_all(
-#            F.SDOCACHI2(1, 2) < adoca_chi2_max,
-#            F.SDOCA(1, 2) < adoca_max,
-#            (F.SUBCOMB(Functor=F.MASS, Indices=[2, 3]) < 1750 * MeV ) |
-#            (F.SUBCOMB(Functor=F.MASS, Indices=[2, 3]) > 1950 * MeV),
-#            (F.MASSWITHHYPOTHESES(("p+", "pi-", "pi+")) < 2200 * MeV) |
-#            (F.MASSWITHHYPOTHESES(("p+", "pi-", "pi+")) > 2340 * MeV),
-#            (F.MASSWITHHYPOTHESES(("p+", "K-", "pi+")) < 2200 * MeV) |
-#            (F.MASSWITHHYPOTHESES(("p+", "K-", "pi+")) > 2340 * MeV),
-#            in_range(0., F.ALV(1,2), 1),
-#            in_range(0., F.ALV(1,3), 1),
-#            in_range(0., F.ALV(2,3), 1),
-#            (F.OWNPVDIRA > dira),
-#            (F.CHI2DOF < max_vtxchi2pdof),
-#
-#    )
-#    if max_ipchi2:
-#        composite_code = require_all(composite_code, F.OWNPVIPCHI2 < max_ipchi2)
-#    
-#    if asumpt_min is not None:
-#        combination_code &= F.SUM(F.PT) > asumpt_min
-#    if asumpt_max is not None:
-#        combination_code &= F.SUM(F.PT) < asumpt_max
-#
-#    return ParticleCombiner(
-#        particles,
-#        name=name,
-#        DecayDescriptor=descriptor,
-#        Combination12Cut=combination12_code,
-#        CombinationCut=combination_code,
-#        CompositeCut=composite_code,
-#        AllowDiffInputsForSameIDChildren=AllowDiffInputsForSameIDChildren,
-#    )
-#
-#
-#### Define function for each line
-#def make_BuToJpsiK_Neutron_line(process):
-#    assert process in ["hlt2", "spruce"], (
-#        "Line must be defined as Hlt2 or Sprucing line!"
-#    )
-#
-#    #Jpsi = basic_builder.make_Neutron_Jpsi()
-#    Protons = basic_builder.make_ProtonsforB2JpsiK(
-#        pid=5, mipchi2_min=16, ghostProb_max=0.05
-#    )
-#    Pions = basic_builder.make_PionsforB2JpsiK(
-#        pid=-5, mipchi2_min=16, ghostProb_max=0.05
-#    )
-#    Kaons = basic_builder.make_BachelorKaonsforB2JpsiK(
-#        pid=5, mipchi2_min=16, ghostProb_max=0.05
-#    )
-#    
-#    #persistable_photons = basic_builder.make_photons_to_preserve(Kaons)
-#    #print("persistable_photons.OutputLocation ", persistable_photons.OutputLocation)
-#    # Kaons = basic_builder.make_kaons(pt=1.0 * GeV, pid=5, p=4.0 * GeV)
-#    line_alg = make_BuToJpsiK_Neutron(
-#        particles=[Protons, Pions, Kaons], descriptor="[B+ -> p+ pi- K+]cc"
-#    )
-#
-#    return [Protons, Pions, Kaons, line_alg]
-
-
 def make_Bs2Jpsif0(
     particles,
     descriptor,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index aaad1a035ad..8316195bbcd 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -172,17 +172,6 @@ def make_BachelorKaonsforB2JpsiK(
     if pid is not None:
         pid = F.PID_K > pid
         pid &= F.ISMUON == 0
-    print("PID_K  ",  F.PID_K())
-    print("CALOCELLID_ALL  ",  F.CALOCELLID_ALL())
-    print("CALOCELLID_COLUMN  ",  F.CALOCELLID_COLUMN())
-    print("CALOCELLID_ROW  ",  F.CALOCELLID_ROW())
-    print("CALO_NEUTRAL_1TO9_ENERGY_RATIO  ",  F.CALO_NEUTRAL_1TO9_ENERGY_RATIO())
-    print("CALO_CLUSTER_MASS  ",  F.CALO_CLUSTER_MASS())
-    print("CALO_NEUTRAL_ECAL_ENERGY  ",  F.CALO_NEUTRAL_ECAL_ENERGY())
-    print("CALO_NEUTRAL_HCAL2ECAL_ENERGY_RATIO  ",  F.CALO_NEUTRAL_HCAL2ECAL_ENERGY_RATIO())
-    print("CALO_NEUTRAL_SHOWER_SHAPE  ",  F.CALO_NEUTRAL_SHOWER_SHAPE())
-    print("CALO_NEUTRAL_ID  ",  F.CALO_NEUTRAL_ID())
-    print("CALO_NUM_SATURATED_CELLS  ",  F.CALO_NUM_SATURATED_CELLS())
     return make_selected_particles(
         make_particles=make_has_rich_long_kaons,
         pt_min=pt_min,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/bandq/builders/dimuon_lines.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/bandq/builders/dimuon_lines.py
index b018fe82a71..bfb05f4c7c1 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/bandq/builders/dimuon_lines.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/bandq/builders/dimuon_lines.py
@@ -273,4 +273,3 @@ def make_loose_samesign_dimuon(
         minMass_dimuon=minMass_dimuon,
         minPt_muon=minPt_muon,
     )
-
-- 
GitLab


From 57aafc63004fec72a32de106a1b1e6e8fb559b73 Mon Sep 17 00:00:00 2001
From: Gitlab CI <noreply@cern.ch>
Date: Wed, 26 Mar 2025 16:50:11 +0000
Subject: [PATCH 14/17] pre-commit fixes

patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/53349893
---
 .../lines/b_to_charmonia/b_to_jpsix.py        |  5 ++-
 .../b_to_charmonia/builders/basic_builder.py  | 42 +++++++++----------
 .../lines/b_to_charmonia/hlt2_b2cc.py         |  8 +++-
 .../lines/b_to_charmonia/prefilters.py        |  1 +
 4 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 25071213592..c387dcd5df1 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -16,9 +16,9 @@ Definition of B -> J/psi X HLT2/Sprucing lines for B2CC.
 import Functors as F
 from Functors import require_all
 from Functors.math import in_range
-from RecoConf.reconstruction_objects import make_pvs
 from GaudiKernel.SystemOfUnits import GeV, MeV, mm, picosecond
 from RecoConf.algorithms_thor import ParticleCombiner, ParticleContainersMerger
+from RecoConf.reconstruction_objects import make_pvs
 from RecoConf.standard_particles import make_long_muons
 
 from Hlt2Conf.lines.b_to_charmonia.builders import basic_builder, special_builder
@@ -140,6 +140,7 @@ def make_B2JpsiX(
         CompositeCut=vertex_code,
     )
 
+
 def make_BuToJpsiK_Neutron(
     particles,
     descriptor,
@@ -152,7 +153,7 @@ def make_BuToJpsiK_Neutron(
     vchi2pdof_max=25,
     AllowDiffInputsForSameIDChildren=False,
 ):
-    pvs= make_pvs()
+    pvs = make_pvs()
     combination_code = F.require_all(in_range(am_min, F.MASS, am_max))
     if asumpt_min is not None:
         combination_code &= F.SUM(F.PT) > asumpt_min
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index 8316195bbcd..4da5d1d2311 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -15,12 +15,12 @@ from Functors import require_all
 from Functors.math import in_range
 from GaudiKernel.SystemOfUnits import GeV, MeV, mm, ps
 from PyConf import configurable
+from PyConf.Algorithms import SelectionFromRelationTable, WeightedRelTableAlg
 from RecoConf.algorithms_thor import (
     ParticleCombiner,
     ParticleContainersMerger,
     ParticleFilter,
 )
-from PyConf.Algorithms import SelectionFromRelationTable, WeightedRelTableAlg
 from RecoConf.reconstruction_objects import make_pvs
 from RecoConf.standard_particles import (
     _make_dielectron_with_brem,
@@ -37,8 +37,8 @@ from RecoConf.standard_particles import (
     make_long_and_upstream_electrons_no_brem,
     make_long_electrons_no_brem,
     make_long_pions_for_V0,
-    make_up_pions_for_V0,
     make_photons,
+    make_up_pions_for_V0,
 )
 
 ####################################
@@ -157,7 +157,7 @@ def make_kaons(pid=-3, pt=200 * MeV, p=2 * GeV, **decay_arguments):
 @configurable
 def make_BachelorKaonsforB2JpsiK(
     pid=2.0,
-    p_min=2. * GeV,
+    p_min=2.0 * GeV,
     pt_min=800 * MeV,
     p_max=200 * GeV,
     pt_max=15 * GeV,
@@ -186,6 +186,7 @@ def make_BachelorKaonsforB2JpsiK(
         Geometry_cut=Geometry_cut,
     )
 
+
 @configurable
 def make_photons_to_preserve(tracks):
     """Return photon maker filtered to preserve photons near the dielectron candidates."""
@@ -211,7 +212,6 @@ def make_photons_to_preserve(tracks):
     return SelectionFromRelationTable(InputRelations=photons_table.OutputRelations)
 
 
-
 @configurable
 def make_muons(
     pid=None,
@@ -1250,7 +1250,7 @@ def make_Neutron_Jpsi(
     name="B2CC_Neutron_Jpsi_{hash}",
     make_pvs=make_pvs,
     adoca_chi2_max=5.0,
-    adoca_max= 0.2 * mm,
+    adoca_max=0.2 * mm,
     p_min=1000.0 * MeV,
     pt_min=500.0 * MeV,
     am_min=1150 * MeV,
@@ -1266,27 +1266,27 @@ def make_Neutron_Jpsi(
     protons = make_ProtonsforB2JpsiK(pid=5, mipchi2_min=16, ghostProb_max=0.05)
     descriptor = "[J/psi(1S) -> p+ pi-]cc"
     combination_code = F.require_all(
-        in_range(am_min, F.MASS, am_max), 
+        in_range(am_min, F.MASS, am_max),
         F.SDOCACHI2(1, 2) < adoca_chi2_max,
         F.SDOCA(1, 2) < adoca_max,
-        in_range(0.2, F.ALV(1,2), 1.),
-        (F.MASSWITHHYPOTHESES(("K+", "pi-")) < 1750 * MeV) |
-        (F.MASSWITHHYPOTHESES(("K+", "pi-")) > 1950 * MeV),
-        (F.MASSWITHHYPOTHESES(("pi+", "pi-")) < 1750 * MeV) |
-        (F.MASSWITHHYPOTHESES(("pi+", "pi-")) > 1950 * MeV),
-        (F.MASSWITHHYPOTHESES(("p+", "p~-")) < 2950 * MeV) |
-        (F.MASSWITHHYPOTHESES(("p+", "p~-")) > 3150 * MeV),
+        in_range(0.2, F.ALV(1, 2), 1.0),
+        (F.MASSWITHHYPOTHESES(("K+", "pi-")) < 1750 * MeV)
+        | (F.MASSWITHHYPOTHESES(("K+", "pi-")) > 1950 * MeV),
+        (F.MASSWITHHYPOTHESES(("pi+", "pi-")) < 1750 * MeV)
+        | (F.MASSWITHHYPOTHESES(("pi+", "pi-")) > 1950 * MeV),
+        (F.MASSWITHHYPOTHESES(("p+", "p~-")) < 2950 * MeV)
+        | (F.MASSWITHHYPOTHESES(("p+", "p~-")) > 3150 * MeV),
     )
 
     vertex_code = F.require_all(
-                F.P > p_min, 
-                F.PT > pt_min,
-                F.CHI2 < max_vtxchi2pdof,
-                F.math.in_range(minVDz, F.OWNPVVDZ, maxVDz),
-                F.OWNPVDIRA > ownpvdira_min,
-                F.END_VZ < maxVz,
-                F.END_VRHO < minRho,
-        )
+        F.P > p_min,
+        F.PT > pt_min,
+        F.CHI2 < max_vtxchi2pdof,
+        F.math.in_range(minVDz, F.OWNPVVDZ, maxVDz),
+        F.OWNPVDIRA > ownpvdira_min,
+        F.END_VZ < maxVz,
+        F.END_VRHO < minRho,
+    )
 
     return ParticleCombiner(
         [protons, pions],
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index 0df9f44f017..4524757393a 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -221,7 +221,13 @@ def BuToJpsiK_NeutronPrescaled_line(
     return Hlt2Line(
         name=name,
         prescale=prescale,
-        algs=b2cc_prefilters(require_GEC=True, require_topo=True, min_twobody_mva=0.9, min_threebody_mva=0.9) + line_alg,
+        algs=b2cc_prefilters(
+            require_GEC=True,
+            require_topo=True,
+            min_twobody_mva=0.9,
+            min_threebody_mva=0.9,
+        )
+        + line_alg,
         persistreco=persistreco,
         calo_digits=True,
         calo_clusters=True,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
index 1225f2bb0da..12ccbc6679a 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/prefilters.py
@@ -14,6 +14,7 @@
 
 from RecoConf.event_filters import require_gec, require_pvs
 from RecoConf.reconstruction_objects import make_pvs, upfront_reconstruction
+
 from Hlt2Conf.lines.topological_b import require_topo_candidate
 
 
-- 
GitLab


From ff9200154f5095ee24101a0eb11d97a31053bc71 Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 27 Mar 2025 02:17:34 +0800
Subject: [PATCH 15/17] update new requirement

---
 .../python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py     | 6 ++++--
 .../lines/b_to_charmonia/builders/basic_builder.py         | 7 ++-----
 .../python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py      | 2 +-
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index c8205ac5365..752a2f5c99a 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -91,7 +91,8 @@ def make_BuToJpsiK_Neutron(
     asumpt_min=2000 * MeV,
     asumpt_max=22 * GeV,
     bpvfdchi2_min=450,
-    vchi2pdof_max=25,
+    vchi2pdof_max=9,
+    maxVDz=100.0,
     AllowDiffInputsForSameIDChildren=False,
 ):
     pvs = make_pvs()
@@ -103,6 +104,7 @@ def make_BuToJpsiK_Neutron(
     composite_code = F.require_all(
         F.CHI2 < vchi2pdof_max,
         F.BPVFDCHI2(pvs) > bpvfdchi2_min,
+        F.OWNPVVDZ< maxVDz,
     )
     return ParticleCombiner(
         particles,
@@ -122,7 +124,7 @@ def make_BuToJpsiK_Neutron_line(process):
 
     Jpsi = basic_builder.make_Neutron_Jpsi()
     Kaons = basic_builder.make_BachelorKaonsforB2JpsiK(
-        pid=5, mipchi2_min=16, ghostProb_max=0.05
+        pid=5, mipchi2_min=16, ghostProb_max=0.1
     )
     line_alg = make_BuToJpsiK_Neutron(
         particles=[Jpsi, Kaons], descriptor="[B+ -> J/psi(1S) K+]cc"
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
index b80c4378304..88ec7aa2e74 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/builders/basic_builder.py
@@ -1256,14 +1256,12 @@ def make_Neutron_Jpsi(
     am_min=1150 * MeV,
     am_max=2200 * MeV,
     minRho=3,
-    minVDz=0.0,
-    maxVDz=200.0,
     ownpvdira_min=0.0,
     maxVz=650 * mm,
     max_vtxchi2pdof=9,
 ):
-    pions = make_PionsforB2JpsiK(pid=-5, mipchi2_min=16, ghostProb_max=0.05)
-    protons = make_ProtonsforB2JpsiK(pid=5, mipchi2_min=16, ghostProb_max=0.05)
+    pions = make_PionsforB2JpsiK(pid=-5, mipchi2_min=16, ghostProb_max=0.1)
+    protons = make_ProtonsforB2JpsiK(pid=5, mipchi2_min=16, ghostProb_max=0.1)
     descriptor = "[J/psi(1S) -> p+ pi-]cc"
     combination_code = F.require_all(
         in_range(am_min, F.MASS, am_max),
@@ -1282,7 +1280,6 @@ def make_Neutron_Jpsi(
         F.P > p_min,
         F.PT > pt_min,
         F.CHI2 < max_vtxchi2pdof,
-        F.math.in_range(minVDz, F.OWNPVVDZ, maxVDz),
         F.OWNPVDIRA > ownpvdira_min,
         F.END_VZ < maxVz,
         F.END_VRHO < minRho,
diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index 0e2e7974550..4abb1bd2495 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -218,7 +218,7 @@ def BsToJpsikstar_line(name="Hlt2B2CC_BsToJpsiKstar", prescale=1, persistreco=Fa
 
 @register_line_builder(all_lines)
 def BuToJpsiK_NeutronPrescaled_line(
-    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.4, persistreco=False
+    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.3, persistreco=False
 ):
     line_alg = b_to_jpsix.make_BuToJpsiK_Neutron_line(process=PROCESS)
     return Hlt2Line(
-- 
GitLab


From 4ad18f8c8e58310ada49c23d40a6c3c074eed86d Mon Sep 17 00:00:00 2001
From: yangyouhua <yangyh@lzulogin02.hep.lzu.edu.cn>
Date: Thu, 27 Mar 2025 02:37:19 +0800
Subject: [PATCH 16/17] update prescale to 0.6

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

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
index 4abb1bd2495..722b64d19c8 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/hlt2_b2cc.py
@@ -218,7 +218,7 @@ def BsToJpsikstar_line(name="Hlt2B2CC_BsToJpsiKstar", prescale=1, persistreco=Fa
 
 @register_line_builder(all_lines)
 def BuToJpsiK_NeutronPrescaled_line(
-    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.3, persistreco=False
+    name="Hlt2B2CC_BuToJpsiK_NeutronPrescaled", prescale=0.6, persistreco=False
 ):
     line_alg = b_to_jpsix.make_BuToJpsiK_Neutron_line(process=PROCESS)
     return Hlt2Line(
-- 
GitLab


From a8a3976a9928dcc97197df1ccd7731243000a589 Mon Sep 17 00:00:00 2001
From: Gitlab CI <noreply@cern.ch>
Date: Wed, 26 Mar 2025 18:38:01 +0000
Subject: [PATCH 17/17] pre-commit fixes

patch generated by https://gitlab.cern.ch/lhcb/Moore/-/jobs/53358281
---
 Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
index 752a2f5c99a..07ecea83c94 100644
--- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
+++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/b_to_charmonia/b_to_jpsix.py
@@ -104,7 +104,7 @@ def make_BuToJpsiK_Neutron(
     composite_code = F.require_all(
         F.CHI2 < vchi2pdof_max,
         F.BPVFDCHI2(pvs) > bpvfdchi2_min,
-        F.OWNPVVDZ< maxVDz,
+        F.OWNPVVDZ < maxVDz,
     )
     return ParticleCombiner(
         particles,
-- 
GitLab