From a9bfbb0f6a53da9ef624cd512c76449f0885f16c Mon Sep 17 00:00:00 2001
From: Daniel Noel <daniel.louis.noel@cern.ch>
Date: Thu, 27 Feb 2020 14:30:26 +0000
Subject: [PATCH] BeamEffectsAlg configuration tidying

---
 .../python/BeamEffectsAlgConfig.py            |  1 -
 .../test/G4AtlasAlgConfigNew_Test.py          | 35 ++++++++-------
 .../test/test_MC16_AtlasG4_ttbar.sh           | 41 ++++++++++++++++++
 .../G4AtlasApps/python/SimConfigFlags.py      |  4 +-
 .../share/jobOptions.G4Atlas_ReadEvgen.py     |  2 +-
 .../python/G4AtlasServicesConfigNew.py        | 13 +++---
 .../python/G4AtlasUserActionConfigNew.py      | 18 ++++----
 .../python/G4AtlasToolsConfigNew.py           |  2 +-
 .../python/G4GeometryToolConfig.py            | 43 ++++++++++---------
 .../python/G4UserActionsConfigNew.py          | 18 +++++++-
 10 files changed, 118 insertions(+), 59 deletions(-)
 create mode 100755 Simulation/G4Atlas/G4AtlasAlg/test/test_MC16_AtlasG4_ttbar.sh

diff --git a/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py b/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py
index 89629767380..04a9c45e5f5 100755
--- a/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py
+++ b/Simulation/BeamEffects/python/BeamEffectsAlgConfig.py
@@ -113,7 +113,6 @@ def BeamEffectsAlgCfg(ConfigFlags, **kwargs):
      # Set (todo) the appropriate manipulator tools
     manipulators = []
     manipulators.append(makeValidityChecker())
-    manipulators.append(makeGenEventRotator())
     manipulators.append(toolVertexPositioner) 
     # manipulators.append(makeGenEventBeamEffectBooster()) # todo segmentation violation
     # manipulators.append(makeVertexPositionFromFile()) # todo
diff --git a/Simulation/G4Atlas/G4AtlasAlg/test/G4AtlasAlgConfigNew_Test.py b/Simulation/G4Atlas/G4AtlasAlg/test/G4AtlasAlgConfigNew_Test.py
index a30cf7d0655..faa781b054a 100755
--- a/Simulation/G4Atlas/G4AtlasAlg/test/G4AtlasAlgConfigNew_Test.py
+++ b/Simulation/G4Atlas/G4AtlasAlg/test/G4AtlasAlgConfigNew_Test.py
@@ -23,13 +23,13 @@ if __name__ == '__main__':
   from AthenaConfiguration.AllConfigFlags import ConfigFlags
   from AthenaConfiguration.TestDefaults import defaultTestFiles
   inputDir = defaultTestFiles.d
-  ConfigFlags.Input.Files = defaultTestFiles.EVNT
+  ConfigFlags.Input.Files = ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.evgen.EVNT.e4993.EVNT.08166201._000012.pool.root.1'] #defaultTestFiles.EVNT
   ConfigFlags.Output.HITSFileName = "myHITSnew.pool.root"
 
   #Sim ConfigFlags
-  ConfigFlags.Sim.WorldRRange = 15000
-  ConfigFlags.Sim.WorldZRange = 27000 #change defaults?
-  ConfigFlags.Sim.CalibrationRun = False # 'DeadLAr'
+  #ConfigFlags.Sim.WorldRRange = 15000
+  #ConfigFlags.Sim.WorldZRange = 27000 #change defaults?
+  ConfigFlags.Sim.CalibrationRun = 'DeadLAr' # is this correct?
   ConfigFlags.Sim.RecordStepInfo = False
   ConfigFlags.Sim.CavernBG = "Signal"
   ConfigFlags.Sim.ISFRun = False
@@ -53,16 +53,16 @@ if __name__ == '__main__':
   ConfigFlags.Detector.GeometryTRT = True 
 
   #muon
