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