Skip to content

Commit b68ff58

Browse files
committed
GPU: Improve some debug messages
1 parent c1d67e4 commit b68ff58

File tree

5 files changed

+51
-42
lines changed

5 files changed

+51
-42
lines changed

GPU/GPUTracking/Global/GPUChainTracking.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,8 @@ bool GPUChainTracking::ValidateSettings()
253253
GPUError("nWay setting musst be odd number!");
254254
return false;
255255
}
256-
if (param().rec.tpc.mergerInterpolateErrors && param().rec.tpc.nWays == 1) {
257-
GPUError("Cannot do error interpolation with NWays = 1!");
256+
if (param().rec.tpc.mergerInterpolateErrors && param().rec.tpc.nWays < 3) {
257+
GPUError("Cannot do error interpolation with NWays < 3!");
258258
return false;
259259
}
260260
if (param().continuousMaxTimeBin > (int32_t)GPUSettings::TPC_MAX_TF_TIME_BIN) {

GPU/GPUTracking/Merger/GPUTPCGMPropagator.cxx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -635,10 +635,10 @@ GPUd() int32_t GPUTPCGMPropagator::Update(float posY, float posZ, int32_t iRow,
635635
return 0;
636636
}
637637

638-
return Update(posY, posZ, clusterState, rejectChi2 == rejectDirect || (param.rec.tpc.mergerInterpolateRejectAlsoOnCurrentPosition && rejectChi2 == rejectInterReject && mT->GetNDF() > (int32_t)param.rec.tpc.mergerNonInterpolateRejectMinNDF), err2Y, err2Z, &param);
638+
return Update(posY, posZ, clusterState, rejectChi2 == rejectDirect, err2Y, err2Z, &param);
639639
}
640640

641-
GPUd() int32_t GPUTPCGMPropagator::InterpolateReject(const GPUParam& GPUrestrict() param, float posY, float posZ, int16_t clusterState, int8_t rejectChi2, gputpcgmmergertypes::InterpolationErrorHit* inter, float err2Y, float err2Z)
641+
GPUd() int32_t GPUTPCGMPropagator::InterpolateReject(const GPUParam& GPUrestrict() param, float posY, float posZ, int16_t clusterState, int8_t rejectChi2, gputpcgmmergertypes::InterpolationErrorHit* inter, float err2Y, float err2Z, float deltaZ)
642642
{
643643
float* GPUrestrict() mC = mT->Cov();
644644
float* GPUrestrict() mP = mT->Par();
@@ -655,10 +655,10 @@ GPUd() int32_t GPUTPCGMPropagator::InterpolateReject(const GPUParam& GPUrestrict
655655
float chi2Y, chi2Z;
656656
if (mT->NDF() <= 0) {
657657
chi2Y = CAMath::Square((float)inter->posY - posY) / ((float)inter->errorY + err2Y);
658-
chi2Z = CAMath::Square((float)inter->posZ - posZ) / ((float)inter->errorZ + err2Z);
658+
chi2Z = CAMath::Square((float)inter->posZ + deltaZ - posZ) / ((float)inter->errorZ + err2Z);
659659
} else if (mFitInProjections) {
660660
const float Iz0 = inter->posY - mP[0];
661-
const float Iz1 = inter->posZ - mP[1];
661+
const float Iz1 = inter->posZ + deltaZ - mP[1];
662662
const float Iw0 = 1.f / (mC[0] + (float)inter->errorY);
663663
const float Iw2 = 1.f / (mC[2] + (float)inter->errorZ);
664664
const float Ik00 = mC[0] * Iw0;
@@ -676,7 +676,7 @@ GPUd() int32_t GPUTPCGMPropagator::InterpolateReject(const GPUParam& GPUrestrict
676676
chi2Z = Jw2 * Jz1 * Jz1;
677677
} else {
678678
const float Iz0 = inter->posY - mP[0];
679-
const float Iz1 = inter->posZ - mP[1];
679+
const float Iz1 = inter->posZ + deltaZ - mP[1];
680680
float Iw0 = mC[2] + (float)inter->errorZ;
681681
float Iw2 = mC[0] + (float)inter->errorY;
682682
float Idet = CAMath::Max(1e-10f, Iw0 * Iw2 - mC[1] * mC[1]);
@@ -706,6 +706,7 @@ GPUd() int32_t GPUTPCGMPropagator::InterpolateReject(const GPUParam& GPUrestrict
706706
chi2Z = CAMath::Abs((Jw1 * Jz0 + Jw2 * Jz1) * Jz1);
707707
}
708708
if (RejectCluster(chi2Y * param.rec.tpc.clusterRejectChi2TolleranceY, chi2Z * param.rec.tpc.clusterRejectChi2TolleranceZ, clusterState)) { // TODO: Relative Pt resolution decreases slightly, why?
709+
// printf("Reject Cluster chiy2 %f chiz2 %f (Pos Y: %f - %f %f ; Pos Z: %f - %f %f)\n", chi2Y, chi2Z, posY, mP[0], (float)inter->posY, posZ, mP[1], (float)inter->posZ + deltaZ);
709710
return updateErrorClusterRejectedInInterpolation;
710711
}
711712
}

GPU/GPUTracking/Merger/GPUTPCGMPropagator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class GPUTPCGMPropagator
107107
GPUd() int32_t Update(float posY, float posZ, int32_t iRow, const GPUParam& param, int16_t clusterState, int8_t rejectChi2, bool refit, int8_t sector, float time, float avgInvCharge, float invCharge);
108108
GPUd() int32_t Update(float posY, float posZ, int32_t iRow, const GPUParam& param, int16_t clusterState, int8_t rejectChi2, bool refit, float err2Y, float err2Z);
109109
GPUd() int32_t Update(float posY, float posZ, int16_t clusterState, bool rejectChi2, float err2Y, float err2Z, const GPUParam* param = nullptr);
110-
GPUd() int32_t InterpolateReject(const GPUParam& param, float posY, float posZ, int16_t clusterState, int8_t rejectChi2, gputpcgmmergertypes::InterpolationErrorHit* inter, float err2Y, float err2Z);
110+
GPUd() int32_t InterpolateReject(const GPUParam& param, float posY, float posZ, int16_t clusterState, int8_t rejectChi2, gputpcgmmergertypes::InterpolationErrorHit* inter, float err2Y, float err2Z, float deltaZ);
111111
GPUd() float PredictChi2(float posY, float posZ, int32_t iRow, const GPUParam& param, int16_t clusterState, int8_t sideC, float time, float avgCharge, float charge) const;
112112
GPUd() float PredictChi2(float posY, float posZ, float err2Y, float err2Z) const;
113113
GPUd() static int32_t RejectCluster(float chiY, float chiZ, uint8_t clusterState)

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
7979
float lastUpdateX = -1.f;
8080
uint8_t lastRow = 255;
8181
uint8_t lastSector = 255;
82+
float deltaZ = 0.f;
8283

8384
for (int32_t iWay = 0; iWay < nWays; iWay++) {
8485
int32_t nMissed = 0, nMissed2 = 0;
@@ -117,7 +118,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
117118
}
118119

119120
if ((param.rec.tpc.trackFitRejectMode > 0 && nMissed >= param.rec.tpc.trackFitRejectMode) || nMissed2 >= param.rec.tpc.trackFitMaxRowMissedHard || clusters[ihit].state & GPUTPCGMMergedTrackHit::flagReject) {
120-
CADEBUG(printf("\tSkipping hit, %d hits rejected, flag %X\n", nMissed, (int32_t)clusters[ihit].state));
121+
CADEBUG(printf("\tSkipping hit %d, %d hits rejected, flag %X\n", ihit, nMissed, (int32_t)clusters[ihit].state));
121122
if (finalOutInFit && !(clusters[ihit].state & GPUTPCGMMergedTrackHit::flagReject)) {
122123
clusters[ihit].state |= GPUTPCGMMergedTrackHit::flagRejectErr;
123124
}
@@ -225,14 +226,25 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
225226
}
226227
CADEBUG(printf("\n"));
227228

228-
int32_t retValUpd;
229+
int32_t retValUpd = 0, retValInt = 0;
229230
float threshold = 3.f + (lastUpdateX >= 0 ? (CAMath::Abs(mX - lastUpdateX) / 2) : 0.f);
230231
if (mNDF > (int32_t)param.rec.tpc.mergerNonInterpolateRejectMinNDF && (CAMath::Abs(yy - mP[0]) > threshold || CAMath::Abs(zz - mP[1]) > threshold)) {
231232
retValUpd = GPUTPCGMPropagator::updateErrorClusterRejectedDistance;
232233
} else {
233-
int8_t rejectChi2 = attempt ? 0 // In second attempt, we do not reject
234-
: (param.rec.tpc.mergerInterpolateErrors && CAMath::Abs(ihit - ihitMergeFirst) <= 1) ? (finalOutInFit ? (GPUTPCGMPropagator::rejectInterFill + !(iWay & 1)) : 0) // reject via interpolation
235-
: (allowChangeClusters && goodRows > 5); // normal rejection during the fit
234+
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;
246+
}
247+
}
236248

237249
float err2Y, err2Z;
238250
const float time = merger->GetConstantMem()->ioPtrs.clustersNative ? merger->GetConstantMem()->ioPtrs.clustersNative->clustersLinear[cluster.num].getTime() : -1.f;
@@ -243,18 +255,15 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
243255

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

246-
int retValInt = 0;
247258
if (rejectChi2 >= GPUTPCGMPropagator::rejectInterFill) {
248259
if (rejectChi2 == GPUTPCGMPropagator::rejectInterReject && interpolation.hit[ihit].errorY < (GPUCA_PAR_MERGER_INTERPOLATION_ERROR_TYPE_A)0) {
249260
rejectChi2 = GPUTPCGMPropagator::rejectDirect;
250261
} else {
251-
retValInt = prop.InterpolateReject(param, yy, zz, clusterState, rejectChi2, &interpolation.hit[ihit], err2Y, err2Z);
262+
retValInt = prop.InterpolateReject(param, yy, zz, clusterState, rejectChi2, &interpolation.hit[ihit], err2Y, err2Z, deltaZ);
252263
}
253264
}
254265

255-
if (retValInt) {
256-
retValUpd = retValInt;
257-
} else if (param.rec.tpc.rejectEdgeClustersInTrackFit && uncorrectedY > -1e6f && param.rejectEdgeClusterByY(uncorrectedY, cluster.row, CAMath::Sqrt(mC[0]))) { // uncorrectedY > -1e6f implies allowChangeClusters
266+
if (param.rec.tpc.rejectEdgeClustersInTrackFit && uncorrectedY > -1e6f && param.rejectEdgeClusterByY(uncorrectedY, cluster.row, CAMath::Sqrt(mC[0]))) { // uncorrectedY > -1e6f implies allowChangeClusters
258267
retValUpd = GPUTPCGMPropagator::updateErrorClusterRejectedEdge;
259268
} else {
260269
retValUpd = prop.Update(yy, zz, cluster.row, param, clusterState, rejectChi2, refit, err2Y, err2Z);
@@ -265,11 +274,11 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
265274
}
266275
// clang-format off
267276
CADEBUG(if (!CheckCov()) GPUError("INVALID COV AFTER UPDATE!!!"));
268-
CADEBUG(printf("\t%21sFit Alpha %8.3f , X %8.3f - Y %8.3f, Z %8.3f - QPt %7.2f (%7.2f), SP %5.2f (%5.2f), DzDs %5.2f %16s --- Cov sY %8.3f sZ %8.3f sSP %8.3f sPt %8.3f - YPt %8.3f - FErr %d\n", "", prop.GetAlpha(), mX, mP[0], mP[1], mP[4], prop.GetQPt0(), mP[2], prop.GetSinPhi0(), mP[3], "", sqrtf(mC[0]), sqrtf(mC[2]), sqrtf(mC[5]), sqrtf(mC[14]), mC[10], retValUpd));
277+
CADEBUG(printf("\t%21sFit Alpha %8.3f , X %8.3f - Y %8.3f, Z %8.3f - QPt %7.2f (%7.2f), SP %5.2f (%5.2f), DzDs %5.2f %16s --- Cov sY %8.3f sZ %8.3f sSP %8.3f sPt %8.3f - YPt %8.3f - FErr %d %d\n", "", prop.GetAlpha(), mX, mP[0], mP[1], mP[4], prop.GetQPt0(), mP[2], prop.GetSinPhi0(), mP[3], "", sqrtf(mC[0]), sqrtf(mC[2]), sqrtf(mC[5]), sqrtf(mC[14]), mC[10], retValUpd, retValInt));
269278
// clang-format on
270279

271-
ConstrainSinPhi(); // TODO: Limit using ConstrainSinPhi everywhere!
272-
if (retValUpd == 0) // track is updated
280+
ConstrainSinPhi(); // TODO: Limit using ConstrainSinPhi everywhere!
281+
if (!retValUpd && !retValInt) // track is updated
273282
{
274283
lastUpdateX = mX;
275284
covYYUpd = mC[0];
@@ -311,14 +320,16 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
311320
}
312321
}
313322
}
314-
} else if (retValUpd >= GPUTPCGMPropagator::updateErrorClusterRejected) { // cluster far away form the track
315-
if (allowChangeClusters) {
323+
} else if (retValInt || retValUpd >= GPUTPCGMPropagator::updateErrorClusterRejected) { // cluster far away form the track
324+
if (retValInt || allowChangeClusters) {
316325
MarkClusters(clusters, ihitMergeFirst, ihit, wayDirection, GPUTPCGMMergedTrackHit::flagRejectDistance);
317326
} else if (finalFit) {
318327
MarkClusters(clusters, ihitMergeFirst, ihit, wayDirection, GPUTPCGMMergedTrackHit::flagRejectErr);
319328
}
320-
nMissed++;
321-
nMissed2++;
329+
if (!retValInt) {
330+
nMissed++;
331+
nMissed2++;
332+
}
322333
} else {
323334
break; // bad chi2 for the whole track, stop the fit
324335
}
@@ -328,7 +339,9 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
328339
CADEBUG(printf("\t\tSTORING %d lastRow %d row %d out %d\n", iTrk, (int)lastRow, (int)clusters[(iWay & 1) ? (maxN - 1) : 0].row, lastRow > clusters[(iWay & 1) ? (maxN - 1) : 0].row));
329340
}
330341
if (!(iWay & 1) && !finalFit && !track.CCE() && !track.Looper()) {
331-
ShiftZ(clusters, merger, maxN);
342+
deltaZ = ShiftZ(clusters, merger, maxN);
343+
} else {
344+
deltaZ = 0.f;
332345
}
333346
}
334347
ConstrainSinPhi();
@@ -772,21 +785,21 @@ GPUdi() void GPUTPCGMTrackParam::AttachClustersLooper(const GPUTPCGMMerger* GPUr
772785
}
773786
}
774787

