5 from AthenaCommon.Logging
import logging
6 from AthenaConfiguration.AllConfigFlags
import GetFileMD
8 logger = logging.getLogger(
"OverlayMetadataConfig")
12 """Validate geometry tag so it is the same as target"""
13 target_layout = target.split(
'-')
14 value_layout = value.split(
'-')
15 if len(target_layout) != len(value_layout):
18 for p, s
in zip(target_layout[:-1], value_layout[:-1]):
19 if not re.match(p, s):
22 if not re.match(target_layout[-1], value_layout[-1]):
23 logger.warning(
"Simulation geometry tag mismatch! %s vs %s", target, value)
29 """Check the metadata for signal HITS or presampled pileup RDO file"""
30 logger.info(
"Checking Overlay configuration against Signal or presampled pileup RDO metadata...")
32 simKeys = simDict.keys()
33 tagInfoKeys = tagInfoDict.keys()
36 if "PhysicsList" in simKeys:
37 if re.match(simDict[
"PhysicsList"], flags.Sim.PhysicsList):
38 logger.debug(
"Overlay configuration matches Signal Simulation metadata. [Sim.PhysicsList = %s]", flags.Sim.PhysicsList)
40 flags.Sim.PhysicsList = simDict[
"PhysicsList"]
41 logger.warning(
"Overlay Sim.PhysicsList does not match the PhysicsList used in the Signal Simulation step! Assume the value from the Signal Simulation step is correct!")
42 logger.warning(
"Set Sim.PhysicsList = %s", flags.Sim.PhysicsList)
44 logger.error(
"'PhysicsList' key not found in Signal Simulation metadata!")
45 raise AssertionError(
"Signal Simulation metadata key not found")
48 if "SimLayout" in simKeys:
50 logger.debug(
"Overlay configuration matches Signal Simulation metadata. [Geomodel.AtlasVersion = %s]",
51 flags.GeoModel.AtlasVersion)
53 flags.GeoModel.AtlasVersion = simDict[
"SimLayout"]
54 logger.warning(
"Overlay Geomodel.AtlasVersion does not match the value used in the Signal Simulation step! Assume the value from the Signal Simulation step is correct!")
55 logger.warning(
"Set Geomodel.AtlasVersion = %s", flags.GeoModel.AtlasVersion)
57 logger.error(
"'SimLayout' key not found in Signal Simulation metadata!")
58 raise AssertionError(
"Signal Simulation metadata key not found")
61 if "IOVDbGlobalTag" in tagInfoKeys:
62 if not re.match(tagInfoDict[
"IOVDbGlobalTag"], flags.IOVDb.GlobalTag):
63 logger.debug(
"Overlay configuration: [IOVDb.GlobalTag = %s], Signal Simulation metadata: [IOVDb.GlobalTag = %s]",
64 flags.IOVDb.GlobalTag, tagInfoDict[
'IOVDbGlobalTag'])
66 logger.error(
"'IOVDbGlobalTag' key not found in Signal Simulation metadata!")
67 raise AssertionError(
"Signal Simulation metadata key not found")
70 if "TRTRangeCut" in simKeys:
71 if not re.match(simDict[
"TRTRangeCut"],
str(flags.Sim.TRTRangeCut)):
72 flags.Sim.TRTRangeCut = simDict[
"TRTRangeCut"]
73 logger.warning(
"Overlay Sim.TRTRangeCut does not match the value used in the Signal Simulation step! Assume the value from the Signal Simulation step is correct!")
74 logger.warning(
"Set Sim.TRTRangeCut = %s", flags.Sim.TRTRangeCut)
76 logger.warning(
"'TRTRangeCut' key not found in Signal Simulation metadata!")
81 logger.info(
"Completed checks of Overlay configuration against Signal Simulation metadata.")
85 """Check the simulation metadata for presampled pileup RDO file"""
86 sigkeys = sigdict.keys()
87 pukeys = pudict.keys()
90 warningKeys = [
'G4Version']
91 sigKeysToCheck = [
'PhysicsList',
'SimLayout',
'MagneticField',
'hitFileMagicNumber'] + warningKeys
92 for o
in sigKeysToCheck:
95 except AssertionError:
96 logger.error(
"%s key missing from Presampled pile-up Simulation metadata!", o)
97 raise AssertionError(
"Presampled pile-up Simulation metadata key not found")
100 except AssertionError:
101 logger.error(
"%s key missing from Signal Simulation metadata!", o)
102 raise AssertionError(
"Signal Simulation metadata key not found")
106 elif not isinstance(pudict[o],
type(sigdict[o])):
107 assert re.match(
str(pudict[o]),
str(sigdict[o]))
109 if isinstance(pudict[o], str):
110 assert re.match(pudict[o], sigdict[o])
111 elif isinstance(pudict[o], int):
112 assert (pudict[o] == sigdict[o])
114 assert re.match(
str(pudict[o]),
str(sigdict[o]))
115 except AssertionError:
117 logger.warning(
"Simulation metadata mismatch! Presampled pile-up: [%s = %s] Signal: [%s = %s]", o, pudict[o], o, sigdict[o])
119 logger.error(
"Simulation metadata mismatch! Presampled pile-up: [%s = %s] Signal: [%s = %s]", o, pudict[o], o, sigdict[o])
120 raise AssertionError(
"Simulation metadata mismatch")
124 """Check the tag info metadata for presampled pileup RDO File"""
125 sigkeys = sigdict.keys()
126 pukeys = pudict.keys()
128 logger.debug(
"Signal /TagInfo ", sigdict)
129 logger.debug(
"Pileup /TagInfo ", pudict)
132 sigOnlyKeySet =
set(sigkeys).difference(
set(pukeys))
133 logger.debug(
"The following keys only appear in Signal /TagInfo metadata:")
134 logger.debug(sigOnlyKeySet)
135 for key
in sigOnlyKeySet:
136 sigOnlyDict[key] = sigdict[key]
137 logger.debug(
" key: ", key,
"value: ", sigdict[key])
141 logger.debug(
"The following keys appear in Signal and Presampled pile-up /TagInfo metadata:")
142 logger.debug(keysToCompareSet)
145 warningKeys = [
'IOVDbGlobalTag']
146 sigKeysToCheck = warningKeys
147 for o
in sigKeysToCheck:
150 except AssertionError:
151 logger.error(
"%s key missing from Presampled pile-up Simulation metadata!", o)
152 raise AssertionError(
"Presampled pile-up Simulation metadata key not found")
155 except AssertionError:
156 logger.error(
"%s key missing from Signal Simulation metadata!", o)
157 raise AssertionError(
"Signal Simulation metadata key not found")
159 if not isinstance(pudict[o],
type(sigdict[o])):
160 assert re.match(
str(pudict[o]),
str(sigdict[o]))
162 if isinstance(pudict[o], str):
163 assert re.match(pudict[o], sigdict[o])
164 elif isinstance(pudict[o], int):
165 assert (pudict[o] == sigdict[o])
167 assert re.match(
str(pudict[o]),
str(sigdict[o]))
168 except AssertionError:
170 logger.warning(
"Simulation metadata mismatch! Presampled pile-up: [%s = %s] Signal: [%s = %s]", o, pudict[o], o, sigdict[o])
172 logger.error(
"Simulation metadata mismatch! Presampled pile-up: [%s = %s] Signal: [%s = %s]", o, pudict[o], o, sigdict[o])
173 raise AssertionError(
"Simulation metadata mismatch")
177 """Check overlay metadata"""
178 if flags.Overlay.ByteStream:
179 files = flags.Input.Files
180 filesPileup = flags.Input.SecondaryFiles
182 files = flags.Input.SecondaryFiles
183 filesPileup = flags.Input.Files
186 signalMetadata =
GetFileMD(files, maxLevel=
"full")
187 signalSimulationMetadata = signalMetadata.get(
"/Simulation/Parameters", {})
188 signalTagInfoMetadata = signalMetadata.get(
"/TagInfo", {})
194 logger.info(
"Simulation metadata check not done due to no inputs")
197 if not flags.Overlay.DataOverlay
and filesPileup:
198 pileupMetaDataCheck =
GetFileMD(filesPileup, maxLevel=
"full")
199 pileupDigitizationMetadata = pileupMetaDataCheck.get(
"/Digitization/Parameters", {})
200 pileupSimulationMetadata = pileupMetaDataCheck.get(
"/Simulation/Parameters", {})
201 pileupTagInfoMetadata = pileupMetaDataCheck.get(
"/TagInfo", {})
203 logger.info(
"Checking Presampled pile-up metadata against Signal Simulation metadata...")
206 logger.info(
"Completed all checks against Presampled pile-up Simulation metadata.")
208 if pileupDigitizationMetadata:
213 """Check fastchain overlay metadata"""
214 if flags.Overlay.ByteStream:
215 filesPileup = flags.Input.SecondaryFiles
217 filesPileup = flags.Input.Files
220 if not flags.Overlay.DataOverlay
and filesPileup:
221 pileupMetaDataCheck =
GetFileMD(filesPileup, maxLevel=
"full")
222 pileupDigitizationMetadata = pileupMetaDataCheck.get(
"/Digitization/Parameters", {})
223 pileupSimulationMetadata = pileupMetaDataCheck.get(
"/Simulation/Parameters", {})
224 pileupTagInfoMetadata = pileupMetaDataCheck.get(
"/TagInfo", {})
226 logger.info(
"Checking Presampled pile-up metadata against configuration of jobs (i.e. flags)...")
228 logger.info(
"Completed all checks against Presampled pile-up Simulation metadata.")
230 if pileupDigitizationMetadata:
235 from IOVDbMetaDataTools
import ParameterDbFiller
237 runNumber = flags.Input.RunNumbers[0]
238 runNumberEnd = flags.Input.RunNumbers[-1]
239 if runNumberEnd == runNumber:
241 logger.debug(
'ParameterDbFiller BeginRun = %s',
str(runNumber) )
242 dbFiller.setBeginRun(runNumber)
243 logger.debug(
'ParameterDbFiller EndRun = %s',
str(runNumberEnd) )
244 dbFiller.setEndRun(runNumberEnd)
246 logger.info(
'Filling Digitization MetaData')
249 for key
in pileupDict:
250 value =
str(pileupDict[key])
251 logger.info(
'DigitizationMetaData: setting "%s" to be %s', key, value)
252 if key
in [
"BeamIntensityPattern"]:
253 dbFiller.addDigitParam64(key, value)
255 dbFiller.addDigitParam(key, value)
258 dbFiller.genDigitDb()