Skip to content

Commit 1fd80b8

Browse files
committed
GPU TPC: Remove option to retry refit if cluster rejection breaks the track, we will anyway rebuild the track in the future
1 parent 9ee262c commit 1fd80b8

File tree

7 files changed

+17
-53
lines changed

7 files changed

+17
-53
lines changed

GPU/GPUTracking/Definitions/GPUSettingsList.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation inst
151151
AddOptionRTC(mergerInterpolateRejectAlsoOnCurrentPosition, uint8_t, 1, "", 0, "When using mergerInterpolateErrors, reject based on chi2 twice computed with interpolated and current track position starting from NDF > mergerNonInterpolateRejectMinNDF")
152152
AddOptionRTC(mergerNonInterpolateRejectMinNDF, uint8_t, 5, "", 0, "Minimum NDF of track for non-interpolated reject (both for chi2 and absolute distance)")
153153
AddOptionRTC(mergeCE, uint8_t, 1, "", 0, "Merge tracks accross the central electrode")
154-
AddOptionRTC(retryRefit, int8_t, 1, "", 0, "Retry refit with seeding errors and without cluster rejection when fit fails (=2 means retry in same kernel, =1 for separate kernel")
155154
AddOptionRTC(enablePID, int8_t, 1, "", 0, "Enable PID response")
156155
AddOptionRTC(PID_useNsigma, int8_t, 1, "", 0, "Use nSigma instead of absolute distance in PID response")
157156
AddOptionRTC(adddEdxSubThresholdClusters, int8_t, 1, "", 0, "Add sub threshold clusters in TPC dEdx computation")

GPU/GPUTracking/Global/GPUChainTrackingMerger.cxx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,6 @@ int32_t GPUChainTracking::RunTPCTrackingMerger(bool synchronizeOutput)
221221
}
222222

223223
runKernel<GPUTPCGMMergerTrackFit>(doGPU ? GetGrid(Merger.NMergedTracks(), 0) : GetGridAuto(0), mergerSortTracks ? 1 : 0);
224-
if (param().rec.tpc.retryRefit == 1) {
225-
runKernel<GPUTPCGMMergerTrackFit>(GetGridAuto(0), -1);
226-
}
227224
runKernel<GPUTPCGMMergerFollowLoopers>(GetGridAuto(0));
228225

229226
DoDebugAndDump(RecoStep::TPCMerging, GPUChainTrackingDebugFlags::TPCMergingRefit, Merger, &GPUTPCGMMerger::DumpRefit, *mDebugFile);

GPU/GPUTracking/Merger/GPUTPCGMMerger.cxx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,7 @@ void* GPUTPCGMMerger::SetPointersMerger(void* mem)
329329
computePointerWithAlignment(mem, mSharedCount, mNMaxClusters);
330330
memMax = (void*)std::max((size_t)mem, (size_t)memMax);
331331
mem = memBase;
332-
computePointerWithAlignment(mem, mLoopData, mNMaxTracks); // GPUTPCGMMergerTrackFit - GPUTPCGMMergerFollowLoopers
333-
computePointerWithAlignment(mem, mRetryRefitIds, mNMaxTracks); // Reducing mNMaxTracks for mLoopData / mRetryRefitIds does not save memory, since the other parts are larger anyway
332+
computePointerWithAlignment(mem, mLoopData, mNMaxTracks); // GPUTPCGMMergerTrackFit - GPUTPCGMMergerFollowLoopers, Reducing mNMaxTracks for mLoopData does not save memory, other parts are larger anyway
334333
memMax = (void*)std::max((size_t)mem, (size_t)memMax);
335334
mem = memBase;
336335
computePointerWithAlignment(mem, mLooperCandidates, mNMaxLooperMatches); // MergeLoopers 1-3

GPU/GPUTracking/Merger/GPUTPCGMMerger.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ class GPUTPCGMMerger : public GPUProcessor
6666
static constexpr const int32_t NSECTORS = GPUCA_NSECTORS; //* N sectors
6767

