Skip to content

Commit 9b52633

Browse files
committed
Revert "GPU TPC: Remove option to retry refit if cluster rejection breaks the track, we will anyway rebuild the track in the future"
This reverts commit 5c3d113. We can actually properly retry also for rebuilt tracks, we just run the retry on the last iteration after rebuilding.
1 parent a40a98d commit 9b52633

File tree

8 files changed

+60
-30
lines changed

8 files changed

+60
-30
lines changed

GPU/GPUTracking/Definitions/GPUSettingsList.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation inst
160160
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")
161161
AddOptionRTC(mergerNonInterpolateRejectMinNDF, uint8_t, 5, "", 0, "Minimum NDF of track for non-interpolated reject (both for chi2 and absolute distance)")
162162
AddOptionRTC(mergeCE, uint8_t, 1, "", 0, "Merge tracks accross the central electrode")
163+
AddOptionRTC(retryRefit, int8_t, 1, "", 0, "Retry refit with seeding errors and without cluster rejection when fit fails")
163164
AddOptionRTC(enablePID, int8_t, 1, "", 0, "Enable PID response")
164165
AddOptionRTC(PID_useNsigma, int8_t, 1, "", 0, "Use nSigma instead of absolute distance in PID response")
165166
AddOptionRTC(adddEdxSubThresholdClusters, int8_t, 1, "", 0, "Add sub threshold clusters in TPC dEdx computation")

GPU/GPUTracking/Global/GPUChainTrackingMerger.cxx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,10 @@ int32_t GPUChainTracking::RunTPCTrackingMerger(bool synchronizeOutput)
240240
DoDebugAndDump(RecoStep::TPCMerging, GPUChainTrackingDebugFlags::TPCMergingRefit, Merger, &GPUTPCGMMerger::DumpRebuiltTracks, *mDebugFile);
241241
runKernel<GPUTPCGMMergerTrackFit>(doGPU ? GetGrid(Merger.NMergedTracks(), 0) : GetGridAuto(0), mergerSortTracks ? 1 : 0, 1);
242242
}
243+
if (param().rec.tpc.retryRefit) {
244+
runKernel<GPUTPCGMMergerTrackFit>(GetGridAuto(0), -1, param().rec.tpc.rebuildTrackInFit);
245+
}
246+
243247
runKernel<GPUTPCGMMergerFollowLoopers>(GetGridAuto(0));
244248

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

GPU/GPUTracking/Merger/GPUTPCGMMerger.cxx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,13 +402,16 @@ void* GPUTPCGMMerger::SetPointersMerger(void* mem)
402402
computePointerWithAlignment(mem, mTrackSort, mNMaxTracks);
403403
memMax = (void*)std::max((size_t)mem, (size_t)memMax);
404404
mem = memBase;
405-
computePointerWithAlignment(mem, mLoopData, mNMaxTracks); // GPUTPCGMMergerTrackFit - GPUTPCGMMergerFollowLoopers, Reducing mNMaxTracks for mLoopData does not save memory, other parts are larger anyway
405+
computePointerWithAlignment(mem, mLoopData, mNMaxTracks); // GPUTPCGMMergerTrackFit - GPUTPCGMMergerFollowLoopers, Reducing mNMaxTracks does not save memory, other parts are larger anyway
406406
if (mRec->GetParam().rec.tpc.rebuildTrackInFit) {
407407
computePointerWithAlignment(mem, mSharedCount2, mNClusters);
408408
computePointerWithAlignment(mem, mClusterCandidates, mNMaxTracks * GPUCA_ROW_COUNT * mRec->GetParam().rec.tpc.rebuildTrackInFitClusterCandidates);
409409
computePointerWithAlignment(mem, mTrackRebuildHelper, mNMaxTracks);
410410
computePointerWithAlignment(mem, mHitWeights, mNClusters);
411411
}
412+
if (mRec->GetParam().rec.tpc.retryRefit) {
413+
computePointerWithAlignment(mem, mRetryRefitIds, mNMaxTracks);
414+
}
412415
memMax = (void*)std::max((size_t)mem, (size_t)memMax);
413416
mem = memBase;
414417
computePointerWithAlignment(mem, mLooperCandidates, mNMaxLooperMatches); // MergeLoopers 1-3