775-
GPUd() void GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMergedTrackHit* clusters, const GPUTPCGMMerger* merger, int32_t N)
788+
GPUd() float GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMergedTrackHit* clusters, const GPUTPCGMMerger* merger, int32_t N)
776789
{
777790
if (N == 0) {
778791
N = 1;
779792
}
780793
const auto& GPUrestrict() cls = merger->GetConstantMem()->ioPtrs.clustersNative->clustersLinear;
781794
float z0 = cls[clusters[0].num].getTime(), zn = cls[clusters[N - 1].num].getTime();
782795
const auto tmp = zn > z0 ? std::array<float, 3>{zn, z0, GPUTPCGeometry::Row2X(clusters[N - 1].row)} : std::array<float, 3>{z0, zn, GPUTPCGeometry::Row2X(clusters[0].row)};
783-
ShiftZ(merger, clusters[0].sector, tmp[0], tmp[1], tmp[2]);
796+
return ShiftZ(merger, clusters[0].sector, tmp[0], tmp[1], tmp[2]);
784797
}
785798

786-
GPUd() void GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMerger* GPUrestrict() merger, int32_t sector, float cltmax, float cltmin, float clx)
799+
GPUd() float GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMerger* GPUrestrict() merger, int32_t sector, float cltmax, float cltmin, float clx)
787800
{
788801
if (!merger->Param().par.continuousTracking) {
789-
return;
802+
return 0.f;
790803
}
791804
float deltaZ = 0.f;
792805
bool beamlineReached = false;
@@ -825,7 +838,6 @@ GPUd() void GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMerger* GPUrestrict() merge
825838
{
826839
float deltaT = merger->GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convDeltaZtoDeltaTimeInTimeFrame(sector, deltaZ);
827840
mTOffset += deltaT;
828-
mP[1] -= deltaZ;
829841
const float maxT = cltmin - merger->GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->getT0();
830842
const float minT = cltmax - merger->GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->getMaxDriftTime(sector);
831843
// printf("T Check: Clusters %f %f, min %f max %f vtx %f\n", tz1, tz2, minT, maxT, mTOffset);
@@ -837,13 +849,14 @@ GPUd() void GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMerger* GPUrestrict() merge
837849
deltaT = maxT - mTOffset;
838850
}
839851
if (deltaT != 0.f) {
840-
deltaZ = merger->GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convDeltaTimeToDeltaZinTimeFrame(sector, deltaT);
852+
deltaZ += merger->GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convDeltaTimeToDeltaZinTimeFrame(sector, deltaT);
841853
// printf("Moving clusters to TPC Range: QPt %f, New mTOffset %f, t1 %f, t2 %f, Shift %f in Z: %f to %f --> %f to %f in T\n", mP[4], mTOffset + deltaT, tz1, tz2, deltaZ, tz2 - mTOffset, tz1 - mTOffset, tz2 - mTOffset - deltaT, tz1 - mTOffset - deltaT);
842854
mTOffset += deltaT;
843-
mP[1] -= deltaZ;
844855
}
856+
mP[1] -= deltaZ;
845857
}
846858
// printf("\n");
859+
return -deltaZ;
847860
}
848861

