Fix for correct calculation of Z step for propagation with large abs(snp) or large...
authorshahoian <ruben.shahoyan@cern.ch>
Thu, 13 Nov 2014 00:53:17 +0000 (01:53 +0100)
committershahoian <ruben.shahoyan@cern.ch>
Thu, 13 Nov 2014 02:03:17 +0000 (03:03 +0100)
STEER/STEERBase/AliExternalTrackParam.cxx

index 910b99a..1982fa7 100644 (file)
@@ -1021,7 +1021,12 @@ Bool_t AliExternalTrackParam::PropagateTo(Double_t xk, Double_t b) {
     //    double rot = 2*TMath::ASin(0.5*chord*crv); // angular difference seen from the circle center
     //    fP1 += rot/crv*fP3;
     // 
-    fP1 += fP3/crv*TMath::ASin(r1*f2 - r2*f1); // more economic version from Yura.
+    double rot = TMath::ASin(r1*f2 - r2*f1); // more economic version from Yura.
+    if (f1*f1+f2*f2>1 && f1*f2<0) {          // special cases of large rotations or large abs angles
+      if (f2>0) rot =  TMath::Pi() - rot;    //
+      else      rot = -TMath::Pi() - rot;
+    }
+    fP1 += fP3/crv*rot; // more economic version from Yura.
   }
 
   //f = F - 1