* 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"
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();
}
//
//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
}
}
-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)
{
//
//
}
+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);
+
+}
+