ATLAS Offline Software
Loading...
Searching...
No Matches
F150IntegrationConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentFactory import CompFactory
4from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
5
6
7def F150IntegrationAlgCfg(flags, name = 'F150IntegrationAlg', **kwarg):
8 acc = ComponentAccumulator()
9
10 kwarg.setdefault('bdfID', flags.FPGADataPrep.bdfID) # On the testbed
11 kwarg.setdefault('xclbin', flags.FPGADataPrep.xclbin)
12
13 kwarg.setdefault('PixelClusterKernelName', 'pixel_clustering_tool')
14 kwarg.setdefault('StripClusterKernelName','processHits')
15 kwarg.setdefault('StripL2GKernelName','l2g_strip_tool')
16 kwarg.setdefault('PixelEDMPrepKernelName', 'PixelEDMPrep')
17 kwarg.setdefault('StripEDMPrepKernelName', 'StripEDMPrep')
18 kwarg.setdefault('SlicingEngineInputName', 'configurableLengthWideLoader')
19 kwarg.setdefault('SlicingEngineOutputName', 'dynamicLengthWideUnloader')
20 kwarg.setdefault('InsideOutInputName', 'krnl_mm2s')
21 kwarg.setdefault('InsideOutOutputName', 'mem_write')
22
23 # Set up Chrono service
24 acc.addService(CompFactory.ChronoStatSvc(
25 PrintUserTime = True,
26 PrintSystemTime = True,
27 PrintEllapsedTime = True
28 ))
29
30 acc.addEventAlgo(CompFactory.EFTrackingFPGAIntegration.F150IntegrationAlg(name, **kwarg))
31
32 return acc
33
34def F150EDMConversionCfg(flags, name = 'F150EDMConversionAlg', **kwarg):
35 acc = ComponentAccumulator()
36
37 kwarg.setdefault('FPGAOutputTrackKey', "FPGATrackOutput")
38 kwarg.setdefault('FPGASpacePointsKey', "FPGAPixelSpacePoints")
39 kwarg.setdefault('OutputSeeds', "ActsValidateF150PixelSeeds")
40
41 alg = CompFactory.EFTrackingFPGAIntegration.F150EDMConversionAlg(name, **kwarg)
42 acc.addEventAlgo(alg)
43
44 return acc
45
46def FPGA150Pipeline(flags, runStandalone=False): # this is used to run the F150 through Reco_tf
47 kwargs = {}
48 kwargs.setdefault('FPGAThreads', flags.Concurrency.NumThreads)
49 acc = ComponentAccumulator()
50 from EFTrackingFPGAPipeline.F100IntegrationConfig import F100DataEncodingCfg, F100EDMConversionCfg, FPGAClusterSortingCfg
51 acc.merge(F100DataEncodingCfg(flags))
52
53 acc.merge(F150IntegrationAlgCfg(flags, "F150IntegrationAlg", **kwargs))
54
55 acc.merge(F100EDMConversionCfg(flags,
56 **{'xAODClusterMakerTool.PixelClusterContainerKey':
57 'FPGAPixelClusters' if flags.FPGADataPrep.DoClusterSorting
58 else'ITkPixelClusters',
59 'xAODClusterMakerTool.StripClusterContainerKey':
60 'FPGAStripClusters' if flags.FPGADataPrep.DoClusterSorting
61 else 'ITkStripClusters'}))
62 if(flags.FPGADataPrep.DoClusterSorting):
63 acc.merge(FPGAClusterSortingCfg(flags,
64 **{'sortedxAODPixelClusterContainer': 'SortedFPGAPixelClusters' if runStandalone
65 else 'ITkPixelClusters',
66 'sortedxAODStripClusterContainer': 'SortedFPGAStripClusters' if runStandalone
67 else 'ITkStripClusters'}))
68
69 acc.merge(F150EDMConversionCfg(flags,
70 **{'FPGASpacePointsKey' : 'ITkPixelSpacePoints'}))
71
72 if(not runStandalone):
73 if(not flags.FPGADataPrep.ForTiming):
74 from FPGATrackSimReporting.FPGATrackSimReportingConfig import FPGATrackSimReportingCfg
75 acc.merge(FPGATrackSimReportingCfg(flags,
76 perEventReports = False, # set to True if per-event information is needed for debugging (e.g. cluster, tracks). Otherwise it produces a lot of output
77 **{'xAODPixelClusterContainers' : ['ITkPixelClusters'],
78 'xAODStripClusterContainers' : ['ITkStripClusters'],
79 'FPGAActsTracks' : [f'{flags.Tracking.ActiveConfig.extension}Tracks',f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTracks'],
80 'isDataPrep': True} ))
81
82 from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
83 acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
84
85 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import ITkStripDetectorElementStatusAlgCfg
86 acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
87
88 if flags.Acts.EDM.PersistifyClusters or flags.Acts.EDM.PersistifySpacePoints:
89 toAOD = []
90
91 pixel_cluster_shortlist = ['-pixelClusterLink']
92 strip_cluster_shortlist = ['-sctClusterLink']
93
94 pixel_cluster_variables = '.'.join(pixel_cluster_shortlist)
95 strip_cluster_variables = '.'.join(strip_cluster_shortlist)
96
97 toAOD += ['xAOD::PixelClusterContainer#ITkPixelClusters',
98 'xAOD::PixelClusterAuxContainer#ITkPixelClustersAux.' + pixel_cluster_variables,
99 'xAOD::StripClusterContainer#ITkStripClusters',
100 'xAOD::StripClusterAuxContainer#ITkStripClustersAux.' + strip_cluster_variables]
101 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
102 acc.merge(addToAOD(flags, toAOD))
103 return acc
104
105
106
107
108
109if __name__ == "__main__":
110 from AthenaConfiguration.AllConfigFlags import initConfigFlags
111 flags = initConfigFlags()
112
113 flags.Detector.EnableCalo = False
114 flags.FPGADataPrep.DoActs = True
115 flags.Acts.doRotCorrection = False
116
117 flags.Concurrency.NumThreads = 1
118 flags.Input.Files = ["/eos/project-a/atlas-eftracking/AODfiles_EFTrackPerf/Region34SingleMuon/output.rdo.000012.0.root"]
119 # 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"]
120 flags.Output.AODFileName = "FPGA.Benchmark.AOD.pool.root"
121 flags.Debug.DumpEvtStore=False
122 flags.fillFromArgs()
123
124 if(not flags.FPGADataPrep.ForTiming):
125 # DataPreparation Pipeline doesn't do spacepoint fomration, we need ACTS to do it
126 flags.FPGADataPrep.PassThrough.ClusterOnly = True
127 # For Spacepoint formation
128 if flags.FPGADataPrep.PassThrough.ClusterOnly:
129 flags.Acts.useCache = False
130 flags.Tracking.ITkMainPass.doActsSeed = True
131
132 flags.Tracking.ITkMainPass.doAthenaToActsCluster = True
133 flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint = True
134 flags.Tracking.ITkMainPass.doAthenaSpacePoint = True
135 else:
136 flags.Tracking.doTruth=False
137 flags.ITk.doTruth=False
138 flags.InDet.doTruth=False
139
140 flags.lock()
141 flags = flags.cloneAndReplace("Tracking.ActiveConfig", "Tracking.ITkMainPass", keepOriginal=True)
142
143 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
144 cfg = MainServicesCfg(flags)
145
146 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
147 cfg.merge(PoolReadCfg(flags))
148
149 if(not flags.FPGADataPrep.ForTiming):
150 #Truth
151 if flags.Input.isMC:
152 from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
153 cfg.merge(GEN_AOD2xAODCfg(flags))
154
155 # Standard reco
156 from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
157 cfg.merge(ITkTrackRecoCfg(flags))
158
159 from InDetConfig.InDetPrepRawDataToxAODConfig import TruthParticleIndexDecoratorAlgCfg
160 cfg.merge( TruthParticleIndexDecoratorAlgCfg(flags) )
161
162 else:
163 from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
164 cfg.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
165
166 cfg.merge(FPGA150Pipeline(flags,runStandalone=True))
167
168 OutputItemList = []
169 # # Connection to ACTS
170 if flags.FPGADataPrep.DoActs:
171
172 # convert xAOD Clusters to SPs
173 from EFTrackingFPGAUtility.DataPrepToActsConfig import UseActsSpacePointFormationCfg
174 cfg.merge(UseActsSpacePointFormationCfg(flags))
175
176
177 # Run the ACTS Fast Tracking on FPGA clusters
178 from FPGATrackSimConfTools.FPGATrackSimDataPrepConfig import FPGATrackSimDataPrepConnectToFastTracking
179 cfg.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="FPGA",
180 **{'PixelSeedingAlg.InputSpacePoints' : ['FPGAPixelSpacePoints'],
181 'StripSeedingAlg.InputSpacePoints' : [''],
182 'TrackFindingAlg.UncalibratedMeasurementContainerKeys' : ["SortedFPGAPixelClusters","SortedFPGAStripClusters"],
183 'PixelClusterToTruthAssociationAlg.Measurements' : 'SortedFPGAPixelClusters',
184 'StripClusterToTruthAssociationAlg.Measurements' : 'SortedFPGAStripClusters'}))
185 if(not flags.FPGADataPrep.ForTiming):
186
187 # Run the ACTS Fast Tracking (C-100) as an additional reference
188 cfg.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="ActsFast"))
189
190 OutputItemList += [
191 "xAOD::TrackParticleContainer#FPGATrackParticles",
192 "xAOD::TrackParticleAuxContainer#FPGATrackParticlesAux."
193 ]
194
195
196 if(not flags.FPGADataPrep.ForTiming):
197 OutputItemList += [
198 "xAOD::StripClusterContainer#FPGAStripClusters",
199 "xAOD::StripClusterAuxContainer#FPGAStripClustersAux.",
200 "xAOD::PixelClusterContainer#FPGAPixelClusters",
201 "xAOD::PixelClusterAuxContainer#FPGAPixelClustersAux.",
202 ]
203
204 from EFTrackingFPGAOutputValidation.FPGAOutputValidationConfig import FPGAOutputValidationCfg
205 cfg.merge(FPGAOutputValidationCfg(flags, **{
206 "pixelKeys": ["FPGAPixelClusters", "ITkPixelClusters"],
207 "stripKeys": ["FPGAStripClusters", "ITkStripClusters"],
208 'doDiffHistograms':True,
209 'matchByID' : False,
210 'allowedRdoMisses': 1000}))
211
212
213 # Prepare output
214 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
215 from AthenaConfiguration.Enums import MetadataCategory
216 cfg.merge(SetupMetaDataForStreamCfg(flags,"AOD",
217 createMetadata=[
218 MetadataCategory.ByteStreamMetaData,
219 MetadataCategory.LumiBlockMetaData,
220 MetadataCategory.TruthMetaData,
221 MetadataCategory.IOVMetaData,],))
222
223 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
224 cfg.merge(addToAOD(flags, OutputItemList))
225
226 flags.dump()
227
228 from AthenaCommon.Constants import DEBUG
229 cfg.foreach_component("AthEventSeq/*").OutputLevel = DEBUG
230 cfg.printConfig(withDetails=True, summariseProps=True)
231 cfg.store(open("F100IntegrationAlg.pkl", "wb"))
232 cfg.run(flags.Exec.MaxEvents)
233
234
235
if(febId1==febId2)
F150EDMConversionCfg(flags, name='F150EDMConversionAlg', **kwarg)
F150IntegrationAlgCfg(flags, name='F150IntegrationAlg', **kwarg)
FPGA150Pipeline(flags, runStandalone=False)