From 9be3b93b11db9c9f5539c47ff670b7ac6f8b2c89 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Thu, 4 May 2023 17:30:59 +0200
Subject: [PATCH 01/18] Create branch and basic structure

---
 cutbased-dilepton-trigger/info.yaml           | 52 +++++++++++++++++++
 .../options/DaVinci/Tuples/Dimuon/Bs2MuMu.py  |  0
 .../options/DaVinci/options.py                | 23 ++++++++
 .../options/Moore/options.py                  |  0
 4 files changed, 75 insertions(+)
 create mode 100644 cutbased-dilepton-trigger/info.yaml
 create mode 100644 cutbased-dilepton-trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py
 create mode 100644 cutbased-dilepton-trigger/options/DaVinci/options.py
 create mode 100644 cutbased-dilepton-trigger/options/Moore/options.py

diff --git a/cutbased-dilepton-trigger/info.yaml b/cutbased-dilepton-trigger/info.yaml
new file mode 100644
index 0000000000..06f1f5c1dd
--- /dev/null
+++ b/cutbased-dilepton-trigger/info.yaml
@@ -0,0 +1,52 @@
+defaults:
+    wg: RD
+    inform:
+        - jamie.gooding@cern.ch
+
+{%- set datasets = [
+  ('passthrough', 'VeloClosed', 'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagUp-Excl-UT/Real Data/92000000/RAW'),
+  ('passthrough', 'VeloClosed', 'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagDown-Excl-UT/Real Data/92000000/RAW'),
+  ('passthrough', 'VeloOpen',   'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagUp-Excl-UT/Real Data/92000000/RAW'),
+  ('passthrough', 'VeloOpen',   'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagDown-Excl-UT/Real Data/92000000/RAW'),
+]%}
+
+
+{% for category, velo_state, polarity, bk_path in datasets %}
+
+Data22_{{ velo_state }}_{{ polarity }}_HLT2
+  application: "Moore/v54r8"
+  input: 
+    bk_query: {{ bk_path }}
+    dq_flags:
+      - UNCHECKED
+      - OK
+  output: Tuple_{{ velo state }}_{{ polarity }}.ROOT
+  options:
+    entrypoint: options.Moore.options
+    extra_options:
+      input_raw_format: 0.5
+      input_type: RAW
+      output_type: ROOT
+      simulation: False
+      data_type: "Upgrade"
+      geometry_version: trunk
+      conditions_version: FIX
+      scheduler_legacy_mode: False
+
+Tuples22_{{ velo_state }}_{{ polarity }}
+  application: "DaVinci/v63r5"
+  input: 
+    job_name: "Data22_{{ velo_state }}_{{ polarity }}_HLT2"
+  output: Tuple_{{ velo state }}_{{ polarity }}.ROOT
+  options:
+    entrypoint: options.DaVinci.options:main
+    extra_options:
+      input_raw_format: 0.5
+      input_type: ROOT
+      simulation: False
+      data_type: "Upgrade"
+      geometry_version: trunk
+      conditions_version: FIX
+      input_process: "Hlt2"
+
+{%- endfor %}
\ No newline at end of file
diff --git a/cutbased-dilepton-trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py b/cutbased-dilepton-trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/cutbased-dilepton-trigger/options/DaVinci/options.py b/cutbased-dilepton-trigger/options/DaVinci/options.py
new file mode 100644
index 0000000000..877ed5befc
--- /dev/null
+++ b/cutbased-dilepton-trigger/options/DaVinci/options.py
@@ -0,0 +1,23 @@
+###############################################################################
+# (c) Copyright 2021-2022 CERN for the benefit of the LHCb Collaboration      #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+from DaVinci import Options, make_config
+
+def main(options: Options):
+        
+    tuples = {
+
+
+        
+    }
+    
+    config = make_config(options, tuples)
+    
+    return config
\ No newline at end of file
diff --git a/cutbased-dilepton-trigger/options/Moore/options.py b/cutbased-dilepton-trigger/options/Moore/options.py
new file mode 100644
index 0000000000..e69de29bb2
-- 
GitLab


From 090eda85caf1209e1b449c6da87f3f8a9f151f52 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Fri, 5 May 2023 13:22:42 +0200
Subject: [PATCH 02/18] Renamed production to match format, added sprucing
 options and populated Moore options

---
 .../options/Moore/options.py                  |  0
 .../info.yaml                                 | 51 +++++++++++++++----
 .../options/DaVinci/Tuples/Dimuon/Bs2MuMu.py  |  0
 .../options/DaVinci/options.py                | 15 +++++-
 .../options/Moore/make_lines.py               | 32 ++++++++++++
 .../options/Moore/options_hlt2.py             | 29 +++++++++++
 .../options/Moore/options_spruce.py           | 29 +++++++++++
 7 files changed, 146 insertions(+), 10 deletions(-)
 delete mode 100644 cutbased-dilepton-trigger/options/Moore/options.py
 rename {cutbased-dilepton-trigger => cutbased_dilepton_trigger}/info.yaml (51%)
 rename {cutbased-dilepton-trigger => cutbased_dilepton_trigger}/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py (100%)
 rename {cutbased-dilepton-trigger => cutbased_dilepton_trigger}/options/DaVinci/options.py (83%)
 create mode 100644 cutbased_dilepton_trigger/options/Moore/make_lines.py
 create mode 100644 cutbased_dilepton_trigger/options/Moore/options_hlt2.py
 create mode 100644 cutbased_dilepton_trigger/options/Moore/options_spruce.py

diff --git a/cutbased-dilepton-trigger/options/Moore/options.py b/cutbased-dilepton-trigger/options/Moore/options.py
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/cutbased-dilepton-trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
similarity index 51%
rename from cutbased-dilepton-trigger/info.yaml
rename to cutbased_dilepton_trigger/info.yaml
index 06f1f5c1dd..64e1193e14 100644
--- a/cutbased-dilepton-trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -1,7 +1,7 @@
 defaults:
