]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCpolyTrack.cxx
Guarding print's with #ifdefs
[u/mrichter/AliRoot.git] / TPC / AliTPCpolyTrack.cxx
index 4b707053c7a9b3a9948be2349ec916d9c7aacb28..20fc39983935f96bf86bd71ed396d14d42f6874c 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();
 }
@@ -89,14 +115,27 @@ void  AliTPCpolyTrack::UpdateParameters()
     }
 }
 
-
-void AliTPCpolyTrack::GetFitPoint(Double_t x, Double_t &y, Double_t &z)
+void  AliTPCpolyTrack::UpdateParameters(Int_t ny, Int_t nz)
 {
-  y = fA+fB*x+fC*x*x;
-  z = fD+fE*x+fF*x*x;
+  //
+  //
+  //Update fit parameters
+  if (ny>1){
+    Fit2(fSumY,fSumYX,fSumYX2,fSumX,fSumX2,fSumX3,fSumX4,fSumW,fA,fB,fC);
+  }
+  else{ 
+    Fit1(fSumY,fSumYX,fSumX,fSumX2,fSumW,fA,fB,fC);
+  }
+  if (nz>1){
+    Fit2(fSumZ,fSumZX,fSumZX2,fSumX,fSumX2,fSumX3,fSumX4,fNPoints,fD,fE,fF);
+  }
+  else{
+    Fit1(fSumZ,fSumZX,fSumX,fSumX2,fSumW,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,
@@ -143,3 +182,74 @@ void  AliTPCpolyTrack::Fit1(Double_t fSumY, Double_t fSumYX,
   }
 
 }
+
+void AliTPCpolyTrack::Refit(AliTPCpolyTrack &track, Double_t deltay, Double_t deltaz)
+{
+  //
+  // 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) 
+    track0.UpdateParameters();
+  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();
+
+}
+
+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);
+
+}
+