267 previousActsExtension = None) -> ComponentAccumulator:
268 acc = ComponentAccumulator()
269
270 processPixels = flags.Detector.EnableITkPixel
271 processStrips = flags.Detector.EnableITkStrip
272
273
274
275 from InDetConfig.ITkActsHelpers import isPrimaryPass
276 if flags.Tracking.ActiveConfig.extension in ["ActsConversion", "ActsLargeRadius", "ActsValidateLargeRadiusStandalone"]:
277 processPixels = False
278 elif isPrimaryPass(flags) and flags.Tracking.doITkFastTracking:
279 processStrips = reconstructStripSpacePointsInPrimaryPass(flags)
280 elif flags.Tracking.ActiveConfig.extension == "ActsValidateF100" and flags.Tracking.doITkFastTracking:
281 processStrips = False
282 kwargs = dict()
283 kwargs.setdefault('processPixels', processPixels)
284 kwargs.setdefault('processStrips', processStrips)
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302 from InDetConfig.ITkActsHelpers import isValidationPass
303 if isPrimaryPass(flags) or isValidationPass(flags):
304
305
306 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
307 kwargs.setdefault('runReconstruction', True)
308 kwargs.setdefault('runPreparation', flags.Acts.useCache)
309 else:
310
311 kwargs.setdefault('runCacheCreation', False)
312 kwargs.setdefault('runReconstruction', flags.Acts.useCache)
313 kwargs.setdefault('runPreparation', True)
314
315
316 processOverlapSpacePoints = processStrips
317 if flags.Tracking.ActiveConfig.extension in ['ActsConversion']:
318 processOverlapSpacePoints = False
319 kwargs.setdefault('processOverlapSpacePoints', processOverlapSpacePoints)
320
321
322 roisName = f'{flags.Tracking.ActiveConfig.extension}RegionOfInterest'
323
324 if flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
325 from InDetConfig.ITkActsHelpers import primaryPassExtension
326 roisName = f'{primaryPassExtension(flags)}RegionOfInterest'
327
328
329
330 pixelClustersName = 'ITkPixelClusters'
331 stripClustersName = 'ITkStripClusters'
332 pixelSpacePointsName = 'ITkPixelSpacePoints'
333 stripSpacePointsName = 'ITkStripSpacePoints'
334 stripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
335
336 if flags.Tracking.ActiveConfig.isSecondaryPass:
337 pixelClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelClusters'
338 stripClustersName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripClusters'
339 pixelSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}PixelSpacePoints'
340 stripSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripSpacePoints'
341 stripOverlapSpacePointsName = f'ITk{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}StripOverlapSpacePoints'
342
343 if flags.Acts.useCache:
344 pixelClustersName += "_Cached"
345 stripClustersName += "_Cached"
346
347
348 primaryPixelSpacePointsName = 'ITkPixelSpacePoints'
349 primaryStripSpacePointsName = 'ITkStripSpacePoints'
350 primaryStripOverlapSpacePointsName = 'ITkStripOverlapSpacePoints'
351
352
353 if kwargs['runCacheCreation']:
354 kwargs.setdefault('SpacePointCacheCreatorAlg.name', f'{flags.Tracking.ActiveConfig.extension}SpacePointCacheCreatorAlg')
355
356
357 if kwargs['runReconstruction']:
358 if kwargs['processPixels']:
359 kwargs.setdefault('PixelSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointFormationAlg')
360 kwargs.setdefault('PixelSpacePointFormationAlg.useCache', flags.Acts.useCache)
361 kwargs.setdefault('PixelSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
362 kwargs.setdefault('PixelSpacePointFormationAlg.PixelClusters', pixelClustersName)
363 kwargs.setdefault('PixelSpacePointFormationAlg.PixelSpacePoints', pixelSpacePointsName)
364
365 if kwargs['processStrips']:
366 kwargs.setdefault('StripSpacePointFormationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointFormationAlg')
367 kwargs.setdefault('StripSpacePointFormationAlg.useCache', flags.Acts.useCache)
368 kwargs.setdefault('StripSpacePointFormationAlg.SPCache', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
369 kwargs.setdefault('StripSpacePointFormationAlg.StripClusters', stripClustersName)
370 kwargs.setdefault('StripSpacePointFormationAlg.StripSpacePoints', stripSpacePointsName)
371
372
373 kwargs.setdefault('StripSpacePointFormationAlg.ProcessOverlapForStrip', kwargs['processOverlapSpacePoints'])
374 kwargs.setdefault('StripSpacePointFormationAlg.OSPCache', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
375 if kwargs['processOverlapSpacePoints']:
376 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', stripOverlapSpacePointsName)
377 else:
378
379 kwargs.setdefault('StripSpacePointFormationAlg.StripOverlapSpacePoints', '')
380
381
382 if kwargs['runPreparation']:
383 if kwargs['processPixels']:
384 kwargs.setdefault('PixelSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointPreparationAlg')
385 kwargs.setdefault('PixelSpacePointPreparationAlg.useCache', flags.Acts.useCache)
386 kwargs.setdefault('PixelSpacePointPreparationAlg.OutputCollection', f'{pixelSpacePointsName}_Cached' if kwargs['runReconstruction'] else pixelSpacePointsName)
387
388 if not flags.Acts.useCache:
389
390 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', pixelSpacePointsName if kwargs['runReconstruction'] else primaryPixelSpacePointsName)
391 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', '')
392 else:
393 kwargs.setdefault('PixelSpacePointPreparationAlg.InputCollection', '')
394 kwargs.setdefault('PixelSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointCache')
395
396 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
397 kwargs.setdefault('PixelSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
398
399
400 if kwargs['processStrips']:
401 kwargs.setdefault('StripSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointPreparationAlg')
402 kwargs.setdefault('StripSpacePointPreparationAlg.useCache', flags.Acts.useCache)
403 kwargs.setdefault('StripSpacePointPreparationAlg.OutputCollection', f'{stripSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripSpacePointsName)
404
405 if not flags.Acts.useCache:
406
407 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', stripSpacePointsName if kwargs['runReconstruction'] else primaryStripSpacePointsName)
408 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', '')
409 else:
410 kwargs.setdefault('StripSpacePointPreparationAlg.InputCollection', '')
411 kwargs.setdefault('StripSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointCache')
412
413 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
414 kwargs.setdefault('StripSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
415
416 if kwargs['processOverlapSpacePoints']:
417 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointPreparationAlg')
418 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.useCache', flags.Acts.useCache)
419 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.OutputCollection', f'{stripOverlapSpacePointsName}_Cached' if kwargs['runReconstruction'] else stripOverlapSpacePointsName)
420
421 if not flags.Acts.useCache:
422
423 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', stripOverlapSpacePointsName if kwargs['runReconstruction'] else primaryStripOverlapSpacePointsName)
424 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', '')
425 else:
426 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputCollection', '')
427 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointCache')
428
429 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
430 kwargs.setdefault('StripOverlapSpacePointPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
431
432
433 if flags.Acts.SpacePoints.doAnalysis:
434
435
436 if kwargs['processPixels']:
437 kwargs.setdefault('PixelSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelSpacePointAnalysisAlg')
438 kwargs.setdefault('PixelSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
439 kwargs.setdefault('PixelSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['PixelSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['PixelSpacePointFormationAlg.PixelSpacePoints'])
440
441 if kwargs['processStrips']:
442 kwargs.setdefault('StripSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripSpacePointAnalysisAlg')
443 kwargs.setdefault('StripSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
444 kwargs.setdefault('StripSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripSpacePoints'])
445
446 if kwargs['processOverlapSpacePoints']:
447 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripOverlapSpacePointAnalysisAlg')
448 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
449 kwargs.setdefault('StripOverlapSpacePointAnalysisAlg.SpacePointContainerKey', kwargs['StripOverlapSpacePointPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints'])
450
451 acc.merge(ActsMainSpacePointFormationCfg(flags, RoIs=roisName, **kwargs))
452
453
454
455 if flags.Acts.EDM.PersistifySpacePoints and kwargs['runReconstruction']:
456 toAOD = []
457 pixel_spacepoint_shortlist = ['-measurements']
458 strip_spacepoint_shortlist = ['topHalfStripLength',
459 'bottomHalfStripLength',
460 'topStripDirection',
461 'bottomStripDirection',
462 'stripCenterDistance',
463 'topStripCenter',
464 'measurementLink']
465
466 pixel_spacepoint_variables = '.'.join(pixel_spacepoint_shortlist)
467 strip_spacepoint_variables = '.'.join(strip_spacepoint_shortlist)
468
469 if kwargs['processPixels']:
470 pixelSpacePointCollection = kwargs['PixelSpacePointFormationAlg.PixelSpacePoints']
471 toAOD += [f'xAOD::SpacePointContainer#{pixelSpacePointCollection}',
472 f"xAOD::SpacePointAuxContainer#{pixelSpacePointCollection}Aux.{pixel_spacepoint_variables}"]
473
474 if kwargs['processStrips']:
475 stripSpacePointCollection = kwargs['StripSpacePointFormationAlg.StripSpacePoints']
476 toAOD += [f'xAOD::SpacePointContainer#{stripSpacePointCollection}',
477 f"xAOD::SpacePointAuxContainer#{stripSpacePointCollection}Aux.{strip_spacepoint_variables}"]
478
479 if kwargs['processOverlapSpacePoints']:
480 stripSpacePointCollection = kwargs['StripSpacePointFormationAlg.StripOverlapSpacePoints']
481 toAOD += [f'xAOD::SpacePointContainer#{stripSpacePointCollection}',
482 f"xAOD::SpacePointAuxContainer#{stripSpacePointCollection}Aux.{strip_spacepoint_variables}"]
483
484 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
485 acc.merge(addToAOD(flags, toAOD))
486
487 return acc
488