4 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
5 from AthenaConfiguration.ComponentFactory
import CompFactory
6 from AthenaConfiguration.Enums
import BeamType, LHCPeriod
7 from CaloG4Sim.CaloG4SimConfig
import CalibrationDefaultProcessingToolCfg
8 from SimulationConfig.SimEnums
import CalibrationRun, CavernBackground, SimulationFlavour
9 from G4CosmicFilter.G4CosmicFilterConfig
import CosmicFilterToolCfg
10 from G4UserActions.G4UserActionsConfig
import (
11 AthenaStackingActionToolCfg, AthenaTrackingActionToolCfg,
12 G4SimTimerToolCfg, G4TrackCounterToolCfg, HitWrapperToolCfg,
13 LooperKillerToolCfg, StoppedParticleActionToolCfg
15 from ISF_Geant4CommonTools.ISF_Geant4CommonToolsConfig
import EntryLayerToolCfg, EntryLayerToolMTCfg
16 from ISF_Services.ISF_ServicesCoreConfig
import ATLFAST_GeoIDSvcCfg, GeoIDSvcCfg
17 from ISF_Services.ISF_ServicesConfig
import (
18 ATLFAST_ParticleBrokerSvcCfg, ParticleBrokerSvcCfg, TruthServiceCfg
20 from ISF_Tools.ISF_ToolsConfig
import StoppedParticleFilterToolCfg
21 from MCTruthBase.MCTruthBaseConfig
import MCTruthSteppingActionToolCfg
25 """ flags.Sim.OptionalUserActionList = ['G4UserActions.G4UserActionsConfig.FixG4CreatorProcessToolCfg']"""
27 optionalUserActions = []
28 for userActionString
in flags.Sim.OptionalUserActionList:
29 optionalUserActions += [result.popToolsAndMerge(
getOptionalUACfg(flags, userActionString))]
30 result.setPrivateTools(optionalUserActions)
35 """Execute a function to configure and optional UserAction"""
36 parts = userActionString.split(
'.')
38 raise ValueError(
'OptionalUserAction strings should be of the form Package.Module.Function or Package.Function if defined in __init__.py')
40 module =
'.'.
join(parts[:-1])
41 from importlib
import import_module
42 loaded_module = import_module(module)
43 function_def = getattr(loaded_module, function)
44 return function_def(flags)
50 if flags.Sim.ISF.Simulator
in [SimulationFlavour.FullG4MT, SimulationFlavour.FullG4MT_QS]:
53 tool = result.popToolsAndMerge(EntryLayerToolCfg(flags))
54 kwargs.setdefault(
"EntryLayerTool", result.addPublicTool(tool))
55 kwargs.setdefault(
"GeoIDSvc", result.getPrimaryAndMerge(
GeoIDSvcCfg(flags)).name)
56 if flags.Detector.GeometryCavern:
57 kwargs.setdefault(
"TruthVolumeLevel", 2)
58 kwargs.setdefault(
"IsITkGeometry", flags.GeoModel.Run >= LHCPeriod.Run4)
59 result.setPrivateTools(CompFactory.G4UA.iGeant4.TrackProcessorUserActionFullG4Tool(name, **kwargs))
65 result.setPrivateTools(CompFactory.G4UA.iGeant4.PhysicsValidationUserActionTool(name, **kwargs))
71 kwargs.setdefault(
"TruthRecordSvc", result.getPrimaryAndMerge(
TruthServiceCfg(flags)).name)
72 result.setPrivateTools(CompFactory.G4UA.iGeant4.MCTruthUserActionTool(name, **kwargs))
78 if "ParticleBroker" not in kwargs:
80 kwargs.setdefault(
"GeoIDSvc", result.getPrimaryAndMerge(
GeoIDSvcCfg(flags)).name)
81 result.setPrivateTools(CompFactory.G4UA.iGeant4.TrackProcessorUserActionPassBackTool(name, **kwargs))
86 if flags.Sim.ISF.Simulator
in [SimulationFlavour.PassBackG4MT]:
87 kwargs.setdefault(
"ParticleBroker",
"")
93 if flags.Sim.ISF.Simulator
in [SimulationFlavour.PassBackG4MT, SimulationFlavour.ATLFASTIIMT, SimulationFlavour.ATLFAST3MT, SimulationFlavour.ATLFAST3MT_QS]:
94 kwargs.setdefault(
"ParticleBroker",
"")
95 elif flags.Sim.ISF.Simulator
in [SimulationFlavour.ATLFASTIIF_G4MS, SimulationFlavour.ATLFAST3F_G4MS]:
98 kwargs.setdefault(
"PassBackEkinThreshold", 0.05*MeV)
99 kwargs.setdefault(
"KillBoundaryParticlesBelowThreshold",
True)
101 result.setPrivateTools(tool)
115 if not flags.Sim.ISFRun:
123 if flags.Beam.Type
is BeamType.Cosmics
and flags.Sim.CavernBackground
is CavernBackground.Off:
124 actions += [CompFactory.G4UA.CosmicPerigeeActionTool()]
126 if flags.Beam.Type
is BeamType.Cosmics
and not flags.Sim.ISFRun:
128 if flags.Sim.StoppedParticleFile:
132 if flags.Sim.CavernBackground
is CavernBackground.Read:
135 if flags.Sim.PhysicsList ==
"QGSP_BERT_HP":
136 actions += [CompFactory.G4UA.PhotonKillerTool()]
138 if flags.Sim.CalibrationRun
in [CalibrationRun.LArTile, CalibrationRun.LArTileZDC]:
143 result.setPrivateTools(actions)
149 Get the standard UA svc configurable with all default actions added.
150 This function is normally called by the configured factory, not users.
158 kwargs.setdefault(
"UserActionTools", generalActions)
161 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
184 kwargs.setdefault(
"UserActionTools", generalActions)
187 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
193 TrackProcessorUserAction = kwargs.pop("TrackProcessorUserAction",[])
195 PhysicsValidationUserAction = []
196 if flags.Sim.ISF.ValidationMode:
199 MCTruthUserAction = kwargs.pop(
"MCTruthUserAction",
202 generalActions = ( TrackProcessorUserAction + MCTruthUserAction +
205 PhysicsValidationUserAction )
208 kwargs.setdefault(
"UserActionTools", generalActions)
209 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
217 kwargs.setdefault(
"TrackProcessorUserAction", [tpAcc.popPrivateTools()])
227 kwargs.setdefault(
"TrackProcessorUserAction",
238 kwargs.setdefault(
"TrackProcessorUserAction",