21#include "GPUParam.inc"
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);
123 for (int32_t
i = iBlock * nThreads + iThread;
i < tracker.CommonMemory()->nLocalTracks;
i += nThreads * nBlocks) {
125 const int32_t tmpHit = tracker.Tracks()[
i].FirstHitID();
126 if (tracker.TrackHits()[tmpHit].RowIndex() >= tracker.Param().rec.tpc.extrapolationTrackingMinRows && tracker.TrackHits()[tmpHit].RowIndex() < tracker.Param().rec.tpc.extrapolationTrackingRowRange) {
127 int32_t rowIndex = tracker.TrackHits()[tmpHit].RowIndex();
129 float Y = (
float)tracker.Data().HitDataY(
row, tracker.TrackHits()[tmpHit].HitIndex()) *
row.HstepY() +
row.Grid().YMin();
130 if (!
right && Y < -
row.MaxY() * tracker.Param().
rec.tpc.extrapolationTrackingYRangeLower) {
132 PerformExtrapolationTrackingRun(sectorTarget, smem, tracker,
i, rowIndex, -tracker.Param().dAlpha, -1);
134 if (
right && Y >
row.MaxY() * tracker.Param().rec.tpc.extrapolationTrackingYRangeLower) {
136 PerformExtrapolationTrackingRun(sectorTarget, smem, tracker,
i, rowIndex, tracker.Param().dAlpha, -1);
142 const int32_t tmpHit = tracker.Tracks()[
i].FirstHitID() + tracker.Tracks()[
i].NHits() - 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) {
144 int32_t rowIndex = tracker.TrackHits()[tmpHit].RowIndex();
146 float Y = (
float)tracker.Data().HitDataY(
row, tracker.TrackHits()[tmpHit].HitIndex()) *
row.HstepY() +
row.Grid().YMin();
147 if (!
right && Y < -
row.MaxY() * tracker.Param().
rec.tpc.extrapolationTrackingYRangeUpper) {
149 PerformExtrapolationTrackingRun(sectorTarget, smem, tracker,
i, rowIndex, -tracker.Param().dAlpha, 1);
151 if (
right && Y >
row.MaxY() * tracker.Param().rec.tpc.extrapolationTrackingYRangeUpper) {
153 PerformExtrapolationTrackingRun(sectorTarget, smem, tracker,
i, rowIndex, tracker.Param().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);
207 trk.CommonMemory()->nLocalTracks = trk.CommonMemory()->nTracks;
208 trk.CommonMemory()->nLocalTrackHits = trk.CommonMemory()->nTrackHits;
#define get_global_size(dim)
#define get_global_id(dim)
#define GPUCA_MAX_SIN_PHI
#define CA_SHARED_CACHE(target, src, size)
#define CALINK_DEAD_CHANNEL
static constexpr uint32_t NSECTORS
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t0