@@ -103,7 +103,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_
103103 CADEBUG (printf (" Fitting track %d way %d (sector %d, alpha %f) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n " , iTrk, iWay, CAMath::Float2IntRn (prop.GetAlpha () / GPUTPCGeometry::kSectAngle ()) + (mP [1 ] < 0 ? 18 : 0 ), prop.GetAlpha ()));
104104
105105 N = 0 ;
106- uint8_t lastUpdateRow = 255 , lastPropagateRow = 255 , lastUpdateSector = 255 ;
106+ uint8_t lastUpdateRow = 255 , lastPropagateRow = 255 , lastSector = 255 ;
107107 float lastUpdateX = -1 ;
108108 const bool inFlyDirection = iWay & 1 ;
109109 const int32_t wayDirection = (iWay & 1 ) ? -1 : 1 ;
@@ -139,7 +139,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_
139139 uint8_t dEdxSubThresholdRow = 255 ;
140140 bool doInterpolate = param.rec .tpc .rebuildTrackInFit && (iWay == nWays - 3 || iWay == nWays - 2 );
141141 if (lastPropagateRow != 255 && CAMath::Abs (cluster.row - lastPropagateRow) > 1 ) {
142- bool dodEdx = param.dodEdxEnabled && param.rec .tpc .adddEdxSubThresholdClusters && finalFit && CAMath::Abs (cluster.row - lastUpdateRow) == 2 && cluster.sector == lastUpdateSector && currentClusterStatus == 0 ;
142+ bool dodEdx = param.dodEdxEnabled && param.rec .tpc .adddEdxSubThresholdClusters && finalFit && CAMath::Abs (cluster.row - lastUpdateRow) == 2 && cluster.sector == lastSector && currentClusterStatus == 0 ;
143143 bool doAttach = allowChangeClusters && !param.rec .tpc .rebuildTrackInFit && !(merger.Param ().rec .tpc .disableRefitAttachment & 2 );
144144 if (dodEdx || doAttach || doInterpolate) {
145145 int32_t step = cluster.row > lastPropagateRow ? 1 : -1 ;
@@ -183,9 +183,6 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_
183183 break ;
184184 }
185185 auto & inter = interpolation.hit [interpolationIndex];
186- if (param.rec .tpc .mergerInterpolateErrors && iWay == nWays - 3 ) {
187- prop.InterpolateFill (&inter);
188- }
189186
190187 float uncorrectedY = -1e6f;
191188 if (param.rec .tpc .rebuildTrackInFit ) {
@@ -202,14 +199,20 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_
202199 merger.GetConstantMem ()->calibObjects .fastTransformHelper ->InverseTransformYZtoNominalYZ (cluster.sector , cluster.row , mP [0 ], mP [1 ], uncorrectedY, tmpZ);
203200 }
204201
202+ HandleCrossCE (param, cluster.sector , lastSector);
203+ lastSector = cluster.sector ;
204+
205+ if (param.rec .tpc .mergerInterpolateErrors && iWay == nWays - 3 ) {
206+ prop.InterpolateFill (&inter);
207+ }
208+
205209 if (currentClusterStatus) {
206210 nMissed++;
207211 nMissed2++;
208212 continue ;
209213 }
210214
211- const bool crossCE = lastUpdateSector != 255 && ((lastUpdateSector < 18 ) ^ (clusters[ihit].sector < 18 ));
212- int32_t retValHit = FitHit (merger, iTrk, track, xx, yy, zz, clusterState, clAlpha, iWay, inFlyDirection, crossCE, deltaZ, lastUpdateX, clusters, prop, inter, dEdx, dEdxAlt, sumInvSqrtCharge, nAvgCharge, ihit, ihitMergeFirst, allowChangeClusters, refit, finalFit, nMissed, nMissed2, resetT0, uncorrectedY);
215+ int32_t retValHit = FitHit (merger, iTrk, track, xx, yy, zz, clusterState, clAlpha, iWay, inFlyDirection, deltaZ, lastUpdateX, clusters, prop, inter, dEdx, dEdxAlt, sumInvSqrtCharge, nAvgCharge, ihit, ihitMergeFirst, allowChangeClusters, refit, finalFit, nMissed, nMissed2, resetT0, uncorrectedY);
213216 if (retValHit == 0 ) {
214217 DodEdx (dEdx, dEdxAlt, merger, finalFit, ihit, ihitMergeFirst, wayDirection, clusters, clusterState, zz, dEdxSubThresholdRow);
215218 ihitStart = ihit;
@@ -224,11 +227,10 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger& GPUrestrict() merger, int32_
224227 }
225228
226229 lastUpdateRow = cluster.row ;
227- lastUpdateSector = cluster.sector ;
228230 assert (!param.rec .tpc .mergerInterpolateErrors || rebuilt || iWay != nWays - 2 || ihit || interpolationIndex == 0 );
229231 }
230232 if (finalOutInFit && !(param.rec .tpc .disableRefitAttachment & 4 ) && lastUpdateRow != 255 ) {
231- StoreLoopPropagation (merger, lastUpdateSector , lastUpdateRow, iTrk, lastUpdateRow > clusters[(iWay & 1 ) ? (maxN - 1 ) : 0 ].row , prop.GetAlpha ());
233+ StoreLoopPropagation (merger, lastSector , lastUpdateRow, iTrk, lastUpdateRow > clusters[(iWay & 1 ) ? (maxN - 1 ) : 0 ].row , prop.GetAlpha ());
232234 CADEBUG (printf (" \t\t STORING %d lastUpdateRow %d row %d out %d\n " , iTrk, (int )lastUpdateRow, (int )clusters[(iWay & 1 ) ? (maxN - 1 ) : 0 ].row , lastUpdateRow > clusters[(iWay & 1 ) ? (maxN - 1 ) : 0 ].row ));
233235 }
234236 if (!(iWay & 1 ) && !finalFit && !track.CCE () && !track.Looper ()) {
@@ -292,7 +294,23 @@ GPUdii() void GPUTPCGMTrackParam::FitAddRow(const int32_t iRow, const uint8_t se
292294 }
293295}
294296
295- GPUdii () int32_t GPUTPCGMTrackParam::FitHit(GPUTPCGMMerger& GPUrestrict () merger, const int32_t iTrk, const GPUTPCGMMergedTrack& GPUrestrict() track, const float xx, const float yy, const float zz, const uint8_t clusterState, const float clAlpha, const int32_t iWay, const bool inFlyDirection, const bool crossCE, float& GPUrestrict() deltaZ, float& GPUrestrict() lastUpdateX, GPUTPCGMMergedTrackHit* GPUrestrict() clusters, GPUTPCGMPropagator& GPUrestrict() prop, gputpcgmmergertypes::InterpolationErrorHit& GPUrestrict() inter, GPUdEdx& GPUrestrict() dEdx, GPUdEdx& GPUrestrict() dEdxAlt, float& GPUrestrict() sumInvSqrtCharge, int32_t& GPUrestrict() nAvgCharge, const int32_t ihit, const int32_t ihitMergeFirst, const bool allowChangeClusters, const bool refit, const bool finalFit, int32_t& GPUrestrict() nMissed, int32_t& GPUrestrict() nMissed2, int32_t& GPUrestrict() resetT0, float uncorrectedY)
297+ GPUdii () void GPUTPCGMTrackParam::HandleCrossCE(const GPUParam& GPUrestrict () param, const uint8_t sector, const uint8_t& lastSector)
298+ {
299+ const bool crossCE = lastSector != 255 && ((lastSector < 18 ) ^ (sector < 18 ));
300+ if (crossCE) {
301+ if (param.rec .tpc .addErrorsCECrossing ) {
302+ if (param.rec .tpc .addErrorsCECrossing >= 2 ) {
303+ AddCovDiagErrorsWithCorrelations (param.rec .tpc .errorsCECrossing );
304+ } else {
305+ AddCovDiagErrors (param.rec .tpc .errorsCECrossing );
306+ }
307+ } else if (mC [2 ] < 0 .5f ) {
308+ mC [2 ] = 0 .5f ;
309+ }
310+ }
311+ }
312+
313+ GPUdii () int32_t GPUTPCGMTrackParam::FitHit(GPUTPCGMMerger& GPUrestrict () merger, const int32_t iTrk, const GPUTPCGMMergedTrack& GPUrestrict() track, const float xx, const float yy, const float zz, const uint8_t clusterState, const float clAlpha, const int32_t iWay, const bool inFlyDirection, float& GPUrestrict() deltaZ, float& GPUrestrict() lastUpdateX, GPUTPCGMMergedTrackHit* GPUrestrict() clusters, GPUTPCGMPropagator& GPUrestrict() prop, gputpcgmmergertypes::InterpolationErrorHit& GPUrestrict() inter, GPUdEdx& GPUrestrict() dEdx, GPUdEdx& GPUrestrict() dEdxAlt, float& GPUrestrict() sumInvSqrtCharge, int32_t& GPUrestrict() nAvgCharge, const int32_t ihit, const int32_t ihitMergeFirst, const bool allowChangeClusters, const bool refit, const bool finalFit, int32_t& GPUrestrict() nMissed, int32_t& GPUrestrict() nMissed2, int32_t& GPUrestrict() resetT0, float uncorrectedY)
296314{
297315 const GPUParam& GPUrestrict () param = merger.Param ();
298316 const int32_t nWays = param.rec .tpc .nWays ;
@@ -307,18 +325,6 @@ GPUdii() int32_t GPUTPCGMTrackParam::FitHit(GPUTPCGMMerger& GPUrestrict() merger
307325 return 2 ; // Propagate failed or high incl angle
308326 }
309327
310- if (crossCE) {
311- if (param.rec .tpc .addErrorsCECrossing ) {
312- if (param.rec .tpc .addErrorsCECrossing >= 2 ) {
313- AddCovDiagErrorsWithCorrelations (param.rec .tpc .errorsCECrossing );
314- } else {
315- AddCovDiagErrors (param.rec .tpc .errorsCECrossing );
316- }
317- } else if (mC [2 ] < 0 .5f ) {
318- mC [2 ] = 0 .5f ;
319- }
320- }
321-
322328 int32_t retValUpd = 0 , retValInt = 0 ;
323329 float threshold = 3 .f + (lastUpdateX >= 0 ? (CAMath::Abs (mX - lastUpdateX) / 2 ) : 0 .f );
324330 if (mNDF > (int32_t )param.rec .tpc .mergerNonInterpolateRejectMinNDF && (CAMath::Abs (yy - mP [0 ]) > threshold || CAMath::Abs (zz - mP [1 ]) > threshold)) {
0 commit comments