GPU/GPUTracking/Merger/GPUTPCGMMerger.h

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

6868
struct memory {
69+
GPUAtomic(uint32_t) nRetryRefit;
6970
GPUAtomic(uint32_t) nLoopData;
7071
GPUAtomic(uint32_t) nUnpackedTracks;
7172
GPUAtomic(uint32_t) nMergedTracks;
@@ -130,6 +131,7 @@ class GPUTPCGMMerger : public GPUProcessor
130131
GPUhdi() GPUAtomic(uint32_t) * ClusterAttachment() const { return mClusterAttachment; }
131132
GPUhdi() uint32_t* TrackOrderAttach() const { return mTrackOrderAttach; }
132133
GPUhdi() uint32_t* TrackOrderProcess() const { return mTrackOrderProcess; }
134+
GPUhdi() uint32_t* RetryRefitIds() const { return mRetryRefitIds; }
133135
GPUhdi() uint8_t* ClusterStateExt() const { return mClusterStateExt; }
134136
GPUhdi() GPUTPCGMLoopData* LoopData() const { return mLoopData; }
135137
GPUhdi() memory* Memory() const { return mMemory; }
@@ -312,6 +314,7 @@ class GPUTPCGMMerger : public GPUProcessor
312314
gputpcgmmergertypes::GPUTPCGMBorderRange* mBorderRangeMemory = nullptr; // memory for border tracks
313315
gputpcgmmergertypes::GPUTPCGMBorderRange* mBorderRange[NSECTORS]; // memory for border tracks
314316
memory* mMemory = nullptr;
317+
uint32_t* mRetryRefitIds = nullptr;
315318
GPUTPCGMLoopData* mLoopData = nullptr;
316319
};
317320
} // namespace o2::gpu

GPU/GPUTracking/Merger/GPUTPCGMMergerGPU.cxx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ 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, int32_t rebuilt)
2323
{
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, rebuilt);
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, rebuilt, mode == -1);
2728
});
2829
}
2930

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
using namespace o2::gpu;
4949
using namespace o2::tpc;
5050

51-
GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_t iTrk, int32_t& GPUrestrict() N, int32_t& GPUrestrict() NTolerated, float& GPUrestrict() Alpha, GPUTPCGMMergedTrack& GPUrestrict() track, bool rebuilt)
51+
GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_t iTrk, int32_t& GPUrestrict() N, int32_t& GPUrestrict() NTolerated, float& GPUrestrict() Alpha, GPUTPCGMMergedTrack& GPUrestrict() track, bool rebuilt, bool retryAttempt)
5252
{
5353
static constexpr float maxSinPhi = GPUCA_MAX_SIN_PHI;
5454

@@ -92,7 +92,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_
9292
const bool finalFit = iWay == nWays - 1;
9393

9494
ResetCovariance();
95-
prop.SetSeedingErrors(!(refit));
95+
prop.SetSeedingErrors(!(refit && !retryAttempt));
9696
prop.SetFitInProjections(true); // param.rec.fitInProjections == -1 ? (iWay == 0) : param.rec.fitInProjections); // TODO: Reenable once fixed
9797
prop.SetPropagateBzOnly(param.rec.fitPropagateBzOnly == -1 ? !finalFit : param.rec.fitPropagateBzOnly);
9898
prop.SetMatLUT((param.rec.useMatLUT && finalFit) ? merger.GetConstantMem()->calibObjects.matLUT : nullptr);
@@ -240,7 +240,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_
240240
continue;
241241
}
242242

