15#ifndef O2_GPU_DECODE_ZS_H
16#define O2_GPU_DECODE_ZS_H
29class GPUTPCClusterFinder;
89 template <
class Decoder>
96 GPUdi() static const uint8_t* ConsumeBytes(const uint8_t*& page,
size_t nbytes)
98 const uint8_t* oldPage = page;
103 GPUdi() static uint8_t ConsumeByte(const uint8_t*& page)
108 template <
typename T>
109 GPUdi() static const T* ConsumeHeader(const uint8_t*& page)
111 assert(
size_t(page) %
alignof(T) == 0);
112 return reinterpret_cast<const T*
>(ConsumeBytes(page,
sizeof(T)));
115 template <
typename T = u
int8_t>
116 GPUdi() static const T* Peek(const uint8_t* page, ptrdiff_t
offset = 0)
121 assert((
size_t(page) +
offset) %
alignof(T) == 0);
122 return reinterpret_cast<const T*
>(page +
offset);
125 GPUdi() static
float ADCToFloat(uint32_t
adc, uint32_t decodeMask,
float decodeBitsFactor)
127 return float(
adc & decodeMask) * decodeBitsFactor;
136 static inline constexpr float DECODE_BITS_FACTOR = 1.f / (1 << (DECODE_BITS - 10));
137 static inline constexpr uint32_t DECODE_MASK = (1 << DECODE_BITS) - 1;
143 template <int32_t iKernel = defaultKernel,
typename... Args>
148 GPUd() static
void GetChannelBitmask(const tpc::zerosupp_link_based::CommonHeader& tbHdr, uint32_t* chan);
149 GPUd() static
bool ChannelIsActive(const uint32_t* chan, uint8_t chanIndex);
151 GPUd() static
void DecodeTB(
GPUSharedMemory& smem,
DecodeCtx& ctx, const uint8_t* adcData, uint32_t nAdc, const uint32_t* channelMask, int32_t timeBin, int32_t cru, int32_t fecInPartition);
159 static inline constexpr float DECODE_BITS_FACTOR = 1.f / (1 << (DECODE_BITS - 10));
160 static inline constexpr uint32_t DECODE_MASK = (1 << DECODE_BITS) - 1;
162 static inline constexpr int32_t MaxNLinksPerTimebin = 16;
166 uint16_t samplesPerLinkEnd[MaxNLinksPerTimebin];
167 uint8_t linkIds[MaxNLinksPerTimebin];
168 uint8_t rawFECChannels[MaxNLinksPerTimebin * 80];
171 template <int32_t iKernel = defaultKernel,
typename... Args>
176 GPUd() static
bool ChannelIsActive(const uint8_t* chan, uint16_t chanIndex);
181 template <
bool PayloadExtendsToNextPage>
182 GPUd() static int16_t DecodeTB(
GPUSharedMemory& smem,
DecodeCtx& ctx, const header::RAWDataHeader* rawDataHeader, int32_t cru, uint16_t nSamplesLeftInPage, const uint8_t* payloadEnd, const uint8_t* nextPage);
definitions to deal with the link based zero suppression format
Definitions of TPC Zero Suppression Data Headers.
int32_t int32_t int32_t processorType & processors
GPUhdi() const expr static GPUDataTypes
GPUTPCClusterFinder processorType
GPUdi() static uint8_t ConsumeByte(const uint8_t *&page)
GPUdi() static const T *Peek(const uint8_t *page
GPUdi() static const T *ConsumeHeader(const uint8_t *&page)
GPUhdi() static processorType *Processor(GPUConstantMem &processors)
static GPUSharedMemory int32_t int32_t int32_t iBlock
GPUd() static void Thread(int32_t nBlocks
static GPUSharedMemory int32_t nBlocks
int32_t int32_t int32_t GPUSharedMemory processorType & clusterer
static GPUSharedMemory int32_t int32_t nThreads
GPUhdi() const expr static GPUDataTypes
static GPUSharedMemory int32_t int32_t int32_t int32_t iThread
static GPUSharedMemory int32_t int32_t int32_t int32_t int32_t firstHBF
int32_t int32_t int32_t GPUSharedMemory & smem
int32_t int32_t int32_t GPUSharedMemory processorType Args args
static GPUSharedMemory int32_t int32_t int32_t int32_t int32_t int32_t tpcTimeBinCut
static GPUSharedMemory & s
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
processorType & clusterer
CA_SHARED_STORAGE(uint32_t ZSPage[o2::tpc::TPCZSHDR::TPC_ZS_PAGE_SIZE/sizeof(uint32_t)])
uint32_t RowClusterOffset[o2::tpc::TPCZSHDR::TPC_MAX_ZS_ROW_IN_ENDPOINT]
GPUAtomic(uint32_t) rowOffsetCounter
static constexpr unsigned int TPC_ZS_NBITS_V34
static constexpr size_t TPC_MAX_ZS_ROW_IN_ENDPOINT
static constexpr size_t TPC_ZS_PAGE_SIZE
coder decode(ctfImage, triggersD, clustersD)