-  ConfigFlags.Detector.SimulateMuon = True
-  ConfigFlags.Detector.GeometryMuon = True
-  ConfigFlags.Detector.SimulateMDT = True
-  ConfigFlags.Detector.GeometryMDT = True
-  ConfigFlags.Detector.SimulateRPC = True
-  ConfigFlags.Detector.GeometryRPC = True
-  ConfigFlags.Detector.SimulateTGC = True
-  ConfigFlags.Detector.GeometryTGC = True
-  ConfigFlags.Detector.SimulateCSC = True
-  ConfigFlags.Detector.GeometryCSC = True
+  ConfigFlags.Detector.SimulateMuon = True #True
+  ConfigFlags.Detector.GeometryMuon = True #True <these two break it (others can be true)
+  ConfigFlags.Detector.SimulateMDT = True #True
+  ConfigFlags.Detector.GeometryMDT = True #True
+  ConfigFlags.Detector.SimulateRPC = True #True
+  ConfigFlags.Detector.GeometryRPC = True #True
+  ConfigFlags.Detector.SimulateTGC = True #True
+  ConfigFlags.Detector.GeometryTGC = True #True
+  ConfigFlags.Detector.SimulateCSC = True #True
+  ConfigFlags.Detector.GeometryCSC = True #True
 
   #LAr
   ConfigFlags.Detector.SimulateLAr = True 
@@ -74,6 +74,9 @@ if __name__ == '__main__':
   #ConfigFlags.Detector.GeometryHGTD = False #isn't a flag -- is it needed?
 
 
+  ConfigFlags.Detector.SimulateBpipe = True
+  ConfigFlags.Detector.GeometryBpipe = True
+
 
   #forward region not migrated yet
   ConfigFlags.Detector.SimulateLucid = False
@@ -140,7 +143,7 @@ if __name__ == '__main__':
   cfg.merge( OutputStreamCfg(ConfigFlags,"HITS", ItemList=["TrackRecordCollection#MuonEntryLayer"])) 
   cfg.merge( OutputStreamCfg(ConfigFlags,"HITS", ItemList=["TrackRecordCollection#MuonExitLayer"])) 
 
-
+  
   # Dump config
   cfg.getService("StoreGateSvc").Dump = True
   cfg.getService("ConditionStore").Dump = True
@@ -156,7 +159,7 @@ if __name__ == '__main__':
   log.info("Run G4AtlasAlg in " + str(b-a) + " seconds")
 
   # Success should be 0
-  os.sys.exit(not sc.isSuccess())
+  #os.sys.exit(not sc.isSuccess())
 
   f=open("test.pkl","wb")
   cfg.store(f) 
