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)
129 scf.addFlag(
"Sim.TRTRangeCut",
130 lambda prevFlags: float(GetFileMD(prevFlags.Input.Files).
get(
'TRTRangeCut', 30.0)))
133 scf.addFlag(
"Sim.VertexSource", VertexSource.CondDB, type=VertexSource)
134 scf.addFlag(
"Sim.VertexTimeSmearing",
lambda prevFlags:
135 prevFlags.Beam.Type == BeamType.Collisions
and prevFlags.GeoModel.Run >= LHCPeriod.Run4)
137 def _checkVertexTimeWidth(prevFlags):
139 vertexTimeWidth = default
140 if prevFlags.Input.Files:
141 vertexTimeWidth = GetFileMD(prevFlags.Input.Files).
get(
"VertexTimeWidth", default)
142 return vertexTimeWidth
144 scf.addFlag(
"Sim.VertexTimeWidth", _checkVertexTimeWidth)
147 scf.addFlag(
"Sim.NRRThreshold",
False)
148 scf.addFlag(
"Sim.NRRWeight",
False)
149 scf.addFlag(
"Sim.PRRThreshold",
False)
150 scf.addFlag(
"Sim.PRRWeight",
False)
151 scf.addFlag(
"Sim.OptionalUserActionList", [])
154 scf.addFlag(
"Sim.G4Stepper",
"AtlasRK4")
155 scf.addFlag(
"Sim.G4EquationOfMotion",
"")
156 scf.addFlag(
"Sim.UsingGeant4",
True)
161 scf.addFlag(
"Sim.CosmicFilterVolumeNames", [
"InnerDetector"])
162 scf.addFlag(
"Sim.CosmicFilterID",
False)
163 scf.addFlag(
"Sim.CosmicFilterPTmin",
False)
164 scf.addFlag(
"Sim.CosmicFilterPTmax",
False)
165 scf.addFlag(
"Sim.CosmicPtSlice",
"Off")
168 scf.addFlag(
"Sim.ISFRun",
False)
170 def _checkSimulationFlavour(prevFlags):
171 simulator = SimulationFlavour.Unknown
172 if prevFlags.Input.Files:
173 simFlavour = GetFileMD(prevFlags.Input.Files).
get(
"Simulator",
"")
175 simFlavour = GetFileMD(prevFlags.Input.Files).
get(
"SimulationFlavour",
"")
177 simulator = SimulationFlavour(simFlavour)
180 if simFlavour
in [
'default']:
181 simulator = SimulationFlavour.AtlasG4
182 elif simFlavour
in [
'MC12G4',
'FullG4']:
183 simulator = SimulationFlavour.FullG4MT
184 elif simFlavour
in [
'FullG4_QS',
'FullG4_LongLived']:
185 simulator = SimulationFlavour.FullG4MT_QS
186 elif simFlavour
in [
'PassBackG4']:
187 simulator = SimulationFlavour.PassBackG4MT
188 elif simFlavour
in [
'ATLFASTII']:
189 simulator = SimulationFlavour.ATLFASTIIMT
190 elif simFlavour
in [
'ATLFASTIIF']:
191 simulator = SimulationFlavour.ATLFASTIIFMT
192 elif simFlavour
in [
'ATLFAST3']:
193 simulator = SimulationFlavour.ATLFAST3MT
194 elif simFlavour
in [
'ATLFAST3_QS']:
195 simulator = SimulationFlavour.ATLFAST3MT_QS
198 simulator = SimulationFlavour.Unknown
201 scf.addFlag(
"Sim.ISF.Simulator", _checkSimulationFlavour, type=SimulationFlavour)
202 scf.addFlag(
"Sim.ISF.DoTimeMonitoring",
True)
203 scf.addFlag(
"Sim.ISF.DoMemoryMonitoring",
True)
204 scf.addFlag(
"Sim.ISF.ValidationMode",
False)
205 scf.addFlag(
"Sim.ISF.ReSimulation",
False)
206 scf.addFlag(
"Sim.ISF.UseTrackingGeometryCond",
False)
208 def _decideHITSMerging(prevFlags):
210 if prevFlags.Sim.ISF.Simulator.isFullSim()
and prevFlags.Sim.LArParameterization!=LArParameterization.FastCaloSim:
215 elif prevFlags.Sim.ISF.Simulator.usesFatras()
and prevFlags.Sim.ISF.Simulator.usesFastCaloSim():
220 elif prevFlags.Sim.ISF.Simulator.usesFastCaloSim()
or prevFlags.Sim.LArParameterization
is LArParameterization.FastCaloSim:
225 elif prevFlags.Sim.ISF.Simulator
in [SimulationFlavour.Unknown]:
231 raise ValueError(
"Invalid simulator")
232 return {
"ID": doID,
"CALO": doCALO,
"MUON": doMUON,
"ITk": doITk}
234 scf.addFlag(
"Sim.ISF.HITSMergingRequired", _decideHITSMerging)
237 scf.addFlag(
"Sim.FastCalo.ParamsInputFilename",
"FastCaloSim/MC23/TFCSparam_AF3_MC23_Sep23.root")
238 scf.addFlag(
"Sim.FastCalo.RunOnGPU",
False)
239 scf.addFlag(
"Sim.FastCalo.CaloCellsName",
"AllCalo")
240 scf.addFlag(
"Sim.FastCalo.doPunchThrough",
lambda prevFlags:
241 prevFlags.Sim.LArParameterization
is LArParameterization.FastCaloSim)
245 scf.addFlag(
"Sim.FastChain.BCID", [1])
247 scf.addFlag(
"Sim.FastChain.PUWeights_lar_em", [1.0])
248 scf.addFlag(
"Sim.FastChain.PUWeights_lar_hec", [1.0])
249 scf.addFlag(
"Sim.FastChain.PUWeights_lar_bapre", [1.0])
250 scf.addFlag(
"Sim.FastChain.PUWeights_tile", [1.0])
253 scf.addFlag(
"Sim.Fatras.RandomStreamName",
"FatrasRnd")
254 scf.addFlag(
"Sim.Fatras.G4RandomStreamName",
"FatrasG4")
255 scf.addFlag(
"Sim.Fatras.TrkExRandomStreamName",
"TrkExRnd")
257 scf.addFlag(
"Sim.Fatras.MomCutOffSec", 50.)
258 scf.addFlag(
"Sim.Fatras.HadronIntProb", 1.)
259 scf.addFlag(
"Sim.Fatras.GaussianMixtureModel",
True)
260 scf.addFlag(
"Sim.Fatras.BetheHeitlerScale", 1.)
262 scf.addFlag(
"Sim.BeamPipeCut", 100.0)
263 scf.addFlag(
"Sim.TightMuonStepping",
False)
265 scf.addFlag(
'Sim.GenerationConfiguration',
'NONE')