- trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + residue * trackParam->GetNonBendingSlope());
- trackParam->SetBendingCoor(trackParam->GetBendingCoor() + residue * trackParam->GetBendingSlope());
- trackParam->SetZ(zEnd);
+ if (trackingFailed || uturn) {
+
+ // track ends +-100 meters away in the bending direction
+ dZ = zEnd - v3[2];
+ Double_t bendingSlope = TMath::Sign(1.e4,-fgSimpleBValue*trackParam->GetInverseBendingMomentum()) / dZ;
+ Double_t pZ = TMath::Abs(1. / trackParam->GetInverseBendingMomentum()) / TMath::Sqrt(1.0 + bendingSlope * bendingSlope);
+ Double_t nonBendingSlope = TMath::Sign(TMath::Abs(v3[3]) * v3[6] / pZ, trackParam->GetNonBendingSlope());
+ trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + dZ * nonBendingSlope);
+ trackParam->SetNonBendingSlope(nonBendingSlope);
+ trackParam->SetBendingCoor(trackParam->GetBendingCoor() + dZ * bendingSlope);
+ trackParam->SetBendingSlope(bendingSlope);
+ trackParam->SetZ(zEnd);
+
+ return kFALSE;
+
+ } else {
+
+ // track extrapolated normally
+ trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + residue * trackParam->GetNonBendingSlope());
+ trackParam->SetBendingCoor(trackParam->GetBendingCoor() + residue * trackParam->GetBendingSlope());
+ trackParam->SetZ(zEnd);
+
+ return !tooManyStep;
+
+ }
+