diff --git a/Simulation/G4Atlas/G4AtlasAlg/test/test_MC16_AtlasG4_ttbar.sh b/Simulation/G4Atlas/G4AtlasAlg/test/test_MC16_AtlasG4_ttbar.sh
new file mode 100755
index 00000000000..0ccd95a8618
--- /dev/null
+++ b/Simulation/G4Atlas/G4AtlasAlg/test/test_MC16_AtlasG4_ttbar.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# art-description: MC16-style simulation using FullG4
+# art-include: 21.0/Athena
+# art-include: 21.3/Athena
+# art-include: 21.9/Athena
+# art-include: master/Athena
+# art-type: grid
+# art-output: test.HITS.pool.root
+# art-output: truth.root
+
+# MC16 setup
+# ATLAS-R2-2016-01-00-01 and OFLCOND-MC16-SDR-14
+AtlasG4_tf.py \
+--conditionsTag 'default:OFLCOND-MC16-SDR-14' \
+--physicsList 'FTFP_BERT_ATL' \
+--truthStrategy 'MC15aPlus' \
+--postInclude 'default:PyJobTransforms/UseFrontier.py' \
+--preInclude 'AtlasG4Tf:SimulationJobOptions/preInclude.BeamPipeKill.py,SimulationJobOptions/preInclude.FrozenShowersFCalOnly.py' \
+--preExec 'AtlasG4Tf:simFlags.TightMuonStepping=True' \
+--DataRunNumber '284500' \
+--geometryVersion 'default:ATLAS-R2-2016-01-00-01' \
+--inputEVNTFile "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.evgen.EVNT.e4993.EVNT.08166201._000012.pool.root.1" \
+--outputHITSFile "test.HITS.pool.root" \
+--maxEvents 1 \
+--imf False \
+--athenaopts '"--config-only=oldConfig.pkl"'
+#--athenaopts '"--config-only=oldstyle_configMC16.pkl"'
+
+rc=$?
+rc2=-9999
+echo  "art-result: $rc simulation"
+if [ $rc -eq 0 ]
+then
+    ArtPackage=$1
+    ArtJobName=$2
+    art.py compare grid --entries 4 ${ArtPackage} ${ArtJobName} --mode=summary
+    rc2=$?
+fi
+
+echo  "art-result: $rc2 regression"
diff --git a/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py b/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py
index 7fb4f34aa79..8ed793c3aaa 100644
--- a/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py
+++ b/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py
@@ -14,8 +14,8 @@ def createSimConfigFlags():
 
     scf.addFlag("Sim.CavernBG",False) #"Write" , "Read" , "Signal" , "WriteWorld" , "SignalWorld"
     scf.addFlag("Sim.ReadTR",False)
-    scf.addFlag("Sim.WorldRRange", 12500) #int or float
-    scf.addFlag("Sim.WorldZRange", 22031) #int or float
+    scf.addFlag("Sim.WorldRRange", False) #12500. #int or float
+    scf.addFlag("Sim.WorldZRange", False) #22031. #int or float
 
     # the G4 offset. It was never changed, so no need to peek in file
     scf.addFlag("Sim.SimBarcodeOffset", 200000)
diff --git a/Simulation/G4Atlas/G4AtlasApps/share/jobOptions.G4Atlas_ReadEvgen.py b/Simulation/G4Atlas/G4AtlasApps/share/jobOptions.G4Atlas_ReadEvgen.py
index 468f3328347..38c425174b0 100644
--- a/Simulation/G4Atlas/G4AtlasApps/share/jobOptions.G4Atlas_ReadEvgen.py
+++ b/Simulation/G4Atlas/G4AtlasApps/share/jobOptions.G4Atlas_ReadEvgen.py
@@ -23,7 +23,7 @@ jobproperties.Global.ConditionsTag = "OFLCOND-RUN12-SDR-21"
 from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 athenaCommonFlags.PoolEvgenInput = ['/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/ISF_Validation/mu_E200_eta0-60-10000.evgen.pool.root']
 athenaCommonFlags.PoolHitsOutput = "test.HITS.pool.root"
-athenaCommonFlags.EvtMax = 3
+athenaCommonFlags.EvtMax = 1
 
 ## Simulation flags
 from G4AtlasApps.SimFlags import simFlags
diff --git a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasServicesConfigNew.py b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasServicesConfigNew.py
index 87ea0806970..d4b7637a224 100644
--- a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasServicesConfigNew.py
+++ b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasServicesConfigNew.py
@@ -5,7 +5,8 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 
 DetectorGeometrySvc, G4AtlasSvc, G4GeometryNotifierSvc, PhysicsListSvc=CompFactory.getComps("DetectorGeometrySvc","G4AtlasSvc","G4GeometryNotifierSvc","PhysicsListSvc",)
 #the physics region tools