6868
struct memory {
69-
GPUAtomic(uint32_t) nRetryRefit;
7069
GPUAtomic(uint32_t) nLoopData;
7170
GPUAtomic(uint32_t) nUnpackedTracks;
7271
GPUAtomic(uint32_t) nMergedTracks;
@@ -119,7 +118,6 @@ class GPUTPCGMMerger : public GPUProcessor
119118
GPUhdi() GPUAtomic(uint32_t) * ClusterAttachment() const { return mClusterAttachment; }
120119
GPUhdi() uint32_t* TrackOrderAttach() const { return mTrackOrderAttach; }
121120
GPUhdi() uint32_t* TrackOrderProcess() const { return mTrackOrderProcess; }
122-
GPUhdi() uint32_t* RetryRefitIds() const { return mRetryRefitIds; }
123121
GPUhdi() uint8_t* ClusterStateExt() const { return mClusterStateExt; }
124122
GPUhdi() GPUTPCGMLoopData* LoopData() const { return mLoopData; }
125123
GPUhdi() memory* Memory() const { return mMemory; }
@@ -285,7 +283,6 @@ class GPUTPCGMMerger : public GPUProcessor
285283
gputpcgmmergertypes::GPUTPCGMBorderRange* mBorderRangeMemory = nullptr; // memory for border tracks
286284
gputpcgmmergertypes::GPUTPCGMBorderRange* mBorderRange[NSECTORS]; // memory for border tracks
287285
memory* mMemory = nullptr;
288-
uint32_t* mRetryRefitIds = nullptr;
289286
GPUTPCGMLoopData* mLoopData = nullptr;
290287
};
291288
} // namespace o2::gpu

