ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

////
// This class stores a tracklet (a track that lives only in a single TPC
// sector). Its objects can be constructed out of TPCseeds, that are
// holding the necessary cluster information.
////
////
//// 

#include "AliTPCTracklet.h"
#include "TObjArray.h"
#include "TLinearFitter.h"
#include "AliTPCseed.h"
#include "AliESDVertex.h"
#include "AliTracker.h"
#include "TTreeStream.h"
#include "TRandom3.h"
#include "TDecompChol.h"

#include <iostream>
using namespace std;

ClassImp(AliTPCTracklet)

const Double_t AliTPCTracklet::kB2C=0.299792458e-3;
Float_t  AliTPCTracklet::fgEdgeCutY=3;
Float_t  AliTPCTracklet::fgEdgeCutX=0;

AliTPCTracklet::AliTPCTracklet() 
  : fNClusters(0),fNStoredClusters(0),fClusters(0),fSector(-1),fOuter(0),
    fInner(0),fPrimary(0) {
  ////
  // The default constructor. It is intended to be used for I/O only.
  ////
}

AliTPCTracklet::AliTPCTracklet(const AliTPCseed *track,Int_t sector,
			       TrackType type,Bool_t storeClusters)
  : fNClusters(0),fNStoredClusters(0),fClusters(0),fSector(sector),fOuter(0),
    fInner(0),fPrimary(0) {
  ////
  // Contructor for a tracklet out of a track. Only clusters within a given 
  // sector are used.
  ///

  //TODO: only kalman works
  
  for (Int_t i=0;i<160;++i) {
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (c && RejectCluster(c)) continue;
    if (c&&c->GetDetector()==sector)
      ++fNClusters;
  }

  if (storeClusters) {
    fClusters=new AliTPCclusterMI[fNClusters];
    for (Int_t i=0;i<160;++i) {
      AliTPCclusterMI *c=track->GetClusterPointer(i);
      if (c && RejectCluster(c)) continue;
      if (c&&c->GetDetector()==sector)
	fClusters[fNStoredClusters]=*c;
      ++fNStoredClusters;
    }
  }

  switch (type) {
  case kKalman:
    FitKalman(track,sector);
    break;
  case kLinear:
  case kQuadratic:
    FitLinear(track,sector,type);
    break;
  case kRiemann:
    FitRiemann(track,sector);
    break;
  }

}

AliTPCTracklet::AliTPCTracklet(const TObjArray &/*clusters*/,Int_t sector,
			       TrackType /*type*/,Bool_t /*storeClusters*/)
  : fNClusters(0),fNStoredClusters(0),fClusters(0),fSector(sector),fOuter(0),
    fInner(0),fPrimary(0) {
  //TODO: write it!
}

AliTPCTracklet::AliTPCTracklet(const AliTPCTracklet &t)
  : TObject(t),fNClusters(t.fNClusters),fNStoredClusters(t.fNStoredClusters),fClusters(0),
    fSector(t.fSector),fOuter(0),fInner(0),
    fPrimary(0) {
  ////
  // The copy constructor. You can copy tracklets! 
  ////

  if (t.fClusters) {
    fClusters=new AliTPCclusterMI[t.fNStoredClusters];
    for (int i=0;i<t.fNStoredClusters;++i)
      fClusters[i]=t.fClusters[i];
  }
  if (t.fOuter)
    fOuter=new AliExternalTrackParam(*t.fOuter);
  if (t.fInner)
    fInner=new AliExternalTrackParam(*t.fInner);
  if (t.fPrimary)
    fPrimary=new AliExternalTrackParam(*t.fPrimary);
}

AliTPCTracklet& AliTPCTracklet::operator=(const AliTPCTracklet &t) {
  ////
  // The assignment constructor. You can assign tracklets!
  ////
  if (this!=&t) {
    fNClusters=t.fNClusters;
    delete fClusters;
    if (t.fClusters) {
      fClusters=new AliTPCclusterMI[t.fNStoredClusters];
      for (int i=0;i<t.fNStoredClusters;++i)
	fClusters[i]=t.fClusters[i];
    }
    else
      fClusters=0;
    fSector=t.fSector;
    if (t.fOuter) {
      if (fOuter)
	*fOuter=*t.fOuter;
      else
	fOuter=new AliExternalTrackParam(*t.fOuter);
    }
    else {
      delete fOuter;
      fOuter=0;
    }

    if (t.fInner) {
      if (fInner)
	*fInner=*t.fInner;
      else
	fInner=new AliExternalTrackParam(*t.fInner);
    }
    else {
      delete fInner;
      fInner=0;
    }

    if (t.fPrimary) {
      if (fPrimary)
	*fPrimary=*t.fPrimary;
      else
	fPrimary=new AliExternalTrackParam(*t.fPrimary);
    }
    else {
      delete fPrimary;
      fPrimary=0;
    }
  }
  return *this;
}

AliTPCTracklet::~AliTPCTracklet() {
  //
  // The destructor. Yes, you can even destruct tracklets.
  //
  delete fClusters;
  delete fOuter;
  delete fInner;
  delete fPrimary;
}





void AliTPCTracklet::FitKalman(const AliTPCseed *seed,Int_t sector) {
  //
  // Fit using Kalman filter
  //
  AliTPCseed *track=new AliTPCseed(*seed);
  if (!track->Rotate(TMath::DegToRad()*(sector%18*20.+10.)-track->GetAlpha())) {
    delete track;
    return;
  }
  // fit from inner to outer row
  Double_t covar[15];
  for (Int_t i=0;i<15;i++) covar[i]=0;
  covar[0]=1.*1.;
  covar[2]=1.*1.;
  covar[5]=1.*1./(64.*64.);
  covar[9]=1.*1./(64.*64.);
  covar[14]=0;  // keep pt
  Float_t xmin=1000, xmax=-10000;
  Int_t imin=158, imax=0;
  for (Int_t i=0;i<160;i++) {
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (!c) continue;
    if (c->GetDetector()!=sector)  continue;
    if (c->GetX()<xmin) xmin=c->GetX();
    if (c->GetX()>xmax) xmax=c->GetX();
    if (i<imin) imin=i;
    if (i>imax) imax=i;
  }
  if(imax-imin<10) {
    delete track;
    return;
  }

  for (Float_t x=track->GetX(); x<xmin; x++) track->PropagateTo(x);
  track->AddCovariance(covar);
  //
  AliExternalTrackParam paramIn;
  AliExternalTrackParam paramOut;
  Bool_t isOK=kTRUE;
  //
  //
  //
  for (Int_t i=imin; i<=imax; i++){
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (!c) continue;
    Double_t r[3]={c->GetX(),c->GetY(),c->GetZ()};
    Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation
    AliTPCseed::GetError(c, track,cov[0],cov[2]);
    cov[0]*=cov[0];
    cov[2]*=cov[2];
    if (!track->PropagateTo(r[0])) {
      isOK=kFALSE;
      break;
    }
    if (RejectCluster(c,track)) continue;
    if ( !((static_cast<AliExternalTrackParam*>(track)->Update(&r[1],cov)))) isOK=kFALSE;
  }
  if (!isOK) { delete track; return;}
  track->AddCovariance(covar);
  //
  //
  //
  for (Int_t i=imax; i>=imin; i--){
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (!c) continue;
    Double_t r[3]={c->GetX(),c->GetY(),c->GetZ()};
    Double_t cov[3]={0.01,0.,0.01}; 
    AliTPCseed::GetError(c, track,cov[0],cov[2]);
    cov[0]*=cov[0];
    cov[2]*=cov[2];
    if (!track->PropagateTo(r[0])) {
      isOK=kFALSE;
      break;
    }
    if (RejectCluster(c,track)) continue;
    if ( !((static_cast<AliExternalTrackParam*>(track)->Update(&r[1],cov)))) isOK=kFALSE;
  }
  if (!isOK) { delete track; return;}
  paramIn = *track;
  track->AddCovariance(covar);
  //
  //
  for (Int_t i=imin; i<=imax; i++){
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (!c) continue;
    Double_t r[3]={c->GetX(),c->GetY(),c->GetZ()};
    Double_t cov[3]={0.01,0.,0.01}; 
    AliTPCseed::GetError(c, track,cov[0],cov[2]);
    cov[0]*=cov[0];
    cov[2]*=cov[2];
    if (!track->PropagateTo(r[0])) {
      isOK=kFALSE;
      break;
    }
    if (RejectCluster(c,track)) continue;
    if ( !((static_cast<AliExternalTrackParam*>(track)->Update(&r[1],cov)))) isOK=kFALSE;
  }
  if (!isOK) { delete track; return;}
  paramOut=*track;
  //
  //
  //
  fOuter=new AliExternalTrackParam(paramOut);
  fInner=new AliExternalTrackParam(paramIn);
  //
  delete track;
}




