ATLAS Offline Software
Loading...
Searching...
No Matches
OutputConversionTool Class Reference

#include <OutputConversionTool.h>

Inheritance diagram for OutputConversionTool:
Collaboration diagram for OutputConversionTool:

Public Member Functions

StatusCode initialize () override
StatusCode decodePixelEDM (const std::vector< uint64_t > &bytestream, EFTrackingTransient::Metadata *metadata, EFTrackingTransient::PixelClusterAuxInput &pcAux) const
StatusCode decodeStripEDM (const std::vector< uint64_t > &bytestream, EFTrackingTransient::Metadata *metadata, EFTrackingTransient::StripClusterAuxInput &scAux) const
StatusCode decodeSpacePoints (const std::vector< uint64_t > &bytestream, EFTrackingTransient::Metadata *metadata) const
StatusCode decodeSlices (const std::vector< uint64_t > &bytestream, EFTrackingTransient::Metadata *metadata) const
StatusCode decodeGTracks (const std::vector< uint64_t > &bytestream, EFTrackingTransient::Metadata *metadata) const
StatusCode decodeFPGAoutput (const std::vector< uint64_t > &bytestream, EFTrackingTransient::Metadata *metadata, EFTrackingTransient::PixelClusterAuxInput *pcAux=nullptr, EFTrackingTransient::StripClusterAuxInput *scAux=nullptr, OutputConversion::FSM blockType=OutputConversion::FSM::Unknown) const
 Decode the FPGA output based on the type.

Detailed Description

Definition at line 35 of file OutputConversionTool.h.

Member Function Documentation

◆ decodeFPGAoutput()

StatusCode OutputConversionTool::decodeFPGAoutput ( const std::vector< uint64_t > & bytestream,
EFTrackingTransient::Metadata * metadata,
EFTrackingTransient::PixelClusterAuxInput * pcAux = nullptr,
EFTrackingTransient::StripClusterAuxInput * scAux = nullptr,
OutputConversion::FSM blockType = OutputConversion::FSM::Unknown ) const

Decode the FPGA output based on the type.

user shouldn't call this function directly They should call the following user-level functions

Definition at line 19 of file OutputConversionTool.cxx.

