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, AthenaTrackingActionToolCfg,
12 G4SimTimerToolCfg, 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]:
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(AthenaTrackingActionToolCfg(flags)),
124 result.popToolsAndMerge(MCTruthSteppingActionToolCfg(flags)),
125 result.popToolsAndMerge(G4SimTimerToolCfg(flags))]
127 actions += [result.popToolsAndMerge(G4TrackCounterToolCfg(flags))]
130 if flags.Beam.Type
is BeamType.Cosmics
and flags.Sim.CavernBackground
is CavernBackground.Off:
131 actions += [CompFactory.G4UA.CosmicPerigeeActionTool()]
133 if flags.Beam.Type
is BeamType.Cosmics
and not flags.Sim.ISFRun:
134 actions += [result.popToolsAndMerge(CosmicFilterToolCfg(flags))]
135 if flags.Sim.StoppedParticleFile:
136 actions += [result.popToolsAndMerge(StoppedParticleFilterToolCfg(flags)),
137 result.popToolsAndMerge(StoppedParticleActionToolCfg(flags))]
139 if flags.Sim.CavernBackground
is CavernBackground.Read:
140 actions += [result.popToolsAndMerge(HitWrapperToolCfg(flags))]
142 if flags.Sim.PhysicsList ==
"QGSP_BERT_HP":
143 actions += [CompFactory.G4UA.PhotonKillerTool()]
145 if flags.Sim.CalibrationRun
in [CalibrationRun.LArTile, CalibrationRun.LArTileZDC]:
146 actions += [result.popToolsAndMerge(CalibrationDefaultProcessingToolCfg(flags))]
147 if 'G4UserActions.G4UserActionsConfig.MonopoleLooperKillerToolCfg' not in flags.Sim.OptionalUserActionList:
148 actions += [result.popToolsAndMerge(LooperKillerToolCfg(flags))]
150 result.setPrivateTools(actions)
156 Get the standard UA svc configurable with all default actions added.
157 This function is normally called by the configured factory, not users.
159 result = ComponentAccumulator()
165 kwargs.setdefault(
"UserActionTools", generalActions)
168 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
174 result = ComponentAccumulator()
191 kwargs.setdefault(
"UserActionTools", generalActions)
194 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
199 result = ComponentAccumulator()
200 TrackProcessorUserAction = kwargs.pop("TrackProcessorUserAction",[])
202 PhysicsValidationUserAction = []
203 if flags.Sim.ISF.ValidationMode:
206 MCTruthUserAction = kwargs.pop(
"MCTruthUserAction",
209 generalActions = ( TrackProcessorUserAction + MCTruthUserAction +
212 PhysicsValidationUserAction )
215 kwargs.setdefault(
"UserActionTools", generalActions)
216 result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs), primary =
True)
224 kwargs.setdefault(
"TrackProcessorUserAction", [tpAcc.popPrivateTools()])
233 tpAcc = ComponentAccumulator()
234 kwargs.setdefault(
"TrackProcessorUserAction",
244 tpAcc = ComponentAccumulator()
245 kwargs.setdefault(
"TrackProcessorUserAction",
UserActionSvcCfg(flags, name="G4UA::UserActionSvc", **kwargs)
MCTruthUserActionToolCfg(flags, name="ISFMCTruthUserActionTool", **kwargs)
OptionalUserActionCfg(flags)
ISFPassBackUserActionSvcCfg(flags, name="G4UA::ISFPassBackUserActionSvc", **kwargs)
ISFFullUserActionSvcCfg(flags, name="G4UA::ISFFullUserActionSvc", **kwargs)
FullG4TrackProcessorUserActionToolCfg(flags, name="FullG4TrackProcessorUserActionTool", **kwargs)
PassBackG4TrackProcessorUserActionToolCfg(flags, name="PassBackG4TrackProcessorUserActionTool", **kwargs)
ISF_ATLFAST_UserActionSvcCfg(flags, name="G4UA::ISF_ATLFAST_UserActionSvc", **kwargs)
TrackProcessorUserActionToolCfg(flags, name="ISFG4TrackProcessorUserActionTool", **kwargs)
CTBUserActionSvcCfg(flags, name="G4UA::CTBUserActionSvc", **kwargs)
ISFUserActionSvcCfg(flags, name="G4UA::ISFUserActionSvc", **kwargs)
ATLFAST_G4TrackProcessorUserActionToolCfg(flags, name="ATLFAST_G4TrackProcessorUserActionTool", **kwargs)
PhysicsValidationUserActionToolCfg(flags, name="ISFG4PhysicsValidationUserActionTool", **kwargs)
getOptionalUACfg(flags, userActionString)