From 8dc8c482c144bf8d81728ffef1134427119f1cb0 Mon Sep 17 00:00:00 2001
From: John Derek Chapman <chapman@hep.phy.cam.ac.uk>
Date: Mon, 17 Feb 2025 09:49:54 +0000
Subject: [PATCH] Patches to FastCaloSim configurations

Patches to FastCaloSim configurations
---
 .../G4AtlasAlg/python/G4AtlasAlgConfig.py     | 18 +++++--------
 .../G4AtlasTools/python/G4AtlasToolsConfig.py | 27 ++++++++++++++++---
 .../ISF/ISF_Config/python/ISF_MainConfig.py   | 11 ++------
 .../python/ISF_Geant4ToolsConfig.py           |  4 +++
 4 files changed, 35 insertions(+), 25 deletions(-)

diff --git a/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfig.py b/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfig.py
index 2f7363bf51ea..5c1df6d1b42a 100644
--- a/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfig.py
+++ b/Simulation/G4Atlas/G4AtlasAlg/python/G4AtlasAlgConfig.py
@@ -2,7 +2,7 @@
 from G4AtlasServices.G4AtlasServicesConfig import DetectorGeometrySvcCfg, PhysicsListSvcCfg
 from ISF_Services.ISF_ServicesConfig import TruthServiceCfg, InputConverterCfg
 from ISF_Services.ISF_ServicesCoreConfig import GeoIDSvcCfg
-from G4AtlasTools.G4AtlasToolsConfig import SensitiveDetectorMasterToolCfg, FastSimulationMasterToolCfg, SimHitContainerListCfg
+from G4AtlasTools.G4AtlasToolsConfig import SensitiveDetectorMasterToolCfg, FastSimulationMasterToolCfg
 from G4AtlasServices.G4AtlasUserActionConfig import UserActionSvcCfg
 from SimulationConfig.SimulationMetadata import writeSimulationParametersMetadata, readSimulationParameters
 from AthenaConfiguration.ComponentFactory import CompFactory
@@ -31,19 +31,17 @@ def G4AtlasAlgCfg(flags, name="G4AtlasAlg", **kwargs):
 
     ## Don't drop the GeoModel
     kwargs.setdefault("ReleaseGeoModel", flags.Sim.ReleaseGeoModel)
-    
+
+    from G4AtlasTools.G4AtlasToolsConfig import SimHitContainerListCfg, InputContainerListCfg
+    kwargs.setdefault("ExtraOutputs", SimHitContainerListCfg(flags) )
+    kwargs.setdefault("ExtraInputs" , InputContainerListCfg(flags))
+
     from SimulationConfig.SimEnums import LArParameterization
     # Configure fast simulation
     if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
-        kwargs.setdefault("ExtraInputs",
-                          {('CaloDetDescrManager', 'ConditionStore+CaloDetDescrManager'),
-                           ('LArfSamplSym', 'ConditionStore+LArfSamplSym'),
-                           ('TileSamplingFraction', 'ConditionStore+TileSamplingFraction')})
         # Set the path to the simplified calorimeter geometry for particle transport if provided
         if flags.Sim.SimplifiedGeoPath:
             kwargs.setdefault('SimplifiedGeoPath', flags.Sim.SimplifiedGeoPath)
-        
-    kwargs.setdefault("ExtraOutputs", SimHitContainerListCfg(flags))
 
     ## Record the particle flux during the simulation
     kwargs.setdefault("RecordFlux", flags.Sim.RecordFlux)
@@ -104,10 +102,6 @@ def G4AtlasAlgCfg(flags, name="G4AtlasAlg", **kwargs):
 
     # Set commands for the G4AtlasAlg
     kwargs.setdefault("G4Commands", flags.Sim.G4Commands)
-    from SimulationConfig.SimEnums import CalibrationRun
-    if flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile, CalibrationRun.LArTileZDC]:
-        # Needed to ensure that DeadMaterialCalibrationHitsMerger is scheduled correctly.
-        kwargs.setdefault("ExtraOutputs", [( 'CaloCalibrationHitContainer' , 'StoreGateSvc+LArCalibrationHitActive_DEAD' ), ( 'CaloCalibrationHitContainer' , 'StoreGateSvc+LArCalibrationHitDeadMaterial_DEAD' ), ( 'CaloCalibrationHitContainer' , 'StoreGateSvc+LArCalibrationHitInactive_DEAD' )])
     result.addEventAlgo(CompFactory.G4AtlasAlg(name, **kwargs))
 
     return result
diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py b/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py
index c5eeadfc83f0..b61f98271c40 100644
--- a/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py
+++ b/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfig.py
@@ -304,20 +304,28 @@ def SimHitContainerListCfg(flags):
             from MuonG4SD.MuonG4SDConfig import SimHitContainerListCfg
             writtenContainers += SimHitContainerListCfg(flags)
     if flags.Detector.GeometryLAr:
-        if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
+        if (flags.Sim.ISFRun and flags.Sim.ISF.HITSMergingRequired.get('CALO', True)) or flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
             writtenContainers += [("LArHitContainer", "LArHitEMB_G4")]
             writtenContainers += [("LArHitContainer", "LArHitEMEC_G4")]
             writtenContainers += [("LArHitContainer", "LArHitFCAL_G4")]
             writtenContainers += [("LArHitContainer", "LArHitHEC_G4")]
