130def propagateMetaData(flags, streamName="", category=None):
131 """
132 Returns the tuple of MetaDataHelperLists and ComponentAccumulator.
133 The former combines the lists needed to setup given metadata category
134 for the output stream configuration and metadata service.
135 The latter contains the CA needed for a given metadata category.
136 """
137 tools = MetaDataHelperLists()
138 result = ComponentAccumulator()
139 log = logging.getLogger("SetupMetaDataForStreamCfg")
140
141 if category == MetadataCategory.FileMetaData:
142 tools.mdToolNames.append("xAODMaker::FileMetaDataTool")
143 tools.mdItems += [
144 "xAOD::FileMetaData#FileMetaData",
145 "xAOD::FileMetaDataAuxInfo#FileMetaDataAux.",
146 ]
147 tools.helperTools.append(
148 CompFactory.xAODMaker.FileMetaDataCreatorTool(
149 f"{outputStreamName(streamName)}_FileMetaDataCreatorTool",
150 OutputKey="FileMetaData",
151 StreamName=outputStreamName(streamName),
152 EventInfoKey=f"{flags.Overlay.BkgPrefix}EventInfo"
153 if flags.Common.ProductionStep in [ProductionStep.PileUpPresampling, ProductionStep.PileUpPretracking, ProductionStep.MinbiasPreprocessing]
154 else "EventInfo",
155 )
156 )
157 elif category == MetadataCategory.EventStreamInfo:
158 tools.mdTools += [
159 CompFactory.CopyEventStreamInfo(
160 f"{outputStreamName(streamName)}_CopyEventStreamInfo",
161 Keys=[outputStreamName(streamName)],
162 ),
163 ]
164
165 elif category == MetadataCategory.EventFormat:
166 efTool = CompFactory.xAODMaker.EventFormatStreamHelperTool(
167 f"{outputStreamName(streamName)}_EventFormatStreamHelperTool",
168 Key=f"EventFormat{outputStreamName(streamName)}",
169 DataHeaderKey=outputStreamName(streamName),
170 )
171 tools.mdItems += [
172 f"xAOD::EventFormat#EventFormat{outputStreamName(streamName)}",
173 ]
174 tools.helperTools.append(efTool)
175 tools.mdToolNames.append("xAODMaker::EventFormatMetaDataTool")
176 elif category == MetadataCategory.CutFlowMetaData:
177 if "CutBookkeepers" in flags.Input.MetadataItems:
178 from EventBookkeeperTools.EventBookkeeperToolsConfig import (
179 CutFlowOutputList,
180 )
181
182 tools.mdToolNames.append("BookkeeperTool")
183 tools.mdItems += CutFlowOutputList(flags)
184
185 elif category == MetadataCategory.TriggerMenuMetaData:
186 if any("TriggerMenu" in item for item in flags.Input.MetadataItems):
187 _tools, _ = createTriggerMenuMetaData(flags)
188 tools.mdTools = _tools.mdTools
189 tools.mdItems = _tools.mdItems
190
191 elif category == MetadataCategory.TruthMetaData:
192 if "TruthMetaData" in flags.Input.MetadataItems:
193 tools.mdItems += [
194 "xAOD::TruthMetaDataContainer#TruthMetaData",
195 "xAOD::TruthMetaDataAuxContainer#TruthMetaDataAux.",
196 ]
197 tools.mdTools.append(
198 CompFactory.xAODMaker.TruthMetaDataTool("TruthMetaDataTool")
199 )
200 elif category == MetadataCategory.ByteStreamMetaData:
201 if "ByteStreamMetadata" in flags.Input.MetadataItems:
202 tools.mdItems += ["ByteStreamMetadataContainer#*"]
203 elif category == MetadataCategory.LumiBlockMetaData:
204 if any(
205 lb in flags.Input.MetadataItems
206 for lb in ["SuspectLumiBlocks", "IncompleteLumiBlocks", "LumiBlocks"]
207 ):
208 tools.mdToolNames.append("LumiBlockMetaDataTool")
209 tools.mdItems += [
210 "xAOD::LumiBlockRangeContainer#*",
211 "xAOD::LumiBlockRangeAuxContainer#*",
212 ]
213 elif category == MetadataCategory.IOVMetaData:
214 if "IOVMetaDataContainer" in flags.Input.MetadataItems.values():
215 tools.mdItems += ["IOVMetaDataContainer#*"]
216
217 else:
218 log.warning(f"Requested metadata category: {category} could not be configured")
219 return tools, result
220
221