-    wg: RD
-    inform:
-        - jamie.gooding@cern.ch
+  wg: RD
+  inform:
+    - jamie.gooding@cern.ch
 
 {%- set datasets = [
   ('passthrough', 'VeloClosed', 'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagUp-Excl-UT/Real Data/92000000/RAW'),
@@ -13,16 +13,16 @@ defaults:
 
 {% for category, velo_state, polarity, bk_path in datasets %}
 
-Data22_{{ velo_state }}_{{ polarity }}_HLT2
+Data22_{{ velo_state }}_{{ polarity }}_HLT2:
   application: "Moore/v54r8"
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
       - UNCHECKED
       - OK
-  output: Tuple_{{ velo state }}_{{ polarity }}.ROOT
+  output: Data_HLT2.DST
   options:
-    entrypoint: options.Moore.options
+    entrypoint: options.Moore.options_hlt2:main
     extra_options:
       input_raw_format: 0.5
       input_type: RAW
@@ -33,13 +33,30 @@ Data22_{{ velo_state }}_{{ polarity }}_HLT2
       conditions_version: FIX
       scheduler_legacy_mode: False
 
-Tuples22_{{ velo_state }}_{{ polarity }}
+Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
+  application: "Moore/v54r8"
+  input: 
+    job_name: "Data22_{{ velo_state }}_{{ polarity }}_HLT2"
+  output: Data_Spruce.DST
+  options:
+    entrypoint: options.Moore.options_spruce:main
+    extra_options:
+      input_raw_format: 0.5
+      input_type: RAW
+      output_type: ROOT
+      simulation: False
+      data_type: "Upgrade"
+      geometry_version: trunk
+      conditions_version: FIX
+      scheduler_legacy_mode: False
+
+Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
   application: "DaVinci/v63r5"
   input: 
     job_name: "Data22_{{ velo_state }}_{{ polarity }}_HLT2"
-  output: Tuple_{{ velo state }}_{{ polarity }}.ROOT
+  output: Tuple_HLT2.ROOT
   options:
-    entrypoint: options.DaVinci.options:main
+    entrypoint: options.DaVinci.options:tuple_hlt2
     extra_options:
       input_raw_format: 0.5
       input_type: ROOT
@@ -49,4 +66,20 @@ Tuples22_{{ velo_state }}_{{ polarity }}
       conditions_version: FIX
       input_process: "Hlt2"
 
+Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
+  application: "DaVinci/v63r5"
+  input: 
+    job_name: "Data22_{{ velo_state }}_{{ polarity }}_SPRUCE"
+  output: Tuple_Spruce.ROOT
+  options:
+    entrypoint: options.DaVinci.options:tuple_spruce
+    extra_options:
+      input_raw_format: 0.5
+      input_type: ROOT
+      simulation: False
+      data_type: "Upgrade"
+      geometry_version: trunk
+      conditions_version: FIX
+      input_process: "Spruce"
+
 {%- endfor %}
\ No newline at end of file
diff --git a/cutbased-dilepton-trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py b/cutbased_dilepton_trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py
similarity index 100%
rename from cutbased-dilepton-trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py
rename to cutbased_dilepton_trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py
diff --git a/cutbased-dilepton-trigger/options/DaVinci/options.py b/cutbased_dilepton_trigger/options/DaVinci/options.py
similarity index 83%
rename from cutbased-dilepton-trigger/options/DaVinci/options.py
rename to cutbased_dilepton_trigger/options/DaVinci/options.py
index 877ed5befc..e548e987b6 100644
--- a/cutbased-dilepton-trigger/options/DaVinci/options.py
+++ b/cutbased_dilepton_trigger/options/DaVinci/options.py
@@ -10,7 +10,20 @@
 ###############################################################################
 from DaVinci import Options, make_config
 
-def main(options: Options):
+def tuple_hlt2(options: Options):
+        
+    tuples = {
+
+
+        
+    }
+    
+    config = make_config(options, tuples)
+    
+    return config
+
+
+def tuple_spruce(options: Options):
         
     tuples = {
 
diff --git a/cutbased_dilepton_trigger/options/Moore/make_lines.py b/cutbased_dilepton_trigger/options/Moore/make_lines.py
new file mode 100644
index 0000000000..d6446d6599
--- /dev/null
+++ b/cutbased_dilepton_trigger/options/Moore/make_lines.py
@@ -0,0 +1,32 @@
+###############################################################################
+# (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.                                       #
+###############################################################################
+
+from Hlt2Conf.lines.rd import b_to_ll_hlt2, b_to_xll_hlt2, b_to_kstarmumu, b_to_hemu, b_to_ll_spruce, b_to_xll_spruce
+from Hlt2Conf.lines.inclusive_detached_dilepton import cutbased_dilepton_lines, inclusive_detached_dilepton_trigger
+
+def hlt2_lines():
+    linesets = [cutbased_dilepton_lines.all_lines,
+                b_to_ll_hlt2.all_lines, b_to_xll_hlt2.all_lines,
+                b_to_kstarmumu.all_lines, b_to_hemu.all_lines,
+                inclusive_detached_dilepton_trigger.all_lines]
+    hlt2_lines = []
+    for lineset in linesets:
+        for line in lineset.values():
+            hlt2_lines.append(line())
+    return hlt2_lines
+
+def spruce_lines():
+    linesets = [b_to_ll_spruce.sprucing_lines, b_to_xll_spruce.sprucing_lines]
+    spruce_lines = []
+    for lineset in linesets:
+        for line in lineset.values():
+            spruce_lines.append(line())
+    return spruce_lines
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/Moore/options_hlt2.py b/cutbased_dilepton_trigger/options/Moore/options_hlt2.py
new file mode 100644
index 0000000000..899cdadf3f
--- /dev/null
+++ b/cutbased_dilepton_trigger/options/Moore/options_hlt2.py
@@ -0,0 +1,29 @@
+###############################################################################
+# (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.                                       #
+###############################################################################
+
+from Moore import Options, run_moore
+
+from RecoConf.hlt2_global_reco import make_light_reconstruction
+from RecoConf.reconstruction_objects import reconstruction
+
+from RecoConf.global_tools import stateProvider_with_simplified_geom
+public_tools=[stateProvider_with_simplified_geom()]
+
+from RecoConf.decoders import default_ft_decoding_version
+default_ft_decoding_version.global_bind(value=4)
+
+from .make_lines import hlt2_lines
+
+def alg_config(options: Options):
+    with reconstruction.bind(from_file=False),\
+           make_light_reconstruction.bind(skipUT=True, use_pr_kf=False):
+            config = run_moore(options, hlt2_lines, public_tools)
+            return config
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/Moore/options_spruce.py b/cutbased_dilepton_trigger/options/Moore/options_spruce.py
new file mode 100644
index 0000000000..2ede7c479b
--- /dev/null
+++ b/cutbased_dilepton_trigger/options/Moore/options_spruce.py
@@ -0,0 +1,29 @@
+###############################################################################
+# (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.                                       #
+###############################################################################
+from Configurables import Moore
+from Moore import options
+from .make_lines import spruce_lines
+
+options.input_raw_format = 0.5
+options.input_type = 'ROOT'
+
+options.evt_max = -1
+options.simulation = True
+options.data_type = 'Upgrade'
+
+options.output_file = 'Data_Spruce.dst'
+options.output_type = 'ROOT'
+
+moore = Moore()
+
+moore.spruce = True
+moore.from_file = True
+options.lines_maker = spruce_lines
\ No newline at end of file
-- 
GitLab


From 7e691294d149deb91453f9c403c4e94daff0389b Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Tue, 9 May 2023 23:28:44 +0200
Subject: [PATCH 03/18] Written in Davinci tupling

---
 cutbased_dilepton_trigger/info.yaml           |   2 +-
 .../options/DaVinci/options.py                | 163 ++++++++++++++++--
 .../Bs2MuMu.py => spruced_tuples/_init_.py}   |   0
 .../spruced_tuples/dielectron/Bs2EE.py        |   7 +
 .../spruced_tuples/dielectron/Bu2JpsiK.py     |   9 +
 .../DaVinci/spruced_tuples/dimuon/Bs2MuMu.py  |   7 +
 .../DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py |   9 +
 7 files changed, 185 insertions(+), 12 deletions(-)
 rename cutbased_dilepton_trigger/options/DaVinci/{Tuples/Dimuon/Bs2MuMu.py => spruced_tuples/_init_.py} (100%)
 create mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bs2EE.py
 create mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bu2JpsiK.py
 create mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bs2MuMu.py
 create mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index 64e1193e14..3b23114044 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -11,7 +11,7 @@ defaults:
 ]%}
 
 
-{% for category, velo_state, polarity, bk_path in datasets %}
+{%- for category, velo_state, polarity, bk_path in datasets %}
 
 Data22_{{ velo_state }}_{{ polarity }}_HLT2:
   application: "Moore/v54r8"
diff --git a/cutbased_dilepton_trigger/options/DaVinci/options.py b/cutbased_dilepton_trigger/options/DaVinci/options.py
index e548e987b6..8dc676f9f3 100644
--- a/cutbased_dilepton_trigger/options/DaVinci/options.py
+++ b/cutbased_dilepton_trigger/options/DaVinci/options.py
@@ -8,29 +8,170 @@
 # granted to it by virtue of its status as an Intergovernmental Organization  #
 # or submit itself to any jurisdiction.                                       #
 ###############################################################################
+import Functors as F
+from FunTuple import FunctorCollection as FC
+from FunTuple import FunTuple_Particles as Funtuple
+from PyConf.reading import get_particles, get_pvs, get_odin, get_decreports
 from DaVinci import Options, make_config
+from DaVinci.algorithms import add_filter
+from DaVinciMCTools import MCTruthAndBkgCat
+from itertools import product
 
