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