5353using namespace o2 ::gpu;
5454using namespace o2 ::tpc;
5555
56- GPUd () bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict () merger, int32_t iTrk, GPUTPCGMMergedTrackHit* GPUrestrict() clusters, int32_t& GPUrestrict() N, int32_t& GPUrestrict() NTolerated, float& GPUrestrict() Alpha, int32_t attempt, float maxSinPhi, gputpcgmmergertypes::GPUTPCOuterParam* GPUrestrict() outerParam, int8_t leg )
56+ GPUd () bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict () merger, int32_t iTrk, GPUTPCGMMergedTrackHit* GPUrestrict() clusters, int32_t& GPUrestrict() N, int32_t& GPUrestrict() NTolerated, float& GPUrestrict() Alpha, int32_t attempt, float maxSinPhi, GPUTPCGMMergedTrack& GPUrestrict() track )
5757{
5858 static constexpr float kDeg2Rad = M_PI / 180 .f ;
5959 CADEBUG (static constexpr float kSectAngle = 2 * M_PI / 18 .f );
@@ -66,9 +66,6 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
6666 prop.SetMaterialTPC ();
6767 prop.SetPolynomialField (¶m.polynomialField );
6868 prop.SetMaxSinPhi (maxSinPhi);
69- if ((clusters[0 ].sector < 18 ) == (clusters[N - 1 ].sector < 18 )) {
70- ShiftZ2 (clusters, merger, N);
71- }
7269 if (param.rec .tpc .mergerInterpolateErrors ) {
7370 for (int32_t i = 0 ; i < N; i++) {
7471 interpolation.hit [i].errorY = -1 ;
@@ -88,9 +85,9 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
8885 float sumInvSqrtCharge = 0 .f ;
8986 int32_t nAvgCharge = 0 ;
9087
91- if (iWay && param.rec .tpc .nWaysOuter && outerParam ) {
88+ if (iWay && param.rec .tpc .nWaysOuter ) {
9289 if (iWay == nWays - 1 ) {
93- StoreOuter (outerParam , prop, 0 );
90+ StoreOuter (&track. OuterParam () , prop, 0 );
9491 }
9592 }
9693
@@ -109,7 +106,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
109106
110107 N = 0 ;
111108 lastUpdateX = -1 ;
112- const bool inFlyDirection = (leg & 1 );
109+ const bool inFlyDirection = (track. Leg () & 1 );
113110 const int32_t wayDirection = (iWay & 1 ) ? -1 : 1 ;
114111
115112 bool noFollowCircle = false , noFollowCircle2 = false ;
@@ -173,7 +170,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
173170 } else if (allowModification && lastRow != 255 && CAMath::Abs (cluster.row - lastRow) > 1 ) {
174171 if GPUCA_RTC_CONSTEXPR (GPUCA_GET_CONSTEXPR (param.par , dodEdx)) {
175172 bool dodEdx = param.dodEdxEnabled && param.rec .tpc .adddEdxSubThresholdClusters && iWay == nWays - 1 && CAMath::Abs (cluster.row - lastRow) == 2 ;
176- dodEdx = AttachClustersPropagate (merger, cluster.sector , lastRow, cluster.row , iTrk, leg == 0 , prop, inFlyDirection, GPUCA_MAX_SIN_PHI, dodEdx);
173+ dodEdx = AttachClustersPropagate (merger, cluster.sector , lastRow, cluster.row , iTrk, track. Leg () == 0 , prop, inFlyDirection, GPUCA_MAX_SIN_PHI, dodEdx);
177174 if (dodEdx) {
178175 dEdx.fillSubThreshold (lastRow - wayDirection);
179176 if GPUCA_RTC_CONSTEXPR (GPUCA_GET_CONSTEXPR (param.rec .tpc , dEdxClusterRejectionFlagMask) != GPUCA_GET_CONSTEXPR (param.rec .tpc , dEdxClusterRejectionFlagMaskAlt)) {
@@ -244,7 +241,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
244241
245242 float uncorrectedY = -1e6f;
246243 if (allowModification) {
247- uncorrectedY = AttachClusters (merger, cluster.sector , cluster.row , iTrk, leg == 0 , prop);
244+ uncorrectedY = AttachClusters (merger, cluster.sector , cluster.row , iTrk, track. Leg () == 0 , prop);
248245 }
249246
250247 const int32_t err2 = mNDF > 0 && CAMath::Abs (prop.GetSinPhi0 ()) >= maxSinForUpdate;
@@ -361,14 +358,14 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
361358 break ; // bad chi2 for the whole track, stop the fit
362359 }
363360 }
364- if (((nWays - iWay) & 1 ) && (iWay != nWays - 1 ) && (clusters[ 0 ]. sector < 18 ) == (clusters[maxN - 1 ]. sector < 18 )) {
365- ShiftZ2 (clusters, merger, maxN);
361+ if (((nWays - iWay) & 1 ) && (iWay != nWays - 1 ) && !track. CCE () && !track. Looper ( )) {
362+ ShiftZ (clusters, merger, maxN);
366363 }
367364 }
368365 ConstrainSinPhi ();
369366
370367 GPUCA_DEBUG_STREAMER_CHECK (if (o2::utils::DebugStreamer::checkStream (o2::utils::StreamFlags::streamUpdateTrack, iTrk)) {
371- o2::utils::DebugStreamer::instance ()->getStreamer (" debug_accept_track" , " UPDATE" ) << o2::utils::DebugStreamer::instance ()->getUniqueTreeName (" debug_accept_track" ).data () << " iTrk=" << iTrk << " outerParam=" << *outerParam << " track=" << this << " ihitStart=" << ihitStart << " \n " ;
368+ o2::utils::DebugStreamer::instance ()->getStreamer (" debug_accept_track" , " UPDATE" ) << o2::utils::DebugStreamer::instance ()->getUniqueTreeName (" debug_accept_track" ).data () << " iTrk=" << iTrk << " outerParam=" << track. OuterParam () << " track=" << this << " ihitStart=" << ihitStart << " \n " ;
372369 })
373370
374371 if (!(N + NTolerated >= GPUCA_TRACKLET_SELECTOR_MIN_HITS_B5 (mP [4 ] * param.qptB5Scaler ) && 2 * NTolerated <= CAMath::Max (10 , N) && CheckNumericalQuality (covYYUpd))) {
@@ -842,22 +839,18 @@ GPUdi() void GPUTPCGMTrackParam::AttachClustersMirror(const GPUTPCGMMerger* GPUr
842839 }
843840}
844841
845- GPUd () void GPUTPCGMTrackParam::ShiftZ2 (const GPUTPCGMMergedTrackHit* clusters, const GPUTPCGMMerger* merger, int32_t N)
842+ GPUd () void GPUTPCGMTrackParam::ShiftZ (const GPUTPCGMMergedTrackHit* clusters, const GPUTPCGMMerger* merger, int32_t N)
846843{
847- float tzInner, tzOuter;
848- float xInner, xOuter;
849844 if (N == 0 ) {
850845 N = 1 ;
851846 }
852847 const auto & GPUrestrict () cls = merger->GetConstantMem ()->ioPtrs .clustersNative ->clustersLinear ;
853- tzInner = cls[clusters[N - 1 ].num ].getTime ();
854- tzOuter = cls[clusters[0 ].num ].getTime ();
855- xInner = GPUTPCGeometry::Row2X (clusters[N - 1 ].row );
856- xOuter = GPUTPCGeometry::Row2X (clusters[0 ].row );
857- ShiftZ (merger, clusters[0 ].sector , tzInner, tzOuter, xInner, xOuter);
848+ float z0 = cls[clusters[0 ].num ].getTime (), zn = cls[clusters[N - 1 ].num ].getTime ();
849+ 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 )};
850+ ShiftZ (merger, clusters[0 ].sector , tmp[0 ], tmp[1 ], tmp[2 ]);
858851}
859852
860- GPUd () void GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMerger* GPUrestrict () merger, int32_t sector, float tz1 , float tz2 , float x1, float x2 )
853+ GPUd () void GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMerger* GPUrestrict () merger, int32_t sector, float cltmax , float cltmin , float clx )
861854{
862855 if (!merger->Param ().par .continuousTracking ) {
863856 return ;
@@ -891,25 +884,17 @@ GPUd() void GPUTPCGMTrackParam::ShiftZ(const GPUTPCGMMerger* GPUrestrict() merge
891884 }
892885
893886 if (!beamlineReached) {
894- float baset, basex;
895- if (CAMath::Abs (tz1) > CAMath::Abs (tz2)) {
896- baset = tz1;
897- basex = x1;
898- } else {
899- baset = tz2;
900- basex = x2;
901- }
902- float refZ = ((sector < GPUCA_NSECTORS / 2 ) ? merger->Param ().rec .tpc .defaultZOffsetOverR : -merger->Param ().rec .tpc .defaultZOffsetOverR ) * basex;
887+ float refZ = ((sector < GPUCA_NSECTORS / 2 ) ? merger->Param ().rec .tpc .defaultZOffsetOverR : -merger->Param ().rec .tpc .defaultZOffsetOverR ) * clx;
903888 float basez;
904- merger->GetConstantMem ()->calibObjects .fastTransformHelper ->getCorrMap ()->TransformIdealZ (sector, baset , basez, mTZOffset );
889+ merger->GetConstantMem ()->calibObjects .fastTransformHelper ->getCorrMap ()->TransformIdealZ (sector, cltmax , basez, mTZOffset );
905890 deltaZ = basez - refZ;
906891 }
907892 {
908893 float deltaT = merger->GetConstantMem ()->calibObjects .fastTransformHelper ->getCorrMap ()->convDeltaZtoDeltaTimeInTimeFrame (sector, deltaZ);
909894 mTZOffset += deltaT;
910895 mP [1 ] -= deltaZ;
911- const float maxT = CAMath::Min (tz1, tz2) - merger->GetConstantMem ()->calibObjects .fastTransformHelper ->getCorrMap ()->getT0 ();
912- const float minT = CAMath::Max (tz1, tz2) - merger->GetConstantMem ()->calibObjects .fastTransformHelper ->getCorrMap ()->getMaxDriftTime (sector);
896+ const float maxT = cltmin - merger->GetConstantMem ()->calibObjects .fastTransformHelper ->getCorrMap ()->getT0 ();
897+ const float minT = cltmax - merger->GetConstantMem ()->calibObjects .fastTransformHelper ->getCorrMap ()->getMaxDriftTime (sector);
913898 // printf("T Check: Clusters %f %f, min %f max %f vtx %f\n", tz1, tz2, minT, maxT, mTZOffset);
914899 deltaT = 0 .f ;
915900 if (mTZOffset < minT) {
@@ -980,7 +965,7 @@ GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict()
980965 GPUTPCGMTrackParam t = track.Param ();
981966 float Alpha = track.Alpha ();
982967 CADEBUG (int32_t nTrackHitsOld = nTrackHits; float ptOld = t.QPt ());
983- bool ok = t.Fit (merger, iTrk, merger->Clusters () + track.FirstClusterRef (), nTrackHits, NTolerated, Alpha, attempt, GPUCA_MAX_SIN_PHI, & track. OuterParam (), track. Leg () );
968+ bool ok = t.Fit (merger, iTrk, merger->Clusters () + track.FirstClusterRef (), nTrackHits, NTolerated, Alpha, attempt, GPUCA_MAX_SIN_PHI, track);
984969 CADEBUG (printf (" Finished Fit Track %d\n " , iTrk));
985970 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)));
986971
@@ -994,7 +979,7 @@ GPUdii() void GPUTPCGMTrackParam::RefitTrack(GPUTPCGMMergedTrack& GPUrestrict()
994979 NTolerated = 0 ; // Clusters not fit but tollerated for track length cut
995980 t = track.Param ();
996981 Alpha = track.Alpha ();
997- ok = t.Fit (merger, iTrk, merger->Clusters () + track.FirstClusterRef (), nTrackHits, NTolerated, Alpha, 1 , GPUCA_MAX_SIN_PHI, & track. OuterParam (), track. Leg () );
982+ ok = t.Fit (merger, iTrk, merger->Clusters () + track.FirstClusterRef (), nTrackHits, NTolerated, Alpha, 1 , GPUCA_MAX_SIN_PHI, track);
998983 } else {
999984 uint32_t nRefit = CAMath::AtomicAdd (&merger->Memory ()->nRetryRefit , 1u );
1000985 merger->RetryRefitIds ()[nRefit] = iTrk;
0 commit comments