-def tuple_hlt2(options: Options):
-        
-    tuples = {
+from .spruced_tuples import dielectron, dimuon
 
+def construct_tuple(line, fields, label, options: Options, sprucing=False):
+    pvs = get_pvs()
 
-        
+    composite_functors = {
+                    "ID": F.PARTICLE_ID,
+                    "KEY": F.OBJECT_KEY,
+                    'M': F.MASS,
+                    "PT": F.PT,
+                    "PX": F.PX,
+                    "PY": F.PY,
+                    "PZ": F.PZ,
+                    "PE": F.ENERGY,
+                    "P": F.P,
+                    "ETA": F.ETA,
+                    "TAU": F.BPVLTIME(pvs),
+                    "BPVDIRA": F.BPVDIRA(pvs),
+                    "BPVFD": F.BPVFD(pvs),
+                    "BPVFDCHI2": F.BPVFDCHI2(pvs),
+                    "BPVIP": F.BPVIP(pvs),
+                    "BPVIPCHI2": F.BPVIPCHI2(pvs),
+                    "CHI2": F.CHI2,
+                    "CHI2DOF": F.CHI2DOF,
+                    "MAXDOCA": F.MAXDOCA,
+                    "MAXDOCACHI2": F.MAXDOCACHI2 
+                }
+
+    daughter_functors = {
+                    "ID": F.PARTICLE_ID,
+                    "PT": F.PT,
+                    "PX": F.PX,
+                    "PY": F.PY,
+                    "PZ": F.PZ,
+                    "PE": F.ENERGY,
+                    "P": F.P,
+                    "ETA": F.ETA,
+                    "FOURMOMENTUM": F.FOURMOMENTUM,
+                    "BPVIPCHI2": F.BPVIPCHI2(pvs),
+                    "PIDe": F.PID_E,
+                    "PIDmu": F.PID_MU,
+                }
+
+    if sprucing:
+        data = get_particles(f"/Event/Spruce/{line}/Particles")
+        print(data)
+    else:
+        data = get_particles(f"/Event/HLT2/{line}/Particles") 
+
+    hdr_filter = add_filter(f"HDRFilter_{label}", f"HLT_PASS('{line}')")
+
+    odin = get_odin(options)
+    hlt1_dec = get_decreports("Hlt1")
+    hlt2_dec = get_decreports("Hlt2")
+
+    hlt1_decisions = F.DECISIONS(Lines=['Hlt1TrackMuonMVADecision','Hlt1DiMuonLowMassDecision',
+                                        'Hlt1DiMuonHighMassDecision', 'Hlt1LowPtDiMuonDecision',
+                                        'Hlt1TwoTrackMVADecision'], DecReports=hlt1_dec)
+    hlt2_decisions = F.DECISIONS(Lines=['Hlt2CutBasedInclDielectronDecision','Hlt2CutBasedInclDielectronPlusTrackDecision','Hlt2CutBasedInclDielectronPlusTwoTrackDecision',
+                                        'Hlt2CutBasedInclDimuonDecision','Hlt2CutBasedInclDimuonPlusTrackDecision','Hlt2CutBasedInclDimuonPlusTwoTrackDecision'], DecReports=hlt2_dec)
+
+    evt_var_dict = {
+                    "HLT1_DEC" : hlt1_decisions,
+                    "HLT2_DEC" : hlt2_decisions
     }
+    if sprucing:
+        spruce_dec = get_decreports("Spruce")
+        spruce_decisions = F.DECISIONS(Lines=['SpruceRD_BToEEDecision', 'SpruceRD_BToMuMuDecision',
+                                             'SpruceRD_BuToKpEEDecision', 'SpruceRD_BuToKpMuMuDecision'], DecReports=spruce_dec)      
+        evt_var_dict.update({"SPRUCE_DEC" : spruce_decisions})
+
+    evt_variables = FC(evt_var_dict)
+    variables = {
+                    "B"  : FC(composite_functors)
+                }
+    if 'Jpsi' in fields:
+        variables.update({"Jpsi": FC(composite_functors)})
+    for particle, charge in product(('e','mu','pi', 'K'), ('P', 'M')):
+        if particle+charge in fields:
+            variables.update({particle+charge: FC(daughter_functors)})
+
+    mctruth = MCTruthAndBkgCat(data, name=f'MCTruthAndBkgCat_{label}')
     
-    config = make_config(options, tuples)
+    MCTRUTH = lambda func: F.MAP_INPUT(Functor=func, Relations=mctruth.MCAssocTable)
+    trueid_bkgcat_info = {
+        # Important note: specify an invalid value for integer functors if there exists no truth info.
+        #                 The invalid value for floating point functors is set to nan.
+        "TRUEID": F.VALUE_OR(0) @ MCTRUTH(F.PARTICLE_ID),
+        "TRUEKEY": F.VALUE_OR(-1) @ MCTRUTH(F.OBJECT_KEY),
+        "TRUEPT": MCTRUTH(F.PT),
+        "TRUEPX": MCTRUTH(F.PX),
+        "TRUEPY": MCTRUTH(F.PY),
+        "TRUEPZ": MCTRUTH(F.PZ),
+        "TRUEENERGY": MCTRUTH(F.ENERGY),
+        "TRUEP": MCTRUTH(F.P),
+        "TRUEETA": MCTRUTH(F.ETA),
+        "TRUEFOURMOMENTUM": MCTRUTH(F.FOURMOMENTUM),
+        "BKGCAT": F.BKGCAT(Relations=mctruth.BkgCatTable)
+    }
+    for field in variables.keys():
+        variables[field] += FC(trueid_bkgcat_info)
+
+    funtuple = Funtuple(name=label,
+                            tuple_name="DecayTree",
+                            fields=fields,
+                            variables=variables,
+                            event_variables=evt_variables,
+                            inputs=data)
+    return {f"{line}_Algs": [hdr_filter, funtuple]}
+
+def tuple_hlt2(options: Options):
+        
+    tuples = {}
+    
+    for lepton_label, lepton in zip(("Dielectron", "Dimuon"), ("e", "mu")):
     
+        two_body_fields = {
+            "B"          : f"[B_s0 -> {lepton}+ {lepton}-]CC",
+            f"{lepton}P" : f"[B_s0 -> ^{lepton}+ {lepton}-]CC",
+            f"{lepton}M" : f"[B_s0 -> {lepton}+ ^{lepton}-]CC",
+        } 
+
+        three_body_fields = {
+            "B"   : f"[B+ -> (J/psi(1S) -> {lepton}+ {lepton}-) pi+]CC",
+            "Jpsi": f"[B+ -> (^J/psi(1S) -> {lepton}+ {lepton}-) pi+]CC",
+            "piP" : f"[B+ -> (J/psi(1S) -> {lepton}+ {lepton}-) ^pi+]CC",
+            f"{lepton}P" : f"[B+ -> (J/psi(1S) -> ^{lepton}+ {lepton}-) pi+]CC",
+            f"{lepton}M" : f"[B+ -> (J/psi(1S) -> {lepton}+ ^{lepton}-) pi+]CC",
+        }
+
+        four_body_fields = {
+            "B"   : f"[B_s0 -> (J/psi(1S) -> {lepton}+ {lepton}-) pi+ pi-]CC",
+            "Jpsi": f"[B_s0 -> (^J/psi(1S) -> {lepton}+ {lepton}-) pi+ pi-]CC",
+            "piP" : f"[B_s0 -> (J/psi(1S) -> {lepton}+ {lepton}-) ^pi+ pi-]CC",
+            "piM" : f"[B_s0 -> (J/psi(1S) -> {lepton}+ {lepton}-) pi+ ^pi-]CC",
+            f"{lepton}P" : f"[B_s0 -> (J/psi(1S) -> ^{lepton}+ {lepton}-) pi+ pi-]CC",
+            f"{lepton}M" : f"[B_s0 -> (J/psi(1S) -> {lepton}+ ^{lepton}-) pi+ pi-]CC",
+        }
+
+        for line, fields, tuple_label in zip ((f"Hlt2CutBasedIncl{lepton_label}", f"Hlt2CutBasedIncl{lepton_label}PlusTrack", f"Hlt2CutBasedIncl{lepton_label}PlusTwoTrack"),\
+                                              (two_body_fields, three_body_fields, four_body_fields),\
+                                              (f"twoBody{lepton_label}Tuple", f"threeBody{lepton_label}Tuple", f"fourBody{lepton_label}Tuple")):
+            tuples.update(construct_tuple(line, fields, tuple_label, options, False))
+
+    config = make_config(options, tuples)    
     return config
 
 
 def tuple_spruce(options: Options):
-        
-    tuples = {
-
+     
+    tuples = {}
 
-        
-    }
+    for tuple_setup in (dielectron.Bs2EE, dielectron.Bu2JpsiK,\
+                        dimuon.Bs2MuMu, dimuon.Bu2JpsiK):
+        tuples.update(construct_tuple(tuple_setup.line, tuple_setup.fields, tuple_setup.tuple_label, options, True))
     
     config = make_config(options, tuples)
-    
     return config
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/_init_.py
similarity index 100%
rename from cutbased_dilepton_trigger/options/DaVinci/Tuples/Dimuon/Bs2MuMu.py
rename to cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/_init_.py
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bs2EE.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bs2EE.py
new file mode 100644
index 0000000000..e3f90a84d0
--- /dev/null
+++ b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bs2EE.py
@@ -0,0 +1,7 @@
+line = "Hlt2RD_BToEE"
+fields = {
+            "B"  : "[B_s0 -> e+ e-]CC",
+            "eP" : "[B_s0 -> ^e+ e-]CC",
+            "eM" : "[B_s0 -> e+ ^e-]CC",
+         }
+tuple_label = "dielectronBs2EETuple"
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bu2JpsiK.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bu2JpsiK.py
new file mode 100644
index 0000000000..b43dece545
--- /dev/null
+++ b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bu2JpsiK.py
@@ -0,0 +1,9 @@
+line = "Hlt2RD_BuToKpEE"
+fields = {
+            "B"   : "[B+ -> (J/psi(1S) -> e+ e-) K+]CC",
+            "Jpsi": "[B+ -> (^J/psi(1S) -> e+ e-) K+]CC",
+            "KP"  : "[B+ -> (J/psi(1S) -> e+ e-) ^K+]CC",
+            "eP"  : "[B+ -> (J/psi(1S) -> ^e+ e-) K+]CC",
+            "eM"  : "[B+ -> (J/psi(1S) -> e+ ^e-) K+]CC",
+         }
+tuple_label = "dielectronBu2JpsiKTuple"
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bs2MuMu.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bs2MuMu.py
new file mode 100644
index 0000000000..2b09fef401
--- /dev/null
+++ b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bs2MuMu.py
@@ -0,0 +1,7 @@
+line = "Hlt2RD_BToMuMu"
+fields = {
+            "B"  : "[B_s0 -> mu+ mu-]CC",
+            "eP" : "[B_s0 -> ^mu+ mu-]CC",
+            "eM" : "[B_s0 -> mu+ ^mu-]CC",
+         }
+tuple_label = "dimuonBs2MuMuTuple"
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py
new file mode 100644
index 0000000000..b4a1ba0807
--- /dev/null
+++ b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py
@@ -0,0 +1,9 @@
+line = "Hlt2RD_BuToKpMuMu"
+fields = {
+            "B"   : "[B+ -> (J/psi(1S) -> mu+ mu-) K+]CC",
+            "Jpsi": "[B+ -> (^J/psi(1S) -> mu+ mu-) K+]CC",
+            "KP"  : "[B+ -> (J/psi(1S) -> mu+ mu-) ^K+]CC",
+            "eP"  : "[B+ -> (J/psi(1S) -> ^mu+ mu-) K+]CC",
+            "eM"  : "[B+ -> (J/psi(1S) -> mu+ ^mu-) K+]CC",
+         }
+tuple_label = "dielectronBu2JpsiKTuple"
\ No newline at end of file
-- 
GitLab


From 840bcbb52dd8947d0349981fabf45c839b4fb5c9 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Tue, 9 May 2023 23:44:13 +0200
Subject: [PATCH 04/18] Fixes applied to info.yaml

---
 cutbased_dilepton_trigger/info.yaml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index 3b23114044..b07e396367 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -4,10 +4,10 @@ defaults:
     - jamie.gooding@cern.ch
 
 {%- set datasets = [
-  ('passthrough', 'VeloClosed', 'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagUp-Excl-UT/Real Data/92000000/RAW'),
-  ('passthrough', 'VeloClosed', 'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagDown-Excl-UT/Real Data/92000000/RAW'),
-  ('passthrough', 'VeloOpen',   'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagUp-Excl-UT/Real Data/92000000/RAW'),
-  ('passthrough', 'VeloOpen',   'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagDown-Excl-UT/Real Data/92000000/RAW'),
+  ('passthrough', 'VeloClosed', 'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagUp-Excl-UT/Real Data/98100000/RAW'),
+  ('passthrough', 'VeloClosed', 'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagDown-Excl-UT/Real Data/98100000/RAW'),
+  ('passthrough', 'VeloOpen',   'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagUp-Excl-UT/Real Data/98100000/RAW'),
+  ('passthrough', 'VeloOpen',   'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagDown-Excl-UT/Real Data/98100000/RAW'),
 ]%}
 
 
@@ -22,7 +22,7 @@ Data22_{{ velo_state }}_{{ polarity }}_HLT2:
       - OK
   output: Data_HLT2.DST
   options:
-    entrypoint: options.Moore.options_hlt2:main
+    entrypoint: cutbased_dilepton_trigger.options.Moore.options_hlt2:main
     extra_options:
       input_raw_format: 0.5
       input_type: RAW
@@ -39,7 +39,7 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
     job_name: "Data22_{{ velo_state }}_{{ polarity }}_HLT2"
   output: Data_Spruce.DST
   options:
-    entrypoint: options.Moore.options_spruce:main
+    entrypoint: cutbased_dilepton_trigger.options.Moore.options_spruce:main
     extra_options:
       input_raw_format: 0.5
       input_type: RAW
@@ -56,7 +56,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
     job_name: "Data22_{{ velo_state }}_{{ polarity }}_HLT2"
   output: Tuple_HLT2.ROOT
   options:
-    entrypoint: options.DaVinci.options:tuple_hlt2
+    entrypoint: cutbased_dilepton_trigger.options.DaVinci.options:tuple_hlt2
     extra_options:
       input_raw_format: 0.5
       input_type: ROOT
@@ -72,7 +72,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
     job_name: "Data22_{{ velo_state }}_{{ polarity }}_SPRUCE"
   output: Tuple_Spruce.ROOT
   options:
-    entrypoint: options.DaVinci.options:tuple_spruce
+    entrypoint: cutbased_dilepton_trigger.options.DaVinci.options:tuple_spruce
     extra_options:
       input_raw_format: 0.5
       input_type: ROOT
-- 
GitLab


From 21aeff18cf7cdd766c153bd3b66b0752c970bf8a Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Mon, 22 May 2023 10:17:56 +0200
Subject: [PATCH 05/18] Modifications to DaVinci options

---
 cutbased_dilepton_trigger/options/DaVinci/options.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cutbased_dilepton_trigger/options/DaVinci/options.py b/cutbased_dilepton_trigger/options/DaVinci/options.py
index 8dc676f9f3..e316801935 100644
--- a/cutbased_dilepton_trigger/options/DaVinci/options.py
+++ b/cutbased_dilepton_trigger/options/DaVinci/options.py
@@ -13,7 +13,7 @@ from FunTuple import FunctorCollection as FC
 from FunTuple import FunTuple_Particles as Funtuple
 from PyConf.reading import get_particles, get_pvs, get_odin, get_decreports
 from DaVinci import Options, make_config
-from DaVinci.algorithms import add_filter
+from DaVinci.algorithms import create_lines_filter
 from DaVinciMCTools import MCTruthAndBkgCat
 from itertools import product
 
@@ -66,9 +66,9 @@ def construct_tuple(line, fields, label, options: Options, sprucing=False):
     else:
         data = get_particles(f"/Event/HLT2/{line}/Particles") 
 
-    hdr_filter = add_filter(f"HDRFilter_{label}", f"HLT_PASS('{line}')")
+    hdr_filter = create_lines_filter(f"HDRFilter_{label}", [line])
 
-    odin = get_odin(options)
+    odin = get_odin()
     hlt1_dec = get_decreports("Hlt1")
     hlt2_dec = get_decreports("Hlt2")
 
-- 
GitLab


From 6be6d598137fb30bd4c0d82e5cbedca6453d4662 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 7 Jun 2023 15:13:19 +0200
Subject: [PATCH 06/18] Reconfigured to run only sprucing + tupling

---
 cutbased_dilepton_trigger/info.yaml | 45 +++++++++++------------------
 1 file changed, 17 insertions(+), 28 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index b07e396367..59f635f751 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -4,44 +4,30 @@ defaults:
     - jamie.gooding@cern.ch
 
 {%- set datasets = [
-  ('passthrough', 'VeloClosed', 'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagUp-Excl-UT/Real Data/98100000/RAW'),
-  ('passthrough', 'VeloClosed', 'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagDown-Excl-UT/Real Data/98100000/RAW'),
-  ('passthrough', 'VeloOpen',   'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagUp-Excl-UT/Real Data/98100000/RAW'),
-  ('passthrough', 'VeloOpen',   'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagDown-Excl-UT/Real Data/98100000/RAW'),
+  ('full', 'VeloClosed', 'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagUp-Excl-UT/Real Data/90000000/RAW'),
+  ('full', 'VeloClosed', 'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloClosed-MagDown-Excl-UT/Real Data/90000000/RAW'),
+  ('full', 'VeloOpen',   'MagUp',    '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagUp-Excl-UT/Real Data/90000000/RAW'),
+  ('full', 'VeloOpen',   'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagDown-Excl-UT/Real Data/90000000/RAW'),
 ]%}
 
+{%- set platform_detdesc = "x86_64_v2-centos7-gcc12+detdesc-opt" %}
 
 {%- for category, velo_state, polarity, bk_path in datasets %}
 
-Data22_{{ velo_state }}_{{ polarity }}_HLT2:
-  application: "Moore/v54r8"
+
+Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
+  application: Moore/v54r8p1@{{ platform_detdesc }}
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
       - UNCHECKED
       - OK
-  output: Data_HLT2.DST
-  options:
-    entrypoint: cutbased_dilepton_trigger.options.Moore.options_hlt2:main
-    extra_options:
-      input_raw_format: 0.5
-      input_type: RAW
-      output_type: ROOT
-      simulation: False
-      data_type: "Upgrade"
-      geometry_version: trunk
-      conditions_version: FIX
-      scheduler_legacy_mode: False
-
-Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
-  application: "Moore/v54r8"
-  input: 
-    job_name: "Data22_{{ velo_state }}_{{ polarity }}_HLT2"
   output: Data_Spruce.DST
   options:
     entrypoint: cutbased_dilepton_trigger.options.Moore.options_spruce:main
     extra_options:
       input_raw_format: 0.5
+      input_process: Hlt2
       input_type: RAW
       output_type: ROOT
       simulation: False
@@ -51,15 +37,18 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       scheduler_legacy_mode: False
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
-  application: "DaVinci/v63r5"
+  application: DaVinci/v63r5@{{ platform_detdesc }}
   input: 
-    job_name: "Data22_{{ velo_state }}_{{ polarity }}_HLT2"
+    bk_query: {{ bk_path }}
+    dq_flags:
+      - UNCHECKED
+      - OK
   output: Tuple_HLT2.ROOT
   options:
     entrypoint: cutbased_dilepton_trigger.options.DaVinci.options:tuple_hlt2
     extra_options:
       input_raw_format: 0.5
-      input_type: ROOT
+      input_type: RAW
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
@@ -67,9 +56,9 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
       input_process: "Hlt2"
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
-  application: "DaVinci/v63r5"
+  application: DaVinci/v63r5@{{ platform_detdesc }}
   input: 
-    job_name: "Data22_{{ velo_state }}_{{ polarity }}_SPRUCE"
+    job_name: Data22_{{ velo_state }}_{{ polarity }}_SPRUCE
   output: Tuple_Spruce.ROOT
   options:
     entrypoint: cutbased_dilepton_trigger.options.DaVinci.options:tuple_spruce
-- 
GitLab


From 85da591d5482f43453ca5c42fe980a3bde51583b Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 7 Jun 2023 17:34:57 +0200
Subject: [PATCH 07/18] Fixed issues with sprucing; restructured modules.

---
 cutbased_dilepton_trigger/info.yaml           | 21 +++---
 .../options/DaVinci/options.py                | 14 ++--
 .../options/DaVinci/spruced_tuples.py         | 71 +++++++++++++++++++
 .../options/DaVinci/spruced_tuples/_init_.py  |  0
 .../spruced_tuples/dielectron/Bs2EE.py        |  7 --
 .../spruced_tuples/dielectron/Bu2JpsiK.py     |  9 ---
 .../DaVinci/spruced_tuples/dimuon/Bs2MuMu.py  |  7 --
 .../DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py |  9 ---
 .../options/Moore/make_lines.py               |  3 +-
 .../Moore/{options_hlt2.py => options.py}     | 11 ++-
 .../options/Moore/options_spruce.py           | 29 --------
 11 files changed, 99 insertions(+), 82 deletions(-)
 create mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples.py
 delete mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/_init_.py
 delete mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bs2EE.py
 delete mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bu2JpsiK.py
 delete mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bs2MuMu.py
 delete mode 100644 cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py
 rename cutbased_dilepton_trigger/options/Moore/{options_hlt2.py => options.py} (85%)
 delete mode 100644 cutbased_dilepton_trigger/options/Moore/options_spruce.py

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index 59f635f751..c1d8e50e82 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -1,4 +1,5 @@
 defaults:
+  automatically_configure: no 
   wg: RD
   inform:
     - jamie.gooding@cern.ch
@@ -10,13 +11,12 @@ defaults:
   ('full', 'VeloOpen',   'MagDown',  '/LHCb/Collision22/Beam6800GeV-VeloOpen-MagDown-Excl-UT/Real Data/90000000/RAW'),
 ]%}
 
