455def FPGATrackSimClusteringCfg(flags):
456 acc=ComponentAccumulator()
457 if not flags.Trigger.FPGATrackSim.runOnPreProducedHeaderFiles:
458 acc.merge(FPGATrackSimDataPrepAlgCfg(flags))
459 acc.merge(FPGAConversionAlgCfg(flags, name = 'FPGAConversionAlg', stage = '_1st',**{
460 'FPGATrackSimSPKey': 'FPGAClusters_1st',
461 'xAODPixelClusterFromFPGAClusterKey': 'FPGAPixelClusters',
462 'xAODStripClusterFromFPGAClusterKey': 'FPGAStripClusters',
463 'xAODPixelSpacePointFromFPGAKey': 'ITkPixelSpacePoints',
464 'doActsTrk': False,
465 'useRoads': False,
466 'doSP': flags.Trigger.FPGATrackSim.convertSPs,
467 }))
468 else:
469 from FPGATrackSimConfTools.FPGATrackSimMergeOutputsConfig import FPGATrackSimMergeOutputsAlgCfg
470 acc.merge(FPGATrackSimMergeOutputsAlgCfg(flags))
471 acc.merge(FPGAConversionAlgCfg(flags, name = 'FPGAConversionAlg', stage = '_1st',**{
472 'FPGATrackSimHitKey': 'FPGAHits',
473 'xAODPixelClusterFromFPGAHitKey': 'FPGAPixelClusters',
474 'xAODStripClusterFromFPGAHitKey': 'FPGAStripClusters',
475 'xAODPixelSpacePointFromFPGAKey': 'ITkPixelSpacePoints',
476 'doActsTrk': False,
477 'useRoads': False,
478 'doClusters': False,
479 'doHits': True,
480 'doSP': flags.Trigger.FPGATrackSim.convertSPs,
481 }))
482
483 from FPGAClusterSorting.FPGAClusterSortingConfig import FPGAClusterSortingAlgCfg
484 ClusterSorting = FPGAClusterSortingAlgCfg(flags,**{'xAODPixelClusterContainer': 'FPGAPixelClusters',
485 'xAODStripClusterContainer': 'FPGAStripClusters',
486 'sortedxAODPixelClusterContainer': 'ITkPixelClusters',
487 'sortedxAODStripClusterContainer': 'ITkStripClusters'})
488
489 acc.merge(ClusterSorting)
490
491 from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
492 acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
493
494 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import ITkStripDetectorElementStatusAlgCfg
495 acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
496
497 if flags.Acts.EDM.PersistifyClusters or flags.Acts.EDM.PersistifySpacePoints:
498 toAOD = []
499
500 pixel_cluster_shortlist = ['-pixelClusterLink']
501 strip_cluster_shortlist = ['-sctClusterLink']
502
503 pixel_cluster_variables = '.'.join(pixel_cluster_shortlist)
504 strip_cluster_variables = '.'.join(strip_cluster_shortlist)
505
506 toAOD += ['xAOD::PixelClusterContainer#ITkPixelClusters',
507 'xAOD::PixelClusterAuxContainer#ITkPixelClustersAux.' + pixel_cluster_variables,
508 'xAOD::StripClusterContainer#ITkStripClusters',
509 'xAOD::StripClusterAuxContainer#ITkStripClustersAux.' + strip_cluster_variables]
510 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
511 acc.merge(addToAOD(flags, toAOD))
512
513
514 from FPGATrackSimReporting.FPGATrackSimReportingConfig import FPGATrackSimReportingCfg
515 acc.merge(FPGATrackSimReportingCfg(flags,
516 perEventReports = False,
517 **{'xAODPixelClusterContainers' : ['ITkPixelClusters'],
518 'xAODStripClusterContainers' : ['ITkStripClusters'],
519 'FPGAActsTracks' : [f'{flags.Tracking.ActiveConfig.extension}Tracks',f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTracks'],
520 'isDataPrep': True} ))
521
522 if flags.Trigger.FPGATrackSim.writeAdditionalOutputData and flags.Tracking.ActiveConfig.extension in ["ActsValidateF100"]:
523 acc.addService(CompFactory.THistSvc(Output = [f"EXPERT DATAFILE='{flags.Trigger.FPGATrackSim.outputMonitorFile}', OPT='RECREATE'"]))
524 acc.addService(CompFactory.THistSvc(Output = ["FPGATRACKSIMOUTPUT DATAFILE='dataprep.root', OPT='RECREATE'"]))
525 return acc
526