From 329fb60afc06cf96d4da08f69d43f77dff3fdb04 Mon Sep 17 00:00:00 2001
From: John Derek Chapman <chapman@hep.phy.cam.ac.uk>
Date: Thu, 13 Aug 2015 10:04:32 +0200
Subject: [PATCH] actually add python/FlagSetters.py and
 share/AllDet_detDescr.py. ATLASSIM-2148. Tagging ISF_Config-00-01-24
 (ISF_Config-00-01-24)

	* actually add python/FlagSetters.py and
	share/AllDet_detDescr.py. ATLASSIM-2148
	* tagging ISF_Config-00-01-24

2015-08-06  John Chapman  <John.Chapman@cern.ch>

	* add python/FlagSetters.py - module containing methods to set
	DetFlags and in the future other jobproperties in a
	simulator-specific way. ATLASSIM-2148
	* add python/AllDet_detDescr.py - replace the RecExCond version of
	this file with one that only does the minimum required for ISF.
	* share/ISF_ConfigJobInclude.py - remove all setting of
	DetFlags. This will now be done via the methods in
	FlagSetters.py. Include ISF_Config/AllDet_detDescr.py rather than
	RecExCond version. Use new ISF_Flags.Simulator.KernelName()
	method.
	* tagging ISF_Config-00-01-23

2015-07-31  John Chapman  <John.Chapman@cern.ch>
...
(Long ChangeLog diff - truncated)
---
 Simulation/ISF/ISF_Config/cmt/requirements    |   1 -
 .../ISF/ISF_Config/python/FlagSetters.py      | 168 +++++++
 .../ISF/ISF_Config/python/ISF_MainConfig.py   | 451 ++++++++----------
 .../ISF_Config/python/ISF_jobProperties.py    |  13 +-
 .../ISF/ISF_Config/share/AllDet_detDescr.py   |  30 ++
 .../ISF_Config/share/ISF_ConfigJobInclude.py  |  22 +-
 .../ISF_Config/share/jobOptions_ConfGetter.py |   1 -
 7 files changed, 415 insertions(+), 271 deletions(-)
 create mode 100644 Simulation/ISF/ISF_Config/python/FlagSetters.py
 create mode 100644 Simulation/ISF/ISF_Config/share/AllDet_detDescr.py

diff --git a/Simulation/ISF/ISF_Config/cmt/requirements b/Simulation/ISF/ISF_Config/cmt/requirements
index 77ee5ff5cec..0cfcff22a3c 100644
--- a/Simulation/ISF/ISF_Config/cmt/requirements
+++ b/Simulation/ISF/ISF_Config/cmt/requirements
@@ -6,7 +6,6 @@ manager Wolfgang Lukas <Wolfgang.Lukas@cern.ch>
 
 private
 use AtlasPolicy                 AtlasPolicy-*
-use AtlasReconstructionRunTime  AtlasReconstructionRunTime-*
 
 private
 use TestPolicy                  TestPolicy-*