+            if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
+                writtenContainers += [("LArHitContainer" , "LArHitHEC_FastCaloSim")]
+                writtenContainers += [("LArHitContainer" , "LArHitFCAL_FastCaloSim")]
+                writtenContainers += [("LArHitContainer" , "LArHitEMEC_FastCaloSim")]
+                writtenContainers += [("LArHitContainer" , "LArHitEMB_FastCaloSim")]
         else:
             writtenContainers += [("LArHitContainer", "LArHitEMB")]
             writtenContainers += [("LArHitContainer", "LArHitEMEC")]
             writtenContainers += [("LArHitContainer", "LArHitFCAL")]
             writtenContainers += [("LArHitContainer", "LArHitHEC")]
     if flags.Detector.GeometryTile:
-        if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
+        if (flags.Sim.ISFRun and flags.Sim.ISF.HITSMergingRequired.get('CALO', True)) or flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
             writtenContainers += [("TileHitVector", "MBTSHits_G4")]
             writtenContainers += [("TileHitVector", "TileHitVec_G4")]
+            if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
+                writtenContainers += [("TileHitVector" , "TileHitVec_FastCaloSim")]
+                writtenContainers += [("TileHitVector" , "MBTSHits_FastCaloSim")]
         else:
             writtenContainers += [("TileHitVector", "MBTSHits")]
             writtenContainers += [("TileHitVector", "TileHitVec")]
@@ -331,7 +339,7 @@ def SimHitContainerListCfg(flags):
     if flags.Detector.EnableSCT:
        writtenContainers += [("SiHitCollection", "SCT_Hits")]
     from SimulationConfig.SimEnums import CalibrationRun
-    if flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile]:
+    if flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile, CalibrationRun.LArTileZDC]:
         # Needed to ensure that DeadMaterialCalibrationHitsMerger is scheduled correctly.
         writtenContainers += [
             ( 'CaloCalibrationHitContainer' , 'StoreGateSvc+LArCalibrationHitActive_DEAD' ),
@@ -341,6 +349,17 @@ def SimHitContainerListCfg(flags):
 
     return writtenContainers
 
+
+def InputContainerListCfg(flags):
+    dependencies = []
+    from SimulationConfig.SimEnums import LArParameterization
+    if flags.Sim.LArParameterization is LArParameterization.FastCaloSim:
+        dependencies+=[('CaloDetDescrManager', 'ConditionStore+CaloDetDescrManager'),
+                       ('LArfSamplSym', 'ConditionStore+LArfSamplSym'),
+                       ('TileSamplingFraction', 'ConditionStore+TileSamplingFraction')]
+    return dependencies
+
+
 def SensitiveDetectorListCfg(flags):
     result = ComponentAccumulator()
     tools = []
@@ -429,4 +448,4 @@ def EmptySensitiveDetectorMasterToolCfg(name="EmptySensitiveDetectorMasterTool",
     result = ComponentAccumulator()
     tool = result.popToolsAndMerge(CompFactory.SensitiveDetectorMasterTool(name, **kwargs))
     result.setPrivateTools(tool)
-    return result
\ No newline at end of file
+    return result
diff --git a/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py b/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
index 0cc21270d8e9..6920af0999f8 100644
--- a/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
+++ b/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
@@ -68,15 +68,8 @@ def Kernel_GenericSimulatorMTCfg(flags, name="ISF_Kernel_GenericSimulatorMT", **
     kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
     kwargs.setdefault("InputEvgenCollection", "BeamTruthEvent")
     kwargs.setdefault("OutputTruthCollection", "TruthEvent")
-    from SimulationConfig.SimEnums import CalibrationRun
-    if flags.Sim.CalibrationRun in [CalibrationRun.LAr, CalibrationRun.LArTile, CalibrationRun.LArTileZDC]:
-        # Needed to ensure that DeadMaterialCalibrationHitsMerger is scheduled correctly.
-        kwargs.setdefault("ExtraOutputs", [
-            ( 'CaloCalibrationHitContainer', 'StoreGateSvc+LArCalibrationHitActive_DEAD' ),
-            ( 'CaloCalibrationHitContainer', 'StoreGateSvc+LArCalibrationHitDeadMaterial_DEAD' ),
-            ( 'CaloCalibrationHitContainer', 'StoreGateSvc+LArCalibrationHitInactive_DEAD' )
-        ])
-
+    from G4AtlasTools.G4AtlasToolsConfig import InputContainerListCfg
+    kwargs.setdefault("ExtraInputs" , InputContainerListCfg(flags))
     if flags.Sim.ISF.Simulator.isQuasiStable():
         if "QuasiStablePatcher" not in kwargs:
             from BeamEffects.BeamEffectsAlgConfig import ZeroLifetimePositionerCfg
diff --git a/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfig.py b/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfig.py
index 53beb13df480..12655067d6b6 100644
--- a/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfig.py
+++ b/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfig.py
@@ -53,6 +53,10 @@ def Geant4ToolCfg(flags, name="ISF_Geant4Tool", **kwargs):
     # PhysicsListSvc
     kwargs.setdefault("PhysicsListSvc", acc.getPrimaryAndMerge(PhysicsListSvcCfg(flags)).name)
 
+    if flags.Sim.ISF.Simulator.isMT():
+        from G4AtlasTools.G4AtlasToolsConfig import SimHitContainerListCfg
+        kwargs.setdefault("ExtraOutputs", SimHitContainerListCfg(flags) )
+
     # Workaround to keep other simulation flavours working while we migrate everything to be AthenaMT-compatible.
     from SimulationConfig.SimEnums import SimulationFlavour
     if flags.Sim.ISF.Simulator in [SimulationFlavour.ATLFAST3F_ACTSMT, SimulationFlavour.FullG4MT, SimulationFlavour.FullG4MT_QS, SimulationFlavour.PassBackG4MT, SimulationFlavour.ATLFAST3MT, SimulationFlavour.ATLFAST3MT_QS]:
-- 
GitLab