243-
int32_t retValHit = FitHit(merger, iTrk, track, xx, yy, zz, clusterState, clAlpha, iWay, inFlyDirection, deltaZ, lastUpdateX, clusters, prop, inter, dEdx, dEdxAlt, sumInvSqrtCharge, nAvgCharge, ihit, ihitMergeFirst, allowChangeClusters, refit, finalFit, nMissed, nMissed2, resetT0, uncorrectedY);
243+
int32_t retValHit = FitHit(merger, iTrk, track, xx, yy, zz, clusterState, clAlpha, iWay, inFlyDirection, deltaZ, lastUpdateX, clusters, prop, inter, dEdx, dEdxAlt, sumInvSqrtCharge, nAvgCharge, ihit, ihitMergeFirst, allowChangeClusters, refit, finalFit, nMissed, nMissed2, resetT0, uncorrectedY, retryAttempt);
244244
if (retValHit == 0) {
245245
DodEdx(dEdx, dEdxAlt, merger, finalFit, ihit, ihitMergeFirst, wayDirection, clusters, clusterState, zz, dEdxSubThresholdRow);
246246
ihitStart = ihit;
@@ -257,7 +257,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_
257257
lastUpdateRow = cluster.row;
258258
assert(!param.rec.tpc.mergerInterpolateErrors || rebuilt || iWay != nWays - 2 || ihit || interpolationIndex == 0);
259259
}
260-
if (finalOutInFit && !(param.rec.tpc.disableRefitAttachment & 4) && lastUpdateRow != 255) {
260+
if (finalOutInFit && !(param.rec.tpc.disableRefitAttachment & 4) && lastUpdateRow != 255 && !retryAttempt) {
261261
StoreLoopPropagation(merger, lastSector, lastUpdateRow, iTrk, lastUpdateRow > clusters[(iWay & 1) ? (maxN - 1) : 0].row, prop.GetAlpha());
262262
CADEBUG(printf("\t\tSTORING %d lastUpdateRow %d row %d out %d\n", iTrk, (int)lastUpdateRow, (int)clusters[(iWay & 1) ? (maxN - 1) : 0].row, lastUpdateRow > clusters[(iWay & 1) ? (maxN - 1) : 0].row));
263263
}
@@ -348,7 +348,7 @@ GPUdii() void GPUTPCGMTrackParam::HandleCrossCE(const GPUParam& GPUrestrict() pa
348348
}
349349
}
350350