void AliTPCTracklet::FitLinear(const AliTPCseed *track,Int_t sector,
			       TrackType type) {
  TLinearFitter fy(1);
  TLinearFitter fz(1);
  fy.StoreData(kFALSE);
  fz.StoreData(kFALSE);
  switch (type) {
  case kLinear:
    fy.SetFormula("1 ++ x");
    fz.SetFormula("1 ++ x");
    break;
  case kQuadratic:
    fy.SetFormula("1 ++ x ++ x*x");
    fz.SetFormula("1 ++ x");
    break;
  case kKalman:
  case kRiemann:
    break;
  }
  Double_t xmax=-1.;
  Double_t xmin=1000.;
  for (Int_t i=0;i<160;++i) {
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (c && RejectCluster(c)) continue;
    if (c&&c->GetDetector()==sector) {
      Double_t x=c->GetX();
      fy.AddPoint(&x,c->GetY());
      fz.AddPoint(&x,c->GetZ());
      xmax=TMath::Max(xmax,x);
      xmin=TMath::Min(xmin,x);
    }
  }
  fy.Eval();
  fz.Eval();
  Double_t a[3]={fy.GetParameter(0),
		 fy.GetParameter(1),
		 type==kQuadratic?fy.GetParameter(2):0.};
  Double_t ca[6]={fy.GetCovarianceMatrixElement(0,0),
		  fy.GetCovarianceMatrixElement(1,0),
		  fy.GetCovarianceMatrixElement(1,1),
		  type==kQuadratic?fy.GetCovarianceMatrixElement(2,0):0.,
		  type==kQuadratic?fy.GetCovarianceMatrixElement(2,1):0.,
		  type==kQuadratic?fy.GetCovarianceMatrixElement(2,2):0.};
  for (int i=0;i<6;++i) ca[i]*=fy.GetChisquare()/fNClusters;
  Double_t b[2]={fz.GetParameter(0),
		 fz.GetParameter(1)};
  Double_t cb[3]={fz.GetCovarianceMatrixElement(0,0),
		  fz.GetCovarianceMatrixElement(1,0),
		  fz.GetCovarianceMatrixElement(1,1)};
  for (int i=0;i<3;++i) cb[i]*=fz.GetChisquare()/fNClusters;
  Double_t p[5];
  Double_t c[15];
  Double_t alpha=track->GetAlpha();
  Quadratic2Helix(a,ca,b,cb,0.,p,c);
  fPrimary=new AliExternalTrackParam(0.,alpha,p,c);
  Quadratic2Helix(a,ca,b,cb,xmin,p,c);
  fInner=new AliExternalTrackParam(xmin,alpha,p,c);
  Quadratic2Helix(a,ca,b,cb,xmax,p,c);
  fOuter=new AliExternalTrackParam(xmax,alpha,p,c);
}
  
void AliTPCTracklet::Quadratic2Helix(Double_t *a,Double_t *ca,
				     Double_t *b,Double_t *cb,
				     Double_t x0,
				     Double_t *p,Double_t *c) {
  // y(x)=a[0]+a[1]*x+a[2]*x^2
  // z(x)=b[0]+b[1]*x
  // parametrises the corosponding helix at x0

  // get the polynoms at x0
  Double_t a0=x0*x0*a[2] + x0*a[1] + a[0];
  Double_t a1=2.*x0*a[2] +     a[1];
  Double_t a2=      a[2];
  Double_t ca00=ca[0]+x0*(2.*ca[1]+x0*(ca[2]+2.*ca[3]+x0*(2.*ca[4]+x0*ca[5])));
  Double_t ca10=ca[1]+x0*(ca[2]+2.*ca[3]+x0*(3.*ca[4]+x0*2.*ca[5]));
  Double_t ca11=ca[2]+x0*4.*(ca[4]+x0*ca[5]);
  Double_t ca20=ca[3]+x0*(ca[4]+x0*ca[5]);
  Double_t ca21=ca[3]+x0*2.*ca[5];
  Double_t ca22=ca[5];

  Double_t b0=x0*b[1] + b[0];
  Double_t b1=   b[1];
  Double_t cb00=cb[0]+x0*(2.*cb[1]+x0*cb[2]);
  Double_t cb10=cb[1]+x0*cb[2];
  Double_t cb11=cb[2];

  // transform to helix parameters
  Double_t f   =1.+a1*a1;
  Double_t f2  =f*f;
  Double_t fi  =1./f; 
  Double_t fi12=TMath::Sqrt(fi);
  Double_t fi32=fi*fi12;
  Double_t fi2 =fi*fi;
  Double_t fi52=fi2*fi12;
  Double_t fi3 =fi2*fi;
  Double_t fi5 =fi2*fi3;
  
  Double_t xyz[3]={0.}; // TODO...
  Double_t fc=1./(GetBz(xyz)*kB2C);

  p[0]=a0;            // y0
  p[1]=b0;            // z0
  p[2]=a1*fi12;       // snp
  p[3]=b1;            // tgl
  p[4]=2.*a2*fi32*fc; // 1/pt

  c[0] =ca00;      //  y0-y0
  c[1] =0.;        //  z0-y0
  c[2] =cb00;      //  z0-z0
  c[3] =ca10*fi32; // snp-y0
  c[4] =0.;        // snp-z0
  c[5] =ca11*fi3;  // snp-snp
  c[6] =0.;        // tgl-y0
  c[7] =cb10;      // tgl-z0
  c[8] =0.;        // tgl-snp
  c[9] =cb11;      // tgl-tgl
  c[10]=2.*(-3.*a1*a2*ca10+f*ca20)*fi3*fc;  // 1/pt-y0
  c[11]=0.;                                 // 1/pt-z0
  c[12]=2.*(-3.*a1*a2*ca11+f*ca21)*fi52*fc; // 1/pt-snp
  c[13]=0.;                                 // 1/pt-tgl
  c[14]=(-12.*a1*a2*(-3.*a1*a2*ca11+2.*f*ca21)+4.*f2*ca22)*fi5
    *fc*fc;        // 1/pt-1/pt
}


