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