77 return GPUDataTypes::RecoStep::TPCClusterFinding;
80 template <
class Decoder>
87 GPUdi() static const uint8_t* ConsumeBytes(const uint8_t*& page,
size_t nbytes)
89 const uint8_t* oldPage = page;
94 GPUdi() static uint8_t ConsumeByte(const uint8_t*& page)
100 GPUdi() static const T* ConsumeHeader(const uint8_t*& page)
102 assert(
size_t(page) %
alignof(T) == 0);
103 return reinterpret_cast<const T*
>(ConsumeBytes(page,
sizeof(T)));
106 template <
typename T = u
int8_t>
107 GPUdi() static const T* Peek(const uint8_t* page, ptrdiff_t
offset = 0)
112 assert((
size_t(page) +
offset) %
alignof(T) == 0);
113 return reinterpret_cast<const T*
>(page +
offset);
116 GPUdi() static
float ADCToFloat(uint32_t
adc, uint32_t decodeMask,
float decodeBitsFactor)
118 return float(
adc & decodeMask) * decodeBitsFactor;
127 static inline constexpr float DECODE_BITS_FACTOR = 1.f / (1 << (DECODE_BITS - 10));
128 static inline constexpr uint32_t DECODE_MASK = (1 << DECODE_BITS) - 1;
134 template <int32_t iKernel = defaultKernel,
typename... Args>
137 GPUd() static
size_t DecodePage(
GPUSharedMemory& smem,
processorType& clusterer, int32_t iBlock, int32_t nThreads, int32_t iThread, const uint8_t* page, uint32_t pageDigitOffset, int32_t firstHBF);
139 GPUd() static
void GetChannelBitmask(const tpc::zerosupp_link_based::CommonHeader& tbHdr, uint32_t* chan);
140 GPUd() static
bool ChannelIsActive(const uint32_t* chan, uint8_t chanIndex);
142 GPUd() static
void DecodeTBSingleThread(
processorType& clusterer, const uint8_t* adcData, uint32_t nAdc, const uint32_t* channelMask, int32_t timeBin, int32_t cru, int32_t fecInPartition, uint32_t pageDigitOffset);
143 GPUd() static
void DecodeTBMultiThread(
processorType& clusterer, int32_t iThread,
GPUSharedMemory& smem, const uint8_t* adcData, uint32_t nAdc, const uint32_t* channelMask, int32_t timeBin, int32_t cru, int32_t fecInPartition, uint32_t pageDigitOffset);
151 static inline constexpr float DECODE_BITS_FACTOR = 1.f / (1 << (DECODE_BITS - 10));
152 static inline constexpr uint32_t DECODE_MASK = (1 << DECODE_BITS) - 1;
154 static inline constexpr int32_t MaxNLinksPerTimebin = 16;
158 uint16_t samplesPerLinkEnd[MaxNLinksPerTimebin];
159 uint8_t linkIds[MaxNLinksPerTimebin];
160 uint8_t rawFECChannels[MaxNLinksPerTimebin * 80];
163 template <int32_t iKernel = defaultKernel,
typename... Args>
166 GPUd() static uint32_t DecodePage(
GPUSharedMemory& smem,
processorType& clusterer, int32_t iBlock, int32_t nThreads, int32_t iThread, const uint8_t* page, uint32_t pageDigitOffset, int32_t firstHBF);
168 GPUd() static
bool ChannelIsActive(const uint8_t* chan, uint16_t chanIndex);
170 template <
bool DecodeInParallel,
bool PayloadExtendsToNextPage>
171 GPUd() static uint16_t DecodeTB(
processorType& clusterer,
GPUSharedMemory& smem, int32_t iThread, const uint8_t*& page, uint32_t pageDigitOffset, const header::RAWDataHeader* rawDataHeader, int32_t firstHBF, int32_t cru, const uint8_t* payloadEnd, const uint8_t* nextPage);
173 template <
bool PayloadExtendsToNextPage>
174 GPUd() static uint16_t DecodeTBSingleThread(
processorType& clusterer, const uint8_t*& page, uint32_t pageDigitOffset, const header::RAWDataHeader* rawDataHeader, int32_t firstHBF, int32_t cru, const uint8_t* payloadEnd, const uint8_t* nextPage);
176 template <
bool PayloadExtendsToNextPage>
177 GPUd() static uint16_t DecodeTBMultiThread(
processorType& clusterer,
GPUSharedMemory& smem, const int32_t iThread, const uint8_t*& page, uint32_t pageDigitOffset, const header::RAWDataHeader* rawDataHeader, int32_t firstHBF, int32_t cru, const uint8_t* payloadEnd, const uint8_t* nextPage);