849862
GPUd() bool GPUTPCGMTrackParam::CheckCov() const
@@ -858,28 +871,23 @@ GPUd() bool GPUTPCGMTrackParam::CheckNumericalQuality(float overrideCovYY) const
858871
{
859872
//* Check that the track parameters and covariance matrix are reasonable
860873
bool ok = CAMath::Finite(mX) && CAMath::Finite(mChi2);
861-
CADEBUG(printf("OK %d - %f - ", (int32_t)ok, mX); for (int32_t i = 0; i < 5; i++) { printf("%f ", mP[i]); } printf(" - "); for (int32_t i = 0; i < 15; i++) { printf("%f ", mC[i]); } printf("\n"));
874+
// CADEBUG(printf("OK %d - %f - ", (int32_t)ok, mX); for (int32_t i = 0; i < 5; i++) { printf("%f ", mP[i]); } printf(" - "); for (int32_t i = 0; i < 15; i++) { printf("%f ", mC[i]); } printf("\n"));
862875
const float* c = mC;
863876
for (int32_t i = 0; i < 15; i++) {
864877
ok = ok && CAMath::Finite(c[i]);
865878
}
866-
CADEBUG(printf("OK1 %d\n", (int32_t)ok));
867879
for (int32_t i = 0; i < 5; i++) {
868880
ok = ok && CAMath::Finite(mP[i]);
869881
}
870-
CADEBUG(printf("OK2 %d\n", (int32_t)ok));
871882
if ((overrideCovYY > 0 ? overrideCovYY : c[0]) > 4.f * 4.f || c[2] > 4.f * 4.f || c[5] > 2.f * 2.f || c[9] > 2.f * 2.f) {
872883
ok = 0;
873884
}
874-
CADEBUG(printf("OK3 %d\n", (int32_t)ok));
875885
if (CAMath::Abs(mP[2]) > GPUCA_MAX_SIN_PHI) {
876886
ok = 0;
877887
}
878-
CADEBUG(printf("OK4 %d\n", (int32_t)ok));
879888
if (!CheckCov()) {
880889
ok = false;
881890
}
882-
CADEBUG(printf("OK5 %d\n", (int32_t)ok));
883891
return ok;
884892
}
885893

