]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliHelix.cxx
(martin) 2D correction matrix calculation class
[u/mrichter/AliRoot.git] / STEER / AliHelix.cxx
index dc9c65b08f424a2a6a0c2315b23c9d8fe2aa2849..7050e3bb89a7d60b8493bb13ef87c5d4c94cb29e 100644 (file)
@@ -54,13 +54,20 @@ AliHelix::AliHelix(const AliKalmanTrack &t)
   alpha=t.GetAlpha();
   //
   //circle parameters
+  //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]/t.GetConvConst();    // 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
+  //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]/AliKalmanTrack::GetConvConst();    // 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;