-{%- set platform_detdesc = "x86_64_v2-centos7-gcc12+detdesc-opt" %}
 
 {%- for category, velo_state, polarity, bk_path in datasets %}
 
 
 Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
-  application: Moore/v54r8p1@{{ platform_detdesc }}
+  application: Moore/v54r8p1@x86_64_v2-centos7-gcc12-opt
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
@@ -24,20 +24,21 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       - OK
   output: Data_Spruce.DST
   options:
-    entrypoint: cutbased_dilepton_trigger.options.Moore.options_spruce:main
+    entrypoint: cutbased_dilepton_trigger.options.Moore.options:spruce
     extra_options:
       input_raw_format: 0.5
       input_process: Hlt2
       input_type: RAW
+      evt_max: 10 # REMOVE AFTER TESTING
       output_type: ROOT
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
-      conditions_version: FIX
+      conditions_version: AlignmentV10_2023_05_09_LHCP
       scheduler_legacy_mode: False
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
-  application: DaVinci/v63r5@{{ platform_detdesc }}
+  application: DaVinci/v63r8@x86_64_v2-centos7-gcc12-opt
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
@@ -48,15 +49,16 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
     entrypoint: cutbased_dilepton_trigger.options.DaVinci.options:tuple_hlt2
     extra_options:
       input_raw_format: 0.5
