35 tParam.SetCov(0, 0.05f);
36 tParam.SetCov(2, 0.05f);
37 tParam.SetCov(5, 0.001f);
38 tParam.SetCov(9, 0.001f);
39 tParam.SetCov(14, 0.05f);
40 tParam.SetParam(sectorSource.Tracks()[iTrack].Param());
48 int32_t maxRowGap = 10;
51 rowIndex += direction;
52 if (!tParam.TransportToX(tracker.Row(rowIndex).X(),
t0, tracker.Param().bzCLight,
GPUCA_MAX_SIN_PHI)) {
56 if (--maxRowGap == 0) {
59 }
while (CAMath::Abs(tParam.Y()) > tracker.Row(rowIndex).MaxY());
62 tracker.GetErrors2Seeding(rowIndex, tParam.Z(), tParam.SinPhi(), tParam.DzDs(), -1.f, err2Y, err2Z);
63 if (tParam.GetCov(0) < err2Y) {
64 tParam.SetCov(0, err2Y);
66 if (tParam.GetCov(2) < err2Z) {
67 tParam.SetCov(2, err2Z);
71 int32_t nHits = GPUTPCTrackletConstructor::GPUTPCTrackletConstructorExtrapolationTracking(tracker, smem, tParam, rowIndex, direction, 0, rowHits);
72 if (nHits >= tracker.Param().rec.tpc.extrapolationTrackingMinHits) {
74 uint32_t hitId = CAMath::AtomicAdd(&tracker.CommonMemory()->nTrackHits, (uint32_t)nHits);
75 if (hitId + nHits > tracker.NMaxTrackHits()) {
76 tracker.raiseError(GPUErrors::ERROR_GLOBAL_TRACKING_TRACK_HIT_OVERFLOW, tracker.ISector(), hitId + nHits, tracker.NMaxTrackHits());
77 CAMath::AtomicExch(&tracker.CommonMemory()->nTrackHits, tracker.NMaxTrackHits());
80 uint32_t trackId = CAMath::AtomicAdd(&tracker.CommonMemory()->nTracks, 1u);
81 if (trackId >= tracker.NMaxTracks()) {
82 tracker.raiseError(GPUErrors::ERROR_GLOBAL_TRACKING_TRACK_OVERFLOW, tracker.ISector(), trackId, tracker.NMaxTracks());
83 CAMath::AtomicExch(&tracker.CommonMemory()->nTracks, tracker.NMaxTracks());
90 const calink rowHit = rowHits[rowIndex];
93 tracker.TrackHits()[hitId +
i].Set(rowIndex, rowHit);
100 int32_t
i = nHits - 1;
102 const calink rowHit = rowHits[rowIndex];
105 tracker.TrackHits()[hitId +
i].Set(rowIndex, rowHit);
112 track.SetParam(tParam.GetParam());
113 track.SetNHits(nHits);
114 track.SetFirstHitID(hitId);
115 track.SetLocalTrackId((sectorSource.ISector() << 24) | sectorSource.Tracks()[iTrack].LocalTrackId());
118 return (nHits >= tracker.Param().rec.tpc.extrapolationTrackingMinHits);
132 PerformExtrapolationTrackingRun(sectorTarget, smem, tracker,
i, rowIndex, -tracker.Param().par.dAlpha, -1);
136 PerformExtrapolationTrackingRun(sectorTarget, smem, tracker,
i, rowIndex, tracker.Param().par.dAlpha, -1);
143 if (tracker.TrackHits()[tmpHit].RowIndex() <
GPUCA_ROW_COUNT - tracker.Param().rec.tpc.extrapolationTrackingMinRows && tracker.TrackHits()[tmpHit].RowIndex() >=
GPUCA_ROW_COUNT - tracker.Param().rec.tpc.extrapolationTrackingRowRange) {
149 PerformExtrapolationTrackingRun(sectorTarget, smem, tracker,
i, rowIndex, -tracker.Param().par.dAlpha, 1);
153 PerformExtrapolationTrackingRun(sectorTarget, smem, tracker,
i, rowIndex, tracker.Param().par.dAlpha, 1);
166 if (tracker.NHitsTotal() == 0) {
169 const int32_t iSector = tracker.ISector();
176 PerformExtrapolationTracking(nBlocks, nThreads, iBlock, iThread, tracker.GetConstantMem()->tpcTrackers[sectorLeft], smem, tracker,
true);
177 PerformExtrapolationTracking(nBlocks, nThreads, iBlock, iThread, tracker.GetConstantMem()->tpcTrackers[sectorRight], smem, tracker,
false);