13 scf = AthConfigFlags()
14 scf.addFlag(
"Sim.ParticleID",
False)
16 def _checkCalibrationRun(prevFlags):
17 if prevFlags.Sim.ISF.Simulator
not in [SimulationFlavour.FullG4MT, SimulationFlavour.FullG4MT_QS, SimulationFlavour.PassBackG4MT, SimulationFlavour.AtlasG4, SimulationFlavour.AtlasG4_QS] \
18 or prevFlags.Sim.LArParameterization
is not LArParameterization.NoFrozenShowers:
19 return CalibrationRun.Off
20 return CalibrationRun.DeadLAr
22 scf.addFlag(
"Sim.CalibrationRun", _checkCalibrationRun, type=CalibrationRun)
24 scf.addFlag(
"Sim.CavernBackground", CavernBackground.Off, type=CavernBackground)
25 scf.addFlag(
"Sim.ReadTR",
False)
26 scf.addFlag(
"Sim.WorldRRange",
False)
27 scf.addFlag(
"Sim.WorldZRange",
False)
29 def _barcodeOffsetFromTruthStrategy(prevFlags):
30 if prevFlags.Sim.TruthStrategy
in [TruthStrategy.MC15, TruthStrategy.MC18, TruthStrategy.MC18LLP]:
34 def _checkSimBarcodeOffsetConf(prevFlags):
36 if prevFlags.Input.Files:
37 mdstring = GetFileMD(prevFlags.Input.Files).
get(
"SimBarcodeOffset",
"0")
38 simBarcodeOffset = eval(mdstring)
39 if not simBarcodeOffset:
40 simBarcodeOffset = _barcodeOffsetFromTruthStrategy(prevFlags)
41 return simBarcodeOffset
43 def _regenerationIncrementFromTruthStrategy(prevFlags):
44 if prevFlags.Sim.TruthStrategy
in [TruthStrategy.MC15, TruthStrategy.MC18, TruthStrategy.MC18LLP]:
48 def _checkRegenerationIncrementConf(prevFlags):
50 if prevFlags.Input.Files:
51 mdstring = GetFileMD(prevFlags.Input.Files).
get(
"RegenerationIncrement",
"0")
52 regenInc = eval(mdstring)
54 regenInc = _regenerationIncrementFromTruthStrategy(prevFlags)
58 scf.addFlag(
"Sim.SimBarcodeOffset", _checkSimBarcodeOffsetConf)
60 scf.addFlag(
"Sim.RegenerationIncrement", _checkRegenerationIncrementConf)
63 scf.addFlag(
"Sim.TwissFileBeam1",
False)
64 scf.addFlag(
"Sim.TwissFileBeam2",
False)
65 scf.addFlag(
"Sim.TwissEnergy",
lambda prevFlags : float(prevFlags.Beam.Energy))
66 scf.addFlag(
"Sim.TwissFileBeta", 90.*m)
67 scf.addFlag(
"Sim.TwissFileNomReal",
'nominal')
68 scf.addFlag(
"Sim.TwissFileVersion",
"v02")
71 scf.addFlag(
"Sim.ReleaseGeoModel",
False)
72 scf.addFlag(
"Sim.SimplifiedGeoPath",
"")
73 scf.addFlag(
"Sim.RecordFlux",
False)
74 scf.addFlag(
"Sim.TruthStrategy",
lambda prevFlags : TruthStrategy.Validation
if prevFlags.Sim.ISF.ValidationMode
else TruthStrategy.MC12,
76 scf.addFlag(
"Sim.UseShadowEvent",
lambda prevFlags : prevFlags.Sim.ISF.Simulator.isQuasiStable())
77 scf.addFlag(
"Sim.G4Commands", [
"/run/verbose 2"])
78 scf.addFlag(
"Sim.FlagAbortedEvents",
False)
79 scf.addFlag(
"Sim.KillAbortedEvents",
True)
80 scf.addFlag(
"Sim.IncludeParentsInG4Event",
False)
81 scf.addFlag(
"Sim.UseG4Workers",
False)
84 scf.addFlag(
"Sim.DoFullChain",
False)
86 def _check_G4_version(prevFlags):
95 from AthenaConfiguration.Enums
import ProductionStep
96 if prevFlags.Common.ProductionStep
not in [ProductionStep.Simulation, ProductionStep.FastChain]:
97 if prevFlags.Input.Files:
98 version = GetFileMD(prevFlags.Input.Files).
get(
"G4Version",
"")
100 from os
import environ
101 version = str(environ.get(
"G4VERS",
""))
102 if prevFlags.Input.isMC
and isGaudiEnv()
and not version:
103 raise ValueError(
"Unknown G4 version")
106 scf.addFlag(
"Sim.G4Version", _check_G4_version)
108 def _checkPhysicsListConf(prevFlags):
109 physicsList =
"FTFP_BERT_ATL"
110 if prevFlags.Input.Files:
111 physicsList = GetFileMD(prevFlags.Input.Files).
get(
"PhysicsList",
"")
114 physicsList = GetFileMD(prevFlags.Input.Files).
get(
"physicsList",
"FTFP_BERT_ATL")
117 scf.addFlag(
"Sim.PhysicsList", _checkPhysicsListConf)
118 scf.addFlag(
"Sim.NeutronTimeCut", 150.)
119 scf.addFlag(
"Sim.NeutronEnergyCut", -1.)
120 scf.addFlag(
"Sim.ApplyEMCuts",
False)
121 scf.addFlag(
"Sim.MuonFieldOnlyInCalo",
False)
124 scf.addFlag(
"Sim.RecordStepInfo",
False)
125 scf.addFlag(
"Sim.StoppedParticleFile",
"")
126 scf.addFlag(
"Sim.BeamPipeSimMode", BeamPipeSimMode.Normal, type=BeamPipeSimMode)
127 scf.addFlag(
"Sim.LArParameterization", LArParameterization.NoFrozenShowers, type=LArParameterization)
128 scf.addFlag(
"Sim.InDetParameterization", InDetParameterization.NONE, type=InDetParameterization)
130 scf.addFlag(
"Sim.TRTRangeCut",
131 lambda prevFlags: float(GetFileMD(prevFlags.Input.Files).
get(
'TRTRangeCut', 30.0)))
134 scf.addFlag(
"Sim.VertexSource", VertexSource.CondDB, type=VertexSource)
135 scf.addFlag(
"Sim.VertexTimeSmearing",
lambda prevFlags:
136 prevFlags.Beam.Type == BeamType.Collisions
and prevFlags.GeoModel.Run >= LHCPeriod.Run4)
138 def _checkVertexTimeWidth(prevFlags):
140 vertexTimeWidth = default
141 if prevFlags.Input.Files:
142 vertexTimeWidth = GetFileMD(prevFlags.Input.Files).
get(
"VertexTimeWidth", default)
143 return vertexTimeWidth
145 scf.addFlag(
"Sim.VertexTimeWidth", _checkVertexTimeWidth)
148 scf.addFlag(
"Sim.NRRThreshold",
False)
149 scf.addFlag(
"Sim.NRRWeight",
False)
150 scf.addFlag(
"Sim.PRRThreshold",
False)
151 scf.addFlag(
"Sim.PRRWeight",
False)
152 scf.addFlag(
"Sim.OptionalUserActionList", [])
155 scf.addFlag(
"Sim.G4Stepper",
"AtlasRK4")
156 scf.addFlag(
"Sim.G4EquationOfMotion",
"")
157 scf.addFlag(
"Sim.UsingGeant4",
True)
162 scf.addFlag(
"Sim.CosmicFilterVolumeNames", [
"InnerDetector"])
163 scf.addFlag(
"Sim.CosmicFilterID",
False)
164 scf.addFlag(
"Sim.CosmicFilterPTmin",
False)
165 scf.addFlag(
"Sim.CosmicFilterPTmax",
False)
166 scf.addFlag(
"Sim.CosmicPtSlice",
"Off")
169 scf.addFlag(
"Sim.ISFRun",
False)
171 def _checkSimulationFlavour(prevFlags):
172 simulator = SimulationFlavour.Unknown
173 if prevFlags.Input.Files:
174 simFlavour = GetFileMD(prevFlags.Input.Files).
get(
"Simulator",
"")
176 simFlavour = GetFileMD(prevFlags.Input.Files).
get(
"SimulationFlavour",
"")
178 simulator = SimulationFlavour(simFlavour)
181 if simFlavour
in [
'default']:
182 simulator = SimulationFlavour.AtlasG4
183 elif simFlavour
in [
'MC12G4',
'FullG4']:
184 simulator = SimulationFlavour.FullG4MT
185 elif simFlavour
in [
'FullG4_QS',
'FullG4_LongLived']:
186 simulator = SimulationFlavour.FullG4MT_QS
187 elif simFlavour
in [
'PassBackG4']:
188 simulator = SimulationFlavour.PassBackG4MT
189 elif simFlavour
in [
'ATLFASTII']:
190 simulator = SimulationFlavour.ATLFASTIIMT
191 elif simFlavour
in [
'ATLFASTIIF']:
192 simulator = SimulationFlavour.ATLFASTIIFMT
193 elif simFlavour
in [
'ATLFAST3']:
194 simulator = SimulationFlavour.ATLFAST3MT
195 elif simFlavour
in [
'ATLFAST3_QS']:
196 simulator = SimulationFlavour.ATLFAST3MT_QS
199 simulator = SimulationFlavour.Unknown
202 scf.addFlag(
"Sim.ISF.Simulator", _checkSimulationFlavour, type=SimulationFlavour)
203 scf.addFlag(
"Sim.ISF.DoTimeMonitoring",
True)
204 scf.addFlag(
"Sim.ISF.DoMemoryMonitoring",
True)
205 scf.addFlag(
"Sim.ISF.ValidationMode",
False)
206 scf.addFlag(
"Sim.ISF.ReSimulation",
False)
207 scf.addFlag(
"Sim.ISF.UseTrackingGeometryCond",
False)
209 def _decideHITSMerging(prevFlags):
211 if prevFlags.Sim.ISF.Simulator.isFullSim()
and prevFlags.Sim.LArParameterization!=LArParameterization.FastCaloSim:
216 elif prevFlags.Sim.ISF.Simulator.usesFatras()
and prevFlags.Sim.ISF.Simulator.usesFastCaloSim():
221 elif prevFlags.Sim.ISF.Simulator.usesFastCaloSim()
or prevFlags.Sim.LArParameterization
is LArParameterization.FastCaloSim:
226 elif prevFlags.Sim.ISF.Simulator
in [SimulationFlavour.Unknown]:
232 raise ValueError(
"Invalid simulator")
233 return {
"ID": doID,
"CALO": doCALO,
"MUON": doMUON,
"ITk": doITk}
235 scf.addFlag(
"Sim.ISF.HITSMergingRequired", _decideHITSMerging)
238 scf.addFlag(
"Sim.FastCalo.ParamsInputFilename",
"FastCaloSim/MC23/TFCSparam_AF3_MC23_Sep23.root")
239 scf.addFlag(
"Sim.FastCalo.RunOnGPU",
False)
240 scf.addFlag(
"Sim.FastCalo.CaloCellsName",
"AllCalo")
241 scf.addFlag(
"Sim.FastCalo.doPunchThrough",
lambda prevFlags:
242 prevFlags.Sim.LArParameterization
is LArParameterization.FastCaloSim)
246 scf.addFlag(
"Sim.FastChain.BCID", [1])
248 scf.addFlag(
"Sim.FastChain.PUWeights_lar_em", [1.0])
249 scf.addFlag(
"Sim.FastChain.PUWeights_lar_hec", [1.0])
250 scf.addFlag(
"Sim.FastChain.PUWeights_lar_bapre", [1.0])
251 scf.addFlag(
"Sim.FastChain.PUWeights_tile", [1.0])
254 scf.addFlag(
"Sim.Fatras.RandomStreamName",
"FatrasRnd")
255 scf.addFlag(
"Sim.Fatras.G4RandomStreamName",
"FatrasG4")
256 scf.addFlag(
"Sim.Fatras.TrkExRandomStreamName",
"TrkExRnd")
258 scf.addFlag(
"Sim.Fatras.MomCutOffSec", 50.)
259 scf.addFlag(
"Sim.Fatras.HadronIntProb", 1.)
260 scf.addFlag(
"Sim.Fatras.GaussianMixtureModel",
True)
261 scf.addFlag(
"Sim.Fatras.BetheHeitlerScale", 1.)
263 scf.addFlag(
"Sim.BeamPipeCut", 100.0)
264 scf.addFlag(
"Sim.TightMuonStepping",
False)
266 scf.addFlag(
'Sim.GenerationConfiguration',
'NONE')