98def GeneratorVersioningFixCfg(flags):
99 from AthenaCommon.Logging import logging
100 log = logging.getLogger("GeneratorsInfo")
101 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
102
103 generatorsData = flags.Input.GeneratorsInfo
104 log.info(f"Generators data: {generatorsData}")
105
106 missingVersion = False
107 for k, v in generatorsData.items():
108 if v is None and k not in ignoredGenerators:
109 missingVersion = True
110
111
112 releaseDataSampleGeneratorOverridesDict = legacyReleaseDataSampleGeneratorOverrides()
113 overrides = None
114 if flags.Input.MCChannelNumber and flags.Input.MCChannelNumber in releaseDataSampleGeneratorOverridesDict:
115 overrides = releaseDataSampleGeneratorOverridesDict[flags.Input.MCChannelNumber]
116 log.warning("Found generator overrides for sample with DSID %d", flags.Input.MCChannelNumber)
117
118 if not missingVersion and not overrides:
119 return ComponentAccumulator()
120
121 log.info("At least one MC generator is missing version information. Attempting to fix...")
122
123 from PyUtils.AMITagHelperConfig import inputAMITags
124 tags = inputAMITags(flags, fixBroken=True, silent=True)
125 tag = None
126 if tags and tags[0].startswith("e"):
127 tag = tags[0]
128
129
130 if overrides:
131 if "any" in overrides:
132 overrides = overrides["any"]
133 else:
134 overrides = overrides.get(tag, {})
135
136
137 if overrides:
138 log.warning(f"Overriding generators to {'+'.join(overrides.keys())}.")
139 generatorsData = {}
140 for generator, version in overrides.items():
141 if version is not None:
142 log.warning(f"Overriding version for {generator} to {version}.")
143 generatorsData[generator] = version
144
145 outputStringList = generatorsVersionedStringList(generatorsData)
146
147 from EventInfoMgt.TagInfoMgrConfig import TagInfoMgrCfg
148 return TagInfoMgrCfg(flags, tagValuePairs={"generators": generatorsVersionedString(outputStringList)})
149
150
151 releaseDataSampleTagOverridesDict = legacyReleaseDataSampleTagOverrides()
152 if flags.Input.MCChannelNumber and flags.Input.MCChannelNumber in releaseDataSampleTagOverridesDict:
153 log.warning(f"Overriding e-tag for sample {flags.Input.MCChannelNumber} to {releaseDataSampleTagOverridesDict[flags.Input.MCChannelNumber]}.")
154 tag = releaseDataSampleTagOverridesDict[flags.Input.MCChannelNumber]
155
156
157 releaseDataDict = legacyReleaseData()
158 if tag not in releaseDataDict:
159 log.warning(f"Could not find release data for tag {tag}.")
160 return ComponentAccumulator()
161
162
163 releaseData = releaseDataDict[tag]
164 for k, v in generatorsData.items():
165 if v is None and k not in ignoredGenerators and k in releaseData:
166 log.info(f"Setting version for {k} to {releaseData[k]}.")
167 generatorsData[k] = releaseData[k]
168
169 outputStringList = generatorsVersionedStringList(generatorsData)
170
171 from EventInfoMgt.TagInfoMgrConfig import TagInfoMgrCfg
172 return TagInfoMgrCfg(flags, tagValuePairs={"generators": generatorsVersionedString(outputStringList)})