-from G4AtlasTools.G4PhysicsRegionConfigNew import SX1PhysicsRegionToolCfg, BedrockPhysicsRegionToolCfg, CavernShaftsConcretePhysicsRegionToolCfg, PixelPhysicsRegionToolCfg, SCTPhysicsRegionToolCfg, TRTPhysicsRegionToolCfg, TRT_ArPhysicsRegionToolCfg, BeampipeFwdCutPhysicsRegionToolCfg, FWDBeamLinePhysicsRegionToolCfg, EMBPhysicsRegionToolCfg, EMECPhysicsRegionToolCfg, HECPhysicsRegionToolCfg, FCALPhysicsRegionToolCfg, FCAL2ParaPhysicsRegionToolCfg, EMECParaPhysicsRegionToolCfg, FCALParaPhysicsRegionToolCfg
+from G4AtlasTools.G4PhysicsRegionConfigNew import SX1PhysicsRegionToolCfg, BedrockPhysicsRegionToolCfg, CavernShaftsConcretePhysicsRegionToolCfg, PixelPhysicsRegionToolCfg, SCTPhysicsRegionToolCfg, TRTPhysicsRegionToolCfg, TRT_ArPhysicsRegionToolCfg, BeampipeFwdCutPhysicsRegionToolCfg, FWDBeamLinePhysicsRegionToolCfg, EMBPhysicsRegionToolCfg, EMECPhysicsRegionToolCfg, HECPhysicsRegionToolCfg, FCALPhysicsRegionToolCfg, FCAL2ParaPhysicsRegionToolCfg, EMECParaPhysicsRegionToolCfg, FCALParaPhysicsRegionToolCfg 
+from G4AtlasTools.G4PhysicsRegionConfigNew import DriftWallPhysicsRegionToolCfg, DriftWall1PhysicsRegionToolCfg, DriftWall2PhysicsRegionToolCfg
 
 #the geometry tools
 from G4AtlasTools.G4GeometryToolConfig import MaterialDescriptionToolCfg, G4AtlasDetectorConstructionToolCfg, ATLASEnvelopeCfg
@@ -37,7 +38,7 @@ def getATLAS_RegionCreatorList(ConfigFlags):
             if True:
                 regionCreatorList += [BeampipeFwdCutPhysicsRegionToolCfg(ConfigFlags)]
             #if simFlags.ForwardDetectors.statusOn and simFlags.ForwardDetectors() == 2:
-            if True:
+            if False:
                 regionCreatorList += [FWDBeamLinePhysicsRegionToolCfg(ConfigFlags)]
     if ConfigFlags.Detector.SimulateCalo:
         if ConfigFlags.Detector.GeometryLAr:
@@ -51,7 +52,7 @@ def getATLAS_RegionCreatorList(ConfigFlags):
             #    Logging.log.info('  Please try again with a different value of either simFlags.LArParameterization (' + str(simFlags.LArParameterization()) + ') or simFlags.CalibrationRun ('+str(ConfigFlags.Sim.CalibrationRun)+')')
             #    raise RuntimeError('Configuration not allowed')
             #if simFlags.LArParameterization() > 0:
-            if True:
+            if False:
                 regionCreatorList += [EMBPhysicsRegionToolCfg(ConfigFlags), EMECPhysicsRegionToolCfg(ConfigFlags),
                                       HECPhysicsRegionToolCfg(ConfigFlags), FCALPhysicsRegionToolCfg(ConfigFlags)]
                 # FIXME 'EMBPhysicsRegionTool' used for parametrization also - do we need a second instance??
@@ -62,16 +63,16 @@ def getATLAS_RegionCreatorList(ConfigFlags):
                     pass
                     #todo - add the line below
                     #regionCreatorList += [PreSampLArPhysicsRegionToolCfg(ConfigFlags), DeadMaterialPhysicsRegionToolCfg(ConfigFlags)]
-            elif False: # simFlags.LArParameterization() is None or simFlags.LArParameterization() == 0:
+            elif True: # simFlags.LArParameterization() is None or simFlags.LArParameterization() == 0:
                 regionCreatorList += [EMBPhysicsRegionToolCfg(ConfigFlags), EMECPhysicsRegionToolCfg(ConfigFlags),
                                       HECPhysicsRegionToolCfg(ConfigFlags), FCALPhysicsRegionToolCfg(ConfigFlags)]
     ## FIXME _initPR never called for FwdRegion??
     #if simFlags.ForwardDetectors.statusOn:
     #    if DetFlags.geometry.FwdRegion_on():
     #        regionCreatorList += ['FwdRegionPhysicsRegionTool']