void AliTPCTracklet::FitRiemann(const AliTPCseed *track,Int_t sector) {
  TLinearFitter fy(2);
  fy.StoreData(kFALSE);
  fy.SetFormula("hyp2");
  Double_t xmax=-1.;
  Double_t xmin=1000.;
  for (Int_t i=0;i<160;++i) {
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (c && RejectCluster(c)) continue;
    if (c&&c->GetDetector()==sector) {
      Double_t x=c->GetX();
      Double_t y=c->GetY();
      Double_t xy[2]={x,y};
      Double_t r=x*x+y*y;
      Double_t errx=1.,erry=1.;//TODO!
      Double_t err=TMath::Sqrt(4.*x*x*errx+4.*y*y*erry);
      err=1.;
      fy.AddPoint(xy,r,err);
      xmax=TMath::Max(xmax,x);
      xmin=TMath::Min(xmin,x);
    }
  }
  fy.Eval();
  Double_t a[3]={fy.GetParameter(0),
		 fy.GetParameter(1),
		 fy.GetParameter(2)};
  Double_t ca[6]={fy.GetCovarianceMatrixElement(0,0),
		  fy.GetCovarianceMatrixElement(1,0),
		  fy.GetCovarianceMatrixElement(1,1),
		  fy.GetCovarianceMatrixElement(2,0),
		  fy.GetCovarianceMatrixElement(2,1),
		  fy.GetCovarianceMatrixElement(2,2)};

  TLinearFitter fz(1);
  fz.StoreData(kFALSE);
  fz.SetFormula("hyp1");
  Double_t R=.5*TMath::Sqrt(4.*a[0]+a[1]*a[1]+a[2]*a[2]);
  Double_t oldx=0.;
  Double_t oldy=R;
  Double_t phi=0.;
  for (Int_t i=0;i<160;++i) {
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (c && RejectCluster(c)) continue;
    if (c&&c->GetDetector()==sector) {
      Double_t x=c->GetX();
      Double_t y=c->GetY();
      Double_t dx=x-oldx;
      Double_t dy=y-oldy;
      phi+=2.*TMath::Abs(TMath::ATan2(.5*TMath::Sqrt(dx*dx+dy*dy),R));
      Double_t err=1.;
      fz.AddPoint(&phi,c->GetZ(),err);
      oldx=x;
      oldy=y;
    }
  }
  fz.Eval();
  Double_t b[2]={fz.GetParameter(0),
		 fz.GetParameter(1)};
  Double_t cb[3]={fz.GetCovarianceMatrixElement(0,0),
		  fz.GetCovarianceMatrixElement(1,0),
		  fz.GetCovarianceMatrixElement(1,1)};

  Double_t p[5];
  Double_t c[15];
  Double_t alpha=track->GetAlpha();
  if (Riemann2Helix(a,ca,b,cb,0.,p,c))
    fPrimary=new AliExternalTrackParam(0.,alpha,p,c);
  if (Riemann2Helix(a,ca,b,cb,xmin,p,c))
    fInner=new AliExternalTrackParam(xmin,alpha,p,c);
  if (Riemann2Helix(a,ca,b,cb,xmax,p,c))
    fOuter=new AliExternalTrackParam(xmax,alpha,p,c);
}

Bool_t AliTPCTracklet::Riemann2Helix(Double_t *a,Double_t */*ca*/,
				     Double_t *b,Double_t */*cb*/,
				     Double_t x0,
				     Double_t *p,Double_t *c) {
  //TODO: signs!

  Double_t xr0=.5*a[1];
  Double_t yr0=.5*a[2];
  Double_t R=.5*TMath::Sqrt(4.*a[0]+a[1]*a[1]+a[2]*a[2]);
  Double_t dx=x0-xr0;
  if (dx*dx>=R*R) return kFALSE;
  Double_t dy=TMath::Sqrt((R-dx)*(R+dx)); //sign!!
  if (TMath::Abs(yr0+dy)>TMath::Abs(yr0-dy))
    dy=-dy;
  Double_t y0=yr0+dy; 
  Double_t tgp=-dx/dy; //TODO: dy!=0
  Double_t z0=b[0]+TMath::ATan(tgp)*b[1];
  Double_t xyz[3]={x0,y0,z0};
  Double_t fc=1./(GetBz(xyz)*kB2C);
  fc=1;
  p[0]=y0;  // y0
  p[1]=z0; // z0
  p[2]=tgp/TMath::Sqrt(1.+tgp*tgp); // snp
  p[3]=b[1];       // tgl
  p[4]=1./R*fc;    // 1/pt

  c[0] =0.;      //  y0-y0
  c[1] =0.;        //  z0-y0
  c[2] =0.;      //  z0-z0
  c[3] =0.; // snp-y0
  c[4] =0.;        // snp-z0
  c[5] =0.;  // snp-snp
  c[6] =0.;        // tgl-y0
  c[7] =0.;      // tgl-z0
  c[8] =0.;        // tgl-snp
  c[9] =0.;      // tgl-tgl
  c[10]=0.;  // 1/pt-y0
  c[11]=0.;                                 // 1/pt-z0
  c[12]=0.; // 1/pt-snp
  c[13]=0.;                                 // 1/pt-tgl
  c[14]=0.;        // 1/pt-1/pt

  return kTRUE;
}

TObjArray AliTPCTracklet::CreateTracklets(const AliTPCseed *track,
					  TrackType type,
					  Bool_t storeClusters,
					  Int_t minClusters,
					  Int_t maxTracklets) {
// The tracklet factory: It creates several tracklets out of a track. They
// are created for sectors that fullfill the constraint of having enough
// clusters inside. Futhermore you can specify the maximum amount of
// tracklets that are to be created.
// The tracklets appear in a sorted fashion, beginning with those having the
// most clusters.

  Int_t sectors[72]={0};
  for (Int_t i=0;i<160;++i) {
    AliTPCclusterMI *c=track->GetClusterPointer(i);
    if (c && RejectCluster(c)) continue;
    if (c)
      ++sectors[c->GetDetector()];
  }
  Int_t indices[72];
  TMath::Sort(72,sectors,indices);
  TObjArray tracklets;
  if (maxTracklets>72) maxTracklets=72; // just to protect against "users".
  for (Int_t i=0;i<maxTracklets&&sectors[indices[i]]>=minClusters;++i) {
    tracklets.Add(new AliTPCTracklet(track,indices[i],type,storeClusters));
  }
  return tracklets;
}

TObjArray AliTPCTracklet::CreateTracklets(const TObjArray &/*clusters*/,
					  TrackType /*type*/,
					  Bool_t /*storeClusters*/,
					  Int_t /*minClusters*/,
					  Int_t /*maxTracklets*/) {
  // TODO!

  TObjArray tracklets;
  return tracklets;
}

Bool_t AliTPCTracklet::PropagateToMeanX(const AliTPCTracklet &t1,
					const AliTPCTracklet &t2,
					AliExternalTrackParam *&t1m,
					AliExternalTrackParam *&t2m) {
  // This function propagates two Tracklets to a common x-coordinate. This
  // x is dermined as the one that is in the middle of the two tracklets (they
  // are assumed to live on two distinct x-intervalls).
  // The inner parametrisation of the outer Tracklet and the outer 
  // parametrisation of the inner Tracklet are used and propagated to this
  // common x. This result is saved not inside the Tracklets but two new
  // ExternalTrackParams are created (that means you might want to delete
  // them).
  // In the case that the alpha angles of the Tracklets differ both angles
  // are tried out for this propagation.
  // In case of any failure kFALSE is returned, no AliExternalTrackParam
  // is created und the pointers are set to 0.

  if (t1.GetInner() && t1.GetOuter() && 
      t2.GetInner() && t2.GetOuter()) {
    if (t1.GetOuter()->GetX()<t2.GetInner()->GetX()) {
      t1m=new AliExternalTrackParam(*t1.GetOuter());
      t2m=new AliExternalTrackParam(*t2.GetInner());
    }
    else {
      t1m=new AliExternalTrackParam(*t1.GetInner());
      t2m=new AliExternalTrackParam(*t2.GetOuter());
    }
    Double_t mx=.5*(t1m->GetX()+t2m->GetX());
    //Double_t b1,b2;
    Double_t xyz[3];
    t1m->GetXYZ(xyz);
    //b1=GetBz(xyz);
    Double_t b1[3]; AliTracker::GetBxByBz(xyz,b1);
    t2m->GetXYZ(xyz);
    //b2=GetBz(xyz);
    Double_t b2[3]; AliTracker::GetBxByBz(xyz,b2);
    if (t1m->Rotate(t2m->GetAlpha()) 
	//&& t1m->PropagateTo(mx,b1) 
	//&& t2m->PropagateTo(mx,b2));
	&& t1m->PropagateToBxByBz(mx,b1) 
	&& t2m->PropagateToBxByBz(mx,b2));
    else
      if (t2m->Rotate(t1m->GetAlpha())
	  //&& t1m->PropagateTo(mx,b1) 
	  //&& t2m->PropagateTo(mx,b2));
	  && t1m->PropagateToBxByBz(mx,b1) 
	  && t2m->PropagateToBxByBz(mx,b2));
      else {
	delete t1m;
	delete t2m;
	t1m=t2m=0;
      }
  }
  else {
    t1m=t2m=0;
  }
  return t1m&&t2m;
}

