]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDtrackerV1.cxx
Add a protection against division by zero
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackerV1.cxx
index 1cc9f77ddc7771a08cb401e670ab5710d547429e..b4ad87e8d0f6628ffae46e6c8dff18ff4f3a0466 100644 (file)
@@ -3605,7 +3605,8 @@ void AliTRDtrackerV1::AliTRDLeastSquare::AddPoint(Double_t *x, Double_t y, Doubl
   //
   // Adding Point to the fitter
   //
-  Double_t weight = 1/(sigmaY * sigmaY);
+  Double_t weight = 1/(sigmaY > 1e-9 ? sigmaY : 1e-9);
+  weight *= weight;
   Double_t &xpt = *x;
   //   printf("Adding point x = %f, y = %f, sigma = %f\n", xpt, y, sigmaY);
   fSums[0] += weight;
@@ -3621,7 +3622,9 @@ void AliTRDtrackerV1::AliTRDLeastSquare::RemovePoint(Double_t *x, Double_t y, Do
   //
   // Remove Point from the sample
   //
-  Double_t weight = 1/(sigmaY * sigmaY);
+  
+  Double_t weight = 1/(sigmaY > 1e-9 ? sigmaY : 1e-9);
+  weight *= weight;
   Double_t &xpt = *x; 
   fSums[0] -= weight;
   fSums[1] -= weight * xpt;
@@ -3650,10 +3653,9 @@ void AliTRDtrackerV1::AliTRDLeastSquare::Eval(){
   //   printf("fParams[0] = %f, fParams[1] = %f\n", fParams[0], fParams[1]);
   
   // Covariance matrix
-  Double_t sqrnorm = fSums[0] * fSums[0];
-  fCovarianceMatrix[0] = fSums[4] / fSums[0] - fSums[1] * fSums[1] / sqrnorm;
-  fCovarianceMatrix[1] = fSums[5] / fSums[0] - fSums[2] * fSums[2] / sqrnorm;
-  fCovarianceMatrix[2] = fSums[3] / fSums[0] - fSums[1] * fSums[2] / sqrnorm;
+  fCovarianceMatrix[0] = fSums[4] / fSums[0] - fSums[1] * fSums[1] / (fSums[0] * fSums[0]);
+  fCovarianceMatrix[1] = fSums[5] / fSums[0] - fSums[2] * fSums[2] / (fSums[0] * fSums[0]);
+  fCovarianceMatrix[2] = fSums[3] / fSums[0] - fSums[1] * fSums[2] / (fSums[0] * fSums[0]);
 }
 
 //_____________________________________________________________________________