-    #if ConfigFlags.Detector.GeometryMuon:
+    if ConfigFlags.Detector.GeometryMuon:
         #todo - add the line below
-        #regionCreatorList += [DriftWallPhysicsRegionTool(ConfigFlags), DriftWall1PhysicsRegionTool(ConfigFlags), DriftWall2PhysicsRegionTool(ConfigFlags)]
+        regionCreatorList += [DriftWallPhysicsRegionToolCfg(ConfigFlags), DriftWall1PhysicsRegionToolCfg(ConfigFlags), DriftWall2PhysicsRegionToolCfg(ConfigFlags)]
         #if ConfigFlags.Sim.CavernBG != 'Read' and not (simFlags.RecordFlux.statusOn and simFlags.RecordFlux()):
             #pass
             #todo - add the line below
diff --git a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasUserActionConfigNew.py b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasUserActionConfigNew.py
index f0fd6c06e60..6a94ce3af91 100644
--- a/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasUserActionConfigNew.py
+++ b/Simulation/G4Atlas/G4AtlasServices/python/G4AtlasUserActionConfigNew.py
@@ -5,7 +5,8 @@ from MCTruthBase.MCTruthBaseConfigNew import MCTruthSteppingActionToolCfg
 
 from G4AtlasServices.G4AtlasServicesConf import G4UA__UserActionSvc
 
-from G4UserActions.G4UserActionsConfigNew import AthenaStackingActionToolCfg#, AthenaTrackingActionToolCfg
+from G4UserActions.G4UserActionsConfigNew import AthenaStackingActionToolCfg, AthenaTrackingActionToolCfg, LooperKillerToolCfg, G4SimTimerToolCfg, G4TrackCounterToolCfg
+
 
 
 # New function for all user action types
@@ -15,18 +16,17 @@ def getDefaultActions(ConfigFlags):
     actions = []
 
     # System stacking action
-    #actions += ['G4UA::AthenaStackingActionTool']
     actions += [result.popToolsAndMerge( AthenaStackingActionToolCfg(ConfigFlags)  )]
 
     # Some truth handling actions (and timing)
     if not ConfigFlags.Sim.ISFRun:
         actions += [
-                    #result.popToolsAndMerge( AthenaTrackingActionToolCfg(ConfigFlags) ),
-                    result.popToolsAndMerge( MCTruthSteppingActionToolCfg(ConfigFlags) )
-                    #'G4UA::G4SimTimerTool']
+                    result.popToolsAndMerge( AthenaTrackingActionToolCfg(ConfigFlags) ),
+                    result.popToolsAndMerge( MCTruthSteppingActionToolCfg(ConfigFlags) ),
+                    result.popToolsAndMerge( G4SimTimerToolCfg(ConfigFlags))
                     ]
     # Track counter
-    #actions += ['G4UA::G4TrackCounterTool']
+    actions += [result.popToolsAndMerge( G4TrackCounterToolCfg(ConfigFlags) ) ]
 
     # Cosmic Perigee action
     if ConfigFlags.Beam.Type == 'cosmics' and ConfigFlags.Sim.CavernBG:
@@ -47,6 +47,7 @@ def getDefaultActions(ConfigFlags):
     if ConfigFlags.Sim.CalibrationRun == 'LAr+Tile':
         actions+=['G4UA::CaloG4::CalibrationDefaultProcessingTool']
 
+    actions += [ result.popToolsAndMerge( LooperKillerToolCfg(ConfigFlags) ) ] 
     return actions
 
 def UserActionSvcCfg(ConfigFlags, name="G4UA::UserActionSvc", **kwargs):
