]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliTrackFitterKalman.cxx
For embedding: use AliESDEvent instead of AliESD (obsolete)
[u/mrichter/AliRoot.git] / STEER / AliTrackFitterKalman.cxx
index ad04f155ce52e3701af43c3981806cdbd23df06a..71523b3d76c1566f240c886d09b69e34402a020e 100755 (executable)
@@ -42,8 +42,7 @@ const Double_t AliTrackFitterKalman::fgkMaxChi2=33.;
 AliTrackFitterKalman::
 AliTrackFitterKalman(AliTrackPointArray *array, Bool_t owner):
   AliTrackFitter(array,owner),
-  fMaxChi2(fgkMaxChi2),
-  fSeed(kFALSE)
+  fMaxChi2(fgkMaxChi2)
 {
   //
   // Constructor
@@ -55,7 +54,7 @@ Bool_t AliTrackFitterKalman::Begin(Int_t first, Int_t last) {
   // Make a seed out of the track points with the indices "first" and "last". 
   // This is the "default" seed.
   //
-  if (fSeed) return kTRUE;
+  fPoints->Sort();
   AliTrackPoint fp,lp;
   fPoints->GetPoint(fp,first); fPoints->GetPoint(lp,last);
   return MakeSeed(&fp,&lp);
@@ -181,6 +180,7 @@ Bool_t AliTrackFitterKalman::Update(const AliTrackPoint *p, Double_t chi2) {
   v(0,0)=cov[0]+c(0,0); v(0,1)=cov[1]+c(0,1); v(0,2)=cov[2]+c(0,2);
   v(1,0)=cov[1]+c(1,0); v(1,1)=cov[3]+c(1,1); v(1,2)=cov[4]+c(1,2);
   v(2,0)=cov[2]+c(2,0); v(2,1)=cov[4]+c(2,1); v(2,2)=cov[5]+c(2,2);
+  if (TMath::Abs(v.Determinant()) < 1.e-33) return kFALSE;
   v.Invert();
 
   TMatrixD ch(5,3);
@@ -269,6 +269,7 @@ Bool_t AliTrackFitterKalman::GetPCA(const AliTrackPoint &p, AliTrackPoint &i) co
 
   TMatrixDSym tmW(tC);
   tmW+=mC;
+  if (TMath::Abs(tmW.Determinant()) < 1.e-33) return kFALSE;
   tmW.Invert();
 
   TMatrixD mW(tC,TMatrixD::kMult,tmW);
@@ -326,5 +327,4 @@ AliTrackFitterKalman::SetSeed(const Double_t par[5], const Double_t cov[15]) {
   cv(0,3)=cv(3,0); cv(1,3)=cv(3,1); cv(2,3)=cv(3,2);
   cv(0,4)=cv(4,0); cv(1,4)=cv(4,1); cv(2,4)=cv(4,2); cv(3,4)=cv(4,3);
 
-  fSeed=kTRUE;
 }