GPU/GPUTracking/Merger/GPUTPCGMMergerGPU.cxx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,9 @@ using namespace o2::gpu;
2121
template <>
2222
GPUdii() void GPUTPCGMMergerTrackFit::Thread<0>(int32_t nBlocks, int32_t nThreads, int32_t iBlock, int32_t iThread, GPUsharedref() GPUSharedMemory& smem, processorType& GPUrestrict() merger, int32_t mode)
2323
{
24-
const int32_t iEnd = mode == -1 ? merger.Memory()->nRetryRefit : merger.NMergedTracks();
25-
GPUCA_TBB_KERNEL_LOOP(merger.GetRec(), int32_t, ii, iEnd, {
26-
const int32_t i = mode == -1 ? merger.RetryRefitIds()[ii] : mode ? merger.TrackOrderProcess()[ii] : ii;
27-
GPUTPCGMTrackParam::RefitTrack(merger.MergedTracks()[i], i, &merger, mode == -1);
24+
GPUCA_TBB_KERNEL_LOOP(merger.GetRec(), int32_t, ii, merger.NMergedTracks(), {
25+
const int32_t i = mode ? merger.TrackOrderProcess()[ii] : ii;
26+
GPUTPCGMTrackParam::RefitTrack(merger.MergedTracks()[i], i, &merger);
2827
});
2928
}
3029

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx

Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
using namespace o2::gpu;
5454
using namespace o2::tpc;
5555

56-
GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_t iTrk, GPUTPCGMMergedTrackHit* GPUrestrict() clusters, int32_t& GPUrestrict() N, int32_t& GPUrestrict() NTolerated, float& GPUrestrict() Alpha, int32_t attempt, float maxSinPhi, GPUTPCGMMergedTrack& GPUrestrict() track)
56+
GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_t iTrk, GPUTPCGMMergedTrackHit* GPUrestrict() clusters, int32_t& GPUrestrict() N, int32_t& GPUrestrict() NTolerated, float& GPUrestrict() Alpha, float maxSinPhi, GPUTPCGMMergedTrack& GPUrestrict() track)
5757
{
5858
static constexpr float kDeg2Rad = M_PI / 180.f;
5959
CADEBUG(static constexpr float kSectAngle = 2 * M_PI / 18.f);
@@ -97,7 +97,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
9797
const float maxSinForUpdate = CAMath::Sin(70.f * kDeg2Rad);
9898

9999
ResetCovariance();
100-
prop.SetSeedingErrors(!(refit && attempt == 0));
100+
prop.SetSeedingErrors(!(refit));
101101
prop.SetFitInProjections(true); // param.rec.fitInProjections == -1 ? (iWay == 0) : param.rec.fitInProjections); // TODO: Reenable once fixed
102102
prop.SetPropagateBzOnly(param.rec.fitPropagateBzOnly == -1 ? !finalFit : param.rec.fitPropagateBzOnly);
103103
prop.SetMatLUT((param.rec.useMatLUT && finalFit) ? merger->GetConstantMem()->calibObjects.matLUT : nullptr);
@@ -110,7 +110,6 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
110110
const bool inFlyDirection = iWay & 1;
111111
const int32_t wayDirection = (iWay & 1) ? -1 : 1;
112112

113-
int32_t goodRows = 0;
114113
for (int32_t ihit = ihitStart; ihit >= 0 && ihit < maxN; ihit += wayDirection) {
115114
const bool crossCE = lastSector != 255 && ((lastSector < 18) ^ (clusters[ihit].sector < 18));
116115
if (crossCE) {
@@ -183,11 +182,6 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
183182
retValProp = prop.PropagateToXAlpha(xx, clAlpha, inFlyDirection);
184183
}
185184
}
186-
if (lastRow == 255 || CAMath::Abs((int32_t)lastRow - (int32_t)cluster.row) > 5 || lastSector != cluster.sector || (param.rec.tpc.trackFitRejectMode < 0 && -nMissed <= param.rec.tpc.trackFitRejectMode)) {
187-
goodRows = 0;
188-
} else {
189-
goodRows++;
190-
}
191185
if (retValProp == 0) {
192186
lastRow = cluster.row;
193187
lastSector = cluster.sector;
@@ -232,17 +226,13 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
232226
retValUpd = GPUTPCGMPropagator::updateErrorClusterRejectedDistance;
233227
} else {
234228
int8_t rejectChi2 = 0;
235-
if (attempt == 0) {
236-
if (param.rec.tpc.mergerInterpolateErrors && CAMath::Abs(ihit - ihitMergeFirst) <= 1) {
237-
if (iWay == nWays - 3) {
238-
rejectChi2 = GPUTPCGMPropagator::rejectInterFill;
239-
} else if (iWay == nWays - 2) {
240-
rejectChi2 = GPUTPCGMPropagator::rejectInterReject;
241-
} else if (iWay == nWays - 1) {
242-
rejectChi2 = (param.rec.tpc.mergerInterpolateRejectAlsoOnCurrentPosition && GetNDF() > (int32_t)param.rec.tpc.mergerNonInterpolateRejectMinNDF) ? GPUTPCGMPropagator::rejectDirect : 0;
243-
}
244-
} else {
245-
rejectChi2 = allowChangeClusters && goodRows > 5;
229+
if (param.rec.tpc.mergerInterpolateErrors && CAMath::Abs(ihit - ihitMergeFirst) <= 1) {
230+
if (iWay == nWays - 3) {
231+
rejectChi2 = GPUTPCGMPropagator::rejectInterFill;
232+
} else if (iWay == nWays - 2) {
233+
rejectChi2 = GPUTPCGMPropagator::rejectInterReject;
234+
} else if (iWay == nWays - 1) {
235+
rejectChi2 = (param.rec.tpc.mergerInterpolateRejectAlsoOnCurrentPosition && GetNDF() > (int32_t)param.rec.tpc.mergerNonInterpolateRejectMinNDF) ? GPUTPCGMPropagator::rejectDirect : 0;
246236
}
247237
}
248238

@@ -891,7 +881,7 @@ GPUd() bool GPUTPCGMTrackParam::CheckNumericalQuality(float overrideCovYY) const
891881
return ok;
892882
}
893883

894-
GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict() track, int32_t iTrk, GPUTPCGMMerger* GPUrestrict() merger, int32_t attempt) // VS: GPUd changed to GPUdii. No change in output and no performance penalty.
884+
GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict() track, int32_t iTrk, GPUTPCGMMerger* GPUrestrict() merger) // VS: GPUd changed to GPUdii. No change in output and no performance penalty.
895885
{
896886
if (!track.OK()) {
897887
return;
@@ -906,27 +896,10 @@ GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict()
906896
GPUTPCGMTrackParam t = track.Param();
907897
float Alpha = track.Alpha();
908898
CADEBUG(int32_t nTrackHitsOld = nTrackHits; float ptOld = t.QPt());
909-
bool ok = t.Fit(merger, iTrk, merger->Clusters() + track.FirstClusterRef(), nTrackHits, NTolerated, Alpha, attempt, GPUCA_MAX_SIN_PHI, track);
899+
bool ok = t.Fit(merger, iTrk, merger->Clusters() + track.FirstClusterRef(), nTrackHits, NTolerated, Alpha, GPUCA_MAX_SIN_PHI, track);
910900
CADEBUG(printf("Finished Fit Track %d\n", iTrk));
911901
CADEBUG(printf("OUTPUT hits %d -> %d+%d = %d, QPt %f -> %f, SP %f, OK %d chi2 %f chi2ndf %f\n", nTrackHitsOld, nTrackHits, NTolerated, nTrackHits + NTolerated, ptOld, t.QPt(), t.SinPhi(), (int32_t)ok, t.Chi2(), t.Chi2() / CAMath::Max(1, nTrackHits)));
912902

913-
if (!ok && attempt == 0 && merger->Param().rec.tpc.retryRefit) {
914-
for (uint32_t i = 0; i < track.NClusters(); i++) {
915-
merger->Clusters()[track.FirstClusterRef() + i].state &= GPUTPCGMMergedTrackHit::clustererAndSharedFlags;
916-
}
917-
CADEBUG(printf("Track rejected, marking for retry\n"));
918-
if (merger->Param().rec.tpc.retryRefit == 2) {
919-
nTrackHits = track.NClusters();
920-
NTolerated = 0; // Clusters not fit but tollerated for track length cut
921-
t = track.Param();
922-
Alpha = track.Alpha();
923-
ok = t.Fit(merger, iTrk, merger->Clusters() + track.FirstClusterRef(), nTrackHits, NTolerated, Alpha, 1, GPUCA_MAX_SIN_PHI, track);
924-
} else {
925-
uint32_t nRefit = CAMath::AtomicAdd(&merger->Memory()->nRetryRefit, 1u);
926-
merger->RetryRefitIds()[nRefit] = iTrk;
927-
return;
928-
}
929-
}
930903
if (CAMath::Abs(t.QPt()) < 1.e-4f) {
931904
t.QPt() = 1.e-4f;
932905
}

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class GPUTPCGMTrackParam
141141
GPUd() bool CheckNumericalQuality(float overrideCovYY = -1.f) const;
142142
GPUd() bool CheckCov() const;
143143

144-
GPUd() bool Fit(GPUTPCGMMerger* merger, int32_t iTrk, GPUTPCGMMergedTrackHit* clusters, int32_t& N, int32_t& NTolerated, float& Alpha, int32_t attempt, float maxSinPhi, GPUTPCGMMergedTrack& track);
144+
GPUd() bool Fit(GPUTPCGMMerger* merger, int32_t iTrk, GPUTPCGMMergedTrackHit* clusters, int32_t& N, int32_t& NTolerated, float& Alpha, float maxSinPhi, GPUTPCGMMergedTrack& track);
145145
GPUd() void MoveToReference(GPUTPCGMPropagator& prop, const GPUParam& param, float& alpha);
146146
GPUd() void MirrorTo(GPUTPCGMPropagator& prop, float toY, float toZ, bool inFlyDirection, const GPUParam& param, uint8_t row, uint8_t clusterState, bool mirrorParameters, int8_t sector);
147147
GPUd() int32_t MergeDoubleRowClusters(int32_t& ihit, int32_t wayDirection, GPUTPCGMMergedTrackHit* clusters, const GPUTPCGMMerger* merger, GPUTPCGMPropagator& prop, float& xx, float& yy, float& zz, int32_t maxN, float clAlpha, uint8_t& clusterState, bool rejectChi2);
@@ -201,7 +201,7 @@ class GPUTPCGMTrackParam
201201
}
202202
}
203203

204-
GPUd() static void RefitTrack(GPUTPCGMMergedTrack& track, int32_t iTrk, GPUTPCGMMerger* merger, int32_t attempt);
204+
GPUd() static void RefitTrack(GPUTPCGMMergedTrack& track, int32_t iTrk, GPUTPCGMMerger* merger);
205205

206206
GPUdi() void ConstrainSinPhi(float limit = GPUCA_MAX_SIN_PHI)
207207
{

0 commit comments

Comments
 (0)