ATLAS Offline Software
Loading...
Searching...
No Matches
FPGADataFormatter.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
5from AthenaCommon.Constants import DEBUG
6
7def FPGADataFormatToolCfg(flags, name = 'FPGADataFormatTool', **kwarg):
8
9 acc = ComponentAccumulator()
10
11 kwarg.setdefault('name', name)
12 acc.setPrivateTools(CompFactory.FPGADataFormatTool(**kwarg))
13
14 return acc
15
16def FPGATestVectorToolCfg(flags, name = 'FPGATestVectorTool', **kwarg):
17
18 acc = ComponentAccumulator()
19
20 kwarg.setdefault('name', name)
21 acc.setPrivateTools(CompFactory.TestVectorTool(**kwarg))
22
23 return acc
24
25def FPGAOutputConversionToolCfg(flags, name = 'FPGAOutputConversionTool', **kwarg):
26
27 acc = ComponentAccumulator()
28
29 kwarg.setdefault('name', name)
30 acc.setPrivateTools(CompFactory.OutputConversionTool(**kwarg))
31
32 return acc
33
34def xAODClusterMakerCfg(flags, name = 'xAODClusterMaker', **kwarg):
35 """Configure the xAODClusterMaker tool"""
36
37 acc = ComponentAccumulator()
38
39 kwarg.setdefault('PixelClusterContainerKey', 'FPGAPixelClusters')
40 kwarg.setdefault('StripClusterContainerKey', 'FPGAStripClusters')
41 kwarg.setdefault('DoBulkCopy', flags.ClusterMaker.DoBulkCopy)
42
43 acc.setPrivateTools(CompFactory.xAODClusterMaker(name, **kwarg))
44 return acc
45
46def xAODSpacePointMakerCfg(flags, name = 'xAODSpacePointMaker', **kwarg):
47 """Configure the xAODSpacePointMaker tool"""
48
49 acc = ComponentAccumulator()
50
51 # Input clusters to read from
52 kwarg.setdefault('PixelClusterContainerKey', 'FPGAPixelClusters')
53 kwarg.setdefault('StripClusterContainerKey', 'FPGAStripClusters')
54 # Output space points to create
55 kwarg.setdefault('PixelSpacePointContainerKey', 'FPGAPixelSpacePoints')
56 kwarg.setdefault('StripSpacePointContainerKey', 'FPGAStripSpacePoints')
57
58 acc.setPrivateTools(CompFactory.xAODSpacePointMaker(name, **kwarg))
59 return acc
60
61def FPGAFormatterPrepCfg(flags, name = "FPGAFormatterPrep", **kwarg):
62
63 acc = ComponentAccumulator()
64
65 tool = acc.popToolsAndMerge(FPGADataFormatToolCfg(flags))
66 tvTool = acc.popToolsAndMerge(FPGATestVectorToolCfg(flags))
67 outputTool = acc.popToolsAndMerge(FPGAOutputConversionToolCfg(flags))
68 clusterMakerTool = acc.popToolsAndMerge(xAODClusterMakerCfg(flags))
69 spacePointMakerTool = acc.popToolsAndMerge(xAODSpacePointMakerCfg(flags))
70
71 kwarg.setdefault('name', name)
72 kwarg.setdefault('FPGADataFormatTool', tool)
73 kwarg.setdefault('TestVectorTool', tvTool)
74 kwarg.setdefault('OutputConversionTool', outputTool)
75 kwarg.setdefault('xAODClusterMaker', clusterMakerTool)
76 kwarg.setdefault('xAODSpacePointMaker', spacePointMakerTool)
77
78 kwarg.setdefault('PixelEDMRefTV', '')
79 kwarg.setdefault('StripEDMRefTV', '')
80 kwarg.setdefault('SpacePointRefTV', '')
81
82 acc.addEventAlgo(CompFactory.FPGADataFormatAlg(**kwarg))
83 return acc
84
85if __name__=="__main__":
86 from AthenaConfiguration.AllConfigFlags import initConfigFlags
87 from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
88 from EFTrackingFPGAPipeline.IntegrationConfigFlag import addClusterMakerFlags
89
90 flags = initConfigFlags()
91 flags = addClusterMakerFlags(flags)
92 flags.Concurrency.NumThreads = 1
93 # Use a dummy input file for the EventInfo
94 flags.Input.Files = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/RDO/ATLAS-P2-RUN4-03-00-00/mc21_14TeV.900498.PG_single_muonpm_Pt100_etaFlatnp0_43.recon.RDO.e8481_s4149_r14697/RDO.33675668._000016.pool.root.1"]
95 flags.Output.AODFileName = "ConversionAOD.pool.root"
96
97 # Disable calo for this test
98 flags.Detector.EnableCalo = False
99
100 # set flag for the bulk-copy container creation method
101 flags.ClusterMaker.DoBulkCopy = False
102
103 # ensure that the xAOD SP and cluster containers are available
104 flags.Tracking.ITkMainPass.doAthenaToActsSpacePoint=True
105 flags.Tracking.ITkMainPass.doAthenaToActsCluster=True
106
107 flags.Acts.doRotCorrection = False
108
109 flags.Debug.DumpEvtStore = True
110 flags.lock()
111 flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
112
113 # Main services
114 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
115 top_acc = MainServicesCfg(flags)
116
117 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
118 top_acc.merge(PoolReadCfg(flags))
119
120 #Truth
121 if flags.Input.isMC:
122 from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
123 top_acc.merge(GEN_AOD2xAODCfg(flags))
124
125 # Standard reco
126 top_acc.merge(ITkTrackRecoCfg(flags))
127
128 kwarg = {}
129 kwarg["OutputLevel"] = DEBUG
130
131 acc = FPGAFormatterPrepCfg(flags, **kwarg)
132
133 # Prepare output
134 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
135 from AthenaConfiguration.Enums import MetadataCategory
136 top_acc.merge(SetupMetaDataForStreamCfg(flags,"AOD",
137 createMetadata=[
138 MetadataCategory.ByteStreamMetaData,
139 MetadataCategory.LumiBlockMetaData,
140 MetadataCategory.TruthMetaData,
141 MetadataCategory.IOVMetaData,],))
142
143 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
144 OutputItemList = [
145 "xAOD::StripClusterContainer#FPGAStripClusters",
146 "xAOD::StripClusterAuxContainer#FPGAStripClustersAux.",
147 "xAOD::PixelClusterContainer#FPGAPixelClusters",
148 "xAOD::PixelClusterAuxContainer#FPGAPixelClustersAux.",
149 ]
150
151 top_acc.merge(addToAOD(flags, OutputItemList))
152
153 top_acc.merge(acc)
154
155 top_acc.run(1)
FPGAOutputConversionToolCfg(flags, name='FPGAOutputConversionTool', **kwarg)
xAODSpacePointMakerCfg(flags, name='xAODSpacePointMaker', **kwarg)
FPGAFormatterPrepCfg(flags, name="FPGAFormatterPrep", **kwarg)
xAODClusterMakerCfg(flags, name='xAODClusterMaker', **kwarg)
FPGADataFormatToolCfg(flags, name='FPGADataFormatTool', **kwarg)
FPGATestVectorToolCfg(flags, name='FPGATestVectorTool', **kwarg)