ATLAS Offline Software
F150IntegrationConfig.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 F150IntegrationCfg(flags, name = 'F1X0IntegrationAlg', **kwarg):
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', 'mem_read')
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 
34 
35 
36 def FPGA150Pipeline(flags, runStandalone=False): # thsi is used to run the F100 through Reco_tf
37  kwargs = {}
38  kwargs.setdefault('FPGAThreads', flags.Concurrency.NumThreads)
39  acc = ComponentAccumulator()
40  from EFTrackingFPGAPipeline.F100IntegrationConfig import F100DataEncodingCfg, F100EDMConversionCfg, FPGAClusterSortingCfg
41  acc.merge(F100DataEncodingCfg(flags))
42 
43  acc.merge(F150IntegrationCfg(flags, "F150IntegrationAlg", **kwargs))
44 
45  acc.merge(F100EDMConversionCfg(flags))
46  acc.merge(FPGAClusterSortingCfg(flags,**{'sortedxAODPixelClusterContainer': 'SortedFPGAPixelClusters' if runStandalone else 'ITkPixelClusters',
47  'sortedxAODStripClusterContainer': 'SortedFPGAStripClusters' if runStandalone else 'ITkStripClusters'}))
48 
49  if(not runStandalone):
50  if(not flags.FPGADataPrep.ForTiming):
51  from FPGATrackSimReporting.FPGATrackSimReportingConfig import FPGATrackSimReportingCfg
52  acc.merge(FPGATrackSimReportingCfg(flags,
53  perEventReports = False, # set to True if per-event information is needed for debugging (e.g. cluster, tracks). Otherwise it produces a lot of output
54  **{'xAODPixelClusterContainers' : ['ITkPixelClusters'],
55  'xAODStripClusterContainers' : ['ITkStripClusters'],
56  'FPGAActsTracks' : [f'{flags.Tracking.ActiveConfig.extension}Tracks',f'SiSPTracksSeedSegments{flags.Tracking.ActiveConfig.extension}PixelTracks'],
57  'isDataPrep': True} ))
58 
59  from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
60  acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
61 
62  from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import ITkStripDetectorElementStatusAlgCfg
63  acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
64 
65  if flags.Acts.EDM.PersistifyClusters or flags.Acts.EDM.PersistifySpacePoints:
66  toAOD = []
67 
68  pixel_cluster_shortlist = ['-pixelClusterLink']
69  strip_cluster_shortlist = ['-sctClusterLink']
70 
71  pixel_cluster_variables = '.'.join(pixel_cluster_shortlist)
72  strip_cluster_variables = '.'.join(strip_cluster_shortlist)
73 
74  toAOD += ['xAOD::PixelClusterContainer#ITkPixelClusters',
75  'xAOD::PixelClusterAuxContainer#ITkPixelClustersAux.' + pixel_cluster_variables,
76  'xAOD::StripClusterContainer#ITkStripClusters',
77  'xAOD::StripClusterAuxContainer#ITkStripClustersAux.' + strip_cluster_variables]
78  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
79  acc.merge(addToAOD(flags, toAOD))
80  return acc
81 
82 
83 
84 
85 
86 if __name__ == "__main__":
87  from AthenaConfiguration.AllConfigFlags import initConfigFlags
88  flags = initConfigFlags()
89 
90  flags.Detector.EnableCalo = False
91  flags.FPGADataPrep.DoActs = True
92  flags.Acts.doRotCorrection = False
93 
94  flags.Concurrency.NumThreads = 1
95  flags.Input.Files = ["/eos/project-a/atlas-eftracking/AODfiles_EFTrackPerf/Region34SingleMuon/output.rdo.000012.0.root"]
96  # 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"]
97  flags.Output.AODFileName = "FPGA.Benchmark.AOD.pool.root"
98  flags.Debug.DumpEvtStore=False
99  flags.fillFromArgs()
100 
101  if(not flags.FPGADataPrep.ForTiming):
102  # DataPreparation Pipeline doesn't do spacepoint fomration, we need ACTS to do it
103  flags.FPGADataPrep.PassThrough.ClusterOnly = True
104  # For Spacepoint formation
105  if flags.FPGADataPrep.PassThrough.ClusterOnly:
106  flags.Acts.useCache = False
107  flags.Tracking.ITkMainPass.doActsSeed = True
108 
109  flags.Tracking.ITkMainPass.doAthenaToActsCluster = True
110  flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint = True
111  flags.Tracking.ITkMainPass.doAthenaSpacePoint = True
112  else:
113  flags.Tracking.doTruth=False
114  flags.ITk.doTruth=False
115  flags.InDet.doTruth=False
116 
117  flags.lock()
118  flags = flags.cloneAndReplace("Tracking.ActiveConfig", "Tracking.ITkMainPass", keepOriginal=True)
119 
120  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
121  cfg = MainServicesCfg(flags)
122 
123  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
124  cfg.merge(PoolReadCfg(flags))
125 
126  if(not flags.FPGADataPrep.ForTiming):
127  #Truth
128  if flags.Input.isMC:
129  from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
130  cfg.merge(GEN_AOD2xAODCfg(flags))
131 
132  # Standard reco
133  from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
134  cfg.merge(ITkTrackRecoCfg(flags))
135 
136  from InDetConfig.InDetPrepRawDataToxAODConfig import TruthParticleIndexDecoratorAlgCfg
137  cfg.merge( TruthParticleIndexDecoratorAlgCfg(flags) )
138 
139  else:
140  from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
141  cfg.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
142 
143  cfg.merge(FPGA150Pipeline(flags,runStandalone=True))
144 
145  OutputItemList = []
146  # # Connection to ACTS
147  if flags.FPGADataPrep.DoActs:
148 
149  # convert xAOD Clusters to SPs
150  from EFTrackingFPGAUtility.DataPrepToActsConfig import UseActsSpacePointFormationCfg
151  cfg.merge(UseActsSpacePointFormationCfg(flags))
152 
153 
154  # Run the ACTS Fast Tracking on FPGA clusters
155  from FPGATrackSimConfTools.FPGATrackSimDataPrepConfig import FPGATrackSimDataPrepConnectToFastTracking
156  cfg.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="FPGA",
157  **{'PixelSeedingAlg.InputSpacePoints' : ['FPGAPixelSpacePoints'],
158  'StripSeedingAlg.InputSpacePoints' : [''],
159  'TrackFindingAlg.UncalibratedMeasurementContainerKeys' : ["SortedFPGAPixelClusters","SortedFPGAStripClusters"],
160  'PixelClusterToTruthAssociationAlg.Measurements' : 'SortedFPGAPixelClusters',
161  'StripClusterToTruthAssociationAlg.Measurements' : 'SortedFPGAStripClusters'}))
162  if(not flags.FPGADataPrep.ForTiming):
163 
164  # Run the ACTS Fast Tracking (C-100) as an additional reference
165  cfg.merge(FPGATrackSimDataPrepConnectToFastTracking(flags, FinalTracks="ActsFast"))
166 
167  OutputItemList += [
168  "xAOD::TrackParticleContainer#FPGATrackParticles",
169  "xAOD::TrackParticleAuxContainer#FPGATrackParticlesAux."
170  ]
171 
172 
173  if(not flags.FPGADataPrep.ForTiming):
174  OutputItemList += [
175  "xAOD::StripClusterContainer#FPGAStripClusters",
176  "xAOD::StripClusterAuxContainer#FPGAStripClustersAux.",
177  "xAOD::PixelClusterContainer#FPGAPixelClusters",
178  "xAOD::PixelClusterAuxContainer#FPGAPixelClustersAux.",
179  ]
180 
181  from EFTrackingFPGAOutputValidation.FPGAOutputValidationConfig import FPGAOutputValidationCfg
182  cfg.merge(FPGAOutputValidationCfg(flags, **{
183  "pixelKeys": ["FPGAPixelClusters", "ITkPixelClusters"],
184  "stripKeys": ["FPGAStripClusters", "ITkStripClusters"],
185  'doDiffHistograms':True,
186  'matchByID' : False,
187  'allowedRdoMisses': 1000}))
188 
189 
190  # Prepare output
191  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
192  from AthenaConfiguration.Enums import MetadataCategory
193  cfg.merge(SetupMetaDataForStreamCfg(flags,"AOD",
194  createMetadata=[
195  MetadataCategory.ByteStreamMetaData,
196  MetadataCategory.LumiBlockMetaData,
197  MetadataCategory.TruthMetaData,
198  MetadataCategory.IOVMetaData,],))
199 
200  from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
201  cfg.merge(addToAOD(flags, OutputItemList))
202 
203  flags.dump()
204 
205  from AthenaCommon.Constants import DEBUG
206  cfg.foreach_component("AthEventSeq/*").OutputLevel = DEBUG
207  cfg.printConfig(withDetails=True, summariseProps=True)
208  cfg.store(open("F100IntegrationAlg.pkl", "wb"))
209  cfg.run(flags.Exec.MaxEvents)
210 
211 
212 
python.ITkTrackRecoConfig.ITkTrackRecoCfg
ComponentAccumulator ITkTrackRecoCfg(flags)
Main ITk tracking config #####################.
Definition: ITkTrackRecoConfig.py:514
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:342
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:22
F100IntegrationConfig.F100DataEncodingCfg
def F100DataEncodingCfg(flags, name='F100DataEncodingAlg', **kwarg)
Definition: F100IntegrationConfig.py:167
python.InDetPrepRawDataToxAODConfig.TruthParticleIndexDecoratorAlgCfg
def TruthParticleIndexDecoratorAlgCfg(flags, name='TruthParticleIndexDecoratorAlg', **kwargs)
Definition: InDetPrepRawDataToxAODConfig.py:6
python.ITkStripConditionsAlgorithmsConfig.ITkStripDetectorElementStatusAlgCfg
def ITkStripDetectorElementStatusAlgCfg(flags, name="ITkStripDetectorElementStatusAlg", **kwargs)
Definition: ITkStripConditionsAlgorithmsConfig.py:91
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:310
Constants
some useful constants -------------------------------------------------—
BenchmarkConfig.FPGAClusterSortingCfg
def FPGAClusterSortingCfg(flags)
Definition: BenchmarkConfig.py:43
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.FPGATrackSimDataPrepConfig.FPGATrackSimDataPrepConnectToFastTracking
def FPGATrackSimDataPrepConnectToFastTracking(flagsIn, FinalTracks="F100-", **kwargs)
Definition: FPGATrackSimDataPrepConfig.py:442
DataPrepToActsConfig.UseActsSpacePointFormationCfg
ComponentAccumulator UseActsSpacePointFormationCfg(flags, **kwargs)
Definition: DataPrepToActsConfig.py:12
Trk::open
@ open
Definition: BinningType.h:40
F150IntegrationConfig.FPGA150Pipeline
def FPGA150Pipeline(flags, runStandalone=False)
Definition: F150IntegrationConfig.py:36
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:202
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:567
DataPrepConfig.FPGATrackSimReportingCfg
def FPGATrackSimReportingCfg(flags, name='FPGATrackSimReportingAlg', **kwargs)
Definition: DataPrepConfig.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
F150IntegrationConfig.F150IntegrationCfg
def F150IntegrationCfg(flags, name='F1X0IntegrationAlg', **kwarg)
Definition: F150IntegrationConfig.py:7
F100IntegrationConfig.F100EDMConversionCfg
def F100EDMConversionCfg(flags, name='F100EDMConversionAlg', **kwarg)
Definition: F100IntegrationConfig.py:182