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{
36using LinkSubSpec_t = uint32_t;
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 constexpr int GBTWord128 = 16; // length of GBT word
55 static constexpr 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)
687 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)
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
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
GLboolean * data
Definition glcorearb.h:298
GLenum GLenum GLsizei len
Definition glcorearb.h:4232
RAWDataHeaderV7 RAWDataHeader
uint32_t LinkSubSpec_t
Definition RDHUtils.h:36
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
static constexpr int MAXCRUPage
Definition RDHUtils.h:55
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 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
static constexpr int GBTWord128
Definition RDHUtils.h:54
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