Skip to content

Commit 5446bba

Browse files
committed
GPU TPC: Fix handling of ce-crossing looping tracks
1 parent 5fcbbe5 commit 5446bba

File tree

1 file changed

+25
-20
lines changed

1 file changed

+25
-20
lines changed

GPU/GPUTracking/Merger/GPUTPCGMMerger.cxx

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,17 +1319,6 @@ GPUd() void GPUTPCGMMerger::MergeCE(int32_t nBlocks, int32_t nThreads, int32_t i
13191319
continue;
13201320
}
13211321

1322-
uint32_t newRef = CAMath::AtomicAdd(&mMemory->nMergedTrackClusters, trk[0]->NClusters() + trk[1]->NClusters());
1323-
if (newRef + trk[0]->NClusters() + trk[1]->NClusters() >= mNMaxMergedTrackClusters) {
1324-
raiseError(GPUErrors::ERROR_MERGER_CE_HIT_OVERFLOW, newRef + trk[0]->NClusters() + trk[1]->NClusters(), mNMaxMergedTrackClusters);
1325-
for (uint32_t k = newRef; k < mNMaxMergedTrackClusters; k++) {
1326-
mClusters[k].num = 0;
1327-
mClusters[k].state = 0;
1328-
}
1329-
CAMath::AtomicExch(&mMemory->nMergedTrackClusters, mNMaxMergedTrackClusters);
1330-
return;
1331-
}
1332-
13331322
bool needswap = false;
13341323
if (celooper) {
13351324
const float z0max = -CAMath::Min(cls[mClusters[trk[0]->FirstClusterRef()].num].getTime(), cls[mClusters[trk[0]->FirstClusterRef() + trk[0]->NClusters() - 1].num].getTime());
@@ -1346,15 +1335,6 @@ GPUd() void GPUTPCGMMerger::MergeCE(int32_t nBlocks, int32_t nThreads, int32_t i
13461335
GPUCommonAlgorithm::swap(trk[0], trk[1]);
13471336
}
13481337

1349-
if (celooper) {
1350-
trk[0]->SetMergedLooperConnected(true);
1351-
trk[0]->SetCCE(true);
1352-
trk[0]->SetLooper(true);
1353-
trk[1]->SetCCE(true);
1354-
trk[1]->SetLooper(true);
1355-
continue;
1356-
}
1357-
13581338
if (Param().par.continuousTracking) {
13591339
GPUTPCGMMergedTrackHit* clsmax;
13601340
const float tmax = CAMath::MaxWithRef(cls[mClusters[trk[0]->FirstClusterRef()].num].getTime(), cls[mClusters[trk[0]->FirstClusterRef() + trk[0]->NClusters() - 1].num].getTime(),
@@ -1364,7 +1344,32 @@ GPUd() void GPUTPCGMMerger::MergeCE(int32_t nBlocks, int32_t nThreads, int32_t i
13641344
const float offset = CAMath::Max(tmax - mConstantMem->calibObjects.fastTransformHelper->getCorrMap()->getMaxDriftTime(clsmax->sector, clsmax->row, cls[clsmax->num].getPad()), 0.f);
13651345
trk[1]->Param().Z() += mConstantMem->calibObjects.fastTransformHelper->getCorrMap()->convDeltaTimeToDeltaZinTimeFrame(trk[1]->CSide() * NSECTORS / 2, trk[1]->Param().TOffset() - offset);
13661346
trk[1]->Param().TOffset() = offset;
1347+
if (celooper) {
1348+
trk[0]->Param().Z() += mConstantMem->calibObjects.fastTransformHelper->getCorrMap()->convDeltaTimeToDeltaZinTimeFrame(trk[0]->CSide() * NSECTORS / 2, trk[0]->Param().TOffset() - offset);
1349+
trk[0]->Param().TOffset() = offset;
1350+
}
13671351
}
1352+
1353+
if (celooper) {
1354+
trk[0]->SetMergedLooperConnected(true);
1355+
trk[0]->SetCCE(true);
1356+
trk[0]->SetLooper(true);
1357+
trk[1]->SetCCE(true);
1358+
trk[1]->SetLooper(true);
1359+
continue;
1360+
}
1361+
1362+
uint32_t newRef = CAMath::AtomicAdd(&mMemory->nMergedTrackClusters, trk[0]->NClusters() + trk[1]->NClusters());
1363+
if (newRef + trk[0]->NClusters() + trk[1]->NClusters() >= mNMaxMergedTrackClusters) {
1364+
raiseError(GPUErrors::ERROR_MERGER_CE_HIT_OVERFLOW, newRef + trk[0]->NClusters() + trk[1]->NClusters(), mNMaxMergedTrackClusters);
1365+
for (uint32_t k = newRef; k < mNMaxMergedTrackClusters; k++) {
1366+
mClusters[k].num = 0;
1367+
mClusters[k].state = 0;
1368+
}
1369+
CAMath::AtomicExch(&mMemory->nMergedTrackClusters, mNMaxMergedTrackClusters);
1370+
return;
1371+
}
1372+
13681373
int32_t pos = newRef;
13691374
#pragma unroll
13701375
for (int32_t k = 1; k >= 0; k--) {

0 commit comments

Comments
 (0)