]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCpolyTrack.cxx
fortran loop removed
[u/mrichter/AliRoot.git] / TPC / AliTPCpolyTrack.cxx
index 4b707053c7a9b3a9948be2349ec916d9c7aacb28..f62ce64eaceac05fc197fbe88db503bcd0d8e0ff 100644 (file)
@@ -89,14 +89,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 +156,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);
+
+}
+