@@ -226,25 +226,14 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
226226 }
227227 CADEBUG (printf (" \n " ));
228228
229- int32_t retValUpd = 0 , retValInt = 0 ;
229+ int32_t retValUpd;
230230 float threshold = 3 .f + (lastUpdateX >= 0 ? (CAMath::Abs (mX - lastUpdateX) / 2 ) : 0 .f );
231231 if (mNDF > (int32_t )param.rec .tpc .mergerNonInterpolateRejectMinNDF && (CAMath::Abs (yy - mP [0 ]) > threshold || CAMath::Abs (zz - mP [1 ]) > threshold)) {
232232 retValUpd = GPUTPCGMPropagator::updateErrorClusterRejectedDistance;
233233 } else {
234- int8_t rejectChi2 = 0 ;
235- if (attempt == 0 ) {
236- if (param.rec .tpc .mergerInterpolateErrors && CAMath::Abs (ihit - ihitMergeFirst) <= 1 ) {
237- if (iWay == nWays - 3 ) {
238- rejectChi2 = GPUTPCGMPropagator::rejectInterFill;
239- } else if (iWay == nWays - 2 ) {
240- rejectChi2 = GPUTPCGMPropagator::rejectInterReject;
241- } else if (iWay == nWays - 1 ) {
242- rejectChi2 = (param.rec .tpc .mergerInterpolateRejectAlsoOnCurrentPosition && GetNDF () > (int32_t )param.rec .tpc .mergerNonInterpolateRejectMinNDF ) ? GPUTPCGMPropagator::rejectDirect : 0 ;
243- }
244- } else {
245- rejectChi2 = allowChangeClusters && goodRows > 5 ;
246- }
247- }
234+ int8_t rejectChi2 = attempt ? 0 // In second attempt, we do not reject
235+ : (param.rec .tpc .mergerInterpolateErrors && CAMath::Abs (ihit - ihitMergeFirst) <= 1 ) ? (finalOutInFit ? (GPUTPCGMPropagator::rejectInterFill + !(iWay & 1 )) : 0 ) // reject via interpolation
236+ : (allowChangeClusters && goodRows > 5 ); // normal rejection during the fit
248237
249238 float err2Y, err2Z;
250239 const float time = merger->GetConstantMem ()->ioPtrs .clustersNative ? merger->GetConstantMem ()->ioPtrs .clustersNative ->clustersLinear [cluster.num ].getTime () : -1 .f ;
@@ -255,6 +244,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
255244
256245 prop.GetErr2 (err2Y, err2Z, param, zz, cluster.row , clusterState, cluster.sector , time, invAvgCharge, invCharge);
257246
247+ int retValInt = 0 ;
258248 if (rejectChi2 >= GPUTPCGMPropagator::rejectInterFill) {
259249 if (rejectChi2 == GPUTPCGMPropagator::rejectInterReject && interpolation.hit [ihit].errorY < (GPUCA_PAR_MERGER_INTERPOLATION_ERROR_TYPE_A)0 ) {
260250 rejectChi2 = GPUTPCGMPropagator::rejectDirect;
@@ -263,7 +253,9 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
263253 }
264254 }
265255
266- if (param.rec .tpc .rejectEdgeClustersInTrackFit && uncorrectedY > -1e6f && param.rejectEdgeClusterByY (uncorrectedY, cluster.row , CAMath::Sqrt (mC [0 ]))) { // uncorrectedY > -1e6f implies allowChangeClusters
256+ if (retValInt) {
257+ retValUpd = retValInt;
258+ } else if (param.rec .tpc .rejectEdgeClustersInTrackFit && uncorrectedY > -1e6f && param.rejectEdgeClusterByY (uncorrectedY, cluster.row , CAMath::Sqrt (mC [0 ]))) { // uncorrectedY > -1e6f implies allowChangeClusters
267259 retValUpd = GPUTPCGMPropagator::updateErrorClusterRejectedEdge;
268260 } else {
269261 retValUpd = prop.Update (yy, zz, cluster.row , param, clusterState, rejectChi2, refit, err2Y, err2Z);
@@ -277,8 +269,8 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
277269 CADEBUG (printf (" \t %21sFit Alpha %8.3f , X %8.3f - Y %8.3f, Z %8.3f - QPt %7.2f (%7.2f), SP %5.2f (%5.2f), DzDs %5.2f %16s --- Cov sY %8.3f sZ %8.3f sSP %8.3f sPt %8.3f - YPt %8.3f - FErr %d %d\n " , " " , prop.GetAlpha (), mX , mP [0 ], mP [1 ], mP [4 ], prop.GetQPt0 (), mP [2 ], prop.GetSinPhi0 (), mP [3 ], " " , sqrtf (mC [0 ]), sqrtf (mC [2 ]), sqrtf (mC [5 ]), sqrtf (mC [14 ]), mC [10 ], retValUpd, retValInt));
278270 // clang-format on
279271
280- ConstrainSinPhi (); // TODO: Limit using ConstrainSinPhi everywhere!
281- if (!retValUpd && !retValInt) // track is updated
272+ ConstrainSinPhi (); // TODO: Limit using ConstrainSinPhi everywhere!
273+ if (!retValUpd) // track is updated
282274 {
283275 lastUpdateX = mX ;
284276 covYYUpd = mC [0 ];
@@ -320,16 +312,14 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
320312 }
321313 }
322314 }
323- } else if (retValInt || retValUpd >= GPUTPCGMPropagator::updateErrorClusterRejected) { // cluster far away form the track
324- if (retValInt || allowChangeClusters) {
315+ } else if (retValUpd >= GPUTPCGMPropagator::updateErrorClusterRejected) { // cluster far away form the track
316+ if (allowChangeClusters) {
325317 MarkClusters (clusters, ihitMergeFirst, ihit, wayDirection, GPUTPCGMMergedTrackHit::flagRejectDistance);
326318 } else if (finalFit) {
327319 MarkClusters (clusters, ihitMergeFirst, ihit, wayDirection, GPUTPCGMMergedTrackHit::flagRejectErr);
328320 }
329- if (!retValInt) {
330- nMissed++;
331- nMissed2++;
332- }
321+ nMissed++;
322+ nMissed2++;
333323 } else {
334324 break ; // bad chi2 for the whole track, stop the fit
335325 }
0 commit comments