1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15 //------------------------------------------------------------------
16 // this class is used for a simple
17 // track fitting using the polynom
18 // bending in both directions are allowed
19 //-----------------------------------------------------------------
22 #include "AliTPCpolyTrack.h"
25 ClassImp(AliTPCpolyTrack)
28 AliTPCpolyTrack::AliTPCpolyTrack()
53 for(Int_t i=0;i<200;i++){
62 void AliTPCpolyTrack::Reset()
66 fSumX = fSumX2= fSumX3=fSumX4 = fSumY=fSumYX=fSumYX2=fSumZ=fSumZX=fSumZX2=fSumW =0;
70 void AliTPCpolyTrack::AddPoint(Double_t x, Double_t y, Double_t z,Double_t sy, Double_t sz)
83 Double_t w = 2./(sy+sz);
109 void AliTPCpolyTrack::UpdateParameters()
113 //Update fit parameters
116 // Fit2(fSumZ,fSumZX,fSumZX2,fSumX,fSumX2,fSumX3,fSumX4,fNPoints,fD,fE,fF);
126 void AliTPCpolyTrack::UpdateParameters(Int_t ny, Int_t nz)
130 //Update fit parameters
147 void AliTPCpolyTrack::Fit2(
148 Double_t &a, Double_t &b, Double_t &c)
150 //fit of second order
152 fSumW* (fSumX2*fSumX4-fSumX3*fSumX3) -
153 fSumX* (fSumX*fSumX4-fSumX3*fSumX2)+
154 fSumX2* (fSumX*fSumX3-fSumX2*fSumX2);
156 if (TMath::Abs(det)> 0.000000000000001) {
158 (fSumY * (fSumX2*fSumX4-fSumX3*fSumX3)-
159 fSumX *(fSumYX*fSumX4-fSumYX2*fSumX3)+
160 fSumX2*(fSumYX*fSumX3-fSumYX2*fSumX2))/det;
162 (fSumW*(fSumYX*fSumX4-fSumX3*fSumYX2)-
163 fSumY*(fSumX*fSumX4-fSumX3*fSumX2)+
164 fSumX2*(fSumX*fSumYX2-fSumYX*fSumX2))/det;
166 (fSumW*(fSumX2*fSumYX2-fSumYX*fSumX3)-
167 fSumX*(fSumX*fSumYX2-fSumYX*fSumX2)+
168 fSumY*(fSumX*fSumX3-fSumX2*fSumX2))/det;
172 void AliTPCpolyTrack::Fit1( Double_t &a, Double_t &b, Double_t &c)
177 Double_t det = fSumW*fSumX2-fSumX*fSumX;
178 if (TMath::Abs(det)> 0.000000000000001) {
179 b = (fSumW*fSumYX-fSumX*fSumY)/det;
180 a = (fSumX2*fSumY-fSumX*fSumYX)/det;
190 void AliTPCpolyTrack::Refit(AliTPCpolyTrack &track, Double_t deltay, Double_t deltaz)
193 // refit with cut on distortion
196 //first refit to temporary
197 AliTPCpolyTrack track0;
199 for (Int_t i=0;i<fNPoints;i++){
201 GetFitPoint(fX[i],y,z);
202 if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
203 track0.AddPoint(fX[i],y,z);
207 track0.UpdateParameters();
211 for (Int_t i=0;i<fNPoints;i++){
213 track0.GetFitPoint(fX[i],y,z);
214 if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
215 track.AddPoint(fX[i],y,z);
219 track.UpdateParameters();
223 void AliTPCpolyTrack::Refit(AliTPCpolyTrack &track, Double_t deltay, Double_t deltaz, Int_t nfirst, Int_t ny, Int_t nz)
226 // refit with cut on distortion
229 //first refit to temporary
230 AliTPCpolyTrack track0;
232 for (Int_t i=0;i<fNPoints;i++){
234 GetFitPoint(fX[i],y,z);
235 if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
236 track0.AddPoint(fX[i],y,z);
239 if (track0.GetN()>2){
240 if (track0.GetN()>nfirst)
241 track0.UpdateParameters(ny,nz);
243 track0.UpdateParameters(1,1);
248 for (Int_t i=0;i<fNPoints;i++){
250 track0.GetFitPoint(fX[i],y,z);
251 if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
252 track.AddPoint(fX[i],y,z);
256 track.UpdateParameters(ny,nz);