ATLAS Offline Software
BenchmarkConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 from AthenaConfiguration.ComponentFactory import CompFactory
4 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
5 
6 def BenchmarkCfg(flags, name = 'BenckmarkAlg', **kwarg):
8 
9  kwarg.setdefault('bdfID', flags.FPGADataPrep.bdfID) # On the testbed
10  kwarg.setdefault('xclbin', flags.FPGADataPrep.xclbin)
11  kwarg.setdefault('PixelClusterKernelName','pixel_clustering_tool')
12  kwarg.setdefault('StripClusterKernelName','processHits')
13  kwarg.setdefault('PixelL2GKernelName','l2g_pixel_tool')
14  kwarg.setdefault('StripL2GKernelName','l2g_strip_tool')
15  kwarg.setdefault('EDMPrepKernelName', 'EDMPrep')
16  kwarg.setdefault('InputPixelClusterKey', 'ITkPixelClusters')
17  kwarg.setdefault('InputStripClusterKey', 'ITkStripClusters')
18  kwarg.setdefault('runPassThrough', flags.FPGADataPrep.RunPassThrough)
19  kwarg.setdefault('doEmulation', flags.FPGADataPrep.DoEmulation)
20 
21 
22  # Set up Cluster maker tool
23  from EFTrackingFPGAPipeline.DataPrepConfig import xAODClusterMakerCfg
24  clusterMakerTool = acc.popToolsAndMerge(xAODClusterMakerCfg(flags))
25  kwarg.setdefault('xAODClusterMaker', clusterMakerTool)
26 
27  # Set up TestVectorTool
28  from EFTrackingFPGAUtility.FPGADataFormatter import FPGATestVectorToolCfg
29  testVectorTool = acc.popToolsAndMerge(FPGATestVectorToolCfg(flags))
30  kwarg.setdefault('TestVectorTool', testVectorTool)
31 
32  # Set up Chrono service
33  acc.addService(CompFactory.ChronoStatSvc(
34  PrintUserTime = True,
35  PrintSystemTime = True,
36  PrintEllapsedTime = True
37  ))
38 
39  acc.addEventAlgo(CompFactory.EFTrackingFPGAIntegration.BenchmarkAlg(**kwarg))
40 
41  return acc
42 
44  acc = ComponentAccumulator()
45  from FPGAClusterSorting.FPGAClusterSortingConfig import FPGAClusterSortingAlgCfg
46  ClusterSorting = FPGAClusterSortingAlgCfg(flags)
47 
48  acc.merge(ClusterSorting)
49  return acc
50 
51 
52 if __name__ == "__main__":
53  from AthenaConfiguration.AllConfigFlags import initConfigFlags
54  flags = initConfigFlags()
55 
56  flags.Detector.EnableCalo = False
57  flags.FPGADataPrep.DoActs = True
58 
59  # DataPreparation Pipeline doesn't do spacepoint fomration, we need ACTS to do it
60  flags.FPGADataPrep.PassThrough.ClusterOnly = True
61  # For Spacepoint formation
62  if flags.FPGADataPrep.PassThrough.ClusterOnly:
63  flags.Acts.useCache = False
64  flags.Tracking.ITkMainPass.doActsSeed = True
65 
66  flags.Tracking.ITkMainPass.doAthenaToActsCluster = True
67  flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint = True
68  flags.Tracking.ITkMainPass.doAthenaSpacePoint = True
69  from ActsConfig.ActsCIFlags import actsLegacyWorkflowFlags
71  flags.Acts.doRotCorrection = False
72 
73  flags.Concurrency.NumThreads = 1
74  flags.Input.Files = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/EFTracking/ATLAS-P2-RUN4-03-00-00/RDO/reg0_singlemu.root"]
75  # flags.Input.Files = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/RDO/ATLAS-P2-RUN4-03-00-00/mc21_14TeV.601229.PhPy8EG_A14_ttbar_hdamp258p75_SingleLep.recon.RDO.e8481_s4149_r14700/RDO.33629020._000047.pool.root.1"]
76  flags.Output.AODFileName = "FPGA.Benchmark.AOD.pool.root"
77  flags.Debug.DumpEvtStore=False
78  flags.fillFromArgs()
79  flags.lock()
80  flags = flags.cloneAndReplace("Tracking.ActiveConfig", "Tracking.ITkMainPass", keepOriginal=True)
81 
82  kwarg = {}
83 
84  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
85  cfg = MainServicesCfg(flags)
86 
87  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
88  cfg.merge(PoolReadCfg(flags))
89 
90 
91  #Truth
92  if flags.Input.isMC:
93  from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
94  cfg.merge(GEN_AOD2xAODCfg(flags))
95 
96  # Standard reco
97  from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
98  cfg.merge(ITkTrackRecoCfg(flags))
99 
100  from InDetConfig.InDetPrepRawDataToxAODConfig import TruthParticleIndexDecoratorAlgCfg
101  cfg.merge( TruthParticleIndexDecoratorAlgCfg(flags) )
102 
103  acc = BenchmarkCfg(flags, **kwarg)
104  cfg.merge(acc)
105 
106  OutputItemList = [
107  "xAOD::StripClusterContainer#FPGAStripClusters",
108  "xAOD::StripClusterAuxContainer#FPGAStripClustersAux.",
109  "xAOD::PixelClusterContainer#FPGAPixelClusters",
110  "xAOD::PixelClusterAuxContainer#FPGAPixelClustersAux.",
111  ]
112 
113  # Connection to ACTS
114  if flags.FPGADataPrep.DoActs:
115 
116  # convert xAOD Clusters to SPs
117  from EFTrackingFPGAUtility.DataPrepToActsConfig import UseActsSpacePointFormationCfg
118  cfg.merge(UseActsSpacePointFormationCfg(flags))
119 
120  # Sort FPGAClusters
121  cfg.merge(FPGAClusterSortingCfg(flags))
122 
123  # Run the ACTS Fast Tracking on FPGA clusters
124  from FPGATrackSimConfTools.FPGATrackSimDataPrepConfig import FPGATrackSimDataPrepConnectToFastTracking
125  cfg.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="FPGA",
126  **{'PixelSeedingAlg.InputSpacePoints' : ['FPGAPixelSpacePoints'],
127  'StripSeedingAlg.InputSpacePoints' : [''],
128  'TrackFindingAlg.UncalibratedMeasurementContainerKeys' : ["SortedFPGAPixelClusters","SortedFPGAStripClusters"],
129  'PixelClusterToTruthAssociationAlg.Measurements' : 'SortedFPGAPixelClusters',
130  'StripClusterToTruthAssociationAlg.Measurements' : 'SortedFPGAStripClusters'}))
131 
132  # Run the ACTS Fast Tracking (C-100) as an additional reference
133  cfg.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="ActsFast"))
134 
135  OutputItemList += [
136  "xAOD::TrackParticleContainer#FPGATrackParticles",
137  "xAOD::TrackParticleAuxContainer#FPGATrackParticlesAux."
138  ]
139 
140  # This part is needed to extract technical efficiency
141  from InDetConfig.InDetPrepRawDataToxAODConfig import ITkActsPrepDataToxAODCfg
142  cfg.merge( ITkActsPrepDataToxAODCfg( flags,
143  PixelMeasurementContainer = "ITkPixelMeasurements_offl",
144  StripMeasurementContainer = "ITkStripMeasurements_offl" ) )
145  OutputItemList += ['xAOD::TrackMeasurementValidationContainer#ITkPixelMeasurements_offl',
146  'xAOD::TrackMeasurementValidationAuxContainer#ITkPixelMeasurements_offlAux.',
147  'xAOD::TrackMeasurementValidationContainer#ITkStripMeasurements_offl',
148  'xAOD::TrackMeasurementValidationAuxContainer#ITkStripMeasurements_offlAux.']
149 
150  from EFTrackingFPGAOutputValidation.FPGAOutputValidationConfig import FPGAOutputValidationCfg
151  cfg.merge(FPGAOutputValidationCfg(flags, **{
152  "pixelKeys": ["FPGAPixelClusters", "ITkPixelClusters"],
153  "stripKeys": ["FPGAStripClusters", "ITkStripClusters"],
154  'doDiffHistograms':True,
155  'matchByID' : True,
156  'allowedRdoMisses': 1000}))
157 
158 
159  # Prepare output
160  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
161  from AthenaConfiguration.Enums import MetadataCategory
162  cfg.merge(SetupMetaDataForStreamCfg(flags,"AOD",
163  createMetadata=[
164  MetadataCategory.ByteStreamMetaData,
165  MetadataCategory.LumiBlockMetaData,
166  MetadataCategory.TruthMetaData,
167  MetadataCategory.IOVMetaData,],))
168 
169  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
170  cfg.merge(addToAOD(flags, OutputItemList))
171 
172  cfg.run(flags.Exec.MaxEvents)
173 
python.ITkTrackRecoConfig.ITkTrackRecoCfg
ComponentAccumulator ITkTrackRecoCfg(flags)
Main ITk tracking config #####################.
Definition: ITkTrackRecoConfig.py:514
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
xAODTruthCnvConfig.GEN_AOD2xAODCfg
def GEN_AOD2xAODCfg(flags, name="GEN_AOD2xAOD", **kwargs)
Definition: xAODTruthCnvConfig.py:22
FPGAClusterSortingConfig.FPGAClusterSortingAlgCfg
def FPGAClusterSortingAlgCfg(flags, name="FPGAClusterSortingAlg", **kwargs)
Definition: FPGAClusterSortingConfig.py:6
python.InDetPrepRawDataToxAODConfig.TruthParticleIndexDecoratorAlgCfg
def TruthParticleIndexDecoratorAlgCfg(flags, name='TruthParticleIndexDecoratorAlg', **kwargs)
Definition: InDetPrepRawDataToxAODConfig.py:6
FPGADataFormatter.FPGATestVectorToolCfg
def FPGATestVectorToolCfg(flags, name='FPGATestVectorTool', **kwarg)
Definition: FPGADataFormatter.py:16
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
BenchmarkConfig.FPGAClusterSortingCfg
def FPGAClusterSortingCfg(flags)
Definition: BenchmarkConfig.py:43
python.InDetPrepRawDataToxAODConfig.ITkActsPrepDataToxAODCfg
ComponentAccumulator ITkActsPrepDataToxAODCfg(flags, *str PixelClusterContainer="ITkPixelClusters", str StripClusterContainer="ITkStripClusters", str PixelMeasurementContainer="ITkPixelMeasurements", str StripMeasurementContainer="ITkStripMeasurements", list[str] TrackParticles=None)
Definition: InDetPrepRawDataToxAODConfig.py:46
python.FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepConnectToFastTracking
def FPGATrackSimDataPrepConnectToFastTracking(flagsIn, FinalTracks="F100-", **kwargs)
Definition: FPGATrackSimDataPrepConfig.py:433
DataPrepConfig.xAODClusterMakerCfg
def xAODClusterMakerCfg(flags, name='xAODClusterMaker', **kwarg)
Definition: DataPrepConfig.py:31
DataPrepToActsConfig.UseActsSpacePointFormationCfg
ComponentAccumulator UseActsSpacePointFormationCfg(flags, **kwargs)
Definition: DataPrepToActsConfig.py:12
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:188
ActsCIFlags.actsLegacyWorkflowFlags
None actsLegacyWorkflowFlags(flags)
Definition: ActsCIFlags.py:6
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:71
FPGAOutputValidationConfig.FPGAOutputValidationCfg
def FPGAOutputValidationCfg(flags, **kwargs)
Definition: FPGAOutputValidationConfig.py:3
BenchmarkConfig.BenchmarkCfg
def BenchmarkCfg(flags, name='BenckmarkAlg', **kwarg)
Definition: BenchmarkConfig.py:6