Project
Loading...
Searching...
No Matches
RDHUtils.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// @brief Class for operations with RawDataHeader
13// @author ruben.shahoyan@cern.ch
14
15#ifndef ALICEO2_RDHUTILS_H
16#define ALICEO2_RDHUTILS_H
17
18#include "GPUCommonDef.h"
19#include "GPUCommonRtypes.h"
21#include "Headers/RDHAny.h"
22#ifndef GPUCA_GPUCODE_DEVICE
23#include <type_traits>
24#endif
25#if !defined(GPUCA_GPUCODE)
27#endif
28#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
29#include "Headers/DAQID.h"
30#endif
31
32namespace o2
33{
34namespace raw
35{
37
38struct RDHUtils {
39
40// disable is the type is a pointer
41#define NOTPTR(T) typename std::enable_if<!std::is_pointer<GPUgeneric() T>::value>::type* = 0
42// dereference SRC pointer as DST type reference
43#define TOREF(DST, SRC) *reinterpret_cast<DST*>(SRC)
44// dereference SRC pointer as DST type const reference
45#define TOCREF(DST, SRC) *reinterpret_cast<const DST*>(SRC)
46
47 using RDHDef = o2::header::RAWDataHeader; // wathever is default
52 using RDHv7 = o2::header::RAWDataHeaderV7; // update this for every new version
53
54 static GPUglobalconstexpr() int GBTWord128 = 16; // length of GBT word
55 static GPUglobalconstexpr() int MAXCRUPage = 512 * GBTWord128;
57
59 template <typename H>
60 static constexpr int getVersion()
61 {
62#ifndef GPUCA_GPUCODE_DEVICE
63 RDHAny::sanityCheckStrict<H>();
64 if (std::is_same<H, RDHv7>::value) {
65 return 7;
66 }
67 if (std::is_same<H, RDHv6>::value) {
68 return 6;
69 }
70 if (std::is_same<H, RDHv5>::value) {
71 return 5;
72 }
73 if (std::is_same<H, RDHv4>::value) {
74 return 4;
75 }
76#else
77 return -1; // dummy value as this method will be used on the CPU only
78#endif // GPUCA_GPUCODE_DEVICE
79 }
80
82 template <typename H>
83 GPUhdi() static uint8_t getVersion(const H& rdh, NOTPTR(H))
84 {
85 return rdh.version;
86 } // same for all
87 GPUhdi() static uint8_t getVersion(const RDHAny& rdh) { return getVersion(rdh.voidify()); }
88 GPUhdi() static uint8_t getVersion(const void* rdhP) { return getVersion(TOCREF(RDHDef, rdhP)); }
89 template <typename H>
90 static void setVersion(H& rdh, uint8_t v, NOTPTR(H))
91 {
92 rdh.word0 = (v < 5 ? 0x0000ffff00004000 : 0x00000000ffff4000) + v;
93 } // same for all (almost)
94 static void setVersion(RDHAny& rdh, uint8_t v) { setVersion(rdh.voidify(), v); }
95 static void setVersion(void* rdhP, uint8_t v) { setVersion(TOREF(RDHDef, rdhP), v); }
96
98 template <typename H>
99 GPUhdi() static int getHeaderSize(const H& rdh, NOTPTR(H))
100 {
101 return rdh.headerSize;
102 } // same for all
103 GPUhdi() static int getHeaderSize(const RDHAny& rdh) { return getHeaderSize(rdh.voidify()); }
104 GPUhdi() static int getHeaderSize(const void* rdhP) { return getHeaderSize(TOCREF(RDHDef, rdhP)); }
105
107 GPUhdi() static uint16_t getBlockLength(const RDHv4& rdh) { return rdh.blockLength; } // exists in v4 only
108 GPUhdi() static uint16_t getBlockLength(const RDHAny& rdh) { return getBlockLength(rdh.voidify()); }
109 GPUhdi() static uint16_t getBlockLength(const void* rdhP)
110 {
111 int version = getVersion(rdhP);
112 if (version == 4) {
113 return getBlockLength(TOCREF(RDHv4, rdhP));
114 } else {
115 processError(getVersion(rdhP), "blockLength");
116 return 0;
117 }
118 }
119 static void setBlockLength(RDHv4& rdh, uint16_t s) { rdh.blockLength = s; }
120 static void setBlockLength(RDHAny& rdh, uint16_t s) { setBlockLength(rdh.voidify(), s); }
121 static void setBlockLength(void* rdhP, uint16_t s)
122 {
123 int version = getVersion(rdhP);
124 if (version == 4) {
125 setBlockLength(TOREF(RDHv4, rdhP), s);
126 } else {
127 processError(getVersion(rdhP), "blockLength");
128 }
129 }
130
132 GPUhdi() static uint16_t getFEEID(const RDHv4& rdh) { return rdh.feeId; } // same name differen position in v3,4
133 template <typename H>
134 GPUhdi() static uint16_t getFEEID(const H& rdh, NOTPTR(H))
135 {
136 return rdh.feeId;
137 }
138 GPUhdi() static uint16_t getFEEID(const RDHAny& rdh) { return getFEEID(rdh.voidify()); }
139 GPUhdi() static uint16_t getFEEID(const void* rdhP)
140 {
141 int version = getVersion(rdhP);
142 if (version > 4) {
143 return getFEEID(TOCREF(RDHv5, rdhP));
144 } else {
145 return getFEEID(TOCREF(RDHv4, rdhP));
146 }
147 }
148 static void setFEEID(RDHv4& rdh, uint16_t v)
149 {
150 rdh.feeId = v;
151 }
152 template <typename H>
153 static void setFEEID(H& rdh, uint16_t v, NOTPTR(H))
154 {
155 rdh.feeId = v;
156 } //
157 static void setFEEID(RDHAny& rdh, uint16_t v) { setFEEID(rdh.voidify(), v); }
158 static void setFEEID(void* rdhP, uint16_t v)
159 {
160 int version = getVersion(rdhP);
161 if (version > 4) {
162 setFEEID(TOREF(RDHv5, rdhP), v);
163 } else {
164 setFEEID(TOREF(RDHv4, rdhP), v);
165 }
166 }
167
169 template <typename H>
170 GPUhdi() static bool getPriorityBit(const H& rdh, NOTPTR(H))
171 {
172 return rdh.priority;
173 } // same for all
174 GPUhdi() static bool getPriorityBit(const RDHAny& rdh) { return getPriorityBit(rdh.voidify()); }
175 GPUhdi() static bool getPriorityBit(const void* rdhP) { return getPriorityBit(TOCREF(RDHDef, rdhP)); }
176 template <typename H>
177 static void setPriorityBit(H& rdh, bool v, NOTPTR(H))
178 {
179 rdh.priority = v;
180 } // same for all
181 static void setPriorityBit(RDHAny& rdh, bool v) { setPriorityBit(rdh.voidify(), v); }
182 static void setPriorityBit(void* rdhP, bool v) { setPriorityBit(TOREF(RDHDef, rdhP), v); }
183
185 template <typename H>
186 GPUhdi() static uint8_t getSourceID(const H& rdh, NOTPTR(H))
187 { // does not exist before V6
188 processError(getVersion(rdh), "sourceID");
189 return 0xff;
190 }
191 GPUhdi() static uint8_t getSourceID(const RDHv7& rdh) { return rdh.sourceID; }
192 GPUhdi() static uint8_t getSourceID(const RDHv6& rdh) { return rdh.sourceID; }
193 GPUhdi() static uint8_t getSourceID(const RDHAny& rdh) { return getSourceID(rdh.voidify()); }
194 GPUhdi() static uint8_t getSourceID(const void* rdhP)
195 {
196 int version = getVersion(rdhP);
197 if (version > 5) {
198 return getSourceID(TOCREF(RDHv6, rdhP));
199 } else {
200 processError(version, "sourceID");
201 return 0xff;
202 }
203 }
204 static void setSourceID(RDHv7& rdh, uint8_t s) { rdh.sourceID = s; }
205 static void setSourceID(RDHv6& rdh, uint8_t s) { rdh.sourceID = s; }
206 static void setSourceID(RDHAny& rdh, uint8_t s) { setSourceID(rdh.voidify(), s); }
207 static void setSourceID(void* rdhP, uint8_t s)
208 {
209 int version = getVersion(rdhP);
210 if (version > 5) {
211 setSourceID(TOREF(RDHv6, rdhP), s);
212 } else {
213 processError(version, "sourceID");
214 }
215 }
216
218 template <typename H>
219 GPUhdi() static uint16_t getOffsetToNext(const H& rdh, NOTPTR(H))
220 {
221 return rdh.offsetToNext;
222 } // same for all
223 GPUhdi() static uint16_t getOffsetToNext(const RDHAny& rdh) { return getOffsetToNext(rdh.voidify()); }
224 GPUhdi() static uint16_t getOffsetToNext(const void* rdhP) { return getOffsetToNext(TOCREF(RDHDef, rdhP)); }
225 template <typename H>
226 static void setOffsetToNext(H& rdh, uint16_t v, NOTPTR(H))
227 {
228 rdh.offsetToNext = v;
229 } // same for all
230 static void setOffsetToNext(RDHAny& rdh, uint16_t v) { setOffsetToNext(rdh.voidify(), v); }
231 static void setOffsetToNext(void* rdhP, uint16_t v) { setOffsetToNext(TOREF(RDHDef, rdhP), v); }
232
234 template <typename H>
235 GPUhdi() static uint16_t getMemorySize(const H& rdh, NOTPTR(H))
236 {
237 return rdh.memorySize;
238 } // same for all
239 GPUhdi() static uint16_t getMemorySize(const RDHAny& rdh) { return getMemorySize(rdh.voidify()); }
240 GPUhdi() static uint16_t getMemorySize(const void* rdhP) { return getMemorySize(TOCREF(RDHDef, rdhP)); }
241 template <typename H>
242 static void setMemorySize(H& rdh, uint16_t v, NOTPTR(H))
243 {
244 rdh.memorySize = v;
245 } // same for all
246 static void setMemorySize(RDHAny& rdh, uint16_t v) { setMemorySize(rdh.voidify(), v); }
247 static void setMemorySize(void* rdhP, uint16_t v) { setMemorySize(TOREF(RDHDef, rdhP), v); }
248
250 template <typename H>
251 GPUhdi() static uint8_t getLinkID(const H& rdh, NOTPTR(H))
252 {
253 return rdh.linkID;
254 } // same for all
255 GPUhdi() static uint8_t getLinkID(const RDHAny& rdh) { return getLinkID(rdh.voidify()); }
256 GPUhdi() static uint8_t getLinkID(const void* rdhP) { return getLinkID(TOCREF(RDHDef, rdhP)); }
257 template <typename H>
258 static void setLinkID(H& rdh, uint8_t v, NOTPTR(H))
259 {
260 rdh.linkID = v;
261 } // same for all
262 static void setLinkID(RDHAny& rdh, uint8_t v) { setLinkID(rdh.voidify(), v); }
263 static void setLinkID(void* rdhP, uint8_t v) { setLinkID(TOREF(RDHDef, rdhP), v); }
264
266 template <typename H>
267 GPUhdi() static uint8_t getPacketCounter(const H& rdh, NOTPTR(H))
268 {
269 return rdh.packetCounter;
270 } // same for all
271 GPUhdi() static uint8_t getPacketCounter(const RDHAny& rdh) { return getPacketCounter(rdh.voidify()); }
272 GPUhdi() static uint8_t getPacketCounter(const void* rdhP) { return getPacketCounter(TOCREF(RDHDef, rdhP)); }
273 template <typename H>
274 static void setPacketCounter(H& rdh, uint8_t v, NOTPTR(H))
275 {
276 rdh.packetCounter = v;
277 } // same for all
278 static void setPacketCounter(RDHAny& rdh, uint8_t v) { setPacketCounter(rdh.voidify(), v); }
279 static void setPacketCounter(void* rdhP, uint8_t v) { setPacketCounter(TOREF(RDHDef, rdhP), v); }
280
282 template <typename H>
283 GPUhdi() static uint16_t getCRUID(const H& rdh, NOTPTR(H))
284 {
285 return rdh.cruID;
286 } // same for all
287 GPUhdi() static uint16_t getCRUID(const RDHAny& rdh) { return getCRUID(rdh.voidify()); }
288 GPUhdi() static uint16_t getCRUID(const void* rdhP) { return getCRUID(TOCREF(RDHDef, rdhP)); }
289 template <typename H>
290 static void setCRUID(H& rdh, uint16_t v, NOTPTR(H))
291 {
292 rdh.cruID = v;
293 } // same for all
294 static void setCRUID(RDHAny& rdh, uint16_t v) { setCRUID(rdh.voidify(), v); }
295 static void setCRUID(void* rdhP, uint16_t v) { setCRUID(TOREF(RDHDef, rdhP), v); }
296
298 template <typename H>
299 GPUhdi() static uint8_t getEndPointID(const H& rdh, NOTPTR(H))
300 {
301 return rdh.endPointID;
302 } // same for all
303 GPUhdi() static uint8_t getEndPointID(const RDHAny& rdh) { return getEndPointID(rdh.voidify()); }
304 GPUhdi() static uint8_t getEndPointID(const void* rdhP) { return getEndPointID(TOCREF(RDHDef, rdhP)); }
305 template <typename H>
306 static void setEndPointID(H& rdh, uint8_t v, NOTPTR(H))
307 {
308 rdh.endPointID = v;
309 } // same for all
310 static void setEndPointID(RDHAny& rdh, uint8_t v) { setEndPointID(rdh.voidify(), v); }
311 static void setEndPointID(void* rdhP, uint8_t v) { setEndPointID(TOREF(RDHDef, rdhP), v); }
312
314 GPUhdi() static uint16_t getHeartBeatBC(const RDHv4& rdh) { return rdh.heartbeatBC; }
315 template <typename H>
316 GPUhdi() static uint16_t getHeartBeatBC(const H& rdh, NOTPTR(H))
317 {
318 return rdh.bunchCrossing;
319 } // starting from V5 no distiction trigger or HB
320 GPUhdi() static uint16_t getHeartBeatBC(const RDHAny& rdh) { return getHeartBeatBC(rdh.voidify()); } // starting from V5 no distiction trigger or HB
321 GPUhdi() static uint16_t getHeartBeatBC(const void* rdhP)
322 {
323 int version = getVersion(rdhP);
324 if (version > 4) {
325 return getHeartBeatBC(TOCREF(RDHv5, rdhP));
326 } else {
327 return getHeartBeatBC(TOCREF(RDHv4, rdhP));
328 }
329 }
330 GPUhdi() static void setHeartBeatBC(RDHv4& rdh, uint16_t v) { rdh.heartbeatBC = v; }
331 template <typename H>
332 GPUhdi() static void setHeartBeatBC(H& rdh, uint16_t v, NOTPTR(H))
333 {
334 rdh.bunchCrossing = v;
335 } // starting from V5 no distiction trigger or HB
336 GPUhdi() static void setHeartBeatBC(RDHAny& rdh, uint16_t v) { setHeartBeatBC(rdh.voidify(), v); }
337 GPUhdi() static void setHeartBeatBC(void* rdhP, uint16_t v)
338 {
339 int version = getVersion(rdhP);
340 if (version > 4) {
341 setHeartBeatBC(TOREF(RDHv5, rdhP), v);
342 } else {
343 setHeartBeatBC(TOREF(RDHv4, rdhP), v);
344 }
345 }
346
348 GPUhdi() static uint32_t getHeartBeatOrbit(const RDHv4& rdh) { return rdh.heartbeatOrbit; }
349 template <typename H>
350 GPUhdi() static uint32_t getHeartBeatOrbit(const H& rdh, NOTPTR(H))
351 {
352 return rdh.orbit;
353 } // starting from V5 no distiction trigger or HB
354 GPUhdi() static uint32_t getHeartBeatOrbit(const RDHAny& rdh) { return getHeartBeatOrbit(rdh.voidify()); }
355 GPUhdi() static uint32_t getHeartBeatOrbit(const void* rdhP)
356 {
357 int version = getVersion(rdhP);
358 if (version > 4) {
359 return getHeartBeatOrbit(TOCREF(RDHv5, rdhP));
360 } else {
361 return getHeartBeatOrbit(TOCREF(RDHv4, rdhP));
362 }
363 }
364 static void setHeartBeatOrbit(RDHv4& rdh, uint32_t v) { rdh.heartbeatOrbit = v; }
365 template <typename H>
366 static void setHeartBeatOrbit(H& rdh, uint32_t v, NOTPTR(H))
367 {
368 rdh.orbit = v;
369 } // starting from V5 no distiction trigger or HB
370 static void setHeartBeatOrbit(RDHAny& rdh, uint32_t v) { setHeartBeatOrbit(rdh.voidify(), v); }
371 static void setHeartBeatOrbit(void* rdhP, uint32_t v)
372 {
373 int version = getVersion(rdhP);
374 if (version > 4) {
376 } else {
378 }
379 }
380
381#ifndef GPUCA_GPUCODE
384 template <typename H>
385 GPUhdi() static IR getHeartBeatIR(const H& rdh, NOTPTR(H))
386 {
387 return {getHeartBeatBC(rdh), getHeartBeatOrbit(rdh)};
388 } // custom extension
389 GPUhdi() static IR getHeartBeatIR(const RDHAny& rdh) { return getHeartBeatIR(rdh.voidify()); }
390 GPUhdi() static IR getHeartBeatIR(const void* rdhP)
391 {
392 int version = getVersion(rdhP);
393 if (version > 4) {
394 return getHeartBeatIR(TOCREF(RDHv5, rdhP));
395 } else {
396 return getHeartBeatIR(TOCREF(RDHv4, rdhP));
397 }
398 }
399
401 template <typename H>
402 GPUhdi() static IR getTriggerIR(const H& rdh, NOTPTR(H))
403 {
404 return {getTriggerBC(rdh), getTriggerOrbit(rdh)};
405 } // custom extension
406 GPUhdi() static IR getTriggerIR(const RDHAny& rdh) { return getTriggerIR(rdh.voidify()); }
407 GPUhdi() static IR getTriggerIR(const void* rdhP)
408 {
409 int version = getVersion(rdhP);
410 if (version > 4) {
411 return getTriggerIR(TOCREF(RDHv5, rdhP));
412 } else {
413 return getTriggerIR(TOCREF(RDHv4, rdhP));
414 }
415 }
416#endif
417
419 GPUhdi() static uint16_t getTriggerBC(const RDHv4& rdh) { return rdh.triggerBC; }
420 template <typename H>
421 GPUhdi() static uint16_t getTriggerBC(const H& rdh, NOTPTR(H))
422 {
423 return rdh.bunchCrossing;
424 } // starting from V5 no distiction trigger or HB
425 GPUhdi() static uint16_t getTriggerBC(const RDHAny& rdh) { return getTriggerBC(rdh.voidify()); }
426 GPUhdi() static uint16_t getTriggerBC(const void* rdhP)
427 {
428 int version = getVersion(rdhP);
429 if (version > 4) {
430 return getTriggerBC(TOCREF(RDHv5, rdhP));
431 } else {
432 return getTriggerBC(TOCREF(RDHv4, rdhP));
433 }
434 }
435 static void setTriggerBC(RDHv4& rdh, uint16_t v) { rdh.triggerBC = v; }
436 template <typename H>
437 static void setTriggerBC(H& rdh, uint16_t v, NOTPTR(H))
438 {
439 rdh.bunchCrossing = v;
440 } // starting from V5 no distiction trigger or HB
441 static void setTriggerBC(RDHAny& rdh, uint16_t v) { setTriggerBC(rdh.voidify(), v); }
442 static void setTriggerBC(void* rdhP, uint16_t v)
443 {
444 int version = getVersion(rdhP);
445 if (version > 4) {
446 setTriggerBC(TOREF(RDHv5, rdhP), v);
447 } else {
448 setTriggerBC(TOREF(RDHv4, rdhP), v);
449 }
450 }
451
453 GPUhdi() static uint32_t getTriggerOrbit(const RDHv4& rdh) { return rdh.triggerOrbit; }
454 template <typename H>
455 GPUhdi() static uint32_t getTriggerOrbit(const H& rdh, NOTPTR(H))
456 {
457 return rdh.orbit;
458 } // starting from V5 no distiction trigger or HB
459 GPUhdi() static uint32_t getTriggerOrbit(const RDHAny& rdh) { return getTriggerOrbit(rdh.voidify()); }
460 GPUhdi() static uint32_t getTriggerOrbit(const void* rdhP)
461 {
462 int version = getVersion(rdhP);
463 if (version > 4) {
464 return getTriggerOrbit(TOCREF(RDHv5, rdhP));
465 } else {
466 return getTriggerOrbit(TOCREF(RDHv4, rdhP));
467 }
468 }
469 static void setTriggerOrbit(RDHv4& rdh, uint32_t v) { rdh.triggerOrbit = v; }
470 template <typename H>
471 static void setTriggerOrbit(H& rdh, uint32_t v, NOTPTR(H))
472 {
473 rdh.orbit = v;
474 } // starting from V5 no distiction trigger or HB
475 static void setTriggerOrbit(RDHAny& rdh, uint32_t v) { setTriggerOrbit(rdh.voidify(), v); }
476 static void setTriggerOrbit(void* rdhP, uint32_t v)
477 {
478 int version = getVersion(rdhP);
479 if (version > 4) {
480 setTriggerOrbit(TOREF(RDHv5, rdhP), v);
481 } else {
482 setTriggerOrbit(TOREF(RDHv4, rdhP), v);
483 }
484 }
485
487 template <typename H>
488 GPUhdi() static uint8_t getDataFormat(const H& rdh, NOTPTR(H))
489 { // does not exist before V7 (Jan. 2023), but <V7 headers are backward compatible to DataFormat=0 (padding)
490 return 0xff;
491 }
492 GPUhdi() static uint8_t getDataFormat(const RDHv7& rdh) { return rdh.dataFormat; }
493 GPUhdi() static uint8_t getDataFormat(const RDHAny& rdh) { return getDataFormat(rdh.voidify()); }
494 GPUhdi() static uint8_t getDataFormat(const void* rdhP) { return (getVersion(rdhP) > 6) ? getDataFormat(TOCREF(RDHv7, rdhP)) : 0; }
495 static void setDataFormat(RDHv7& rdh, uint8_t s) { rdh.dataFormat = s; }
496 static void setDataFormat(RDHAny& rdh, uint8_t s) { setDataFormat(rdh.voidify(), s); }
497 static void setDataFormat(void* rdhP, uint8_t s)
498 {
499 int version = getVersion(rdhP);
500 if (version > 6) {
501 setDataFormat(TOREF(RDHv7, rdhP), s);
502 } else {
503 processError(version, "dataFormat");
504 }
505 }
506
508 template <typename H>
509 GPUhdi() static uint32_t getTriggerType(const H& rdh, NOTPTR(H))
510 {
511 return rdh.triggerType;
512 }
513 GPUhdi() static uint32_t getTriggerType(const RDHv5& rdh) { return rdh.triggerType; } // same name but different positions starting from v5
514 GPUhdi() static uint32_t getTriggerType(const RDHAny& rdh) { return getTriggerType(rdh.voidify()); }
515 GPUhdi() static uint32_t getTriggerType(const void* rdhP)
516 {
517 int version = getVersion(rdhP);
518 if (version > 4) {
519 return getTriggerType(TOCREF(RDHv5, rdhP));
520 } else {
521 return getTriggerType(TOCREF(RDHv4, rdhP));
522 }
523 }
524 template <typename H>
525 static void setTriggerType(H& rdh, uint32_t v, NOTPTR(H))
526 {
527 rdh.triggerType = v;
528 }
529 static void setTriggerType(RDHv5& rdh, uint32_t v) { rdh.triggerType = v; } // same name but different positions starting from v5
530 static void setTriggerType(RDHAny& rdh, uint32_t v) { setTriggerType(rdh.voidify(), v); }
531 static void setTriggerType(void* rdhP, uint32_t v)
532 {
533 int version = getVersion(rdhP);
534 if (version > 4) {
535 setTriggerType(TOREF(RDHv5, rdhP), v);
536 } else {
537 setTriggerType(TOREF(RDHv4, rdhP), v);
538 }
539 }
540
542 template <typename H>
543 GPUhdi() static uint16_t getPageCounter(const H& rdh, NOTPTR(H))
544 {
545 return rdh.pageCnt;
546 } // same name but different positions from V4
547 GPUhdi() static uint16_t getPageCounter(const RDHv5& rdh) { return rdh.pageCnt; }
548 GPUhdi() static uint16_t getPageCounter(const RDHAny& rdh) { return getPageCounter(rdh.voidify()); }
549 GPUhdi() static uint16_t getPageCounter(const void* rdhP)
550 {
551 int version = getVersion(rdhP);
552 if (version > 4) {
553 return getPageCounter(TOCREF(RDHv5, rdhP));
554 } else {
555 return getPageCounter(TOCREF(RDHv4, rdhP));
556 }
557 }
558 template <typename H>
559 static void setPageCounter(H& rdh, uint16_t v, NOTPTR(H))
560 {
561 rdh.pageCnt = v;
562 } // same name but different positions from V4
563 static void setPageCounter(RDHv5& rdh, uint16_t v) { rdh.pageCnt = v; }
564 static void setPageCounter(RDHAny& rdh, uint16_t v) { setPageCounter(rdh.voidify(), v); }
565 static void setPageCounter(void* rdhP, uint16_t v)
566 {
567 int version = getVersion(rdhP);
568 if (version > 4) {
569 setPageCounter(TOREF(RDHv5, rdhP), v);
570 } else {
571 setPageCounter(TOREF(RDHv4, rdhP), v);
572 }
573 }
574
576 template <typename H>
577 GPUhdi() static uint32_t getDetectorField(const H& rdh, NOTPTR(H))
578 {
579 return rdh.detectorField;
580 } // same for all
581 GPUhdi() static uint32_t getDetectorField(const RDHAny& rdh) { return getDetectorField(rdh.voidify()); }
582 GPUhdi() static uint32_t getDetectorField(const void* rdhP) { return getDetectorField(TOCREF(RDHDef, rdhP)); }
583 template <typename H>
584 static void setDetectorField(H& rdh, uint32_t v, NOTPTR(H))
585 {
586 rdh.detectorField = v;
587 } // same for all
588 static void setDetectorField(RDHAny& rdh, uint32_t v) { setDetectorField(rdh.voidify(), v); }
589 static void setDetectorField(void* rdhP, uint32_t v) { setDetectorField(TOREF(RDHDef, rdhP), v); } // same for all
590
592 GPUhdi() static uint16_t getDetectorPAR(const RDHv4& rdh) { return rdh.par; }
593 template <typename H>
594 GPUhdi() static uint16_t getDetectorPAR(const H& rdh, NOTPTR(H))
595 {
596 return rdh.detectorPAR;
597 } // different names starting from V5
598 GPUhdi() static uint16_t getDetectorPAR(const RDHAny& rdh) { return getDetectorPAR(rdh.voidify()); }
599 GPUhdi() static uint16_t getDetectorPAR(const void* rdhP)
600 {
601 int version = getVersion(rdhP);
602 if (version > 4) {
603 return getDetectorPAR(TOCREF(RDHv5, rdhP));
604 } else {
605 return getDetectorPAR(TOCREF(RDHv4, rdhP));
606 }
607 }
608 static void setDetectorPAR(RDHv4& rdh, uint16_t v) { rdh.par = v; }
609 template <typename H>
610 static void setDetectorPAR(H& rdh, uint16_t v, NOTPTR(H))
611 {
612 rdh.detectorPAR = v;
613 } // different names starting from V5
614 static void setDetectorPAR(RDHAny& rdh, uint16_t v) { setDetectorPAR(rdh.voidify(), v); }
615 static void setDetectorPAR(void* rdhP, uint16_t v)
616 {
617 int version = getVersion(rdhP);
618 if (version > 4) {
619 setDetectorPAR(TOREF(RDHv5, rdhP), v);
620 } else {
621 setDetectorPAR(TOREF(RDHv4, rdhP), v);
622 }
623 }
624
626 template <typename H>
627 GPUhdi() static uint8_t getStop(const H& rdh, NOTPTR(H))
628 {
629 return rdh.stop;
630 }
631 GPUhdi() static uint8_t getStop(const RDHv5& rdh)
632 {
633 return rdh.stop;
634 } // same name but different positions starting from v5
635 GPUhdi() static uint8_t getStop(const RDHAny& rdh) { return getStop(rdh.voidify()); }
636 GPUhdi() static uint8_t getStop(const void* rdhP)
637 {
638 int version = getVersion(rdhP);
639 if (version > 4) {
640 return getStop(TOCREF(RDHv5, rdhP));
641 } else {
642 return getStop(TOCREF(RDHv4, rdhP));
643 }
644 }
645 template <typename H>
646 static void setStop(H& rdh, uint8_t v, NOTPTR(H))
647 {
648 rdh.stop = v;
649 } // same name but different positions starting from v5
650 static void setStop(RDHAny& rdh, uint8_t v) { setStop(rdh.voidify(), v); }
651 static void setStop(void* rdhP, uint8_t v)
652 {
653 int version = getVersion(rdhP);
654 if (version > 4) {
655 setStop(TOREF(RDHv5, rdhP), v);
656 } else {
657 setStop(TOREF(RDHv4, rdhP), v);
658 }
659 }
660
662 static void printRDH(const RDHv4& rdh);
663 static void printRDH(const RDHv5& rdh);
664 static void printRDH(const RDHv6& rdh);
665 static void printRDH(const RDHv7& rdh);
666 static void printRDH(const RDHAny& rdh) { printRDH(rdh.voidify()); }
667 static void printRDH(const void* rdhP);
668
670 template <typename H>
671 static void dumpRDH(const H& rdh, NOTPTR(H))
672 {
673 dumpRDH(reinterpret_cast<const void*>(&rdh));
674 }
675 static void dumpRDH(const void* rdhP);
676
678 static bool checkRDH(const RDHv4& rdh, bool verbose = true, bool checkZeros = false);
679 static bool checkRDH(const RDHv5& rdh, bool verbose = true, bool checkZeros = false);
680 static bool checkRDH(const RDHv6& rdh, bool verbose = true, bool checkZeros = false);
681 static bool checkRDH(const RDHv7& rdh, bool verbose = true, bool checkZeros = false);
682 static bool checkRDH(const RDHAny rdh, bool verbose = true, bool checkZeros = false) { return checkRDH(rdh.voidify(), verbose, checkZeros); }
683 static bool checkRDH(const void* rdhP, bool verbose = true, bool checkZeros = false);
684
686#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
688 {
689 // Adapt the same definition as DataDistribution
690 // meaningfull DAQ sourceID means that it comes from RDHv6, in this case we use feeID as a subspec
691 if (srcid != o2::header::DAQID::INVALID) {
692 return feeId;
693 }
694 //else { // this may lead to ambiguities
695 // int linkValue = (LinkSubSpec_t(link) + 1) << (endpoint == 1 ? 8 : 0);
696 // return (LinkSubSpec_t(cru) << 16) | linkValue;
697 //}
698 //
699 // RS At the moment suppress getting the subspec as a hash
700 uint16_t seq[3] = {cru, uint16_t((uint16_t(link) << 8) | endpoint), feeId};
701 return fletcher32(seq, 3);
702 }
703 template <typename H>
704 static LinkSubSpec_t getSubSpec(const H& rdh, NOTPTR(H)) // will be used for all RDH versions but >=6
705 {
706 return getSubSpec(rdh.cruID, rdh.linkID, rdh.endPointID, rdh.feeId, o2::header::DAQID::INVALID);
707 }
708
709 GPUhdi() static LinkSubSpec_t getSubSpec(const RDHv7& rdh) { return getFEEID(rdh); }
710 GPUhdi() static LinkSubSpec_t getSubSpec(const RDHv6& rdh) { return getFEEID(rdh); }
711 GPUhdi() static LinkSubSpec_t getSubSpec(const RDHAny& rdh) { return getSubSpec(rdh.voidify()); }
712 GPUhdi() static LinkSubSpec_t getSubSpec(const void* rdhP)
713 {
714 int version = getVersion(rdhP);
715 if (version > 5) {
716 return getSubSpec(TOCREF(RDHv6, rdhP));
717 } else {
718 return getSubSpec(TOCREF(RDHv4, rdhP));
719 }
720 }
721#endif // GPUCA_GPUCODE / GPUCA_STANDALONE
722
723 private:
724 static uint32_t fletcher32(const uint16_t* data, int len);
725#if defined(GPUCA_GPUCODE_DEVICE) || defined(GPUCA_STANDALONE)
726 template <typename T>
727 GPUhdi() static void processError(int v, const T* field)
728 {
729 }
730#else
731 GPUhdni() static void processError(int v, const char* field);
732#endif
733
734 ClassDefNV(RDHUtils, 1);
735};
736
737} // namespace raw
738} // namespace o2
739
740#endif //ALICEO2_RDHUTILS_H
unsigned short int uint16_t
unsigned int uint32_t
o2::raw::RawFileWriter * raw
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error s
Definition of the RAW Data Header.
uint8_t endpoint
Definition RawData.h:0
uint32_t version
Definition RawData.h:8
#define TOREF(DST, SRC)
Definition RDHUtils.h:43
#define NOTPTR(T)
Definition RDHUtils.h:41
#define TOCREF(DST, SRC)
Definition RDHUtils.h:45
static constexpr ID INVALID
Definition DAQID.h:40
std::uint8_t ID
Definition DAQID.h:32
const GLdouble * v
Definition glcorearb.h:832
GLenum GLenum GLsizei len
Definition glcorearb.h:4232
RAWDataHeaderV7 RAWDataHeader
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
uint64_t blockLength
bit 8 to 15: header size
uint64_t feeId
bit 16 to 31: block length
uint32_t heartbeatOrbit
bit 0 to 31: trigger orbit
uint64_t par
bit 32 to 47: detector field
uint64_t pageCnt
bit 0 to 31: trigger type
uint64_t sourceID
bit 32 to 39: priority bit
uint64_t sourceID
bit 32 to 39: priority bit
GPUhdi() static uint16_t getMemorySize(const void *rdhP)
Definition RDHUtils.h:240
GPUhdi() static int getHeaderSize(const void *rdhP)
Definition RDHUtils.h:104
static void setSourceID(void *rdhP, uint8_t s)
Definition RDHUtils.h:207
GPUhdi() static uint16_t getPageCounter(const RDHv5 &rdh)
Definition RDHUtils.h:547
GPUhdi() static uint16_t getTriggerBC(const H &rdh
GPUhdi() static uint16_t getHeartBeatBC(const void *rdhP)
Definition RDHUtils.h:321
static void setEndPointID(RDHAny &rdh, uint8_t v)
Definition RDHUtils.h:310
GPUhdi() static uint32_t getHeartBeatOrbit(const void *rdhP)
Definition RDHUtils.h:355
GPUhdi() static uint16_t getTriggerBC(const RDHv4 &rdh)
Definition RDHUtils.h:419
static void setHeartBeatOrbit(RDHAny &rdh, uint32_t v)
Definition RDHUtils.h:370
GPUhdi() static uint8_t getSourceID(const void *rdhP)
Definition RDHUtils.h:194
GPUhdi() static uint16_t getOffsetToNext(const RDHAny &rdh)
Definition RDHUtils.h:223
static void setEndPointID(void *rdhP, uint8_t v)
Definition RDHUtils.h:311
GPUhdi() static LinkSubSpec_t getSubSpec(const RDHAny &rdh)
Definition RDHUtils.h:711
GPUhdi() static uint32_t getDetectorField(const void *rdhP)
Definition RDHUtils.h:582
GPUhdi() static uint16_t getPageCounter(const RDHAny &rdh)
Definition RDHUtils.h:548
GPUhdi() static uint32_t getHeartBeatOrbit(const RDHv4 &rdh)
Definition RDHUtils.h:348
static void setTriggerBC(void *rdhP, uint16_t v)
Definition RDHUtils.h:442
GPUhdi() static uint8_t getSourceID(const RDHv6 &rdh)
Definition RDHUtils.h:192
static void setTriggerType(RDHAny &rdh, uint32_t v)
Definition RDHUtils.h:530
GPUhdi() static uint32_t getTriggerType(const RDHAny &rdh)
Definition RDHUtils.h:514
GPUhdi() static uint8_t getSourceID(const RDHAny &rdh)
Definition RDHUtils.h:193
GPUhdi() static LinkSubSpec_t getSubSpec(const void *rdhP)
Definition RDHUtils.h:712
GPUhdi() static LinkSubSpec_t getSubSpec(const RDHv6 &rdh)
Definition RDHUtils.h:710
GPUhdi() static uint16_t getPageCounter(const void *rdhP)
Definition RDHUtils.h:549
static void setPacketCounter(void *rdhP, uint8_t v)
Definition RDHUtils.h:279
static void setDetectorPAR(RDHAny &rdh, uint16_t v)
Definition RDHUtils.h:614
GPUhdi() static uint32_t getTriggerType(const H &rdh
static void setTriggerOrbit(void *rdhP, uint32_t v)
Definition RDHUtils.h:476
GPUhdi() static uint8_t getVersion(const RDHAny &rdh)
Definition RDHUtils.h:87
GPUhdi() static uint8_t getSourceID(const RDHv7 &rdh)
Definition RDHUtils.h:191
GPUhdi() static IR getHeartBeatIR(const RDHAny &rdh)
Definition RDHUtils.h:389
GPUhdi() static uint32_t getHeartBeatOrbit(const RDHAny &rdh)
Definition RDHUtils.h:354
GPUhdi() static uint32_t getTriggerType(const void *rdhP)
Definition RDHUtils.h:515
GPUhdi() static uint8_t getEndPointID(const H &rdh
GPUhdi() static uint16_t getDetectorPAR(const H &rdh
static bool checkRDH(const RDHAny rdh, bool verbose=true, bool checkZeros=false)
Definition RDHUtils.h:682
static void setMemorySize(RDHAny &rdh, uint16_t v)
Definition RDHUtils.h:246
GPUhdi() static uint8_t getEndPointID(const RDHAny &rdh)
Definition RDHUtils.h:303
GPUhdi() static uint32_t getTriggerType(const RDHv5 &rdh)
Definition RDHUtils.h:513
static void setSourceID(RDHv6 &rdh, uint8_t s)
Definition RDHUtils.h:205
GPUhdi() static IR getTriggerIR(const H &rdh
static void setTriggerOrbit(RDHAny &rdh, uint32_t v)
Definition RDHUtils.h:475
GPUhdi() static uint16_t getDetectorPAR(const RDHAny &rdh)
Definition RDHUtils.h:598
static void setVersion(RDHAny &rdh, uint8_t v)
Definition RDHUtils.h:94
GPUhdi() static uint8_t getEndPointID(const void *rdhP)
Definition RDHUtils.h:304
GPUhdi() static uint16_t getCRUID(const void *rdhP)
Definition RDHUtils.h:288
GPUhdi() static uint16_t getTriggerBC(const void *rdhP)
Definition RDHUtils.h:426
GPUhdi() static uint16_t getDetectorPAR(const RDHv4 &rdh)
Definition RDHUtils.h:592
static void setLinkID(void *rdhP, uint8_t v)
Definition RDHUtils.h:263
GPUhdi() static uint8_t getDataFormat(const RDHAny &rdh)
Definition RDHUtils.h:493
GPUhdi() static uint32_t getTriggerOrbit(const void *rdhP)
Definition RDHUtils.h:460
GPUhdi() static uint16_t getFEEID(const RDHAny &rdh)
Definition RDHUtils.h:138
GPUhdi() static uint8_t getPacketCounter(const H &rdh
GPUhdi() static uint8_t getLinkID(const void *rdhP)
Definition RDHUtils.h:256
static void setBlockLength(void *rdhP, uint16_t s)
Definition RDHUtils.h:121
static LinkSubSpec_t getSubSpec(uint16_t cru, uint8_t link, uint8_t endpoint, uint16_t feeId, o2::header::DAQID::ID srcid=o2::header::DAQID::INVALID)
Definition RDHUtils.h:687
GPUhdi() static uint16_t getBlockLength(const RDHAny &rdh)
Definition RDHUtils.h:108
static void setDetectorField(RDHAny &rdh, uint32_t v)
Definition RDHUtils.h:588
static void setPacketCounter(RDHAny &rdh, uint8_t v)
Definition RDHUtils.h:278
static void setTriggerOrbit(H &rdh, uint32_t v, NOTPTR(H))
Definition RDHUtils.h:471
static void setLinkID(H &rdh, uint8_t v, NOTPTR(H))
Definition RDHUtils.h:258
static GPUglobalconstexpr() int GBTWord128
static void setMemorySize(void *rdhP, uint16_t v)
Definition RDHUtils.h:247
o2::header::RAWDataHeaderV5 RDHv5
Definition RDHUtils.h:50
GPUhdi() static uint8_t getLinkID(const H &rdh
GPUhdi() static uint8_t getLinkID(const RDHAny &rdh)
Definition RDHUtils.h:255
static void setDataFormat(RDHAny &rdh, uint8_t s)
Definition RDHUtils.h:496
static void setSourceID(RDHAny &rdh, uint8_t s)
Definition RDHUtils.h:206
GPUhdi() static uint16_t getFEEID(const RDHv4 &rdh)
Definition RDHUtils.h:132
static void setFEEID(RDHAny &rdh, uint16_t v)
Definition RDHUtils.h:157
GPUhdi() static void setHeartBeatBC(RDHAny &rdh
static void setBlockLength(RDHAny &rdh, uint16_t s)
Definition RDHUtils.h:120
static void setStop(void *rdhP, uint8_t v)
Definition RDHUtils.h:651
static void setFEEID(void *rdhP, uint16_t v)
Definition RDHUtils.h:158
GPUhdi() static uint8_t getVersion(const void *rdhP)
Definition RDHUtils.h:88
static void setVersion(void *rdhP, uint8_t v)
Definition RDHUtils.h:95
GPUhdi() static uint16_t getDetectorPAR(const void *rdhP)
Definition RDHUtils.h:599
GPUhdi() static uint16_t getFEEID(const void *rdhP)
Definition RDHUtils.h:139
static void setDataFormat(RDHv7 &rdh, uint8_t s)
Definition RDHUtils.h:495
GPUhdi() static IR getTriggerIR(const RDHAny &rdh)
Definition RDHUtils.h:406
GPUhdi() static int getHeaderSize(const RDHAny &rdh)
Definition RDHUtils.h:103
GPUhdi() static uint16_t getOffsetToNext(const H &rdh
static void setOffsetToNext(RDHAny &rdh, uint16_t v)
Definition RDHUtils.h:230
GPUhdi() static uint8_t getStop(const H &rdh
o2::header::RAWDataHeaderV7 RDHv7
Definition RDHUtils.h:52
GPUhdi() static uint16_t getHeartBeatBC(const RDHAny &rdh)
Definition RDHUtils.h:320
static void setTriggerType(RDHv5 &rdh, uint32_t v)
Definition RDHUtils.h:529
GPUhdi() static uint16_t getHeartBeatBC(const RDHv4 &rdh)
Definition RDHUtils.h:314
GPUhdi() static uint8_t getDataFormat(const void *rdhP)
Definition RDHUtils.h:494
GPUhdi() static IR getHeartBeatIR(const void *rdhP)
Definition RDHUtils.h:390
GPUhdi() static LinkSubSpec_t getSubSpec(const RDHv7 &rdh)
Definition RDHUtils.h:709
static void setDetectorField(H &rdh, uint32_t v, NOTPTR(H))
Definition RDHUtils.h:584
GPUhdi() static uint32_t getTriggerOrbit(const RDHAny &rdh)
Definition RDHUtils.h:459
GPUhdi() static bool getPriorityBit(const H &rdh
static void setTriggerType(H &rdh, uint32_t v, NOTPTR(H))
Definition RDHUtils.h:525
GPUhdi() static uint32_t getHeartBeatOrbit(const H &rdh
GPUhdi() static uint8_t getStop(const void *rdhP)
Definition RDHUtils.h:636
static void setPageCounter(H &rdh, uint16_t v, NOTPTR(H))
Definition RDHUtils.h:559
GPUhdi() static uint16_t getBlockLength(const RDHv4 &rdh)
Definition RDHUtils.h:107
static void setDataFormat(void *rdhP, uint8_t s)
Definition RDHUtils.h:497
GPUhdi() static uint32_t getTriggerOrbit(const H &rdh
GPUhdi() static uint32_t getDetectorField(const H &rdh
static void setPriorityBit(void *rdhP, bool v)
Definition RDHUtils.h:182
GPUhdi() static uint8_t getVersion(const H &rdh
GPUhdi() static uint8_t getSourceID(const H &rdh
static void setPriorityBit(H &rdh, bool v, NOTPTR(H))
Definition RDHUtils.h:177
static void setDetectorPAR(H &rdh, uint16_t v, NOTPTR(H))
Definition RDHUtils.h:610
GPUhdi() static void setHeartBeatBC(void *rdhP
static void setMemorySize(H &rdh, uint16_t v, NOTPTR(H))
Definition RDHUtils.h:242
static void setDetectorPAR(RDHv4 &rdh, uint16_t v)
Definition RDHUtils.h:608
static void setTriggerBC(RDHAny &rdh, uint16_t v)
Definition RDHUtils.h:441
GPUhdi() static bool getPriorityBit(const void *rdhP)
Definition RDHUtils.h:175
GPUhdi() static uint16_t getFEEID(const H &rdh
static void setTriggerType(void *rdhP, uint32_t v)
Definition RDHUtils.h:531
GPUhdi() static uint8_t getPacketCounter(const RDHAny &rdh)
Definition RDHUtils.h:271
static void setPriorityBit(RDHAny &rdh, bool v)
Definition RDHUtils.h:181
static void setPageCounter(RDHv5 &rdh, uint16_t v)
Definition RDHUtils.h:563
GPUhdi() static uint8_t getDataFormat(const RDHv7 &rdh)
Definition RDHUtils.h:492
static void printRDH(const RDHv4 &rdh)
Definition RDHUtils.cxx:26
static bool checkRDH(const RDHv4 &rdh, bool verbose=true, bool checkZeros=false)
Definition RDHUtils.cxx:133
static void setDetectorField(void *rdhP, uint32_t v)
Definition RDHUtils.h:589
GPUhdi() static uint16_t getMemorySize(const RDHAny &rdh)
Definition RDHUtils.h:239
static void setPageCounter(RDHAny &rdh, uint16_t v)
Definition RDHUtils.h:564
GPUhdi() static uint16_t getTriggerBC(const RDHAny &rdh)
Definition RDHUtils.h:425
GPUhdi() static void setHeartBeatBC(H &rdh
static void setVersion(H &rdh, uint8_t v, NOTPTR(H))
Definition RDHUtils.h:90
static void setDetectorPAR(void *rdhP, uint16_t v)
Definition RDHUtils.h:615
GPUhdi() static uint16_t getHeartBeatBC(const H &rdh
static LinkSubSpec_t getSubSpec(const H &rdh, NOTPTR(H))
Definition RDHUtils.h:704
static void setPacketCounter(H &rdh, uint8_t v, NOTPTR(H))
Definition RDHUtils.h:274
static void setSourceID(RDHv7 &rdh, uint8_t s)
Definition RDHUtils.h:204
static void setTriggerBC(RDHv4 &rdh, uint16_t v)
Definition RDHUtils.h:435
static void setHeartBeatOrbit(H &rdh, uint32_t v, NOTPTR(H))
Definition RDHUtils.h:366
o2::header::RAWDataHeaderV6 RDHv6
Definition RDHUtils.h:51
static void setHeartBeatOrbit(void *rdhP, uint32_t v)
Definition RDHUtils.h:371
static void setEndPointID(H &rdh, uint8_t v, NOTPTR(H))
Definition RDHUtils.h:306
GPUhdi() static int getHeaderSize(const H &rdh
static void printRDH(const RDHAny &rdh)
Definition RDHUtils.h:666
GPUhdi() static uint16_t getOffsetToNext(const void *rdhP)
Definition RDHUtils.h:224
static void setStop(RDHAny &rdh, uint8_t v)
Definition RDHUtils.h:650
GPUhdi() static bool getPriorityBit(const RDHAny &rdh)
Definition RDHUtils.h:174
static void setBlockLength(RDHv4 &rdh, uint16_t s)
Definition RDHUtils.h:119
static void setOffsetToNext(void *rdhP, uint16_t v)
Definition RDHUtils.h:231
GPUhdi() static uint8_t getPacketCounter(const void *rdhP)
Definition RDHUtils.h:272
static void setTriggerOrbit(RDHv4 &rdh, uint32_t v)
Definition RDHUtils.h:469
GPUhdi() static void setHeartBeatBC(RDHv4 &rdh
static void setHeartBeatOrbit(RDHv4 &rdh, uint32_t v)
Definition RDHUtils.h:364
GPUhdi() static uint8_t getStop(const RDHAny &rdh)
Definition RDHUtils.h:635
static void setFEEID(RDHv4 &rdh, uint16_t v)
Definition RDHUtils.h:148
static void setTriggerBC(H &rdh, uint16_t v, NOTPTR(H))
Definition RDHUtils.h:437
GPUhdi() static uint32_t getTriggerOrbit(const RDHv4 &rdh)
Definition RDHUtils.h:453
static void setLinkID(RDHAny &rdh, uint8_t v)
Definition RDHUtils.h:262
GPUhdi() static uint16_t getPageCounter(const H &rdh
static void setOffsetToNext(H &rdh, uint16_t v, NOTPTR(H))
Definition RDHUtils.h:226
GPUhdi() static uint16_t getBlockLength(const void *rdhP)
Definition RDHUtils.h:109
static void setStop(H &rdh, uint8_t v, NOTPTR(H))
Definition RDHUtils.h:646
static void setPageCounter(void *rdhP, uint16_t v)
Definition RDHUtils.h:565
static void dumpRDH(const H &rdh, NOTPTR(H))
Definition RDHUtils.h:671
static constexpr int getVersion()
get numeric version of the RDH
Definition RDHUtils.h:60
GPUhdi() static uint16_t getMemorySize(const H &rdh
static void setCRUID(void *rdhP, uint16_t v)
Definition RDHUtils.h:295
GPUhdi() static uint32_t getDetectorField(const RDHAny &rdh)
Definition RDHUtils.h:581
GPUhdi() static uint8_t getStop(const RDHv5 &rdh)
Definition RDHUtils.h:631
static void setCRUID(RDHAny &rdh, uint16_t v)
Definition RDHUtils.h:294
GPUhdi() static IR getHeartBeatIR(const H &rdh
GPUhdi() static IR getTriggerIR(const void *rdhP)
Definition RDHUtils.h:407
GPUhdi() static uint16_t getCRUID(const RDHAny &rdh)
Definition RDHUtils.h:287
static void setCRUID(H &rdh, uint16_t v, NOTPTR(H))
Definition RDHUtils.h:290
static void setFEEID(H &rdh, uint16_t v, NOTPTR(H))
Definition RDHUtils.h:153
GPUhdi() static uint8_t getDataFormat(const H &rdh
GPUhdi() static uint16_t getCRUID(const H &rdh