350 previousActsExtension: str = None) -> ComponentAccumulator:
351 assert previousActsExtension is None or isinstance(previousActsExtension, str)
352
353 acc = ComponentAccumulator()
354
355 processPixels = flags.Detector.EnableITkPixel
356 processStrips = flags.Detector.EnableITkStrip
357 processHGTD = flags.Acts.useHGTDClusterInTrackFinding and flags.Detector.EnableHGTD
358
359 kwargs = dict()
360 kwargs.setdefault('processPixels', processPixels)
361 kwargs.setdefault('processStrips', processStrips)
362 kwargs.setdefault('processHGTD', processHGTD)
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380 from InDetConfig.ITkActsHelpers import isPrimaryPass, isValidationPass
381 if isPrimaryPass(flags) or isValidationPass(flags):
382
383
384 kwargs.setdefault('runCacheCreation', flags.Acts.useCache)
385 kwargs.setdefault('runReconstruction', True)
386 kwargs.setdefault('runPreparation', flags.Acts.useCache)
387 else:
388
389 kwargs.setdefault('runCacheCreation', False)
390 kwargs.setdefault('runReconstruction', flags.Acts.useCache)
391 kwargs.setdefault('runPreparation', True)
392
393
394 roisName = f'{flags.Tracking.ActiveConfig.extension}RegionOfInterest'
395
396 if flags.Tracking.ActiveConfig.extension == 'ActsLargeRadius':
397 from InDetConfig.ITkActsHelpers import primaryPassExtension
398 roisName = f'{primaryPassExtension(flags)}RegionOfInterest'
399
400
401
402 primaryPixelClustersName = 'ITkPixelClusters'
403 primaryStripClustersName = 'ITkStripClusters'
404 primaryHgtdClustersName = 'HGTD_Clusters'
405 pixelClustersName = primaryPixelClustersName
406 stripClustersName = primaryStripClustersName
407 hgtdClustersName = primaryHgtdClustersName
408
409
410 if flags.Tracking.ActiveConfig.isSecondaryPass:
411 keyPrefix = flags.Tracking.ActiveConfig.extension.replace("Acts", "")
412 pixelClustersName = f'ITk{keyPrefix}PixelClusters'
413 stripClustersName = f'ITk{keyPrefix}StripClusters'
414 hgtdClustersName = f'{keyPrefix}HGTD_Clusters'
415
416
417 if kwargs['runCacheCreation']:
418 kwargs.setdefault('ClusterCacheCreatorAlg.name', f'{flags.Tracking.ActiveConfig.extension}ClusterCacheCreatorAlg')
419
420
421 if kwargs['runReconstruction']:
422 if kwargs['processPixels']:
423 kwargs.setdefault('PixelClusterizationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelClusterizationAlg')
424 kwargs.setdefault('PixelClusterizationAlg.useCache', flags.Acts.useCache)
425 kwargs.setdefault('PixelClusterizationAlg.ClustersKey', pixelClustersName)
426 kwargs.setdefault('PixelClusterizationAlg.ClusterCache', f'{flags.Tracking.ActiveConfig.extension}PixelClustersCache')
427 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
428 kwargs.setdefault('PixelClusterizationAlg.ExtraInputs', {('ActsTrk::PrepRawDataAssociation', f'StoreGateSvc+{previousActsExtension}PrdMap')})
429
430 if kwargs['processStrips']:
431 kwargs.setdefault('StripClusterizationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripClusterizationAlg')
432 kwargs.setdefault('StripClusterizationAlg.useCache', flags.Acts.useCache)
433 kwargs.setdefault('StripClusterizationAlg.ClustersKey', stripClustersName)
434 kwargs.setdefault('StripClusterizationAlg.ClusterCache', f'{flags.Tracking.ActiveConfig.extension}StripClustersCache')
435 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
436 kwargs.setdefault('StripClusterizationAlg.ExtraInputs', {('ActsTrk::PrepRawDataAssociation', f'StoreGateSvc+{previousActsExtension}PrdMap')})
437
438 if kwargs['processHGTD']:
439 kwargs.setdefault('HgtdClusterizationAlg.name', f'{flags.Tracking.ActiveConfig.extension}HgtdClusterizationAlg')
440
441 kwargs.setdefault('HgtdClusterizationAlg.ClusterContainerName', hgtdClustersName)
442 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
443 kwargs.setdefault('HgtdClusterizationAlg.ExtraInputs', {('ActsTrk::PrepRawDataAssociation', f'StoreGateSvc+{previousActsExtension}PrdMap')})
444
445
446
447 if kwargs['runPreparation']:
448 if kwargs['processPixels']:
449 kwargs.setdefault('PixelClusterPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelClusterPreparationAlg')
450 kwargs.setdefault('PixelClusterPreparationAlg.useCache', flags.Acts.useCache)
451 kwargs.setdefault('PixelClusterPreparationAlg.OutputCollection', f'{pixelClustersName}_Cached' if kwargs['runReconstruction'] else pixelClustersName)
452
453 if not flags.Acts.useCache:
454
455 kwargs.setdefault('PixelClusterPreparationAlg.InputCollection', pixelClustersName if kwargs['runReconstruction'] else primaryPixelClustersName)
456 kwargs.setdefault('PixelClusterPreparationAlg.InputIDC', '')
457 else:
458 kwargs.setdefault('PixelClusterPreparationAlg.InputCollection', '')
459 kwargs.setdefault('PixelClusterPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}PixelClustersCache')
460
461 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
462 kwargs.setdefault('PixelClusterPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
463
464 if kwargs['processStrips']:
465 kwargs.setdefault('StripClusterPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripClusterPreparationAlg')
466 kwargs.setdefault('StripClusterPreparationAlg.useCache', flags.Acts.useCache)
467 kwargs.setdefault('StripClusterPreparationAlg.OutputCollection', f'{stripClustersName}_Cached' if kwargs['runReconstruction'] else stripClustersName)
468 if not flags.Acts.useCache:
469 kwargs.setdefault('StripClusterPreparationAlg.InputCollection', stripClustersName if kwargs['runReconstruction'] else primaryStripClustersName)
470 kwargs.setdefault('StripClusterPreparationAlg.InputIDC', '')
471 else:
472 kwargs.setdefault('StripClusterPreparationAlg.InputCollection', '')
473 kwargs.setdefault('StripClusterPreparationAlg.InputIDC', f'{flags.Tracking.ActiveConfig.extension}StripClustersCache')
474
475 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
476 kwargs.setdefault('StripClusterPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
477
478 if kwargs['processHGTD']:
479 kwargs.setdefault('HgtdClusterPreparationAlg.name', f'{flags.Tracking.ActiveConfig.extension}HgtdClusterPreparationAlg')
480 kwargs.setdefault('HgtdClusterPreparationAlg.OutputCollection', f'{hgtdClustersName}_Cached' if kwargs['runReconstruction'] else hgtdClustersName)
481 kwargs.setdefault('HgtdClusterPreparationAlg.InputCollection', hgtdClustersName if kwargs['runReconstruction'] else primaryHgtdClustersName)
482 kwargs.setdefault('HgtdClusterPreparationAlg.InputIDC', '')
483 if flags.Tracking.ActiveConfig.isSecondaryPass and previousActsExtension is not None:
484 kwargs.setdefault('HgtdClusterPreparationAlg.InputPrdMap', f'{previousActsExtension}PrdMap')
485
486
487 if flags.Acts.Clusters.doAnalysis:
488
489
490 if kwargs['processPixels']:
491 kwargs.setdefault('PixelClusterAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}PixelClusterAnalysisAlg')
492 kwargs.setdefault('PixelClusterAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
493 kwargs.setdefault('PixelClusterAnalysisAlg.MonGroupName', f'{flags.Tracking.ActiveConfig.extension}ClusterAnalysisAlg')
494 kwargs.setdefault('PixelClusterAnalysisAlg.ClusterContainerKey', kwargs['PixelClusterPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['PixelClusterizationAlg.ClustersKey'])
495
496 if kwargs['processStrips']:
497 kwargs.setdefault('StripClusterAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}StripClusterAnalysisAlg')
498 kwargs.setdefault('StripClusterAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
499 kwargs.setdefault('StripClusterAnalysisAlg.MonGroupName', f'{flags.Tracking.ActiveConfig.extension}ClusterAnalysisAlg')
500 kwargs.setdefault('StripClusterAnalysisAlg.ClusterContainerKey', kwargs['StripClusterPreparationAlg.OutputCollection'] if kwargs['runPreparation'] else kwargs['StripClusterizationAlg.ClustersKey'])
501
502 if kwargs['processHGTD']:
503 kwargs.setdefault('HgtdClusterAnalysisAlg.name', f'{flags.Tracking.ActiveConfig.extension}HgtdClusterAnalysisAlg')
504 kwargs.setdefault('HgtdClusterAnalysisAlg.extension', flags.Tracking.ActiveConfig.extension)
505 kwargs.setdefault('HgtdClusterAnalysisAlg.MonGroupName', f'{flags.Tracking.ActiveConfig.extension}ClusterAnalysisAlg')
506
507 acc.merge(ActsMainClusterizationCfg(flags, RoIs=roisName, **kwargs))
508
509
510 if flags.Acts.EDM.PersistifyClusters and kwargs['runReconstruction']:
511 toAOD = []
512 if kwargs['processPixels']:
513 pixel_cluster_shortlist = ['-validationMeasurementLink']
514 pixel_cluster_variables = '.'.join(pixel_cluster_shortlist)
515
516 pixelClusterCollection = kwargs['PixelClusterizationAlg.ClustersKey']
517 toAOD += [f'xAOD::PixelClusterContainer#{pixelClusterCollection}',
518 f'xAOD::PixelClusterAuxContainer#{pixelClusterCollection}Aux.{pixel_cluster_variables}']
519
520 if kwargs['processStrips']:
521 strip_cluster_shortlist = ['-validationMeasurementLink']
522 strip_cluster_variables = '.'.join(strip_cluster_shortlist)
523
524 stripClusterCollection = kwargs['StripClusterizationAlg.ClustersKey']
525 toAOD += [f"xAOD::StripClusterContainer#{stripClusterCollection}",
526 f"xAOD::StripClusterAuxContainer#{stripClusterCollection}Aux.{strip_cluster_variables}"]
527
528 if kwargs['processHGTD']:
529 hgtdClusterCollection = kwargs['HgtdClusterizationAlg.ClusterContainerName']
530 toAOD += [f"xAOD::HGTDClusterContainer#{hgtdClusterCollection}",
531 f"xAOD::HGTDClusterAuxContainer#{hgtdClusterCollection}Aux."]
532
533 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
534 acc.merge(addToAOD(flags, toAOD))
535
536 return acc
537