Skip to content

Commit 3faeb33

Browse files
committed
GPU TPC: Use inner SectorRefit parameters as start parameters for odd leg numbers
1 parent 4b20375 commit 3faeb33

File tree

3 files changed

+39
-23
lines changed

3 files changed

+39
-23
lines changed

GPU/GPUTracking/Merger/GPUTPCGMMerger.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1738,7 +1738,7 @@ GPUd() void GPUTPCGMMerger::CollectMergedTracks(int32_t nBlocks, int32_t nThread
17381738

17391739
GPUTPCGMBorderTrack b;
17401740
const float toX = Param().par.earlyTpcTransform ? mClustersXYZ[iMergedTrackFirstCluster].x : GPUTPCGeometry::Row2X(cl[0].row);
1741-
if (p2.TransportToX(this, toX, Param().bzCLight, b, GPUCA_MAX_SIN_PHI, false)) {
1741+
if (p2.TransportToX<2>(this, toX, Param().bzCLight, b, GPUCA_MAX_SIN_PHI, false)) {
17421742
p1.X() = toX;
17431743
p1.Y() = b.Par()[0];
17441744
p1.Z() = b.Par()[1];

GPU/GPUTracking/Merger/GPUTPCGMSectorTrack.cxx

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -274,13 +274,25 @@ GPUd() bool GPUTPCGMSectorTrack::FilterErrors(const GPUTPCGMMerger* merger, int3
274274
return ok;
275275
}
276276

277+
template <>
278+
GPUd() bool GPUTPCGMSectorTrack::TransportToX<2>(GPUTPCGMMerger* merger, float x, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi, bool doCov) const
279+
{
280+
if (CAMath::Abs(x - mParam2.mX) < CAMath::Abs(x - mParam.mX) && mParam2.mX > 0) {
281+
return TransportToX<1>(merger, x, Bz, b, maxSinPhi, doCov);
282+
} else {
283+
return TransportToX<0>(merger, x, Bz, b, maxSinPhi, doCov);
284+
}
285+
}
286+
287+
template <int I>
277288
GPUd() bool GPUTPCGMSectorTrack::TransportToX(GPUTPCGMMerger* merger, float x, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi, bool doCov) const
278289
{
290+
const auto& param = I ? mParam2 : mParam;
279291
Bz = -Bz;
280-
float ex = mParam.mCosPhi;
281-
float ey = mParam.mSinPhi;
282-
float k = mParam.mQPt * Bz;
283-
float dx = x - mParam.mX;
292+
float ex = param.mCosPhi;
293+
float ey = param.mSinPhi;
294+
float k = param.mQPt * Bz;
295+
float dx = x - param.mX;
284296
float ey1 = k * dx + ey;
285297

286298
if (CAMath::Abs(ey1) > maxSinPhi) {
@@ -308,13 +320,13 @@ GPUd() bool GPUTPCGMSectorTrack::TransportToX(GPUTPCGMMerger* merger, float x, f
308320
dS = dl + dl * a * (k2 + a * (k4)); //+ k6*a) );
309321
}
310322

311-
float dz = dS * mParam.mDzDs;
323+
float dz = dS * param.mDzDs;
312324

313-
b.SetPar(0, mParam.mY + dy);
314-
b.SetPar(1, mParam.mZ + dz);
325+
b.SetPar(0, param.mY + dy);
326+
b.SetPar(1, param.mZ + dz);
315327
b.SetPar(2, ey1);
316-
b.SetPar(3, mParam.mDzDs);
317-
b.SetPar(4, mParam.mQPt);
328+
b.SetPar(3, param.mDzDs);
329+
b.SetPar(4, param.mQPt);
318330
if (merger->Param().par.earlyTpcTransform) {
319331
b.SetZOffsetLinear(mTZOffset);
320332
} else {
@@ -327,33 +339,33 @@ GPUd() bool GPUTPCGMSectorTrack::TransportToX(GPUTPCGMMerger* merger, float x, f
327339

328340
float ex1i = 1.f / ex1;
329341
float hh = dxcci * ex1i * norm2;
330-
float h2 = hh * mParam.mSecPhi;
342+
float h2 = hh * param.mSecPhi;
331343
float h4 = Bz * dxcci * hh;
332344

333-
float c20 = mParam.mC3;
334-
float c22 = mParam.mC5;
335-
float c31 = mParam.mC7;
336-
float c33 = mParam.mC9;
337-
float c40 = mParam.mC10;
338-
float c42 = mParam.mC12;
339-
float c44 = mParam.mC14;
345+
float c20 = param.mC3;
346+
float c22 = param.mC5;
347+
float c31 = param.mC7;
348+
float c33 = param.mC9;
349+
float c40 = param.mC10;
350+
float c42 = param.mC12;
351+
float c44 = param.mC14;
340352

341353
float c20ph4c42 = c20 + h4 * c42;
342354
float h2c22 = h2 * c22;
343355
float h4c44 = h4 * c44;
344356
float n7 = c31 + dS * c33;
345357

346-
if (CAMath::Abs(mParam.mQPt) > 6.66f) // Special treatment for low Pt
358+
if (CAMath::Abs(param.mQPt) > 6.66f) // Special treatment for low Pt
347359
{
348-
b.SetCov(0, CAMath::Max(mParam.mC0, mParam.mC0 + h2 * h2c22 + h4 * h4c44 + 2.f * (h2 * c20ph4c42 + h4 * c40))); // Do not decrease Y cov for matching!
360+
b.SetCov(0, CAMath::Max(param.mC0, param.mC0 + h2 * h2c22 + h4 * h4c44 + 2.f * (h2 * c20ph4c42 + h4 * c40))); // Do not decrease Y cov for matching!
349361
float C2tmp = dS * 2.f * c31;
350362
if (C2tmp < 0) {
351363
C2tmp = 0;
352364
}
353-
b.SetCov(1, mParam.mC2 + C2tmp + dS * dS * c33); // Incorrect formula, correct would be "dS * (c31 + n7)", but we need to make sure cov(Z) increases regardless of the direction of the propagation
365+
b.SetCov(1, param.mC2 + C2tmp + dS * dS * c33); // Incorrect formula, correct would be "dS * (c31 + n7)", but we need to make sure cov(Z) increases regardless of the direction of the propagation
354366
} else {
355-
b.SetCov(0, mParam.mC0 + h2 * h2c22 + h4 * h4c44 + 2.f * (h2 * c20ph4c42 + h4 * c40));
356-
b.SetCov(1, mParam.mC2 + dS * (c31 + n7));
367+
b.SetCov(0, param.mC0 + h2 * h2c22 + h4 * h4c44 + 2.f * (h2 * c20ph4c42 + h4 * c40));
368+
b.SetCov(1, param.mC2 + dS * (c31 + n7));
357369
}
358370
b.SetCov(2, c22 + dxBz * (c42 + c42 + dxBz * c44));
359371
b.SetCov(3, c33);
@@ -366,6 +378,9 @@ GPUd() bool GPUTPCGMSectorTrack::TransportToX(GPUTPCGMMerger* merger, float x, f
366378
return 1;
367379
}
368380

381+
template GPUd() bool GPUTPCGMSectorTrack::TransportToX<0>(GPUTPCGMMerger* merger, float x, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi, bool doCov) const;
382+
template GPUd() bool GPUTPCGMSectorTrack::TransportToX<1>(GPUTPCGMMerger* merger, float x, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi, bool doCov) const;
383+
369384
GPUd() bool GPUTPCGMSectorTrack::TransportToXAlpha(GPUTPCGMMerger* merger, float newX, float sinAlpha, float cosAlpha, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi) const
370385
{
371386
//*

GPU/GPUTracking/Merger/GPUTPCGMSectorTrack.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class GPUTPCGMSectorTrack
113113
}
114114

115115
GPUd() bool FilterErrors(const GPUTPCGMMerger* merger, int32_t iSector, float maxSinPhi = GPUCA_MAX_SIN_PHI, float sinPhiMargin = 0.f);
116+
template <int I = 0>
116117
GPUd() bool TransportToX(GPUTPCGMMerger* merger, float x, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi, bool doCov = true) const;
117118
GPUd() bool TransportToXAlpha(GPUTPCGMMerger* merger, float x, float sinAlpha, float cosAlpha, float Bz, GPUTPCGMBorderTrack& b, float maxSinPhi) const;
118119
GPUd() void CopyBaseTrackCov();

0 commit comments

Comments
 (0)