From 230506d378ebffb53f84c1cf49eb8d7abc4f08b1 Mon Sep 17 00:00:00 2001
From: John Derek Chapman <chapman@hep.phy.cam.ac.uk>
Date: Tue, 11 Oct 2016 14:29:15 +0200
Subject: [PATCH] share/heavyIons/postInclude.HijingPars.py: allow the
 possibility of writing out multiple streams in a single job. ATLASSIM-2712.
 Tagging: SimulationJobOptions-00-07-16 (SimulationJobOptions-00-07-16)

	* Tagging: SimulationJobOptions-00-07-16
	* share/heavyIons/postInclude.HijingPars.py: allow the possibility
	of writing out multiple streams in a single job. ATLASSIM-2712

2016-10-11  John Chapman  <John.Chapman@cern.ch>

	* Tagging: SimulationJobOptions-00-07-15
	* share/heavyIons/postInclude.HijingPars.py: updates to also copy
	HijingEventParams into the ESD and AOD. ATLASSIM-2712

2016-09-09  John Chapman  <John.Chapman@cern.ch>

	* Tagging: SimulationJobOptions-00-07-14
	* share/specialConfig/preInclude.Monopole.py,
	share/specialConfig/preInclude.Qball.py - drop use of
	simFlags.UseV2UserActions. ATLASSIM-3023

2016-06-20  John Chapman  <John.Chapman@cern.ch>

...
(Long ChangeLog diff - truncated)


Former-commit-id: 82ea23b6765e6bf14c77e36d9e0c11fd86c0dc03
---
 .../share/g4/preInclude.PhotonNuclOff.py      |  6 +-
 .../share/g4/preInclude.VerboseProcess.py     |  6 +-
 .../share/g4/preInclude.VerboseTracking.py    |  3 +-
 .../share/heavyIons/postInclude.HijingPars.py | 52 ++++++--------
 .../share/specialConfig/preInclude.AMSB.py    | 48 ++-----------
 .../share/specialConfig/preInclude.GMSB.py    | 71 ++++---------------
 .../specialConfig/preInclude.Monopole.py      | 21 +++---
 .../share/specialConfig/preInclude.Qball.py   | 18 ++---
 .../share/specialConfig/preInclude.Quirks.py  | 14 ++--
 .../specialConfig/preInclude.Rhadrons.py      | 13 ++--
 10 files changed, 73 insertions(+), 179 deletions(-)

diff --git a/Simulation/SimulationJobOptions/share/g4/preInclude.PhotonNuclOff.py b/Simulation/SimulationJobOptions/share/g4/preInclude.PhotonNuclOff.py
index fa39682b093..cd96b5c52fe 100644
--- a/Simulation/SimulationJobOptions/share/g4/preInclude.PhotonNuclOff.py
+++ b/Simulation/SimulationJobOptions/share/g4/preInclude.PhotonNuclOff.py
@@ -5,9 +5,5 @@
 #########################################################
 
 atlasG4log.info("Turning off photon inelastic interactions")
-def disable_photonuclear():
-    from G4AtlasApps import AtlasG4Eng
-    AtlasG4Eng.G4Eng.gbl.G4Commands().process.inactivate('PhotonInelastic', 'gamma')
-
 from G4AtlasApps.SimFlags import simFlags
-simFlags.InitFunctions.add_function("postInit", disable_photonuclear)
+simFlags.G4Commands += ['/process/inactivate PhotonInelastic gamma']
diff --git a/Simulation/SimulationJobOptions/share/g4/preInclude.VerboseProcess.py b/Simulation/SimulationJobOptions/share/g4/preInclude.VerboseProcess.py
index 0ae1fb4ff55..71a477dc9c8 100644
--- a/Simulation/SimulationJobOptions/share/g4/preInclude.VerboseProcess.py
+++ b/Simulation/SimulationJobOptions/share/g4/preInclude.VerboseProcess.py
@@ -1,9 +1,5 @@
 # Use verbose output for all G4 process.
 # Only works in dbg builds.
 
-def use_verbose_process():
-    from G4AtlasApps import AtlasG4Eng
-    AtlasG4Eng.G4Eng.gbl.G4Commands().process.verbose(10)
-
 from G4AtlasApps.SimFlags import simFlags
