]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliHelix.cxx
I improved (by a factor 2.5) the speed of the MatchToMC method
[u/mrichter/AliRoot.git] / STEER / AliHelix.cxx
index dc9c65b08f424a2a6a0c2315b23c9d8fe2aa2849..ce4e5aa9c27ba28be7e9631593ee5b4326e20079 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "AliHelix.h"
 #include "AliKalmanTrack.h"
-#include "AliExternalTrackParam.h"
+#include "AliTracker.h"
 #include "TMath.h"
 ClassImp(AliHelix)
 
@@ -54,13 +54,20 @@ AliHelix::AliHelix(const AliKalmanTrack &t)
   alpha=t.GetAlpha();
   //
   //circle parameters
-  fHelix[4]=fHelix[4]/t.GetConvConst();    // C
+  //PH Sometimes fP4 and fHelix[4] are very big and the calculation
+  //PH of the Sqrt cannot be done. To be investigated...
+  fHelix[4]=fHelix[4]/(-1000/0.299792458/AliTracker::GetBz());    // C
   cs=TMath::Cos(alpha); sn=TMath::Sin(alpha);
 
   Double_t xc, yc, rc;
   rc  =  1/fHelix[4];
   xc  =  x-fHelix[2]*rc;
-  yc  =  fHelix[0]+TMath::Sqrt(1-(x-xc)*(x-xc)*fHelix[4]*fHelix[4])/fHelix[4];
+  Double_t dummy = 1-(x-xc)*(x-xc)*fHelix[4]*fHelix[4];
+  if (dummy<0) {
+    AliError(Form("The argument of the Sqrt is %f => set to 0\n",dummy));
+    dummy = 0;
+  }
+  yc  =  fHelix[0]+TMath::Sqrt(dummy)/fHelix[4];
   
   fHelix[6] = xc*cs - yc*sn;
   fHelix[7] = xc*sn + yc*cs;
@@ -88,17 +95,24 @@ AliHelix::AliHelix(const AliExternalTrackParam &t)
   Double_t alpha,x,cs,sn;
   const Double_t *param =t.GetParameter(); 
   for (Int_t i=0;i<5;i++) fHelix[i]=param[i]; 
-  x = t.X();
-  alpha=t.Alpha();
+  x = t.GetX();
+  alpha=t.GetAlpha();
   //
   //circle parameters
-  fHelix[4]=fHelix[4]/AliKalmanTrack::GetConvConst();    // C
+  //PH Sometimes fP4 and fHelix[4] are very big and the calculation
+  //PH of the Sqrt cannot be done. To be investigated...
+  fHelix[4]=fHelix[4]/(-1000/0.299792458/AliTracker::GetBz());    // C
   cs=TMath::Cos(alpha); sn=TMath::Sin(alpha);
 
   Double_t xc, yc, rc;
   rc  =  1/fHelix[4];
   xc  =  x-fHelix[2]*rc;
-  yc  =  fHelix[0]+TMath::Sqrt(1-(x-xc)*(x-xc)*fHelix[4]*fHelix[4])/fHelix[4];
+  Double_t dummy = 1-(x-xc)*(x-xc)*fHelix[4]*fHelix[4];
+  if (dummy<0) {
+    AliError(Form("The argument of the Sqrt is %f => set to 0\n",dummy));
+    dummy = 0;
+  }
+  yc  =  fHelix[0]+TMath::Sqrt(dummy)/fHelix[4];
   
   fHelix[6] = xc*cs - yc*sn;
   fHelix[7] = xc*sn + yc*cs;
@@ -123,7 +137,7 @@ AliHelix::AliHelix(Double_t x[3], Double_t p[3], Double_t charge, Double_t conve
   //
   Double_t pt = TMath::Sqrt(p[0]*p[0]+p[1]*p[1]);
   if (TMath::Abs(conversion)<0.00000001) 
-    conversion = AliKalmanTrack::GetConvConst();
+    conversion = -1000/0.299792458/AliTracker::GetBz();
   //
   //  
   fHelix[4] = charge/(conversion*pt); // C
@@ -161,7 +175,7 @@ void  AliHelix::GetMomentum(Double_t phase, Double_t p[4],Double_t conversion, D
   // return  momentum at given phase
   Double_t x[3],g[3],gg[3];
   Evaluate(phase,x,g,gg);
-  if (TMath::Abs(conversion)<0.0001) conversion = AliKalmanTrack::GetConvConst();
+  if (TMath::Abs(conversion)<0.0001) conversion = -1000/0.299792458/AliTracker::GetBz();
   Double_t mt = TMath::Sqrt(g[0]*g[0]+g[1]*g[1]);
   p[0] = fHelix[8]*g[0]/(mt*conversion);
   p[1] = fHelix[8]*g[1]/(mt*conversion);