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 %s", sigdict)
129 logger.debug(
"Pileup /TagInfo %s", pudict)
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: %s value: %s", key, 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:
210 flags._Overlay_pileupDigitizationMetadata = pileupDigitizationMetadata
214 """Check fastchain overlay metadata"""
215 if flags.Overlay.ByteStream:
216 filesPileup = flags.Input.SecondaryFiles
218 filesPileup = flags.Input.Files
221 if not flags.Overlay.DataOverlay
and filesPileup:
222 pileupMetaDataCheck =
GetFileMD(filesPileup, maxLevel=
"full")
223 pileupDigitizationMetadata = pileupMetaDataCheck.get(
"/Digitization/Parameters", {})
224 pileupSimulationMetadata = pileupMetaDataCheck.get(
"/Simulation/Parameters", {})
225 pileupTagInfoMetadata = pileupMetaDataCheck.get(
"/TagInfo", {})
227 logger.info(
"Checking Presampled pile-up metadata against configuration of jobs (i.e. flags)...")
229 logger.info(
"Completed all checks against Presampled pile-up Simulation metadata.")
231 if pileupDigitizationMetadata:
233 flags._Overlay_pileupDigitizationMetadata = pileupDigitizationMetadata
237 """Write overlay digitization metadata to intermediate sqlite file (DigitParams.db)"""
238 runNumber = flags.Input.RunNumbers[0]
239 runNumberEnd = flags.Input.RunNumbers[-1]
240 if runNumberEnd == runNumber:
242 logger.debug(
'Overlay BeginRun = %s',
str(runNumber) )
243 logger.debug(
'Overlay EndRun = %s',
str(runNumberEnd) )
245 logger.info(
'Filling Digitization MetaData')
246 logger.info(
'Writing overlay digitization parameters to intermediate sqlite file (DigitParams.db)')
249 from IOVDbMetaDataTools
import ParameterDbFiller
251 dbFiller.setBeginRun(runNumber)
252 dbFiller.setEndRun(runNumberEnd)
255 for key
in pileupDict:
256 value =
str(pileupDict[key])
257 logger.info(
'DigitizationMetaData: setting "%s" to be %s', key, value)
258 if key
in [
"BeamIntensityPattern"]:
259 dbFiller.addDigitParam64(key, value)
261 dbFiller.addDigitParam(key, value)
264 dbFiller.genDigitDb()