+
+////////////////////////////////////////////////////////////////////////
+Double_t AliTPCtrack::Phi() const {
+//
+//
+//
+ Double_t phi = TMath::ASin(GetSnp()) + fAlpha;
+ if (phi<0) phi+=2*TMath::Pi();
+ if (phi>=2*TMath::Pi()) phi-=2*TMath::Pi();
+ return phi;
+}
+////////////////////////////////////////////////////////////////////////
+
+
+
+////////////////////////////////////////////////////////////////////////
+// MI ADDITION
+
+Float_t AliTPCtrack::Density(Int_t row0, Int_t row1)
+{
+ //
+ // calculate cluster density
+ Int_t good = 0;
+ Int_t found = 0;
+ //if (row0<fFirstPoint) row0 = fFirstPoint;
+ if (row1>fLastPoint) row1 = fLastPoint;
+
+
+ for (Int_t i=row0;i<=row1;i++){
+ // Int_t index = fClusterIndex[i];
+ Int_t index = fIndex[i];
+ if (index!=-1) good++;
+ if (index>0) found++;
+ }
+ Float_t density=0;
+ if (good>0) density = Float_t(found)/Float_t(good);
+ return density;
+}
+
+
+Float_t AliTPCtrack::Density2(Int_t row0, Int_t row1)
+{
+ //
+ // calculate cluster density
+ Int_t good = 0;
+ Int_t found = 0;
+ //
+ for (Int_t i=row0;i<=row1;i++){
+ Int_t index = fIndex[i];
+ if (index!=-1) good++;
+ if (index>0) found++;
+ }
+ Float_t density=0;
+ if (good>0) density = Float_t(found)/Float_t(good);
+ return density;
+}
+
+
+Double_t AliTPCtrack::GetZat0() const
+{
+ //
+ // return virtual z - supposing that x = 0
+ if (TMath::Abs(fP2)>1) return 0;
+ if (TMath::Abs(fX*fP4-fP2)>1) return 0;
+ Double_t vz = fP1+fP3/fP4*(asin(-fP2)-asin(fX*fP4-fP2));
+ return vz;
+}
+
+
+Double_t AliTPCtrack::GetD(Double_t x, Double_t y) const {
+ //------------------------------------------------------------------
+ // This function calculates the transverse impact parameter
+ // with respect to a point with global coordinates (x,y)
+ //------------------------------------------------------------------
+ //Double_t xt=fX, yt=fP0;
+
+ Double_t sn=TMath::Sin(fAlpha), cs=TMath::Cos(fAlpha);
+ Double_t a = x*cs + y*sn;
+ y = -x*sn + y*cs; x=a;
+ //
+ Double_t r = TMath::Abs(1/fP4);
+ Double_t x0 = TMath::Abs(fP2*r);
+ Double_t y0 = fP0;
+ y0= fP0+TMath::Sqrt(1-(fP4*fX-fP2)*(fP4*fX-fP2))/fP4;
+
+ Double_t delta = TMath::Sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0));
+ // Double_t delta = TMath::Sqrt(TMath::Abs(x*x-2*x0*x+x0*x0+ y*y-2*y*y0+y0*y0));
+ delta -= TMath::Abs(r);
+ return delta;
+}
+
+//
+//
+
+void AliTPCtrack::UpdatePoints()
+{
+ //--------------------------------------------------
+ //calculates first ,amx dens and last points
+ //--------------------------------------------------
+ Float_t density[160];
+ for (Int_t i=0;i<160;i++) density[i]=-1.;
+ fPoints[0]= 160;
+ fPoints[1] = -1;
+ //
+ Int_t ngood=0;
+ Int_t undeff=0;
+ Int_t nall =0;
+ Int_t range=20;
+ for (Int_t i=0;i<160;i++){
+ Int_t last = i-range;
+ if (nall<range) nall++;
+ if (last>=0){
+ if (fIndex[last]>0&& (fIndex[last]&0x8000)==0) ngood--;
+ if (fIndex[last]==-1) undeff--;
+ }
+ if (fIndex[i]>0&& (fIndex[i]&0x8000)==0) ngood++;
+ if (fIndex[i]==-1) undeff++;
+ if (nall==range &&undeff<range/2) density[i-range/2] = Float_t(ngood)/Float_t(nall-undeff);
+ }
+ Float_t maxdens=0;
+ Int_t indexmax =0;
+ for (Int_t i=0;i<160;i++){
+ if (density[i]<0) continue;
+ if (density[i]>maxdens){
+ maxdens=density[i];
+ indexmax=i;
+ }
+ }
+ //
+ //max dens point
+ fPoints[3] = maxdens;
+ fPoints[1] = indexmax;
+ //
+ // last point
+ for (Int_t i=indexmax;i<160;i++){
+ if (density[i]<0) continue;
+ if (density[i]<maxdens/2.) {
+ break;
+ }
+ fPoints[2]=i;
+ }
+ //
+ // first point
+ for (Int_t i=indexmax;i>0;i--){
+ if (density[i]<0) continue;
+ if (density[i]<maxdens/2.) {
+ break;
+ }
+ fPoints[0]=i;
+ }
+ //
+}