@@ -56,12 +57,9 @@ def UserActionSvcCfg(ConfigFlags, name="G4UA::UserActionSvc", **kwargs):
     """
     result = ComponentAccumulator()
 
-    #how to convert this flag?
-    from G4AtlasApps.SimFlags import simFlags
-    optActions = simFlags.OptionalUserActionList.get_Value()
     # new user action tools
     kwargs.setdefault('UserActionTools',
-                      getDefaultActions(ConfigFlags) + optActions['General'])
+                      getDefaultActions(ConfigFlags))
 
     # placeholder for more advanced config, if needed
     result.addService ( G4UA__UserActionSvc(name, **kwargs) )
diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfigNew.py b/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfigNew.py
index 43eb1273b09..4826177bf71 100644
--- a/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfigNew.py
+++ b/Simulation/G4Atlas/G4AtlasTools/python/G4AtlasToolsConfigNew.py
@@ -165,7 +165,7 @@ def generateCaloSensitiveDetectorList(ConfigFlags):
         #    SensitiveDetectorList += [ toolDeadSensitiveDetector, toolInactiveSensitiveDetector , toolActiveSensitiveDetector ]
         #<<<migrate above
         #elif ConfigFlags.Sim.CalibrationRun == 'DeadLAr':
-        if ConfigFlags.Sim.CalibrationRun == 'DeadLAr':
+        if True: #ConfigFlags.Sim.CalibrationRun == 'DeadLAr':
             accDeadSensitiveDetector = LArDeadSensitiveDetectorToolCfg(ConfigFlags)
             SensitiveDetectorList += [ result.popToolsAndMerge(accDeadSensitiveDetector) ]
        
diff --git a/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py b/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
index d963567e3dc..56306fdf8b8 100644
--- a/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
+++ b/Simulation/G4Atlas/G4AtlasTools/python/G4GeometryToolConfig.py
@@ -344,36 +344,37 @@ def ATLASEnvelopeCfg(ConfigFlags, name="Atlas", **kwargs):
         outerRadii[i] = AtlasOuterR1
 
     ## World R range
-    routValue = ConfigFlags.Sim.WorldRRange
-    if ConfigFlags.Sim.WorldRRange > max(AtlasOuterR1, AtlasOuterR2):
-        for i in xrange(4, 14):
-            outerRadii[i] = routValue
-    else:
-        raise RuntimeError('getATLASEnvelope: ERROR ConfigFlags.Sim.WorldRRange must be > %f. Current value %f' % (max(AtlasOuterR1, AtlasOuterR2), routValue) )
+    if ConfigFlags.Sim.WorldRRange:
+        routValue = ConfigFlags.Sim.WorldRRange
+        if ConfigFlags.Sim.WorldRRange > max(AtlasOuterR1, AtlasOuterR2):
+            for i in xrange(4, 14):
+                outerRadii[i] = routValue
+        else:
+            raise RuntimeError('getATLASEnvelope: ERROR ConfigFlags.Sim.WorldRRange must be > %f. Current value %f' % (max(AtlasOuterR1, AtlasOuterR2), routValue) )
     kwargs.setdefault("OuterRadii", outerRadii)
 
     ## ZSurfaces
     zSurfaces = [-26046., -23001., -23001., -22031., -22031., -12899., -12899., -6741., -6741.,  6741.,  6741.,  12899., 12899., 22031., 22031., 23001., 23001., 26046.] # FIXME units mm??
-
+    
     if ConfigFlags.Detector.SimulateForward:
         zSurfaces[0]  = -400000.
         zSurfaces[17] =  400000.
 
     #leave a check in for WorldRrange and WorldZrange?
-    #if simFlags.WorldZRange.statusOn:
-
-    if ConfigFlags.Sim.WorldZRange < 26046.:
-          raise RuntimeError('getATLASEnvelope: ERROR ConfigFlags.Sim.WorldZRange must be > 26046. Current value: %f' % ConfigFlags.Sim.WorldZRange)
-    zSurfaces[17] =  ConfigFlags.Sim.WorldZRange + 100.
-    zSurfaces[16] =  ConfigFlags.Sim.WorldZRange + 50.
-    zSurfaces[15] =  ConfigFlags.Sim.WorldZRange + 50.
-    zSurfaces[14] =  ConfigFlags.Sim.WorldZRange
-    zSurfaces[13] =  ConfigFlags.Sim.WorldZRange
-    zSurfaces[0] =  -ConfigFlags.Sim.WorldZRange - 100.
-    zSurfaces[1] =  -ConfigFlags.Sim.WorldZRange - 50.
-    zSurfaces[2] =  -ConfigFlags.Sim.WorldZRange - 50.
-    zSurfaces[3] =  -ConfigFlags.Sim.WorldZRange
-    zSurfaces[4] =  -ConfigFlags.Sim.WorldZRange
+    if ConfigFlags.Sim.WorldZRange:
+        print ConfigFlags.Sim.WorldZRange
+        if ConfigFlags.Sim.WorldZRange < 26046.:
+              raise RuntimeError('getATLASEnvelope: ERROR ConfigFlags.Sim.WorldZRange must be > 26046. Current value: %f' % ConfigFlags.Sim.WorldZRange)
+        zSurfaces[17] =  ConfigFlags.Sim.WorldZRange + 100.
+        zSurfaces[16] =  ConfigFlags.Sim.WorldZRange + 50.
+        zSurfaces[15] =  ConfigFlags.Sim.WorldZRange + 50.
+        zSurfaces[14] =  ConfigFlags.Sim.WorldZRange
+        zSurfaces[13] =  ConfigFlags.Sim.WorldZRange
+        zSurfaces[0] =  -ConfigFlags.Sim.WorldZRange - 100.
+        zSurfaces[1] =  -ConfigFlags.Sim.WorldZRange - 50.
+        zSurfaces[2] =  -ConfigFlags.Sim.WorldZRange - 50.
+        zSurfaces[3] =  -ConfigFlags.Sim.WorldZRange
+        zSurfaces[4] =  -ConfigFlags.Sim.WorldZRange
 
     kwargs.setdefault("ZSurfaces", zSurfaces)
     accSubDetectors, SubDetectorList = generateSubDetectorList(ConfigFlags) 
diff --git a/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfigNew.py b/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfigNew.py
index a1461fcb26c..178c718740d 100644
--- a/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfigNew.py
+++ b/Simulation/G4Utilities/G4UserActions/python/G4UserActionsConfigNew.py
@@ -1,7 +1,7 @@
 # Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
 
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from G4UserActions.G4UserActionsConf import G4UA__AthenaStackingActionTool, G4UA__AthenaTrackingActionTool
+from G4UserActions.G4UserActionsConf import G4UA__AthenaStackingActionTool, G4UA__AthenaTrackingActionTool, G4UA__LooperKillerTool, G4UA__G4SimTimerTool, G4UA__G4TrackCounterTool
 
 # this is a bit cumbersome, but it seems ike it is a lot easier to separate
 # the getter functionality from all the rest (i.e. adding the action).
@@ -47,3 +47,19 @@ def AthenaTrackingActionToolCfg(ConfigFlags, name='G4UA::AthenaTrackingActionToo
     kwargs.setdefault('SubDetVolumeLevel', subDetLevel)
     result.setPrivateTools( G4UA__AthenaTrackingActionTool(name,**kwargs) )
     return result
+
+def LooperKillerToolCfg(ConfigFlags, name='G4UA::LooperKillerTool', **kwargs):
+    result = ComponentAccumulator()
+    result.setPrivateTools(G4UA__LooperKillerTool(name, **kwargs))
+    return result
+
+def G4SimTimerToolCfg(ConfigFlags, name='G4UA::G4SimTimerTool', **kwargs):
+    result = ComponentAccumulator()
+    result.setPrivateTools(G4UA__G4SimTimerTool(name,**kwargs))
+    return result
+
+
+def G4TrackCounterToolCfg(ConfigFlags, name='G4UA::G4TrackCounterTool', **kwargs):
+    result = ComponentAccumulator()
+    result.setPrivateTools(G4UA__G4TrackCounterTool(name,**kwargs))
+    return result
\ No newline at end of file
-- 
GitLab