-      input_type: RAW
+      input_type: ROOT
+      evt_max: 1000 # REMOVE AFTER TESTING
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
-      conditions_version: FIX
+      conditions_version: AlignmentV10_2023_05_09_LHCP
       input_process: "Hlt2"
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
-  application: DaVinci/v63r5@{{ platform_detdesc }}
+  application: DaVinci/v63r8@x86_64_v2-centos7-gcc12-opt
   input: 
     job_name: Data22_{{ velo_state }}_{{ polarity }}_SPRUCE
   output: Tuple_Spruce.ROOT
@@ -65,10 +67,11 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
     extra_options:
       input_raw_format: 0.5
       input_type: ROOT
+      evt_max: 1000 # REMOVE AFTER TESTING
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
-      conditions_version: FIX
+      conditions_version: AlignmentV10_2023_05_09_LHCP
       input_process: "Spruce"
 
 {%- endfor %}
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/options.py b/cutbased_dilepton_trigger/options/DaVinci/options.py
index e316801935..efb9b5b950 100644
--- a/cutbased_dilepton_trigger/options/DaVinci/options.py
+++ b/cutbased_dilepton_trigger/options/DaVinci/options.py
@@ -19,6 +19,7 @@ from itertools import product
 
 from .spruced_tuples import dielectron, dimuon
 
+
 def construct_tuple(line, fields, label, options: Options, sprucing=False):
     pvs = get_pvs()
 
@@ -54,10 +55,12 @@ def construct_tuple(line, fields, label, options: Options, sprucing=False):
                     "PE": F.ENERGY,
                     "P": F.P,
                     "ETA": F.ETA,
-                    "FOURMOMENTUM": F.FOURMOMENTUM,
                     "BPVIPCHI2": F.BPVIPCHI2(pvs),
                     "PIDe": F.PID_E,
                     "PIDmu": F.PID_MU,
+                    "PIDpi": F.PID_PI,
+                    "PIDk": F.PID_K,
+                    "PIDk": F.PID_P,
                 }
 
     if sprucing:
@@ -85,7 +88,8 @@ def construct_tuple(line, fields, label, options: Options, sprucing=False):
     if sprucing:
         spruce_dec = get_decreports("Spruce")
         spruce_decisions = F.DECISIONS(Lines=['SpruceRD_BToEEDecision', 'SpruceRD_BToMuMuDecision',
-                                             'SpruceRD_BuToKpEEDecision', 'SpruceRD_BuToKpMuMuDecision'], DecReports=spruce_dec)      
+                                              'SpruceRD_BuToKpEEDecision', 'SpruceRD_BuToKpMuMuDecision',
+                                              'SpruceRD_B0ToKpPimEEDecision', 'SpruceRD_B0ToKpPimMuMuDecision'], DecReports=spruce_dec)      
         evt_var_dict.update({"SPRUCE_DEC" : spruce_decisions})
 
     evt_variables = FC(evt_var_dict)
@@ -169,9 +173,9 @@ def tuple_spruce(options: Options):
      
     tuples = {}
 
-    for tuple_setup in (dielectron.Bs2EE, dielectron.Bu2JpsiK,\
-                        dimuon.Bs2MuMu, dimuon.Bu2JpsiK):
-        tuples.update(construct_tuple(tuple_setup.line, tuple_setup.fields, tuple_setup.tuple_label, options, True))
+    for dileptons in (dielectron, dimuon):
+        for tuple_setup in dileptons.values():
+            tuples.update(construct_tuple(tuple_setup["line"], tuple_setup["fields"], tuple_setup["tuple_label"], options, True))
     
     config = make_config(options, tuples)
     return config
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples.py
new file mode 100644
index 0000000000..9372377ff7
--- /dev/null
+++ b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples.py
@@ -0,0 +1,71 @@
+dielectron =    {
+                        "Bs2EE": {
+                            "line"        : "SpruceRD_BToEE",
+                            "fields"      : {
+                                                "B"  : "[B_s0 -> e+ e-]CC",
+                                                "eP" : "[B_s0 -> ^e+ e-]CC",
+                                                "eM" : "[B_s0 -> e+ ^e-]CC",
+                                            },
+                            "tuple_label" : "dielectronBs2EETuple"
+                        },
+                        "Bu2JpsiK": {
+                            "line"        : "SpruceRD_BuToKpEE",
+                            "fields"      : {
+                                                "B"   : "[B+ -> (J/psi(1S) -> e+ e-) K+]CC",
+                                                "Jpsi": "[B+ -> (^J/psi(1S) -> e+ e-) K+]CC",
+                                                "KP"  : "[B+ -> (J/psi(1S) -> e+ e-) ^K+]CC",
+                                                "eP"  : "[B+ -> (J/psi(1S) -> ^e+ e-) K+]CC",
+                                                "eM"  : "[B+ -> (J/psi(1S) -> e+ ^e-) K+]CC",
+                                            },
+                            "tuple_label" : "dielectronBu2JpsiKTuple"
+                        },
+                        "Bd2KstEE": {
+                            "line"        : "SpruceRD_B0ToKpPimEE",
+                            "fields"      : {
+                                                "B"   : "[B0 -> (J/psi(1S) -> e+ e-) (K*(892)0 -> K+ pi-)]CC",
+                                                "Kst" : "[B0 -> (J/psi(1S) -> e+ e-) (^K*(892)0 -> K+ pi-)]CC",
+                                                "KP"  : "[B0 -> (J/psi(1S) -> e+ e-) (K*(892)0 -> ^K+ pi-)]CC",
+                                                "piM" : "[B0 -> (J/psi(1S) -> e+ e-) (K*(892)0 -> K+ ^pi-)]CC",
+                                                "Jpsi": "[B0 -> (^J/psi(1S) -> e+ e-) (K*(892)0 -> K+ pi-)]CC",
+                                                "eP"  : "[B0 -> (J/psi(1S) -> ^e+ e-) (K*(892)0 -> K+ pi-)]CC",
+                                                "eM"  : "[B0 -> (J/psi(1S) -> e+ ^e-) (K*(892)0 -> K+ pi-)]CC",
+                                            },
+                            "tuple_label" : "dielectronBd2KstEETuple"
+                        }
+                }
+
+dimuon =        {
+                    "Bs2MuMu": {
+                        "line"        : "SpruceRD_BToMuMu",
+                        "fields"      : {
+                                            "B"  : "[B_s0 -> mu+ mu-]CC",
+                                            "muP" : "[B_s0 -> ^mu+ mu-]CC",
+                                            "muM" : "[B_s0 -> mu+ ^mu-]CC",
+                                        },
+                        "tuple_label" : "dimuonBs2MuMuTuple"
+                    },
+                    "Bu2JpsiK": {
+                        "line"        : "SpruceRD_BuToKpMuMu",
+                        "fields"      : {
+                                            "B"   : "[B+ -> (J/psi(1S) -> mu+ mu-) K+]CC",
+                                            "Jpsi": "[B+ -> (^J/psi(1S) -> mu+ mu-) K+]CC",
+                                            "KP"  : "[B+ -> (J/psi(1S) -> mu+ mu-) ^K+]CC",
+                                            "muP"  : "[B+ -> (J/psi(1S) -> ^mu+ mu-) K+]CC",
+                                            "muM"  : "[B+ -> (J/psi(1S) -> mu+ ^mu-) K+]CC",
+                                        },
+                        "tuple_label" : "dimuonBu2JpsiKTuple"
+                    },
+                    "Bd2KstMuMu": {
+                        "line"        : "SpruceRD_B0ToKpPimMuMu",
+                        "fields"      : {
+                                            "B"   : "[B0 -> (J/psi(1S) -> mu+ mu-) (K*(892)0 -> K+ pi-)]CC",
+                                            "Kst" : "[B0 -> (J/psi(1S) -> mu+ mu-) (^K*(892)0 -> K+ pi-)]CC",
+                                            "KP"  : "[B0 -> (J/psi(1S) -> mu+ mu-) (K*(892)0 -> ^K+ pi-)]CC",
+                                            "piM" : "[B0 -> (J/psi(1S) -> mu+ mu-) (K*(892)0 -> K+ ^pi-)]CC",
+                                            "Jpsi": "[B0 -> (^J/psi(1S) -> mu+ mu-) (K*(892)0 -> K+ pi-)]CC",
+                                            "muP" : "[B0 -> (J/psi(1S) -> ^mu+ mu-) (K*(892)0 -> K+ pi-)]CC",
+                                            "muM" : "[B0 -> (J/psi(1S) -> mu+ ^mu-) (K*(892)0 -> K+ pi-)]CC",
+                                        },
+                        "tuple_label" : "dimuonBd2KstMuMuTuple"
+                    }
+                }
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/_init_.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/_init_.py
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bs2EE.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bs2EE.py
deleted file mode 100644
index e3f90a84d0..0000000000
--- a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bs2EE.py
+++ /dev/null
@@ -1,7 +0,0 @@
-line = "Hlt2RD_BToEE"
-fields = {
-            "B"  : "[B_s0 -> e+ e-]CC",
-            "eP" : "[B_s0 -> ^e+ e-]CC",
-            "eM" : "[B_s0 -> e+ ^e-]CC",
-         }
-tuple_label = "dielectronBs2EETuple"
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bu2JpsiK.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bu2JpsiK.py
deleted file mode 100644
index b43dece545..0000000000
--- a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dielectron/Bu2JpsiK.py
+++ /dev/null
@@ -1,9 +0,0 @@
-line = "Hlt2RD_BuToKpEE"
-fields = {
-            "B"   : "[B+ -> (J/psi(1S) -> e+ e-) K+]CC",
-            "Jpsi": "[B+ -> (^J/psi(1S) -> e+ e-) K+]CC",
-            "KP"  : "[B+ -> (J/psi(1S) -> e+ e-) ^K+]CC",
-            "eP"  : "[B+ -> (J/psi(1S) -> ^e+ e-) K+]CC",
-            "eM"  : "[B+ -> (J/psi(1S) -> e+ ^e-) K+]CC",
-         }
-tuple_label = "dielectronBu2JpsiKTuple"
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bs2MuMu.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bs2MuMu.py
deleted file mode 100644
index 2b09fef401..0000000000
--- a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bs2MuMu.py
+++ /dev/null
@@ -1,7 +0,0 @@
-line = "Hlt2RD_BToMuMu"
-fields = {
-            "B"  : "[B_s0 -> mu+ mu-]CC",
-            "eP" : "[B_s0 -> ^mu+ mu-]CC",
-            "eM" : "[B_s0 -> mu+ ^mu-]CC",
-         }
-tuple_label = "dimuonBs2MuMuTuple"
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py b/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py
deleted file mode 100644
index b4a1ba0807..0000000000
--- a/cutbased_dilepton_trigger/options/DaVinci/spruced_tuples/dimuon/Bu2JpsiK.py
+++ /dev/null
@@ -1,9 +0,0 @@
-line = "Hlt2RD_BuToKpMuMu"
-fields = {
-            "B"   : "[B+ -> (J/psi(1S) -> mu+ mu-) K+]CC",
-            "Jpsi": "[B+ -> (^J/psi(1S) -> mu+ mu-) K+]CC",
-            "KP"  : "[B+ -> (J/psi(1S) -> mu+ mu-) ^K+]CC",
-            "eP"  : "[B+ -> (J/psi(1S) -> ^mu+ mu-) K+]CC",
-            "eM"  : "[B+ -> (J/psi(1S) -> mu+ ^mu-) K+]CC",
-         }
-tuple_label = "dielectronBu2JpsiKTuple"
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/Moore/make_lines.py b/cutbased_dilepton_trigger/options/Moore/make_lines.py
index d6446d6599..e81d3f7aee 100644
--- a/cutbased_dilepton_trigger/options/Moore/make_lines.py
+++ b/cutbased_dilepton_trigger/options/Moore/make_lines.py
@@ -11,9 +11,10 @@
 
 from Hlt2Conf.lines.rd import b_to_ll_hlt2, b_to_xll_hlt2, b_to_kstarmumu, b_to_hemu, b_to_ll_spruce, b_to_xll_spruce
 from Hlt2Conf.lines.inclusive_detached_dilepton import cutbased_dilepton_lines, inclusive_detached_dilepton_trigger