double AliTPCTracklet::GetBz(Double_t *xyz) 
{
  return AliTracker::GetBz(xyz);
}

void AliTPCTracklet::RandomND(Int_t ndim,const Double_t *p,const Double_t *c,
			      Double_t *x) {
  // This function generates a n-dimensional random variable x with mean
  // p and covariance c.
  // That is done using the cholesky decomposition of the covariance matrix,
  // Begin_Latex C=U^{t} U End_Latex, with Begin_Latex U End_Latex being an
  // upper triangular matrix. Given a vector v of iid gausian random variables
  // with variance 1 one obtains the asked result as: Begin_Latex x=U^t v 
  // End_Latex.
  // c is expected to be in a lower triangular format:
  // c[0]
  // c[1] c[2]
  // c[3] c[4] c[5]
  // etc.
  static TRandom3 random;
  Double_t *c2= new Double_t[ndim*ndim];
  Int_t k=0;
  for (Int_t i=0;i<ndim;++i)
    for (Int_t j=0;j<=i;++j)
      c2[i*ndim+j]=c2[j*ndim+i]=c[k++];
  TMatrixDSym cm(ndim,c2);
  delete[] c2;
  TDecompChol chol(cm);
  chol.Decompose();
  const TVectorD pv(ndim);
  const_cast<TVectorD*>(&pv)->Use(ndim,const_cast<Double_t*>(p));
  TVectorD xv(ndim);
  xv.Use(ndim,x);
  for (Int_t i=0;i<ndim;++i)
    xv[i]=random.Gaus();
  TMatrixD L=chol.GetU();
  L.T();
  xv=L*xv+pv;
}

TEllipse AliTPCTracklet::ErrorEllipse(Double_t x,Double_t y,
				      Double_t sx,Double_t sy,Double_t sxy) {
  /* Begin_Latex
     r_{1,2}=1/2 (a+c#pm#sqrt{(a-c)^{2}+(2b)^{2}})
  End_Latex */
  Double_t det1=1./(sx*sy-sxy*sxy);
  Double_t a=sy*det1;
  Double_t b=-sxy*det1;
  Double_t c=sx*det1;
  Double_t d=c-a;
  Double_t s=TMath::Sqrt(d*d+4.*b*b);
  Double_t r1=TMath::Sqrt(.5*(a+c-s));
  Double_t r2=TMath::Sqrt(.5*(a+c+s));
  Double_t alpha=.5*TMath::ATan2(2.*b,d);
  return TEllipse(x,y,r1,r2,0.,360.,alpha*TMath::RadToDeg());
}

void AliTPCTracklet::Test(const char* filename) {
  /*
    aliroot
    AliTPCTracklet::Test("");
    TFile f("AliTPCTrackletDebug.root");
    TTree *t=f.Get("AliTPCTrackletDebug");
    t->Draw("p0:p4");
    TEllipse e=AliTPCTracklet::ErrorEllipse(0.,0.,4.,1.,1.8);
    e.Draw();
 */
  TTreeSRedirector ds(filename);
  Double_t p[5]={0.};
  Double_t c[15]={4.,
		  0.,4.,
		  0.,0.,9.,
		  0.,0.,0.,16.,
		  1.8,0.,0.,0.,1.};
  for (Int_t i=0;i<10000;++i) {
    Double_t x[5];
    RandomND(5,p,c,x);
    ds<<"AliTPCTrackletDebug"
      <<"p0="<<x[0]
      <<"p1="<<x[1]
      <<"p2="<<x[2]
      <<"p3="<<x[3]
      <<"p4="<<x[4]
      <<"\n";
  }

  /*
  Double_t b;
  Double_t x=0.;
  Double_t alpha=0.;
  Double_t param[5]={0.};
  Double_t covar[15]={1.,
		      0.,1.,
		      0.,0.,1.,
		      0.,0.,0.,1.,
		      0.,0.,0.,0.,1.};
  AliExternalTrackParam track(x,alpha,param,covar);

  

  for (Int_t i=0;i<points.GetNPoints();++i) {
    Double_t x=0.;
    Double_t alpha=0.;
    Double_t param[5]={0.};
    Double_t covar[15]={1.,
			0.,1.,
			0.,0.,1.,
			0.,0.,0.,1.,
			0.,0.,0.,0.,1.};
    AliExternalTrackParam track(x,alpha,param,covar);
    for (x=90.;x<250.;x+=1.) {
      track.PropagateTo(x,b);
      AliTPCclusterMI c();
    }
  }
  */
}


