]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCpolyTrack.cxx
bug fixed
[u/mrichter/AliRoot.git] / TPC / AliTPCpolyTrack.cxx
index 577d861504aa3b9783c7c09dc4197aa51b54f46b..1dda57c46bea476816d2d8a55af89caaf597c62a 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
+//------------------------------------------------------------------
+// this class is used for a simple
+// track fitting using the polynom
+// bending in both directions are allowed
+//-----------------------------------------------------------------
 
 
 #include "AliTPCpolyTrack.h"
@@ -21,6 +26,27 @@ ClassImp(AliTPCpolyTrack)
 
 
 AliTPCpolyTrack::AliTPCpolyTrack()
+  :TObject(),
+   fA(0), 
+   fB(0), 
+   fC(0), 
+   fD(0), 
+   fE(0), 
+   fF(0), 
+   fMaxX(0), 
+   fMinX(0), 
+   fSumW(0),    
+   fSumX(0),    
+   fSumX2(0),   
+   fSumX3(0),    
+   fSumX4(0),   
+   fSumY(0),    
+   fSumYX(0),   
+   fSumYX2(0),  
+   fSumZ(0),     
+   fSumZX(0),   
+   fSumZX2(0), 
+   fNPoints(0)
 {
   Reset();
 }
@@ -78,22 +104,39 @@ void  AliTPCpolyTrack::UpdateParameters()
   //
   //Update fit parameters
   if (fNPoints>4){
-    Fit2(fSumY,fSumYX,fSumYX2,fSumX,fSumX2,fSumX3,fSumX4,fSumW,fA,fB,fC);
+    Fit2(fA,fB,fC);
     //    Fit2(fSumZ,fSumZX,fSumZX2,fSumX,fSumX2,fSumX3,fSumX4,fNPoints,fD,fE,fF);
-    Fit1(fSumZ,fSumZX,fSumX,fSumX2,fSumW,fD,fE,fF);
+    Fit1(fD,fE,fF);
   }
   else
     {
-      Fit1(fSumY,fSumYX,fSumX,fSumX2,fSumW,fA,fB,fC);
-      Fit1(fSumZ,fSumZX,fSumX,fSumX2,fSumW,fD,fE,fF);
+      Fit1(fA,fB,fC);
+      Fit1(fD,fE,fF);
     }
 }
 
+void  AliTPCpolyTrack::UpdateParameters(Int_t ny, Int_t nz)
+{
+  //
+  //
+  //Update fit parameters
+  if (ny>1){
+    Fit2(fA,fB,fC);
+  }
+  else{ 
+    Fit1(fA,fB,fC);
+  }
+  if (nz>1){
+    Fit2(fD,fE,fF);
+  }
+  else{
+    Fit1(fD,fE,fF);
+  }
+}
+
 
 
-void  AliTPCpolyTrack::Fit2(Double_t fSumY, Double_t fSumYX, Double_t fSumYX2,
-           Double_t fSumX,  Double_t fSumX2, Double_t fSumX3, 
-           Double_t fSumX4, Double_t fSumW,
+void  AliTPCpolyTrack::Fit2(
            Double_t &a, Double_t &b, Double_t &c)
 {
   //fit of second order
@@ -118,9 +161,7 @@ void  AliTPCpolyTrack::Fit2(Double_t fSumY, Double_t fSumYX, Double_t fSumYX2,
   }
 }
 
-void  AliTPCpolyTrack::Fit1(Double_t fSumY, Double_t fSumYX, 
-             Double_t fSumX,  Double_t fSumX2, 
-             Double_t fSumW, Double_t &a, Double_t &b, Double_t &c)
+void  AliTPCpolyTrack::Fit1( Double_t &a, Double_t &b, Double_t &c)
 {
   //
   //
@@ -146,7 +187,7 @@ void AliTPCpolyTrack::Refit(AliTPCpolyTrack &track, Double_t deltay, Double_t de
   track.Reset();
   //first refit to temporary
   AliTPCpolyTrack track0;
-  track0.Reset;
+  track0.Reset();
   for (Int_t i=0;i<fNPoints;i++){
     Double_t y,z;
     GetFitPoint(fX[i],y,z);
@@ -171,3 +212,40 @@ void AliTPCpolyTrack::Refit(AliTPCpolyTrack &track, Double_t deltay, Double_t de
 
 }
 
+void AliTPCpolyTrack::Refit(AliTPCpolyTrack &track, Double_t deltay, Double_t deltaz, Int_t nfirst, Int_t ny, Int_t nz)
+{
+  //
+  // refit with cut on distortion
+  //
+  track.Reset();
+  //first refit to temporary
+  AliTPCpolyTrack track0;
+  track0.Reset();
+  for (Int_t i=0;i<fNPoints;i++){
+    Double_t y,z;
+    GetFitPoint(fX[i],y,z);
+    if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
+      track0.AddPoint(fX[i],y,z);
+    }    
+  }
+  if (track0.GetN()>2){ 
+    if (track0.GetN()>nfirst)
+      track0.UpdateParameters(ny,nz);
+    else 
+      track0.UpdateParameters(1,1);
+  }
+  else 
+    return;
+  //
+  for (Int_t i=0;i<fNPoints;i++){
+    Double_t y,z;
+    track0.GetFitPoint(fX[i],y,z);
+    if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
+      track.AddPoint(fX[i],y,z);
+    }
+  }
+  if (track.GetN()>2) 
+    track.UpdateParameters(ny,nz);
+
+}
+