diff --git a/Simulation/ISF/ISF_Config/python/FlagSetters.py b/Simulation/ISF/ISF_Config/python/FlagSetters.py
new file mode 100644
index 00000000000..5547d743f93
--- /dev/null
+++ b/Simulation/ISF/ISF_Config/python/FlagSetters.py
@@ -0,0 +1,168 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+
+## Base method
+
+def configureFlagsBase():
+    from AthenaCommon.DetFlags import DetFlags
+    if not DetFlags.any_on():
+        # If you configure some of the DetFlags then you're
+        # responsible for configuring all of them.
+        DetFlags.all_setOn()
+        DetFlags.Truth_setOn() # FIXME redundant?
+        DetFlags.LVL1_setOff() # LVL1 is not part of G4 sim
+        DetFlags.Forward_setOff() # Forward dets are off by default
+
+    ## Configure tasks
+    DetFlags.digitize.all_setOff()
+    DetFlags.makeRIO.all_setOff()
+    #DetFlags.overlay.all_setOff() # will soon be needed
+    DetFlags.pileup.all_setOff()
+    DetFlags.readRDOBS.all_setOff()
+    DetFlags.readRDOPool.all_setOff()
+    DetFlags.readRIOBS.all_setOff()
+    DetFlags.readRIOPool.all_setOff()
+    DetFlags.simulateLVL1.all_setOff()
+    DetFlags.writeBS.all_setOff()
+    DetFlags.writeRDOPool.all_setOff()
+    DetFlags.writeRIOPool.all_setOff()
+    return
+
+## methods for Geant4 only simulators
+
+def configureFlagsFullG4():
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "FullG4"
+    return
+
+def configureFlagsPassBackG4():
+    configureFlagsFullG4()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "PassBackG4"
+    return
+
+def configureFlagsMC12G4():
+    configureFlagsFullG4()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "MC12G4"
+    return
+
+def configureFlagsMC12G4_longLived():
+    configureFlagsMC12G4()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "MC12G4_longLived"
+    return
+
+def configureFlagsCosmicsG4():
+    configureFlagsMC12G4()
+    return
+
+def configureFlagsMC12G4_IDOnly():
+    configureFlagsFullG4()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "MC12G4_IDOnly"
+    return
+
+def configureFlagsMC12G4_IDCalo():
+    configureFlagsFullG4()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "MC12G4_IDCalo"
+    return
+
+## methods for simulators which use G4 + FastCaloSim
+
+def configureFlagsATLFASTII():
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "AtlfastII" # TODO: can we rename this to "ATLFASTII" ?
+    return
+
+## methods for simulators which use Fatras + FastCaloSim
+
+def configureFlagsATLFASTIIF():
+    from AthenaCommon.DetFlags import DetFlags
+    # BCM simulation not supported in FATRAS. Currently it is the
+    # geometry task which is used to determine whether a detector has
+    # been simulated (see ISF_Example/python/ISF_Output.py)
+    DetFlags.geometry.BCM_setOff()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "ATLFASTIIF"
+    return
+
+def configureFlagsFatras_newExtrapolation():
+    configureFlagsATLFASTIIF()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "Fatras_newExtrapolation"
+    return
+
+def configureFlagsFatras_newExtrapolation_IDOnly():
+    configureFlagsATLFASTIIF()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "Fatras_newExtrapolation_IDOnly"
+    return
+
+def configureFlagsATLFASTIIF_PileUp():
+    configureFlagsATLFASTIIF()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "ATLFASTIIF_PileUp"
+    return
+
+def configureFlagsATLFASTIIF_IDOnly():
+    configureFlagsATLFASTIIF()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "ATLFASTIIF_IDOnly"
+    return
+
+def configureFlagsATLFASTIIF_IDCalo():
+    configureFlagsATLFASTIIF()
+    from G4AtlasApps.SimFlags import simFlags
+    simFlags.SimulationFlavour = "ATLFASTIIF_IDCalo"
+    return
+
+def configureFlagsFastOnly():
+    configureFlagsATLFASTIIF()
+    return
+
+## methods for simulators which combine Geant4,  Fatras and FastCaloSim
+
+def configureFlagsMultiSimTest():
+    return
+
+def configureFlagsG4GammaCones():
+    return
+
+def configureFlagsG4GammaCones_FastCalo():
+    return
+
+def configureFlagsFatrasGammaCones_FastCalo():
+    return
+
+def configureFlagsG4BHadronsOnly_FastCalo():
+    return
+
+def configureFlagsG4BHadrons_FatrasID_FastCalo():
+    return
+
+def configureFlagsG4TauProductsOnly():
+    return
+
+def configureFlagsG4HiggsLeptonsConeOnly():
+    return
+
+def configureFlagsG4HiggsLeptons():
+    return
+
+def configureFlagsG4WLeptonsCone_FatrasID_FastCalo ():
+    return
+
+def configureFlagsG4JPsiLeptonsCone_FatrasID_FastCalo ():
+    return
+
+def configureFlagsG4ZLeptonsCone_FatrasID_FastCalo ():
+    return
+
+def configureFlagsG4ZLeptonsConeSticky_FatrasID_FastCalo ():
+    return
+
+def configureFlagsG4ZDecayProducts_FatrasID_FastCalo ():
+    return
+
diff --git a/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py b/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
index f0b4da8fd03..c28554e9264 100644
--- a/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
+++ b/Simulation/ISF/ISF_Config/python/ISF_MainConfig.py
@@ -5,16 +5,10 @@ Tools configurations for ISF
 KG Tan, 17/06/2012
 """
 
-from AthenaCommon.CfgGetter import getPrivateTool,getPrivateToolClone,getPublicTool,getPublicToolClone,\
-        getService,getServiceClone,getAlgorithm,getAlgorithmClone
-
 from AthenaCommon.Constants import *  # FATAL,ERROR etc.
 from AthenaCommon.SystemOfUnits import *
-from AthenaCommon.DetFlags import DetFlags
-from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
-from AthenaCommon.AppMgr import ServiceMgr
-from AthenaPython import PyAthena
 
+from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 from ISF_Config.ISF_jobProperties import ISF_Flags
 
 ############## Input: GenericGenerator ###############
@@ -41,8 +35,10 @@ def getInput_GenericGenerator(name="ISF_Input_GenericGenerator", **kwargs):
 def getInput_GenericFiles(name="ISF_Input_GenericFiles", **kwargs):
     # Takes input file from athenaCommonFlags.PoolEvgenInput
     import AthenaPoolCnvSvc.ReadAthenaPool
+    from AthenaCommon.AppMgr import ServiceMgr
     ServiceMgr.EventPersistencySvc.CnvServices += [ 'AthenaPoolCnvSvc' ]
     ServiceMgr.EventSelector.InputCollections = athenaCommonFlags.PoolEvgenInput.get_Value()
+    from AthenaPython import PyAthena
     return PyAthena.Alg(name)
 
 ############## Input: MultiParticleTest ###############
@@ -196,12 +192,17 @@ def getKernel_GenericSimulator(name="ISF_Kernel_GenericSimulator", **kwargs):
 
     from ISF_Algorithms.ISF_AlgorithmsConf import ISF__SimKernel
     SimKernel = ISF__SimKernel(name, **kwargs)
-
+    ##FIXME shouldn't really be doing this here
     from AthenaCommon.AlgSequence import AlgSequence
     topSequence = AlgSequence()
     topSequence += SimKernel
     return SimKernel
 
+############## Simulator: GenericSimulatorNoG4 ###############
+def getKernel_GenericSimulatorNoG4(name="ISF_Kernel_GenericSimulatorNoG4", **kwargs):
+    kwargs.setdefault("SimHitService"               , "ISF_NoG4SimHitService"                       )
+    return getKernel_GenericSimulator(name, **kwargs)
+
 ############## Simulator: MultiSimTest ###############
 def getKernel_MultiSimTest(name="ISF_Kernel_MultiSimTest", **kwargs):
     kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_DefaultGeant4Selector' ]         )
@@ -300,7 +301,7 @@ def getKernel_ATLFASTIIF(name="ISF_Kernel_ATLFASTIIF", **kwargs):
     # set the simFlags accordingly (TODO: is this even needed?)
     from G4AtlasApps.SimFlags import simFlags
     simFlags.SimulationFlavour = "ATLFASTIIF"
-    return getKernel_GenericSimulator(name, **kwargs)
+    return getKernel_GenericSimulatorNoG4(name, **kwargs)
 
 ############## Simulator: Fatras_newExtrapolation ###############
 def getKernel_Fatras_newExtrapolation(name="ISF_Kernel_Fatras_newExtrapolation", **kwargs):
@@ -312,324 +313,282 @@ def getKernel_Fatras_newExtrapolation(name="ISF_Kernel_Fatras_newExtrapolation",
     # set the simFlags accordingly (TODO: is this even needed?)
     from G4AtlasApps.SimFlags import simFlags
     simFlags.SimulationFlavour = "Fatras_newExtrapolation"
-    return getKernel_GenericSimulator(name, **kwargs)
+    return getKernel_GenericSimulatorNoG4(name, **kwargs)
 
 ############## Simulator: Fatras_newExtrapolation_IDOnly ###############
 def getKernel_Fatras_newExtrapolation_IDOnly(name="ISF_Kernel_Fatras_newExtrapolation_IDOnly", **kwargs):
     kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_DefaultFatrasNewExtrapolationSelector' ] )
     kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_DefaultFatrasNewExtrapolationSelector' ] )
-    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_DefaultParticleKillerSelector' ] )
-    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_DefaultParticleKillerSelector' ] )
-    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_DefaultParticleKillerSelector' ]         )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_DefaultParticleKillerSelector' ]         )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ]         )
     # set the simFlags accordingly (TODO: is this even needed?)
     from G4AtlasApps.SimFlags import simFlags
     simFlags.SimulationFlavour = "Fatras_newExtrapolation_IDOnly"
-    return getKernel_GenericSimulator(name, **kwargs)
+    return getKernel_GenericSimulatorNoG4(name, **kwargs)
 
 ############## Simulator: ATLFASTIIF fast pileup ###############
 def getKernel_ATLFASTIIF_PileUp(name="ISF_Kernel_ATLFASTIIF_PileUp", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_FatrasRandomSelector'),
-                                              #getPublicTool('ISF_FatrasTRTPileupSelector'),
-                                              getPublicTool('ISF_FatrasPileupSelector'),
-                                              getPublicTool('ISF_DefaultFatrasSelector')  ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_MuonFatrasSelector'),
-                                              getPublicTool('ISF_EtaGreater5ParticleKillerSimSelector'),
-                                              getPublicTool('ISF_FastCaloSimPileupSelector'),
-                                              getPublicTool('ISF_DefaultFastCaloSimSelector')  ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
+    kwargs.setdefault("SimHitService"              , "ISF_PileupSimHitService"                  )
+    kwargs.setdefault("BeamPipeSimulationSelectors", [ 'ISF_DefaultParticleKillerSelector' ]    )
+    kwargs.setdefault("IDSimulationSelectors"      , [ #'ISF_FatrasRandomSelector',
+                                                       #'ISF_FatrasPileupSelector_noHits',
+                                                       'ISF_FatrasPileupSelector',
+                                                       'ISF_DefaultFatrasSelector' ]            )
+    kwargs.setdefault("CaloSimulationSelectors"    , [ 'ISF_MuonFatrasSelector',
+                                                       'ISF_EtaGreater5ParticleKillerSimSelector',
+                                                       'ISF_FastCaloSimPileupSelector',
+                                                       'ISF_DefaultFastCaloSimSelector' ]       )
+    kwargs.setdefault("MSSimulationSelectors"      , [ 'ISF_DefaultFatrasSelector' ]            )
+    kwargs.setdefault("CavernSimulationSelectors"  , [ 'ISF_DefaultParticleKillerSelector' ]    )
+
     # set the simFlags accordingly
     from G4AtlasApps.SimFlags import simFlags
     simFlags.SimulationFlavour = "ATLFASTIIF_PileUp"
-    return SimKernel
+    return getKernel_GenericSimulatorNoG4(name, **kwargs)
 
 ############## Simulator: ATLFASTIIF_IDOnly ###############
 def getKernel_ATLFASTIIF_IDOnly(name="ISF_Kernel_ATLFASTIIF_IDonly", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_DefaultFatrasSelector')         ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_DefaultFatrasSelector'         ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_DefaultFatrasSelector'         ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
     # set the simFlags accordingly (TODO: is this even needed?)
     from G4AtlasApps.SimFlags import simFlags
     simFlags.SimulationFlavour = "ATLFASTIIF_IDOnly"
-    return SimKernel
+    return getKernel_GenericSimulatorNoG4(name, **kwargs)
 
 ############## Simulator: ATLFASTIIF_IDCalo ###############
 def getKernel_ATLFASTIIF_IDCalo(name="ISF_Kernel_ATLFASTIIF_IDCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_DefaultFatrasSelector')         ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_DefaultFatrasSelector'         ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_DefaultFatrasSelector'         ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_DefaultFatrasSelector'         ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
     # set the simFlags accordingly (TODO: is this even needed?)
     from G4AtlasApps.SimFlags import simFlags
     simFlags.SimulationFlavour = "ATLFASTIIF_IDCalo"
-    return SimKernel
+    return getKernel_GenericSimulatorNoG4(name, **kwargs)
 
 ############## Simulator: FastOnly ###############
 def getKernel_FastOnly(name="ISF_Kernel_FastOnly", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_DefaultFastCaloSimSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    return SimKernel
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_DefaultFatrasSelector'         ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_DefaultFastCaloSimSelector'    ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_DefaultFatrasSelector'         ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
+    return getKernel_GenericSimulatorNoG4(name, **kwargs)
 
 ############## Simulator: G4GammaCones ###############
 def getKernel_G4GammaCones(name="ISF_Kernel_G4GammaCones", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_PhotonConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_PhotonConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_PhotonConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_PhotonConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_PhotonConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_PhotonConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_PhotonConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_PhotonConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4GammaCones_FastCalo ###############
 def getKernel_G4GammaCones_FastCalo(name="ISF_Kernel_G4GammaCones_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_PhotonConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_PhotonConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_MuonGeant4Selector'),
-                                                getPublicTool('ISF_WithinEta5FastCaloSimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_PhotonConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_PhotonConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_PhotonConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_MuonGeant4Selector',
+                                                        'ISF_WithinEta5FastCaloSimSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_PhotonConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: FatrasGammaCones_FastCalo ###############
 def getKernel_FatrasGammaCones_FastCalo(name="ISF_Kernel_FatrasGammaCones_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_PhotonConeFatrasSelector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_WithinEta5FastCaloSimSelector')   ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_PhotonConeFatrasSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_WithinEta5FastCaloSimSelector'   ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4BHadronsOnly_FastCalo ###############
 def getKernel_G4BHadronsOnly_FastCalo(name="ISF_Kernel_G4BHadronsOnly_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_BHadronProductsGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.IDSimulationSelectors       = SimKernel.BeamPipeSimulationSelectors
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_MuonGeant4Selector'),
-                                                getPublicTool('ISF_WithinEta5FastCaloSimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_BHadronProductsGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    SelectorList = [ 'ISF_SubDetStickyGeant4SimSelector',
+                     'ISF_BHadronProductsGeant4Selector' ,
+                     'ISF_DefaultParticleKillerSelector' ]
+    kwargs.setdefault("BeamPipeSimulationSelectors" , SelectorList )
+    kwargs.setdefault("IDSimulationSelectors"       , SelectorList )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_MuonGeant4Selector',
+                                                        'ISF_WithinEta5FastCaloSimSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_BHadronProductsGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4BHadronsOnly_FastCalo ###############
 def getKernel_G4BHadrons_FatrasID_FastCalo(name="ISF_Kernel_G4BHadrons_FatrasID_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_BHadronProductsGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.IDSimulationSelectors       = SimKernel.BeamPipeSimulationSelectors
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_MuonGeant4Selector'),
-                                                getPublicTool('ISF_WithinEta5FastCaloSimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_MuonGeant4Selector'),
-                                                getPublicTool('ISF_BHadronProductsGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    SelectorList = [ 'ISF_SubDetStickyGeant4SimSelector',
+                     'ISF_BHadronProductsGeant4Selector' ,
+                     'ISF_DefaultFatrasSelector' ]
+    kwargs.setdefault("BeamPipeSimulationSelectors" , SelectorList )
+    kwargs.setdefault("IDSimulationSelectors"       , SelectorList )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_MuonGeant4Selector',
+                                                        'ISF_WithinEta5FastCaloSimSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_MuonGeant4Selector',
+                                                        'ISF_BHadronProductsGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 
 ############## Simulator: G4TauProductsOnly ###############
 def getKernel_G4TauProductsOnly(name="ISF_Kernel_G4TauProductsOnly", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_TauProductsGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.IDSimulationSelectors       = SimKernel.BeamPipeSimulationSelectors
-    SimKernel.CaloSimulationSelectors     = SimKernel.BeamPipeSimulationSelectors
-    SimKernel.MSSimulationSelectors       = SimKernel.BeamPipeSimulationSelectors
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    SelectorList = [ 'ISF_SubDetStickyGeant4SimSelector',
+                     'ISF_TauProductsGeant4Selector' ,
+                     'ISF_DefaultParticleKillerSelector' ]
+    kwargs.setdefault("BeamPipeSimulationSelectors" , SelectorList )
+    kwargs.setdefault("IDSimulationSelectors"       , SelectorList )
+    kwargs.setdefault("CaloSimulationSelectors"     , SelectorList )
+    kwargs.setdefault("MSSimulationSelectors"       , SelectorList )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4HiggsLeptonsConeOnly ###############
 def getKernel_G4HiggsLeptonsConeOnly(name="ISF_Kernel_G4HiggsLeptonsConeOnly", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicToolClone('ISF_HiggsLeptonsConeGeant4SelectorBeamPipe',
-                                                                   'ISF_HiggsLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicToolClone('ISF_HiggsLeptonsConeGeant4SelectorID',
-                                                                   'ISF_HiggsLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicToolClone('ISF_HiggsLeptonsConeGeant4SelectorCalo',
-                                                                   'ISF_HiggsLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicToolClone('ISF_HiggsLeptonsConeGeant4SelectorMS',
-                                                                   'ISF_HiggsLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    from AthenaCommon.CfgGetter import getPublicToolClone
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        getPublicToolClone('ISF_HiggsLeptonsConeGeant4SelectorBeamPipe','ISF_HiggsLeptonsConeGeant4Selector') ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        getPublicToolClone('ISF_HiggsLeptonsConeGeant4SelectorID','ISF_HiggsLeptonsConeGeant4Selector') ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        getPublicToolClone('ISF_HiggsLeptonsConeGeant4SelectorCalo','ISF_HiggsLeptonsConeGeant4Selector') ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        getPublicToolClone('ISF_HiggsLeptonsConeGeant4SelectorMS','ISF_HiggsLeptonsConeGeant4Selector') ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4HiggsLeptons ###############
 def getKernel_G4HiggsLeptons(name="ISF_Kernel_G4HiggsLeptons", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_DefaultGeant4Selector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_DefaultGeant4Selector' ] )
 
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_DefaultGeant4Selector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_DefaultGeant4Selector') ]
+    #kwargs.setdefault("CaloSimulationSelectors"    , [ 'ISF_HiggsLeptonsConeGeant4CaloSelector',
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_HiggsLeptonsConeGeant4Selector',
+                                                        'ISF_DefaultFastCaloSimSelector' ] )
 
-    #SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_HiggsLeptonsConeGeant4CaloSelector'),
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_HiggsLeptonsConeGeant4Selector'),
-                                              getPublicTool('ISF_DefaultFastCaloSimSelector') ]
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_DefaultGeant4Selector' ] )
 
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_DefaultGeant4Selector') ]
-
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4WLeptonsCone_FatrasID_FastCalo ###############
 def getKernel_G4WLeptonsCone_FatrasID_FastCalo (name="ISF_Kernel_G4WLeptonsCone_Fatras_ID_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_WLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_WLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_WLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_WithinEta5FastCaloSimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_WLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_WLeptonsConeGeant4Selector' ,
+                                                        'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_WLeptonsConeGeant4Selector' ,
+                                                        'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_WLeptonsConeGeant4Selector' ,
+                                                        'ISF_WithinEta5FastCaloSimSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_WLeptonsConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4JPsiLeptonsCone_FatrasID_FastCalo ###############
 def getKernel_G4JPsiLeptonsCone_FatrasID_FastCalo (name="ISF_Kernel_G4JPsiLeptonsCone_Fatras_ID_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_JPsiLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_JPsiLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_JPsiLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_WithinEta5FastCaloSimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_JPsiLeptonsConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_JPsiLeptonsConeGeant4Selector' ,
+                                                        'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_JPsiLeptonsConeGeant4Selector' ,
+                                                        'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_JPsiLeptonsConeGeant4Selector' ,
+                                                        'ISF_WithinEta5FastCaloSimSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_JPsiLeptonsConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4ZLeptonsCone_FatrasID_FastCalo ###############
 def getKernel_G4ZLeptonsCone_FatrasID_FastCalo (name="ISF_Kernel_G4ZLeptonsCone_FatrasID_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_ZLeptonsPositionConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_ZLeptonsDirectionConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_ZLeptonsPositionConeGeant4Selector') ,
-                                                getPublicTool('ISF_WithinEta5FastCaloSimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_SubDetStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_ZLeptonsPositionConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_ZLeptonsPositionConeGeant4Selector' ,
+                                                        'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_ZLeptonsDirectionConeGeant4Selector' ,
+                                                        'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_ZLeptonsPositionConeGeant4Selector' ,
+                                                        'ISF_WithinEta5FastCaloSimSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_SubDetStickyGeant4SimSelector',
+                                                        'ISF_ZLeptonsPositionConeGeant4Selector' ,
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 ############## Simulator: G4ZLeptonsConeSticky_FatrasID_FastCalo ###############
 def getKernel_G4ZLeptonsConeSticky_FatrasID_FastCalo (name="ISF_Kernel_G4ZLeptonsConeSticky_FatrasID_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
-    SimKernel.BeamPipeSimulationSelectors = [ getPublicTool('ISF_GlobalStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.IDSimulationSelectors       = [ getPublicTool('ISF_GlobalStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_ZLeptonsDirectionConeGeant4Selector') ,
-                                                getPublicTool('ISF_DefaultFatrasSelector') ]
-    SimKernel.CaloSimulationSelectors     = [ getPublicTool('ISF_GlobalStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_WithinEta5FastCaloSimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.MSSimulationSelectors       = [ getPublicTool('ISF_GlobalStickyGeant4SimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector')   ]
-    return SimKernel
+    kwargs.setdefault("BeamPipeSimulationSelectors" , [ 'ISF_GlobalStickyGeant4SimSelector',
+                                                        'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , [ 'ISF_GlobalStickyGeant4SimSelector',
+                                                        'ISF_ZLeptonsDirectionConeGeant4Selector' ,
+                                                        'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , [ 'ISF_GlobalStickyGeant4SimSelector',
+                                                        'ISF_WithinEta5FastCaloSimSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , [ 'ISF_GlobalStickyGeant4SimSelector',
+                                                        'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector'   ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 
 ############## Simulator: G4ZDecayLeptons_FatrasID_FastCalo ###############
 def getKernel_G4ZDecayProducts_FatrasID_FastCalo (name="ISF_Kernel_G4ZDecayProducts_FatrasID_FastCalo", **kwargs):
-    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-
     # This selector chain assigns the Z decay products for G4 simulation.
     # The GlobalStickG4 selector ensures that a particle which was inside
     # G4 at one point will always be simulated within G4.
-    GlobalStickyG4ZDecayProductsSelector = [ getPublicTool('ISF_GlobalStickyGeant4SimSelector'),
-                                             getPublicTool('ISF_ZProductsGeant4Selector')        ]
-
-    SimKernel.BeamPipeSimulationSelectors =   GlobalStickyG4ZDecayProductsSelector + [
-                                                getPublicTool('ISF_DefaultParticleKillerSelector')
-                                              ]
-    SimKernel.IDSimulationSelectors       =   GlobalStickyG4ZDecayProductsSelector + [
-                                                getPublicTool('ISF_DefaultFatrasSelector')
-                                              ]
-    SimKernel.CaloSimulationSelectors     =   GlobalStickyG4ZDecayProductsSelector + [
-                                                getPublicTool('ISF_WithinEta5FastCaloSimSelector'),
-                                                getPublicTool('ISF_DefaultParticleKillerSelector')
-                                              ]
-    SimKernel.MSSimulationSelectors       =   GlobalStickyG4ZDecayProductsSelector + [
-                                                getPublicTool('ISF_DefaultFatrasSelector')
-                                              ]
-    SimKernel.CavernSimulationSelectors   = [ getPublicTool('ISF_DefaultParticleKillerSelector') ]
-    return SimKernel
+    GlobalStickyG4ZDecayProductsSelector = [ 'ISF_GlobalStickyGeant4SimSelector',
+                                             'ISF_ZProductsGeant4Selector'        ]
+
+    kwargs.setdefault("BeamPipeSimulationSelectors" , GlobalStickyG4ZDecayProductsSelector + [ 'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("IDSimulationSelectors"       , GlobalStickyG4ZDecayProductsSelector + [ 'ISF_DefaultFatrasSelector'  ] )
+    kwargs.setdefault("CaloSimulationSelectors"     , GlobalStickyG4ZDecayProductsSelector + [ 'ISF_WithinEta5FastCaloSimSelector',
+                                                                                               'ISF_DefaultParticleKillerSelector' ] )
+    kwargs.setdefault("MSSimulationSelectors"       , GlobalStickyG4ZDecayProductsSelector + [ 'ISF_DefaultFatrasSelector' ] )
+    kwargs.setdefault("CavernSimulationSelectors"   , [ 'ISF_DefaultParticleKillerSelector' ] )
+    return getKernel_GenericSimulator(name, **kwargs)
 
 # This does not work yet: if the ISF_Flags are set via a preExec it mixes
 #       up the initialization order and simulators do not get configured
 #       properly!
 ############### Simulator: FromJobProperties ###############
 #def getKernel_FromJobProperties (name="ISF_Kernel_FromJobProperties", **kwargs):
-#    SimKernel = getKernel_GenericSimulator(name, **kwargs)
-#
 #    from ISF_Config.ISF_jobProperties import ISF_Flags
-#    SimKernel.BeamPipeSimulationSelectors = ISF_Flags.RoutingChainBeamPipe()
-#    SimKernel.IDSimulationSelectors       = ISF_Flags.RoutingChainID()
-#    SimKernel.CaloSimulationSelectors     = ISF_Flags.RoutingChainCalo()
-#    SimKernel.MSSimulationSelectors       = ISF_Flags.RoutingChainMS()
-#    SimKernel.CavernSimulationSelectors   = ISF_Flags.RoutingChainCavern()
+#    kwargs.setdefault("BeamPipeSimulationSelectors" , ISF_Flags.RoutingChainBeamPipe() )
+#    kwargs.setdefault("IDSimulationSelectors"       , ISF_Flags.RoutingChainID() )
+#    kwargs.setdefault("CaloSimulationSelectors"     , ISF_Flags.RoutingChainCalo() )
+#    kwargs.setdefault("MSSimulationSelectors"       , ISF_Flags.RoutingChainMS() )
+#    kwargs.setdefault("CavernSimulationSelectors"   , ISF_Flags.RoutingChainCavern() )
 #
-#    return SimKernel
+#    return getKernel_GenericSimulator(name, **kwargs)
diff --git a/Simulation/ISF/ISF_Config/python/ISF_jobProperties.py b/Simulation/ISF/ISF_Config/python/ISF_jobProperties.py
index b023231c102..47406328301 100644
--- a/Simulation/ISF/ISF_Config/python/ISF_jobProperties.py
+++ b/Simulation/ISF/ISF_Config/python/ISF_jobProperties.py
@@ -76,12 +76,6 @@ class VertexPositionFromFile(JobProperty):
     allowedTypes = ['bool']
     StoredValue  = False
 
-class UseNewG4Config(JobProperty):
-    """Steering of ISF: use new G4 config"""
-    statusOn     = True
-    allowedTypes = ['bool']
-    StoredValue  = False
-
 class DoMemoryMonitoring(JobProperty):
     """Steering of ISF: do memory monitoring"""
     statusOn     = True
@@ -105,6 +99,12 @@ class Simulator(JobProperty):
     statusOn     = True
     allowedTypes = ['str']
     StoredValue  = 'ATLFASTII'
+    def KernelName(self):
+        if self.statusOn:
+            return 'ISF_Kernel_' + self.StoredValue
+    def configFlagsMethodName(self):
+        if self.statusOn:
+            return 'configureFlags' + self.StoredValue
 
 ## TODO Setting this should automatically update dependent jobproperties.
 class TruthStrategy(JobProperty):
@@ -206,7 +206,6 @@ jobproperties.ISF_jobProperties.add_JobProperty(DumpStoreGate)
 jobproperties.ISF_jobProperties.add_JobProperty(RunValgrind)
 jobproperties.ISF_jobProperties.add_JobProperty(ValidationMode)
 jobproperties.ISF_jobProperties.add_JobProperty(VertexPositionFromFile)
-jobproperties.ISF_jobProperties.add_JobProperty(UseNewG4Config)
 jobproperties.ISF_jobProperties.add_JobProperty(DoMemoryMonitoring)
 jobproperties.ISF_jobProperties.add_JobProperty(DoTimeMonitoring)
 jobproperties.ISF_jobProperties.add_JobProperty(Input)
diff --git a/Simulation/ISF/ISF_Config/share/AllDet_detDescr.py b/Simulation/ISF/ISF_Config/share/AllDet_detDescr.py
new file mode 100644
index 00000000000..ff5bd27eeb0
--- /dev/null
+++ b/Simulation/ISF/ISF_Config/share/AllDet_detDescr.py
@@ -0,0 +1,30 @@
+# include so that alldet_detdescr can be used directly from somewhere else
+# (there is an include.block so that it is only loaded once)
+include.block("ISF_Config/AllDet_detDescr.py")
+# also block alternatives
+include.block("RecExCond/AllDet_detDescr.py")
+include.block("RecExCommon/AllDet_detDescr.py")
+
+from AthenaCommon.Resilience import protectedInclude
+
+if DetFlags.detdescr.any_on():
+    from AtlasGeoModel import SetGeometryVersion
+    from AtlasGeoModel import GeoModelInit
+    from AtlasGeoModel import SetupRecoGeometry
+
+    # Beam Spot service job options - just defines conditions data access
+    if DetFlags.detdescr.ID_on():
+        protectedInclude("InDetBeamSpotService/BeamCondSvc.py" )
+
+    if DetFlags.detdescr.LAr_on():
+        include( "LArDetDescr/LArDetDescr_joboptions.py" )
+
+    if DetFlags.detdescr.Tile_on():
+        protectedInclude( "TileConditions/TileConditions_jobOptions.py" )
+
+    if DetFlags.detdescr.Muon_on():
+        protectedInclude ("AmdcAth/AmdcAth_jobOptions.py")
+
+    # MagneticField Service
+    if DetFlags.detdescr.BField_on():
+        import MagFieldServices.SetupField
diff --git a/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py b/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py
index 43ab6bf4e1b..0dff601673e 100644
--- a/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py
+++ b/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py
@@ -53,31 +53,20 @@ if globalflags.DetDescrVersion() not in simFlags.SimLayout.get_Value():
 simFlags.load_atlas_flags()
 simFlags.EventFilter.set_Off()
 
-# set the detectors on/off and steer the fast simulation flags
-if 'DetFlags' not in dir():
-    ## If you configure one det flag, you're responsible for configuring them all!
-    from AthenaCommon.DetFlags import DetFlags
-    DetFlags.all_setOn()
-    DetFlags.LVL1_setOff() # LVL1 is not part of G4 sim
-    DetFlags.Truth_setOn()
-    DetFlags.Forward_setOff() # Forward dets are off by default
-
 #--------------------------------------------------------------
 # Job setup
 #--------------------------------------------------------------
 theApp.EvtMax = athenaCommonFlags.EvtMax()
 
 # all det description
-include('RecExCond/AllDet_detDescr.py')
+include('ISF_Config/AllDet_detDescr.py')
+DetFlags.Print()
 
 if len(globalflags.ConditionsTag()):
     from IOVDbSvc.CondDB import conddb
     conddb.setGlobalTag(globalflags.ConditionsTag())
 
 
-#include("ISF_Example/CommonISFJobOptions.py")
-
-
 #--------------------------------------------------------------
 # Setup the ISF Services
 #--------------------------------------------------------------
@@ -115,8 +104,9 @@ elif jobproperties.Beam.beamType.get_Value() == 'cosmics':
     else:
         getAlgorithm('EvgenCosmicGenerator')
 # non of the above
-elif hasattr(ServiceMgr, 'EventSelector'):
-    print "ISF Input Configuration: EventSelector already defined, likely running with a particle gun preInclude"
+
+elif not athenaCommonFlags.PoolEvgenInput.statusOn:
+    print "ISF Input Configuration: PoolEvgenInput off, likely running with a particle gun preInclude"
 # non of the above -> input via ISF_Flags
 else :
     if ISF_Flags.OverrideInputFiles():
@@ -133,7 +123,7 @@ from ISF_Example.ISF_Input import ISF_Input
 #from ISF_Geant4Tools.ISF_Geant4ToolsConf import iGeant4__SDActivateUserAction
 #ToolSvc += iGeant4__SDActivateUserAction("ISFSDActivateUserAction",
 #                                        OutputLevel=INFO)
-SimKernel = getAlgorithm('ISF_Kernel_' + ISF_Flags.Simulator())
+SimKernel = getAlgorithm(ISF_Flags.Simulator.KernelName())
 
 
 #--------------------------------------------------------------
diff --git a/Simulation/ISF/ISF_Config/share/jobOptions_ConfGetter.py b/Simulation/ISF/ISF_Config/share/jobOptions_ConfGetter.py
index cab772a308e..d0b2b2b019c 100644
--- a/Simulation/ISF/ISF_Config/share/jobOptions_ConfGetter.py
+++ b/Simulation/ISF/ISF_Config/share/jobOptions_ConfGetter.py
@@ -38,7 +38,6 @@ from ISF_Config.ISF_jobProperties import ISF_Flags
 #ISF_Flags.RunValgrind               = True    # default: False
 ISF_Flags.ValidationMode            = ValidationMode    # default: False
 #ISF_Flags.VertexPositionFromFile    = True    # default: False
-#ISF_Flags.UseNewG4Config            = True    # default: False
 ISF_Flags.DoMemoryMonitoring        = True     # default: False
 ISF_Flags.DoTimeMonitoring          = True     # default: False
 ISF_Flags.Input                     = Input          # default: 'ttbar'
-- 
GitLab