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.MultipleStepsInMSCTransport",
False)
153 scf.addFlag(
"Sim.OptionalUserActionList", [])
156 scf.addFlag(
"Sim.G4Stepper",
"AtlasRK4")
157 scf.addFlag(
"Sim.G4EquationOfMotion",
"")
158 scf.addFlag(
"Sim.UsingGeant4",
True)
163 scf.addFlag(
"Sim.CosmicFilterVolumeNames", [
"InnerDetector"])
164 scf.addFlag(
"Sim.CosmicFilterID",
False)
165 scf.addFlag(
"Sim.CosmicFilterPTmin",
False)
166 scf.addFlag(
"Sim.CosmicFilterPTmax",
False)
167 scf.addFlag(
"Sim.CosmicPtSlice",
"Off")
170 scf.addFlag(
"Sim.ISFRun",
False)
172 def _checkSimulationFlavour(prevFlags):
173 simulator = SimulationFlavour.Unknown
174 if prevFlags.Input.Files:
175 simFlavour = GetFileMD(prevFlags.Input.Files).
get(
"Simulator",
"")
177 simFlavour = GetFileMD(prevFlags.Input.Files).
get(
"SimulationFlavour",
"")
179 simulator = SimulationFlavour(simFlavour)
182 if simFlavour
in [
'default']:
183 simulator = SimulationFlavour.AtlasG4
184 elif simFlavour
in [
'MC12G4',
'FullG4']:
185 simulator = SimulationFlavour.FullG4MT
186 elif simFlavour
in [
'FullG4_QS',
'FullG4_LongLived']:
187 simulator = SimulationFlavour.FullG4MT_QS
188 elif simFlavour
in [
'PassBackG4']:
189 simulator = SimulationFlavour.PassBackG4MT
190 elif simFlavour
in [
'ATLFASTII']:
191 simulator = SimulationFlavour.ATLFASTIIMT
192 elif simFlavour
in [
'ATLFASTIIF']:
193 simulator = SimulationFlavour.ATLFASTIIFMT
194 elif simFlavour
in [
'ATLFAST3']:
195 simulator = SimulationFlavour.ATLFAST3MT
196 elif simFlavour
in [
'ATLFAST3_QS']:
197 simulator = SimulationFlavour.ATLFAST3MT_QS
200 simulator = SimulationFlavour.Unknown
203 scf.addFlag(
"Sim.ISF.Simulator", _checkSimulationFlavour, type=SimulationFlavour)
204 scf.addFlag(
"Sim.ISF.DoTimeMonitoring",
True)
205 scf.addFlag(
"Sim.ISF.DoMemoryMonitoring",
True)
206 scf.addFlag(
"Sim.ISF.ValidationMode",
False)
207 scf.addFlag(
"Sim.ISF.ReSimulation",
False)
208 scf.addFlag(
"Sim.ISF.UseTrackingGeometryCond",
False)
210 def _decideHITSMerging(prevFlags):
212 if prevFlags.Sim.ISF.Simulator.isFullSim()
and prevFlags.Sim.LArParameterization!=LArParameterization.FastCaloSim:
217 elif prevFlags.Sim.ISF.Simulator.usesFatras()
and prevFlags.Sim.ISF.Simulator.usesFastCaloSim():
222 elif prevFlags.Sim.ISF.Simulator.usesFastCaloSim()
or prevFlags.Sim.LArParameterization
is LArParameterization.FastCaloSim:
227 elif prevFlags.Sim.ISF.Simulator
in [SimulationFlavour.Unknown]:
233 raise ValueError(
"Invalid simulator")
234 return {
"ID": doID,
"CALO": doCALO,
"MUON": doMUON,
"ITk": doITk}
236 scf.addFlag(
"Sim.ISF.HITSMergingRequired", _decideHITSMerging)
239 scf.addFlag(
"Sim.FastCalo.ParamsInputFilename",
"FastCaloSim/MC23/TFCSparam_AF3_MC23_Sep23.root")
240 scf.addFlag(
"Sim.FastCalo.RunOnGPU",
False)
241 scf.addFlag(
"Sim.FastCalo.CaloCellsName",
"AllCalo")
242 scf.addFlag(
"Sim.FastCalo.doPunchThrough",
lambda prevFlags:
243 prevFlags.Sim.LArParameterization
is LArParameterization.FastCaloSim)
247 scf.addFlag(
"Sim.FastChain.BCID", [1])
249 scf.addFlag(
"Sim.FastChain.PUWeights_lar_em", [1.0])
250 scf.addFlag(
"Sim.FastChain.PUWeights_lar_hec", [1.0])
251 scf.addFlag(
"Sim.FastChain.PUWeights_lar_bapre", [1.0])
252 scf.addFlag(
"Sim.FastChain.PUWeights_tile", [1.0])
255 scf.addFlag(
"Sim.Fatras.RandomStreamName",
"FatrasRnd")
256 scf.addFlag(
"Sim.Fatras.G4RandomStreamName",
"FatrasG4")
257 scf.addFlag(
"Sim.Fatras.TrkExRandomStreamName",
"TrkExRnd")
259 scf.addFlag(
"Sim.Fatras.MomCutOffSec", 50.)
260 scf.addFlag(
"Sim.Fatras.HadronIntProb", 1.)
261 scf.addFlag(
"Sim.Fatras.GaussianMixtureModel",
True)
262 scf.addFlag(
"Sim.Fatras.BetheHeitlerScale", 1.)
264 scf.addFlag(
"Sim.BeamPipeCut", 100.0)
265 scf.addFlag(
"Sim.TightMuonStepping",
False)
267 scf.addFlag(
'Sim.GenerationConfiguration',
'NONE')