Bool_t AliTPCTracklet::RejectCluster(AliTPCclusterMI* cl, AliExternalTrackParam * param){
  //
  // check the acceptance of cluster
  // Cut on edge effects
  //
  Bool_t isReject = kFALSE;
  Float_t edgeY = cl->GetX()*TMath::Tan(TMath::Pi()/18);
  Float_t dist  = edgeY - TMath::Abs(cl->GetY());
  if (param)  dist  = edgeY - TMath::Abs(param->GetY());
  if (dist<fgEdgeCutY) isReject=kTRUE;
  if (cl->GetType()<0) isReject=kTRUE;
  return isReject;
}
 AliTPCTracklet.cxx:1
 AliTPCTracklet.cxx:2
 AliTPCTracklet.cxx:3
 AliTPCTracklet.cxx:4
 AliTPCTracklet.cxx:5
 AliTPCTracklet.cxx:6
 AliTPCTracklet.cxx:7
 AliTPCTracklet.cxx:8
 AliTPCTracklet.cxx:9
 AliTPCTracklet.cxx:10
 AliTPCTracklet.cxx:11
 AliTPCTracklet.cxx:12
 AliTPCTracklet.cxx:13
 AliTPCTracklet.cxx:14
 AliTPCTracklet.cxx:15
 AliTPCTracklet.cxx:16
 AliTPCTracklet.cxx:17
 AliTPCTracklet.cxx:18
 AliTPCTracklet.cxx:19
 AliTPCTracklet.cxx:20
 AliTPCTracklet.cxx:21
 AliTPCTracklet.cxx:22
 AliTPCTracklet.cxx:23
 AliTPCTracklet.cxx:24
 AliTPCTracklet.cxx:25
 AliTPCTracklet.cxx:26
 AliTPCTracklet.cxx:27
 AliTPCTracklet.cxx:28
 AliTPCTracklet.cxx:29
 AliTPCTracklet.cxx:30
 AliTPCTracklet.cxx:31
 AliTPCTracklet.cxx:32
 AliTPCTracklet.cxx:33
 AliTPCTracklet.cxx:34
 AliTPCTracklet.cxx:35
 AliTPCTracklet.cxx:36
 AliTPCTracklet.cxx:37
 AliTPCTracklet.cxx:38
 AliTPCTracklet.cxx:39
 AliTPCTracklet.cxx:40
 AliTPCTracklet.cxx:41
 AliTPCTracklet.cxx:42
 AliTPCTracklet.cxx:43
 AliTPCTracklet.cxx:44
 AliTPCTracklet.cxx:45
 AliTPCTracklet.cxx:46
 AliTPCTracklet.cxx:47
 AliTPCTracklet.cxx:48
 AliTPCTracklet.cxx:49
 AliTPCTracklet.cxx:50
 AliTPCTracklet.cxx:51
 AliTPCTracklet.cxx:52
 AliTPCTracklet.cxx:53
 AliTPCTracklet.cxx:54
 AliTPCTracklet.cxx:55
 AliTPCTracklet.cxx:56
 AliTPCTracklet.cxx:57
 AliTPCTracklet.cxx:58
 AliTPCTracklet.cxx:59
 AliTPCTracklet.cxx:60
 AliTPCTracklet.cxx:61
 AliTPCTracklet.cxx:62
 AliTPCTracklet.cxx:63
 AliTPCTracklet.cxx:64
 AliTPCTracklet.cxx:65
 AliTPCTracklet.cxx:66
 AliTPCTracklet.cxx:67
 AliTPCTracklet.cxx:68
 AliTPCTracklet.cxx:69
 AliTPCTracklet.cxx:70
 AliTPCTracklet.cxx:71
 AliTPCTracklet.cxx:72
 AliTPCTracklet.cxx:73
 AliTPCTracklet.cxx:74
 AliTPCTracklet.cxx:75
 AliTPCTracklet.cxx:76
 AliTPCTracklet.cxx:77
 AliTPCTracklet.cxx:78
 AliTPCTracklet.cxx:79
 AliTPCTracklet.cxx:80
 AliTPCTracklet.cxx:81
 AliTPCTracklet.cxx:82
 AliTPCTracklet.cxx:83
 AliTPCTracklet.cxx:84
 AliTPCTracklet.cxx:85
 AliTPCTracklet.cxx:86
 AliTPCTracklet.cxx:87
 AliTPCTracklet.cxx:88
 AliTPCTracklet.cxx:89
 AliTPCTracklet.cxx:90
 AliTPCTracklet.cxx:91
 AliTPCTracklet.cxx:92
 AliTPCTracklet.cxx:93
 AliTPCTracklet.cxx:94
 AliTPCTracklet.cxx:95
 AliTPCTracklet.cxx:96
 AliTPCTracklet.cxx:97
 AliTPCTracklet.cxx:98
 AliTPCTracklet.cxx:99
 AliTPCTracklet.cxx:100
 AliTPCTracklet.cxx:101
 AliTPCTracklet.cxx:102
 AliTPCTracklet.cxx:103
 AliTPCTracklet.cxx:104
 AliTPCTracklet.cxx:105
 AliTPCTracklet.cxx:106
 AliTPCTracklet.cxx:107
 AliTPCTracklet.cxx:108
 AliTPCTracklet.cxx:109
 AliTPCTracklet.cxx:110
 AliTPCTracklet.cxx:111
 AliTPCTracklet.cxx:112
 AliTPCTracklet.cxx:113
 AliTPCTracklet.cxx:114
 AliTPCTracklet.cxx:115
 AliTPCTracklet.cxx:116
 AliTPCTracklet.cxx:117
 AliTPCTracklet.cxx:118
 AliTPCTracklet.cxx:119
 AliTPCTracklet.cxx:120
 AliTPCTracklet.cxx:121
 AliTPCTracklet.cxx:122
 AliTPCTracklet.cxx:123
 AliTPCTracklet.cxx:124
 AliTPCTracklet.cxx:125
 AliTPCTracklet.cxx:126
 AliTPCTracklet.cxx:127
 AliTPCTracklet.cxx:128
 AliTPCTracklet.cxx:129
 AliTPCTracklet.cxx:130
 AliTPCTracklet.cxx:131
 AliTPCTracklet.cxx:132
 AliTPCTracklet.cxx:133
 AliTPCTracklet.cxx:134
 AliTPCTracklet.cxx:135
 AliTPCTracklet.cxx:136
 AliTPCTracklet.cxx:137
 AliTPCTracklet.cxx:138
 AliTPCTracklet.cxx:139
 AliTPCTracklet.cxx:140
 AliTPCTracklet.cxx:141
 AliTPCTracklet.cxx:142
 AliTPCTracklet.cxx:143
 AliTPCTracklet.cxx:144
 AliTPCTracklet.cxx:145
 AliTPCTracklet.cxx:146
 AliTPCTracklet.cxx:147
 AliTPCTracklet.cxx:148
 AliTPCTracklet.cxx:149
 AliTPCTracklet.cxx:150
 AliTPCTracklet.cxx:151
 AliTPCTracklet.cxx:152
 AliTPCTracklet.cxx:153
 AliTPCTracklet.cxx:154
 AliTPCTracklet.cxx:155
 AliTPCTracklet.cxx:156
 AliTPCTracklet.cxx:157
 AliTPCTracklet.cxx:158
 AliTPCTracklet.cxx:159
 AliTPCTracklet.cxx:160
 AliTPCTracklet.cxx:161
 AliTPCTracklet.cxx:162
 AliTPCTracklet.cxx:163
 AliTPCTracklet.cxx:164
 AliTPCTracklet.cxx:165
 AliTPCTracklet.cxx:166
 AliTPCTracklet.cxx:167
 AliTPCTracklet.cxx:168
 AliTPCTracklet.cxx:169
 AliTPCTracklet.cxx:170
 AliTPCTracklet.cxx:171
 AliTPCTracklet.cxx:172
 AliTPCTracklet.cxx:173
 AliTPCTracklet.cxx:174
 AliTPCTracklet.cxx:175
 AliTPCTracklet.cxx:176
 AliTPCTracklet.cxx:177
 AliTPCTracklet.cxx:178
 AliTPCTracklet.cxx:179
 AliTPCTracklet.cxx:180
 AliTPCTracklet.cxx:181
 AliTPCTracklet.cxx:182
 AliTPCTracklet.cxx:183
 AliTPCTracklet.cxx:184
 AliTPCTracklet.cxx:185
 AliTPCTracklet.cxx:186
 AliTPCTracklet.cxx:187
 AliTPCTracklet.cxx:188
 AliTPCTracklet.cxx:189
 AliTPCTracklet.cxx:190
 AliTPCTracklet.cxx:191
 AliTPCTracklet.cxx:192
 AliTPCTracklet.cxx:193
 AliTPCTracklet.cxx:194
 AliTPCTracklet.cxx:195
 AliTPCTracklet.cxx:196
 AliTPCTracklet.cxx:197
 AliTPCTracklet.cxx:198
 AliTPCTracklet.cxx:199
 AliTPCTracklet.cxx:200
 AliTPCTracklet.cxx:201
 AliTPCTracklet.cxx:202
 AliTPCTracklet.cxx:203
 AliTPCTracklet.cxx:204
 AliTPCTracklet.cxx:205
 AliTPCTracklet.cxx:206
 AliTPCTracklet.cxx:207
 AliTPCTracklet.cxx:208
 AliTPCTracklet.cxx:209
 AliTPCTracklet.cxx:210
 AliTPCTracklet.cxx:211
 AliTPCTracklet.cxx:212
 AliTPCTracklet.cxx:213
 AliTPCTracklet.cxx:214
 AliTPCTracklet.cxx:215
 AliTPCTracklet.cxx:216
 AliTPCTracklet.cxx:217
 AliTPCTracklet.cxx:218
 AliTPCTracklet.cxx:219
 AliTPCTracklet.cxx:220
 AliTPCTracklet.cxx:221
 AliTPCTracklet.cxx:222
 AliTPCTracklet.cxx:223
 AliTPCTracklet.cxx:224
 AliTPCTracklet.cxx:225
 AliTPCTracklet.cxx:226
 AliTPCTracklet.cxx:227
 AliTPCTracklet.cxx:228
 AliTPCTracklet.cxx:229
 AliTPCTracklet.cxx:230
 AliTPCTracklet.cxx:231
 AliTPCTracklet.cxx:232
 AliTPCTracklet.cxx:233
 AliTPCTracklet.cxx:234
 AliTPCTracklet.cxx:235
 AliTPCTracklet.cxx:236
 AliTPCTracklet.cxx:237
 AliTPCTracklet.cxx:238
 AliTPCTracklet.cxx:239
 AliTPCTracklet.cxx:240
 AliTPCTracklet.cxx:241
 AliTPCTracklet.cxx:242
 AliTPCTracklet.cxx:243
 AliTPCTracklet.cxx:244
 AliTPCTracklet.cxx:245
 AliTPCTracklet.cxx:246
 AliTPCTracklet.cxx:247
 AliTPCTracklet.cxx:248
 AliTPCTracklet.cxx:249
 AliTPCTracklet.cxx:250
 AliTPCTracklet.cxx:251
 AliTPCTracklet.cxx:252
 AliTPCTracklet.cxx:253
 AliTPCTracklet.cxx:254
 AliTPCTracklet.cxx:255
 AliTPCTracklet.cxx:256
 AliTPCTracklet.cxx:257
 AliTPCTracklet.cxx:258
 AliTPCTracklet.cxx:259
 AliTPCTracklet.cxx:260
 AliTPCTracklet.cxx:261
 AliTPCTracklet.cxx:262
 AliTPCTracklet.cxx:263
 AliTPCTracklet.cxx:264
 AliTPCTracklet.cxx:265
 AliTPCTracklet.cxx:266
 AliTPCTracklet.cxx:267
 AliTPCTracklet.cxx:268
 AliTPCTracklet.cxx:269
 AliTPCTracklet.cxx:270
 AliTPCTracklet.cxx:271
 AliTPCTracklet.cxx:272
 AliTPCTracklet.cxx:273
 AliTPCTracklet.cxx:274
 AliTPCTracklet.cxx:275
 AliTPCTracklet.cxx:276
 AliTPCTracklet.cxx:277
 AliTPCTracklet.cxx:278
 AliTPCTracklet.cxx:279
 AliTPCTracklet.cxx:280
 AliTPCTracklet.cxx:281
 AliTPCTracklet.cxx:282
 AliTPCTracklet.cxx:283
 AliTPCTracklet.cxx:284
 AliTPCTracklet.cxx:285
 AliTPCTracklet.cxx:286
 AliTPCTracklet.cxx:287
 AliTPCTracklet.cxx:288
 AliTPCTracklet.cxx:289
 AliTPCTracklet.cxx:290
 AliTPCTracklet.cxx:291
 AliTPCTracklet.cxx:292
 AliTPCTracklet.cxx:293
 AliTPCTracklet.cxx:294
 AliTPCTracklet.cxx:295
 AliTPCTracklet.cxx:296
 AliTPCTracklet.cxx:297
 AliTPCTracklet.cxx:298
 AliTPCTracklet.cxx:299
 AliTPCTracklet.cxx:300
 AliTPCTracklet.cxx:301
 AliTPCTracklet.cxx:302
 AliTPCTracklet.cxx:303
 AliTPCTracklet.cxx:304
 AliTPCTracklet.cxx:305
 AliTPCTracklet.cxx:306
 AliTPCTracklet.cxx:307
 AliTPCTracklet.cxx:308
 AliTPCTracklet.cxx:309
 AliTPCTracklet.cxx:310
 AliTPCTracklet.cxx:311
 AliTPCTracklet.cxx:312
 AliTPCTracklet.cxx:313
 AliTPCTracklet.cxx:314
 AliTPCTracklet.cxx:315
 AliTPCTracklet.cxx:316
 AliTPCTracklet.cxx:317
 AliTPCTracklet.cxx:318
 AliTPCTracklet.cxx:319
 AliTPCTracklet.cxx:320
 AliTPCTracklet.cxx:321
 AliTPCTracklet.cxx:322
 AliTPCTracklet.cxx:323
 AliTPCTracklet.cxx:324
 AliTPCTracklet.cxx:325
 AliTPCTracklet.cxx:326
 AliTPCTracklet.cxx:327
 AliTPCTracklet.cxx:328
 AliTPCTracklet.cxx:329
 AliTPCTracklet.cxx:330
 AliTPCTracklet.cxx:331
 AliTPCTracklet.cxx:332
 AliTPCTracklet.cxx:333
 AliTPCTracklet.cxx:334
 AliTPCTracklet.cxx:335
 AliTPCTracklet.cxx:336
 AliTPCTracklet.cxx:337
 AliTPCTracklet.cxx:338
 AliTPCTracklet.cxx:339
 AliTPCTracklet.cxx:340
 AliTPCTracklet.cxx:341
 AliTPCTracklet.cxx:342
 AliTPCTracklet.cxx:343
 AliTPCTracklet.cxx:344
 AliTPCTracklet.cxx:345
 AliTPCTracklet.cxx:346
 AliTPCTracklet.cxx:347
 AliTPCTracklet.cxx:348
 AliTPCTracklet.cxx:349
 AliTPCTracklet.cxx:350
 AliTPCTracklet.cxx:351
 AliTPCTracklet.cxx:352
 AliTPCTracklet.cxx:353
 AliTPCTracklet.cxx:354
 AliTPCTracklet.cxx:355
 AliTPCTracklet.cxx:356
 AliTPCTracklet.cxx:357
 AliTPCTracklet.cxx:358
 AliTPCTracklet.cxx:359
 AliTPCTracklet.cxx:360
 AliTPCTracklet.cxx:361
 AliTPCTracklet.cxx:362
 AliTPCTracklet.cxx:363
 AliTPCTracklet.cxx:364
 AliTPCTracklet.cxx:365
 AliTPCTracklet.cxx:366
 AliTPCTracklet.cxx:367
 AliTPCTracklet.cxx:368
 AliTPCTracklet.cxx:369
 AliTPCTracklet.cxx:370
 AliTPCTracklet.cxx:371
 AliTPCTracklet.cxx:372
 AliTPCTracklet.cxx:373
 AliTPCTracklet.cxx:374
 AliTPCTracklet.cxx:375
 AliTPCTracklet.cxx:376
 AliTPCTracklet.cxx:377
 AliTPCTracklet.cxx:378
 AliTPCTracklet.cxx:379
 AliTPCTracklet.cxx:380
 AliTPCTracklet.cxx:381
 AliTPCTracklet.cxx:382
 AliTPCTracklet.cxx:383
 AliTPCTracklet.cxx:384
 AliTPCTracklet.cxx:385
 AliTPCTracklet.cxx:386
 AliTPCTracklet.cxx:387
 AliTPCTracklet.cxx:388
 AliTPCTracklet.cxx:389
 AliTPCTracklet.cxx:390
 AliTPCTracklet.cxx:391
 AliTPCTracklet.cxx:392
 AliTPCTracklet.cxx:393
 AliTPCTracklet.cxx:394
 AliTPCTracklet.cxx:395
 AliTPCTracklet.cxx:396
 AliTPCTracklet.cxx:397
 AliTPCTracklet.cxx:398
 AliTPCTracklet.cxx:399
 AliTPCTracklet.cxx:400
 AliTPCTracklet.cxx:401
 AliTPCTracklet.cxx:402
 AliTPCTracklet.cxx:403
 AliTPCTracklet.cxx:404
 AliTPCTracklet.cxx:405
 AliTPCTracklet.cxx:406
 AliTPCTracklet.cxx:407
 AliTPCTracklet.cxx:408
 AliTPCTracklet.cxx:409
 AliTPCTracklet.cxx:410
 AliTPCTracklet.cxx:411
 AliTPCTracklet.cxx:412
 AliTPCTracklet.cxx:413
 AliTPCTracklet.cxx:414
 AliTPCTracklet.cxx:415
 AliTPCTracklet.cxx:416
 AliTPCTracklet.cxx:417
 AliTPCTracklet.cxx:418
 AliTPCTracklet.cxx:419
 AliTPCTracklet.cxx:420
 AliTPCTracklet.cxx:421
 AliTPCTracklet.cxx:422
 AliTPCTracklet.cxx:423
 AliTPCTracklet.cxx:424
 AliTPCTracklet.cxx:425
 AliTPCTracklet.cxx:426
 AliTPCTracklet.cxx:427
 AliTPCTracklet.cxx:428
 AliTPCTracklet.cxx:429
 AliTPCTracklet.cxx:430
 AliTPCTracklet.cxx:431
 AliTPCTracklet.cxx:432
 AliTPCTracklet.cxx:433
 AliTPCTracklet.cxx:434
 AliTPCTracklet.cxx:435
 AliTPCTracklet.cxx:436
 AliTPCTracklet.cxx:437
 AliTPCTracklet.cxx:438
 AliTPCTracklet.cxx:439
 AliTPCTracklet.cxx:440
 AliTPCTracklet.cxx:441
 AliTPCTracklet.cxx:442
 AliTPCTracklet.cxx:443
 AliTPCTracklet.cxx:444
 AliTPCTracklet.cxx:445
 AliTPCTracklet.cxx:446
 AliTPCTracklet.cxx:447
 AliTPCTracklet.cxx:448
 AliTPCTracklet.cxx:449
 AliTPCTracklet.cxx:450
 AliTPCTracklet.cxx:451
 AliTPCTracklet.cxx:452
 AliTPCTracklet.cxx:453
 AliTPCTracklet.cxx:454
 AliTPCTracklet.cxx:455
 AliTPCTracklet.cxx:456
 AliTPCTracklet.cxx:457
 AliTPCTracklet.cxx:458
 AliTPCTracklet.cxx:459
 AliTPCTracklet.cxx:460
 AliTPCTracklet.cxx:461
 AliTPCTracklet.cxx:462
 AliTPCTracklet.cxx:463
 AliTPCTracklet.cxx:464
 AliTPCTracklet.cxx:465
 AliTPCTracklet.cxx:466
 AliTPCTracklet.cxx:467
 AliTPCTracklet.cxx:468
 AliTPCTracklet.cxx:469
 AliTPCTracklet.cxx:470
 AliTPCTracklet.cxx:471
 AliTPCTracklet.cxx:472
 AliTPCTracklet.cxx:473
 AliTPCTracklet.cxx:474
 AliTPCTracklet.cxx:475
 AliTPCTracklet.cxx:476
 AliTPCTracklet.cxx:477
 AliTPCTracklet.cxx:478
 AliTPCTracklet.cxx:479
 AliTPCTracklet.cxx:480
 AliTPCTracklet.cxx:481
 AliTPCTracklet.cxx:482
 AliTPCTracklet.cxx:483
 AliTPCTracklet.cxx:484
 AliTPCTracklet.cxx:485
 AliTPCTracklet.cxx:486
 AliTPCTracklet.cxx:487
 AliTPCTracklet.cxx:488
 AliTPCTracklet.cxx:489
 AliTPCTracklet.cxx:490
 AliTPCTracklet.cxx:491
 AliTPCTracklet.cxx:492
 AliTPCTracklet.cxx:493
 AliTPCTracklet.cxx:494
 AliTPCTracklet.cxx:495
 AliTPCTracklet.cxx:496
 AliTPCTracklet.cxx:497
 AliTPCTracklet.cxx:498
 AliTPCTracklet.cxx:499
 AliTPCTracklet.cxx:500
 AliTPCTracklet.cxx:501
 AliTPCTracklet.cxx:502
 AliTPCTracklet.cxx:503
 AliTPCTracklet.cxx:504
 AliTPCTracklet.cxx:505
 AliTPCTracklet.cxx:506
 AliTPCTracklet.cxx:507
 AliTPCTracklet.cxx:508
 AliTPCTracklet.cxx:509
 AliTPCTracklet.cxx:510
 AliTPCTracklet.cxx:511
 AliTPCTracklet.cxx:512
 AliTPCTracklet.cxx:513
 AliTPCTracklet.cxx:514
 AliTPCTracklet.cxx:515
 AliTPCTracklet.cxx:516
 AliTPCTracklet.cxx:517
 AliTPCTracklet.cxx:518
 AliTPCTracklet.cxx:519
 AliTPCTracklet.cxx:520
 AliTPCTracklet.cxx:521
 AliTPCTracklet.cxx:522
 AliTPCTracklet.cxx:523
 AliTPCTracklet.cxx:524
 AliTPCTracklet.cxx:525
 AliTPCTracklet.cxx:526
 AliTPCTracklet.cxx:527
 AliTPCTracklet.cxx:528
 AliTPCTracklet.cxx:529
 AliTPCTracklet.cxx:530
 AliTPCTracklet.cxx:531
 AliTPCTracklet.cxx:532
 AliTPCTracklet.cxx:533
 AliTPCTracklet.cxx:534
 AliTPCTracklet.cxx:535
 AliTPCTracklet.cxx:536
 AliTPCTracklet.cxx:537
 AliTPCTracklet.cxx:538
 AliTPCTracklet.cxx:539
 AliTPCTracklet.cxx:540
 AliTPCTracklet.cxx:541
 AliTPCTracklet.cxx:542
 AliTPCTracklet.cxx:543
 AliTPCTracklet.cxx:544
 AliTPCTracklet.cxx:545
 AliTPCTracklet.cxx:546
 AliTPCTracklet.cxx:547
 AliTPCTracklet.cxx:548
 AliTPCTracklet.cxx:549
 AliTPCTracklet.cxx:550
 AliTPCTracklet.cxx:551
 AliTPCTracklet.cxx:552
 AliTPCTracklet.cxx:553
 AliTPCTracklet.cxx:554
 AliTPCTracklet.cxx:555
 AliTPCTracklet.cxx:556
 AliTPCTracklet.cxx:557
 AliTPCTracklet.cxx:558
 AliTPCTracklet.cxx:559
 AliTPCTracklet.cxx:560
 AliTPCTracklet.cxx:561
 AliTPCTracklet.cxx:562
 AliTPCTracklet.cxx:563
 AliTPCTracklet.cxx:564
 AliTPCTracklet.cxx:565
 AliTPCTracklet.cxx:566
 AliTPCTracklet.cxx:567
 AliTPCTracklet.cxx:568
 AliTPCTracklet.cxx:569
 AliTPCTracklet.cxx:570
 AliTPCTracklet.cxx:571
 AliTPCTracklet.cxx:572
 AliTPCTracklet.cxx:573
 AliTPCTracklet.cxx:574
 AliTPCTracklet.cxx:575
 AliTPCTracklet.cxx:576
 AliTPCTracklet.cxx:577
 AliTPCTracklet.cxx:578
 AliTPCTracklet.cxx:579
 AliTPCTracklet.cxx:580
 AliTPCTracklet.cxx:581
 AliTPCTracklet.cxx:582
 AliTPCTracklet.cxx:583
 AliTPCTracklet.cxx:584
 AliTPCTracklet.cxx:585
 AliTPCTracklet.cxx:586
 AliTPCTracklet.cxx:587
 AliTPCTracklet.cxx:588
 AliTPCTracklet.cxx:589
 AliTPCTracklet.cxx:590
 AliTPCTracklet.cxx:591
 AliTPCTracklet.cxx:592
 AliTPCTracklet.cxx:593
 AliTPCTracklet.cxx:594
 AliTPCTracklet.cxx:595
 AliTPCTracklet.cxx:596
 AliTPCTracklet.cxx:597
 AliTPCTracklet.cxx:598
 AliTPCTracklet.cxx:599
 AliTPCTracklet.cxx:600
 AliTPCTracklet.cxx:601
 AliTPCTracklet.cxx:602
 AliTPCTracklet.cxx:603
 AliTPCTracklet.cxx:604
 AliTPCTracklet.cxx:605
 AliTPCTracklet.cxx:606
 AliTPCTracklet.cxx:607
 AliTPCTracklet.cxx:608
 AliTPCTracklet.cxx:609
 AliTPCTracklet.cxx:610
 AliTPCTracklet.cxx:611
 AliTPCTracklet.cxx:612
 AliTPCTracklet.cxx:613
 AliTPCTracklet.cxx:614
 AliTPCTracklet.cxx:615
 AliTPCTracklet.cxx:616
 AliTPCTracklet.cxx:617
 AliTPCTracklet.cxx:618
 AliTPCTracklet.cxx:619
 AliTPCTracklet.cxx:620
 AliTPCTracklet.cxx:621
 AliTPCTracklet.cxx:622
 AliTPCTracklet.cxx:623
 AliTPCTracklet.cxx:624
 AliTPCTracklet.cxx:625
 AliTPCTracklet.cxx:626
 AliTPCTracklet.cxx:627
 AliTPCTracklet.cxx:628
 AliTPCTracklet.cxx:629
 AliTPCTracklet.cxx:630
 AliTPCTracklet.cxx:631
 AliTPCTracklet.cxx:632
 AliTPCTracklet.cxx:633
 AliTPCTracklet.cxx:634
 AliTPCTracklet.cxx:635
 AliTPCTracklet.cxx:636
 AliTPCTracklet.cxx:637
 AliTPCTracklet.cxx:638
 AliTPCTracklet.cxx:639
 AliTPCTracklet.cxx:640
 AliTPCTracklet.cxx:641
 AliTPCTracklet.cxx:642
 AliTPCTracklet.cxx:643
 AliTPCTracklet.cxx:644
 AliTPCTracklet.cxx:645
 AliTPCTracklet.cxx:646
 AliTPCTracklet.cxx:647
 AliTPCTracklet.cxx:648
 AliTPCTracklet.cxx:649
 AliTPCTracklet.cxx:650
 AliTPCTracklet.cxx:651
 AliTPCTracklet.cxx:652
 AliTPCTracklet.cxx:653
 AliTPCTracklet.cxx:654
 AliTPCTracklet.cxx:655
 AliTPCTracklet.cxx:656
 AliTPCTracklet.cxx:657
 AliTPCTracklet.cxx:658
 AliTPCTracklet.cxx:659
 AliTPCTracklet.cxx:660
 AliTPCTracklet.cxx:661
 AliTPCTracklet.cxx:662
 AliTPCTracklet.cxx:663
 AliTPCTracklet.cxx:664
 AliTPCTracklet.cxx:665
 AliTPCTracklet.cxx:666
 AliTPCTracklet.cxx:667
 AliTPCTracklet.cxx:668
 AliTPCTracklet.cxx:669
 AliTPCTracklet.cxx:670
 AliTPCTracklet.cxx:671
 AliTPCTracklet.cxx:672
 AliTPCTracklet.cxx:673
 AliTPCTracklet.cxx:674
 AliTPCTracklet.cxx:675
 AliTPCTracklet.cxx:676
 AliTPCTracklet.cxx:677
 AliTPCTracklet.cxx:678
 AliTPCTracklet.cxx:679
 AliTPCTracklet.cxx:680
 AliTPCTracklet.cxx:681
 AliTPCTracklet.cxx:682
 AliTPCTracklet.cxx:683
 AliTPCTracklet.cxx:684
 AliTPCTracklet.cxx:685
 AliTPCTracklet.cxx:686
 AliTPCTracklet.cxx:687
 AliTPCTracklet.cxx:688
 AliTPCTracklet.cxx:689
 AliTPCTracklet.cxx:690
 AliTPCTracklet.cxx:691
 AliTPCTracklet.cxx:692
 AliTPCTracklet.cxx:693
 AliTPCTracklet.cxx:694
 AliTPCTracklet.cxx:695
 AliTPCTracklet.cxx:696
 AliTPCTracklet.cxx:697
 AliTPCTracklet.cxx:698
 AliTPCTracklet.cxx:699
 AliTPCTracklet.cxx:700
 AliTPCTracklet.cxx:701
 AliTPCTracklet.cxx:702
 AliTPCTracklet.cxx:703
 AliTPCTracklet.cxx:704
 AliTPCTracklet.cxx:705
 AliTPCTracklet.cxx:706
 AliTPCTracklet.cxx:707
 AliTPCTracklet.cxx:708
 AliTPCTracklet.cxx:709
 AliTPCTracklet.cxx:710
 AliTPCTracklet.cxx:711
 AliTPCTracklet.cxx:712
 AliTPCTracklet.cxx:713
 AliTPCTracklet.cxx:714
 AliTPCTracklet.cxx:715
 AliTPCTracklet.cxx:716
 AliTPCTracklet.cxx:717
 AliTPCTracklet.cxx:718
 AliTPCTracklet.cxx:719
 AliTPCTracklet.cxx:720
 AliTPCTracklet.cxx:721
 AliTPCTracklet.cxx:722
 AliTPCTracklet.cxx:723
 AliTPCTracklet.cxx:724
 AliTPCTracklet.cxx:725
 AliTPCTracklet.cxx:726
 AliTPCTracklet.cxx:727
 AliTPCTracklet.cxx:728
 AliTPCTracklet.cxx:729
 AliTPCTracklet.cxx:730
 AliTPCTracklet.cxx:731
 AliTPCTracklet.cxx:732
 AliTPCTracklet.cxx:733
 AliTPCTracklet.cxx:734
 AliTPCTracklet.cxx:735
 AliTPCTracklet.cxx:736
 AliTPCTracklet.cxx:737
 AliTPCTracklet.cxx:738
 AliTPCTracklet.cxx:739
 AliTPCTracklet.cxx:740
 AliTPCTracklet.cxx:741
 AliTPCTracklet.cxx:742
 AliTPCTracklet.cxx:743
 AliTPCTracklet.cxx:744
 AliTPCTracklet.cxx:745
 AliTPCTracklet.cxx:746
 AliTPCTracklet.cxx:747
 AliTPCTracklet.cxx:748
 AliTPCTracklet.cxx:749
 AliTPCTracklet.cxx:750
 AliTPCTracklet.cxx:751
 AliTPCTracklet.cxx:752
 AliTPCTracklet.cxx:753
 AliTPCTracklet.cxx:754
 AliTPCTracklet.cxx:755
 AliTPCTracklet.cxx:756
 AliTPCTracklet.cxx:757
 AliTPCTracklet.cxx:758
 AliTPCTracklet.cxx:759
 AliTPCTracklet.cxx:760
 AliTPCTracklet.cxx:761
 AliTPCTracklet.cxx:762
 AliTPCTracklet.cxx:763
 AliTPCTracklet.cxx:764
 AliTPCTracklet.cxx:765
 AliTPCTracklet.cxx:766
 AliTPCTracklet.cxx:767
 AliTPCTracklet.cxx:768
 AliTPCTracklet.cxx:769
 AliTPCTracklet.cxx:770
 AliTPCTracklet.cxx:771
 AliTPCTracklet.cxx:772