ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
Digitization
DigitizationConfig
python
DigitizationParametersConfig.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.ComponentAccumulator
import
ComponentAccumulator
5
from
AthenaConfiguration.Enums
import
FlagEnum
6
from
AthenaKernel.EventIdOverrideConfig
import
getMinMaxRunNumbers
7
8
folderName =
"/Digitization/Parameters"
9
10
11
def
collectDigitizationMetadata
(flags):
12
"""Collect digitization metadata parameters as a dictionary"""
13
logDigitizationWriteMetadata = logging.getLogger(
'DigitizationParametersConfig'
)
14
params = {}
15
16
#-------------------------------------------------
17
# Adding jobproperties to the list of MetaData
18
#-------------------------------------------------
19
# Here list the digitization jobproperties we want to write out as MetaData.
20
digitMetaDataKeys = {
'doInDetNoise'
:
'Digitization.DoInnerDetectorNoise'
,
21
'doCaloNoise'
:
'Digitization.DoCaloNoise'
,
22
'bunchSpacing'
:
'Beam.BunchSpacing'
,
23
'beamType'
:
'Beam.Type'
,
24
'IOVDbGlobalTag'
:
'IOVDb.GlobalTag'
,
25
'DetDescrVersion'
:
'GeoModel.AtlasVersion'
,
26
'finalBunchCrossing'
:
'Digitization.PU.FinalBunchCrossing'
,
27
'initialBunchCrossing'
:
'Digitization.PU.InitialBunchCrossing'
,
28
'physicsList'
:
'Sim.PhysicsList'
,
#TODO migrate clients to use /Simulation/Parameters metadata?
29
'digiSteeringConf'
:
'Digitization.DigiSteeringConf'
,
30
'pileUp'
:
'Digitization.PileUp'
,
31
}
32
logDigitizationWriteMetadata.info(
'Filling Digitization MetaData'
)
33
for
testKey, testFlag
in
digitMetaDataKeys.items():
34
if
flags.hasFlag(testFlag):
35
testValue = flags._get(testFlag)
36
if
isinstance(testValue, FlagEnum):
37
testValue = testValue.value
38
if
not
isinstance(testValue, str):
39
testValue = str(testValue)
40
params[testKey] = testValue
41
logDigitizationWriteMetadata.info(
'DigitizationMetaData: setting "%s" to be %s'
, testKey, testValue)
42
else
:
43
logDigitizationWriteMetadata.debug(
'DigitizationMetaData: ConfigFlags.%s is not available.'
, testFlag)
44
45
# doMuonNoise no actual flag in new-style
46
testKey =
"doMuonNoise"
47
testValue = str(
not
flags.Common.isOverlay)
# Hardcoded for now
48
params[testKey] = testValue
49
logDigitizationWriteMetadata.info(
'DigitizationMetaData: setting "%s" to be %s'
, testKey, testValue)
50
51
# Bunch Structure - hardcoded for now
52
testKey =
"BeamIntensityPattern"
53
if
flags.Digitization.PileUp:
54
testValue = str(flags.Digitization.PU.BeamIntensityPattern)
55
else
:
56
testValue =
"None"
57
logDigitizationWriteMetadata.info(
'DigitizationMetaData: setting "%s" to be %s'
, testKey, testValue)
58
params[testKey] = testValue
59
60
# intraTrainBunchSpacing - hardcoded for now
61
testKey =
"intraTrainBunchSpacing"
62
testValue = str(25)
# This should be either be determined from the BeamIntensityPattern or set as flags.Beam.BunchSpacing
63
params[testKey] = testValue
64
logDigitizationWriteMetadata.info(
'DigitizationMetaData: setting "%s" to be %s'
, testKey, testValue)
65
66
67
from
AthenaConfiguration.DetectorConfigFlags
import
getEnabledDetectors
68
digiDets = [
'Truth'
] + getEnabledDetectors(flags)
69
logDigitizationWriteMetadata.info(
"Setting 'DigitizedDetectors' = %s"
, repr(digiDets))
70
params[
'DigitizedDetectors'
] = repr(digiDets)
71
72
return
params
73
74
75
def
writeDigitizationMetadata
(flags):
76
myRunNumber, myEndRunNumber = getMinMaxRunNumbers(flags)
77
logDigitizationWriteMetadata = logging.getLogger(
'DigitizationParametersConfig'
)
78
logDigitizationWriteMetadata.debug(
'Metadata BeginRun = %s'
, str(myRunNumber))
79
logDigitizationWriteMetadata.debug(
'Metadata EndRun = %s'
, str(myEndRunNumber))
80
81
if
flags.IOVDb.WriteParametersAsMetaData:
82
# Direct in-file metadata mode: bypass intermediate sqlite files
83
from
IOVDbMetaDataTools.ParameterWriterConfig
import
writeParametersToMetaData
84
logDigitizationWriteMetadata.info(
'Writing digitization parameters directly to in-file metadata (bypassing DigitParams.db)'
)
85
params =
collectDigitizationMetadata
(flags)
86
return
writeParametersToMetaData(flags, folderName, params, myRunNumber, myEndRunNumber)
87
else
:
88
# Sqlite mode: write to DigitParams.db intermediate file
89
from
IOVDbMetaDataTools
import
ParameterDbFiller
90
logDigitizationWriteMetadata.info(
'Writing digitization parameters to intermediate sqlite file (DigitParams.db)'
)
91
dbFiller =
ParameterDbFiller.ParameterDbFiller
()
92
dbFiller.setBeginRun(myRunNumber)
93
dbFiller.setEndRun(myEndRunNumber)
94
95
# Collect parameters and write to dbFiller
96
params =
collectDigitizationMetadata
(flags)
97
for
key, value
in
params.items():
98
# Handle the special case of BeamIntensityPattern which uses addDigitParam64
99
if
key ==
"BeamIntensityPattern"
:
100
dbFiller.addDigitParam64(key, value)
101
else
:
102
dbFiller.addDigitParam(key, value)
103
104
dbFiller.genDigitDb()
105
return
writeDigitizationParameters
(flags)
106
107
108
def
readDigitizationParameters
(flags):
109
"""Read digitization parameters metadata"""
110
from
IOVDbSvc.IOVDbSvcConfig
import
addFolders
111
112
# Direct in-file metadata mode: use MetaDataToCondAlg to read from MetaDataStore
113
# and populate ConditionStore during event processing.
114
# This is required because IOVDbMetaDataTool.Payloads cannot populate ConditionStore
115
# during initialize() (no valid EventContext at that time).
116
if
flags.IOVDb.WriteParametersAsMetaData:
117
from
IOVDbMetaDataTools.MetaDataToCondAlgConfig
import
MetaDataToCondAlgCfg
118
return
MetaDataToCondAlgCfg(flags, folderName)
119
120
# Sqlite mode: use IOVDbSvc to read and populate ConditionStore
121
if
flags.Digitization.ReadParametersFromDB:
122
# Reading from intermediate sqlite file DigitParams.db (during digitization job)
123
return
addFolders(flags, folderName, detDb=
"DigitParams.db"
, db=
"DIGPARAM"
, className=
"AthenaAttributeList"
)
124
else
:
125
# Reading from input file metadata via IOVDbSvc
126
return
addFolders(flags, folderName, className=
"AthenaAttributeList"
, tag=
"HEAD"
)
127
128
129
def
writeDigitizationParameters
(flags):
130
"""Write digitization parameters metadata (sqlite mode only)"""
131
if
flags.Overlay.DataOverlay:
132
return
ComponentAccumulator()
133
134
from
IOVDbSvc.IOVDbSvcConfig
import
IOVDbSvcCfg, addFolders
135
acc = IOVDbSvcCfg(flags, FoldersToMetaData=(folderName,))
136
# Note: addFolders only needed in sqlite mode since direct mode handles it in ParameterMetaDataWriterCfg
137
acc.merge(addFolders(flags, folderName, detDb=
"DigitParams.db"
, db=
"DIGPARAM"
))
138
return
acc
python.ParameterDbFiller.ParameterDbFiller
Definition
ParameterDbFiller.py:25
python.DigitizationParametersConfig.collectDigitizationMetadata
collectDigitizationMetadata(flags)
Definition
DigitizationParametersConfig.py:11
python.DigitizationParametersConfig.readDigitizationParameters
readDigitizationParameters(flags)
Definition
DigitizationParametersConfig.py:108
python.DigitizationParametersConfig.writeDigitizationMetadata
writeDigitizationMetadata(flags)
Definition
DigitizationParametersConfig.py:75
python.DigitizationParametersConfig.writeDigitizationParameters
writeDigitizationParameters(flags)
Definition
DigitizationParametersConfig.py:129
Generated on
for ATLAS Offline Software by
1.17.0