From 5e80b51daa7a9b31c50d6c2fe7c3258bab057322 Mon Sep 17 00:00:00 2001
From: Goetz Gaycken <goetz.gaycken@cern.ch>
Date: Mon, 2 Dec 2024 17:01:08 +0100
Subject: [PATCH] Use detector element status for ITk instead of conditions
 summary tool.

The detector element status data which contains the condensed
information of the conditions summary tools allows to query the
module status with much smaller overhead.

Schedule conditions algorithms to condense the conditions related
pixel and strip module status conditions data, and event algorithms
to combine this status with a status obtained from error flags
encoded in the byte stream if the data is read from a byte stream.

Disable in all ITk algorithms and tools, which support the detector
element status, the conditions summary tool and use the status data
instead.
---
 .../python/ITkPixelConditionsConfig.py        | 35 +++++++++++++++++-
 .../python/ITkPixelConditionsSummaryConfig.py | 22 ++++++++++-
 .../ITkStripConditionsAlgorithmsConfig.py     | 37 ++++++++++++++++++-
 .../python/ITkStripConditionsToolsConfig.py   | 14 ++++++-
 .../python/InDetBoundaryCheckToolConfig.py    | 20 +++++-----
 .../python/InDetPrepRawDataFormationConfig.py | 11 ++++--
 .../python/InDetTestPixelLayerConfig.py       | 17 ++++++---
 .../python/SiClusterizationToolConfig.py      | 26 ++++++++-----
 .../SiCombinatorialTrackFinderToolConfig.py   | 28 +++++++-------
 .../InDetConfig/python/TrackRecoConfig.py     | 13 +++++++
 .../python/ActsClusterizationConfig.py        |  9 +++--
 .../TrigInDetConfig/python/ITkTrigSequence.py | 17 ++++++---
 .../TrigInDetConfig/python/TrigInDetConfig.py |  7 ++++
 .../PrecisionTracks_GSFRefittedSequence.py    |  4 ++
 14 files changed, 205 insertions(+), 55 deletions(-)

diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/ITkPixelConditionsConfig.py b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/ITkPixelConditionsConfig.py
index 823a2da5a6b..fb1a4e57fa1 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/ITkPixelConditionsConfig.py
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/ITkPixelConditionsConfig.py
@@ -1,6 +1,6 @@
 """Define functions to configure Pixel conditions algorithms
 
-Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 """
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
@@ -184,3 +184,36 @@ def ITkPixelOfflineCalibCondAlgCfg(flags, name="ITkPixelOfflineCalibCondAlg", **
     kwargs.setdefault("InputSource", 2)
     acc.addCondAlgo(CompFactory.ITk.PixelOfflineCalibCondAlg(name, **kwargs))
     return acc
+
+def ITkPixelDetectorElementStatusCondAlgNoByteStreamErrorsCfg(flags, name = "ITkPixelDetectorElementStatusCondAlgNoByteStreamErrors", **kwargs) :
+    '''
+    Condition alg to precompute the pixel detector element status.
+    This algorithm does not consider the byte stream errors which are event data.
+    '''
+    acc = ComponentAccumulator()
+    if 'ConditionsSummaryTool' not in kwargs :
+        from PixelConditionsTools.ITkPixelConditionsSummaryConfig import ITkPixelConditionsSummaryCfg
+        kwargs.setdefault("ConditionsSummaryTool", acc.popToolsAndMerge( ITkPixelConditionsSummaryCfg(flags)))
+    kwargs.setdefault( "WriteKey", "ITkPixelDetectorElementStatusNoByteStream")
+    acc.addCondAlgo( CompFactory.InDet.SiDetectorElementStatusCondAlg(name, **kwargs) )
+    return acc
+
+def ITkPixelDetectorElementStatusAlgCfg(flags, name = "ITkPixelDetectorElementStatusAlg", **kwargs) :
+    '''
+    Event alg which could extend the pixel detector element status conditions data with bytestream errors.
+    '''
+    acc = ComponentAccumulator()
+    if 'ConditionsSummaryTool' not in kwargs:
+        element_status_input=None
+        acc.merge( ITkPixelDetectorElementStatusCondAlgNoByteStreamErrorsCfg(flags) )
+        element_status_input="ITkPixelDetectorElementStatusNoByteStream"
+        from PixelConditionsTools.ITkPixelConditionsSummaryConfig import ITkByteStreamErrorDetectorElementStatusToolCfg
+        kwargs.setdefault("ConditionsSummaryTool",
+                          acc.popToolsAndMerge(ITkByteStreamErrorDetectorElementStatusToolCfg(flags, PixelDetElStatusCondDataBaseKey=element_status_input) ))
+
+    kwargs.setdefault("WriteKey","ITkPixelDetectorElementStatus")
+
+    # @TODO merge pixel raw data provider for bytestream input
+
+    acc.addEventAlgo( CompFactory.InDet.SiDetectorElementStatusAlg(name, **kwargs) )
+    return acc
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/ITkPixelConditionsSummaryConfig.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/ITkPixelConditionsSummaryConfig.py
index ee615ffbd13..62023d1045c 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/python/ITkPixelConditionsSummaryConfig.py
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/python/ITkPixelConditionsSummaryConfig.py
@@ -1,9 +1,10 @@
 """Define a function to configure ITkPixelConditionsSummaryCfg
 
-Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 """
 from AthenaConfiguration.ComponentFactory import CompFactory
-
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.Enums import Format
 from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (
     ITkPixelDCSCondStateAlgCfg, ITkPixelDCSCondStatusAlgCfg, ITkPixelDeadMapCondAlgCfg
 )
@@ -27,3 +28,20 @@ def ITkPixelConditionsSummaryCfg(flags, name="ITkPixelConditionsSummary", **kwar
 
     acc.setPrivateTools(CompFactory.PixelConditionsSummaryTool(name=name + "Tool", **kwargs))
     return acc
+
+
+def ITkByteStreamErrorDetectorElementStatusToolCfg(flags, name = "ITkByteStreamErrorDetectorElementStatusTool",**kwargs) :
+    # @TODO bytestream errors for ITk have not been defined yet.
+    acc = ComponentAccumulator()
+    kwargs.setdefault("PixelReadoutManager","ITkPixelReadoutManager")
+    kwargs.setdefault("PixelDetEleCollKey","ITkPixelDetectorElementCollection") # @TODO do we need the DetEleColl for the Acts chain ?
+    if not flags.Input.isMC and not flags.Overlay.DataOverlay and flags.Input.Format is Format.BS :
+        kwargs.setdefault("PixelByteStreamErrs", "PixelByteStreamErrs")
+        kwargs.setdefault("UseByteStreamFEI4",   True)
+        kwargs.setdefault("UseByteStreamFEI3",   True)
+        kwargs.setdefault("ActiveOnly",          False)
+        acc.setPrivateTools( CompFactory.PixelByteStreamErrorDetectorElementStatusTool(name, **kwargs) )
+    else :
+        kwargs.pop("ActiveOnly",False)
+        acc.setPrivateTools( CompFactory.PixelDetectorElementStatusCloneTool(name, **kwargs) )
+    return acc
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/python/ITkStripConditionsAlgorithmsConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/python/ITkStripConditionsAlgorithmsConfig.py
index f8025524f78..fb187f07b8d 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/python/ITkStripConditionsAlgorithmsConfig.py
+++ b/InnerDetector/InDetConditions/SCT_ConditionsAlgorithms/python/ITkStripConditionsAlgorithmsConfig.py
@@ -1,5 +1,5 @@
 
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
@@ -73,3 +73,38 @@ def ITkStripDetectorElementCondAlgCfg(flags, name="ITkStripDetectorElementCondAl
     acc = ITkStripAlignCondAlgCfg(flags)
     acc.addCondAlgo(CompFactory.SCT_DetectorElementCondAlg(name, **kwargs))
     return acc
+
+def ITkStripDetectorElementStatusCondAlgNoByteStreamErrorsCfg(flags, name = "ITkStripDetectorElementStatusCondAlgNoByteStreamErrorsCfg", **kwargs) :
+    '''
+    Condition alg to precompute the strip detector element status.
+    This algorithm does not consider the byte stream errors which are event data.
+    '''
+    acc = ComponentAccumulator()
+    if 'ConditionsSummaryTool' not in kwargs :
+        from SCT_ConditionsTools.ITkStripConditionsToolsConfig import ITkStripConditionsSummaryToolCfg
+        kwargs.setdefault("ConditionsSummaryTool", acc.popToolsAndMerge( ITkStripConditionsSummaryToolCfg(flags)))
+    kwargs.setdefault( "WriteKey", "ITkStripDetectorElementStatusNoByteStream")
+    acc.addCondAlgo( CompFactory.InDet.SiDetectorElementStatusCondAlg(name, **kwargs) )
+    return acc
+
+def ITkStripDetectorElementStatusAlgCfg(flags, name="ITkStripDetectorElementStatusAlg",**kwargs) :
+    '''
+    Algorithm which adds status from the strip bytestream to the strip status conditions data
+    '''
+    acc = ComponentAccumulator()
+    if 'ConditionsSummaryTool' not in kwargs :
+        from SCT_ConditionsTools.ITkStripConditionsToolsConfig import ITkStripDetectorElementStatusAddByteStreamErrorsToolCfg
+        # @TODO ITkStripDetectorElementStatusCondAlgNoByteStreamErrorsCfg should be moved to
+        #   ITkStripDetectorElementStatusAddByteStreamErrorsToolCfg, but that would create
+        #   circular dependencies..
+        acc.merge(ITkStripDetectorElementStatusCondAlgNoByteStreamErrorsCfg(flags))
+        kwargs.setdefault("ConditionsSummaryTool", acc.popToolsAndMerge(
+          ITkStripDetectorElementStatusAddByteStreamErrorsToolCfg(flags,
+                                                                  SCTDetElStatusCondDataBaseKey  = "ITkStripDetectorElementStatusNoByteStream",
+                                                                  SCTDetElStatusEventDataBaseKey = ""
+                                                                  )))
+    kwargs.setdefault("WriteKey", "ITkStripDetectorElementStatus")
+
+    # not a conditions algorithm since it combines conditions data and data from the bytestream
+    acc.addEventAlgo( CompFactory.InDet.SiDetectorElementStatusAlg(name, **kwargs) )
+    return acc
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/ITkStripConditionsToolsConfig.py b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/ITkStripConditionsToolsConfig.py
index ae9bf0bba66..9a377403fb7 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/python/ITkStripConditionsToolsConfig.py
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/python/ITkStripConditionsToolsConfig.py
@@ -1,6 +1,7 @@
-# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
+from AthenaConfiguration.Enums import Format
 from AtlasGeoModel.GeoModelConfig import GeoModelCfg
 from IOVDbSvc.IOVDbSvcConfig import addFolders, addFoldersSplitOnline
 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
@@ -26,6 +27,17 @@ def ITkStripConditionsSummaryToolCfg(flags, name="ITkStripConditionsSummaryTool"
     return acc
 
 
+def ITkStripDetectorElementStatusAddByteStreamErrorsToolCfg(flags, name="ITkStripDetectorElementStatusAddByteStreamErrorsTool", **kwargs):
+    acc = ComponentAccumulator()
+    if not flags.Input.isMC  and flags.Input.Format is Format.BS :
+        if "ConditionsTools" not in kwargs :
+            kwargs.setdefault("ConditionsTools", [ acc.popToolsAndMerge(ITkStripByteStreamErrorsToolCfg(flags)) ])
+
+    kwargs.setdefault("SCTDetEleCollKey", "ITkStripDetectorElementCollection")
+    acc.setPrivateTools(CompFactory.SCT_ConditionsSummaryTool(name, **kwargs))
+    return acc
+
+
 def ITkStripConfigurationConditionsToolCfg(flags, name="ITkStripConfigurationConditionsTool", **kwargs):
     # Load conditions configuration service and load folders and algorithm for it
     # Load folders that have to exist for both MC and Data
diff --git a/InnerDetector/InDetConfig/python/InDetBoundaryCheckToolConfig.py b/InnerDetector/InDetConfig/python/InDetBoundaryCheckToolConfig.py
index 18cb63e9ceb..153a31dd762 100644
--- a/InnerDetector/InDetConfig/python/InDetBoundaryCheckToolConfig.py
+++ b/InnerDetector/InDetConfig/python/InDetBoundaryCheckToolConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 # Configuration of InDetBoundaryCheckTool package
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
@@ -102,14 +102,16 @@ def CombinedMuonTrigIDBoundaryCheckToolCfg(
 def ITkBoundaryCheckToolCfg(flags, name='ITkBoundaryCheckTool', **kwargs):
     result = ComponentAccumulator()
 
-    if 'SctSummaryTool' not in kwargs:
-        if flags.Detector.EnableITkStrip:
-            from SCT_ConditionsTools.ITkStripConditionsToolsConfig import (
-                ITkStripConditionsSummaryToolCfg)
-            kwargs.setdefault("SctSummaryTool", result.popToolsAndMerge(
-                ITkStripConditionsSummaryToolCfg(flags)))
-        else:
-            kwargs.setdefault("SctSummaryTool", None)
+    kwargs.setdefault("SctSummaryTool", None) # SCTDetElStatus is used instead
+    if "SCTDetElStatus" not in kwargs :
+        if flags.Detector.EnableITkStrip :
+            if not flags.Trigger.doHLT :
+                from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import  (
+                    ITkStripDetectorElementStatusAlgCfg)
+                result.merge(ITkStripDetectorElementStatusAlgCfg(flags))
+            kwargs.setdefault("SCTDetElStatus", "ITkStripDetectorElementStatus")
+        else :
+            kwargs.setdefault("SCTDetElStatus", "")
 
     if 'PixelLayerTool' not in kwargs:
         from InDetConfig.InDetTestPixelLayerConfig import (
diff --git a/InnerDetector/InDetConfig/python/InDetPrepRawDataFormationConfig.py b/InnerDetector/InDetConfig/python/InDetPrepRawDataFormationConfig.py
index 1521b5a4b4e..b41341a323b 100644
--- a/InnerDetector/InDetConfig/python/InDetPrepRawDataFormationConfig.py
+++ b/InnerDetector/InDetConfig/python/InDetPrepRawDataFormationConfig.py
@@ -219,10 +219,13 @@ def ITkStripClusterizationCfg(flags, name="ITkStripClusterization", **kwargs):
     
     prefix = clusterizationInputPrefix(flags)
 
-    if "conditionsTool" not in kwargs:
-        from SCT_ConditionsTools.ITkStripConditionsToolsConfig import ITkStripConditionsSummaryToolCfg
-        kwargs.setdefault("conditionsTool", acc.popToolsAndMerge(
-            ITkStripConditionsSummaryToolCfg(flags)))
+    kwargs.setdefault("conditionsTool",None) # SCTDetElStatus is used instead
+    if "SCTDetElStatus" not in kwargs :
+        if not flags.Trigger.doHLT :
+            from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import  (
+                ITkStripDetectorElementStatusAlgCfg)
+            acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
+        kwargs.setdefault("SCTDetElStatus", "ITkStripDetectorElementStatus")
 
     if "clusteringTool" not in kwargs:
         from InDetConfig.SiClusterizationToolConfig import ITKStrip_SCT_ClusteringToolCfg
diff --git a/InnerDetector/InDetConfig/python/InDetTestPixelLayerConfig.py b/InnerDetector/InDetConfig/python/InDetTestPixelLayerConfig.py
index 5762b243f5f..a1bd9965f68 100644
--- a/InnerDetector/InDetConfig/python/InDetTestPixelLayerConfig.py
+++ b/InnerDetector/InDetConfig/python/InDetTestPixelLayerConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 # Configuration of InDetTestPixelLayer package
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
@@ -99,11 +99,16 @@ def CombinedMuonTrigPixelLayerToolCfg(
 
 def ITkTestPixelLayerToolCfg(flags, name="ITkTestPixelLayerTool", **kwargs):
     result = ComponentAccumulator()
-    if 'PixelSummaryTool' not in kwargs:
-        from PixelConditionsTools.ITkPixelConditionsSummaryConfig import (
-            ITkPixelConditionsSummaryCfg)
-        kwargs.setdefault("PixelSummaryTool", result.popToolsAndMerge(
-            ITkPixelConditionsSummaryCfg(flags)))
+    kwargs.setdefault("PixelSummaryTool", None) # PixelDetElStatus is used instead
+
+    if "PixelDetElStatus" not in kwargs :
+        if not hasattr(flags,"Trigger.triggerMenuSetup") :
+            from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (
+                ITkPixelDetectorElementStatusAlgCfg)
+            result.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
+        kwargs.setdefault("PixelDetElStatus", "ITkPixelDetectorElementStatus")
+
+    kwargs.setdefault("PixelReadoutManager","ITkPixelReadoutManager")
 
     if 'Extrapolator' not in kwargs:
         from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
diff --git a/InnerDetector/InDetConfig/python/SiClusterizationToolConfig.py b/InnerDetector/InDetConfig/python/SiClusterizationToolConfig.py
index bf4600e3963..a73f30d28b0 100644
--- a/InnerDetector/InDetConfig/python/SiClusterizationToolConfig.py
+++ b/InnerDetector/InDetConfig/python/SiClusterizationToolConfig.py
@@ -106,11 +106,15 @@ def ITkPixelRDOToolCfg(flags, name="ITkPixelRDOTool", **kwargs):
         ITkPixelReadoutGeometryCfg)
     acc = ITkPixelReadoutGeometryCfg(flags)
 
-    if "PixelConditionsSummaryTool" not in kwargs:
-        from PixelConditionsTools.ITkPixelConditionsSummaryConfig import (
-            ITkPixelConditionsSummaryCfg)
-        kwargs.setdefault("PixelConditionsSummaryTool", acc.popToolsAndMerge(
-            ITkPixelConditionsSummaryCfg(flags)))
+    kwargs.setdefault("PixelConditionsSummaryTool", None) # PixelDetElStatus is used instead
+    if "PixelDetElStatus" not in kwargs :
+        if not flags.Trigger.doHLT :
+            from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (
+                ITkPixelDetectorElementStatusAlgCfg)
+            acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
+        kwargs.setdefault("PixelDetElStatus", "ITkPixelDetectorElementStatus")
+
+    kwargs.setdefault("PixelReadoutManager","ITkPixelReadoutManager")
 
     kwargs.setdefault("PixelDetEleCollKey", "ITkPixelDetectorElementCollection")
     kwargs.setdefault("CheckGanged", False)
@@ -428,11 +432,13 @@ def ITKStrip_SCT_ClusteringToolCfg(
     kwargs.setdefault("SCTDetEleCollKey", "ITkStripDetectorElementCollection")
     kwargs.setdefault("useRowInformation", True)  # ITk-specific clustering
 
-    if "conditionsTool" not in kwargs:
-        from SCT_ConditionsTools.ITkStripConditionsToolsConfig import (
-            ITkStripConditionsSummaryToolCfg)
-        kwargs.setdefault("conditionsTool", acc.popToolsAndMerge(
-            ITkStripConditionsSummaryToolCfg(flags)))
+    kwargs.setdefault("conditionsTool",None) # SCTDetElStatus is used instead
+    if "SCTDetElStatus" not in kwargs :
+        if not flags.Trigger.doHLT :
+            from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import  (
+                ITkStripDetectorElementStatusAlgCfg)
+            acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
+        kwargs.setdefault("SCTDetElStatus","ITkStripDetectorElementStatus")
 
     if "LorentzAngleTool" not in kwargs:
         from SiLorentzAngleTool.ITkStripLorentzAngleConfig import (
diff --git a/InnerDetector/InDetConfig/python/SiCombinatorialTrackFinderToolConfig.py b/InnerDetector/InDetConfig/python/SiCombinatorialTrackFinderToolConfig.py
index 93e8aa62cd1..b9c6babf82f 100644
--- a/InnerDetector/InDetConfig/python/SiCombinatorialTrackFinderToolConfig.py
+++ b/InnerDetector/InDetConfig/python/SiCombinatorialTrackFinderToolConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 # Configuration of SiCombinatorialTrackFinderTool_xk package
 
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
@@ -251,21 +251,23 @@ def ITkSiCombinatorialTrackFinder_xkCfg(
     kwargs.setdefault("BoundaryCheckTool", acc.popToolsAndMerge(
         ITkBoundaryCheckToolCfg(flags)))
 
+    kwargs.setdefault("PixelSummaryTool", None) # SCTDetElStatus is used instead
     if flags.Detector.EnableITkPixel:
-        from PixelConditionsTools.ITkPixelConditionsSummaryConfig import (
-            ITkPixelConditionsSummaryCfg)
-        kwargs.setdefault("PixelSummaryTool", acc.popToolsAndMerge(
-            ITkPixelConditionsSummaryCfg(flags)))
-    else:
-        kwargs.setdefault("PixelSummaryTool", None)
+        if "PixelDetElStatus" not in kwargs:
+            if not flags.Trigger.doHLT :
+                from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (
+                    ITkPixelDetectorElementStatusAlgCfg)
+                acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
+            kwargs.setdefault("PixelDetElStatus", "ITkPixelDetectorElementStatus")
 
+    kwargs.setdefault("SctSummaryTool", None) # SCTDetElStatus is used instead
     if flags.Detector.EnableITkStrip:
-        from SCT_ConditionsTools.ITkStripConditionsToolsConfig import (
-            ITkStripConditionsSummaryToolCfg)
-        kwargs.setdefault("SctSummaryTool", acc.popToolsAndMerge(
-            ITkStripConditionsSummaryToolCfg(flags)))
-    else:
-        kwargs.setdefault("SctSummaryTool", None)
+        if "SCTDetElStatus" not in kwargs :
+            if not flags.Trigger.doHLT :
+                from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import  (
+                    ITkStripDetectorElementStatusAlgCfg)
+                acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
+            kwargs.setdefault("SCTDetElStatus","ITkStripDetectorElementStatus")
 
     # Protection against FPEs
     kwargs.setdefault("MinFinalPtCut",
diff --git a/InnerDetector/InDetConfig/python/TrackRecoConfig.py b/InnerDetector/InDetConfig/python/TrackRecoConfig.py
index 575d95fec84..a00200b6c17 100644
--- a/InnerDetector/InDetConfig/python/TrackRecoConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackRecoConfig.py
@@ -185,6 +185,19 @@ def InDetPreProcessingCfg(flags):
 
     return result
 
+def SiDetectorElementStatusCfg(flags, suffix="") :
+    result = ComponentAccumulator()
+    if flags.Detector.GeometryITk:
+        if flags.Detector.EnableITkPixel:
+            from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (
+                ITkPixelDetectorElementStatusAlgCfg)
+            result.merge(ITkPixelDetectorElementStatusAlgCfg(flags,name=f"ITkPixelDetectorElementStatusAlg{suffix}"))
+        if flags.Detector.EnableITkStrip:
+            from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import  (
+                ITkStripDetectorElementStatusAlgCfg)
+            result.merge(ITkStripDetectorElementStatusAlgCfg(flags,name=f"ITkStripDetectorElementStatusAlg{suffix}"))
+    return result
+
 
 # Returns CA + ClusterSplitProbContainer
 def SiSubDetTrackRecoCfg(flags, detector="",
diff --git a/Tracking/Acts/ActsConfig/python/ActsClusterizationConfig.py b/Tracking/Acts/ActsConfig/python/ActsClusterizationConfig.py
index efaa357c09c..350144f65ad 100644
--- a/Tracking/Acts/ActsConfig/python/ActsClusterizationConfig.py
+++ b/Tracking/Acts/ActsConfig/python/ActsClusterizationConfig.py
@@ -89,9 +89,12 @@ def ActsStripClusteringToolCfg(flags,
         from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleToolCfg
         kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(ITkStripLorentzAngleToolCfg(flags)))
 
-    if 'conditionsTool' not in kwargs:
-        from SCT_ConditionsTools.ITkStripConditionsToolsConfig import ITkStripConditionsSummaryToolCfg
-        kwargs.setdefault("conditionsTool", acc.popToolsAndMerge(ITkStripConditionsSummaryToolCfg(flags)))
+    kwargs.setdefault("conditionsTool",None)
+    if "StripDetElStatus" not in kwargs :
+        from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import  (
+            ITkStripDetectorElementStatusAlgCfg)
+        acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
+        kwargs.setdefault("StripDetElStatus", "ITkStripDetectorElementStatus")
 
     # Disable noisy modules suppression
     kwargs.setdefault("maxFiredStrips", 0)
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/ITkTrigSequence.py b/Trigger/TrigTools/TrigInDetConfig/python/ITkTrigSequence.py
index b6255e74614..2e76cadb4e7 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/ITkTrigSequence.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/ITkTrigSequence.py
@@ -66,21 +66,27 @@ class ITkTrigSequence(InnerTrackerTrigSequence):
     from InDetConfig.InDetPrepRawDataFormationConfig import ITkTrigPixelClusterizationCfg, ITkTrigStripClusterizationCfg
     acc.merge(ITkTrigPixelClusterizationCfg(self.flags, roisKey=self.rois, signature=signature))
     acc.merge(ITkTrigStripClusterizationCfg(self.flags, roisKey=self.rois, signature=signature))
-
+    from InDetConfig.TrackRecoConfig import SiDetectorElementStatusCfg
+    acc.merge(SiDetectorElementStatusCfg(self.flags,f"_{signature}"))
     return acc
         
   def viewDataVerifierAfterPattern(self, viewVerifier='IDViewDataVerifierForAmbi') -> ComponentAccumulator:
     
     acc = ComponentAccumulator()
 
+    dataObjects = [
+                ( 'InDet::PixelGangedClusterAmbiguities' , 'ITkPixelClusterAmbiguitiesMap'),
+                ( 'InDetSimDataCollection' , 'ITkPixelSDO_Map')
+            ]
+    from TrigInDetConfig.TrigInDetConfig import InDetExtraDataObjectsFromDataPrep
+    InDetExtraDataObjectsFromDataPrep(self.flags,dataObjects)
+
     ViewDataVerifier = \
         CompFactory.AthViews.ViewDataVerifier( 
             name = viewVerifier + "_" + self.signature,
-            DataObjects = {
-                ( 'InDet::PixelGangedClusterAmbiguities' , 'ITkPixelClusterAmbiguitiesMap'),
-                ( 'InDetSimDataCollection' , 'ITkPixelSDO_Map'),
-            }
+            DataObjects = dataObjects
         )
+    from TrigInDetConfig.TrigInDetConfig import InDetExtraDataObjectsFromDataPrep
 
     acc.addEventAlgo(ViewDataVerifier)
     return acc
@@ -118,6 +124,7 @@ class ITkTrigSequence(InnerTrackerTrigSequence):
     if self.inView:
       acc.merge(self.viewDataVerifierAfterPattern())
 
+
     from TrkConfig.TrkAmbiguitySolverConfig import ITkTrkAmbiguityScoreCfg
     acc.merge(
       ITkTrkAmbiguityScoreCfg(
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
index a60240ee84a..860189de193 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
@@ -7,6 +7,13 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaCommon.Logging import logging
 
+def InDetExtraDataObjectsFromDataPrep(flags, dataObjects) :
+  if flags.Detector.GeometryITk:
+    if flags.Detector.EnableITkPixel:
+      dataObjects.append( ('InDet::SiDetectorElementStatus' , 'StoreGateSvc+ITkPixelDetectorElementStatus' ))
+    if flags.Detector.EnableITkStrip:
+      dataObjects.append( ('InDet::SiDetectorElementStatus' , 'StoreGateSvc+ITkStripDetectorElementStatus' ))
+
 
 def InDetIDCCacheCreatorCfg(flags):
   #Create IdentifiableCaches
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/PrecisionTracks_GSFRefittedSequence.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/PrecisionTracks_GSFRefittedSequence.py
index 7977deab380..98f1c505b4d 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/PrecisionTracks_GSFRefittedSequence.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/PrecisionTracks_GSFRefittedSequence.py
@@ -47,12 +47,16 @@ def precisionTracks_GSFRefitted(flags, RoIs, ion=False, variant=''):
         dataObjects.append(( 'InDet::TRT_DriftCircleContainerCache' , 
                              f'StoreGateSvc+{flags.Trigger.InDetTracking.TRT_DriftCircleCacheKey}' ))
 
+    from TrigInDetConfig.TrigInDetConfig import InDetExtraDataObjectsFromDataPrep
+    InDetExtraDataObjectsFromDataPrep(flags,dataObjects)
+
     precisionGsfVDV.DataObjects =  dataObjects
 
     acc.addEventAlgo(precisionGsfVDV)
 
     from TriggerMenuMT.HLT.Electron.TrigEMBremCollectionBuilder import TrigEMBremCollectionBuilderCfg
 
+
     ## TrigEMBremCollectionBuilder ##
 
     acc.merge(TrigEMBremCollectionBuilderCfg(flags,
-- 
GitLab