From a51fd43268417c418bfd2096ee5c239622781740 Mon Sep 17 00:00:00 2001
From: Carlo Varni <carlo.varni@cern.ch>
Date: Tue, 5 Mar 2024 20:14:42 +0100
Subject: [PATCH] Acts Cache mechanism can be set by config flags

Acts Cache mechanism can be set by config flags
---
 .../python/ActsClusterizationConfig.py        | 28 +++++++++++++++----
 .../Acts/ActsConfig/python/ActsConfigFlags.py |  3 +-
 .../python/ActsSpacePointFormationConfig.py   |  8 ++++--
 .../python/ActsTrackFindingConfig.py          |  5 ++--
 .../src/ClusterizationAlg.h                   |  4 +--
 .../src/ClusterizationAlg.icc                 |  8 ++----
 6 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/Tracking/Acts/ActsConfig/python/ActsClusterizationConfig.py b/Tracking/Acts/ActsConfig/python/ActsClusterizationConfig.py
index a3615971351e..60ea6903d20f 100644
--- a/Tracking/Acts/ActsConfig/python/ActsClusterizationConfig.py
+++ b/Tracking/Acts/ActsConfig/python/ActsClusterizationConfig.py
@@ -61,6 +61,7 @@ def ActsPixelClusterizationAlgCfg(flags,
     # Regional selection
     kwargs.setdefault('RoIs', 'OfflineFullScanRegion')
 
+    kwargs.setdefault('EnableCache', flags.Acts.useCache)
     kwargs.setdefault('ClusterCacheBackend', 'ActsPixelClusterCache_Back')
     kwargs.setdefault('ClusterCache', 'ActsPixelClustersCache')
 
@@ -91,6 +92,7 @@ def ActsStripClusterizationAlgCfg(flags,
     # Regional selection
     kwargs.setdefault('RoIs', 'OfflineFullScanRegion')
 
+    kwargs.setdefault('EnableCache', flags.Acts.useCache)
     kwargs.setdefault('ClusterCacheBackend', 'ActsStripClusterCache_Back')
     kwargs.setdefault('ClusterCache', 'ActsStripClustersCache')
 
@@ -121,7 +123,7 @@ def ActsClusterCacheCreatorCfg(flags, name="ActsClusterCacheCreator", **kwargs):
 
 def ActsPixelClustersViewFillerCfg(flags,name="PixelClusterViewFiller", **kwargs):
     kwargs.setdefault("InputIDC", "ActsPixelClustersCache")
-    kwargs.setdefault("Output", "ITKPixelClusters_InView")
+    kwargs.setdefault("Output", "ITkPixelClusters_InView")
 
     kwargs.setdefault('RoIs', 'OfflineFullScanRegion')
 
@@ -137,7 +139,7 @@ def ActsPixelClustersViewFillerCfg(flags,name="PixelClusterViewFiller", **kwargs
 
 def ActsStripClustersViewFillerCfg(flags,name="StripClusterViewFiller", **kwargs):
     kwargs.setdefault("InputIDC", "ActsStripClustersCache")
-    kwargs.setdefault("Output", "ITKStripClusters_InView")
+    kwargs.setdefault("Output", "ITkStripClusters_InView")
 
     kwargs.setdefault('RoIs', 'OfflineFullScanRegion')
 
@@ -154,14 +156,21 @@ def ActsStripClustersViewFillerCfg(flags,name="StripClusterViewFiller", **kwargs
 
 def ActsMainClusterizationCfg(flags) -> ComponentAccumulator:
     acc = ComponentAccumulator()
-    acc.merge(ActsClusterCacheCreatorCfg(flags))
+
+    if flags.Acts.useCache:
+        acc.merge(ActsClusterCacheCreatorCfg(flags))
+
     if flags.Detector.EnableITkPixel:
         acc.merge(ActsPixelClusterizationAlgCfg(flags))
-        acc.merge(ActsPixelClustersViewFillerCfg(flags))
     if flags.Detector.EnableITkStrip:
         acc.merge(ActsStripClusterizationAlgCfg(flags))
-        acc.merge(ActsStripClustersViewFillerCfg(flags))
 
+    if flags.Acts.useCache:
+        if flags.Detector.EnableITkPixel:
+            acc.merge(ActsPixelClustersViewFillerCfg(flags))
+        if flags.Detector.EnableITkStrip:
+            acc.merge(ActsStripClustersViewFillerCfg(flags))
+            
     # Analysis extensions
     if flags.Acts.doAnalysis:
         if flags.Detector.EnableITkPixel:
@@ -180,9 +189,16 @@ def ActsConversionClusterizationCfg(flags) -> ComponentAccumulator:
         acc.merge(ActsStripClusterizationAlgCfg(flags,
                                                 name="ActsConversionStripClusterizationAlg",
                                                 ClustersKey="ITkConversionStripClusters",
-                                                ClusterCache="",
+                                                EnableCache=False,
                                                 RoIs="OfflineCaloBasedRegion"))
 
+    if flags.Acts.useCache:
+        if flags.Detector.EnableITkStrip:
+            acc.merge(ActsStripClustersViewFillerCfg(flags,
+                                                     name="ActsConversionStripClustersViewFiller",
+                                                     Output="ITkConversionStripClusters_InView",
+                                                     RoIs="OfflineCaloBasedRegion"))
+    
     # Analysis extensions
     if flags.Acts.doAnalysis:
         if flags.Detector.EnableITkStrip:
diff --git a/Tracking/Acts/ActsConfig/python/ActsConfigFlags.py b/Tracking/Acts/ActsConfig/python/ActsConfigFlags.py
index ba70a4b34bfb..f721ab7c215c 100644
--- a/Tracking/Acts/ActsConfig/python/ActsConfigFlags.py
+++ b/Tracking/Acts/ActsConfig/python/ActsConfigFlags.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
 
 from AthenaConfiguration.AthConfigFlags import AthConfigFlags
 from AthenaConfiguration.Enums import FlagEnum
@@ -23,6 +23,7 @@ def createActsConfigFlags():
     actscf.addFlag('Acts.EDM.PersistifyClusters', False)
     actscf.addFlag('Acts.EDM.PersistifySpacePoints', False)
     actscf.addFlag('Acts.EDM.PersistifyTracks', False)
+    actscf.addFlag('Acts.useCache', False)
     
     # Scheduling
     actscf.addFlag('Acts.doITkConversion', False)
diff --git a/Tracking/Acts/ActsConfig/python/ActsSpacePointFormationConfig.py b/Tracking/Acts/ActsConfig/python/ActsSpacePointFormationConfig.py
index fec626e6dae3..480380af5458 100644
--- a/Tracking/Acts/ActsConfig/python/ActsSpacePointFormationConfig.py
+++ b/Tracking/Acts/ActsConfig/python/ActsSpacePointFormationConfig.py
@@ -82,7 +82,8 @@ def ActsMainSpacePointFormationCfg(flags) -> ComponentAccumulator:
     acc = ComponentAccumulator()
 
     if flags.Detector.EnableITkPixel:
-        acc.merge(ActsPixelSpacePointFormationCfg(flags))
+        acc.merge(ActsPixelSpacePointFormationCfg(flags,
+                                                  PixelClusters = "ITkPixelClusters_InView" if flags.Acts.useCache else "ITkPixelClusters"))
     if flags.Detector.EnableITkStrip and not flags.Tracking.doITkFastTracking:
         # Need to schedule this here in case the Athena space point formation is not schedule
         # This is because as of now requires at least ITkSiElementPropertiesTableCondAlgCfg
@@ -97,7 +98,8 @@ def ActsMainSpacePointFormationCfg(flags) -> ComponentAccumulator:
         from InDetConfig.SiSpacePointFormationConfig import ITkSiElementPropertiesTableCondAlgCfg
         acc.merge(ITkSiElementPropertiesTableCondAlgCfg(flags))
         
-        acc.merge(ActsStripSpacePointFormationCfg(flags))
+        acc.merge(ActsStripSpacePointFormationCfg(flags,
+                                                  StripClusters = "ITkStripClusters_InView" if flags.Acts.useCache else "ITkStripClusters"))
 
     # Analysis extensions
     if flags.Acts.doAnalysis:
@@ -130,7 +132,7 @@ def ActsConversionSpacePointFormationCfg(flags) -> ComponentAccumulator:
         
         acc.merge(ActsStripSpacePointFormationCfg(flags,
                                                   name="ActsConversionStripSpacePointFormation",
-                                                  StripClusters="ITkConversionStripClusters",
+                                                  StripClusters="ITkConversionStripClusters_InView" if flags.Acts.useCache else "ITkConversionStripClusters",
                                                   StripSpacePoints="ITkConversionStripSpacePoints",
                                                   StripOverlapSpacePoints="ITkConversionStripOverlapSpacePoints"))
 
diff --git a/Tracking/Acts/ActsConfig/python/ActsTrackFindingConfig.py b/Tracking/Acts/ActsConfig/python/ActsTrackFindingConfig.py
index 0f9716cb21c7..af567777b304 100644
--- a/Tracking/Acts/ActsConfig/python/ActsTrackFindingConfig.py
+++ b/Tracking/Acts/ActsConfig/python/ActsTrackFindingConfig.py
@@ -132,7 +132,8 @@ def ActsTrackFindingCfg(flags) -> ComponentAccumulator:
 
     # Acts Main pass
     if flags.Tracking.ActiveConfig.extension == "Acts":
-        acc.merge(ActsMainTrackFindingCfg(flags))
+        acc.merge(ActsMainTrackFindingCfg(flags,
+                                          UncalibratedMeasurementContainerKeys = ["ITkPixelClusters_InView", "ITkStripClusters_InView"] if flags.Acts.useCache else ["ITkPixelClusters", "ITkStripClusters"]))
         # Acts Conversion pass
     elif flags.Tracking.ActiveConfig.extension == "ActsConversion":
         prefix="SiSPSeededActsConversionTrack"
@@ -142,7 +143,7 @@ def ActsTrackFindingCfg(flags) -> ComponentAccumulator:
                                           SeedLabels=["SSS"],
                                           EstimatedTrackParametersKeys=["ITkConversionStripEstimatedTrackParams"],
                                           SeedContainerKeys=["ITkConversionStripSeeds"],
-                                          UncalibratedMeasurementContainerKeys=["ITkPixelClusters", "ITkConversionStripClusters"],
+                                          UncalibratedMeasurementContainerKeys=["ITkPixelClusters_InView", "ITkConversionStripClusters"] if flags.Acts.useCache else ["ITkPixelClusters", "ITkConversionStripClusters"], # for the time being we do not pass InView collections for strips here due to issue with the CKF stage
                                           TrackBackEndPrefixName=prefix,
                                           MTJBackEndPrefixName=prefix))
     # Any other pass -> mainly validation
diff --git a/Tracking/Acts/ActsDataPreparation/src/ClusterizationAlg.h b/Tracking/Acts/ActsDataPreparation/src/ClusterizationAlg.h
index 03ab30287130..8974cbcc9faa 100644
--- a/Tracking/Acts/ActsDataPreparation/src/ClusterizationAlg.h
+++ b/Tracking/Acts/ActsDataPreparation/src/ClusterizationAlg.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef ACTSTRK_DATAPREPARATION_CLUSTERIZATIONALG_H
@@ -76,7 +76,7 @@ private:
 
     Cache_WriteHandleKey m_ClusterCache{this,"ClusterCache",""};
     Cache_BackendUpdateHandleKey m_ClusterCacheBackend{this,"ClusterCacheBackend",""};
-    bool m_cache_enabled{false};
+    Gaudi::Property< bool > m_cache_enabled {this, "EnableCache", false};
 
     // expected number of clusters for RDO
     // This values is used for reserving enough memory of the cluster container
diff --git a/Tracking/Acts/ActsDataPreparation/src/ClusterizationAlg.icc b/Tracking/Acts/ActsDataPreparation/src/ClusterizationAlg.icc
index eecde7068f44..507aabef576e 100644
--- a/Tracking/Acts/ActsDataPreparation/src/ClusterizationAlg.icc
+++ b/Tracking/Acts/ActsDataPreparation/src/ClusterizationAlg.icc
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "AthenaMonitoringKernel/Monitored.h"
@@ -30,10 +30,8 @@ StatusCode ClusterizationAlg<IClusteringTool>::initialize()
     ATH_CHECK(m_monTool.retrieve(EnableTool{not m_monTool.empty()}));
 
     //caching
-    ATH_CHECK(m_ClusterCache.initialize(SG::AllowEmpty));
-    ATH_CHECK(m_ClusterCacheBackend.initialize(SG::AllowEmpty));
-
-    m_cache_enabled = !m_ClusterCache.key().empty();
+    ATH_CHECK(m_ClusterCache.initialize(m_cache_enabled));
+    ATH_CHECK(m_ClusterCacheBackend.initialize(m_cache_enabled));
 
     return StatusCode::SUCCESS;
 }
-- 
GitLab