Project
Loading...
Searching...
No Matches
RawData.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef ALICEO2_TRD_RAWDATA_H
13#define ALICEO2_TRD_RAWDATA_H
14
17// this is the header added by the CRU
18
19#include <array>
20#include <map>
21#include <cstdint>
22#include <ostream>
24#include "Rtypes.h"
25
26namespace o2
27{
28namespace trd
29{
30
33// This comes at the top of the data stream for each event and 1/2cru
34
36
37 /* Half cru header
3864 bits is too wide, hence reduce to 32 to make it readable.
39 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00|
40 -------------------------------------------------------------------------------------------------
41Word 0 | eventtype | end point | stopbit| bunchcrossing | headerversion |
42 -------------------------------------------------------------------------------------------------
43Word 0 | reserved 1 |
44 -------------------------------------------------------------------------------------------------
45Word 1 | link 3 errorflags | link 2 errorflags | link 1 error flags | link 0 error flags |
46 -------------------------------------------------------------------------------------------------
47Word 1 | link 7 error flags | link 6 error flags | link 5 error flags | link 4 error flags |
48 -------------------------------------------------------------------------------------------------
49Word 2 | link 11 error flags | link 10 error flags | link 9 error flags | link 8 error flags |
50 -------------------------------------------------------------------------------------------------
51Word 2 | reserved 2 | link 14 error flags | link 13 error flags | link 12 error flags |
52 ------------------------------------------------------------------------------------------------
53Word 3 | reserved 3 |
54 -------------------------------------------------------------------------------------------------
55Word 3 | reserved 4 |
56 -------------------------------------------------------------------------------------------------
57Word 4 | link 1 datasize | link 0 datasize |
58 -------------------------------------------------------------------------------------------------
59Word 4 | link 3 datasize | link 2 datasize |
60 -------------------------------------------------------------------------------------------------
61Word 5 | link 5 datasize | link 4 datasize |
62 -------------------------------------------------------------------------------------------------
63Word 5 | link 7 datasize | link 6 datasize |
64 -------------------------------------------------------------------------------------------------
65Word 6 | link 9 datasize | link 8 datasize |
66 -------------------------------------------------------------------------------------------------
67Word 6 | link 11 datasize | link 10 datasize |
68 -------------------------------------------------------------------------------------------------
69Word 7 | link 13 datasize | link 12 datasize |
70 -------------------------------------------------------------------------------------------------
71Word 7 | reserved 5 | link 14 datasize |
72 -------------------------------------------------------------------------------------------------
73*/
74
75 union {
76 uint64_t word0 = 0x0;
77 //first word *
78 // 6 5 4 3 2 1
79 // 3210987654321098765432109876543210987654321098765432109876543210
80 // uint64_t: 0000000000000000000000000000000000000000000000000000000000000000
81 // | | | | | |-------- 0..7 TRD Header version
82 // | | | | |-------------------- 8..19 bunch crossing
83 // | | | |------------------------ 20..23 stop bit
84 // | | |---------------------------- 24..27 end point
85 // | |-------------------------------- 28..31 event type
86 // |---------------------------------------------------------------- 32..63 reserved1
87 struct {
88 uint64_t HeaderVersion : 8; // TRD Header Version
89 uint64_t BunchCrossing : 12; // bunch crossing of the physics trigger.
90 //NB The BC in the RDH is the BC sent together with the heartbeat trigger, while the BC in the HalfCRUHeader is the BC of the physics trigger where the data that follows the HalfCRUHeader belongs to. However, it is not forbidden for CTP to send the heartbeat trigger together with a physics trigger, in this case the two would match (accidentally).
91 uint64_t StopBit : 4; // 8 .. 11 stop bit 0x1 if TRD packet is last data packet of trigger, else 0x0
92 uint64_t EndPoint : 4; // pci end point upper or lower 15 links of cru
93 uint64_t EventType : 4; // bit 0..7 event type of the data. Trigger bits from TTC-PON message, distinguish physics from calibration events.
94 uint64_t reserveda : 32; //
95 } __attribute__((__packed__));
96 };
97 union {
98 uint64_t word12[2];
99 // 15 8 bit error flags and 1 8 bit reserved.
100 struct {
101 struct {
102 uint8_t errorflag : 8;
103 } __attribute__((__packed__)) errorflags[15];
104 uint8_t reserved2 : 8;
105 } __attribute__((__packed__));
106 };
107 union {
108 uint64_t word3 = 0x0;
109 struct {
110 uint64_t reserved34;
111 } __attribute__((__packed__));
112 };
113 union {
114 uint64_t word47[4];
115 //15 16 bit data sizes and 1 16 bit reserved word.
116 struct {
117 struct {
118 uint64_t size : 16;
119 } __attribute__((__packed__)) datasizes[15]; // although this is 8 dont use index 0 as its part of reserved.
120 uint16_t reserved5;
121 } __attribute__((__packed__));
122 };
123};
124
127// Coming before all other tracklet data, a single tracklet word as a header for its half chamber
128
130 union {
131 // 10987654321098765432109876543210
132 // uint32_t: 33222222222211111111110000000000
133 // cccccccccccccccXSSSSS SSSy
134 // ffff| | |sss ||
135 // | | | | | ||-- 0 side
136 // | | | | | |--- 1-3 stack
137 // | | | | |------ 4-6 layer
138 // | | | |-------- 7-11 sector
139 // | | |------------- 12 always 1
140 // | ----------------------------- 13-27 MCM Clock counter
141 // --------------------------------- 28-31 tracklet data format number
142 uint32_t word;
143 struct {
144 uint32_t side : 1; // side of chamber
145 uint32_t stack : 3;
146 uint32_t layer : 3;
147 uint32_t supermodule : 5;
148 uint32_t one : 1; //always 1
149 uint32_t MCLK : 15; // MCM clock counter 120MHz ... for simulation -- incrementing, and uniform across an event
150 uint32_t format : 4;
151 // 0 baseline PID 3 time slices, 7 bit each
152 // 1 DO NOT USE ! reserved for tracklet end marker disambiguation
153 // 14 Tracklet test-pattern mode
154 // 15 Reserved for testing
155 } __attribute__((__packed__));
156 };
157};
158
161// This constitutes the "4x32" bits of information from a single MCM, TrackletMCMHeader and 1-3 TrackletMCMData.
163 //first word *
164 // 10987654321098765432109876543210
165 // uint32_t: 33222222222211111111110000000000
166 // 1zzzz pppppppp pppppppp1
167 // || yy| pppppppp | |--- 0 1 check bits
168 // || | | | ----------- 1-8 pid for cpu0 second part
169 // || | | -------------------- 9-16 pid for cpu1 second part
170 // || | ---------------------------- 17-24 pid for cpu2 second part
171 // || ------------------------------ 25-26 col
172 // |---------------------------------- 27-30 padrow
173 // ----------------------------------- 31 1
174 //TODO need to check endianness, I have a vague memory the trap chip has different endianness to x86.
175 union {
176 uint32_t word;
177 struct {
178 uint32_t oneb : 1; //
179 uint32_t pid0 : 8; // part of pid calculated in cpu0 // 6 bits of Q2 and 2 bits of Q1
180 uint32_t pid1 : 8; // part of pid calculated in cpu1
181 uint32_t pid2 : 8; // part of pid calculated in cpu2
182 uint32_t col : 2; // 2 bits for position in pad direction.
183 uint32_t padrow : 4; // padrow,z coordinate for chip.
184 uint32_t onea : 1; //
185 } __attribute__((__packed__));
186 };
187};
188
189// \structure TrackletMCMData.
190// \brief Raw Data of a tracklet, part is how ever in the MCM Header hence both are grouped together in the same file
191
193 union {
194 uint32_t word;
195 struct {
196 uint8_t checkbit : 1; //
197 uint16_t slope : 8; // Deflection angle of tracklet
198 uint16_t pid : 12; // Particle Identity 6 bits of Q0 and 6 bits of Q1
199 uint16_t pos : 11; // Position of tracklet, signed 11 bits, granularity 1/80 pad widths, -12.80 to +12.80, relative to centre of pad 10
200 } __attribute__((__packed__));
201 };
202};
203
206
207struct TRDFeeID {
208 //
209 // 5432109876543210
210 // uint16_t: 0000000000000000
211 // mmmmmmmm --- supermodule 0 - 17
212 // xxx --- unused1
213 // s --- side 0=A C=1
214 // xxx --- unused 2;
215 // e --- endpoint 0=lower, 1=upper
216 union {
217 uint16_t word;
218 struct {
219 uint8_t endpoint : 1; // the pci end point of the cru in question
220 uint8_t unused2 : 3; // seperate so easier to read in hex dumps
221 uint8_t side : 1; // the A=0 or C=1 side of the supermodule being readout
222 uint8_t unused1 : 3; // seperate so easier to read in hex dumps
223 uint8_t supermodule : 8; // the supermodule being read out 0-17
224 } __attribute__((__packed__));
225 };
226};
227
230// TODO come back and comment the fields or make the name more expressive, and fill in the jjjjjjj
232 //
233 // 10987654321098765432109876543210
234 // uint32_t: 00000000000000000000000000000000
235 //
236 union { // section 15.6.1 in tdp
237 uint32_t word;
238 struct {
239 uint32_t res : 2;
240 uint32_t side : 1;
241 uint32_t stack : 3;
242 uint32_t layer : 3;
243 uint32_t supermodule : 5;
244 uint32_t numberHCW : 3;
245 uint32_t minor : 7;
246 uint32_t major : 7;
247 uint32_t version : 1;
248 } __attribute__((__packed__));
249 };
250};
251//The next hcheaders are all optional, there can be 8, we only have 3 for now.
252//They can all be distinguished by their res.
254 // 10987654321098765432109876543210
255 // uint32_t: 00000000000000000000000000000000
256 //
257 union { //section 15.6.2 in tdp
258 uint32_t word;
259 struct {
260 uint32_t res : 2;
261 uint32_t ptrigphase : 4;
262 uint32_t ptrigcount : 4;
263 uint32_t bunchcrossing : 16;
264 uint32_t numtimebins : 6;
265 } __attribute__((__packed__));
266 };
267};
269 // 10987654321098765432109876543210
270 // uint32_t: 00000000000000000000000000000000
271 union { //section 15.6.3 in tdp
272 uint32_t word;
273 struct {
274 uint32_t res : 6;
275 uint32_t dfilter : 6;
276 uint32_t rfilter : 1;
277 uint32_t nlfilter : 1;
278 uint32_t xtfilter : 1;
279 uint32_t tfilter : 1;
280 uint32_t gfilter : 1;
281 uint32_t pfilter : 6;
282 } __attribute__((__packed__));
283 };
284};
286 // 10987654321098765432109876543210
287 // uint32_t: 00000000000000000000000000000000
288 union { //section 15.6.4 in tdp
289 uint32_t word;
290 struct {
291 uint32_t res : 6;
292 uint32_t svnrver : 13; //readout program svn revision
293 uint32_t svnver : 13; //assember programm svn revision
294 } __attribute__((__packed__));
295 };
296};
297
299 // 10987654321098765432109876543210
300 // uint32_t: 00000000000000000000000000000000
301 union {
302 uint32_t word; //MCM header
303 struct {
304 uint32_t res : 4; // reserve 1100
305 uint32_t eventcount : 20;
306 uint32_t mcm : 4;
307 uint32_t rob : 3;
308 uint32_t yearflag : 1; //< oct2007 0, else 1
309 } __attribute__((__packed__));
310 };
311};
312
313// digit mask used for the zero suppressed digit data
315 // 10987654321098765432109876543210
316 // uint32_t: 00000000000000000000000000000000
317 union {
318 uint32_t word; //MCM ADC MASK header
319 struct {
320 uint32_t j : 4; // 0xc
321 uint32_t adcmask : 21;
322 uint32_t c : 5; // ~(number of bits set in adcmask)
323 uint32_t n : 2; // 0b01
324 } __attribute__((__packed__));
325 };
326};
327
328//the odd numbering of 1 2 3 and 6 are taken from the TDP page 111 section 15.7.2, 15.7.3 15.7.4 15.7.5
330 // 10987654321098765432109876543210
331 // uint32_t: 00000000000000000000000000000000
332 // 11h41 for 2flp in data stream. before that on 14th dec was1 flp in timeframe.
333 union {
334 uint32_t word;
335 struct {
336 uint32_t eventcount : 6; // lower 6 bits of e counter.
337 uint32_t stack : 5;
338 uint32_t layer : 3;
339 uint32_t roc : 3;
340 uint32_t rob : 3;
341 uint32_t mcmTp2 : 4;
342 uint32_t cpu : 2;
343 uint32_t counter : 6;
344 } __attribute__((__packed__));
345 };
346};
347
349 // 10987654321098765432109876543210
350 // uint32_t: 00000000000000000000000000000000
351 union {
352 uint32_t word;
353 struct {
354 uint32_t eventcount : 6; // lower 6 bits of e counter.
355 uint32_t stack : 5;
356 uint32_t layer : 3;
357 uint32_t roc : 3;
358 uint32_t rob : 3;
359 uint32_t mcmTp2 : 4;
360 uint32_t cpu : 2;
361 uint32_t wordcounter : 6;
362 } __attribute__((__packed__));
363 };
364};
366 // 10987654321098765432109876543210
367 // uint32_t: 00000000000000000000000000000000
368 union {
369 uint32_t word;
370 struct {
371 uint32_t eventcount : 12; //lower 12 bits of ecounter
372 uint32_t stack : 5;
373 uint32_t layer : 3;
374 uint32_t roc : 3;
375 uint32_t rob : 3;
376 uint32_t mcm : 4;
377 uint32_t cpu : 2;
378 } __attribute__((__packed__));
379 };
380};
382 // 10987654321098765432109876543210
383 // uint32_t: 00000000000000000000000000000000
384 // 1zzzz pppppppp pppppppp1
385 union {
386 uint32_t word; //HC header0
387 struct {
388 uint32_t eventcount; // lower 4 bits of e counter.
389 uint32_t stack : 5; // starting at 1
390 uint32_t layer : 3;
391 uint32_t roc : 3;
392 uint32_t rob : 3;
393 uint32_t mcm : 4;
394 uint32_t cpu : 2;
395 uint32_t wordcounter : 6;
396 uint32_t oddadc : 2;
397 } __attribute__((__packed__));
398 };
399};
400
402 // 10987654321098765432109876543210
403 // uint32_t: 00000000000000000000000000000000
404 union {
405 // 10987654321098765432109876543210
406 // uint32_t: 00000000000000000000000000000000
407 uint32_t word;
408 struct {
409 uint32_t f : 2;
410 uint32_t z : 10;
411 uint32_t y : 10;
412 uint32_t x : 10;
413 } __attribute__((__packed__));
414 };
415};
416
418 // for simplicity we store two maps to have one for each direction
419 // link ID -> half-chamber ID
420 // half-chamber ID -> link ID
421
422 bool isOK() const;
423 int getHCID(int link) const { return linkIDToHCID.at(link); }
424 int getLink(int hcid) const { return hcIDToLinkID.at(hcid); }
425 void swapLinks(int linkA, int linkB);
426
427 std::map<int, int> linkIDToHCID;
428 std::map<int, int> hcIDToLinkID;
430};
431
432uint32_t setHalfCRUHeader(HalfCRUHeader& cruhead, int crurdhversion, int bunchcrossing, int stopbits, int endpoint, int eventtype, int feeid, int cruid);
433uint32_t setHalfCRUHeaderLinkData(HalfCRUHeader& cruhead, int link, int size, int errors);
434uint32_t getlinkerrorflag(const HalfCRUHeader& cruhead, const uint32_t link);
435uint32_t getlinkdatasize(const HalfCRUHeader& cruhead, const uint32_t link);
436uint32_t getlinkerrorflags(const HalfCRUHeader& cruheader, std::array<uint32_t, 15>& linkerrorflags);
437uint32_t getlinkdatasizes(const HalfCRUHeader& cruheader, std::array<uint32_t, 15>& linksizes);
439void printDigitHCHeader(o2::trd::DigitHCHeader& header, uint32_t headers[3]);
440
441//functions updated/checked/new for new raw reader.
442//above methods left for cross checking what changes have occured.
443void constructTrackletHCHeader(TrackletHCHeader& header, int hcid, int chipclock, int format);
444uint16_t constructTRDFeeID(int supermodule, int side, int endpoint);
445uint32_t setHalfCRUHeaderFirstWord(HalfCRUHeader& cruhead, int crurdhversion, int bunchcrossing, int stopbits, int endpoint, int eventtype, int feeid, int cruid);
446void setHalfCRUHeaderLinkSizeAndFlags(HalfCRUHeader& cruhead, int link, int size, int errors);
448
449uint32_t getHalfCRULinkInfo(const HalfCRUHeader& cruhead, const uint32_t link, const bool data);
450uint8_t getHalfCRULinkErrorFlag(const HalfCRUHeader& cruhead, const uint32_t link);
451uint16_t getHalfCRULinkDataSize(const HalfCRUHeader& cruhead, const uint32_t link);
452void getHalfCRULinkErrorFlags(const HalfCRUHeader& cruheader, std::array<uint8_t, 15>& linkerrorflags);
453void getHalfCRULinkDataSizes(const HalfCRUHeader& cruheader, std::array<uint16_t, 15>& linksizes);
454std::ostream& operator<<(std::ostream& stream, const TrackletHCHeader& halfchamberheader);
455std::ostream& operator<<(std::ostream& stream, const TrackletMCMHeader& tracklmcmhead);
456std::ostream& operator<<(std::ostream& stream, const TrackletMCMData& trackletmcmdata);
457std::ostream& operator<<(std::ostream& stream, const DigitHCHeader& halfchamberheader);
458std::ostream& operator<<(std::ostream& stream, const DigitMCMHeader& digitmcmhead);
459std::ostream& operator<<(std::ostream& stream, const DigitMCMData& digitmcmdata);
460std::ostream& operator<<(std::ostream& stream, const DigitMCMADCMask& adcmask);
461std::ostream& operator<<(std::ostream& stream, const HalfCRUHeader& halfcru);
462
466
467void printDigitMCMData(const o2::trd::DigitMCMData& digitmcmdata);
468void printDigitMCMHeader(const o2::trd::DigitMCMHeader& digitmcmhead);
469void printDigitMCMADCMask(const o2::trd::DigitMCMADCMask& digitmcmadcmask);
470
471void printHalfCRUHeader(const o2::trd::HalfCRUHeader& halfcru);
477void incrementADCMask(DigitMCMADCMask& mask, int channel);
478int getDigitHCHeaderWordType(uint32_t word);
479void printDigitHCHeaders(o2::trd::DigitHCHeader& header, uint32_t headers[3], int index, int offset, bool good);
480void printDigitHCHeader(o2::trd::DigitHCHeader& header, uint32_t headers[3]);
481}
482}
483#endif
Global TRD definitions and constants.
uint32_t adcmask
Definition RawData.h:1
uint32_t supermodule
Definition RawData.h:3
uint32_t side
Definition RawData.h:0
uint8_t endpoint
Definition RawData.h:0
uint32_t bunchcrossing
Definition RawData.h:3
GLsizeiptr size
Definition glcorearb.h:659
GLuint index
Definition glcorearb.h:781
GLboolean * data
Definition glcorearb.h:298
GLintptr offset
Definition glcorearb.h:660
GLuint GLuint stream
Definition glcorearb.h:1806
GLint GLuint mask
Definition glcorearb.h:291
GLint GLint GLsizei GLint GLenum format
Definition glcorearb.h:275
DigitMCMADCMask constructBlankADCMask()
Definition RawData.cxx:199
uint32_t getlinkerrorflag(const HalfCRUHeader &cruhead, const uint32_t link)
void printHalfCRUHeader(const o2::trd::HalfCRUHeader &halfcru)
Definition RawData.cxx:230
void printDigitMCMADCMask(const o2::trd::DigitMCMADCMask &digitmcmadcmask)
Definition RawData.cxx:343
bool sanityCheckDigitMCMHeader(const o2::trd::DigitMCMHeader &header)
Definition RawData.cxx:298
uint32_t getlinkerrorflags(const HalfCRUHeader &cruheader, std::array< uint32_t, 15 > &linkerrorflags)
int getDigitHCHeaderWordType(uint32_t word)
Definition RawData.cxx:349
uint32_t getlinkdatasize(const HalfCRUHeader &cruhead, const uint32_t link)
uint8_t getHalfCRULinkErrorFlag(const HalfCRUHeader &cruhead, const uint32_t link)
Definition RawData.cxx:115
void printDigitHCHeaders(o2::trd::DigitHCHeader &header, uint32_t headers[3], int index, int offset, bool good)
Definition RawData.cxx:367
void printTrackletMCMHeader(const o2::trd::TrackletMCMHeader &mcmhead)
Definition RawData.cxx:223
void constructTrackletHCHeader(TrackletHCHeader &header, int hcid, int chipclock, int format)
Definition RawData.cxx:170
uint16_t constructTRDFeeID(int supermodule, int side, int endpoint)
Definition RawData.cxx:187
void getHalfCRULinkErrorFlags(const HalfCRUHeader &cruheader, std::array< uint8_t, 15 > &linkerrorflags)
Definition RawData.cxx:131
uint32_t setHalfCRUHeaderFirstWord(HalfCRUHeader &cruhead, int crurdhversion, int bunchcrossing, int stopbits, int endpoint, int eventtype, int feeid, int cruid)
Definition RawData.cxx:96
bool sanityCheckTrackletHCHeader(const o2::trd::TrackletHCHeader &header)
Definition RawData.cxx:269
void clearHalfCRUHeader(o2::trd::HalfCRUHeader &halfcru)
Definition RawData.cxx:244
uint32_t getHalfCRULinkInfo(const HalfCRUHeader &cruhead, const uint32_t link, const bool data)
void printDigitMCMData(const o2::trd::DigitMCMData &digitmcmdata)
Definition RawData.cxx:338
uint32_t setHalfCRUHeaderLinkData(HalfCRUHeader &cruhead, int link, int size, int errors)
void incrementADCMask(DigitMCMADCMask &mask, int channel)
Definition RawData.cxx:323
void setHalfCRUHeaderLinkSizeAndFlags(HalfCRUHeader &cruhead, int link, int size, int errors)
Definition RawData.cxx:109
void printTrackletHCHeader(const o2::trd::TrackletHCHeader &tracklet)
Definition RawData.cxx:212
bool sanityCheckDigitMCMADCMask(const o2::trd::DigitMCMADCMask &mask)
Definition RawData.cxx:310
void getHalfCRULinkDataSizes(const HalfCRUHeader &cruheader, std::array< uint16_t, 15 > &linksizes)
Definition RawData.cxx:139
bool halfCRUHeaderSanityCheck(const o2::trd::HalfCRUHeader &header)
Definition RawData.cxx:249
uint16_t getHalfCRULinkDataSize(const HalfCRUHeader &cruhead, const uint32_t link)
Definition RawData.cxx:124
uint32_t getlinkdatasizes(const HalfCRUHeader &cruheader, std::array< uint32_t, 15 > &linksizes)
bool sanityCheckTrackletMCMHeader(const o2::trd::TrackletMCMHeader &header)
Definition RawData.cxx:286
void printDigitMCMHeader(const o2::trd::DigitMCMHeader &digitmcmhead)
Definition RawData.cxx:331
void printTrackletMCMData(const o2::trd::TrackletMCMData &tracklet)
Definition RawData.cxx:218
std::ostream & operator<<(std::ostream &stream, const Digit &d)
Definition Digit.cxx:78
uint32_t setHalfCRUHeader(HalfCRUHeader &cruhead, int crurdhversion, int bunchcrossing, int stopbits, int endpoint, int eventtype, int feeid, int cruid)
void printDigitHCHeader(o2::trd::DigitHCHeader &header, uint32_t headers[3])
Definition RawData.cxx:393
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
union o2::trd::DigitHCHeader1::@126 __attribute__
union o2::trd::DigitHCHeader2::@128 __attribute__
union o2::trd::DigitHCHeader3::@130 __attribute__
Digit version of the TrackletHCHeader above, although contents are rather different.
Definition RawData.h:231
union o2::trd::DigitHCHeader::@124 __attribute__
union o2::trd::DigitMCMADCMask::@134 __attribute__
union o2::trd::DigitMCMData::@144 __attribute__
union o2::trd::DigitMCMHeader::@132 __attribute__
Header for half a cru, each cru has 2 output, 1 for each pciid.
Definition RawData.h:35
uint64_t BunchCrossing
Definition RawData.h:89
uint64_t word12[2]
Definition RawData.h:98
uint64_t HeaderVersion
Definition RawData.h:88
uint64_t word47[4]
Definition RawData.h:114
std::map< int, int > linkIDToHCID
Definition RawData.h:427
int getHCID(int link) const
Definition RawData.h:423
void swapLinks(int linkA, int linkB)
Definition RawData.cxx:41
int getLink(int hcid) const
Definition RawData.h:424
std::map< int, int > hcIDToLinkID
Definition RawData.h:428
ClassDefNV(LinkToHCIDMapping, 1)
Frontend Electronics ID, is made up of supermodule, a/c side and the end point encoded as below.
Definition RawData.h:207
uint8_t supermodule
Definition RawData.h:223
uint8_t unused1
Definition RawData.h:222
uint8_t unused2
Definition RawData.h:220
uint16_t word
Definition RawData.h:217
union o2::trd::TRDFeeID::@122 __attribute__
uint8_t endpoint
Definition RawData.h:219
Header for each half chamber.
Definition RawData.h:129
union o2::trd::TrackletHCHeader::@116 __attribute__
union o2::trd::TrackletMCMData::@120 __attribute__
Header for MCM tracklet data outuput.
Definition RawData.h:162
union o2::trd::TrackletMCMHeader::@118 __attribute__
union o2::trd::trdTestPattern1::@136 __attribute__
union o2::trd::trdTestPattern2::@138 __attribute__
union o2::trd::trdTestPattern3::@140 __attribute__
union o2::trd::trdTestPattern6::@142 __attribute__