diff --git a/Hlt/Hlt2Conf/CMakeLists.txt b/Hlt/Hlt2Conf/CMakeLists.txt
index ba1e2b928381fdbfea8bb4fa292c2b606e89551f..3f434ea961e178819e30e5b7adeb1741ba47062d 100644
--- a/Hlt/Hlt2Conf/CMakeLists.txt
+++ b/Hlt/Hlt2Conf/CMakeLists.txt
@@ -72,6 +72,22 @@ if(BUILD_TESTING AND NOT USE_DD4HEP)
             Hlt2Conf.hlt2_SMOG2_thor_data_2022_HLT2rerun_check_output
             Hlt2Conf.sprucing.test_excl_spruce_2022_data
             Hlt2Conf.sprucing.test_pass_spruce_2022_data
+            Hlt2Conf.sprucing.test_excl_spruce_2022_data_b2cc_check
+            Hlt2Conf.sprucing.test_excl_spruce_2022_data_b2oc_check
+            Hlt2Conf.sprucing.test_excl_spruce_2022_data_bandq_check
+            Hlt2Conf.sprucing.test_excl_spruce_2022_data_qee_check
+            Hlt2Conf.sprucing.test_excl_spruce_2022_data_rd_check
+            Hlt2Conf.sprucing.test_excl_spruce_2022_data_sl_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_b2cc_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_b2oc_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_bandq_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_bnoc_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_charm_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_charmtodimuon_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_dimuonnoip_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_qee_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_rd_check
+            Hlt2Conf.sprucing.test_pass_spruce_2022_data_sl_check
         PROPERTY
             DISABLED TRUE
     )
diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_2022_data.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_2022_data.py
new file mode 100644
index 0000000000000000000000000000000000000000..28275c191186f2851af57500ffba150173544570
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_check_2022_data.py
@@ -0,0 +1,218 @@
+###############################################################################
+# (c) Copyright 2019-2023 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.                                       #
+###############################################################################
+"""Test sprucing over 2022 data.
+
+"""
+from Hlt2Conf.lines.DiMuonNoIP import all_lines as hlt2_DiMuonNoIP_lines
+from Hlt2Conf.lines.charmonium_to_dimuon import all_lines as hlt2_charmonium_to_dimuon_lines
+from Hlt2Conf.lines.bnoc import all_lines as hlt2_bnoc_lines
+from Hlt2Conf.lines.semileptonic import all_lines as hlt2_sl_lines
+from Hlt2Conf.lines.rd import all_lines as hlt2_rd_lines
+from Hlt2Conf.lines.qee import all_lines as hlt2_qee_lines
+from Hlt2Conf.lines.charm import all_lines as hlt2_charm_lines
+from Hlt2Conf.lines.bandq import all_lines as hlt2_bandq_lines
+from Hlt2Conf.lines.b_to_open_charm import all_lines as hlt2_b2oc_lines
+from Hlt2Conf.lines.b_to_charmonia import all_lines as hlt2_b2cc_lines
+from Hlt2Conf.lines.qee import sprucing_lines as qee_lines
+from Hlt2Conf.lines.rd import sprucing_lines as rd_lines
+from Hlt2Conf.lines.semileptonic import sprucing_lines as sl_lines
+from Hlt2Conf.lines.bandq import sprucing_lines as bandq_lines
+from Hlt2Conf.lines.b_to_open_charm import sprucing_lines as b2oc_lines
+from Hlt2Conf.lines.b_to_charmonia import sprucing_lines as b2cc_lines
+from Hlt2Conf.check_output import (
+    check_particlesandrelations,
+    check_decreports,
+)
+from PyConf.application import configured_ann_svc
+from GaudiConf.reading import do_unpacking
+from Configurables import (
+    ApplicationMgr,
+    LHCbApp,
+    IODataManager,
+    HistogramPersistencySvc,
+)
+from GaudiConf import IOExtension
+import argparse
+
+import cppyy
+
+import GaudiPython as GP
+LHCb = GP.gbl.LHCb
+
+
+def error(msg):
+    print("CheckOutput ERROR", msg)
+
+
+def spruce_lines_running(wg):
+    linedict = {
+        "b2cc": b2cc_lines,
+        "b2oc": b2oc_lines,
+        "bandq": bandq_lines,
+        "qee": qee_lines,
+        "rd": rd_lines,
+        "sl": sl_lines,
+    }
+    return [item for item in list(linedict[wg].keys())]
+
+
+def hlt2_lines_running(wg):
+    linedict = {
+        "b2oc": hlt2_b2oc_lines,
+        "bandq": hlt2_bandq_lines,
+        "b2cc": hlt2_b2cc_lines,
+        "sl": hlt2_sl_lines,
+        "charm": hlt2_charm_lines,
+        "qee": hlt2_qee_lines,
+        "rd": hlt2_rd_lines,
+        "bnoc": hlt2_bnoc_lines,
+        "charmtodimuon": hlt2_charmonium_to_dimuon_lines,
+        "dimuonnoip": hlt2_DiMuonNoIP_lines
+    }
+    return [item for item in list(linedict[wg].keys())]
+
+
+# Argument parser
+parser = argparse.ArgumentParser()
+parser.add_argument('input', type=str, help='Input filename')
+parser.add_argument('manifest', type=str, help='JSON manifest dump')
+parser.add_argument('job_type', type=str, help='excl or pass')
+parser.add_argument(
+    'stream', type=str, help='Stream to test as defined in options')
+
+args = parser.parse_args()
+
+assert args.job_type == "excl" or args.job_type == "pass", "job type is pass for Turbo process or excl for Spruce process"
+
+print("input ", args.input)
+print("manifest ", args.manifest)
+print("job_type ", args.job_type)
+print("stream ", args.stream)
+
+# Prepare application
+LHCbApp(
+    DataType="Upgrade",
+    Simulation=False,
+)
+
+# settings for passthrough data. Only one fired line of first evt is checked in a test.
+#mymanifest = "pass_" + args.stream + "_PackedLocations.json"
+process = "Turbo" if args.job_type == "pass" else "Spruce"
+
+algs = do_unpacking(
+    cfg=None,
+    input_process=process,
+    stream=args.stream,
+    simulation=False,
+    raw_event_format=0.3)
+
+mgr = ApplicationMgr(TopAlg=algs)
+mgr.ExtSvc += [configured_ann_svc(json_file=args.manifest)]
+
+IOExtension().inputFiles([args.input], clear=True)
+# Disable warning about not being able to navigate ancestors
+IODataManager(DisablePFNWarning=True)
+# Disable warning about histogram saving not being required
+HistogramPersistencySvc(OutputLevel=5)
+
+appMgr = GP.AppMgr()
+TES = appMgr.evtsvc()
+
+# MonkeyPatch for the fact that RegistryEntry.__bool__
+# changed in newer cppyy. Proper fix should go into Gaudi
+cppyy.gbl.DataSvcHelpers.RegistryEntry.__bool__ = lambda x: True
+
+raweventloc = f'/Event/{args.stream}/RawEvent'
+
+appMgr.run(1)
+TES.dump()
+nevt = 1
+for i in range(nevt):
+    print('Checking next event.')
+    if not TES['/Event']:
+        break
+
+    # Check HLT2 DstData bank is persisted through the Sprucing, together with checks of other banks
+    #RawBank numbers can be found here: https://gitlab.cern.ch/lhcb/LHCb/-/blob/master/Event/DAQEvent/include/Event/RawBank.h
+    if args.job_type == "excl":
+        dstdata_banks = TES[raweventloc].banks(LHCb.RawBank.DstData)
+        print("DstData bank ", dstdata_banks.size())
+        if dstdata_banks.size() == 0:
+            error("Expected number of DstData rawbanks > 0")
+        hltdecrepo_banks = TES[raweventloc].banks(LHCb.RawBank.HltDecReports)
+        print("HltDecReports bank ", hltdecrepo_banks.size())
+        if hltdecrepo_banks.size() != 3:
+            error("Expected number of HltDecReports rawbanks == 3")
+        hltselrepo_banks = TES[raweventloc].banks(LHCb.RawBank.HltSelReports)
+        print("HltSelReports bank ", hltselrepo_banks.size())
+        if hltselrepo_banks.size() != 1:
+            error("Expected number of HltSelReports rawbanks == 1")
+        odin_banks = TES[raweventloc].banks(LHCb.RawBank.ODIN)
+        print("ODIN bank ", odin_banks.size())
+        if odin_banks.size(
+        ) == 0:  # number of ODIN rawbanks should equal to 1 exactly, but in this situation it is set to > 0 to pass the test due to a bug, which will be solved later.
+            error("Expected number of ODIN rawbanks > 0")
+
+    if args.job_type == "pass":
+        dstdata_banks = TES[raweventloc].banks(LHCb.RawBank.DstData)
+        print("DstData bank ", dstdata_banks.size())
+        if dstdata_banks.size() == 0:
+            error("Expected number of DstData rawbanks > 0")
+        hltdecrepo_banks = TES[raweventloc].banks(LHCb.RawBank.HltDecReports)
+        print("HltDecReports bank ", hltdecrepo_banks.size())
+        if hltdecrepo_banks.size() != 3:
+            error("Expected number of HltDecReports rawbanks == 3")
+        hltselrepo_banks = TES[raweventloc].banks(LHCb.RawBank.HltSelReports)
+        print("HltSelReports bank ", hltselrepo_banks.size())
+        if hltselrepo_banks.size() != 1:
+            error("Expected number of HltSelReports rawbanks == 1")
+        odin_banks = TES[raweventloc].banks(LHCb.RawBank.ODIN)
+        print("ODIN bank ", odin_banks.size())
+        if odin_banks.size(
+        ) == 0:  # number of ODIN rawbanks should equal to 1 exactly, but in this situation it is set to > 0 to pass the test due to a bug, which will be solved later.
+            error("Expected number of ODIN rawbanks > 0")
+    '''
+    # for future use
+    hltlumisum_banks = TES[raweventloc].banks(LHCb.RawBank.HltLumiSummary)
+    print("HltLumiSummary bank ", hltlumisum_banks.size())
+    hltroutingbits_banks = TES[raweventloc].banks(LHCb.RawBank.HltRoutingBits)
+    print("HltRoutingBits bank ", hltroutingbits_banks.size())
+    '''
+
+    # Check dec reports
+    if args.job_type == "excl":
+        dec_to_check = spruce_lines_running(args.stream)
+    else:
+        dec_to_check = hlt2_lines_running(args.stream)
+    pass_dec_check = ["Pass" + args.stream]
+
+    if args.job_type == 'pass':
+        hlt2decisions = check_decreports(TES, decs=dec_to_check)
+        hlt2_fired = [k for k, v in hlt2decisions.items() if v]
+        print("Hlt2 Fired ", hlt2_fired)
+        # the particles checks reimplemented
+        for k in hlt2_fired:
+            prefix = '/Event/HLT2/' + k
+            check_particlesandrelations(TES, prefix.removesuffix("Decision"))
+        sprucedecisions = check_decreports(
+            TES, decs=pass_dec_check, stage='Spruce')
+        passfired = [k for k, v in sprucedecisions.items() if v]
+        print("spruce Fired ", passfired)
+    elif args.job_type == "excl":
+        sprucedecisions = check_decreports(
+            TES, decs=dec_to_check, stage='Spruce')
+        sprucefired = [k for k, v in sprucedecisions.items() if v]
+        print("Fired ", sprucefired)
+        for k in sprucefired:
+            prefix = '/Event/Spruce/' + k
+            print(prefix, prefix.removesuffix("Decision"))
+            check_particlesandrelations(TES, prefix.removesuffix("Decision"))
+    appMgr.run(1)
diff --git a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_excl_check_2022_data.py b/Hlt/Hlt2Conf/tests/options/sprucing/spruce_excl_check_2022_data.py
deleted file mode 100644
index 3737427621f19fa613b475fb271aa2f16d6bf80e..0000000000000000000000000000000000000000
--- a/Hlt/Hlt2Conf/tests/options/sprucing/spruce_excl_check_2022_data.py
+++ /dev/null
@@ -1,186 +0,0 @@
-###############################################################################
-# (c) Copyright 2019-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.                                       #
-###############################################################################
-"""Test excl sprucing over 2022 data.
-
-"""
-import argparse
-
-import cppyy
-
-import GaudiPython as GP
-LHCb = GP.gbl.LHCb
-from GaudiConf import IOExtension
-from Configurables import (
-    ApplicationMgr,
-    CondDB,
-    LHCbApp,
-    IODataManager,
-    HistogramPersistencySvc,
-)
-
-from GaudiConf.reading import unpack_rawevent, hlt_decisions
-from PyConf.application import configured_ann_svc
-
-from Hlt2Conf.check_output import check_decreports
-from Hlt2Conf.lines.b_to_open_charm import sprucing_lines as b2oc_lines
-from Hlt2Conf.lines.rd import sprucing_lines as rd_lines
-from Hlt2Conf.lines.b_to_open_charm import all_lines as hlt2_b2oc_lines
-from Hlt2Conf.lines.rd import all_lines as hlt2_rd_lines
-
-
-def error(msg):
-    print("CheckOutput ERROR", msg)
-
-
-def spruce_lines_running(wg):
-    linedict = {
-        "b2oc": b2oc_lines,
-        "rd": rd_lines,
-    }
-    return [item for item in list(linedict[wg].keys())]
-
-
-def hlt2_lines_running(wg):
-    linedict = {
-        "b2oc": hlt2_b2oc_lines,
-        "rd": hlt2_rd_lines,
-    }
-    return [item for item in list(linedict[wg].keys())]
-
-
-#Argument parser
-parser = argparse.ArgumentParser()
-parser.add_argument('input', type=str, help='Input filename')
-parser.add_argument('manifest', type=str, help='JSON manifest dump')
-parser.add_argument('job_type', type=str, help='excl or pass')
-parser.add_argument(
-    'stream', type=str, help='Stream to test as defined in options')
-
-args = parser.parse_args()
-
-print("input ", args.input)
-print("manifest ", args.manifest)
-print("job_type ", args.job_type)
-print("stream ", args.stream)
-
-##Prepare application
-LHCbApp(
-    DataType="Upgrade",
-    Simulation=True,
-    DDDBtag="dddb-20171126",
-    CondDBtag="sim-20171127-vc-md100",
-)
-CondDB(Upgrade=True)
-
-process = "Turbo" if args.job_type == "pass" else "Spruce"
-#algs = do_unpacking(cfg, input_process=input_process, stream=args.stream)
-
-unpack = [
-    unpack_rawevent(
-        bank_types=['ODIN', 'HltDecReports', 'DstData'],
-        stream=args.stream,
-        input_process=process,
-        configurables=True,
-    )
-]
-
-hlt2 = [
-    hlt_decisions(
-        stream=args.stream,
-        input_process=process,
-        source="Hlt2",
-        output_loc="/Event/Hlt2/DecReports")
-]
-
-spruce = [
-    hlt_decisions(
-        input_process=process,
-        stream=args.stream,
-        source="Spruce",
-        output_loc="/Event/Spruce/DecReports")
-]
-
-algs = unpack + hlt2 + spruce
-
-mgr = ApplicationMgr(TopAlg=algs)
-mgr.ExtSvc += [configured_ann_svc(json_file=args.manifest)]
-
-IOExtension().inputFiles([args.input], clear=True)
-# Disable warning about not being able to navigate ancestors
-IODataManager(DisablePFNWarning=True)
-# Disable warning about histogram saving not being required
-HistogramPersistencySvc(OutputLevel=5)
-
-appMgr = GP.AppMgr()
-TES = appMgr.evtsvc()
-
-# MonkeyPatch for the fact that RegistryEntry.__bool__
-# changed in newer cppyy. Proper fix should go into Gaudi
-cppyy.gbl.DataSvcHelpers.RegistryEntry.__bool__ = lambda x: True
-
-raweventloc = '/Event/' + args.stream
-
-nevents = 5
-for ii in range(nevents):
-    print('Checking next event.')
-    appMgr.run(1)
-    if not TES['/Event']:
-        break
-    if ii == 0:
-        TES.dump()
-
-    #print("Looking in RawEvent ", raweventloc)
-    # Check that detector RawBanks are propagated
-    Rich_banks = TES[raweventloc].banks(LHCb.RawBank.Rich)
-    print("Rich_banks ", Rich_banks.size())
-    if Rich_banks.size() != 0:
-        error("Expected no RICH rawbanks in streams")
-    Muon_banks = TES[raweventloc].banks(LHCb.RawBank.Muon)
-    print("Muon_banks ", Muon_banks.size())
-    if Muon_banks.size() == 0:
-        error("Expected Muon rawbanks in all streams")
-
-    # Check dec reports
-    if "b2oc" in args.stream:
-        if args.job_type == "excl":
-            dec_to_check = spruce_lines_running('b2oc')
-        else:
-            dec_to_check = hlt2_lines_running('b2oc')
-        pass_dec_check = ["Passb2oc"]
-    elif "rd" in args.stream:
-        if args.job_type == "excl":
-            dec_to_check = spruce_lines_running('rd')
-        else:
-            dec_to_check = hlt2_lines_running('rd')
-        pass_dec_check = ["Passrd"]
-
-    if args.job_type == 'pass':
-        hlt2decisions = check_decreports(TES, decs=dec_to_check)
-        hlt2_fired = [k for k, v in hlt2decisions.items() if v]
-        print("Fired ", hlt2_fired)
-        ## ToDo : reimplement the particles checks
-        #for k, v in hlt2decisions.items():
-        #    if v:
-        #        prefix = '/Event/HLT2/' + k
-        #        check_particlesandrelations(TES, prefix)
-        sprucedecisions = check_decreports(
-            TES, decs=pass_dec_check, stage='Spruce')
-        passfired = [k for k, v in sprucedecisions.items() if v]
-        print("Fired ", passfired)
-    elif args.job_type == "excl":
-        sprucedecisions = check_decreports(
-            TES, decs=dec_to_check, stage='Spruce')
-        sprucefired = [k for k, v in sprucedecisions.items() if v]
-        print("Fired ", sprucefired)
-        #for k, v in sprucedecisions.items():
-        #    if v:
-        #        prefix = '/Event/Spruce/' + k
-        #        check_particlesandrelations(TES, prefix)
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_b2cc_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_b2cc_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..4a1419f200b4464c7667aa9a333baebd6c4d90b7
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_b2cc_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of excl sprucing on 2022 data for b2cc streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_excl_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>spruce_all_lines_production.b2cc.dst </text>
+  <text>spruce_all_lines_production.tck.json</text>
+  <text>excl</text>
+  <text>b2cc</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_b2oc_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_b2oc_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..86f901783858c85dffac611ef48789b085b13577
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_b2oc_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of excl sprucing on 2022 data for b2oc streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_excl_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>spruce_all_lines_production.b2oc.dst </text>
+  <text>spruce_all_lines_production.tck.json</text>
+  <text>excl</text>
+  <text>b2oc</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_bandq_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_bandq_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..0e5a981fa94e894c7a0fcf354a02deac52ef2e05
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_bandq_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of excl sprucing on 2022 data for bandq streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_excl_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>spruce_all_lines_production.bandq.dst </text>
+  <text>spruce_all_lines_production.tck.json</text>
+  <text>excl</text>
+  <text>bandq</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_qee_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_qee_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..a9149b505aeea7170ab73c1809ef319dd03a58a2
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_qee_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of excl sprucing on 2022 data for qee streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_excl_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>spruce_all_lines_production.qee.dst </text>
+  <text>spruce_all_lines_production.tck.json</text>
+  <text>excl</text>
+  <text>qee</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_rd_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_rd_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..c1b299aff339507b64732308d7d5b9aa192fa2d5
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_rd_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of excl sprucing on 2022 data for rd streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_excl_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>spruce_all_lines_production.rd.dst </text>
+  <text>spruce_all_lines_production.tck.json</text>
+  <text>excl</text>
+  <text>rd</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_sl_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_sl_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..bfb30bbdbde77a55194043d8f00f471288bc42ed
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_excl_spruce_2022_data_sl_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of excl sprucing on 2022 data for sl streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_excl_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>spruce_all_lines_production.sl.dst </text>
+  <text>spruce_all_lines_production.tck.json</text>
+  <text>excl</text>
+  <text>sl</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_b2cc_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_b2cc_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..46b503f9c4aafdf4052ea05b118737662d7bc001
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_b2cc_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for b2cc streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.b2cc.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>b2cc</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_b2oc_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_b2oc_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..44c07c24470f0b527937b42ca9fe5dc9a764a852
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_b2oc_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for b2oc streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.b2oc.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>b2oc</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_bandq_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_bandq_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..2ab3681eacfed486125d03585d4e8a127b2e8752
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_bandq_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for bandq streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.bandq.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>bandq</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_bnoc_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_bnoc_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..22bd64904a5b6a17fc93b8451a27e9041d4a4b40
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_bnoc_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for bnoc streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.bnoc.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>bnoc</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_charm_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_charm_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..6b84384f923011a451fc8cd60c599f1a0a3d5380
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_charm_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for charm streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.charm.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>charm</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_charmtodimuon_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_charmtodimuon_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..61c8ba998ff94eb89ffdb0fe61b515f55cc7303d
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_charmtodimuon_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for charmtodimuon streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.charmtodimuon.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>charmtodimuon</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_dimuonnoip_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_dimuonnoip_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..f7e0488695868034b5b43de05305ad1ddc1bfeb9
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_dimuonnoip_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for dimuonnoip streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.dimuonnoip.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>dimuonnoip</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_qee_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_qee_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..a77348380bd650705e1d71824de3caf8029be518
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_qee_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for qee streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.qee.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>qee</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_rd_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_rd_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..87b400c4df6fe615d6f007f5bcb7e79219d03a3b
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_rd_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for rd streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.rd.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>rd</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+
diff --git a/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_sl_check.qmt b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_sl_check.qmt
new file mode 100644
index 0000000000000000000000000000000000000000..c1ea17c056282b39cd631ade936bc9382767778d
--- /dev/null
+++ b/Hlt/Hlt2Conf/tests/qmtest/sprucing.qms/test_pass_spruce_2022_data_sl_check.qmt
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (c) Copyright 2023 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.
+-->
+<!--
+Check a set of banks, decreports, particles and relations of the output of passthrough sprucing on 2022 data for sl streaming.
+-->
+
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="prerequisites"><set>
+  <tuple><text>sprucing.test_pass_spruce_2022_data</text><enumeral>PASS</enumeral></tuple>
+</set></argument>
+
+<argument name="program"><text>python</text></argument>
+<argument name="timeout"><integer>300</integer></argument>
+<argument name="args"><set>
+  <text>$HLT2CONFROOT/tests/options/sprucing/spruce_check_2022_data.py</text>
+  <text>pass_all_lines_production.sl.dst </text>
+  <text>pass_all_lines_production.tck.json</text>
+  <text>pass</text>
+  <text>sl</text>
+</set></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="validator"><text>
+
+from Moore.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "WARNING": 0, "ERROR": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
+