@@ -291,9 +291,6 @@ GPUdii() void GPUTPCNNClusterizerKernels::Thread<GPUTPCNNClusterizerKernels::pub
291291
292292 uint32_t maxClusterNum = clusterer.mPmemory ->counters .nClusters ;
293293 uint32_t full_glo_idx = glo_idx + batchStart;
294- if (full_glo_idx >= maxClusterNum) {
295- return ;
296- }
297294 int32_t model_output_index = glo_idx * clustererNN.mNnClusterizerModelReg1NumOutputNodes ;
298295
299296 CfArray2D<PackedCharge> chargeMap (reinterpret_cast <PackedCharge*>(clusterer.mPchargeMap ));
@@ -302,6 +299,24 @@ GPUdii() void GPUTPCNNClusterizerKernels::Thread<GPUTPCNNClusterizerKernels::pub
302299
303300 CPU_ONLY (MCLabelAccumulator labelAccElem (clusterer));
304301 MCLabelAccumulator* labelAcc = CPU_PTR (&labelAccElem);
302+
303+ if (full_glo_idx >= maxClusterNum) {
304+ if (withMC) {
305+ ClusterAccumulator dummy_pc;
306+ CPU_ONLY (labelAcc->collect (peak, central_charge));
307+ GPUTPCCFClusterizer::buildCluster (
308+ clusterer.Param ().rec ,
309+ chargeMap,
310+ peak,
311+ smem.posBcast ,
312+ smem.buf ,
313+ smem.innerAboveThreshold ,
314+ &dummy_pc,
315+ labelAcc);
316+ }
317+ return ;
318+ }
319+
305320 tpc::ClusterNative* clusterOut = (withMC) ? nullptr : clusterer.mPclusterByRow ;
306321
307322 // LOG(info) << glo_idx << " -- " << model_output_index << " / " << clustererNN.outputDataReg1.size() << " / " << clustererNN.mNnClusterizerModelReg1NumOutputNodes << " -- " << clusterer.peakPositions.size() << " -- " << clusterer.centralCharges.size();
@@ -389,6 +404,7 @@ GPUdii() void GPUTPCNNClusterizerKernels::Thread<GPUTPCNNClusterizerKernels::pub
389404 auto & clusterer = processors.tpcClusterer [sector];
390405 auto & clustererNN = processors.tpcNNClusterer [sector];
391406
407+ uint32_t maxClusterNum = clusterer.mPmemory ->counters .nClusters ;
392408 CfArray2D<PackedCharge> chargeMap (reinterpret_cast <PackedCharge*>(clusterer.mPchargeMap ));
393409 CfChargePos peak = clusterer.mPfilteredPeakPositions [CAMath::Min (glo_idx + batchStart, (uint32_t )(clusterer.mPmemory ->counters .nClusters - 1 ))];
394410 float central_charge = static_cast <float >(chargeMap[peak].unpack ());
@@ -397,6 +413,24 @@ GPUdii() void GPUTPCNNClusterizerKernels::Thread<GPUTPCNNClusterizerKernels::pub
397413 MCLabelAccumulator* labelAcc = CPU_PTR (&labelAccElem);
398414 tpc::ClusterNative* clusterOut = (withMC) ? nullptr : clusterer.mPclusterByRow ;
399415 uint32_t full_glo_idx = glo_idx + batchStart;
416+
417+ if (full_glo_idx >= maxClusterNum) {
418+ if (withMC) {
419+ ClusterAccumulator dummy_pc;
420+ CPU_ONLY (labelAcc->collect (peak, central_charge));
421+ GPUTPCCFClusterizer::buildCluster (
422+ clusterer.Param ().rec ,
423+ chargeMap,
424+ peak,
425+ smem.posBcast ,
426+ smem.buf ,
427+ smem.innerAboveThreshold ,
428+ &dummy_pc,
429+ labelAcc);
430+ }
431+ return ;
432+ }
433+
400434 uint32_t model_output_index = glo_idx * clustererNN.mNnClusterizerModelReg2NumOutputNodes ;
401435
402436 if (clustererNN.mOutputDataClass [full_glo_idx] > 0 ) {
0 commit comments