ATLAS Offline Software
F100IntegrationConfig.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 
7 def F100IntegrationCfg(flags, name = 'F100IntegrationAlg', **kwarg):
9 
10  kwarg.setdefault('bdfID', flags.FPGADataPrep.bdfID) # On the testbed
11  kwarg.setdefault('xclbin', flags.FPGADataPrep.xclbin)
12  if(flags.FPGADataPrep.doF110):
13  kwarg.setdefault('PixelClusterKernelName','pixel_clustering_tool')
14  else:
15  kwarg.setdefault('PixelClusterKernelName', 'pixclustering_top_v1_0')
16  kwarg.setdefault('StripClusterKernelName','processHits')
17  kwarg.setdefault('PixelL2GKernelName','l2g_pixel_tool')
18  kwarg.setdefault('StripL2GKernelName','l2g_strip_tool')
19  kwarg.setdefault('EDMPrepKernelName', 'EDMPrep')
20  kwarg.setdefault('PixelEDMPrepKernelName', 'PixelEDMPrep')
21  kwarg.setdefault('StripEDMPrepKernelName', 'StripEDMPrep')
22  kwarg.setdefault('doF110', flags.FPGADataPrep.doF110)
23 
24  if ("isRoI_Seeded" in kwarg) and kwarg["isRoI_Seeded"]:
25  if 'RegSelTool' not in kwarg:
26  from RegionSelector.RegSelToolConfig import regSelTool_ITkPixel_Cfg
27  kwarg.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkPixel_Cfg(flags)))
28 
29  # Set up Chrono service
30  acc.addService(CompFactory.ChronoStatSvc(
31  PrintUserTime = True,
32  PrintSystemTime = True,
33  PrintEllapsedTime = True
34  ))
35 
36  acc.addEventAlgo(CompFactory.EFTrackingFPGAIntegration.F100IntegrationAlg(name, **kwarg))
37 
38  return acc
39 
40 def F110IntegrationCfg(flags, name = 'F110IntegrationAlg', **kwarg):
41  acc = ComponentAccumulator()
42 
43  kwarg.setdefault('bdfID', flags.FPGADataPrep.bdfID) # On the testbed
44  kwarg.setdefault('xclbin', flags.FPGADataPrep.xclbin)
45  kwarg.setdefault('PixelClusterKernelName','pixel_clustering_tool')
46  kwarg.setdefault('StripClusterKernelName','processHits')
47  kwarg.setdefault('StripL2GKernelName','l2g_strip_tool')
48  kwarg.setdefault('PixelEDMPrepKernelName', 'PixelEDMPrep')
49  kwarg.setdefault('StripEDMPrepKernelName', 'StripEDMPrep')
50 
51  if ("isRoI_Seeded" in kwarg) and kwarg["isRoI_Seeded"]:
52  if 'RegSelTool' not in kwarg:
53  from RegionSelector.RegSelToolConfig import regSelTool_ITkPixel_Cfg
54  kwarg.setdefault('RegSelTool', acc.popToolsAndMerge(regSelTool_ITkPixel_Cfg(flags)))
55 
56  # Set up Chrono service
57  acc.addService(CompFactory.ChronoStatSvc(
58  PrintUserTime = True,
59  PrintSystemTime = True,
60  PrintEllapsedTime = True
61  ))
62 
63  acc.addEventAlgo(CompFactory.EFTrackingFPGAIntegration.F110IntegrationAlg(name, **kwarg))
64 
65  return acc
66 
67 
68 def F100DataEncodingCfg(flags, name = 'F100DataEncodingAlg', **kwarg):
69  acc = ComponentAccumulator()
70 
71  # Set up Cluster maker tool
72  if("FPGADataFormatTool" not in kwarg):
73  from EFTrackingFPGAPipeline.DataPrepConfig import FPGADataFormatToolCfg
74  dataFormatTool = acc.popToolsAndMerge(FPGADataFormatToolCfg(flags))
75  kwarg.setdefault('FPGADataFormatTool', dataFormatTool)
76 
77  kwarg.setdefault('isRoI_Seeded', False)
78 
79  acc.addEventAlgo(CompFactory.EFTrackingFPGAIntegration.F100DataEncodingAlg(name, **kwarg))
80 
81  return acc
82 
83 def F100EDMConversionCfg(flags, name = 'F100EDMConversionAlg', **kwarg):
84  acc = ComponentAccumulator()
85 
86  # Set up Cluster maker tool
87  if("xAODClusterMaker" not in kwarg):
88  from EFTrackingFPGAPipeline.DataPrepConfig import xAODClusterMakerCfg
89  clusterMakerTool = acc.popToolsAndMerge(xAODClusterMakerCfg(flags))
90  kwarg.setdefault('xAODClusterMaker', clusterMakerTool)
91 
92  acc.addEventAlgo(CompFactory.EFTrackingFPGAIntegration.F100EDMConversionAlg(name, **kwarg))
93 
94  return acc
95 
96 
97 def FPGAClusterSortingCfg(flags,**kwargs):
98  acc = ComponentAccumulator()
99  from FPGAClusterSorting.FPGAClusterSortingConfig import FPGAClusterSortingAlgCfg
100  ClusterSorting = FPGAClusterSortingAlgCfg(flags,**kwargs)
101 
102  acc.merge(ClusterSorting)
103  return acc
104 
105 def F100FlagsCfg(flags):
106  flags.Scheduler.ShowDataDeps=True
107  flags.Scheduler.CheckDependencies=True
108  flags.Debug.DumpEvtStore=False
109 
110  return flags
111 
112 
113 def FPGADataPreparation(flags,runStandalone=False): # thsi is used to run the F100 through Reco_tf
114  kwargs = {}
115  kwargs.setdefault('FPGAThreads', flags.Concurrency.NumThreads)
116  acc = ComponentAccumulator()
117  acc.merge(F100DataEncodingCfg(flags))
118 
119  if(flags.FPGADataPrep.doCodeType == "F100"):
120  acc.merge(F100IntegrationCfg(flags, "F100IntegrationAlg", **kwargs))
121  elif(flags.FPGADataPrep.doCodeType == "F110"):
122  acc.merge(F110IntegrationCfg(flags, "F110IntegrationAlg", **kwargs))
123 
124  acc.merge(F100EDMConversionCfg(flags))
125  acc.merge(FPGAClusterSortingCfg(flags,**{'sortedxAODPixelClusterContainer': 'SortedFPGAPixelClusters' if runStandalone else 'ITkPixelClusters',
126  'sortedxAODStripClusterContainer': 'SortedFPGAStripClusters' if runStandalone else 'ITkStripClusters'}))
127 
128  if(not runStandalone):
129  from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
130  acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
131 
132  from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import ITkStripDetectorElementStatusAlgCfg
133  acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
134 
135  if flags.Acts.EDM.PersistifyClusters or flags.Acts.EDM.PersistifySpacePoints:
136  toAOD = []
137 
138  pixel_cluster_shortlist = ['-pixelClusterLink']
139  strip_cluster_shortlist = ['-sctClusterLink']
140 
141  pixel_cluster_variables = '.'.join(pixel_cluster_shortlist)
142  strip_cluster_variables = '.'.join(strip_cluster_shortlist)
143 
144  toAOD += ['xAOD::PixelClusterContainer#ITkPixelClusters',
145  'xAOD::PixelClusterAuxContainer#ITkPixelClustersAux.' + pixel_cluster_variables,
146  'xAOD::StripClusterContainer#ITkStripClusters',
147  'xAOD::StripClusterAuxContainer#ITkStripClustersAux.' + strip_cluster_variables]
148  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
149  acc.merge(addToAOD(flags, toAOD))
150  return acc
151 
152 
153 
154 
155 
156 if __name__ == "__main__":
157  from AthenaConfiguration.AllConfigFlags import initConfigFlags
158  flags = initConfigFlags()
159 
160  flags.Detector.EnableCalo = False
161  flags.FPGADataPrep.DoActs = True
162  flags.Acts.doRotCorrection = False
163 
164  flags.Concurrency.NumThreads = 1
165  flags.Input.Files = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/EFTracking/ATLAS-P2-RUN4-03-00-00/RDO/reg0_singlemu.root"]
166  # 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"]
167  flags.Output.AODFileName = "FPGA.Benchmark.AOD.pool.root"
168  flags.Debug.DumpEvtStore=False
169  flags.fillFromArgs()
170 
171  if(not flags.FPGADataPrep.ForTiming):
172  # DataPreparation Pipeline doesn't do spacepoint fomration, we need ACTS to do it
173  flags.FPGADataPrep.PassThrough.ClusterOnly = True
174  # For Spacepoint formation
175  if flags.FPGADataPrep.PassThrough.ClusterOnly:
176  flags.Acts.useCache = False
177  flags.Tracking.ITkMainPass.doActsSeed = True
178 
179  flags.Tracking.ITkMainPass.doAthenaToActsCluster = True
180  flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint = True
181  flags.Tracking.ITkMainPass.doAthenaSpacePoint = True
182  else:
183  flags.Tracking.doTruth=False
184  flags.ITk.doTruth=False
185  flags.InDet.doTruth=False
186 
187  flags.lock()
188  flags = flags.cloneAndReplace("Tracking.ActiveConfig", "Tracking.ITkMainPass", keepOriginal=True)
189 
190  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
191  cfg = MainServicesCfg(flags)
192 
193  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
194  cfg.merge(PoolReadCfg(flags))
195 
196  if(not flags.FPGADataPrep.ForTiming):
197  #Truth
198  if flags.Input.isMC:
199  from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
200  cfg.merge(GEN_AOD2xAODCfg(flags))
201 
202  # Standard reco
203  from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
204  cfg.merge(ITkTrackRecoCfg(flags))
205 
206  from InDetConfig.InDetPrepRawDataToxAODConfig import TruthParticleIndexDecoratorAlgCfg
207  cfg.merge( TruthParticleIndexDecoratorAlgCfg(flags) )
208 
209  else:
210  from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
211  cfg.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
212 
213  cfg.merge(FPGADataPreparation(flags,runStandalone=True))
214 
215  OutputItemList = []
216  # # Connection to ACTS
217  if flags.FPGADataPrep.DoActs:
218 
219  # convert xAOD Clusters to SPs
220  from EFTrackingFPGAUtility.DataPrepToActsConfig import UseActsSpacePointFormationCfg
221  cfg.merge(UseActsSpacePointFormationCfg(flags))
222 
223 
224  # Run the ACTS Fast Tracking on FPGA clusters
225  from FPGATrackSimConfTools.FPGATrackSimDataPrepConfig import FPGATrackSimDataPrepConnectToFastTracking
226  cfg.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="FPGA",
227  **{'PixelSeedingAlg.InputSpacePoints' : ['FPGAPixelSpacePoints'],
228  'StripSeedingAlg.InputSpacePoints' : [''],
229  'TrackFindingAlg.UncalibratedMeasurementContainerKeys' : ["SortedFPGAPixelClusters","SortedFPGAStripClusters"],
230  'PixelClusterToTruthAssociationAlg.Measurements' : 'SortedFPGAPixelClusters',
231  'StripClusterToTruthAssociationAlg.Measurements' : 'SortedFPGAStripClusters'}))
232  if(not flags.FPGADataPrep.ForTiming):
233 
234  # Run the ACTS Fast Tracking (C-100) as an additional reference
235  cfg.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="ActsFast"))
236 
237  OutputItemList += [
238  "xAOD::TrackParticleContainer#FPGATrackParticles",
239  "xAOD::TrackParticleAuxContainer#FPGATrackParticlesAux."
240  ]
241 
242 
243  if(not flags.FPGADataPrep.ForTiming):
244  OutputItemList += [
245  "xAOD::StripClusterContainer#FPGAStripClusters",
246  "xAOD::StripClusterAuxContainer#FPGAStripClustersAux.",
247  "xAOD::PixelClusterContainer#FPGAPixelClusters",
248  "xAOD::PixelClusterAuxContainer#FPGAPixelClustersAux.",
249  ]
250 
251  from EFTrackingFPGAOutputValidation.FPGAOutputValidationConfig import FPGAOutputValidationCfg
252  cfg.merge(FPGAOutputValidationCfg(flags, **{
253  "pixelKeys": ["FPGAPixelClusters", "ITkPixelClusters"],
254  "stripKeys": ["FPGAStripClusters", "ITkStripClusters"],
255  'doDiffHistograms':True,
256  'matchByID' : False,
257  'allowedRdoMisses': 1000}))
258 
259 
260  # Prepare output
261  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
262  from AthenaConfiguration.Enums import MetadataCategory
263  cfg.merge(SetupMetaDataForStreamCfg(flags,"AOD",
264  createMetadata=[
265  MetadataCategory.ByteStreamMetaData,
266  MetadataCategory.LumiBlockMetaData,
267  MetadataCategory.TruthMetaData,
268  MetadataCategory.IOVMetaData,],))
269 
270  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
271  cfg.merge(addToAOD(flags, OutputItemList))
272 
273  flags.dump()
274 
275  from AthenaCommon.Constants import DEBUG
276  cfg.foreach_component("AthEventSeq/*").OutputLevel = DEBUG
277  cfg.printConfig(withDetails=True, summariseProps=True)
278  cfg.store(open("F100IntegrationAlg.pkl", "wb"))
279  cfg.run(flags.Exec.MaxEvents)
280 
281 
282 
python.ITkTrackRecoConfig.ITkTrackRecoCfg
ComponentAccumulator ITkTrackRecoCfg(flags)
Main ITk tracking config #####################.
Definition: ITkTrackRecoConfig.py:512
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
ITkPixelConditionsConfig.ITkPixelDetectorElementStatusAlgCfg
def ITkPixelDetectorElementStatusAlgCfg(flags, name="ITkPixelDetectorElementStatusAlg", **kwargs)
Definition: ITkPixelConditionsConfig.py:178
xAODTruthCnvConfig.GEN_AOD2xAODCfg
def GEN_AOD2xAODCfg(flags, name="GEN_AOD2xAOD", **kwargs)
Definition: xAODTruthCnvConfig.py:20
F100IntegrationConfig.F100DataEncodingCfg
def F100DataEncodingCfg(flags, name='F100DataEncodingAlg', **kwarg)
Definition: F100IntegrationConfig.py:68
FPGAClusterSortingConfig.FPGAClusterSortingAlgCfg
def FPGAClusterSortingAlgCfg(flags, name="FPGAClusterSortingAlg", **kwargs)
Definition: FPGAClusterSortingConfig.py:6
DataPrepConfig.FPGADataFormatToolCfg
def FPGADataFormatToolCfg(flags, name='FPGADataFormatTool', **kwargs)
Definition: DataPrepConfig.py:25
python.InDetPrepRawDataToxAODConfig.TruthParticleIndexDecoratorAlgCfg
def TruthParticleIndexDecoratorAlgCfg(flags, name='TruthParticleIndexDecoratorAlg', **kwargs)
Definition: InDetPrepRawDataToxAODConfig.py:6
RegSelToolConfig.regSelTool_ITkPixel_Cfg
def regSelTool_ITkPixel_Cfg(flags)
Definition: RegSelToolConfig.py:120
python.ITkStripConditionsAlgorithmsConfig.ITkStripDetectorElementStatusAlgCfg
def ITkStripDetectorElementStatusAlgCfg(flags, name="ITkStripDetectorElementStatusAlg", **kwargs)
Definition: ITkStripConditionsAlgorithmsConfig.py:91
F100IntegrationConfig.FPGAClusterSortingCfg
def FPGAClusterSortingCfg(flags, **kwargs)
Definition: F100IntegrationConfig.py:97
F100IntegrationConfig.FPGADataPreparation
def FPGADataPreparation(flags, runStandalone=False)
Definition: F100IntegrationConfig.py:113
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
Constants
some useful constants -------------------------------------------------—
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
F100IntegrationConfig.F100IntegrationCfg
def F100IntegrationCfg(flags, name='F100IntegrationAlg', **kwarg)
Definition: F100IntegrationConfig.py:7
python.FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepConnectToFastTracking
def FPGATrackSimDataPrepConnectToFastTracking(flagsIn, FinalTracks="F100-", **kwargs)
Definition: FPGATrackSimDataPrepConfig.py:429
DataPrepConfig.xAODClusterMakerCfg
def xAODClusterMakerCfg(flags, name='xAODClusterMaker', **kwarg)
Definition: DataPrepConfig.py:31
DataPrepToActsConfig.UseActsSpacePointFormationCfg
ComponentAccumulator UseActsSpacePointFormationCfg(flags, **kwargs)
Definition: DataPrepToActsConfig.py:12
Trk::open
@ open
Definition: BinningType.h:40
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:150
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
F100IntegrationConfig.F110IntegrationCfg
def F110IntegrationCfg(flags, name='F110IntegrationAlg', **kwarg)
Definition: F100IntegrationConfig.py:40
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:71
F100IntegrationConfig.F100FlagsCfg
def F100FlagsCfg(flags)
Definition: F100IntegrationConfig.py:105
FPGAOutputValidationConfig.FPGAOutputValidationCfg
def FPGAOutputValidationCfg(flags, **kwargs)
Definition: FPGAOutputValidationConfig.py:3
F100IntegrationConfig.F100EDMConversionCfg
def F100EDMConversionCfg(flags, name='F100EDMConversionAlg', **kwarg)
Definition: F100IntegrationConfig.py:83