From cb1c0e48736ab7fd622bdfd45adf5f7f7c04180c Mon Sep 17 00:00:00 2001
From: Rupert Tombs <rt500@cam.ac.uk>
Date: Tue, 14 Jul 2020 12:37:44 +0100
Subject: [PATCH] Link new config for tools. Move particlebrokers out of core
 to avoid circular imports. Add flake8.

Avoid including excess GeoIDSvc instances with different names between AFII and otherwise. Thanks to JC
---
 .../ISF/ISF_Core/ISF_Services/CMakeLists.txt  |  2 +-
 .../python/ISF_ServicesConfigNew.py           | 38 ++++++++++++++++-
 .../python/ISF_ServicesCoreConfigNew.py       | 28 +------------
 .../ISF/ISF_Core/ISF_Tools/CMakeLists.txt     |  2 +-
 .../ISF_Tools/python/ISF_ToolsConfigNew.py    | 29 +++++++++----
 .../python/ISF_Geant4CommonToolsConfigNew.py  | 41 ++++++++++++-------
 .../ISF_Geant4/ISF_Geant4Tools/CMakeLists.txt |  2 +-
 .../python/ISF_Geant4ToolsConfigNew.py        |  3 +-
 8 files changed, 92 insertions(+), 53 deletions(-)