351-
GPUdii() int32_t GPUTPCGMTrackParam::FitHit(GPUTPCGMMerger& GPUrestrict() merger, const int32_t iTrk, const GPUTPCGMMergedTrack& GPUrestrict() track, const float xx, const float yy, const float zz, const uint8_t clusterState, const float clAlpha, const int32_t iWay, const bool inFlyDirection, float& GPUrestrict() deltaZ, float& GPUrestrict() lastUpdateX, GPUTPCGMMergedTrackHit* GPUrestrict() clusters, GPUTPCGMPropagator& GPUrestrict() prop, gputpcgmmergertypes::InterpolationErrorHit& GPUrestrict() inter, GPUdEdx& GPUrestrict() dEdx, GPUdEdx& GPUrestrict() dEdxAlt, float& GPUrestrict() sumInvSqrtCharge, int32_t& GPUrestrict() nAvgCharge, const int32_t ihit, const int32_t ihitMergeFirst, const bool allowChangeClusters, const bool refit, const bool finalFit, int32_t& GPUrestrict() nMissed, int32_t& GPUrestrict() nMissed2, int32_t& GPUrestrict() resetT0, float uncorrectedY)
351+
GPUdii() int32_t GPUTPCGMTrackParam::FitHit(GPUTPCGMMerger& GPUrestrict() merger, const int32_t iTrk, const GPUTPCGMMergedTrack& GPUrestrict() track, const float xx, const float yy, const float zz, const uint8_t clusterState, const float clAlpha, const int32_t iWay, const bool inFlyDirection, float& GPUrestrict() deltaZ, float& GPUrestrict() lastUpdateX, GPUTPCGMMergedTrackHit* GPUrestrict() clusters, GPUTPCGMPropagator& GPUrestrict() prop, gputpcgmmergertypes::InterpolationErrorHit& GPUrestrict() inter, GPUdEdx& GPUrestrict() dEdx, GPUdEdx& GPUrestrict() dEdxAlt, float& GPUrestrict() sumInvSqrtCharge, int32_t& GPUrestrict() nAvgCharge, const int32_t ihit, const int32_t ihitMergeFirst, const bool allowChangeClusters, const bool refit, const bool finalFit, int32_t& GPUrestrict() nMissed, int32_t& GPUrestrict() nMissed2, int32_t& GPUrestrict() resetT0, float uncorrectedY, bool retryAttempt)
352352
{
353353
const GPUParam& GPUrestrict() param = merger.Param();
354354
const int32_t nWays = param.rec.tpc.nWays;
@@ -372,23 +372,25 @@ GPUdii() int32_t GPUTPCGMTrackParam::FitHit(GPUTPCGMMerger& GPUrestrict() merger
372372

373373
prop.GetErr2(err2Y, err2Z, param, zz, cluster.row, clusterState, cluster.sector, time, invAvgCharge, invCharge);
374374

375-
bool rejectChi2 = (clusterState & GPUTPCGMMergedTrackHit::flagReject);
376-
if (param.rec.tpc.mergerInterpolateErrors) {
377-
if (iWay == nWays - 2) {
378-
if (!param.rec.tpc.rebuildTrackInFit) {
379-
if (inter.isValid()) {
380-
retValInt = prop.InterpolateReject(param, yy, zz, clusterState, &inter, err2Y, err2Z, deltaZ);
381-
} else {
375+
bool rejectChi2 = !retryAttempt && (clusterState & GPUTPCGMMergedTrackHit::flagReject);
376+
if (!retryAttempt) {
377+
if (param.rec.tpc.mergerInterpolateErrors) {
378+
if (iWay == nWays - 2) {
379+
if (!param.rec.tpc.rebuildTrackInFit) {
380+
if (inter.isValid()) {
381+
retValInt = prop.InterpolateReject(param, yy, zz, clusterState, &inter, err2Y, err2Z, deltaZ);
382+
} else {
383+
rejectChi2 = true;
384+
}
385+
}
386+
} else if (iWay == nWays - 1) {
387+
if (param.rec.tpc.mergerInterpolateRejectAlsoOnCurrentPosition && GetNDF() > (int32_t)param.rec.tpc.mergerNonInterpolateRejectMinNDF) {
382388
rejectChi2 = true;
383389
}
384390
}
385-
} else if (iWay == nWays - 1) {
386-
if (param.rec.tpc.mergerInterpolateRejectAlsoOnCurrentPosition && GetNDF() > (int32_t)param.rec.tpc.mergerNonInterpolateRejectMinNDF) {
387-
rejectChi2 = true;
388-
}
391+
} else {
392+
rejectChi2 = allowChangeClusters;
389393
}
390-
} else {
391-
rejectChi2 = allowChangeClusters;
392394
}
393395

394396
if (param.rec.tpc.rejectEdgeClustersInTrackFit && uncorrectedY > -1e6f && param.rejectEdgeClusterByY(uncorrectedY, cluster.row, CAMath::Sqrt(mC[0]))) {
@@ -894,6 +896,10 @@ GPUdic(0, 1) void GPUTPCGMTrackParam::StoreLoopPropagation(const GPUTPCGMMerger&
894896

895897
GPUdii() void GPUTPCGMTrackParam::PropagateLooper(const GPUTPCGMMerger& GPUrestrict() merger, int32_t loopIdx)
896898
{
899+
GPUTPCGMLoopData& data = merger.LoopData()[loopIdx];
900+
if (!merger.MergedTracks()[data.track].OK()) {
901+
return;
902+
}
897903
GPUTPCGMPropagator prop;
898904
prop.SetMaterialTPC();
899905
prop.SetPolynomialField(&merger.Param().polynomialField);
@@ -903,7 +909,6 @@ GPUdii() void GPUTPCGMTrackParam::PropagateLooper(const GPUTPCGMMerger& GPUrestr
903909
prop.SetFitInProjections(true);
904910
prop.SetPropagateBzOnly(false);
905911

906-
GPUTPCGMLoopData& data = merger.LoopData()[loopIdx];
907912
prop.SetTrack(&data.param, data.alpha);
908913
if (merger.Param().rec.tpc.looperFollowMode == 1) {
909914
data.param.AttachClustersLooperFollow(merger, prop, data.sector, data.row, data.track, data.outwards);
@@ -1142,7 +1147,7 @@ GPUd() bool GPUTPCGMTrackParam::CheckNumericalQuality(float overrideCovYY) const
11421147
return ok;
11431148
}
11441149

1145-
GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict() track, int32_t iTrk, GPUTPCGMMerger& GPUrestrict() merger, bool rebuilt) // VS: GPUd changed to GPUdii. No change in output and no performance penalty.
1150+
GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict() track, int32_t iTrk, GPUTPCGMMerger& GPUrestrict() merger, bool rebuilt, bool retryAttempt)
11461151
{
11471152
if (!track.OK()) {
11481153
return;
@@ -1154,16 +1159,29 @@ GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict()
11541159
int32_t NTolerated = 0; // Clusters not fit but tollerated for track length cut
11551160
GPUTPCGMTrackParam t = track.Param();
11561161
float Alpha = track.Alpha();
1157-
bool ok = t.Fit(merger, iTrk, nTrackHits, NTolerated, Alpha, track, rebuilt);
1162+
bool ok = t.Fit(merger, iTrk, nTrackHits, NTolerated, Alpha, track, rebuilt, retryAttempt);
11581163
CADEBUG(if (!merger.Param().rec.tpc.rebuildTrackInFit || rebuilt) printf("Finished Fit Track %7d --- OUTPUT hits %d -> %d+%d = %d, QPt %f -> %f, SP %f, OK %d chi2 %f chi2ndf %f\n", iTrk, track.NClusters(), nTrackHits, NTolerated, nTrackHits + NTolerated, track.GetParam().GetQPt(), t.QPt(), t.SinPhi(), (int32_t)ok, t.Chi2(), t.Chi2() / CAMath::Max(1, nTrackHits)));
11591164

1165+
if (!ok && (!merger.Param().rec.tpc.rebuildTrackInFit || rebuilt) && !retryAttempt && merger.Param().rec.tpc.retryRefit) {
1166+
for (uint32_t i = 0; i < track.NClusters(); i++) {
1167+
merger.Clusters()[track.FirstClusterRef() + i].state &= GPUTPCGMMergedTrackHit::clustererAndSharedFlags;
1168+
}
1169+
CADEBUG(printf("Track rejected, marking for retry\n"));
1170+
uint32_t nRefit = CAMath::AtomicAdd(&merger.Memory()->nRetryRefit, 1u);
1171+
merger.RetryRefitIds()[nRefit] = iTrk;
1172+
return;
1173+
}
1174+
if (retryAttempt && (t.mNDF < 10 || t.mChi2 / t.mNDF >= 6.f)) {
1175+
ok = false;
1176+
}
1177+
11601178
if (CAMath::Abs(t.QPt()) < 1.e-4f) {
11611179
t.QPt() = CAMath::Copysign(1.e-4f, t.QPt());
11621180
}
11631181

11641182
CADEBUG(if (t.GetX() > 250) { printf("ERROR, Track %d at impossible X %f, Pt %f, Looper %d\n", iTrk, t.GetX(), CAMath::Abs(1.f / t.QPt()), (int32_t)merger.MergedTracks()[iTrk].Looper()); });
11651183

1166-
track.SetOK(ok); // TODO: Should we recover tracks who failed the fit in iWay0/1 for the rebuild?
1184+
track.SetOK(ok);
11671185
if (t.GetNDF() <= 0 && !rebuilt && merger.Param().rec.tpc.rebuildTrackInFit) { // TODO: Better handling of NDF<0 tracks, how do we want to do cluster rejection?
11681186
track.Param().NDF() = 0;
11691187
} else {

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,12 @@ class GPUTPCGMTrackParam
154154
GPUd() bool CheckNumericalQuality(float overrideCovYY = -1.f) const;
155155
GPUd() bool CheckCov() const;
156156

157-
GPUd() bool Fit(GPUTPCGMMerger& merger, int32_t iTrk, int32_t& N, int32_t& NTolerated, float& Alpha, GPUTPCGMMergedTrack& track, bool rebuilt);
157+
GPUd() bool Fit(GPUTPCGMMerger& merger, int32_t iTrk, int32_t& N, int32_t& NTolerated, float& Alpha, GPUTPCGMMergedTrack& track, bool rebuilt, bool retryAttempt);
158158
GPUd() void DodEdx(GPUdEdx& dEdx, GPUdEdx& dEdxAlt, GPUTPCGMMerger& merger, bool finalFit, int ihit, int ihitMergeFirst, int wayDirection, const GPUTPCGMMergedTrackHit* clusters, uint8_t clusterState, float zz, uint8_t dEdxSubThresholdRow);
159-
GPUd() int32_t FitHit(GPUTPCGMMerger& merger, const int32_t iTrk, const GPUTPCGMMergedTrack& track, const float xx, const float yy, const float zz, const uint8_t clusterState, const float clAlpha, const int32_t iWay, const bool inFlyDirection, float& deltaZ, float& lastUpdateX, GPUTPCGMMergedTrackHit* clusters, GPUTPCGMPropagator& prop, gputpcgmmergertypes::InterpolationErrorHit& inter, GPUdEdx& dEdx, GPUdEdx& dEdxAlt, float& sumInvSqrtCharge, int32_t& nAvgCharge, const int32_t ihit, const int32_t ihitMergeFirst, const bool allowChangeClusters, const bool refit, const bool finalFit, int32_t& nMissed, int32_t& nMissed2, int32_t& resetT0, float uncorrectedY);
159+
GPUd() int32_t FitHit(GPUTPCGMMerger& merger, const int32_t iTrk, const GPUTPCGMMergedTrack& track, const float xx, const float yy, const float zz, const uint8_t clusterState, const float clAlpha, const int32_t iWay, const bool inFlyDirection, float& deltaZ, float& lastUpdateX, GPUTPCGMMergedTrackHit* clusters, GPUTPCGMPropagator& prop, gputpcgmmergertypes::InterpolationErrorHit& inter, GPUdEdx& dEdx, GPUdEdx& dEdxAlt, float& sumInvSqrtCharge, int32_t& nAvgCharge, const int32_t ihit, const int32_t ihitMergeFirst, const bool allowChangeClusters, const bool refit, const bool finalFit, int32_t& nMissed, int32_t& nMissed2, int32_t& resetT0, float uncorrectedY, bool retryAttempt);
160160
GPUd() void FitAddRow(const int32_t iRow, const uint8_t sector, const int32_t iTrk, const GPUTPCGMMergedTrack& track, GPUTPCGMPropagator& prop, const bool inFlyDirection, GPUTPCGMMerger& merger, uint8_t* dEdxSubThresholdRow, const bool dodEdx, const bool doAttach, const uint8_t doInterpolate, gputpcgmmergertypes::InterpolationErrorHit& inter, const float deltaZ, const float sumInvSqrtCharge, const int32_t nAvgCharge);
161161
GPUd() void HandleCrossCE(const GPUParam& param, const uint8_t sector, const uint8_t& lastSector);
162-
GPUd() static void RefitTrack(GPUTPCGMMergedTrack& track, int32_t iTrk, GPUTPCGMMerger& merger, bool rebuilt);
162+
GPUd() static void RefitTrack(GPUTPCGMMergedTrack& track, int32_t iTrk, GPUTPCGMMerger& merger, bool rebuilt, bool retryAttempt);
163163
GPUd() void MoveToReference(GPUTPCGMPropagator& prop, const GPUParam& param, float& alpha);
164164
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);
165165
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, const bool markReject);

GPU/GPUTracking/qa/GPUQA.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2906,7 +2906,7 @@ int32_t GPUQA::DrawQAHistograms(TObjArray* qcout)
29062906
}
29072907
}
29082908

2909-
if (mQATasks & taskTrackStatistics) {
2909+
if (mQATasks & taskTrackStatistics) { // TODO: Add plot for Chi2/NDF, and NCl correct and fake MC histograms
29102910
// Process track statistic histograms
29112911
float tmpMax = 0.;
29122912
for (int32_t k = 0; k < ConfigNumInputs; k++) { // TODO: Simplify this drawing, avoid copy&paste

0 commit comments

Comments
 (0)