-simFlags.InitFunctions.add_function("preInitPhysics", use_verbose_process)
+simFlags.G4Commands += ['/process/verbose 10']
diff --git a/Simulation/SimulationJobOptions/share/g4/preInclude.VerboseTracking.py b/Simulation/SimulationJobOptions/share/g4/preInclude.VerboseTracking.py
index c0c3bcc0dd1..a688a54a1bd 100644
--- a/Simulation/SimulationJobOptions/share/g4/preInclude.VerboseTracking.py
+++ b/Simulation/SimulationJobOptions/share/g4/preInclude.VerboseTracking.py
@@ -2,6 +2,5 @@
 # may find the VerboseSelector or VerboseSelectorArea preIncludes to be
 # more appropriate, but this one gives you all the output you can eat.
 
-from G4AtlasApps.SimFlags import simFlags
 from G4AtlasApps import callbacks
-simFlags.InitFunctions.add_function("preInitG4", callbacks.use_verbose_tracking)
+callbacks.use_verbose_tracking()
diff --git a/Simulation/SimulationJobOptions/share/heavyIons/postInclude.HijingPars.py b/Simulation/SimulationJobOptions/share/heavyIons/postInclude.HijingPars.py
index face2eefe6e..5d910db3b87 100644
--- a/Simulation/SimulationJobOptions/share/heavyIons/postInclude.HijingPars.py
+++ b/Simulation/SimulationJobOptions/share/heavyIons/postInclude.HijingPars.py
@@ -15,35 +15,29 @@ topSequence = AlgSequence()
 
 from AthenaCommon.DetFlags import DetFlags
 if DetFlags.pileup.any_on():
-   from MCTruthSimAlgs.MCTruthSimAlgsConf import MergeHijingPars
-   mergeHijingPars = MergeHijingPars()
-   index = 0
-   for alg in topSequence:
-      index += 1 #count position
-      if 'MergeMcEventCollection' == alg.name():
-         topSequence.insert(index, mergeHijingPars)
+    index = 0
+    for alg in topSequence:
+        index += 1 #count position
+        if 'PileUpToolsAlg' in alg.name():
+            from AthenaCommon.CfgGetter import getPublicTool
+            alg.PileUpTools+=[getPublicTool("MergeHijingParsTool")]
+            break
+        if 'MergeMcEventCollection' == alg.name():
+            from MCTruthSimAlgs.MCTruthSimAlgsConf import MergeHijingPars
+            mergeHijingPars = MergeHijingPars()
+            topSequence.insert(index, mergeHijingPars)
+            break
 else:
-   try:
-      from TruthIO.TruthIOConf import PrintHijingPars
-   except:
-      from TruthExamples.TruthExamplesConf import PrintHijingPars
-   topSequence += PrintHijingPars()
+    try:
+        from TruthIO.TruthIOConf import PrintHijingPars
+    except:
+        from TruthExamples.TruthExamplesConf import PrintHijingPars
+    topSequence += PrintHijingPars()
 
-## configure Athena for POOL persistency
-if hasattr(topSequence, 'StreamHITS'):
-    outStream = topSequence.StreamHITS
-elif hasattr(topSequence, 'StreamRDO'):
-    outStream = topSequence.StreamRDO
-else:
-   ## temporary back-compatibility
-   outStreams = AlgSequence( "Streams" )
-   if hasattr(outStreams, 'StreamHITS'):
-      outStream = outStreams.StreamHITS
-   elif hasattr(outStreams, 'StreamRDO'):
-      outStream = outStreams.StreamRDO
-   else:
-      #We should avoid creating the AthenaPoolOutputStream
-      #outside the core Sim/Digi python code
-      raise AttributeError("AthenaPoolOutputStream not found")
 
-outStream.ItemList += [ "HijingEventParams#Hijing_event_params" ]
+## configure Athena for POOL persistency
+streamAlgs = ['StreamHITS','StreamRDO','StreamESD','StreamAOD']
+for stream in streamAlgs:
+    outStream =  getattr(topSequence, stream, None)
+    if outStream is not None:
+        outStream.ItemList += [ "HijingEventParams#Hijing_event_params" ]
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.AMSB.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.AMSB.py
index 5e9a0769c8f..237c241eaec 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.AMSB.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.AMSB.py
@@ -40,11 +40,11 @@ try:
         simdict = digitizationFlags.specialConfiguration.get_Value()
         doG4SimConfig = False
     else:
