195 previousActsExtension = None) -> ComponentAccumulator:
196 acc = ComponentAccumulator()
197
198 processPixels = flags.Detector.EnablePixel
199 processStrips = flags.Detector.EnableSCT
200
201 kwargs = dict()
202 kwargs.setdefault('processPixels', processPixels)
203 kwargs.setdefault('processStrips', processStrips)
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
223 kwargs.setdefault('runReconstruction', True)
224 kwargs.setdefault('runPreparation', flags.Acts.useCache)
225
226
227 processOverlapSpacePoints = processStrips
228 if flags.Tracking.ActiveConfig.extension in ['ActsConversion']:
229 processOverlapSpacePoints = False
230 kwargs.setdefault('processOverlapSpacePoints', processOverlapSpacePoints)
231
232
233 roisName = f'{flags.Tracking.ActiveConfig.extension}RegionOfInterest'
234
235 if flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
236 roisName = 'ActsRegionOfInterest'
237
238
239
240 pixelClustersName = 'PixelClusters'
241 stripClustersName = 'SCT_Clusters'
242 pixelSpacePointsName = 'PixelSpacePoints'
243 stripSpacePointsName = 'SCT_SpacePoints'
244 stripOverlapSpacePointsName = 'OverlapSpacePoints'
245
246
247
248
249
250
251
252 primaryPixelSpacePointsName = 'PixelSpacePoints'
253 primaryStripSpacePointsName = 'SCT_SpacePoints'
254 primaryStripOverlapSpacePointsName = 'OverlapSpacePoints'
255
256
257 if kwargs['runCacheCreation']:
258 kwargs.setdefault('SpacePointCacheCreatorAlg.name', f'{flags.Tracking.ActiveConfig.extension}SpacePointCacheCreatorAlg')
259
260
261 if kwargs['runReconstruction']:
262 if kwargs['processPixels']:
263 kwargs.setdefault('PixelSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointFormationAlg')
264 kwargs.setdefault('PixelSpacePointFormationAlg.useCache', flags.Acts.useCache)
265 kwargs.setdefault('PixelSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
266 kwargs.setdefault('PixelSpacePointFormationAlg.PixelClusters', pixelClustersName)
267 kwargs.setdefault('PixelSpacePointFormationAlg.PixelSpacePoints', pixelSpacePointsName)
268
269 if kwargs['processStrips']:
270 kwargs.setdefault('StripSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointFormationAlg')
271 kwargs.setdefault('StripSpacePointFormationAlg.useCache', flags.Acts.useCache)
272 kwargs.setdefault('StripSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
273 kwargs.setdefault('StripSpacePointFormationAlg.StripClusters', stripClustersName)
274 kwargs.setdefault('StripSpacePointFormationAlg.StripSpacePoints', stripSpacePointsName)
275
276
277 kwargs.setdefault('StripSpacePointFormationAlg.ProcessOverlapForStrip', kwargs['processOverlapSpacePoints'])
278 kwargs.setdefault('StripSpacePointFormationAlg.OSPCache', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
279 if kwargs['processOverlapSpacePoints']:
280 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', stripOverlapSpacePointsName)
281 else:
282
283 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', '')
284
285
286 if kwargs['runPreparation']:
287 if kwargs['processPixels']:
288 kwargs.setdefault('PixelSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointPreparationAlg')
289 kwargs.setdefault('PixelSpacePointPreparationAlg.useCache', flags.Acts.useCache)
290 kwargs.setdefault('PixelSpacePointPreparationAlg.OutputCollection', f'{pixelSpacePointsName}_Cached' if kwargs['runReconstruction'] else pixelSpacePointsName)
291
292 if not flags.Acts.useCache:
293
294 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', pixelSpacePointsName if kwargs['runReconstruction'] else primaryPixelSpacePointsName)
295 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', '')
296 else:
297 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', '')
298 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
299
300 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
301 kwargs.setdefault('PixelSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
302
303 if kwargs['processStrips']:
304 kwargs.setdefault('StripSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointPreparationAlg')
305 kwargs.setdefault('StripSpacePointPreparationAlg.useCache', flags.Acts.useCache)
306 kwargs.setdefault('StripSpacePointPreparationAlg.OutputCollection', f'{stripSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripSpacePointsName)
307
308 if not flags.Acts.useCache:
309
310 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', stripSpacePointsName if kwargs['runReconstruction'] else primaryStripSpacePointsName)
311 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', '')
312 else:
313 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', '')
314 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
315
316 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
317 kwargs.setdefault('StripSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
318
319 if kwargs['processOverlapSpacePoints']:
320 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointPreparationAlg')
321 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.useCache', flags.Acts.useCache)
322 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.OutputCollection', f'{stripOverlapSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripOverlapSpacePointsName)
323
324 if not flags.Acts.useCache:
325
326 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', stripOverlapSpacePointsName if kwargs['runReconstruction'] else primaryStripOverlapSpacePointsName)
327 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', '')
328 else:
329 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', '')
330 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
331
332 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
333 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
334
335
336 if flags.Acts.doAnalysis:
337
338
339 if kwargs['processPixels']:
340 kwargs.setdefault('PixelSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointAnalysisAlg')
341 kwargs.setdefault('PixelSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
342 kwargs.setdefault('PixelSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['PixelSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['PixelSpacePointFormationAlg.PixelSpacePoints'])
343
344 if kwargs['processStrips']:
345 kwargs.setdefault('StripSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointAnalysisAlg')
346 kwargs.setdefault('StripSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
347 kwargs.setdefault('StripSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripSpacePoints'])
348
349 if kwargs['processOverlapSpacePoints']:
350 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointAnalysisAlg')
351 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
352 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripOverlapSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints'])
353
354 acc.merge(ActsIDMainSpacePointFormationCfg(flags, RoIs=roisName, **kwargs))
355
356
357 if flags.Acts.EDM.PersistifySpacePoints and kwargs['runReconstruction']:
358 toAOD = []
359 pixel_spacepoint_shortlist = ['-measurements']
360 strip_spacepoint_shortlist = ['topHalfStripLength',
361 'bottomHalfStripLength',
362 'topStripDirection',
363 'bottomStripDirection',
364 'stripCenterDistance',
365 'topStripCenter',
366 'measurementLink']
367
368 pixel_spacepoint_variables = '.'.join(pixel_spacepoint_shortlist)
369 strip_spacepoint_variables = '.'.join(strip_spacepoint_shortlist)
370
371 if kwargs['processPixels']:
372 pixelSpacePointCollection = kwargs['PixelSpacePointFormationAlg.PixelSpacePoints']
373 toAOD += [f'xAOD::SpacePointContainer#{pixelSpacePointCollection}',
374 f"xAOD::SpacePointAuxContainer#{pixelSpacePointCollection}Aux.{pixel_spacepoint_variables}"]
375
376 if kwargs['processStrips']:
377 stripSpacePointCollection = kwargs['StripSpacePointFormationAlg.StripSpacePoints']
378 toAOD += [f'xAOD::SpacePointContainer#{stripSpacePointCollection}',
379 f"xAOD::SpacePointAuxContainer#{stripSpacePointCollection}Aux.{strip_spacepoint_variables}"]
380
381 if kwargs['processOverlapSpacePoints']:
382 stripSpacePointCollection = kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints']
383 toAOD += [f'xAOD::SpacePointContainer#{stripSpacePointCollection}',
384 f"xAOD::SpacePointAuxContainer#{stripSpacePointCollection}Aux.{strip_spacepoint_variables}"]
385
386 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
387 acc.merge(addToAOD(flags, toAOD))
388 return acc