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