From c149311245ae289861dcb1975abe28a3c90bf7df Mon Sep 17 00:00:00 2001
From: Luthien Mlynarski <marek.piotr.mlynarski@cern.ch>
Date: Tue, 23 Apr 2024 14:07:03 +0200
Subject: [PATCH] Added Acts Heavy Ion functions

Added Acts Heavy Ion functions
---
 .../InDetConfig/python/ITkTrackRecoConfig.py  |  6 ++++
 .../Acts/ActsConfig/python/ActsCIFlags.py     |  7 ++++-
 .../python/ActsTrackingPassFlags.py           | 25 +++++++++++++++-
 .../share/ActsTrackingComponents.ref          | 29 +++++++++++++++++++
 .../ActsConfig/test/ActsTrackingComponents.py |  1 +
 Tracking/TrkConfig/python/TrkConfigFlags.py   |  6 +++-
 6 files changed, 71 insertions(+), 3 deletions(-)

diff --git a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
index 3415222c521f..9deb9c89c107 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
@@ -36,6 +36,12 @@ def CombinedTrackingPassFlagSets(flags):
         flags_set += [flags.cloneAndReplace(
             "Tracking.ActiveConfig",
             "Tracking.ITkActsPass")]
+
+    # Acts Heavy Ion Pass
+    if TrackingComponent.ActsHeavyIon in flags.Tracking.recoChain:
+        flags_set += [flags.cloneAndReplace(
+            "Tracking.ActiveConfig",
+            "Tracking.ITkActsHeavyIonPass")]
         
     # GNN pass
     if TrackingComponent.GNNChain in flags.Tracking.recoChain:
diff --git a/Tracking/Acts/ActsConfig/python/ActsCIFlags.py b/Tracking/Acts/ActsConfig/python/ActsCIFlags.py
index 7d0790c9eda9..6682916d1188 100644
--- a/Tracking/Acts/ActsConfig/python/ActsCIFlags.py
+++ b/Tracking/Acts/ActsConfig/python/ActsCIFlags.py
@@ -10,7 +10,12 @@ def actsAloneWorkflowFlags(flags) -> None:
     from TrkConfig.TrkConfigFlags import TrackingComponent
     flags.Tracking.recoChain = [TrackingComponent.ActsChain]
     
-    
+def actsHeavyIonFlags(flags) -> None:
+    flags.Tracking.recoChain = [TrackingComponent.ActsHeavyIon]
+    flags.Tracking.doTruth = False
+    flags.Reco.EnableHGTDExtension = False
+    flags.Acts.doAmbiguityResolution = False
+
 def actsWorkflowFlags(flags) -> None:
     """flags for Reco_tf with CA used in CI tests: add Acts workflow to reco sequence"""
     flags.DQ.useTrigger = False
diff --git a/Tracking/Acts/ActsConfig/python/ActsTrackingPassFlags.py b/Tracking/Acts/ActsConfig/python/ActsTrackingPassFlags.py
index 3f68bccce950..3cf34ad5f352 100644
--- a/Tracking/Acts/ActsConfig/python/ActsTrackingPassFlags.py
+++ b/Tracking/Acts/ActsConfig/python/ActsTrackingPassFlags.py
@@ -1,6 +1,6 @@
 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration 
 
-from TrkConfig.TrackingPassFlags import createITkTrackingPassFlags, createITkConversionTrackingPassFlags
+from TrkConfig.TrackingPassFlags import createITkTrackingPassFlags, createITkConversionTrackingPassFlags, createITkHeavyIonTrackingPassFlags
 
 def deactivateAthenaComponents(icf):
     icf.doAthenaCluster = False
@@ -24,6 +24,29 @@ def createActsTrackingPassFlags():
 
     return icf
 
+def createActsHeavyIonTrackingPassFlags():
+    icf = createITkHeavyIonTrackingPassFlags()
+    icf.extension = "ActsHeavyIon"
+    deactivateAthenaComponents(icf)
+    icf.doAthenaCluster = True
+    icf.doAthenaToActsCluster = True
+    icf.doActsSpacePoint = True
+    icf.doActsSeed = True
+    icf.doActsTrack = True
+    # If we do not want acts ambi resolution, first do the track convertion
+    # and then the Athena ambi
+    icf.doActsToAthenaTrack = lambda pcf : not pcf.Acts.doAmbiguityResolution
+    icf.doAthenaAmbiguityResolution = lambda pcf : not pcf.Acts.doAmbiguityResolution
+    # If we want acts ambi, first do the ambi and then convert the tracks
+    # without Athena ambi
+    icf.doActsAmbiguityResolution = lambda pcf : pcf.Acts.doAmbiguityResolution
+    icf.doActsToAthenaResolvedTrack = lambda pcf : pcf.Acts.doAmbiguityResolution
+
+    # Deactivate CTIDE processor fit
+    icf.doAmbiguityProcessorTrackFit = False
+
+    return icf
+
 def createActsConversionTrackingPassFlags():
     icf = createITkConversionTrackingPassFlags()
     icf.extension = "ActsConversion"