+from Hlt2Conf.lines import topological_b 
 
 def hlt2_lines():
-    linesets = [cutbased_dilepton_lines.all_lines,
+    linesets = [cutbased_dilepton_lines.all_lines, topological_b.all_lines,
                 b_to_ll_hlt2.all_lines, b_to_xll_hlt2.all_lines,
                 b_to_kstarmumu.all_lines, b_to_hemu.all_lines,
                 inclusive_detached_dilepton_trigger.all_lines]
diff --git a/cutbased_dilepton_trigger/options/Moore/options_hlt2.py b/cutbased_dilepton_trigger/options/Moore/options.py
similarity index 85%
rename from cutbased_dilepton_trigger/options/Moore/options_hlt2.py
rename to cutbased_dilepton_trigger/options/Moore/options.py
index 899cdadf3f..3689caa829 100644
--- a/cutbased_dilepton_trigger/options/Moore/options_hlt2.py
+++ b/cutbased_dilepton_trigger/options/Moore/options.py
@@ -10,6 +10,7 @@
 ###############################################################################
 
 from Moore import Options, run_moore
+from .make_lines import spruce_lines
 
 from RecoConf.hlt2_global_reco import make_light_reconstruction
 from RecoConf.reconstruction_objects import reconstruction
@@ -20,10 +21,8 @@ public_tools=[stateProvider_with_simplified_geom()]
 from RecoConf.decoders import default_ft_decoding_version
 default_ft_decoding_version.global_bind(value=4)
 
-from .make_lines import hlt2_lines
-
-def alg_config(options: Options):
-    with reconstruction.bind(from_file=False),\
+def spruce(options: Options):
+    with reconstruction.bind(from_file=True, spruce=True),\
            make_light_reconstruction.bind(skipUT=True, use_pr_kf=False):
-            config = run_moore(options, hlt2_lines, public_tools)
-            return config
\ No newline at end of file
+            config = run_moore(options, spruce_lines, public_tools)
+            return config
diff --git a/cutbased_dilepton_trigger/options/Moore/options_spruce.py b/cutbased_dilepton_trigger/options/Moore/options_spruce.py
deleted file mode 100644
index 2ede7c479b..0000000000
--- a/cutbased_dilepton_trigger/options/Moore/options_spruce.py
+++ /dev/null
@@ -1,29 +0,0 @@
-###############################################################################
-# (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.                                       #
-###############################################################################
-from Configurables import Moore
-from Moore import options
-from .make_lines import spruce_lines
-
-options.input_raw_format = 0.5
-options.input_type = 'ROOT'
-
-options.evt_max = -1
-options.simulation = True
-options.data_type = 'Upgrade'
-
-options.output_file = 'Data_Spruce.dst'
-options.output_type = 'ROOT'
-
-moore = Moore()
-
-moore.spruce = True
-moore.from_file = True
-options.lines_maker = spruce_lines
\ No newline at end of file
-- 
GitLab


From f4397b6b563afeaea51174ffe430491812d253e4 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 7 Jun 2023 17:36:02 +0200
Subject: [PATCH 08/18] Removed evt_max specification used in earlier testing

---
 cutbased_dilepton_trigger/info.yaml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index c1d8e50e82..cdeb0724d2 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -29,7 +29,6 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       input_raw_format: 0.5
       input_process: Hlt2
       input_type: RAW
-      evt_max: 10 # REMOVE AFTER TESTING
       output_type: ROOT
       simulation: False
       data_type: "Upgrade"
@@ -50,7 +49,6 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
     extra_options:
       input_raw_format: 0.5
       input_type: ROOT
-      evt_max: 1000 # REMOVE AFTER TESTING
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
@@ -67,7 +65,6 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
     extra_options:
       input_raw_format: 0.5
       input_type: ROOT
-      evt_max: 1000 # REMOVE AFTER TESTING
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
-- 
GitLab


From 575d7bfe4ec06cc447fb4fc2e38c7c19949b7b31 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 7 Jun 2023 17:43:35 +0200
Subject: [PATCH 09/18] Fixed input type error for unspruced tupling

---
 cutbased_dilepton_trigger/info.yaml                | 2 +-
 cutbased_dilepton_trigger/options/Moore/options.py | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index cdeb0724d2..51294396a4 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -48,7 +48,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
     entrypoint: cutbased_dilepton_trigger.options.DaVinci.options:tuple_hlt2
     extra_options:
       input_raw_format: 0.5
-      input_type: ROOT
+      input_type: RAW
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
diff --git a/cutbased_dilepton_trigger/options/Moore/options.py b/cutbased_dilepton_trigger/options/Moore/options.py
index 3689caa829..e45483859b 100644
--- a/cutbased_dilepton_trigger/options/Moore/options.py
+++ b/cutbased_dilepton_trigger/options/Moore/options.py
@@ -10,7 +10,7 @@
 ###############################################################################
 
 from Moore import Options, run_moore
-from .make_lines import spruce_lines
+from .make_lines import hlt2_lines, spruce_lines
 
 from RecoConf.hlt2_global_reco import make_light_reconstruction
 from RecoConf.reconstruction_objects import reconstruction
@@ -21,6 +21,12 @@ public_tools=[stateProvider_with_simplified_geom()]
 from RecoConf.decoders import default_ft_decoding_version
 default_ft_decoding_version.global_bind(value=4)
 
+def hlt2(options: Options):
+    with reconstruction.bind(from_file=False),\
+           make_light_reconstruction.bind(skipUT=True, use_pr_kf=False):
+            config = run_moore(options, hlt2_lines, public_tools)
+            return config
+
 def spruce(options: Options):
     with reconstruction.bind(from_file=True, spruce=True),\
            make_light_reconstruction.bind(skipUT=True, use_pr_kf=False):
-- 
GitLab


From 060940ff7137f347006c7ef371777193d002af71 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 7 Jun 2023 18:18:19 +0200
Subject: [PATCH 10/18] Switched alignment tag to new tag,
 AlignmentV11_2023_06_01

---
 cutbased_dilepton_trigger/info.yaml                   | 6 +++---
 cutbased_dilepton_trigger/options/Moore/make_lines.py | 9 ++-------
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index 51294396a4..661bb1c1be 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -33,7 +33,7 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
-      conditions_version: AlignmentV10_2023_05_09_LHCP
+      conditions_version: AlignmentV11_2023_06_01
       scheduler_legacy_mode: False
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
@@ -52,7 +52,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
-      conditions_version: AlignmentV10_2023_05_09_LHCP
+      conditions_version: AlignmentV11_2023_06_01
       input_process: "Hlt2"
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
@@ -68,7 +68,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
-      conditions_version: AlignmentV10_2023_05_09_LHCP
+      conditions_version: AlignmentV11_2023_06_01
       input_process: "Spruce"
 
 {%- endfor %}
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/Moore/make_lines.py b/cutbased_dilepton_trigger/options/Moore/make_lines.py
index e81d3f7aee..ac6a56a74a 100644
--- a/cutbased_dilepton_trigger/options/Moore/make_lines.py
+++ b/cutbased_dilepton_trigger/options/Moore/make_lines.py
@@ -14,14 +14,9 @@ from Hlt2Conf.lines.inclusive_detached_dilepton import cutbased_dilepton_lines,
 from Hlt2Conf.lines import topological_b 
 
 def hlt2_lines():
-    linesets = [cutbased_dilepton_lines.all_lines, topological_b.all_lines,
-                b_to_ll_hlt2.all_lines, b_to_xll_hlt2.all_lines,
-                b_to_kstarmumu.all_lines, b_to_hemu.all_lines,
-                inclusive_detached_dilepton_trigger.all_lines]
     hlt2_lines = []
-    for lineset in linesets:
-        for line in lineset.values():
-            hlt2_lines.append(line())
+    for line in cutbased_dilepton_lines.all_lines.values():
+        hlt2_lines.append(line())
     return hlt2_lines
 
 def spruce_lines():
-- 
GitLab


From 61ca06eb6b619c33d7816f31ae0d8320f574ebd9 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 7 Jun 2023 18:28:41 +0200
Subject: [PATCH 11/18] Tidied up, removed redundant code

---
 .../options/DaVinci/options.py                | 21 -------------------
 .../options/Moore/make_lines.py               | 10 +--------
 2 files changed, 1 insertion(+), 30 deletions(-)

diff --git a/cutbased_dilepton_trigger/options/DaVinci/options.py b/cutbased_dilepton_trigger/options/DaVinci/options.py
index efb9b5b950..9101e9d02f 100644
--- a/cutbased_dilepton_trigger/options/DaVinci/options.py
+++ b/cutbased_dilepton_trigger/options/DaVinci/options.py
@@ -102,27 +102,6 @@ def construct_tuple(line, fields, label, options: Options, sprucing=False):
         if particle+charge in fields:
             variables.update({particle+charge: FC(daughter_functors)})
 
-    mctruth = MCTruthAndBkgCat(data, name=f'MCTruthAndBkgCat_{label}')
-    
-    MCTRUTH = lambda func: F.MAP_INPUT(Functor=func, Relations=mctruth.MCAssocTable)
-    trueid_bkgcat_info = {
-        # Important note: specify an invalid value for integer functors if there exists no truth info.
-        #                 The invalid value for floating point functors is set to nan.
-        "TRUEID": F.VALUE_OR(0) @ MCTRUTH(F.PARTICLE_ID),
-        "TRUEKEY": F.VALUE_OR(-1) @ MCTRUTH(F.OBJECT_KEY),
-        "TRUEPT": MCTRUTH(F.PT),
-        "TRUEPX": MCTRUTH(F.PX),
-        "TRUEPY": MCTRUTH(F.PY),
-        "TRUEPZ": MCTRUTH(F.PZ),
-        "TRUEENERGY": MCTRUTH(F.ENERGY),
-        "TRUEP": MCTRUTH(F.P),
-        "TRUEETA": MCTRUTH(F.ETA),
-        "TRUEFOURMOMENTUM": MCTRUTH(F.FOURMOMENTUM),
-        "BKGCAT": F.BKGCAT(Relations=mctruth.BkgCatTable)
-    }
-    for field in variables.keys():
-        variables[field] += FC(trueid_bkgcat_info)
-
     funtuple = Funtuple(name=label,
                             tuple_name="DecayTree",
                             fields=fields,
diff --git a/cutbased_dilepton_trigger/options/Moore/make_lines.py b/cutbased_dilepton_trigger/options/Moore/make_lines.py
index ac6a56a74a..41d1e003d6 100644
--- a/cutbased_dilepton_trigger/options/Moore/make_lines.py
+++ b/cutbased_dilepton_trigger/options/Moore/make_lines.py
@@ -9,15 +9,7 @@
 # or submit itself to any jurisdiction.                                       #
 ###############################################################################
 
-from Hlt2Conf.lines.rd import b_to_ll_hlt2, b_to_xll_hlt2, b_to_kstarmumu, b_to_hemu, b_to_ll_spruce, b_to_xll_spruce
-from Hlt2Conf.lines.inclusive_detached_dilepton import cutbased_dilepton_lines, inclusive_detached_dilepton_trigger
-from Hlt2Conf.lines import topological_b 
-
-def hlt2_lines():
-    hlt2_lines = []
-    for line in cutbased_dilepton_lines.all_lines.values():
-        hlt2_lines.append(line())
-    return hlt2_lines
+from Hlt2Conf.lines.rd import b_to_ll_spruce, b_to_xll_spruce
 
 def spruce_lines():
     linesets = [b_to_ll_spruce.sprucing_lines, b_to_xll_spruce.sprucing_lines]
-- 
GitLab


From 64d08c08d28eb0877f7e7d00381bea7ceecafbc7 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 7 Jun 2023 19:27:52 +0200
Subject: [PATCH 12/18] Fix to issue in previous commit; further tidying

---
 cutbased_dilepton_trigger/info.yaml           |  1 +
 .../options/Moore/make_lines.py               | 20 -------------------
 .../options/Moore/options.py                  | 16 +++++++++------
 3 files changed, 11 insertions(+), 26 deletions(-)
 delete mode 100644 cutbased_dilepton_trigger/options/Moore/make_lines.py

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index 661bb1c1be..9b97178974 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -30,6 +30,7 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       input_process: Hlt2
       input_type: RAW
       output_type: ROOT
+      evt_max: 10
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
diff --git a/cutbased_dilepton_trigger/options/Moore/make_lines.py b/cutbased_dilepton_trigger/options/Moore/make_lines.py
deleted file mode 100644
index 41d1e003d6..0000000000
--- a/cutbased_dilepton_trigger/options/Moore/make_lines.py
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# (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.                                       #
-###############################################################################
-
-from Hlt2Conf.lines.rd import b_to_ll_spruce, b_to_xll_spruce
-
-def spruce_lines():
-    linesets = [b_to_ll_spruce.sprucing_lines, b_to_xll_spruce.sprucing_lines]
-    spruce_lines = []
-    for lineset in linesets:
-        for line in lineset.values():
-            spruce_lines.append(line())
-    return spruce_lines
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/Moore/options.py b/cutbased_dilepton_trigger/options/Moore/options.py
index e45483859b..c01d210015 100644
--- a/cutbased_dilepton_trigger/options/Moore/options.py
+++ b/cutbased_dilepton_trigger/options/Moore/options.py
@@ -10,7 +10,6 @@
 ###############################################################################
 
 from Moore import Options, run_moore
-from .make_lines import hlt2_lines, spruce_lines
 
 from RecoConf.hlt2_global_reco import make_light_reconstruction
 from RecoConf.reconstruction_objects import reconstruction
@@ -21,11 +20,16 @@ public_tools=[stateProvider_with_simplified_geom()]
 from RecoConf.decoders import default_ft_decoding_version
 default_ft_decoding_version.global_bind(value=4)
 
-def hlt2(options: Options):
-    with reconstruction.bind(from_file=False),\
-           make_light_reconstruction.bind(skipUT=True, use_pr_kf=False):
-            config = run_moore(options, hlt2_lines, public_tools)
-            return config
+from Hlt2Conf.lines.rd import b_to_ll_spruce, b_to_xll_spruce
+
+def spruce_lines():
+    linesets = [b_to_ll_spruce.sprucing_lines, b_to_xll_spruce.sprucing_lines]
+    spruce_lines = []
+    for lineset in linesets:
+        for line in lineset.values():
+            spruce_lines.append(line())
+    return spruce_lines
+
 
 def spruce(options: Options):
     with reconstruction.bind(from_file=True, spruce=True),\
-- 
GitLab


From c856e5e668909263d9fc18060ac0c4a81cbc5898 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 7 Jun 2023 19:46:17 +0200
Subject: [PATCH 13/18] Removed test evt_max

---
 cutbased_dilepton_trigger/info.yaml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index 9b97178974..e448dd1560 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -14,7 +14,6 @@ defaults:
 
 {%- for category, velo_state, polarity, bk_path in datasets %}
 
-
 Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
   application: Moore/v54r8p1@x86_64_v2-centos7-gcc12-opt
   input: 
@@ -30,7 +29,6 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       input_process: Hlt2
       input_type: RAW
       output_type: ROOT
-      evt_max: 10
       simulation: False
       data_type: "Upgrade"
       geometry_version: trunk
-- 
GitLab


From 96225a8783e12ccd35787a02a6926586fe02f3dd Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Wed, 19 Jul 2023 13:56:49 +0200
Subject: [PATCH 14/18] Updates to anaprod, new alignment tags and Moore +
 DaVinci versions (with compatibility updates)

---
 cutbased_dilepton_trigger/info.yaml           | 20 ++++++-------
 .../options/DaVinci/options.py                | 29 +++++++------------
 2 files changed, 21 insertions(+), 28 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index e448dd1560..295d1e7989 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -1,5 +1,5 @@
 defaults:
-  automatically_configure: no 
+  automatically_configure: no
   wg: RD
   inform:
     - jamie.gooding@cern.ch
@@ -15,7 +15,7 @@ defaults:
 {%- for category, velo_state, polarity, bk_path in datasets %}
 
 Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
-  application: Moore/v54r8p1@x86_64_v2-centos7-gcc12-opt
+  application: Moore/v54r13
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
@@ -31,12 +31,12 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       output_type: ROOT
       simulation: False
       data_type: "Upgrade"
-      geometry_version: trunk
-      conditions_version: AlignmentV11_2023_06_01
+      dddb_tag: trunk
+      conddb_tag: AlignmentV11_2023_06_01
       scheduler_legacy_mode: False
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
-  application: DaVinci/v63r8@x86_64_v2-centos7-gcc12-opt
+  application: DaVinci/v63r8p1
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
@@ -50,12 +50,12 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
       input_type: RAW
       simulation: False
       data_type: "Upgrade"
-      geometry_version: trunk
-      conditions_version: AlignmentV11_2023_06_01
+      dddb_tag: trunk
+      conddb_tag: AlignmentV11_2023_06_01
       input_process: "Hlt2"
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
-  application: DaVinci/v63r8@x86_64_v2-centos7-gcc12-opt
+  application: DaVinci/v63r8p1
   input: 
     job_name: Data22_{{ velo_state }}_{{ polarity }}_SPRUCE
   output: Tuple_Spruce.ROOT
@@ -66,8 +66,8 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
       input_type: ROOT
       simulation: False
       data_type: "Upgrade"
-      geometry_version: trunk
-      conditions_version: AlignmentV11_2023_06_01
+      dddb_tag: trunk
+      conddb_tag: AlignmentV11_2023_06_01
       input_process: "Spruce"
 
 {%- endfor %}
\ No newline at end of file
diff --git a/cutbased_dilepton_trigger/options/DaVinci/options.py b/cutbased_dilepton_trigger/options/DaVinci/options.py
index 9101e9d02f..46247a4b89 100644
--- a/cutbased_dilepton_trigger/options/DaVinci/options.py
+++ b/cutbased_dilepton_trigger/options/DaVinci/options.py
@@ -72,25 +72,18 @@ def construct_tuple(line, fields, label, options: Options, sprucing=False):
     hdr_filter = create_lines_filter(f"HDRFilter_{label}", [line])
 
     odin = get_odin()
-    hlt1_dec = get_decreports("Hlt1")
-    hlt2_dec = get_decreports("Hlt2")
-
-    hlt1_decisions = F.DECISIONS(Lines=['Hlt1TrackMuonMVADecision','Hlt1DiMuonLowMassDecision',
-                                        'Hlt1DiMuonHighMassDecision', 'Hlt1LowPtDiMuonDecision',
-                                        'Hlt1TwoTrackMVADecision'], DecReports=hlt1_dec)
-    hlt2_decisions = F.DECISIONS(Lines=['Hlt2CutBasedInclDielectronDecision','Hlt2CutBasedInclDielectronPlusTrackDecision','Hlt2CutBasedInclDielectronPlusTwoTrackDecision',
-                                        'Hlt2CutBasedInclDimuonDecision','Hlt2CutBasedInclDimuonPlusTrackDecision','Hlt2CutBasedInclDimuonPlusTwoTrackDecision'], DecReports=hlt2_dec)
-
-    evt_var_dict = {
-                    "HLT1_DEC" : hlt1_decisions,
-                    "HLT2_DEC" : hlt2_decisions
-    }
+    DecReports = [get_decreports("Hlt1"), get_decreports("Hlt2")]
+    linesets = [['Hlt1TrackMuonMVADecision','Hlt1DiMuonLowMassDecision','Hlt1DiMuonHighMassDecision', 'Hlt1LowPtDiMuonDecision','Hlt1TwoTrackMVADecision'],
+                ['Hlt2CutBasedInclDielectronDecision','Hlt2CutBasedInclDielectronPlusTrackDecision','Hlt2CutBasedInclDielectronPlusTwoTrackDecision',
+                 'Hlt2CutBasedInclDimuonDecision','Hlt2CutBasedInclDimuonPlusTrackDecision','Hlt2CutBasedInclDimuonPlusTwoTrackDecision']]
     if sprucing:
-        spruce_dec = get_decreports("Spruce")
-        spruce_decisions = F.DECISIONS(Lines=['SpruceRD_BToEEDecision', 'SpruceRD_BToMuMuDecision',
-                                              'SpruceRD_BuToKpEEDecision', 'SpruceRD_BuToKpMuMuDecision',
-                                              'SpruceRD_B0ToKpPimEEDecision', 'SpruceRD_B0ToKpPimMuMuDecision'], DecReports=spruce_dec)      
-        evt_var_dict.update({"SPRUCE_DEC" : spruce_decisions})
+        DecReports += [get_decreports("Spruce")]
+        linesets += [['SpruceRD_BToEEDecision', 'SpruceRD_BToMuMuDecision','SpruceRD_BuToKpEEDecision', 'SpruceRD_BuToKpMuMuDecision','SpruceRD_B0ToKpPimEEDecision', 'SpruceRD_B0ToKpPimMuMuDecision']]
+
+    evt_var_dict = {}
+    for DecReport, lineset in zip(DecReports, linesets):
+        for line in lineset:
+            evt_var_dict.update({f"{line}_DEC" : F.DECISION(DecReports=DecReport, trigger_line_name=line)})
 
     evt_variables = FC(evt_var_dict)
     variables = {
-- 
GitLab


From 1bf3980de2ae0794cfc7b2dbca588a2e95e8178c Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Mon, 7 Aug 2023 12:31:45 +0200
Subject: [PATCH 15/18] Update of Moore/DaVinci versions

---
 cutbased_dilepton_trigger/info.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index 295d1e7989..a0dd5f0397 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -15,7 +15,7 @@ defaults:
 {%- for category, velo_state, polarity, bk_path in datasets %}
 
 Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
-  application: Moore/v54r13
+  application: Moore/v54r15
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
-- 
GitLab


From 6e8b8f51d3cb61d1609c4eb6fb19b6932905ccb1 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Mon, 7 Aug 2023 12:48:28 +0200
Subject: [PATCH 16/18] Update alignment version

---
 cutbased_dilepton_trigger/info.yaml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index a0dd5f0397..f7e5f7dab8 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -32,7 +32,7 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       simulation: False
       data_type: "Upgrade"
       dddb_tag: trunk
-      conddb_tag: AlignmentV11_2023_06_01
+      conddb_tag: AlignmentV13_2023_07_24
       scheduler_legacy_mode: False
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
@@ -51,7 +51,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
       simulation: False
       data_type: "Upgrade"
       dddb_tag: trunk
-      conddb_tag: AlignmentV11_2023_06_01
+      conddb_tag: AlignmentV13_2023_07_24
       input_process: "Hlt2"
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
@@ -67,7 +67,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
       simulation: False
       data_type: "Upgrade"
       dddb_tag: trunk
-      conddb_tag: AlignmentV11_2023_06_01
+      conddb_tag: AlignmentV13_2023_07_24
       input_process: "Spruce"
 
 {%- endfor %}
\ No newline at end of file
-- 
GitLab


From f1eba5f2e4dfbe0dc481f40e83019fdedf58e042 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <james.andrew.gooding@cern.ch>
Date: Wed, 23 Aug 2023 08:44:23 +0200
Subject: [PATCH 17/18] Update DaVinci versions in info.yaml

---
 cutbased_dilepton_trigger/info.yaml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index f7e5f7dab8..1c0bba1581 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -36,7 +36,7 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       scheduler_legacy_mode: False
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
-  application: DaVinci/v63r8p1
+  application: DaVinci/v63r11
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
@@ -55,7 +55,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
       input_process: "Hlt2"
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
-  application: DaVinci/v63r8p1
+  application: DaVinci/v63r11
   input: 
     job_name: Data22_{{ velo_state }}_{{ polarity }}_SPRUCE
   output: Tuple_Spruce.ROOT
@@ -70,4 +70,4 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
       conddb_tag: AlignmentV13_2023_07_24
       input_process: "Spruce"
 
-{%- endfor %}
\ No newline at end of file
+{%- endfor %}
-- 
GitLab


From 3ef7eef959e5540039cd21d5af00032523ddb517 Mon Sep 17 00:00:00 2001
From: Jamie Gooding <jamie.gooding@cern.ch>
Date: Fri, 8 Sep 2023 10:53:33 +0200
Subject: [PATCH 18/18] Updated Moore, DaVinci versions

---
 cutbased_dilepton_trigger/info.yaml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cutbased_dilepton_trigger/info.yaml b/cutbased_dilepton_trigger/info.yaml
index f7e5f7dab8..424dc0d8df 100644
--- a/cutbased_dilepton_trigger/info.yaml
+++ b/cutbased_dilepton_trigger/info.yaml
@@ -15,7 +15,7 @@ defaults:
 {%- for category, velo_state, polarity, bk_path in datasets %}
 
 Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
-  application: Moore/v54r15
+  application: Moore/v54r16
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
@@ -36,7 +36,7 @@ Data22_{{ velo_state }}_{{ polarity }}_SPRUCE:
       scheduler_legacy_mode: False
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
-  application: DaVinci/v63r8p1
+  application: DaVinci/v63r12
   input: 
     bk_query: {{ bk_path }}
     dq_flags:
@@ -55,7 +55,7 @@ Tuples22_{{ velo_state }}_{{ polarity }}_from_HLT2:
       input_process: "Hlt2"
 
 Tuples22_{{ velo_state }}_{{ polarity }}_from_SPRUCE:
-  application: DaVinci/v63r8p1
+  application: DaVinci/v63r12
   input: 
     job_name: Data22_{{ velo_state }}_{{ polarity }}_SPRUCE
   output: Tuple_Spruce.ROOT
-- 
GitLab