-        from G4AtlasApps import AtlasG4Eng
-        simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+        from G4AtlasApps.SimFlags import simFlags
+        simdict = simFlags.specialConfiguration.get_Value()
 except:
-    from G4AtlasApps import AtlasG4Eng
-    simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+    from G4AtlasApps.SimFlags import simFlags
+    simdict = simFlags.specialConfiguration.get_Value()
 
 C1Mass = eval(simdict["AMSBC1Mass"])
 N1Mass = eval(simdict["AMSBN1Mass"])
@@ -53,45 +53,7 @@ get_and_fix_PDGTABLE([(1000022, N1Mass, '~chi(0,1)', '0'), (1000024, C1Mass, '~c
 
 if doG4SimConfig:
     from G4AtlasApps.SimFlags import simFlags
-    def amsb_processlist():
-        from G4AtlasApps import AtlasG4Eng
-        AtlasG4Eng.G4Eng.gbl.G4Commands().process.list()
-
-    simFlags.InitFunctions.add_function("postInit", amsb_processlist)
-
-    def amsb_setparams():
-        from G4AtlasApps import AtlasG4Eng
-        from GaudiKernel.SystemOfUnits import GeV, ns
-        C1Mass = eval(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration["AMSBC1Mass"])
-        N1Mass = eval(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration["AMSBN1Mass"])
-        C1Lifetime = eval(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration["AMSBC1Lifetime"])
-
-
-        AtlasG4Eng.G4Eng._ctrl.load("Charginos")
-        charginoPlus = AtlasG4Eng.G4Eng.gbl.ParticleDataModifier("s_chi_plus_1")
-        charginoPlus.SetParticleMass(C1Mass)
-        if C1Lifetime == -1:
-            charginoPlus.Stable(True)
-        else:
-            charginoPlus.SetParticleLifeTime(C1Lifetime)
-            charginoPlus.Stable(False)
-            charginoPlus.AddDecayChannel("s_chi_plus_1", 1., "s_chi_0_1=pi+")
-
-        charginoMinus = AtlasG4Eng.G4Eng.gbl.ParticleDataModifier("s_chi_minus_1")
-        charginoMinus.SetParticleMass(C1Mass)
-        if C1Lifetime == -1:
-            charginoMinus.Stable(True)
-        else:
-            charginoMinus.SetParticleLifeTime(C1Lifetime)
-            charginoMinus.Stable(False)
-            charginoMinus.AddDecayChannel("s_chi_minus_1", 1., "s_chi_0_1=pi-")
-
-        neutralino = AtlasG4Eng.G4Eng.gbl.ParticleDataModifier("s_chi_0_1")
-        neutralino.SetParticleMass(N1Mass)
-        neutralino.Stable(True)
-
-
-    simFlags.InitFunctions.add_function("preInitPhysics", amsb_setparams)
+    simFlags.PhysicsOptions += ['CharginosPhysicsTool']
 
     def amsb_applycalomctruthstrategy():
 ## Applying the MCTruth strategies: add decays in the Calorimeter
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.GMSB.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.GMSB.py
index ab18508bf70..2c462a3ec9b 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.GMSB.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.GMSB.py
@@ -18,18 +18,18 @@ def get_and_fix_PDGTABLE(replace):
         for r in replace:
             if l.find(r[1]) > -1:
                 ll = l.split()
-            
+
                 if ll[0] == r[0] and ll[1] == r[1]:
                     l = l[0:35] + ('%11.5E' % r[2]).strip().ljust(14) + l[49:]
                     continue
-        
+
         update.write(l)
     update.close()
 
 def load_files_for_GMSB_scenario(simdict):
 
     GMSBIndex = int(simdict["GMSBIndex"])
-    
+
     if GMSBIndex == 1:
         get_and_fix_PDGTABLE([('M', '1000022', eval(simdict["GMSBNeutralino"])), ('M', '1000039', eval(simdict.get("GMSBGravitino",'0')))])
 
@@ -54,14 +54,14 @@ def load_files_for_GMSB_scenario(simdict):
                               ('M', '2000013', m_slepton ), ('M', '2000015', 2.50E+02 ), ('M', '1000023', 1.00E+04 ), \
                               ('M', '1000024', 1.00E+04 ), ('M', '1000025', -1.0E+04 ), ('M', '1000035', 1.00E+04 ), \
                               ('M', '1000037', 1.00E+04 ) ])
-        
+
     elif GMSBIndex == 4:
         get_and_fix_PDGTABLE([('M', '1000015', eval(simdict["GMSBStau"]))])
 
     else:
         print 'GMSBIndex %i not supported' % GMSBIndex
         raise
-    
+
 doG4SimConfig = True
 from AthenaCommon.AthenaCommonFlags import athenaCommonFlags
 import PyUtils.AthFile as af
@@ -73,11 +73,11 @@ try:
         simdict = digitizationFlags.specialConfiguration.get_Value()
         doG4SimConfig = False
     else:
-        from G4AtlasApps import AtlasG4Eng
-        simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+        from G4AtlasApps.SimFlags import simFlags
+        simdict = simFlags.specialConfiguration.get_Value()
 except:
-    from G4AtlasApps import AtlasG4Eng
-    simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+    from G4AtlasApps.SimFlags import simFlags
+    simdict = simFlags.specialConfiguration.get_Value()
 
 assert "GMSBIndex" in simdict
 #if 2525 == simdict["GMSBIndex"]:
@@ -89,7 +89,7 @@ if doG4SimConfig:
     def gmsb_processlist():
         from G4AtlasApps import AtlasG4Eng
         AtlasG4Eng.G4Eng.gbl.G4Commands().process.list()
-    
+
     simFlags.InitFunctions.add_function("postInit", gmsb_processlist)
 
     def gmsb_setparams():
@@ -98,57 +98,14 @@ if doG4SimConfig:
 
         ## Assuming that GMSBIndex is an int here...
         GMSBIndex = int(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration["GMSBIndex"])
-        
-        def modify_slepton_mass(name, mass):
-            slepton = AtlasG4Eng.G4Eng.gbl.ParticleDataModifier(name)
-            slepton.SetParticleMass(mass)
-
 
         if GMSBIndex == 1: # generic neutralino to photon scenario
+            from G4AtlasApps.SimFlags import simFlags
+            simFlags.PhysicsOptions += ["GauginosPhysicsTool"]
 
-            GMSBNeutralino = eval(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration["GMSBNeutralino"])
-            GMSBTime = eval(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration["GMSBLifeTime"])
-            AtlasG4Eng.G4Eng.log.info("Generic GMSB neutralino to photon scenario (mass=%s MeV/time=%s ns)" % (GMSBNeutralino, GMSBTime))
-
-            AtlasG4Eng.G4Eng._ctrl.load("Gauginos")
-            NLsp=AtlasG4Eng.G4Eng.gbl.ParticleDataModifier("s_chi_0_1")
-            NLsp.SetParticleMass(GMSBNeutralino)
-            NLsp.SetParticleLifeTime(GMSBTime)
-            NLsp.Stable(False)
-            NLsp.AddDecayChannel("s_chi_0_1",1.,"s_G=gamma")
-
-            if AtlasG4Eng.G4Eng.Dict_SpecialConfiguration.has_key("GMSBGravitino"):
-                GMSBGravitino = eval(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration["GMSBGravitino"])
-                AtlasG4Eng.G4Eng.log.info("Adding gravitino mass (gravitino mass=%s keV)" % (GMSBGravitino*1E3))
-
-                Lsp=AtlasG4Eng.G4Eng.gbl.ParticleDataModifier("s_G")
-                Lsp.SetParticleMass(GMSBGravitino)
-
-                del GMSBGravitino
-
-            del GMSBNeutralino, GMSBTime
-            
         elif GMSBIndex == 2 or GMSBIndex == 3 or GMSBIndex == 4: # generic stau scenario
-
-            GMSBStau    = eval(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration["GMSBStau"])
-            AtlasG4Eng.G4Eng.log.info("Generic GMSB stau scenario (stau=%s MeV)" % GMSBStau)
-
-            AtlasG4Eng.G4Eng._ctrl.load("Sleptons")
-            modify_slepton_mass("s_tau_plus_1",  GMSBStau)
-            modify_slepton_mass("s_tau_minus_1", GMSBStau)
-
-            if AtlasG4Eng.G4Eng.Dict_SpecialConfiguration.has_key("GMSBSlepton"):
-                GMSBSlepton = eval(AtlasG4Eng.G4Eng.Dict_SpecialConfiguration.get("GMSBSlepton", None))
-                AtlasG4Eng.G4Eng.log.info("Adding slepton mass to GMSB stau scenario (slepton=%s MeV)" % GMSBSlepton)
-
-                modify_slepton_mass("s_mu_plus_R",   GMSBSlepton)
-                modify_slepton_mass("s_mu_minus_R",  GMSBSlepton)
-                modify_slepton_mass("s_e_plus_R",    GMSBSlepton)
-                modify_slepton_mass("s_e_minus_R",   GMSBSlepton)
-
-                del GMSBSlepton
-
-            del GMSBStau
+            from G4AtlasApps.SimFlags import simFlags
+            simFlags.PhysicsOptions += ["SleptonsPhysicsTool"]
 
         del GMSBIndex
 
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Monopole.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Monopole.py
index 221e3de9aae..e1619727bad 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Monopole.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Monopole.py
@@ -46,11 +46,11 @@ try:
         simdict = digitizationFlags.specialConfiguration.get_Value()
         doG4SimConfig = False
     else:
-        from G4AtlasApps import AtlasG4Eng
-        simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+        from G4AtlasApps.SimFlags import simFlags
+        simdict = simFlags.specialConfiguration.get_Value()
 except:
-    from G4AtlasApps import AtlasG4Eng
-    simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+    from G4AtlasApps.SimFlags import simFlags
+    simdict = simFlags.specialConfiguration.get_Value()
 
 assert "MASS" in simdict
 assert "GCHARGE" in simdict
@@ -65,13 +65,14 @@ if doG4SimConfig:
     simFlags.EquationOfMotion.set_On()
     simFlags.EquationOfMotion.set_Value_and_Lock("MonopoleEquationOfMotion")
     simFlags.G4Stepper.set_Value_and_Lock('ClassicalRK4')
+    simFlags.PhysicsOptions += ["MonopolePhysicsTool"]
 
-    def monopole_setupg4():
-        from G4AtlasApps import PyG4Atlas, AtlasG4Eng
-        AtlasG4Eng.G4Eng.load_Lib("Monopole")
-    simFlags.InitFunctions.add_function("preInitPhysics", monopole_setupg4)
-
-    if (not hasattr(simFlags, 'UseV2UserActions') or not simFlags.UseV2UserActions():
+    try:
+        # MT-compatible UserActions
+        from G4AtlasServices.G4AtlasServicesConfig import addAction
+        addAction("LooperKillerTool",['Step'],False)
+        addAction("HIPKillerTool",['Step'],False)
+    except:
         # this configures the non-MT UserActions
         try:
             from G4AtlasServices.G4AtlasUserActionConfig import UAStore
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Qball.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Qball.py
index 9d2c39d3d6a..53e9a3f1b57 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Qball.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Qball.py
@@ -48,11 +48,11 @@ try:
         simdict = digitizationFlags.specialConfiguration.get_Value()
         doG4SimConfig = False
     else:
-        from G4AtlasApps import AtlasG4Eng
-        simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+        from G4AtlasApps.SimFlags import simFlags
+        simdict = simFlags.specialConfiguration.get_Value()
 except:
-    from G4AtlasApps import AtlasG4Eng
-    simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+    from G4AtlasApps.SimFlags import simFlags
+    simdict = simFlags.specialConfiguration.get_Value()
 
 assert "MASS" in simdict
 assert "CHARGE" in simdict
@@ -67,18 +67,14 @@ if doG4SimConfig:
     simFlags.EquationOfMotion.set_On()
     simFlags.EquationOfMotion.set_Value_and_Lock("MonopoleEquationOfMotion")
     simFlags.G4Stepper.set_Value_and_Lock('ClassicalRK4')
+    simFlags.PhysicsOptions += ["MonopolePhysicsTool"]
 
-    def monopole_setupg4():
-        from G4AtlasApps import PyG4Atlas, AtlasG4Eng
-        AtlasG4Eng.G4Eng.load_Lib("Monopole")
-    simFlags.InitFunctions.add_function("preInitPhysics", monopole_setupg4)
-
-    if (hasattr(simFlags, 'UseV2UserActions') and simFlags.UseV2UserActions()):
+    try:
         # MT-compatible UserActions
         from G4AtlasServices.G4AtlasServicesConfig import addAction
         addAction("LooperKillerTool",['Step'],False)
         addAction("HIPKillerTool",['Step'],False)
-    else:
+    except:
         # this configures the non-MT UserActions
         try:
             from G4AtlasServices.G4AtlasUserActionConfig import UAStore
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Quirks.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Quirks.py
index 3c990b5ca9c..6246f780ac1 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Quirks.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Quirks.py
@@ -16,11 +16,11 @@ try:
         simdict = digitizationFlags.specialConfiguration.get_Value()
         doG4SimConfig = False
     else:
-        from G4AtlasApps import AtlasG4Eng
-        simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+        from G4AtlasApps.SimFlags import simFlags
+        simdict = simFlags.specialConfiguration.get_Value()
 except:
-    from G4AtlasApps import AtlasG4Eng
-    simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+    from G4AtlasApps.SimFlags import simFlags
+    simdict = simFlags.specialConfiguration.get_Value()
 
 quirk_mass = float(simdict["MASS"])
 quirk_charge = float(simdict["CHARGE"])
@@ -48,9 +48,5 @@ if doG4SimConfig:
         f.write("0\n")
     f.close()
 
-    def load_quirks_lib():
-        from G4AtlasApps import AtlasG4Eng
-        AtlasG4Eng.G4Eng.load_Lib("Quirks")
-    simFlags.InitFunctions.add_function("preInitPhysics", load_quirks_lib)
-
+    simFlags.PhysicsOptions += ["QuirksPhysicsTool"]
 del quirk_firststring, quirk_maxboost, quirk_maxmerge, quirk_debugenabled, quirk_debugdist, quirk_debugsteps, doG4SimConfig, simdict, f, quirk_mass, quirk_charge, quirk_pdgid, quirk_stringforce
diff --git a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Rhadrons.py b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Rhadrons.py
index a50c8b0b149..791daa3ec89 100644
--- a/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Rhadrons.py
+++ b/Simulation/SimulationJobOptions/share/specialConfig/preInclude.Rhadrons.py
@@ -356,11 +356,11 @@ try:
     simdict = digitizationFlags.specialConfiguration.get_Value()
     doG4SimConfig = False
   else:
-    from G4AtlasApps import AtlasG4Eng
-    simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+    from G4AtlasApps.SimFlags import simFlags
+    simdict = simFlags.specialConfiguration.get_Value()
 except:
-  from G4AtlasApps import AtlasG4Eng
-  simdict = AtlasG4Eng.G4Eng.Dict_SpecialConfiguration
+  from G4AtlasApps.SimFlags import simFlags
+  simdict = simFlags.specialConfiguration.get_Value()
 
 ## Compulsory keys
 assert "MASS" in simdict
@@ -379,10 +379,7 @@ if simdict.has_key("Mixing"):
 
 if doG4SimConfig:
   from G4AtlasApps.SimFlags import simFlags
-  def rhadrons_setupg4():
-    from G4AtlasApps import PyG4Atlas, AtlasG4Eng
-    AtlasG4Eng.G4Eng.load_Lib("RHadrons")
-  simFlags.InitFunctions.add_function("preInitPhysics", rhadrons_setupg4)
+  simFlags.PhysicsOptions += ["RHadronsPhysicsTool"]
 
 # In case we want to use Pythia for decays in line...
 if simdict.has_key("DECAYS"):
-- 
GitLab