diff --git a/Tracking/Acts/ActsConfig/share/ActsTrackingComponents.ref b/Tracking/Acts/ActsConfig/share/ActsTrackingComponents.ref
index d738d3cede3e..4b641b767878 100644
--- a/Tracking/Acts/ActsConfig/share/ActsTrackingComponents.ref
+++ b/Tracking/Acts/ActsConfig/share/ActsTrackingComponents.ref
@@ -58,6 +58,35 @@ Tracking.ActiveConfig          points to           Tracking.ITkActsPass
 Tracking.ITkActsPass           points to                        nothing 
 ************************************************************************
 
+************************************************************************
+******************** Tracking reconstruction Config ********************
+                     Active Config is ActsHeavyIon
+Tracking.ActiveConfig.doAthenaAmbiguityResolution : True [function]
+Tracking.ActiveConfig.doAthenaCluster    : True
+Tracking.ActiveConfig.doAthenaSeed       : False
+Tracking.ActiveConfig.doAthenaSpacePoint : False
+Tracking.ActiveConfig.doAthenaToActsCluster : True
+Tracking.ActiveConfig.doAthenaToActsSpacePoint : False
+Tracking.ActiveConfig.doAthenaToActsTrack : False
+Tracking.ActiveConfig.doAthenaTrack      : False
+Flag categories that are redirected by the cloneAndReplace
+Tracking.ActiveConfig          points to   Tracking.ITkActsHeavyIonPass 
+Tracking.ITkActsHeavyIonPass   points to                        nothing 
+Tracking.ActiveConfig.doActsAmbiguityResolution : False [function]
+Tracking.ActiveConfig.doActsCluster      : False
+Tracking.ActiveConfig.doActsSeed         : True
+Tracking.ActiveConfig.doActsSpacePoint   : True
+Tracking.ActiveConfig.doActsToAthenaCluster : False
+Tracking.ActiveConfig.doActsToAthenaResolvedTrack : False [function]
+Tracking.ActiveConfig.doActsToAthenaSeed : False
+Tracking.ActiveConfig.doActsToAthenaSpacePoint : False
+Tracking.ActiveConfig.doActsToAthenaTrack : True [function]
+Tracking.ActiveConfig.doActsTrack        : True
+Flag categories that are redirected by the cloneAndReplace
+Tracking.ActiveConfig          points to   Tracking.ITkActsHeavyIonPass 
+Tracking.ITkActsHeavyIonPass   points to                        nothing 
+************************************************************************
+
 ************************************************************************
 ******************** Tracking reconstruction Config ********************
                      Active Config is ActsValidateClusters
diff --git a/Tracking/Acts/ActsConfig/test/ActsTrackingComponents.py b/Tracking/Acts/ActsConfig/test/ActsTrackingComponents.py
index 5837e3bc8b86..a0d68a05fc66 100755
--- a/Tracking/Acts/ActsConfig/test/ActsTrackingComponents.py
+++ b/Tracking/Acts/ActsConfig/test/ActsTrackingComponents.py
@@ -22,6 +22,7 @@ if __name__ == "__main__":
     from TrkConfig.TrkConfigFlags import TrackingComponent
     configurations = ["Main",
                       "Acts",
+                      "ActsHeavyIon",
                       "ActsValidateClusters",
                       "ActsValidateSpacePoints",
                       "ActsValidateSeeds",
diff --git a/Tracking/TrkConfig/python/TrkConfigFlags.py b/Tracking/TrkConfig/python/TrkConfigFlags.py
index 66e1448360de..8ccf5d7620ad 100644
--- a/Tracking/TrkConfig/python/TrkConfigFlags.py
+++ b/Tracking/TrkConfig/python/TrkConfigFlags.py
@@ -44,6 +44,7 @@ class PixelClusterSplittingType(FlagEnum):
 class TrackingComponent(FlagEnum):
     AthenaChain = "AthenaChain"  # full Athena Chain (default)
     ActsChain = "ActsChain"  # full Acts Chain
+    ActsHeavyIon = "ActsHeavyIon"
     # Validation options
     ActsValidateClusters = "ActsValidateClusters"
     ActsValidateSpacePoints = "ActsValidateSpacePoints"
@@ -515,7 +516,8 @@ def createTrackingConfigFlags():
         createActsValidateSeedsTrackingPassFlags,
         createActsValidateTracksTrackingPassFlags,
         createActsValidateAmbiguityResolutionTrackingPassFlags,
-        createActsBenchmarkSpotTrackingPassFlags
+        createActsBenchmarkSpotTrackingPassFlags,
+        createActsHeavyIonTrackingPassFlags
     )
 
     icf.addFlagsCategory ("Tracking.ITkActsPass",
@@ -534,6 +536,8 @@ def createTrackingConfigFlags():
                           createActsValidateAmbiguityResolutionTrackingPassFlags, prefix=True)
     icf.addFlagsCategory ("Tracking.ITkActsBenchmarkSpotPass",
                           createActsBenchmarkSpotTrackingPassFlags, prefix=True)
+    icf.addFlagsCategory ("Tracking.ITkActsHeavyIonPass",
+                          createActsHeavyIonTrackingPassFlags, prefix=True)
 
     # GNN
     from InDetGNNTracking.InDetGNNTrackingFlags import createGNNTrackingPassFlags
-- 
GitLab