24{
25 using namespace FPGADataFormatUtilities;
26 // define the FSM
28
29 std::vector<uint64_t> header_words;
30 std::vector<uint64_t> footer_words;
31 std::vector<uint64_t> ghits_words;
32 std::vector<uint64_t> gtracks_words;
33 std::vector<uint64_t> slices_words;
34 std::vector<uint64_t> pixel_edm_words;
35 std::vector<uint64_t> strip_edm_words;
36
37 unsigned int counter = 0;
38
39 // Loop the bytestream
40 for (const auto &word : bytestream)
41 {
42 ATH_MSG_DEBUG("word: " << std::hex << word << std::dec);
43 switch (state)
44 {
46 {
47 if (get_bitfields_EVT_HDR_w1(word).flag != EVT_HDR_FLAG && header_words.empty())
48 {
49 ATH_MSG_ERROR("The first word is not the event hearder! Something is wrong");
51 break;
52 }
53
54 header_words.push_back(word);
55 if (header_words.size() == 3)
56 {
57 EVT_HDR_w1 header_w1 = get_bitfields_EVT_HDR_w1(header_words[0]);
58 EVT_HDR_w2 header_w2 = get_bitfields_EVT_HDR_w2(header_words[1]);
59 EVT_HDR_w3 header_w3 = get_bitfields_EVT_HDR_w3(header_words[2]);
60
61 // The data format has be evloing. The logic here can change dramatically
62 // The block after the event header can be one of the following: Slice, Module, Road, Track, cluster EDM
63 // For now, we only consider the cluster EDM
64 switch (blockType)
65 {
67 {
69 if(pcAux == nullptr)
70 {
71 ATH_MSG_ERROR("The PixelClusterAuxInput is not provided to decode function! Something is wrong");
73 break;
74 }
75 break;
76 }
78 {
80 if(scAux == nullptr)
81 {
82 ATH_MSG_ERROR("The StripClusterAuxInput is not provided to decode function! Something is wrong");
84 break;
85 }
86 break;
87 }
89 {
91 break;
92 }
94 {
96 break;
97 }
98 default:
99 {
100 ATH_MSG_ERROR("The blockType is not recognized! Something is wrong");
102 break;
103 }
104 }
105
106 // print all bit fileds of the the event header
107 if (msgLvl(MSG::DEBUG))
108 {
109 ATH_MSG_DEBUG("Event Header: ");
110 ATH_MSG_DEBUG("\tflag: 0x" << std::hex << header_w1.flag << std::dec);
111 ATH_MSG_DEBUG("\tl0id: " << header_w1.l0id);
112 ATH_MSG_DEBUG("\tbcid: " << header_w1.bcid);
113 ATH_MSG_DEBUG("\tspare: " << header_w1.spare);
114 ATH_MSG_DEBUG("\trunnumber: " << header_w2.runnumber);
115 ATH_MSG_DEBUG("\ttime: " << header_w2.time);
116 ATH_MSG_DEBUG("\tstatus: " << header_w3.status);
117 ATH_MSG_DEBUG("\tcrc: " << header_w3.crc);
118 }
119 break;
120 }
121 break;
122 }
124 {
125 // Determine if this is a module header or event footer
126 if (get_bitfields_M_HDR_w1(word).flag == M_HDR_FLAG)
127 {
128 auto module = get_bitfields_M_HDR_w1(word);
129 // decode the module header
130 // print all bit fileds of the the module header
131 if (msgLvl(MSG::DEBUG))
132 {
133 ATH_MSG_DEBUG("Module Header: ");
134 ATH_MSG_DEBUG("\tflag: 0x" << std::hex << module.flag << std::dec);
135 ATH_MSG_DEBUG("\tmodid: " << module.modid);
136 ATH_MSG_DEBUG("\tmodhash: " << module.modhash);
137 ATH_MSG_DEBUG("\tspare: " << module.spare);
138 }
139
140 // The following block is determined by the actual content
141 // Right now only the spacepoints are considered. This will likely change in future iteration.
142 switch (blockType)
143 {
145 {
147 break;
148 }
150 {
152 break;
153 }
154 default:
155 {
156 ATH_MSG_ERROR("The blockType is not recognized! Something is wrong");
158 break;
159 }
160 }
161 }
162 // Determine if this is a module header or event footer
163 else if (get_bitfields_GTRACK_HDR_w1(word).flag == GTRACK_HDR_FLAG)
164 {
166 gtracks_words.push_back(word);
167 break;
168 }
169 else if (get_bitfields_EVT_FTR_w1(word).flag == EVT_FTR_FLAG)
170 {
172 footer_words.push_back(word);
173 break;
174 }
175 else
176 {
177 ATH_MSG_ERROR("The word after the last cluster is not a module header or event footer! Something is wrong");
179 break;
180 }
181 break;
182 }
184 {
185 ghits_words.push_back(word);
186 if (ghits_words.size() == 2)
187 {
188 auto Ghit_w1 = get_bitfields_GHITZ_w1(ghits_words[0]);
189 auto Ghit_w2 = get_bitfields_GHITZ_w2(ghits_words[1]);
190 ATH_MSG_DEBUG("Global Hits: ");
191 ATH_MSG_DEBUG("GHIT W1: ");
192 ATH_MSG_DEBUG("\tlast: " << Ghit_w1.last/GHITZ_W1_LAST_mf);
193 ATH_MSG_DEBUG("\tlyr: " << Ghit_w1.lyr/GHITZ_W1_LYR_mf);
194 ATH_MSG_DEBUG("\trad: " << Ghit_w1.rad/GHITZ_W1_RAD_mf);
195 ATH_MSG_DEBUG("\tphi: " << Ghit_w1.phi/GHITZ_W1_PHI_mf);
196 ATH_MSG_DEBUG("\tz: " << Ghit_w1.z/GHITZ_W1_Z_mf);
197 ATH_MSG_DEBUG("\tlastofslice: " << Ghit_w1.lastofslice/GHITZ_W1_LASTOFSLICE_mf);
198 ATH_MSG_DEBUG("\tspare: " << Ghit_w1.spare/GHITZ_W1_SPARE_mf);
199 ATH_MSG_DEBUG("GHIT W2: ");
200 ATH_MSG_DEBUG("\tcluster1: " << Ghit_w2.cluster1/GHITZ_W2_CLUSTER1_mf);
201 ATH_MSG_DEBUG("\tcluster2: " << Ghit_w2.cluster2/GHITZ_W2_CLUSTER2_mf);
202 ATH_MSG_DEBUG("\trow: " << Ghit_w2.row/GHITZ_W2_ROW_mf);
203 ATH_MSG_DEBUG("\tspare: " << Ghit_w2.spare/GHITZ_W2_SPARE_mf);
204 ghits_words.clear();
205 if (Ghit_w1.last == 1)
206 {
208 break;
209 }
210 break;
211 }
212 break;
213 }
215 {
216 pixel_edm_words.push_back(word);
217 // Read in 10 consecutive words
218 if (pixel_edm_words.size() == 10)
219 {
220 // decode the pixel EDM
221 // For pixel EDM aux, we need
222 // id, idHash, localPosition, localCovariance, rdoList
223 // channelsInPhi, channelsInEta, width in Eta
224 // global position
225 // totalToT
226 pcAux->idHash.push_back(get_bitfields_EDM_PIXELCLUSTER_w1(pixel_edm_words[0]).id_hash);
227
228
229 // check if the rdo list word is empty, there are only 4 words in the pixel EDM
230 auto rdo_w1 = get_bitfields_EDM_PIXELCLUSTER_w2(pixel_edm_words[1]).rdo_list_w1;
231 auto rdo_w2 = get_bitfields_EDM_PIXELCLUSTER_w3(pixel_edm_words[2]).rdo_list_w2;
232 auto rdo_w3 = get_bitfields_EDM_PIXELCLUSTER_w4(pixel_edm_words[3]).rdo_list_w3;
233 auto rdo_w4 = get_bitfields_EDM_PIXELCLUSTER_w5(pixel_edm_words[4]).rdo_list_w4;
234
235 unsigned short current_rdo_size = 0;
236 if (rdo_w1 != 0)
237 {
238 pcAux->rdoList.push_back(rdo_w1);
239 current_rdo_size++;
240 }
241 if (rdo_w2 != 0)
242 {
243 pcAux->rdoList.push_back(rdo_w2);
244 current_rdo_size++;
245 }
246 if (rdo_w3 != 0)
247 {
248 pcAux->rdoList.push_back(rdo_w3);
249 current_rdo_size++;
250 }
251 if (rdo_w4 != 0)
252 {
253 pcAux->rdoList.push_back(rdo_w4);
254 current_rdo_size++;
255 }
256
257 pcAux->localPosition.push_back(to_real_EDM_PIXELCLUSTER_w6_localposition_x(get_bitfields_EDM_PIXELCLUSTER_w6(pixel_edm_words[5]).localposition_x));
258 pcAux->localPosition.push_back(to_real_EDM_PIXELCLUSTER_w6_localposition_y(get_bitfields_EDM_PIXELCLUSTER_w6(pixel_edm_words[5]).localposition_y));
259 pcAux->channelsInPhi.push_back(get_bitfields_EDM_PIXELCLUSTER_w6(pixel_edm_words[5]).channels_in_phi);
260 pcAux->channelsInEta.push_back(get_bitfields_EDM_PIXELCLUSTER_w6(pixel_edm_words[5]).channels_in_eta);
261 pcAux->widthInEta.push_back(to_real_EDM_PIXELCLUSTER_w6_width_in_eta(get_bitfields_EDM_PIXELCLUSTER_w6(pixel_edm_words[5]).width_in_eta));
262
263 pcAux->localCovariance.push_back(to_real_EDM_PIXELCLUSTER_w7_localcovariance_xx(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).localcovariance_xx));
264 pcAux->localCovariance.push_back(to_real_EDM_PIXELCLUSTER_w7_localcovariance_yy(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).localcovariance_yy));
265
266 pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w8_globalposition_x(get_bitfields_EDM_PIXELCLUSTER_w8(pixel_edm_words[7]).globalposition_x));
267 pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w8_globalposition_y(get_bitfields_EDM_PIXELCLUSTER_w8(pixel_edm_words[7]).globalposition_y));
268
269 pcAux->id.push_back(get_bitfields_EDM_PIXELCLUSTER_w9(pixel_edm_words[8]).identifier);
270
271 pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w10_globalposition_z(get_bitfields_EDM_PIXELCLUSTER_w10(pixel_edm_words[9]).globalposition_z));
272 pcAux->totalToT.push_back(get_bitfields_EDM_PIXELCLUSTER_w10(pixel_edm_words[9]).total_tot);
273
274
275 metadata->pcRdoIndex[counter] = current_rdo_size;
276 counter++;
277
278 // Determine if this is the last cluster
279 if (get_bitfields_EDM_PIXELCLUSTER_w10(pixel_edm_words[9]).lastword == 1)
280 {
281 metadata->pcRdoIndexSize = counter;
282 metadata->numOfPixelClusters = counter;
284 }
285 pixel_edm_words.clear();
286
287 // print all bit fileds of the the pixel EDM
288 if (msgLvl(MSG::DEBUG))
289 {
290 ATH_MSG_DEBUG("Pixel EDM: ");
291 ATH_MSG_DEBUG("\tid: " << pcAux->id.back());
292 ATH_MSG_DEBUG("\tidHash: " << pcAux->idHash.back());
293 ATH_MSG_DEBUG("\tlocalPosition_x: " << pcAux->localPosition.at(pcAux->localPosition.size() - 2));
294 ATH_MSG_DEBUG("\tlocalPosition_y: " << pcAux->localPosition.back());
295 ATH_MSG_DEBUG("\tlocalCovariance_xx: " << pcAux->localCovariance.at(pcAux->localCovariance.size() - 2));
296 ATH_MSG_DEBUG("\tlocalCovariance_yy: " << pcAux->localCovariance.back());
297 ATH_MSG_DEBUG("\tglobalPosition_x: " << pcAux->globalPosition.at(pcAux->globalPosition.size() - 3));
298 ATH_MSG_DEBUG("\tglobalPosition_y: " << pcAux->globalPosition.at(pcAux->globalPosition.size() - 2));
299 ATH_MSG_DEBUG("\tglobalPosition_z: " << pcAux->globalPosition.back());
300 ATH_MSG_DEBUG("\tchannelsInPhi: " << pcAux->channelsInPhi.back());
301 ATH_MSG_DEBUG("\tchannelsInEta: " << pcAux->channelsInEta.back());
302 ATH_MSG_DEBUG("\twidthInEta: " << pcAux->widthInEta.back());
303 ATH_MSG_DEBUG("\ttotalToT: " << pcAux->totalToT.back());
304 }
305 break;
306 }
307
308 break;
309 }
311 {
312 strip_edm_words.push_back(word);
313 // Read in 9 consecutive words
314 if (strip_edm_words.size() == 9 and scAux)
315 {
316 scAux->idHash.push_back(get_bitfields_EDM_STRIPCLUSTER_w1(strip_edm_words[0]).id_hash);
317
318 scAux->id.push_back(get_bitfields_EDM_STRIPCLUSTER_w8(strip_edm_words[7]).identifier);
319
320 scAux->localPosition.push_back(to_real_EDM_STRIPCLUSTER_w6_localposition_x(get_bitfields_EDM_STRIPCLUSTER_w6(strip_edm_words[5]).localposition_x));
321 scAux->localCovariance.push_back(to_real_EDM_STRIPCLUSTER_w6_localcovariance_xx(get_bitfields_EDM_STRIPCLUSTER_w6(strip_edm_words[5]).localcovariance_xx));
322
323 scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w7_globalposition_x(get_bitfields_EDM_STRIPCLUSTER_w7(strip_edm_words[6]).globalposition_x));
324 scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w7_globalposition_y(get_bitfields_EDM_STRIPCLUSTER_w7(strip_edm_words[6]).globalposition_y));
325 scAux->channelsInPhi.push_back(get_bitfields_EDM_STRIPCLUSTER_w7(strip_edm_words[6]).channels_in_phi);
326
327 scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w9_globalposition_z(get_bitfields_EDM_STRIPCLUSTER_w9(strip_edm_words[8]).globalposition_z));
328
329 // check if the rdo list word is empty, there are only 4 words in the strip EDM
330 auto rdo_w1 = get_bitfields_EDM_STRIPCLUSTER_w2(strip_edm_words[1]).rdo_list_w1;
331 auto rdo_w2 = get_bitfields_EDM_STRIPCLUSTER_w3(strip_edm_words[2]).rdo_list_w2;
332 auto rdo_w3 = get_bitfields_EDM_STRIPCLUSTER_w4(strip_edm_words[3]).rdo_list_w3;
333 auto rdo_w4 = get_bitfields_EDM_STRIPCLUSTER_w5(strip_edm_words[4]).rdo_list_w4;
334
335 unsigned short current_rdo_size = 0;
336 if (rdo_w1 != 0)
337 {
338 scAux->rdoList.push_back(rdo_w1);
339 current_rdo_size++;
340 }
341 if (rdo_w2 != 0)
342 {
343 scAux->rdoList.push_back(rdo_w2);
344 current_rdo_size++;
345 }
346 if (rdo_w3 != 0)
347 {
348 scAux->rdoList.push_back(rdo_w3);
349 current_rdo_size++;
350 }
351 if (rdo_w4 != 0)
352 {
353 scAux->rdoList.push_back(rdo_w4);
354 current_rdo_size++;
355 }
356
357 metadata->scRdoIndex[counter] = current_rdo_size;
358 counter++;
359
360 // Determine if this is the last cluster
361 if (get_bitfields_EDM_STRIPCLUSTER_w9(strip_edm_words[8]).lastword == 1)
362 {
363 metadata->scRdoIndexSize = counter;
364 metadata->numOfStripClusters = counter;
366 }
367 strip_edm_words.clear();
368
369 // print all bit fileds of the the strip EDM
370 if (msgLvl(MSG::DEBUG))
371 {
372 ATH_MSG_DEBUG("Strip EDM: ");
373 ATH_MSG_DEBUG("\tidHash: " << scAux->idHash.back());
374 ATH_MSG_DEBUG("\tid: " << scAux->id.back());
375 ATH_MSG_DEBUG("\tlocalPosition_x: " << scAux->localPosition.back());
376 ATH_MSG_DEBUG("\tlocalCovariance_xx: " << scAux->localCovariance.back());
377 ATH_MSG_DEBUG("\tglobalPosition_x: " << scAux->globalPosition.at(scAux->globalPosition.size() - 3));
378 ATH_MSG_DEBUG("\tglobalPosition_y: " << scAux->globalPosition.at(scAux->globalPosition.size() - 2));
379 ATH_MSG_DEBUG("\tglobalPosition_z: " << scAux->globalPosition.back());
380 ATH_MSG_DEBUG("\tchannelsInPhi: " << scAux->channelsInPhi.back());
381 ATH_MSG_DEBUG("\trdoList: ");
382 }
383 break;
384 }
385 break;
386 }
388 {
389 footer_words.push_back(word);
390 if (footer_words.size() == 3)
391 {
392 // decode the event footer
393 EVT_FTR_w1 footer_w1 = get_bitfields_EVT_FTR_w1(footer_words[0]);
394 EVT_FTR_w2 footer_w2 = get_bitfields_EVT_FTR_w2(footer_words[1]);
395 EVT_FTR_w3 footer_w3 = get_bitfields_EVT_FTR_w3(footer_words[2]);
396
397 // print all bit fileds of the the event footer
398 ATH_MSG_DEBUG("Event Footer: ");
399 ATH_MSG_DEBUG("\tflag: 0x" << std::hex << footer_w1.flag << std::dec);
400 ATH_MSG_DEBUG("\tspare: " << footer_w1.spare);
401 ATH_MSG_DEBUG("\thdr_crc: " << footer_w1.hdr_crc);
402 ATH_MSG_DEBUG("\terror_flags: " << footer_w2.error_flags);
403 ATH_MSG_DEBUG("\tword_count: " << footer_w3.word_count);
404 ATH_MSG_DEBUG("\tcrc: " << footer_w3.crc);
405
406 // clear header and footer words
407 header_words.clear();
408 footer_words.clear();
409 counter = 0;
410
411 // reset the state to EventHeader
412 // Caveat: this enables continue decoding the next event if TV contains multiple events
414 break;
415 }
416 break;
417 }
419 {
420 gtracks_words.push_back(word);
421 if (gtracks_words.size() == 3)
422 {
423 GTRACK_HDR_w1 gtrack_w1 = get_bitfields_GTRACK_HDR_w1(gtracks_words[0]);
424 GTRACK_HDR_w2 gtrack_w2 = get_bitfields_GTRACK_HDR_w2(gtracks_words[1]);
425 GTRACK_HDR_w3 gtrack_w3 = get_bitfields_GTRACK_HDR_w3(gtracks_words[2]);
426 ATH_MSG_DEBUG("GTrack: ");
427 ATH_MSG_DEBUG("\tflag: 0x" << std::hex << gtrack_w1.flag/GTRACK_HDR_W1_FLAG_mf << std::dec);
428 ATH_MSG_DEBUG("\ttype: " << gtrack_w1.type/GTRACK_HDR_W1_TYPE_mf);
429 ATH_MSG_DEBUG("\tetaregion: " << gtrack_w1.eta_region/GTRACK_HDR_W1_ETA_REGION_mf);
430 ATH_MSG_DEBUG("\tphiregion: " << gtrack_w1.phi_region/GTRACK_HDR_W1_PHI_REGION_mf);
431 ATH_MSG_DEBUG("\tbinphi: " << gtrack_w1.phi_bin/GTRACK_HDR_W1_PHI_BIN_mf);
432 ATH_MSG_DEBUG("\tbinz: " << gtrack_w1.z_bin/GTRACK_HDR_W1_Z_BIN_mf);
433 ATH_MSG_DEBUG("\tsecondstage: " << gtrack_w1.second_stage/GTRACK_HDR_W1_SECOND_STAGE_mf);
434 ATH_MSG_DEBUG("\tlayerbitmask: " << gtrack_w1.layer_bitmask/GTRACK_HDR_W1_LAYER_BITMASK_mf);
435 ATH_MSG_DEBUG("\tscore: " << gtrack_w2.score/GTRACK_HDR_W2_SCORE_mf);
436 ATH_MSG_DEBUG("\td0: " << gtrack_w2.d0/GTRACK_HDR_W2_D0_mf);
437 ATH_MSG_DEBUG("\tz0: " << gtrack_w2.z0/GTRACK_HDR_W2_Z0_mf );
438 ATH_MSG_DEBUG("\tspare: " << gtrack_w2.spare/GTRACK_HDR_W2_SPARE_mf);
439 ATH_MSG_DEBUG("\tqoverpt: " << gtrack_w3.qoverpt/GTRACK_HDR_W3_QOVERPT_mf);
440 ATH_MSG_DEBUG("\tphi: " << gtrack_w3.phi/GTRACK_HDR_W3_PHI_mf);
441 ATH_MSG_DEBUG("\teta: " << gtrack_w3.eta/GTRACK_HDR_W3_ETA_mf);
442 ATH_MSG_DEBUG("\tspare: " << gtrack_w3.spare/GTRACK_HDR_W3_SPARE_mf);
443 gtracks_words.clear();
445 break;
446 }
447 break;
448 }
450 {
451 slices_words.push_back(word);
452 SLICE_HDR_w1 slice_w1 = get_bitfields_SLICE_HDR_w1(slices_words[0]);
453
454 ATH_MSG_DEBUG("Slices: ");
455 ATH_MSG_DEBUG("\tflag: 0x" << std::hex << slice_w1.flag/GTRACK_HDR_W1_FLAG_mf << std::dec);
456 ATH_MSG_DEBUG("\tsliceid: " << slice_w1.sliceid/SLICE_HDR_W1_SLICEID_mf);
457 ATH_MSG_DEBUG("\tetaregion: " << slice_w1.eta_region/SLICE_HDR_W1_ETA_REGION_mf);
458 ATH_MSG_DEBUG("\tphiregion: " << slice_w1.phi_region/SLICE_HDR_W1_PHI_REGION_mf);
459 ATH_MSG_DEBUG("\tspare: " << slice_w1.spare/SLICE_HDR_W1_SPARE_mf);
460 slices_words.clear();
462 break;
463 }
465 {
466 ATH_MSG_ERROR("FSM is in an error state! Something is wrong");
467 break;
468 }
469 default:
470 ATH_MSG_ERROR("FSM is not in a valid state! Something is wrong");
471 break;
472 }
473 }
474
475 return StatusCode::SUCCESS;
476}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
EVT_FTR_w2 get_bitfields_EVT_FTR_w2(const uint64_t &in)
EDM_STRIPCLUSTER_w4 get_bitfields_EDM_STRIPCLUSTER_w4(const uint64_t &in)
M_HDR_w1 get_bitfields_M_HDR_w1(const uint64_t &in)
EDM_PIXELCLUSTER_w3 get_bitfields_EDM_PIXELCLUSTER_w3(const uint64_t &in)
double to_real_EDM_PIXELCLUSTER_w8_globalposition_x(const int64_t &in)
EDM_PIXELCLUSTER_w6 get_bitfields_EDM_PIXELCLUSTER_w6(const uint64_t &in)
double to_real_EDM_STRIPCLUSTER_w9_globalposition_z(const int64_t &in)
EDM_STRIPCLUSTER_w1 get_bitfields_EDM_STRIPCLUSTER_w1(const uint64_t &in)
double to_real_EDM_STRIPCLUSTER_w6_localposition_x(const int64_t &in)
EDM_STRIPCLUSTER_w8 get_bitfields_EDM_STRIPCLUSTER_w8(const uint64_t &in)
struct FPGADataFormatUtilities::GTRACK_HDR_w2 GTRACK_HDR_w2
double to_real_EDM_STRIPCLUSTER_w7_globalposition_x(const int64_t &in)
EVT_HDR_w2 get_bitfields_EVT_HDR_w2(const uint64_t &in)
GTRACK_HDR_w3 get_bitfields_GTRACK_HDR_w3(const uint64_t &in)
EDM_PIXELCLUSTER_w5 get_bitfields_EDM_PIXELCLUSTER_w5(const uint64_t &in)
EDM_STRIPCLUSTER_w5 get_bitfields_EDM_STRIPCLUSTER_w5(const uint64_t &in)
EDM_STRIPCLUSTER_w9 get_bitfields_EDM_STRIPCLUSTER_w9(const uint64_t &in)
double to_real_EDM_STRIPCLUSTER_w7_globalposition_y(const int64_t &in)
struct FPGADataFormatUtilities::EVT_HDR_w2 EVT_HDR_w2
struct FPGADataFormatUtilities::EVT_HDR_w3 EVT_HDR_w3
double to_real_EDM_PIXELCLUSTER_w7_localcovariance_yy(const uint64_t &in)
EDM_PIXELCLUSTER_w2 get_bitfields_EDM_PIXELCLUSTER_w2(const uint64_t &in)
double to_real_EDM_PIXELCLUSTER_w7_localcovariance_xx(const uint64_t &in)
EDM_STRIPCLUSTER_w7 get_bitfields_EDM_STRIPCLUSTER_w7(const uint64_t &in)
EDM_STRIPCLUSTER_w2 get_bitfields_EDM_STRIPCLUSTER_w2(const uint64_t &in)
struct FPGADataFormatUtilities::EVT_HDR_w1 EVT_HDR_w1
struct FPGADataFormatUtilities::EVT_FTR_w1 EVT_FTR_w1
uint64_t to_real_EDM_PIXELCLUSTER_w6_width_in_eta(const uint64_t &in)
EDM_PIXELCLUSTER_w8 get_bitfields_EDM_PIXELCLUSTER_w8(const uint64_t &in)
struct FPGADataFormatUtilities::GTRACK_HDR_w3 GTRACK_HDR_w3
GTRACK_HDR_w1 get_bitfields_GTRACK_HDR_w1(const uint64_t &in)
struct FPGADataFormatUtilities::EVT_FTR_w2 EVT_FTR_w2
double to_real_EDM_PIXELCLUSTER_w6_localposition_x(const int64_t &in)
EDM_PIXELCLUSTER_w7 get_bitfields_EDM_PIXELCLUSTER_w7(const uint64_t &in)
struct FPGADataFormatUtilities::EVT_FTR_w3 EVT_FTR_w3
EVT_FTR_w3 get_bitfields_EVT_FTR_w3(const uint64_t &in)
double to_real_EDM_PIXELCLUSTER_w6_localposition_y(const int64_t &in)
struct FPGADataFormatUtilities::GTRACK_HDR_w1 GTRACK_HDR_w1
EVT_HDR_w3 get_bitfields_EVT_HDR_w3(const uint64_t &in)
double to_real_EDM_PIXELCLUSTER_w8_globalposition_y(const int64_t &in)
EVT_HDR_w1 get_bitfields_EVT_HDR_w1(const uint64_t &in)
EDM_STRIPCLUSTER_w6 get_bitfields_EDM_STRIPCLUSTER_w6(const uint64_t &in)
GHITZ_w1 get_bitfields_GHITZ_w1(const uint64_t &in)
EDM_PIXELCLUSTER_w4 get_bitfields_EDM_PIXELCLUSTER_w4(const uint64_t &in)
SLICE_HDR_w1 get_bitfields_SLICE_HDR_w1(const uint64_t &in)
EVT_FTR_w1 get_bitfields_EVT_FTR_w1(const uint64_t &in)
EDM_PIXELCLUSTER_w9 get_bitfields_EDM_PIXELCLUSTER_w9(const uint64_t &in)
GTRACK_HDR_w2 get_bitfields_GTRACK_HDR_w2(const uint64_t &in)
struct FPGADataFormatUtilities::SLICE_HDR_w1 SLICE_HDR_w1
EDM_PIXELCLUSTER_w1 get_bitfields_EDM_PIXELCLUSTER_w1(const uint64_t &in)
GHITZ_w2 get_bitfields_GHITZ_w2(const uint64_t &in)
double to_real_EDM_PIXELCLUSTER_w10_globalposition_z(const int64_t &in)
double to_real_EDM_STRIPCLUSTER_w6_localcovariance_xx(const uint64_t &in)
EDM_PIXELCLUSTER_w10 get_bitfields_EDM_PIXELCLUSTER_w10(const uint64_t &in)
EDM_STRIPCLUSTER_w3 get_bitfields_EDM_STRIPCLUSTER_w3(const uint64_t &in)
std::vector< unsigned long long > rdoList

