@@ -1770,14 +1770,7 @@ GPUd() void GPUTPCGMMerger::PrepareForFit1(int32_t nBlocks, int32_t nThreads, in
17701770 CAMath::AtomicAdd (&mSharedCount [mClusters [trk.FirstClusterRef () + j].num ], 1u );
17711771 }
17721772 if (!trk.CCE () && !trk.MergedLooper ()) {
1773- GPUTPCGMMergedTrack* updTrk = &trk;
1774- while (updTrk->PrevSegment () >= 0 ) {
1775- auto next = &mMergedTracks [updTrk->PrevSegment ()];
1776- if (next == &trk) {
1777- break ;
1778- }
1779- updTrk = next;
1780- }
1773+ GPUTPCGMMergedTrack* updTrk = trk.GetFirstSegment (mMergedTracks );
17811774 const auto &cl0 = mClusters [trk.FirstClusterRef ()], &cln = mClusters [updTrk->FirstClusterRef () + updTrk->NClusters () - 1 ];
17821775 const auto & GPUrestrict () cls = GetConstantMem ()->ioPtrs .clustersNative ->clustersLinear ;
17831776 float z0 = cls[cl0.num ].getTime (), zn = cls[cln.num ].getTime ();
@@ -1946,14 +1939,7 @@ GPUd() void GPUTPCGMMerger::MergeLoopersMain(int32_t nBlocks, int32_t nThreads,
19461939 const GPUTPCGMMergedTrack* trkI = &mMergedTracks [candidates[i].id ];
19471940 float refZI = candidates[i].refz ;
19481941 {
1949- const auto * tmp = trkI;
1950- while (tmp->PrevSegment () >= 0 ) {
1951- const auto * next = &mMergedTracks [tmp->PrevSegment ()];
1952- if (next == trkI) {
1953- break ;
1954- }
1955- tmp = next;
1956- }
1942+ const auto * tmp = trkI->GetFirstSegment (mMergedTracks );
19571943 if (tmp != trkI && tmp->CSide () == trkI->CSide () && CAMath::Abs (tmp->GetParam ().GetZ ()) > CAMath::Abs (trkI->GetParam ().GetZ ())) {
19581944 float tmpRefZ = refZI + tmp->GetParam ().GetZ () - trkI->GetParam ().GetZ ();
19591945 if (CAMath::Abs (tmpRefZ) < CAMath::Abs (candidates[j].refz ) && CAMath::Abs (tmpRefZ) > CAMath::Abs (refZI)) {
0 commit comments