Project
Loading...
Searching...
No Matches
GPUTPCCFCheckPadBaseline.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
23
24#ifndef O2_GPU_GPU_TPC_CF_CHECK_PAD_BASELINE_H
25#define O2_GPU_GPU_TPC_CF_CHECK_PAD_BASELINE_H
26
27#include "GPUGeneralKernels.h"
28#include "GPUConstantMem.h"
29#include "GPUTPCGeometry.h"
30
31#include "clusterFinderDefs.h"
32#include "CfArray2D.h"
33
34namespace o2::gpu
35{
36
38 uint32_t iPrev;
39 uint32_t iNext;
40 uint16_t pad;
41 uint16_t tailStart;
42 uint16_t tailEnd;
43 int16_t satStart; // First timebin of the saturated plateau that triggered the tail on this pad, -1 if the tail was only inherited from a neighboring pad
44 int16_t satEnd; // Last timebin of that plateau, -1 if inherited
45 float qTot;
46 float qMax;
47};
48
50{
51
52 public:
53 enum {
60 // Threads index shared memory as [iThread / MaxNPadsPerRow][iThread % MaxNPadsPerRow].
61 // Rounding up to a multiple of PadsPerCacheline ensures iThread / MaxNPadsPerRow < NumOfCachedTBs
62 // for all threads, avoiding out-of-bounds access.
63 MaxNPadsPerRow = CAMath::nextMultipleOf<PadsPerCacheline>(GPUTPCGeometry::MaxNPadsPerRow()),
64
65 MaxADC = 1023,
66
67 NThreads = GPUCA_GET_THREAD_COUNT(GPUCA_LB_GPUTPCCFCheckPadBaseline),
69 };
70
72 struct {
73 int16_t start;
74 int16_t end;
75 };
76
77 // Be careful with using default initialized values.
78 // Need default constructor, so can be placed in shared memory.
79 // Might be zero initialized, but invalid tail needs start = end = -1 instead.
81 GPUdi() HipTailRange(int16_t st, int16_t e) : start(st), end(e) {}
82
83 GPUdi() bool HasValue() const { return start > -1; }
84 GPUdi() bool IsOpen() const { return start > -1 && end < 0; }
85
86 GPUdi() void SetOpen(int16_t st)
87 {
88 start = st;
89 end = -1;
90 }
91
92 GPUdi() int16_t Length() const { return end - start; }
93
94 GPUdi() void Reset() { start = end = -1; }
95 };
96
107
108 // Accumulated values from scanning cached charges in a pad
110 int32_t totalCharges = 0;
111 int32_t consecCharges = 0;
112 int32_t maxConsecCharges = 0;
114 int16_t HIPtb = -1;
115 int16_t aboveThresholdStart = -1; // first TB of current above-hipTailThreshold streak; used to extend the tail back over the rising edge before saturation
118 int16_t plateauStart = -1; // first TB of the current / last saturated plateau, only tracked in chunks with a HIP trigger
119 bool plateauOpen = false; // previous TB was saturated
120 int16_t satStart = -1; // saturated plateau that triggered in the current chunk
121 int16_t satEnd = -1;
122 int16_t activeSatStart = -1; // saturated plateau of the active tail, -1 if inherited from a neighbor
123 int16_t activeSatEnd = -1;
124 };
125
128 {
129 return processors.tpcClusterer;
130 }
131
132 GPUhdi() constexpr static gpudatatypes::RecoStep GetRecoStep()
133 {
135 }
136
137 template <int32_t iKernel = defaultKernel>
138 GPUd() static void Thread(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
139
140 private:
141 GPUd() static void CheckBaselineGPU(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
142 GPUd() static void CheckBaselineCPU(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
143
144 GPUd() static void updatePadBaseline(int32_t pad, const GPUTPCClusterFinder&, int32_t totalCharges, int32_t consecCharges, tpccf::Charge maxCharge);
145};
146
148{
149 public:
150 enum {
151 MaxHIPTails = 1 << 15,
152 MaxHIPTailsPerRow = MaxHIPTails,
153 };
154
156 };
157
160 {
161 return processors.tpcClusterer;
162 }
163
164 GPUhdi() constexpr static gpudatatypes::RecoStep GetRecoStep()
165 {
167 }
168
169 template <int32_t iKernel = defaultKernel>
170 GPUd() static void Thread(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer);
171};
172
174{
175 public:
176 enum {
179 };
180
182 };
183
186 {
187 return processors.tpcClusterer;
188 }
189
190 GPUhdi() constexpr static gpudatatypes::RecoStep GetRecoStep()
191 {
193 }
194
195 template <int32_t iKernel = defaultKernel>
196 GPUd() static void Thread(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUSharedMemory& smem, processorType& clusterer, uint8_t onlyMC);
197};
198
199} // namespace o2::gpu
200
201#endif
#define GPUCA_GET_THREAD_COUNT(...)
benchmark::State & st
int32_t int32_t int32_t processorType & processors
GPUhdi() const expr static gpudatatypes
int32_t int32_t int32_t GPUSharedMemory & smem
GPUd() static void Thread(int32_t nBlocks
int32_t int32_t int32_t GPUSharedMemory processorType & clusterer
GPUhdi() static processorType *Processor(GPUConstantMem &processors)
GPUhdi() static processorType *Processor(GPUConstantMem &processors)
GPUhdi() const expr static gpudatatypes
GPUhdi() static processorType *Processor(GPUConstantMem &processors)
GPUhdi() const expr static gpudatatypes
GLuint GLuint end
Definition glcorearb.h:469
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLuint start
Definition glcorearb.h:469
tpccf::Charge charges[NumOfCachedTBs][MaxNPadsPerRow]