diff --git a/Simulation/ISF/ISF_Core/ISF_Services/CMakeLists.txt b/Simulation/ISF/ISF_Core/ISF_Services/CMakeLists.txt
index 27dfefdb3c5..ac713fc23b9 100644
--- a/Simulation/ISF/ISF_Core/ISF_Services/CMakeLists.txt
+++ b/Simulation/ISF/ISF_Core/ISF_Services/CMakeLists.txt
@@ -99,5 +99,5 @@ atlas_add_test( ISF_ServicesConfigNew_test
 set_target_properties( ISF_Services_TruthSvc_test PROPERTIES ENABLE_EXPORTS True )
 
 # Install files from the package:
-atlas_install_python_modules( python/*.py )
+atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
 
diff --git a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py
index 7cefb98f4f5..9e911a26c77 100644
--- a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py
+++ b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesConfigNew.py
@@ -20,7 +20,10 @@ from ISF_HepMC_Tools.ISF_HepMC_ToolsConfigNew import (
     ParticleSimWhiteListCfg,
 )
 from BarcodeServices.BarcodeServicesConfigNew import BarcodeSvcCfg
-
+from ISF_Geant4CommonTools.ISF_Geant4CommonToolsConfigNew import (
+    EntryLayerToolCfg, AFIIEntryLayerToolCfg
+)
+from ISF_Tools.ISF_ToolsConfigNew import ParticleOrderingToolCfg
 
 def GenParticleFiltersToolCfg(ConfigFlags):
     result = ComponentAccumulator()
@@ -64,6 +67,39 @@ def LongLivedInputConverterCfg(ConfigFlags, name="ISF_LongLivedInputConverter",
     return InputConverterCfg(name, **kwargs)
 
 
+def ParticleBrokerSvcNoOrderingCfg(ConfigFlags, name="ISF_ParticleBrokerSvcNoOrdering", **kwargs):
+    result = EntryLayerToolCfg(ConfigFlags)
+    kwargs.setdefault("EntryLayerTool", result.popPrivateTools())
+    kwargs.setdefault("GeoIDSvc", result.getService("ISF_GeoIDSvc"))
+    kwargs.setdefault("AlwaysUseGeoIDSvc", False)
+    kwargs.setdefault("ValidateGeoIDs", ConfigFlags.ISF.ValidationMode)
+    kwargs.setdefault("ValidationOutput", ConfigFlags.ISF.ValidationMode)
+    kwargs.setdefault("ValidationStreamName", "ParticleBroker")
+    
+    baracc = BarcodeSvcCfg(ConfigFlags)
+    kwargs.setdefault("BarcodeService", baracc.getPrimary())
+    result.merge(baracc)
+    
+    result.addService(CompFactory.ISF.ParticleBrokerDynamicOnReadIn(name, **kwargs))
+    return result
+
+
+def ParticleBrokerSvcCfg(ConfigFlags, name="ISF_ParticleBrokerSvc", **kwargs):
+    # comment copied from old config
+    #kwargs.setdefault("ParticleOrderingTool", "ISF_InToOutSubDetOrderingTool")
+    result = ParticleOrderingToolCfg(ConfigFlags)
+    kwargs.setdefault("ParticleOrderingTool", result.popPrivateTools())
+    result.merge(ParticleBrokerSvcNoOrderingCfg(name, **kwargs))
+    return result
+
+
+def AFIIParticleBrokerSvcCfg(ConfigFlags, name="ISF_AFIIParticleBrokerSvc", **kwargs):
+    result = AFIIEntryLayerToolCfg(ConfigFlags)
+    kwargs.setdefault("EntryLayerTool", result.popPrivateTools())
+    result.merge(ParticleBrokerSvcCfg(name, **kwargs))
+    return result
+
+
 # Generic Truth Service Configurations
 def TruthServiceCfg(ConfigFlags, **kwargs):
     """Return the TruthService config flagged by Sim.TruthStrategy"""
diff --git a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesCoreConfigNew.py b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesCoreConfigNew.py
index 6dc3ea47bff..fac9ab538c0 100644
--- a/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesCoreConfigNew.py
+++ b/Simulation/ISF/ISF_Core/ISF_Services/python/ISF_ServicesCoreConfigNew.py
@@ -8,34 +8,9 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaCommon.SystemOfUnits import mm
 from SubDetectorEnvelopes.SubDetectorEnvelopesConfigNew import EnvelopeDefSvcCfg
-from BarcodeServices.BarcodeServicesConfigNew import BarcodeSvcCfg
 from ISF_Tools.ISF_ToolsConfigNew import ParticleKillerToolCfg
 
 
-def ParticleBrokerSvcNoOrderingCfg(ConfigFlags, name="ISF_ParticleBrokerSvcNoOrdering", **kwargs):
-    kwargs.setdefault("EntryLayerTool", "ISF_EntryLayerTool") # TODO
-    kwargs.setdefault("GeoIDSvc", "ISF_GeoIDSvc") # TODO
-    kwargs.setdefault("AlwaysUseGeoIDSvc", False)
-    kwargs.setdefault("ValidateGeoIDs", ConfigFlags.ISF.ValidationMode)
-    kwargs.setdefault("ValidationOutput", ConfigFlags.ISF.ValidationMode)
-    kwargs.setdefault("ValidationStreamName", "ParticleBroker")
-    result = BarcodeSvcCfg(ConfigFlags)
-    kwargs.setdefault("BarcodeService", result.getPrimary())
-    result.addService(CompFactory.ISF.ParticleBrokerDynamicOnReadIn(name, **kwargs))
-    return result
-
-
-def ParticleBrokerSvcCfg(ConfigFlags, name="ISF_ParticleBrokerSvc", **kwargs):
-    #kwargs.setdefault("ParticleOrderingTool", "ISF_InToOutSubDetOrderingTool")
-    kwargs.setdefault("ParticleOrderingTool", "ISF_ParticleOrderingTool") # TODO
-    return ParticleBrokerSvcNoOrderingCfg(name, **kwargs)
-
-
-def AFIIParticleBrokerSvcCfg(ConfigFlags, name="ISF_AFIIParticleBrokerSvc", **kwargs):
-    kwargs.setdefault("EntryLayerTool", "ISF_AFIIEntryLayerTool") # TODO
-    return ParticleBrokerSvcCfg(name, **kwargs)
-
-
 def ISFEnvelopeDefSvcCfg(ConfigFlags, name="ISF_ISFEnvelopeDefSvc", **kwargs):
     result = EnvelopeDefSvcCfg(ConfigFlags)
     # ATLAS common envlope definitions
@@ -72,7 +47,8 @@ def AFIIGeoIDSvcCfg(ConfigFlags, name="ISF_AFIIGeoIDSvc", **kwargs):
 def ParticleKillerSvcCfg(ConfigFlags, name="ISF_ParticleKillerSvc", **kwargs):
     result = ComponentAccumulator()
     kwargs.setdefault("Identifier", "ParticleKiller")
-    kwargs.setdefault("SimulatorTool", ParticleKillerToolCfg(ConfigFlags))
+    tool = result.popToolsAndMerge(ParticleKillerToolCfg(ConfigFlags))
+    kwargs.setdefault("SimulatorTool", tool)
     svc = CompFactory.ISF.LegacySimSvc(name, **kwargs)
     result.addService(svc)
     return result
diff --git a/Simulation/ISF/ISF_Core/ISF_Tools/CMakeLists.txt b/Simulation/ISF/ISF_Core/ISF_Tools/CMakeLists.txt
index 5b8165fe255..5546a231ded 100644
--- a/Simulation/ISF/ISF_Core/ISF_Tools/CMakeLists.txt
+++ b/Simulation/ISF/ISF_Core/ISF_Tools/CMakeLists.txt
@@ -12,5 +12,5 @@ atlas_add_component( ISF_Tools
                      LINK_LIBRARIES GaudiKernel AthenaBaseComps AtlasDetDescr BarcodeInterfacesLib GeneratorObjects ISF_Event ISF_InterfacesLib TrackRecordLib )
 
 # Install files from the package:
-atlas_install_python_modules( python/*.py )
+atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
 
diff --git a/Simulation/ISF/ISF_Core/ISF_Tools/python/ISF_ToolsConfigNew.py b/Simulation/ISF/ISF_Core/ISF_Tools/python/ISF_ToolsConfigNew.py
index 2b8c4355e8c..b985690499a 100644
--- a/Simulation/ISF/ISF_Core/ISF_Tools/python/ISF_ToolsConfigNew.py
+++ b/Simulation/ISF/ISF_Core/ISF_Tools/python/ISF_ToolsConfigNew.py
@@ -2,6 +2,7 @@
 
 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 """
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaCommon.SystemOfUnits import MeV
 from BarcodeServices.BarcodeServicesConfigNew import BarcodeSvcCfg
@@ -15,7 +16,9 @@ def ParticleHelperCfg(flags, name="ISF_ParticleHelper", **kwargs):
 
 
 def MemoryMonitorToolCfg(flags, name="ISF_MemoryMonitor", **kwargs):
-    return CompFactory.ISF.MemoryMonitoringTool(name, **kwargs)
+    acc = ComponentAccumulator()
+    acc.setPrivateTools(CompFactory.ISF.MemoryMonitoringTool(name, **kwargs))
+    return acc
 
 
 def EntryLayerFilterCfg(ConfigFlags, **kwargs):
@@ -112,12 +115,16 @@ def CosmicEventFilterToolCfg(flags, name="ISF_CosmicEventFilter", **kwargs):
     kwargs.setdefault("PDG_ID", flags.Sim.CosmicFilterID)
     kwargs.setdefault("ptMin", flags.Sim.CosmicFilterPTmin)
     kwargs.setdefault("ptMax", flags.Sim.CosmicFilterPTmax)
-    return CompFactory.ISF.CosmicEventFilterTool(name, **kwargs)
+    acc = ComponentAccumulator()
+    acc.setPrivateTools(CompFactory.ISF.CosmicEventFilterTool(name, **kwargs))
+    return acc
 
 
 def StoppedParticleFilterToolCfg(flags, name="ISF_StoppedParticleFilter", **kwargs):
     kwargs.setdefault("VolumeNames", ["StoppingPositions"])
-    return CompFactory.ISF.CosmicEventFilterTool(name, **kwargs)
+    acc = ComponentAccumulator()
+    acc.setPrivateTools(CompFactory.ISF.CosmicEventFilterTool(name, **kwargs))
+    return acc
 
 
 def InToOutSubDetOrderingToolCfg(flags, name="ISF_InToOutSubDetOrderingTool", **kwargs):
@@ -127,7 +134,9 @@ def InToOutSubDetOrderingToolCfg(flags, name="ISF_InToOutSubDetOrderingTool", **
     kwargs.setdefault("OrderCalo"    , 10000    )
     kwargs.setdefault("OrderMS"      , 100      )
     kwargs.setdefault("OrderCavern"  , 1        )
-    return CompFactory.ISF.GenericParticleOrderingTool(name, **kwargs)
+    acc = ComponentAccumulator()
+    acc.setPrivateTools(CompFactory.ISF.GenericParticleOrderingTool(name, **kwargs))
+    return acc
 
 
 def ParticleOrderingToolCfg(flags, name="ISF_ParticleOrderingTool", **kwargs):
@@ -136,12 +145,18 @@ def ParticleOrderingToolCfg(flags, name="ISF_ParticleOrderingTool", **kwargs):
     kwargs.setdefault("OrderCalo"    , 1)
     kwargs.setdefault("OrderMS"      , 1)
     kwargs.setdefault("OrderCavern"  , 1)
-    return CompFactory.ISF.GenericParticleOrderingTool(name, **kwargs)
+    acc = ComponentAccumulator()
+    acc.setPrivateTools(CompFactory.ISF.GenericParticleOrderingTool(name, **kwargs))
+    return acc
 
 
 def EnergyParticleOrderingToolCfg(flags, name="ISF_EnergyParticleOrderingTool", **kwargs):
-    return CompFactory.ISF.EnergyParticleOrderingTool(name, **kwargs)
+    acc = ComponentAccumulator()
+    acc.setPrivateTools(CompFactory.ISF.EnergyParticleOrderingTool(name, **kwargs))
+    return acc
 
 
 def ParticleKillerToolCfg(flags, name="ISF_ParticleKillerTool", **kwargs):
-    return CompFactory.ISF.ParticleKillerSimTool(name, **kwargs)
+    acc = ComponentAccumulator()
+    acc.setPrivateTools(CompFactory.ISF.ParticleKillerSimTool(name, **kwargs))
+    return acc
diff --git a/Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools/python/ISF_Geant4CommonToolsConfigNew.py b/Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools/python/ISF_Geant4CommonToolsConfigNew.py
index ab18670d240..ef13934d41a 100644
--- a/Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools/python/ISF_Geant4CommonToolsConfigNew.py
+++ b/Simulation/ISF/ISF_Geant4/ISF_Geant4CommonTools/python/ISF_Geant4CommonToolsConfigNew.py
@@ -2,16 +2,19 @@
 
 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 """
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
-from ISF_Services.ISF_ServicesConfigNew import GeoIDSvcCfg, AFIIGeoIDSvcCfg
+from ISF_Services.ISF_ServicesCoreConfigNew import GeoIDSvcCfg, AFIIGeoIDSvcCfg
 from ISF_Tools.ISF_ToolsConfigNew import EntryLayerFilterCfg
 
 
 def EntryLayerToolCfg(flags, name="ISF_EntryLayerTool", **kwargs):
-    acc = GeoIDSvcCfg(flags)
-    kwargs.setdefault("GeoIDSvc", acc.getService("ISF_GeoIDSvc"))
-    acc_filter = EntryLayerFilterCfg(flags)
-    kwargs.setdefault("ParticleFilters", [acc.popToolsAndMerge(acc_filter)])
+    acc = ComponentAccumulator()
+    if "GeoIDSvc" not in kwargs:
+        acc.merge(GeoIDSvcCfg(flags))
+        kwargs["GeoIDSvc"] = acc.getService("ISF_GeoIDSvc")
+    filt = acc.popToolsAndMerge(EntryLayerFilterCfg(flags))
+    kwargs.setdefault("ParticleFilters", [filt])
     if flags.Sim.DoFullChain: # TODO and DetFlags.pileup.any_on():
         kwargs.setdefault("EvtStore", "OriginalEvent_SG") # For Fast Chain
     acc.setPrivateTools(CompFactory.ISF.EntryLayerTool(name, **kwargs))
@@ -19,10 +22,12 @@ def EntryLayerToolCfg(flags, name="ISF_EntryLayerTool", **kwargs):
 
 
 def EntryLayerToolMTCfg(flags, name="ISF_EntryLayerToolMT", **kwargs):
-    acc = GeoIDSvcCfg(flags)
-    kwargs.setdefault("GeoIDSvc", acc.getService("ISF_GeoIDSvc"))
-    acc_filter = EntryLayerFilterCfg(flags)
-    kwargs.setdefault("ParticleFilters", [acc.popToolsAndMerge(acc_filter)])
+    acc = ComponentAccumulator()
+    if "GeoIDSvc" not in kwargs:
+        acc.merge(GeoIDSvcCfg(flags))
+        kwargs["GeoIDSvc"] = acc.getService("ISF_GeoIDSvc")
+    filt = acc.popToolsAndMerge(EntryLayerFilterCfg(flags))
+    kwargs.setdefault("ParticleFilters", [filt])
     if flags.Sim.DoFullChain: # TODO and DetFlags.pileup.any_on():
         kwargs.setdefault("EvtStore", "OriginalEvent_SG") # For Fast Chain
     acc.setPrivateTools(CompFactory.ISF.EntryLayerToolMT(name, **kwargs))
@@ -30,14 +35,20 @@ def EntryLayerToolMTCfg(flags, name="ISF_EntryLayerToolMT", **kwargs):
 
 
 def AFIIEntryLayerToolCfg(flags, name="ISF_AFIIEntryLayerTool", **kwargs):
-    acc = AFIIGeoIDSvcCfg(flags)
-    kwargs.setdefault("GeoIDSvc", acc.getService("ISF_AFIIGeoIDSvc"))
-    acc.merge(EntryLayerToolCfg(name, **kwargs))
+    acc = ComponentAccumulator()
+    if "GeoIDSvc" not in kwargs:
+        acc.merge(AFIIGeoIDSvcCfg(flags))
+        kwargs["GeoIDSvc"] = acc.getService("ISF_AFIIGeoIDSvc")
+    tool = acc.popToolsAndMerge(EntryLayerToolCfg(name, **kwargs))
+    acc.setPrivateTools(tool)
     return acc
 
 
 def AFIIEntryLayerToolMTCfg(flags, name="ISF_AFIIEntryLayerToolMT", **kwargs):
-    acc = AFIIGeoIDSvcCfg(flags)
-    kwargs.setdefault("GeoIDSvc", acc.getService("ISF_AFIIGeoIDSvc"))
-    acc.merge(EntryLayerToolMTCfg(name, **kwargs))
+    acc = ComponentAccumulator()
+    if "GeoIDSvc" not in kwargs:
+        acc.merge(AFIIGeoIDSvcCfg(flags))
+        kwargs["GeoIDSvc"] = acc.getService("ISF_AFIIGeoIDSvc")
+    tool = acc.popToolsAndMerge(EntryLayerToolMTCfg(name, **kwargs))
+    acc.setPrivateTools(tool)
     return acc
diff --git a/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/CMakeLists.txt b/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/CMakeLists.txt
index 4b519f49a9d..a055119d2cf 100644
--- a/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/CMakeLists.txt
+++ b/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/CMakeLists.txt
@@ -26,5 +26,5 @@ atlas_add_component( ISF_Geant4Tools
                      LINK_LIBRARIES ${ROOT_LIBRARIES} ${XERCESC_LIBRARIES} ${CLHEP_LIBRARIES} AtlasHepMCLib ${GEANT4_LIBRARIES} ${EIGEN_LIBRARIES} AthenaKernel GaudiKernel G4AtlasInterfaces AthenaBaseComps StoreGateLib SGtests AtlasDetDescr GeneratorObjects G4AtlasToolsLib G4AtlasAlgLib MCTruth SimHelpers ISF_Event ISF_InterfacesLib ISF_Geant4Event ISF_Geant4ToolsLib )
 
 # Install files from the package:
-atlas_install_python_modules( python/*.py )
+atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
 
diff --git a/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfigNew.py b/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfigNew.py
index f132d21e71f..6d92ec8ecf0 100644
--- a/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfigNew.py
+++ b/Simulation/ISF/ISF_Geant4/ISF_Geant4Tools/python/ISF_Geant4ToolsConfigNew.py
@@ -5,8 +5,9 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaCommon.SystemOfUnits import MeV
+from ISF_Services.ISF_ServicesCoreConfigNew import GeoIDSvcCfg, AFIIGeoIDSvcCfg
 from ISF_Services.ISF_ServicesConfigNew import (
-    TruthServiceCfg, GeoIDSvcCfg, AFIIGeoIDSvcCfg,
+    TruthServiceCfg,
     ParticleBrokerSvcCfg, InputConverterCfg,
     LongLivedInputConverterCfg
 )
-- 
GitLab