56
57 decoderTools = []
58 outputEDM = []
59 maybeMissingRobs = []
60
61 from TrigT1ResultByteStream.TrigT1ResultByteStreamConfig import RoIBResultByteStreamToolCfg
62 roibResultTool = acc.popToolsAndMerge(RoIBResultByteStreamToolCfg(flags, name="RoIBResultBSDecoderTool", writeBS=False))
63 decoderTools += [roibResultTool]
64
65
66 for module_id in roibResultTool.L1TopoModuleIds:
67 maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_TOPO_PROC, module_id)))
68
69 for module_id in roibResultTool.JetModuleIds:
70 maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_JET_PROC_ROI, module_id)))
71
72 for module_id in roibResultTool.EMModuleIds:
73 maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_CLUSTER_PROC_ROI, module_id)))
74
75
76 def addEDM(edmType, edmName):
77 auxType = edmType.replace('Container','AuxContainer')
78 return [f'{edmType}#{edmName}', f'{auxType}#{edmName}Aux.']
79
80 if 'jFex' in subsystems:
81 from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import (
82 jFexRoiByteStreamToolCfg,jFexInputByteStreamToolCfg)
83
84
85 jFexTool = acc.popToolsAndMerge(jFexRoiByteStreamToolCfg(
86 flags, 'jFexBSDecoder', writeBS=False))
87
88 decoderTools += [jFexTool]
89 outputEDM += addEDM('xAOD::jFexSRJetRoIContainer',
90 jFexTool.jJRoIContainerWriteKey.Path)
91
92 outputEDM += addEDM('xAOD::jFexLRJetRoIContainer',
93 jFexTool.jLJRoIContainerWriteKey.Path)
94
95 outputEDM += addEDM('xAOD::jFexTauRoIContainer' ,
96 jFexTool.jTauRoIContainerWriteKey.Path)
97
98 outputEDM += addEDM('xAOD::jFexFwdElRoIContainer',
99 jFexTool.jEMRoIContainerWriteKey.Path)
100
101 outputEDM += addEDM('xAOD::jFexSumETRoIContainer',
102 jFexTool.jTERoIContainerWriteKey.Path)
103 outputEDM += addEDM('xAOD::jFexMETRoIContainer' ,
104 jFexTool.jXERoIContainerWriteKey.Path)
105 maybeMissingRobs += jFexTool.ROBIDs
106
107 if args.doCaloInput:
108
109 jFexInputByteStreamTool = acc.popToolsAndMerge(
110 jFexInputByteStreamToolCfg(flags,
111 'jFexInputBSDecoderTool',
112 writeBS=False))
113
114 decoderTools += [jFexInputByteStreamTool]
115 outputEDM += addEDM('xAOD::jFexTowerContainer',
116 jFexInputByteStreamTool.jTowersWriteKey.Path)
117 maybeMissingRobs += jFexInputByteStreamTool.ROBIDs
118
119 if 'eFex' in subsystems:
120 from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import (
121 eFexByteStreamToolCfg,)
122
123 eFexTool = acc.popToolsAndMerge(
124 eFexByteStreamToolCfg(flags,
125 'eFexBSDecoder',
126 writeBS=False,
127 decodeInputs=args.doCaloInput))
128
129 decoderTools += [eFexTool]
130 outputEDM += addEDM('xAOD::eFexEMRoIContainer',
131 eFexTool.eEMContainerWriteKey.Path)
132 outputEDM += addEDM('xAOD::eFexTauRoIContainer',
133 eFexTool.eTAUContainerWriteKey.Path)
134
135 if args.doCaloInput:
136 outputEDM += addEDM('xAOD::eFexTowerContainer',
137 eFexTool.eTowerContainerWriteKey.Path)
138
139 maybeMissingRobs += eFexTool.ROBIDs
140
141 if 'gFex' in subsystems:
142 from L1CaloFEXByteStream.L1CaloFEXByteStreamConfig import (
143 gFexByteStreamToolCfg,gFexInputByteStreamToolCfg,)
144
145 gFexTool = acc.popToolsAndMerge(gFexByteStreamToolCfg(
146 flags, 'gFexBSDecoder', writeBS=False))
147
148 decoderTools += [gFexTool]
149 outputEDM += addEDM(
150 'xAOD::gFexJetRoIContainer',
151 gFexTool.gFexRhoOutputContainerWriteKey.Path)
152
153 outputEDM += addEDM(
154 'xAOD::gFexJetRoIContainer',
155 gFexTool.gFexSRJetOutputContainerWriteKey.Path)
156
157 outputEDM += addEDM(
158 'xAOD::gFexJetRoIContainer',
159 gFexTool.gFexLRJetOutputContainerWriteKey.Path)
160
161 outputEDM += addEDM(
162 'xAOD::gFexGlobalRoIContainer',
163 gFexTool.gScalarEJwojOutputContainerWriteKey.Path)
164
165 outputEDM += addEDM(
166 'xAOD::gFexGlobalRoIContainer',
167 gFexTool.gMETComponentsJwojOutputContainerWriteKey.Path)
168
169 outputEDM += addEDM(
170 'xAOD::gFexGlobalRoIContainer',
171 gFexTool.gMHTComponentsJwojOutputContainerWriteKey.Path)
172
173 outputEDM += addEDM(
174 'xAOD::gFexGlobalRoIContainer',
175 gFexTool.gMSTComponentsJwojOutputContainerWriteKey.Path)
176
177 outputEDM += addEDM(
178 'xAOD::gFexGlobalRoIContainer',
179 gFexTool.gMETComponentsNoiseCutOutputContainerWriteKey.Path)
180
181 outputEDM += addEDM(
182 'xAOD::gFexGlobalRoIContainer',
183 gFexTool.gMETComponentsRmsOutputContainerWriteKey.Path)
184
185 outputEDM += addEDM(
186 'xAOD::gFexGlobalRoIContainer',
187 gFexTool.gScalarENoiseCutOutputContainerWriteKey.Path)
188
189 outputEDM += addEDM(
190 'xAOD::gFexGlobalRoIContainer',
191 gFexTool.gScalarERmsOutputContainerWriteKey.Path)
192
193 maybeMissingRobs += gFexTool.ROBIDs
194
195 if args.doCaloInput:
196 gFexInputByteStreamTool = acc.popToolsAndMerge(
197 gFexInputByteStreamToolCfg(
198 flags, 'gFexInputByteStreamTool', writeBS=False))
199
200 decoderTools += [gFexInputByteStreamTool]
201 outputEDM += addEDM('xAOD::gFexTowerContainer',
202 gFexInputByteStreamTool.gTowersWriteKey.Path)
203
204 maybeMissingRobs += gFexInputByteStreamTool.ROBIDs
205
206 decoderAlg = CompFactory.L1TriggerByteStreamDecoderAlg(
207 name="L1TriggerByteStreamDecoder",
208 DecoderTools=decoderTools,
209 MaybeMissingROBs=maybeMissingRobs,
210 OutputLevel=algLogLevel)
211
212 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
213 log.debug('Adding the following output EDM to ItemList: %s', outputEDM)
214
215 acc.addEventAlgo(decoderAlg, sequenceName='AthAlgSeq')
216
217 acc.merge(OutputStreamCfg(flags, 'AOD', ItemList=outputEDM))
218
219