ATLAS Offline Software
Loading...
Searching...
No Matches
TgcByteStreamData.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef MUONTGC_CNVTOOLS_TGCBYTESTREAMDATA_H
6#define MUONTGC_CNVTOOLS_TGCBYTESTREAMDATA_H
7
9
10#include <cstring> // This file is needed to use memset.
11
12const uint32_t TGC_BYTESTREAM_HEADER = 0xee1234ee;
13const uint32_t TGC_BYTESTREAM_HEADERSIZE = 0x9;
14const uint32_t TGC_BYTESTREAM_HEADERVERSION = 0x03000300;
15const uint32_t TGC_BYTESTREAM_STATUSSIZE = 0x5;
16
19{
20 unsigned rodid: 8;
21 unsigned fill1: 8;
22 unsigned side: 8;
23 unsigned fill2: 8;
24
25 TGC_BYTESTREAM_SOURCEID() { memset(this, 0, sizeof(*this)); }
26};
27
30{
31 unsigned badBcID: 1;
32 unsigned badL1Id: 1;
33 unsigned timedout: 1;
34 unsigned badData: 1;
35 unsigned overflow: 1;
36 unsigned fill1: 11;
37
38 TGC_BYTESTREAM_ERRORS() { memset(this, 0, sizeof(*this)); }
39};
40
43{
44 unsigned mergedHitBCs: 1;
45 unsigned mergedTrackletBCs: 1;
46 unsigned sortedHits: 1;
47 unsigned sortedTracklets: 1;
48 unsigned fill1: 10;
49 unsigned hasRoI: 1;
50 unsigned fakeSsw: 1;
51
52 unsigned fill2: 1;
53 unsigned raw: 1;
54 unsigned hitsRO: 1;
55 unsigned trkRO: 1;
56 unsigned hitsCH: 1;
57 unsigned trkCH: 1;
58 unsigned fill3: 2;
59 unsigned hipt: 1;
60 unsigned sl: 1;
61 unsigned fill4: 6;
62
63 TGC_BYTESTREAM_LOCALSTATUS() { memset(this, 0, sizeof(*this)); }
64};
65
68{
69 unsigned count: 24;
70 unsigned id: 8;
71};
72
75{
76 unsigned channel: 8;
77 unsigned sbId: 5;
78 unsigned sbType: 3;
79 unsigned adj: 1;
80 unsigned ldbId: 4;
81 unsigned bcBitmap: 3;
82 unsigned tracklet: 6;
83 unsigned fill1: 1;
84 unsigned ok: 1;
85
86 TGC_BYTESTREAM_READOUTHIT() { memset(this, 0, sizeof(*this)); }
87};
88
91{
92 unsigned rphi: 5;
93 unsigned subm: 2;
94 unsigned seg: 1;
95 signed delta: 4;
96 unsigned sbId: 5;
97 unsigned ldbId: 4;
98 unsigned bcBitmap: 3;
99 unsigned trkType: 3;
100 unsigned fill1: 1;
101 unsigned slbType: 3;
102 unsigned ok: 1;
103
104 TGC_BYTESTREAM_READOUTTRACKLET() { memset(this, 0, sizeof(*this)); }
105};
106
109{
110 unsigned phi: 4;
111 unsigned subc: 2;
112 unsigned fill1: 1;
113 unsigned seg: 1;
114 unsigned fill2: 4;
115 unsigned sbId: 5;
116 unsigned ldbId: 4;
117 unsigned bcBitmap: 3;
118 unsigned trkType: 3;
119 unsigned fill3: 1;
120 unsigned slbType: 3;
121 unsigned ok: 1;
122
123 TGC_BYTESTREAM_READOUTTRIPLETSTRIP() { memset(this, 0, sizeof(*this)); }
124};
125
128{
129 signed delta: 5;
130 unsigned sub: 1;
131 unsigned hitId: 3;
132 unsigned hipt: 1;
133 unsigned cand: 1;
134 unsigned chip: 2;
135 unsigned sector: 3;
136 unsigned fwd: 1;
137 unsigned strip: 1;
138 unsigned bcBitmap: 3;
139 unsigned fill1: 11;
140
141 TGC_BYTESTREAM_HIPT() { memset(this, 0, sizeof(*this)); }
142};
143
146{
147 unsigned inner: 8;
148 unsigned fill1: 1;
149 unsigned hipt: 1;
150 unsigned cand: 1;
151 unsigned chip: 2;
152 unsigned sector: 3;
153 unsigned fwd: 1;
154 unsigned strip: 1;
155 unsigned bcBitmap: 3;
156 unsigned fill2: 11;
157
158 TGC_BYTESTREAM_HIPT_INNER() { memset(this, 0, sizeof(*this)); }
159};
160
163{
164 unsigned roi: 8;
165 unsigned overlap: 1;
166 unsigned threshold: 3;
167 unsigned fill1: 1;
168 unsigned bcId: 3;
169 unsigned sign: 1;
170 unsigned cand: 1;
171 unsigned sector: 3;
172 unsigned fwd: 1;
173 unsigned bcBitmap: 3;
174 unsigned cand2plus: 1;
175 unsigned veto: 1;
176 unsigned fill2: 5;
177
178 TGC_BYTESTREAM_SL() { memset(this, 0, sizeof(*this)); }
179};
180
181/**********************/
183/**********************/
184
186{
187 unsigned roi: 8;
188 unsigned pt: 4;
189 unsigned charge: 1;
190 unsigned coinflag: 3;
191 unsigned innerflag: 4;
192 unsigned fill1: 2;
193 unsigned bcBitmap: 2;
194 unsigned sector: 4;
195 unsigned fwd: 1;
196 unsigned type: 3;
197
198 TGC_BYTESTREAM_NSL_ROI() { memset(this, 0, sizeof(*this)); }
199};
200
202{
203 unsigned eta: 8;
204 unsigned phi: 6;
205 unsigned fill1: 3;
206 unsigned input: 3;
207 unsigned cand: 2;
208 unsigned bcBitmap: 2;
209 unsigned sector: 4;
210 unsigned fwd: 1;
211 unsigned type: 3;
212
213 TGC_BYTESTREAM_NSW_POS() { memset(this, 0, sizeof(*this)); }
214};
215
217{
218 unsigned angle: 5;
219 unsigned phires: 1;
220 unsigned lowres: 1;
221 unsigned fill1: 2;
222 unsigned nswid: 4;
223 unsigned bcid: 4;
224 unsigned input: 3;
225 unsigned cand: 2;
226 unsigned bcBitmap: 2;
227 unsigned sector: 4;
228 unsigned fwd: 1;
229 unsigned type: 3;
230
231 TGC_BYTESTREAM_NSW_ANG() { memset(this, 0, sizeof(*this)); }
232};
233
235{
236 unsigned eta: 6;
237 unsigned phi: 6;
238 unsigned fill1: 8;
239 unsigned cand: 2;
240 unsigned bcBitmap: 2;
241 unsigned sector: 4;
242 unsigned fwd: 1;
243 unsigned type: 3;
244
245 TGC_BYTESTREAM_RPCBIS78_POS() { memset(this, 0, sizeof(*this)); }
246};
248{
249 unsigned fill1: 4;
250 unsigned deta: 3;
251 unsigned dphi: 3;
252 unsigned flag: 2;
253 unsigned fill2: 1;
254 unsigned bcid: 4;
255 unsigned fill3: 3;
256 unsigned cand: 2;
257 unsigned bcBitmap: 2;
258 unsigned sector: 4;
259 unsigned fwd: 1;
260 unsigned type: 3;
261
262 TGC_BYTESTREAM_RPCBIS78_COIN() { memset(this, 0, sizeof(*this)); }
263};
264
266{
267 unsigned ei: 8;
268 unsigned fi: 8;
269 unsigned chamberid: 3;
270 unsigned fill1: 3;
271 unsigned bcBitmap: 2;
272 unsigned sector: 4;
273 unsigned fwd: 1;
274 unsigned type: 3;
275
276 TGC_BYTESTREAM_NSL_EIFI() { memset(this, 0, sizeof(*this)); }
277};
278
280{
281 signed delta: 5;
282 unsigned sub: 1;
283 unsigned hitId: 3;
284 unsigned hipt: 1;
285 unsigned cand: 1;
286 unsigned chip: 2;
287 unsigned strip: 1;
288 unsigned fill1: 8;
289 unsigned bcBitmap: 2;
290 unsigned sector: 4;
291 unsigned fwd: 1;
292 unsigned type: 3;
293
294 TGC_BYTESTREAM_NSL_HIPT() { memset(this, 0, sizeof(*this)); }
295};
296
298{
299 unsigned module: 12;
300 unsigned bcid: 4;
301 unsigned fill1: 6;
302 unsigned bcBitmap: 2;
303 unsigned sector: 4;
304 unsigned fwd: 1;
305 unsigned type: 3;
306
307 TGC_BYTESTREAM_NSL_TMDB() { memset(this, 0, sizeof(*this)); }
308};
309
310/*****************************/
312/*****************************/
313
314
315template <typename DEST, typename SRC> DEST* my_pointer_cast(SRC* src) {
316 void* ptr = src;
317 return reinterpret_cast<DEST*>(ptr);
318}
319template <class T> inline uint32_t toBS32(T& data) { return *(my_pointer_cast<uint32_t>(&data)); }
320template <class T> inline uint16_t toBS16(T& data) { return *(my_pointer_cast<uint16_t>(&data)); }
321template <class T> inline void fromBS32(uint32_t data, T& s) { s = *(my_pointer_cast<T>(&data)); }
322template <class T> inline void fromBS16(uint16_t data, T& s) { s = *(my_pointer_cast<T>(&data)); }
323inline uint8_t low8(uint32_t data) { return (uint8_t)(data & 0x000000ff); }
324inline uint16_t low16(uint32_t data) { return (uint16_t)(data & 0x0000ffff); }
325inline uint16_t high16(uint32_t data) { return (uint16_t)(data >> 16); }
326inline uint16_t bcId(uint32_t data) { return data & 0xfff; }
327
328inline int fragmentCount(uint32_t data, int id)
329{
331 fromBS32(data, counter);
332 if(counter.id != (unsigned int)id)
333 {
334 REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "TgcByteStreamData")
335 << "Requested count of frament " << id << ", data is for fragment " << counter.id << endmsg;
336 return 0;
337 }
338 return counter.count;
339}
340
341inline uint32_t from16(uint16_t high16, uint16_t low16)
342{
343 return (uint32_t)((high16 << 16) | low16);
344}
345
346inline uint32_t from8(uint8_t high8, uint8_t highmid8, uint8_t lowmid8, uint8_t low8)
347{
348 return (uint32_t)((high8 << 24) | (highmid8 << 16) | (lowmid8 << 8) | low8);
349}
350
351inline unsigned bcBitmap(uint16_t bcTag)
352{
353 return (bcTag == 1 ? 4 :
354 ((bcTag == 0 || bcTag == 2) ? 2 :
355 (bcTag == 3 ? 1 :
356 0)));
357}
358
359inline unsigned bcTag(unsigned bcBitMap)
360{
361 return (bcBitMap == 4 ? 1 :
362 (bcBitMap == 2 ? 2 :
363 (bcBitMap == 1 ? 3 :
364 0)));
365}
366
367#endif // MUONTGC_CNVTOOLS_TGCBYTESTREAMDATA_H
#define endmsg
Helpers for checking error return status codes and reporting errors.
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
int fragmentCount(uint32_t data, int id)
const uint32_t TGC_BYTESTREAM_STATUSSIZE
unsigned bcBitmap(uint16_t bcTag)
uint16_t low16(uint32_t data)
uint16_t toBS16(T &data)
void fromBS16(uint16_t data, T &s)
const uint32_t TGC_BYTESTREAM_HEADERVERSION
uint32_t toBS32(T &data)
uint32_t from8(uint8_t high8, uint8_t highmid8, uint8_t lowmid8, uint8_t low8)
void fromBS32(uint32_t data, T &s)
uint32_t from16(uint16_t high16, uint16_t low16)
DEST * my_pointer_cast(SRC *src)
end of structs for NewSL
uint8_t low8(uint32_t data)
uint16_t bcId(uint32_t data)
unsigned bcTag(unsigned bcBitMap)
const uint32_t TGC_BYTESTREAM_HEADER
const uint32_t TGC_BYTESTREAM_HEADERSIZE
uint16_t high16(uint32_t data)
The struct for fragment count in ByteStream.