15#ifndef ALICEO2_RDHUTILS_H
16#define ALICEO2_RDHUTILS_H
22#ifndef GPUCA_GPUCODE_DEVICE
25#if !defined(GPUCA_GPUCODE)
28#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
41#define NOTPTR(T) typename std::enable_if<!std::is_pointer<GPUgeneric() T>::value>::type* = 0
43#define TOREF(DST, SRC) *reinterpret_cast<DST*>(SRC)
45#define TOCREF(DST, SRC) *reinterpret_cast<const DST*>(SRC)
62#ifndef GPUCA_GPUCODE_DEVICE
63 RDHAny::sanityCheckStrict<H>();
64 if (std::is_same<H, RDHv7>::value) {
67 if (std::is_same<H, RDHv6>::value) {
70 if (std::is_same<H, RDHv5>::value) {
73 if (std::is_same<H, RDHv4>::value) {
92 rdh.word0 = (
v < 5 ? 0x0000ffff00004000 : 0x00000000ffff4000) +
v;
101 return rdh.headerSize;
103 GPUhdi() static
int getHeaderSize(const
RDHAny& rdh) {
return getHeaderSize(rdh.voidify()); }
115 processError(
getVersion(rdhP),
"blockLength");
127 processError(
getVersion(rdhP),
"blockLength");
133 template <
typename H>
152 template <
typename H>
169 template <
typename H>
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>
185 template <
typename H>
200 processError(
version,
"sourceID");
213 processError(
version,
"sourceID");
218 template <
typename H>
221 return rdh.offsetToNext;
225 template <
typename H>
228 rdh.offsetToNext =
v;
234 template <
typename H>
237 return rdh.memorySize;
241 template <
typename H>
250 template <
typename H>
257 template <
typename H>
266 template <
typename H>
269 return rdh.packetCounter;
273 template <
typename H>
276 rdh.packetCounter =
v;
282 template <
typename H>
289 template <
typename H>
298 template <
typename H>
301 return rdh.endPointID;
305 template <
typename H>
315 template <
typename H>
318 return rdh.bunchCrossing;
331 template <
typename H>
334 rdh.bunchCrossing =
v;
349 template <
typename H>
365 template <
typename H>
384 template <
typename H>
387 return {getHeartBeatBC(rdh), getHeartBeatOrbit(rdh)};
389 GPUhdi() static
IR getHeartBeatIR(const
RDHAny& rdh) {
return getHeartBeatIR(rdh.voidify()); }
390 GPUhdi() static
IR getHeartBeatIR(const
void* rdhP)
401 template <
typename H>
404 return {getTriggerBC(rdh), getTriggerOrbit(rdh)};
406 GPUhdi() static
IR getTriggerIR(const
RDHAny& rdh) {
return getTriggerIR(rdh.voidify()); }
420 template <
typename H>
423 return rdh.bunchCrossing;
436 template <
typename H>
439 rdh.bunchCrossing =
v;
454 template <
typename H>
470 template <
typename H>
487 template <
typename H>
503 processError(
version,
"dataFormat");
508 template <
typename H>
511 return rdh.triggerType;
524 template <
typename H>
542 template <
typename H>
558 template <
typename H>
576 template <
typename H>
579 return rdh.detectorField;
583 template <
typename H>
586 rdh.detectorField =
v;
593 template <
typename H>
596 return rdh.detectorPAR;
609 template <
typename H>
626 template <
typename H>
645 template <
typename H>
667 static void printRDH(
const void* rdhP);
670 template <
typename H>
673 dumpRDH(
reinterpret_cast<const void*
>(&rdh));
675 static void dumpRDH(
const void* rdhP);
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);
686#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
701 return fletcher32(seq, 3);
703 template <
typename H>
725#if defined(GPUCA_GPUCODE_DEVICE) || defined(GPUCA_STANDALONE)
726 template <
typename T>
727 GPUhdi() static
void processError(
int v, const T* field)
731 GPUhdni() static
void processError(
int v, const
char* field);
unsigned short int uint16_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
GLenum GLenum GLsizei len
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
GPUhdi() static uint16_t getMemorySize(const void *rdhP)
GPUhdi() static int getHeaderSize(const void *rdhP)
static void setSourceID(void *rdhP, uint8_t s)
GPUhdi() static uint16_t getPageCounter(const RDHv5 &rdh)
GPUhdi() static uint16_t getTriggerBC(const H &rdh
GPUhdi() static uint16_t getHeartBeatBC(const void *rdhP)
static void setEndPointID(RDHAny &rdh, uint8_t v)
GPUhdi() static uint32_t getHeartBeatOrbit(const void *rdhP)
GPUhdi() static uint16_t getTriggerBC(const RDHv4 &rdh)
static void setHeartBeatOrbit(RDHAny &rdh, uint32_t v)
GPUhdi() static uint8_t getSourceID(const void *rdhP)
GPUhdi() static uint16_t getOffsetToNext(const RDHAny &rdh)
static void setEndPointID(void *rdhP, uint8_t v)
GPUhdi() static LinkSubSpec_t getSubSpec(const RDHAny &rdh)
GPUhdi() static uint32_t getDetectorField(const void *rdhP)
GPUhdi() static uint16_t getPageCounter(const RDHAny &rdh)
GPUhdi() static uint32_t getHeartBeatOrbit(const RDHv4 &rdh)
static void setTriggerBC(void *rdhP, uint16_t v)
GPUhdi() static uint8_t getSourceID(const RDHv6 &rdh)
static void setTriggerType(RDHAny &rdh, uint32_t v)
GPUhdi() static uint32_t getTriggerType(const RDHAny &rdh)
GPUhdi() static uint8_t getSourceID(const RDHAny &rdh)
GPUhdi() static LinkSubSpec_t getSubSpec(const void *rdhP)
GPUhdi() static LinkSubSpec_t getSubSpec(const RDHv6 &rdh)
GPUhdi() static uint16_t getPageCounter(const void *rdhP)
static void setPacketCounter(void *rdhP, uint8_t v)
static void setDetectorPAR(RDHAny &rdh, uint16_t v)
GPUhdi() static uint32_t getTriggerType(const H &rdh
static void setTriggerOrbit(void *rdhP, uint32_t v)
GPUhdi() static uint8_t getVersion(const RDHAny &rdh)
GPUhdi() static uint8_t getSourceID(const RDHv7 &rdh)
GPUhdi() static IR getHeartBeatIR(const RDHAny &rdh)
GPUhdi() static uint32_t getHeartBeatOrbit(const RDHAny &rdh)
GPUhdi() static uint32_t getTriggerType(const void *rdhP)
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)
static void setMemorySize(RDHAny &rdh, uint16_t v)
GPUhdi() static uint8_t getEndPointID(const RDHAny &rdh)
GPUhdi() static uint32_t getTriggerType(const RDHv5 &rdh)
static void setSourceID(RDHv6 &rdh, uint8_t s)
GPUhdi() static IR getTriggerIR(const H &rdh
static void setTriggerOrbit(RDHAny &rdh, uint32_t v)
GPUhdi() static uint16_t getDetectorPAR(const RDHAny &rdh)
static void setVersion(RDHAny &rdh, uint8_t v)
GPUhdi() static uint8_t getEndPointID(const void *rdhP)
GPUhdi() static uint16_t getCRUID(const void *rdhP)
GPUhdi() static uint16_t getTriggerBC(const void *rdhP)
GPUhdi() static uint16_t getDetectorPAR(const RDHv4 &rdh)
static void setLinkID(void *rdhP, uint8_t v)
GPUhdi() static uint8_t getDataFormat(const RDHAny &rdh)
GPUhdi() static uint32_t getTriggerOrbit(const void *rdhP)
GPUhdi() static uint16_t getFEEID(const RDHAny &rdh)
GPUhdi() static uint8_t getPacketCounter(const H &rdh
GPUhdi() static uint8_t getLinkID(const void *rdhP)
static void setBlockLength(void *rdhP, uint16_t s)
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)
GPUhdi() static uint16_t getBlockLength(const RDHAny &rdh)
static void setDetectorField(RDHAny &rdh, uint32_t v)
static void setPacketCounter(RDHAny &rdh, uint8_t v)
static void setTriggerOrbit(H &rdh, uint32_t v, NOTPTR(H))
static void setLinkID(H &rdh, uint8_t v, NOTPTR(H))
static GPUglobalconstexpr() int GBTWord128
static void setMemorySize(void *rdhP, uint16_t v)
o2::header::RAWDataHeaderV5 RDHv5
GPUhdi() static uint8_t getLinkID(const H &rdh
GPUhdi() static uint8_t getLinkID(const RDHAny &rdh)
static void setDataFormat(RDHAny &rdh, uint8_t s)
static void setSourceID(RDHAny &rdh, uint8_t s)
GPUhdi() static uint16_t getFEEID(const RDHv4 &rdh)
static void setFEEID(RDHAny &rdh, uint16_t v)
GPUhdi() static void setHeartBeatBC(RDHAny &rdh
static void setBlockLength(RDHAny &rdh, uint16_t s)
static void setStop(void *rdhP, uint8_t v)
static void setFEEID(void *rdhP, uint16_t v)
GPUhdi() static uint8_t getVersion(const void *rdhP)
static void setVersion(void *rdhP, uint8_t v)
GPUhdi() static uint16_t getDetectorPAR(const void *rdhP)
GPUhdi() static uint16_t getFEEID(const void *rdhP)
static void setDataFormat(RDHv7 &rdh, uint8_t s)
GPUhdi() static IR getTriggerIR(const RDHAny &rdh)
GPUhdi() static int getHeaderSize(const RDHAny &rdh)
GPUhdi() static uint16_t getOffsetToNext(const H &rdh
static void setOffsetToNext(RDHAny &rdh, uint16_t v)
GPUhdi() static uint8_t getStop(const H &rdh
o2::header::RAWDataHeaderV7 RDHv7
GPUhdi() static uint16_t getHeartBeatBC(const RDHAny &rdh)
static void setTriggerType(RDHv5 &rdh, uint32_t v)
GPUhdi() static uint16_t getHeartBeatBC(const RDHv4 &rdh)
GPUhdi() static uint8_t getDataFormat(const void *rdhP)
GPUhdi() static IR getHeartBeatIR(const void *rdhP)
GPUhdi() static LinkSubSpec_t getSubSpec(const RDHv7 &rdh)
static void setDetectorField(H &rdh, uint32_t v, NOTPTR(H))
GPUhdi() static uint32_t getTriggerOrbit(const RDHAny &rdh)
GPUhdi() static bool getPriorityBit(const H &rdh
static void setTriggerType(H &rdh, uint32_t v, NOTPTR(H))
GPUhdi() static uint32_t getHeartBeatOrbit(const H &rdh
GPUhdi() static uint8_t getStop(const void *rdhP)
static void setPageCounter(H &rdh, uint16_t v, NOTPTR(H))
GPUhdi() static uint16_t getBlockLength(const RDHv4 &rdh)
static void setDataFormat(void *rdhP, uint8_t s)
GPUhdi() static uint32_t getTriggerOrbit(const H &rdh
GPUhdi() static uint32_t getDetectorField(const H &rdh
static void setPriorityBit(void *rdhP, bool v)
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))
static void setDetectorPAR(H &rdh, uint16_t v, NOTPTR(H))
GPUhdi() static void setHeartBeatBC(void *rdhP
static void setMemorySize(H &rdh, uint16_t v, NOTPTR(H))
static void setDetectorPAR(RDHv4 &rdh, uint16_t v)
static void setTriggerBC(RDHAny &rdh, uint16_t v)
GPUhdi() static bool getPriorityBit(const void *rdhP)
GPUhdi() static uint16_t getFEEID(const H &rdh
static void setTriggerType(void *rdhP, uint32_t v)
GPUhdi() static uint8_t getPacketCounter(const RDHAny &rdh)
static void setPriorityBit(RDHAny &rdh, bool v)
static void setPageCounter(RDHv5 &rdh, uint16_t v)
GPUhdi() static uint8_t getDataFormat(const RDHv7 &rdh)
static void printRDH(const RDHv4 &rdh)
static bool checkRDH(const RDHv4 &rdh, bool verbose=true, bool checkZeros=false)
static void setDetectorField(void *rdhP, uint32_t v)
GPUhdi() static uint16_t getMemorySize(const RDHAny &rdh)
static void setPageCounter(RDHAny &rdh, uint16_t v)
GPUhdi() static uint16_t getTriggerBC(const RDHAny &rdh)
GPUhdi() static void setHeartBeatBC(H &rdh
static void setVersion(H &rdh, uint8_t v, NOTPTR(H))
static void setDetectorPAR(void *rdhP, uint16_t v)
GPUhdi() static uint16_t getHeartBeatBC(const H &rdh
static LinkSubSpec_t getSubSpec(const H &rdh, NOTPTR(H))
static void setPacketCounter(H &rdh, uint8_t v, NOTPTR(H))
static void setSourceID(RDHv7 &rdh, uint8_t s)
static void setTriggerBC(RDHv4 &rdh, uint16_t v)
static void setHeartBeatOrbit(H &rdh, uint32_t v, NOTPTR(H))
o2::header::RAWDataHeaderV6 RDHv6
static void setHeartBeatOrbit(void *rdhP, uint32_t v)
static void setEndPointID(H &rdh, uint8_t v, NOTPTR(H))
GPUhdi() static int getHeaderSize(const H &rdh
static void printRDH(const RDHAny &rdh)
GPUhdi() static uint16_t getOffsetToNext(const void *rdhP)
static void setStop(RDHAny &rdh, uint8_t v)
GPUhdi() static bool getPriorityBit(const RDHAny &rdh)
static void setBlockLength(RDHv4 &rdh, uint16_t s)
static void setOffsetToNext(void *rdhP, uint16_t v)
GPUhdi() static uint8_t getPacketCounter(const void *rdhP)
static void setTriggerOrbit(RDHv4 &rdh, uint32_t v)
GPUhdi() static void setHeartBeatBC(RDHv4 &rdh
static void setHeartBeatOrbit(RDHv4 &rdh, uint32_t v)
GPUhdi() static uint8_t getStop(const RDHAny &rdh)
static void setFEEID(RDHv4 &rdh, uint16_t v)
static void setTriggerBC(H &rdh, uint16_t v, NOTPTR(H))
GPUhdi() static uint32_t getTriggerOrbit(const RDHv4 &rdh)
static void setLinkID(RDHAny &rdh, uint8_t v)
GPUhdi() static uint16_t getPageCounter(const H &rdh
static void setOffsetToNext(H &rdh, uint16_t v, NOTPTR(H))
GPUhdi() static uint16_t getBlockLength(const void *rdhP)
static void setStop(H &rdh, uint8_t v, NOTPTR(H))
static void setPageCounter(void *rdhP, uint16_t v)
static void dumpRDH(const H &rdh, NOTPTR(H))
static constexpr int getVersion()
get numeric version of the RDH
GPUhdi() static uint16_t getMemorySize(const H &rdh
static void setCRUID(void *rdhP, uint16_t v)
GPUhdi() static uint32_t getDetectorField(const RDHAny &rdh)
GPUhdi() static uint8_t getStop(const RDHv5 &rdh)
static void setCRUID(RDHAny &rdh, uint16_t v)
GPUhdi() static IR getHeartBeatIR(const H &rdh
GPUhdi() static IR getTriggerIR(const void *rdhP)
GPUhdi() static uint16_t getCRUID(const RDHAny &rdh)
static void setCRUID(H &rdh, uint16_t v, NOTPTR(H))
static void setFEEID(H &rdh, uint16_t v, NOTPTR(H))
GPUhdi() static uint8_t getDataFormat(const H &rdh
GPUhdi() static uint16_t getCRUID(const H &rdh