Skip to content

Commit 6a779cf

Browse files
committed
Remove erroneous chi2 calculation causing FPEs
1 parent 9f30127 commit 6a779cf

3 files changed

Lines changed: 2 additions & 51 deletions

File tree

GPU/GPUTracking/TRDTracking/GPUTRDTracker.cxx

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@ GPUd() bool GPUTRDTracker_t<TRDTRK, PROP>::FollowProlongation(PROP* prop, TRDTRK
731731
float chi2 = prop->getPredictedChi2(trkltPosTmpYZ, trkltCovTmp);
732732
// GPUInfo("layer %i: chi2 = %f", iLayer, chi2);
733733
if (chi2 < mMaxChi2 && CAMath::Abs(GetAngularPull(mSpacePoints[trkltIdx].mDy, trkWork->getSnp())) < 4) {
734-
Hypothesis hypo(trkWork->GetNlayers(), iCandidate, trkltIdx, trkWork->GetChi2() + chi2, GetPredictedChi2(trkltPosTmpYZ, trkltCovTmp, trkWork->getPar(), trkWork->getCov()));
734+
Hypothesis hypo(trkWork->GetNlayers(), iCandidate, trkltIdx, trkWork->GetChi2() + chi2);
735735
InsertHypothesis(hypo, nCurrHypothesis, hypothesisIdxOffset);
736736
} // end tracklet chi2 < mMaxChi2
737737
} // end tracklet in window
@@ -769,7 +769,6 @@ GPUd() bool GPUTRDTracker_t<TRDTRK, PROP>::FollowProlongation(PROP* prop, TRDTRK
769769
My_Float covReal[3] = {0.};
770770
RecalcTrkltCov(tilt, trkWork->getSnp(), pad->GetRowSize(mTracklets[realTrkltId].GetZbin()), covReal);
771771
mDebug->SetChi2Real(prop->getPredictedChi2(yzPosReal, covReal), iLayer);
772-
mDebug->SetChi2YZPhiReal(GetPredictedChi2(yzPosReal, covReal, trkWork->getPar(), trkWork->getCov()), iLayer);
773772
mDebug->SetRawTrackletPositionReal(mSpacePoints[realTrkltId].mR, mSpacePoints[realTrkltId].mX, iLayer);
774773
mDebug->SetCorrectedTrackletPositionReal(yzPosReal, iLayer);
775774
mDebug->SetTrackletPropertiesReal(mTracklets[realTrkltId].GetDetector(), iLayer);
@@ -778,7 +777,6 @@ GPUd() bool GPUTRDTracker_t<TRDTRK, PROP>::FollowProlongation(PROP* prop, TRDTRK
778777
#endif
779778
//
780779
mDebug->SetChi2Update(mHypothesis[0 + hypothesisIdxOffset].mChi2 - t->GetChi2(), iLayer); // only meaningful for ONE candidate!!!
781-
mDebug->SetChi2YZPhiUpdate(mHypothesis[0 + hypothesisIdxOffset].mChi2YZPhi, iLayer); // only meaningful for ONE candidate!!!
782780
mDebug->SetRoad(roadY, roadZ, iLayer); // only meaningful for ONE candidate
783781
bool wasTrackStored = false;
784782
// --------------------------------------------------------------------------------
@@ -989,40 +987,6 @@ GPUd() bool GPUTRDTracker_t<TRDTRK, PROP>::FollowProlongation(PROP* prop, TRDTRK
989987
return true;
990988
}
991989

992-
template <class TRDTRK, class PROP>
993-
GPUd() float GPUTRDTracker_t<TRDTRK, PROP>::GetPredictedChi2(const My_Float* pTRD, const My_Float* covTRD, const My_Float* pTrk, const My_Float* covTrk) const
994-
{
995-
// FIXME: This function cannot yet be used in production (maybe it is not necessary at all?)
996-
// conversion from tracklet deflection to sin(phi) needs to be parametrized
997-
// predict chi2 for update of track with pTrk and covTrk with TRD space point with pTRD and covTRD
998-
// taking into account y, z and azimuthal angle of the track and tracklet
999-
float deltaY = pTrk[0] - pTRD[0];
1000-
float deltaZ = pTrk[1] - pTRD[1];
1001-
float deltaS = pTrk[2] - pTRD[2]; // FIXME: pTRD[2] is not defined, needs conversion dy -> sin(phi)
1002-
1003-
// add errors for track and space point, assume no correlation in y-sin(phi) and z-sin(phi) for space point
1004-
float sigmaZ2 = covTrk[2] + covTRD[2];
1005-
float sigmaS2 = covTrk[5] + GetAngularResolution(pTrk[2]); // FIXME: convert angular resolution from dy to sin(phi) for the TRD space point
1006-
float sigmaY2 = covTrk[0] + covTRD[0];
1007-
float sigmaZS = covTrk[4];
1008-
float sigmaYS = covTrk[3];
1009-
float sigmaYZ = covTrk[1] + covTRD[1];
1010-
// inverse of the covariance matrix
1011-
float c11 = sigmaZ2 * sigmaS2 - sigmaZS * sigmaZS;
1012-
float c21 = sigmaZS * sigmaYS - sigmaYZ * sigmaS2;
1013-
float c22 = sigmaY2 * sigmaS2 - sigmaYS * sigmaYS;
1014-
float c31 = sigmaYZ * sigmaZS - sigmaZ2 * sigmaYS;
1015-
float c32 = sigmaYZ * sigmaYS - sigmaY2 * sigmaZS;
1016-
float c33 = sigmaY2 * sigmaZ2 - sigmaYZ * sigmaYZ;
1017-
// determinant
1018-
float det = sigmaY2 * sigmaZ2 * sigmaS2 + 2 * sigmaYZ * sigmaZS * sigmaYS - sigmaYS * sigmaYS * sigmaZ2 - sigmaZS * sigmaZS * sigmaY2 - sigmaS2 * sigmaYZ * sigmaYZ;
1019-
if (CAMath::Abs(det) < 1.e-10f) {
1020-
printf("Determinant too small: %f\n", det);
1021-
det = 1.e-10f;
1022-
}
1023-
det = 1.f / det;
1024-
return (c11 * deltaY * deltaY + 2.f * c21 * deltaY * deltaZ + 2.f * c31 * deltaY * deltaS + c22 * deltaZ * deltaZ + 2.f * c32 * deltaZ * deltaS + c33 * deltaS * deltaS) * det;
1025-
}
1026990

1027991
template <class TRDTRK, class PROP>
1028992
GPUd() void GPUTRDTracker_t<TRDTRK, PROP>::InsertHypothesis(Hypothesis hypo, int& nCurrHypothesis, int idxOffset)

GPU/GPUTracking/TRDTracking/GPUTRDTracker.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,10 @@ class GPUTRDTracker_t : public GPUProcessor
9595
int mCandidateId; // to which track candidate the hypothesis belongs
9696
int mTrackletId; // tracklet index to be used for update
9797
float mChi2; // predicted chi2 for given space point
98-
float mChi2YZPhi; // not yet ready (see GetPredictedChi2 method in cxx file)
9998

10099
GPUd() float GetReducedChi2() { return mLayers > 0 ? mChi2 / mLayers : mChi2; }
101100
GPUd() Hypothesis() : mLayers(0), mCandidateId(-1), mTrackletId(-1), mChi2(9999.f) {}
102-
GPUd() Hypothesis(int layers, int candidateId, int trackletId, float chi2, float chi2YZPhi = -1.f) : mLayers(layers), mCandidateId(candidateId), mTrackletId(trackletId), mChi2(chi2), mChi2YZPhi(chi2YZPhi) {}
101+
GPUd() Hypothesis(int layers, int candidateId, int trackletId, float chi2, float chi2YZPhi = -1.f) : mLayers(layers), mCandidateId(candidateId), mTrackletId(trackletId), mChi2(chi2) {}
103102
};
104103

105104
short MemoryPermanent() const { return mMemoryPermanent; }
@@ -149,7 +148,6 @@ class GPUTRDTracker_t : public GPUProcessor
149148
GPUd() void DoTrackingThread(int iTrk, int threadId = 0);
150149
GPUd() bool CalculateSpacePoints(int iCollision = 0);
151150
GPUd() bool FollowProlongation(PROP* prop, TRDTRK* t, int threadId, int collisionId);
152-
GPUd() float GetPredictedChi2(const My_Float* pTRD, const My_Float* covTRD, const My_Float* pTrk, const My_Float* covTrk) const;
153151
GPUd() int GetDetectorNumber(const float zPos, const float alpha, const int layer) const;
154152
GPUd() bool AdjustSector(PROP* prop, TRDTRK* t, const int layer) const;
155153
GPUd() int GetSector(float alpha) const;

GPU/GPUTracking/TRDTracking/GPUTRDTrackerDebug.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,7 @@ class GPUTRDTrackerDebug
9595
fTrackYReal.ResizeTo(6);
9696
fTrackZReal.ResizeTo(6);
9797
fTrackSecReal.ResizeTo(6);
98-
fChi2YZPhiUpdate.ResizeTo(6);
9998
fChi2Update.ResizeTo(6);
100-
fChi2YZPhiReal.ResizeTo(6);
10199
fChi2Real.ResizeTo(6);
102100
fNmatchesAvail.ResizeTo(6);
103101
fFindable.ResizeTo(6);
@@ -151,9 +149,7 @@ class GPUTRDTrackerDebug
151149
fTrackYReal.Zero();
152150
fTrackZReal.Zero();
153151
fTrackSecReal.Zero();
154-
fChi2YZPhiUpdate.Zero();
155152
fChi2Update.Zero();
156-
fChi2YZPhiReal.Zero();
157153
fChi2Real.Zero();
158154
fNmatchesAvail.Zero();
159155
fFindable.Zero();
@@ -290,8 +286,6 @@ class GPUTRDTrackerDebug
290286
// update information
291287
void SetChi2Update(float chi2, int ly) { fChi2Update(ly) = chi2; }
292288
void SetChi2Real(float chi2, int ly) { fChi2Real(ly) = chi2; }
293-
void SetChi2YZPhiUpdate(float chi2, int ly) { fChi2YZPhiUpdate(ly) = chi2; }
294-
void SetChi2YZPhiReal(float chi2, int ly) { fChi2YZPhiReal(ly) = chi2; }
295289

296290
// other infos
297291
void SetRoad(float roadY, float roadZ, int ly)
@@ -370,8 +364,6 @@ class GPUTRDTrackerDebug
370364
"trackletDetReal.=" << &fTrackletDetReal << // detector number for matching or related tracklet if available, otherwise -1
371365
"chi2Update.=" << &fChi2Update << // chi2 for update
372366
"chi2Real.=" << &fChi2Real << // chi2 for first tracklet w/ matching MC label
373-
"chi2YZPhiUpdate.=" << &fChi2YZPhiUpdate << // chi2 for update taking into account full tracklet information (y, z, dY aka sin(phi))
374-
"chi2YZPhiReal.=" << &fChi2YZPhiReal << // chi2 for first tracklet w/ matching MC label taking into account full tracklet information (y, z, dY aka sin(phi))
375367
"chi2Total=" << fChi2 << // total chi2 for track
376368
"nLayers=" << fNlayers << // number of layers in which track was findable
377369
"nTracklets=" << fNtrklts << // number of attached tracklets
@@ -456,8 +448,6 @@ class GPUTRDTrackerDebug
456448
TVectorF fTrackletDetReal;
457449
TVectorF fChi2Update;
458450
TVectorF fChi2Real;
459-
TVectorF fChi2YZPhiUpdate;
460-
TVectorF fChi2YZPhiReal;
461451
TVectorF fRoadY;
462452
TVectorF fRoadZ;
463453
TVectorF fFindable;
@@ -512,7 +502,6 @@ class GPUTRDTrackerDebug
512502
GPUd() void SetChi2Update(float chi2, int ly) {}
513503
GPUd() void SetChi2Real(float chi2, int ly) {}
514504
GPUd() void SetChi2YZPhiUpdate(float chi2, int ly) {}
515-
GPUd() void SetChi2YZPhiReal(float chi2, int ly) {}
516505

517506
// other infos
518507
GPUd() void SetRoad(float roadY, float roadZ, int ly) {}

0 commit comments

Comments
 (0)