ATLAS Offline Software
Loading...
Searching...
No Matches
DataPrepConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentFactory import CompFactory
4from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
5
6def FPGATrackSimReportingCfg(flags, name='FPGATrackSimReportingAlg',**kwargs):
7
8 kwargs.setdefault('perEventReports', False)
9 kwargs.setdefault('xAODPixelClusterContainers',["ITkPixelClusters" ,"FPGAPixelClusters"])
10 kwargs.setdefault('xAODStripClusterContainers',["ITkStripClusters" ,"FPGAStripClusters"])
11 kwargs.setdefault('xAODSpacePointContainersFromFPGA',["FPGAPixelSpacePoints","FPGAStripSpacePoints", "FPGAStripOverlapSpacePoints", "ITkPixelSpacePoints","ITkStripSpacePoints", "ITkStripOverlapSpacePoints"])
12 kwargs.setdefault('FPGATrackSimTracks','FPGATracks_1st')
13 kwargs.setdefault('FPGATrackSimRoads','FPGARoads_1st')
14 kwargs.setdefault('FPGATrackSimProtoTracks',["ActsProtoTracks_1stFromFPGATrack"])
15 kwargs.setdefault('FPGAActsTracks',["FPGAActsTracks"])
16 kwargs.setdefault('FPGAActsSeeds',['FPGAPixelSeeds','FPGAStripSeeds'])
17 kwargs.setdefault('FPGAActsSeedsParam',['FPGAPixelEstimatedTrackParams','FPGAStripEstimatedTrackParams'])
18
19 acc = ComponentAccumulator()
20 from FPGATrackSimReporting.FPGATrackSimReportingConfig import FPGATrackSimReportingCfg
21 acc.merge(FPGATrackSimReportingCfg(flags, name=name,**kwargs))
22
23 return acc
24
25def FPGADataFormatToolCfg(flags, name='FPGADataFormatTool', **kwargs):
26 acc = ComponentAccumulator()
27 kwargs.setdefault('name', name)
28 acc.setPrivateTools(CompFactory.FPGADataFormatTool(**kwargs))
29 return acc
30
31def xAODClusterMakerCfg(flags, name = 'xAODClusterMaker', **kwarg):
32 """Configure the xAODClusterMaker tool"""
33
34 acc = ComponentAccumulator()
35
36 kwarg.setdefault('PixelClusterContainerKey', 'FPGAPixelClusters')
37 kwarg.setdefault('StripClusterContainerKey', 'FPGAStripClusters')
38 kwarg.setdefault('DoBulkCopy', True)
39
40 acc.setPrivateTools(CompFactory.xAODClusterMaker(name, **kwarg))
41 return acc
42
43def xAODSpacePointMakerCfg(flags, name = 'xAODSpacePointMaker', **kwarg):
44 """Configure the xAODSpacePointMaker tool"""
45
46 acc = ComponentAccumulator()
47
48 # Input clusters to read from
49 kwarg.setdefault('PixelClusterContainerKey', 'FPGAPixelClusters')
50 kwarg.setdefault('StripClusterContainerKey', 'FPGAStripClusters')
51 # Output space points to create
52 kwarg.setdefault('PixelSpacePointContainerKey', 'FPGAPixelSpacePoints')
53 kwarg.setdefault('StripSpacePointContainerKey', 'FPGAStripSpacePoints')
54
55 acc.setPrivateTools(CompFactory.xAODSpacePointMaker(name, **kwarg))
56 return acc
57
58def PassThroughToolCfg(flags, name = 'PassThroughTool', **kwarg):
59
60 acc = ComponentAccumulator()
61
62 kwarg.setdefault('name', name)
63 kwarg.setdefault('StripClusterContainerKey', 'ITkStripClusters')
64 kwarg.setdefault('PixelClusterContainerKey', 'ITkPixelClusters')
65 kwarg.setdefault('RunSW', flags.FPGADataPrep.PassThrough.RunSoftware)
66 kwarg.setdefault('ClusterOnlyPassThrough', flags.FPGADataPrep.PassThrough.ClusterOnly)
67 kwarg.setdefault('MaxClusterNum', flags.FPGADataPrep.PassThrough.MaxClusterNum)
68 kwarg.setdefault('MaxSpacePointNum', flags.FPGADataPrep.PassThrough.MaxSpacePointNum)
69
70 acc.setPrivateTools(CompFactory.PassThroughTool(**kwarg))
71 return acc
72
73def DataPrepCfg(flags, name = "DataPreparationPipeline", **kwarg):
74
75 acc = ComponentAccumulator()
76
77 # Configure both tools
78 clusterMakerTool = acc.popToolsAndMerge(xAODClusterMakerCfg(flags))
79 spacePointMakerTool = acc.popToolsAndMerge(xAODSpacePointMakerCfg(flags))
80 passThroughTool = acc.popToolsAndMerge(PassThroughToolCfg(flags))
81
82 kwarg.setdefault('name', name)
83 kwarg.setdefault('xAODClusterMaker', clusterMakerTool)
84 kwarg.setdefault('xAODSpacePointMaker', spacePointMakerTool)
85 kwarg.setdefault('PassThroughTool', passThroughTool)
86 # xclbin and kernels
87 kwarg.setdefault('xclbin', '')
88 kwarg.setdefault('PixelClusteringKernelName','')
89 kwarg.setdefault('SpacepointKernelName','')
90 kwarg.setdefault('PassThroughKernelName', '')
91 kwarg.setdefault('RunPassThrough', flags.FPGADataPrep.RunPassThrough)
92 # Test vectors
93 kwarg.setdefault('UseTV', flags.FPGADataPrep.FPGA.UseTV)
94 kwarg.setdefault('PixelClusterTV','')
95 kwarg.setdefault('PixelClusterRefTV','')
96 kwarg.setdefault('SpacepointTV','')
97 kwarg.setdefault('SpacepointRefTV','')
98
99 acc.addEventAlgo(CompFactory.DataPreparationPipeline(**kwarg))
100 return acc
101
102if __name__=="__main__":
103 from AthenaConfiguration.AllConfigFlags import initConfigFlags
104
105 flags = initConfigFlags()
106
107 # useful for testing -> /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/EFTracking/ATLAS-P2-RUN4-03-00-00/RDO/reg0_singlemu.root
108
109 # The input file should be specified by the user
110 flags.Input.Files = [""]
111
112 # Single muon with PU 200
113 flags.Input.Files = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/RDO/ATLAS-P2-RUN4-03-00-00/mc21_14TeV.900492.PG_single_muonpm_Pt1_etaFlatnp0_43.recon.RDO.e8481_s4149_r14697/RDO.33645151._000047.pool.root.1"]
114
115 # ttbar with PU 200
116 # 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"]
117
118 flags.Output.AODFileName = "DataPrepAOD.pool.root"
119
120 # For pass-through kernel
121 flags.FPGADataPrep.RunPassThrough = False
122 flags.FPGADataPrep.PassThrough.RunSoftware = True
123 flags.FPGADataPrep.PassThrough.ClusterOnly = True
124 # ensure that the xAOD SP and cluster containers are available
125 flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint=True
126 flags.Tracking.ITkMainPass.doAthenaToActsCluster=True
127 flags.Acts.useCache = False
128 flags.Tracking.ITkMainPass.doActsSeed=True
129
130 # Disable calo for this test
131 flags.Detector.EnableCalo = False
132
133
134
136 from InDetTrackPerfMon.InDetTrackPerfMonFlags import initializeIDTPMConfigFlags, initializeIDTPMTrkAnaConfigFlags
137 flags = initializeIDTPMConfigFlags(flags)
138
139 flags.PhysVal.IDTPM.outputFilePrefix = "myIDTPM_CA"
140 flags.PhysVal.IDTPM.plotsDefFileList = "InDetTrackPerfMon/PlotsDefFileList_default.txt" # default value - not needed
141 flags.PhysVal.IDTPM.plotsCommonValuesFile = "InDetTrackPerfMon/PlotsDefCommonValues.json" # default value - not needed
142 flags.PhysVal.OutputFileName = flags.PhysVal.IDTPM.outputFilePrefix + '.HIST.root' # automatically set in IDTPM config - not needed
143 flags.Output.doWriteAOD_IDTPM = True
144 flags.Output.AOD_IDTPMFileName = flags.PhysVal.IDTPM.outputFilePrefix + '.AOD_IDTPM.pool.root' # automatically set in IDTPM config - not needed
145 flags.PhysVal.IDTPM.trkAnaCfgFile = "InDetTrackPerfMon/EFTrkAnaConfig_example.json"
146
147 flags = initializeIDTPMTrkAnaConfigFlags(flags)
148
149 flags.PhysVal.IDTPM.TrkAnaEF.TrigTrkKey = "FPGATrackParticles"
150 flags.PhysVal.IDTPM.TrkAnaDoubleRatio.TrigTrkKey = "FPGATrackParticles"
151
152
153 flags.fillFromArgs()
154 flags.lock()
155 flags = flags.cloneAndReplace("Tracking.ActiveConfig", "Tracking.MainPass", keepOriginal=True)
156 flags = flags.cloneAndReplace("Tracking.ActiveConfig", "Tracking.ITkMainPass", keepOriginal=True)
157
158
159 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
160 cfg = MainServicesCfg(flags)
161
162 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
163 cfg.merge(PoolReadCfg(flags))
164
165 #Truth
166 if flags.Input.isMC:
167 from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
168 cfg.merge(GEN_AOD2xAODCfg(flags))
169
170 # Standard reco
171 from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
172 cfg.merge(ITkTrackRecoCfg(flags))
173
174 kwarg = {}
175 # The Data Preparation (F100) Pipeline on FPGA
176 cfg.merge(DataPrepCfg(flags, **kwarg))
177
178 # Connection to ACTS
179 if flags.FPGADataPrep.DoActs:
180 from EFTrackingFPGAUtility.DataPrepToActsConfig import DataPrepToActsCfg
181 cfg.merge(DataPrepToActsCfg(flags, **kwarg))
182
183 cfg.merge(FPGATrackSimReportingCfg(flags))
184
185 # IDTPM running
186 from InDetTrackPerfMon.InDetTrackPerfMonConfig import InDetTrackPerfMonCfg
187 cfg.merge( InDetTrackPerfMonCfg(flags) )
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 OutputItemList = [
202 "xAOD::StripClusterContainer#FPGAStripClusters",
203 "xAOD::StripClusterAuxContainer#FPGAStripClustersAux.",
204 "xAOD::PixelClusterContainer#FPGAPixelClusters",
205 "xAOD::PixelClusterAuxContainer#FPGAPixelClustersAux.",
206 "xAOD::SpacePointContainer#FPGAPixelSpacePoints",
207 "xAOD::SpacePointAuxContainer#FPGAPixelSpacePointsAux.-measurements",
208 "xAOD::SpacePointContainer#FPGAStripSpacePoints",
209 "xAOD::SpacePointAuxContainer#FPGAStripSpacePointsAux.-measurements",
210 "xAOD::TrackParticleContainer#FPGATrackParticles",
211 "xAOD::TrackParticleAuxContainer#FPGATrackParticlesAux."
212 ]
213
214 cfg.merge(addToAOD(flags, OutputItemList))
215
216 cfg.printConfig()
217
218 # When we use test vectors, we only need to run once
219 if not flags.FPGADataPrep.RunPassThrough and flags.FPGADataPrep.FPGA.UseTV:
220 cfg.run(1)
221 else:
222 cfg.run(-1)
xAODClusterMakerCfg(flags, name='xAODClusterMaker', **kwarg)
FPGADataFormatToolCfg(flags, name='FPGADataFormatTool', **kwargs)
PassThroughToolCfg(flags, name='PassThroughTool', **kwarg)
DataPrepCfg(flags, name="DataPreparationPipeline", **kwarg)
xAODSpacePointMakerCfg(flags, name='xAODSpacePointMaker', **kwarg)
FPGATrackSimReportingCfg(flags, name='FPGATrackSimReportingAlg', **kwargs)