29 noiseSuppressionImpl(
get_num_groups(0),
get_local_size(0),
get_group_id(0),
get_local_id(0), smem, clusterer.Param().rec, chargeMap, isPeakMap, clusterer.mPpeakPositions, clusterer.mPmemory->counters.nPeaks, clusterer.mPisPeak);
42 const
Array2D<uint8_t>& peakMap,
44 const uint32_t peaknum,
45 uint8_t* isPeakPredicate)
52 uint64_t minimas, bigger, peaksAround;
65 peaksAround &= bigger;
67 bool keepMe = keepPeak(minimas, peaksAround);
69 bool iamDummy = (
idx >= peaknum);
74 isPeakPredicate[
idx] = keepMe;
79 const uint8_t* isPeak,
80 const uint32_t peakNum,
91 uint8_t peak = isPeak[idx];
93 peakMap[
pos] = 0b10 | peak;
100 const
float epsilonRelative,
108 uint64_t isMinima = (q -
r > epsilon) && (
float)CAMath::Abs(q -
r) / (float)CAMath::Max(q,
r) > epsilonRelative;
109 *minimas |= (isMinima <<
pos);
111 uint64_t lq = (
r > q);
112 *bigger |= (lq <<
pos);
122 const
float epsilonRelative,
130 checkForMinima(q, epsilon, epsilonRelative,
other,
pos, minimas, bigger);
143 uint64_t p = CfUtils::isPeak(
buf[N * ll +
i]);
145 *peaks |= (p <<
pos);
157 bool otherPeak = (peaks & (uint64_t(1) <<
i));
158 bool minimaBetween = (minima & cfconsts::NoiseSuppressionMinima[
i]);
160 keepMe &= (!otherPeak || minimaBetween);
168 const
Array2D<uint8_t>& peakMap,
183 uint16_t wgSizeHalf = (SCRATCH_PAD_WORK_GROUP_SIZE + 1) / 2;
185 bool inGroup1 = ll < wgSizeHalf;
186 uint16_t llhalf = (inGroup1) ? ll : (ll - wgSizeHalf);
198 SCRATCH_PAD_WORK_GROUP_SIZE,
199 SCRATCH_PAD_WORK_GROUP_SIZE,
203 cfconsts::NoiseSuppressionNeighbors,
213 calibration.tpc.cfNoiseSuppressionEpsilon,
214 calibration.tpc.cfNoiseSuppressionEpsilonRelative / 255.f,
221 SCRATCH_PAD_WORK_GROUP_SIZE,
225 cfconsts::NoiseSuppressionNeighbors,
236 calibration.tpc.cfNoiseSuppressionEpsilon,
237 calibration.tpc.cfNoiseSuppressionEpsilonRelative / 255.f,
245 SCRATCH_PAD_WORK_GROUP_SIZE,
249 cfconsts::NoiseSuppressionNeighbors,
260 calibration.tpc.cfNoiseSuppressionEpsilon,
261 calibration.tpc.cfNoiseSuppressionEpsilonRelative / 255.f,
266#if defined(GPUCA_GPUCODE)
270 SCRATCH_PAD_WORK_GROUP_SIZE,
274 cfconsts::NoiseSuppressionNeighbors,
275 posBcast + wgSizeHalf,
285 calibration.tpc.cfNoiseSuppressionEpsilon,
286 calibration.tpc.cfNoiseSuppressionEpsilonRelative / 255.f,
294 SCRATCH_PAD_WORK_GROUP_SIZE,
298 cfconsts::NoiseSuppressionNeighbors,
299 posBcast + wgSizeHalf,
309 calibration.tpc.cfNoiseSuppressionEpsilon,
310 calibration.tpc.cfNoiseSuppressionEpsilonRelative / 255.f,
324 SCRATCH_PAD_WORK_GROUP_SIZE,
325 SCRATCH_PAD_WORK_GROUP_SIZE,
329 cfconsts::NoiseSuppressionNeighbors,
342 SCRATCH_PAD_WORK_GROUP_SIZE,
343 SCRATCH_PAD_WORK_GROUP_SIZE,
347 cfconsts::NoiseSuppressionNeighbors,
#define NOISE_SUPPRESSION_NEIGHBOR_NUM
#define get_local_size(dim)
#define get_local_id(dim)
#define get_num_groups(dim)
#define get_global_id(dim)
#define get_group_id(dim)
#define GPUCA_UNROLL(optCu, optHi)
GPUd() void GPUTPCCFNoiseSuppression
GPUdii() void GPUTPCCFNoiseSuppression
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLenum GLuint GLenum GLsizei const GLchar * buf
uint8_t itsSharedClusterMap uint8_t
VectorOfTObjectPtrs other
for(int irof=0;irof< 1000;irof++)