ATLAS Offline Software
FPGADataFormatter.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 from AthenaCommon.Constants import DEBUG
6 
7 def FPGADataFormatToolCfg(flags, name = 'FPGADataFormatTool', **kwarg):
8 
10 
11  kwarg.setdefault('name', name)
12  acc.setPrivateTools(CompFactory.FPGADataFormatTool(**kwarg))
13 
14  return acc
15 
16 def 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 
25 def 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 
34 def 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 
46 def 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 
61 def 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 
85 if __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)
python.ITkTrackRecoConfig.ITkTrackRecoCfg
ComponentAccumulator ITkTrackRecoCfg(flags)
Main ITk tracking config #####################.
Definition: ITkTrackRecoConfig.py:512
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
xAODTruthCnvConfig.GEN_AOD2xAODCfg
def GEN_AOD2xAODCfg(flags, name="GEN_AOD2xAOD", **kwargs)
Definition: xAODTruthCnvConfig.py:20
FPGADataFormatter.xAODClusterMakerCfg
def xAODClusterMakerCfg(flags, name='xAODClusterMaker', **kwarg)
Definition: FPGADataFormatter.py:34
FPGADataFormatter.FPGAFormatterPrepCfg
def FPGAFormatterPrepCfg(flags, name="FPGAFormatterPrep", **kwarg)
Definition: FPGADataFormatter.py:61
FPGADataFormatter.FPGATestVectorToolCfg
def FPGATestVectorToolCfg(flags, name='FPGATestVectorTool', **kwarg)
Definition: FPGADataFormatter.py:16
FPGADataFormatter.FPGAOutputConversionToolCfg
def FPGAOutputConversionToolCfg(flags, name='FPGAOutputConversionTool', **kwarg)
Definition: FPGADataFormatter.py:25
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
Constants
some useful constants -------------------------------------------------—
IntegrationConfigFlag.addClusterMakerFlags
def addClusterMakerFlags(flags)
Definition: IntegrationConfigFlag.py:32
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
FPGADataFormatter.FPGADataFormatToolCfg
def FPGADataFormatToolCfg(flags, name='FPGADataFormatTool', **kwarg)
Definition: FPGADataFormatter.py:7
FPGADataFormatter.xAODSpacePointMakerCfg
def xAODSpacePointMakerCfg(flags, name='xAODSpacePointMaker', **kwarg)
Definition: FPGADataFormatter.py:46
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:150
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