◆ decodeGTracks()

StatusCode OutputConversionTool::decodeGTracks ( const std::vector< uint64_t > & bytestream,
EFTrackingTransient::Metadata * metadata ) const

Definition at line 508 of file OutputConversionTool.cxx.

510{
511 ATH_MSG_DEBUG("Decoding tracks");
512 return decodeFPGAoutput(bytestream, metadata, nullptr, nullptr, OutputConversion::FSM::GTracks);
513}
StatusCode decodeFPGAoutput(const std::vector< uint64_t > &bytestream, EFTrackingTransient::Metadata *metadata, EFTrackingTransient::PixelClusterAuxInput *pcAux=nullptr, EFTrackingTransient::StripClusterAuxInput *scAux=nullptr, OutputConversion::FSM blockType=OutputConversion::FSM::Unknown) const
Decode the FPGA output based on the type.

◆ decodePixelEDM()

StatusCode OutputConversionTool::decodePixelEDM ( const std::vector< uint64_t > & bytestream,
EFTrackingTransient::Metadata * metadata,
EFTrackingTransient::PixelClusterAuxInput & pcAux ) const

Definition at line 478 of file OutputConversionTool.cxx.

481{
482 ATH_MSG_DEBUG("Decoding pixel EDM");
483 return decodeFPGAoutput(bytestream, metadata, &pcAux, nullptr, OutputConversion::FSM::PixelEDM);
484}

