ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
SimulationConfig
python
SimulationMetadata.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3
from
AthenaCommon.Logging
import
logging
4
from
AthenaConfiguration.Enums
import
FlagEnum, ProductionStep
5
from
AthenaKernel.EventIdOverrideConfig
import
getMinMaxRunNumbers
6
from
SimulationConfig.SimEnums
import
InDetParameterization
7
8
folderName =
"/Simulation/Parameters"
9
10
11
def
collectSimulationMetadata
(flags):
12
"""Collect simulation metadata parameters as a dictionary"""
13
simMDlog = logging.getLogger(
'Sim_Metadata'
)
14
params = {}
15
16
#add all flags to the metadata
17
#todo - only add certain ones?
18
#in future this should be a ConfigFlags method...?
19
for
flag
in
sorted(flags._flagdict):
#only sim
20
if
flag.startswith(
"Sim."
):
21
if
"GenerationConfiguration"
in
flag:
22
# This flag is only temporarily defined in the SimConfigFlags module
23
continue
24
if
"Twiss"
in
flag
and
not
flags.Detector.GeometryForward:
25
# The various Twiss flags should only be written out when Forward Detector simulation is enabled
26
continue
27
if
"UseShadowEvent"
in
flag
and
not
flags.Sim.UseShadowEvent:
28
# This flag is added temporarily to allow a new approach to quasi-stable particle simulation to be tested.
29
continue
30
if
"VertexTimeWidth"
in
flag
and
not
flags.Sim.VertexTimeSmearing:
31
# This flag is only written to metadata when vertex time smearing is enabled
32
continue
33
if
"RunOnGPU"
in
flag
and
not
flags.Sim.ISF.Simulator.usesFastCaloSim():
34
# This flag is only written to metadata when FastCaloSim/FastCaloGAN is enabled
35
continue
36
if
"FastCalo.ParamsInputFilename"
in
flag
and
not
flags.Sim.ISF.Simulator.usesFastCaloSim():
37
# This flag is only written to metadata when FastCaloSim/FastCaloGAN is enabled
38
continue
39
if
"InDetParameterization"
in
flag
and
flags.Sim.InDetParameterization
is
not
InDetParameterization.FatrasG4:
40
# This flag is only written to metadata when FatrasG4 is enabled
41
continue
42
if
"InDetParameterization"
in
flag
and
flags.Sim.InDetParameterization
is
not
InDetParameterization.AFatrasG4:
43
# This flag is only written to metadata when AFatrasG4 is enabled
44
continue
45
if
"ActsFatrasG4.DebugInjectParticle"
in
flag
and
not
flags.Sim.ActsFatrasG4.DebugInjectParticle:
46
# This flag is only written to metadata when DebugInjectParticle is enabled
47
continue
48
if
"SimplifiedGeoPath"
in
flag
and
not
flags.Sim.SimplifiedGeoPath:
49
# This flag is only written to metadata in case the FastCaloSim simplified geometry path is set
50
continue
51
if
"FastCalo.doPunchThrough"
in
flag
and
not
flags.Sim.FastCalo.doPunchThrough:
52
# This flag is only written to metadata in case PunchThroughG4Tool is set
53
continue
54
if
"UseG4Workers"
in
flag:
55
# This flag is still experimental, and should not be recorded in metadata yet
56
continue
57
58
key = flag.split(
"."
)[-1]
#use final part of flag as the key
59
value = flags[flag]
60
if
isinstance(value, FlagEnum):
61
value = value.value
62
if
not
isinstance(value, str):
63
value = str(value)
64
params[key] = value
65
simMDlog.info(
'SimulationMetaData: setting "%s" to be %s'
, key, value)
66
67
params[
'G4Version'
] = flags.Sim.G4Version
68
params[
'RunType'
] =
'atlas'
69
params[
'beamType'
] = flags.Beam.Type.value
70
params[
'SimLayout'
] = flags.GeoModel.AtlasVersion
71
params[
'MagneticField'
] =
'AtlasFieldSvc'
# TODO hard-coded for now for consistency with old-style configuration.
72
73
#---------
74
75
from
AthenaConfiguration.DetectorConfigFlags
import
getEnabledDetectors
76
simDets = [
'Truth'
] + getEnabledDetectors(flags)
77
simMDlog.info(
"Setting 'SimulatedDetectors' = %r"
, simDets)
78
params[
'SimulatedDetectors'
] = repr(simDets)
79
80
81
params[
'hitFileMagicNumber'
] =
'0'
82
83
if
flags.Sim.ISFRun:
84
params[
'Simulator'
] = flags.Sim.ISF.Simulator.value
85
params[
'SimulationFlavour'
] = flags.Sim.ISF.Simulator.value.replace(
'MT'
,
''
)
# used by egamma
86
else
:
87
# TODO hard-code for now, but set flag properly later
88
params[
'Simulator'
] =
'AtlasG4'
89
params[
'SimulationFlavour'
] =
'AtlasG4'
90
91
92
if
flags.Common.isOverlay
and
flags.Overlay.DataOverlay:
93
params[
'IsDataOverlay'
] =
'True'
94
95
return
params
96
97
98
def
fillAtlasMetadata
(flags, dbFiller):
99
"""Fill ParameterDbFiller with simulation metadata (sqlite mode interface)"""
100
params =
collectSimulationMetadata
(flags)
101
for
key, value
in
params.items():
102
dbFiller.addSimParam(key, value)
103
104
105
def
writeSimulationParametersMetadata
(flags):
106
simMDlog = logging.getLogger(
'Sim_Metadata'
)
107
myRunNumber, myEndRunNumber = getMinMaxRunNumbers(flags)
108
simMDlog.debug(
'Metadata BeginRun = %s'
, str(myRunNumber))
109
simMDlog.debug(
'Metadata EndRun = %s'
, str(myEndRunNumber))
110
111
if
flags.IOVDb.WriteParametersAsMetaData:
112
# Direct in-file metadata mode: bypass intermediate sqlite files
113
from
IOVDbMetaDataTools.ParameterWriterConfig
import
writeParametersToMetaData
114
simMDlog.info(
'Writing simulation parameters directly to in-file metadata (bypassing SimParams.db)'
)
115
params =
collectSimulationMetadata
(flags)
116
return
writeParametersToMetaData(flags, folderName, params, myRunNumber, myEndRunNumber)
117
else
:
118
# Sqlite mode: write to SimParams.db intermediate file
119
from
IOVDbMetaDataTools
import
ParameterDbFiller
120
simMDlog.info(
'Writing simulation parameters to intermediate sqlite file (SimParams.db)'
)
121
dbFiller =
ParameterDbFiller.ParameterDbFiller
()
122
dbFiller.setBeginRun(myRunNumber)
123
dbFiller.setEndRun(myEndRunNumber)
124
125
fillAtlasMetadata
(flags, dbFiller)
126
127
#-------------------------------------------------
128
# Make the MetaData Db
129
#-------------------------------------------------
130
dbFiller.genSimDb()
131
132
return
writeSimulationParameters
(flags)
133
134
135
def
readSimulationParameters
(flags):
136
"""Read simulation parameters metadata"""
137
from
AthenaConfiguration.ComponentAccumulator
import
ComponentAccumulator
138
from
IOVDbSvc.IOVDbSvcConfig
import
addFolders
139
140
# Direct in-file metadata mode: IOVDbMetaDataTool populates ConditionStore from file metadata
141
# Exception: In overlay mode, always use IOVDbSvc since input files may not have parameters in metadata
142
if
flags.IOVDb.WriteParametersAsMetaData
and
not
flags.Common.isOverlay:
143
return
ComponentAccumulator()
144
145
# Sqlite mode: use IOVDbSvc to read and populate ConditionStore
146
if
flags.Common.ProductionStep
in
[ProductionStep.Simulation, ProductionStep.FastChain]:
147
# Reading from intermediate sqlite file SimParams.db (during simulation job)
148
return
addFolders(flags, folderName, detDb=
"SimParams.db"
, db=
"SIMPARAM"
, className=
"AthenaAttributeList"
)
149
else
:
150
# Reading from input file metadata via IOVDbSvc
151
return
addFolders(flags, folderName, className=
"AthenaAttributeList"
, tag=
"HEAD"
)
152
153
154
def
writeSimulationParameters
(flags):
155
"""Write digitization parameters metadata"""
156
from
IOVDbSvc.IOVDbSvcConfig
import
IOVDbSvcCfg, addFolders
157
acc = IOVDbSvcCfg(flags, FoldersToMetaData=(folderName,))
158
acc.merge(addFolders(flags, folderName, detDb=
"SimParams.db"
, db=
"SIMPARAM"
))
159
return
acc
python.ParameterDbFiller.ParameterDbFiller
Definition
ParameterDbFiller.py:25
python.SimulationMetadata.fillAtlasMetadata
fillAtlasMetadata(flags, dbFiller)
Definition
SimulationMetadata.py:98
python.SimulationMetadata.writeSimulationParametersMetadata
writeSimulationParametersMetadata(flags)
Definition
SimulationMetadata.py:105
python.SimulationMetadata.readSimulationParameters
readSimulationParameters(flags)
Definition
SimulationMetadata.py:135
python.SimulationMetadata.collectSimulationMetadata
collectSimulationMetadata(flags)
Definition
SimulationMetadata.py:11
python.SimulationMetadata.writeSimulationParameters
writeSimulationParameters(flags)
Definition
SimulationMetadata.py:154
Generated on
for ATLAS Offline Software by
1.17.0