3from AthenaCommon.SystemOfUnits
import MeV
4from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
5from AthenaConfiguration.ComponentFactory
import CompFactory
6from AthenaConfiguration.Enums
import BeamType, LHCPeriod
7from CaloG4Sim.CaloG4SimConfig
import CalibrationDefaultProcessingToolCfg
8from SimulationConfig.SimEnums
import CalibrationRun, CavernBackground, SimulationFlavour
9from G4CosmicFilter.G4CosmicFilterConfig
import CosmicFilterToolCfg, StoppedParticleFilterToolCfg
10from G4UserActions.G4UserActionsConfig
import (
11 AthenaStackingActionToolCfg, G4SimTimerToolCfg,
12 G4TrackCounterToolCfg, HitWrapperToolCfg,
13 LooperKillerToolCfg, StoppedParticleActionToolCfg
15from G4RunManagement.G4RunManagementUAConfig
import SyncPrimaryGeneratorActionToolCfg, SyncRunActionToolCfg, SyncEventActionToolCfg
16from ISF_Geant4CommonTools.ISF_Geant4CommonToolsConfig
import EntryLayerToolCfg, EntryLayerToolMTCfg
17from ISF_Services.ISF_ServicesCoreConfig
import ATLFAST_GeoIDSvcCfg, GeoIDSvcCfg
18from ISF_Services.ISF_ServicesConfig
import (
19 ATLFAST_ParticleBrokerSvcCfg, ParticleBrokerSvcCfg, TruthServiceCfg
21from MCTruthBase.MCTruthBaseConfig
import MCTruthSteppingActionToolCfg
25 """ flags.Sim.OptionalUserActionList = ['G4UserActions.G4UserActionsConfig.FixG4CreatorProcessToolCfg']"""
26 result = ComponentAccumulator()
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)
49 result = ComponentAccumulator()
50 if flags.Sim.ISF.Simulator
in [SimulationFlavour.FullG4MT, SimulationFlavour.FullG4MT_QS]:
51 tool = result.popToolsAndMerge(EntryLayerToolMTCfg(flags))
53 tool = result.popToolsAndMerge(EntryLayerToolCfg(flags))
54 kwargs.setdefault(
"EntryLayerTool", result.addPublicTool(tool))
55 kwargs.setdefault(
"GeoIDSvc", result.getPrimaryAndMerge(GeoIDSvcCfg(flags)))
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))
64 result = ComponentAccumulator()
65 result.setPrivateTools(CompFactory.G4UA.iGeant4.PhysicsValidationUserActionTool(name, **kwargs))
70 result = ComponentAccumulator()
71 kwargs.setdefault(
"TruthRecordSvc", result.getPrimaryAndMerge(TruthServiceCfg(flags)))
72 result.setPrivateTools(CompFactory.G4UA.iGeant4.MCTruthUserActionTool(name, **kwargs))
77 result = ComponentAccumulator()
78 if "ParticleBroker" not in kwargs:
79 kwargs.setdefault(
"ParticleBroker", result.getPrimaryAndMerge(ParticleBrokerSvcCfg(flags)))
80 kwargs.setdefault(
"GeoIDSvc", result.getPrimaryAndMerge(GeoIDSvcCfg(flags)))
81 result.setPrivateTools(CompFactory.G4UA.iGeant4.TrackProcessorUserActionPassBackTool(name, **kwargs))
86 if flags.Sim.ISF.Simulator
in [SimulationFlavour.PassBackG4MT]:
87 kwargs.setdefault(
"ParticleBroker",
"")
92 result = ComponentAccumulator()
93 if flags.Sim.ISF.Simulator
in [SimulationFlavour.PassBackG4MT, SimulationFlavour.ATLFASTIIMT, SimulationFlavour.ATLFAST3MT, SimulationFlavour.ATLFAST3MT_QS, SimulationFlavour.ATLFAST3F_ACTSMT]:
94 kwargs.setdefault(
"ParticleBroker",
"")
95 elif flags.Sim.ISF.Simulator
in [SimulationFlavour.ATLFASTIIF_G4MS, SimulationFlavour.ATLFAST3F_G4MS]:
96 kwargs.setdefault(
"ParticleBroker", result.getPrimaryAndMerge(ATLFAST_ParticleBrokerSvcCfg(flags)))
97 kwargs.setdefault(
"GeoIDSvc", result.getPrimaryAndMerge(ATLFAST_GeoIDSvcCfg(flags)))
98 kwargs.setdefault(
"PassBackEkinThreshold", 0.05*MeV)
99 kwargs.setdefault(
"KillBoundaryParticlesBelowThreshold",
True)
101 result.setPrivateTools(tool)
107 result = ComponentAccumulator()
113 if flags.Sim.UseG4Workers:
114 actions += [result.popToolsAndMerge(SyncPrimaryGeneratorActionToolCfg(flags)),
115 result.popToolsAndMerge(SyncRunActionToolCfg(flags)),
116 result.popToolsAndMerge(SyncEventActionToolCfg(flags))]
119 actions += [result.popToolsAndMerge(AthenaStackingActionToolCfg(flags))]
122 if not flags.Sim.ISFRun:
123 actions += [result.popToolsAndMerge(MCTruthSteppingActionToolCfg(flags)),
124 result.popToolsAndMerge(G4SimTimerToolCfg(flags))]
126 actions += [result.popToolsAndMerge(G4TrackCounterToolCfg(flags))]
129 if flags.Beam.Type
is BeamType.Cosmics
and flags.Sim.CavernBackground
is CavernBackground.Off:
130 actions += [CompFactory.G4UA.CosmicPerigeeActionTool()]
132 if flags.Beam.Type
is BeamType.Cosmics
and not flags.Sim.ISFRun:
133 actions += [result.popToolsAndMerge(CosmicFilterToolCfg(flags))]
134 if flags.Sim.StoppedParticleFile:
135 actions += [result.popToolsAndMerge(StoppedParticleFilterToolCfg(flags)),
136 result.popToolsAndMerge(StoppedParticleActionToolCfg(flags))]
138 if flags.Sim.CavernBackground
is CavernBackground.Read:
139 actions += [result.popToolsAndMerge(HitWrapperToolCfg(flags))]
141 if flags.Sim.PhysicsList ==
"QGSP_BERT_HP":
142 actions += [CompFactory.G4UA.PhotonKillerTool()]
144 if flags.Sim.CalibrationRun
in [CalibrationRun.LArTile, CalibrationRun.LArTileZDC]:
145 actions += [result.popToolsAndMerge(CalibrationDefaultProcessingToolCfg(flags))]
146 if 'G4UserActions.G4UserActionsConfig.MonopoleLooperKillerToolCfg' not in flags.Sim.OptionalUserActionList:
147 actions += [result.popToolsAndMerge(LooperKillerToolCfg(flags))]
149 result.setPrivateTools(actions)
155 Get the standard UA svc configurable with all default actions added.
156 This function is normally called by the configured factory, not users.
158 result = ComponentAccumulator()
164 kwargs.setdefault(
"UserActionTools", generalActions)
167 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
173 result = ComponentAccumulator()
190 kwargs.setdefault(
"UserActionTools", generalActions)
193 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
198 result = ComponentAccumulator()
199 TrackProcessorUserAction = kwargs.pop("TrackProcessorUserAction",[])
201 PhysicsValidationUserAction = []
202 if flags.Sim.ISF.ValidationMode:
205 MCTruthUserAction = kwargs.pop(
"MCTruthUserAction",
208 generalActions = ( TrackProcessorUserAction + MCTruthUserAction +
211 PhysicsValidationUserAction )
214 kwargs.setdefault(
"UserActionTools", generalActions)
215 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
223 kwargs.setdefault(
"TrackProcessorUserAction", [tpAcc.popPrivateTools()])
232 tpAcc = ComponentAccumulator()
233 kwargs.setdefault(
"TrackProcessorUserAction",
243 tpAcc = ComponentAccumulator()
244 kwargs.setdefault(
"TrackProcessorUserAction",
MCTruthUserActionToolCfg(flags, name="ISFMCTruthUserActionTool", **kwargs)
ATLFAST_G4TrackProcessorUserActionToolCfg(flags, name="ATLFAST_G4TrackProcessorUserActionTool", **kwargs)
ISF_ATLFAST_UserActionSvcCfg(flags, name="G4UA::ISF_ATLFAST_UserActionSvc", **kwargs)
TrackProcessorUserActionToolCfg(flags, name="ISFG4TrackProcessorUserActionTool", **kwargs)
PhysicsValidationUserActionToolCfg(flags, name="ISFG4PhysicsValidationUserActionTool", **kwargs)
ISFUserActionSvcCfg(flags, name="G4UA::ISFUserActionSvc", **kwargs)
getOptionalUACfg(flags, userActionString)
UserActionSvcCfg(flags, name="G4UA::UserActionSvc", **kwargs)
CTBUserActionSvcCfg(flags, name="G4UA::CTBUserActionSvc", **kwargs)
FullG4TrackProcessorUserActionToolCfg(flags, name="FullG4TrackProcessorUserActionTool", **kwargs)
OptionalUserActionCfg(flags)
ISFPassBackUserActionSvcCfg(flags, name="G4UA::ISFPassBackUserActionSvc", **kwargs)
PassBackG4TrackProcessorUserActionToolCfg(flags, name="PassBackG4TrackProcessorUserActionTool", **kwargs)
ISFFullUserActionSvcCfg(flags, name="G4UA::ISFFullUserActionSvc", **kwargs)