@@ -900,7 +908,7 @@ GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict()
900908
CADEBUG(int32_t nTrackHitsOld = nTrackHits; float ptOld = t.QPt());
901909
bool ok = t.Fit(merger, iTrk, merger->Clusters() + track.FirstClusterRef(), nTrackHits, NTolerated, Alpha, attempt, GPUCA_MAX_SIN_PHI, track);
902910
CADEBUG(printf("Finished Fit Track %d\n", iTrk));
903-
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)));
911+
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)));
904912

905913
if (!ok && attempt == 0 && merger->Param().rec.tpc.retryRefit) {
906914
for (uint32_t i = 0; i < track.NClusters(); i++) {

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ class GPUTPCGMTrackParam
183183
}
184184

185185
GPUd() void Rotate(float alpha);
186-
GPUd() void ShiftZ(const GPUTPCGMMerger* merger, int32_t sector, float cltmax, float cltmin, float clx);
187-
GPUd() void ShiftZ(const GPUTPCGMMergedTrackHit* clusters, const GPUTPCGMMerger* merger, int32_t N);
186+
GPUd() float ShiftZ(const GPUTPCGMMerger* merger, int32_t sector, float cltmax, float cltmin, float clx);
187+
GPUd() float ShiftZ(const GPUTPCGMMergedTrackHit* clusters, const GPUTPCGMMerger* merger, int32_t N);
188188

189189
GPUd() static float Reciprocal(float x) { return 1.f / x; }
190190
GPUdi() static void Assign(float& x, bool mask, float v)

0 commit comments

Comments
 (0)