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