◆ decodeSlices()

StatusCode OutputConversionTool::decodeSlices ( const std::vector< uint64_t > & bytestream,
EFTrackingTransient::Metadata * metadata ) const

Definition at line 501 of file OutputConversionTool.cxx.

503{
504 ATH_MSG_DEBUG("Decoding slices");
505 return decodeFPGAoutput(bytestream, metadata, nullptr, nullptr, OutputConversion::FSM::Slices);
506}

◆ decodeSpacePoints()

StatusCode OutputConversionTool::decodeSpacePoints ( const std::vector< uint64_t > & bytestream,
EFTrackingTransient::Metadata * metadata ) const

Definition at line 494 of file OutputConversionTool.cxx.

496{
497 ATH_MSG_DEBUG("Decoding space points");
498 return decodeFPGAoutput(bytestream, metadata, nullptr, nullptr, OutputConversion::FSM::GlobalHits);
499}

◆ decodeStripEDM()

StatusCode OutputConversionTool::decodeStripEDM ( const std::vector< uint64_t > & bytestream,
EFTrackingTransient::Metadata * metadata,
EFTrackingTransient::StripClusterAuxInput & scAux ) const

Definition at line 486 of file OutputConversionTool.cxx.

489{
490 ATH_MSG_DEBUG("Decoding strip EDM");
491 return decodeFPGAoutput(bytestream, metadata, nullptr, &scAux, OutputConversion::FSM::StripEDM);
492}

◆ initialize()

StatusCode OutputConversionTool::initialize ( )
override

Definition at line 13 of file OutputConversionTool.cxx.

14{
15 ATH_MSG_INFO("Initializing OutputConversionTool tool");
16 return StatusCode::SUCCESS;
17}
#define ATH_MSG_INFO(x)

The documentation for this class was generated from the following files: