ROOT logo
//-------------------------------------------------------------------------
//               Implementation of the ITS tracker class
//    The pattern recongintion based on the "cooked covariance" approach
//-------------------------------------------------------------------------

#include <TTree.h>
#include <TClonesArray.h>

#include "AliLog.h"
#include "AliESDEvent.h"
#include "AliITSUClusterPix.h"
#include "AliITSUTrackerCooked.h"
#include "AliITSUTrackCooked.h" 
#include "AliITSUReconstructor.h" 

ClassImp(AliITSUTrackerCooked)

//************************************************
// Constants hardcoded for the moment:
//************************************************
// seed "windows" in z and phi: MakeSeeds
const Double_t kzWin=0.33;
const Double_t kminPt=0.05;
// Maximal accepted impact parameters for the seeds 
const Double_t kmaxDCAxy=3.;
const Double_t kmaxDCAz= 3.;
// Layers for the seeding
const Int_t kSeedingLayer1=6, kSeedingLayer2=4, kSeedingLayer3=5;
// Space point resolution
const Double_t kSigma2=0.0005*0.0005;
// Max accepted chi2
const Double_t kmaxChi2PerCluster=20.;
const Double_t kmaxChi2PerTrack=30.;
// Tracking "road" from layer to layer
const Double_t kRoadY=0.7;
const Double_t kRoadZ=0.7;
// Minimal number of attached clusters
const Int_t kminNumberOfClusters=4;

//************************************************
// TODO:
//************************************************
// Seeding:
// Precalculate cylidnrical (r,phi) for the clusters;
// use exact r's for the clusters


AliITSUTrackerCooked::AliITSUlayer
              AliITSUTrackerCooked::fgLayers[AliITSUTrackerCooked::kNLayers];

AliITSUTrackerCooked::AliITSUTrackerCooked(AliITSUReconstructor *rec): 
AliITSUTrackerGlo(rec),
fSeeds(0),
fI(kNLayers-1),
fBestTrack(0), 
fTrackToFollow(0),
fSAonly(kTRUE) 
{
  //--------------------------------------------------------------------
  // This default constructor needs to be provided
  //--------------------------------------------------------------------
  const Double_t 
  klRadius[7]={2.34, 3.15, 3.93, 19.61, 24.55, 34.39, 39.34}; //tdr6

  for (Int_t i=0; i<kNLayers; i++) fgLayers[i].SetR(klRadius[i]);

  // Some default primary vertex
  Double_t xyz[]={0.,0.,0.};
  Double_t ers[]={2.,2.,2.};

  SetVertex(xyz,ers);

}

void AliITSUTrackerCooked::ResetTrackToFollow(const AliITSUTrackCooked &t) {
  //--------------------------------------------------------------------
  // Prepare to follow a new track seed
  //--------------------------------------------------------------------
     delete fTrackToFollow;
     fTrackToFollow = new AliITSUTrackCooked(t);
}
  
void AliITSUTrackerCooked::ResetBestTrack() {
  //--------------------------------------------------------------------
  // Replace the best track branch
  //--------------------------------------------------------------------
     delete fBestTrack;
     fBestTrack = new AliITSUTrackCooked(*fTrackToFollow);
}
  
AliITSUTrackerCooked::~AliITSUTrackerCooked() 
{
  //--------------------------------------------------------------------
  // Virtual destructor
  //--------------------------------------------------------------------

  if (fSeeds) fSeeds->Delete(); delete fSeeds; 
  delete fBestTrack;
  delete fTrackToFollow;

}

static Double_t 
f1(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t x3, Double_t y3)
{
    //-----------------------------------------------------------------
    // Initial approximation of the track curvature
    //-----------------------------------------------------------------
    Double_t d=(x2-x1)*(y3-y2)-(x3-x2)*(y2-y1);
    Double_t a=0.5*((y3-y2)*(y2*y2-y1*y1+x2*x2-x1*x1)-
                    (y2-y1)*(y3*y3-y2*y2+x3*x3-x2*x2));
    Double_t b=0.5*((x2-x1)*(y3*y3-y2*y2+x3*x3-x2*x2)-
                    (x3-x2)*(y2*y2-y1*y1+x2*x2-x1*x1));
    
    Double_t xr=TMath::Abs(d/(d*x1-a)), yr=TMath::Abs(d/(d*y1-b));
    
    Double_t crv=xr*yr/sqrt(xr*xr+yr*yr);
    if (d>0) crv=-crv;

    return crv;
}

static Double_t 
f2(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t x3, Double_t y3)
{
    //-----------------------------------------------------------------
    // Initial approximation of the x-coordinate of the center of curvature 
    //-----------------------------------------------------------------

  Double_t k1=(y2-y1)/(x2-x1), k2=(y3-y2)/(x3-x2);
  Double_t x0=0.5*(k1*k2*(y1-y3) + k2*(x1+x2) - k1*(x2+x3))/(k2-k1);

  return x0;
}

static Double_t 
f3(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t z1, Double_t z2)
{
    //-----------------------------------------------------------------
    // Initial approximation of the tangent of the track dip angle
    //-----------------------------------------------------------------
    return (z1 - z2)/sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

Bool_t AliITSUTrackerCooked::
AddCookedSeed(const Float_t r1[3], Int_t l1, Int_t i1, 
              const Float_t r2[3], Int_t l2, Int_t i2,
              const AliCluster *c3,Int_t l3, Int_t i3) 
{
    //--------------------------------------------------------------------
    // This is the main cooking function.
    // Creates seed parameters out of provided clusters.
    //--------------------------------------------------------------------
    Float_t x,a;
    if (!c3->GetXAlphaRefPlane(x,a)) return kFALSE;

    Double_t ca=TMath::Cos(a), sa=TMath::Sin(a);
    Double_t x1 = r1[0]*ca + r1[1]*sa,
             y1 =-r1[0]*sa + r1[1]*ca, z1 = r1[2];
    Double_t x2 = r2[0]*ca + r2[1]*sa,
             y2 =-r2[0]*sa + r2[1]*ca, z2 = r2[2];
    Double_t x3 = x,  y3 = c3->GetY(), z3 = c3->GetZ();

    Double_t par[5];
    par[0]=y3;
    par[1]=z3;
    Double_t crv=f1(x1, y1, x2, y2, x3, y3); //curvature
    Double_t x0 =f2(x1, y1, x2, y2, x3, y3); //x-coordinate of the center
    Double_t tgl12=f3(x1, y1, x2, y2, z1, z2);
    Double_t tgl23=f3(x2, y2, x3, y3, z2, z3);

    Double_t sf=crv*(x-x0);
    if (TMath::Abs(sf) >= kAlmost1) return kFALSE;
    par[2]=sf;

    par[3]=0.5*(tgl12 + tgl23);
    Double_t bz=GetBz();
    par[4]=(TMath::Abs(bz) < kAlmost0Field) ? kAlmost0 : crv/(bz*kB2C);

    Double_t cov[15];
    /*
    for (Int_t i=0; i<15; i++) cov[i]=0.;
    cov[0] =kSigma2*10;
    cov[2] =kSigma2*10;
    cov[5] =0.007*0.007*10;   //FIXME all these lines
    cov[9] =0.007*0.007*10;
    cov[14]=0.1*0.1*10;
    */
    const Double_t dlt=0.0005;
    Double_t
    fy=1./(fgLayers[kSeedingLayer3].GetR() - fgLayers[kSeedingLayer2].GetR());
    Double_t tz=fy;
    Double_t cy=(f1(x1, y1, x2, y2+dlt, x3, y3) - crv)/dlt/bz/kB2C;
    cy*=20; //FIXME: MS contribution to the cov[14]
    Double_t s2=kSigma2;

    cov[0]=s2;
    cov[1]=0.;     cov[2]=s2;
    cov[3]=s2*fy;  cov[4]=0.;    cov[5]=s2*fy*fy;
    cov[6]=0.;     cov[7]=s2*tz; cov[8]=0.;        cov[9]=s2*tz*tz;
    cov[10]=s2*cy; cov[11]=0.;   cov[12]=s2*fy*cy; cov[13]=0.; cov[14]=s2*cy*cy;

    AliITSUTrackCooked *seed=new AliITSUTrackCooked();
    seed->Set(Double_t(x), Double_t(a), par, cov);

    Float_t dz[2]; 
    seed->GetDZ(GetX(),GetY(),GetZ(),GetBz(),dz);
    if (TMath::Abs(dz[0]) > kmaxDCAxy) {delete seed; return kFALSE;} 
    if (TMath::Abs(dz[1]) > kmaxDCAz ) {delete seed; return kFALSE;} 

    Double_t xx0 = 0.008; // Rough layer thickness
    Double_t radl= 9.36;  // Radiation length of Si [cm]
    Double_t rho = 2.33;  // Density of Si [g/cm^3] 
    Double_t mass= 0.139;// Pion
    if (!seed->CorrectForMeanMaterial(xx0, xx0*radl*rho, mass, kTRUE)) {
       delete seed; return kFALSE;
    }

    seed->SetClusterIndex(l1,i1);
    seed->SetClusterIndex(l2,i2);
    seed->SetClusterIndex(l3,i3);

    fSeeds->AddLast(seed);

    return kTRUE;
}

Int_t AliITSUTrackerCooked::MakeSeeds() {
  //--------------------------------------------------------------------
  // This is the main pattern recongition function.
  // Creates seeds out of two clusters and another point.
  //--------------------------------------------------------------------
   const Double_t zv=GetZ();

   AliITSUlayer &layer1=fgLayers[kSeedingLayer1];
   AliITSUlayer &layer2=fgLayers[kSeedingLayer2];
   AliITSUlayer &layer3=fgLayers[kSeedingLayer3];
   Double_t r1=layer1.GetR();
   Double_t r2=layer2.GetR();
   Double_t r3=layer3.GetR();

   const Double_t maxC  = TMath::Abs(GetBz()*kB2C/kminPt);
   const Double_t kpWin = TMath::ASin(0.5*maxC*r1) - TMath::ASin(0.5*maxC*r2);

   Int_t nClusters1=layer1.GetNumberOfClusters();
   Int_t nClusters2=layer2.GetNumberOfClusters();
   Int_t nClusters3=layer3.GetNumberOfClusters();
   for (Int_t n1=0; n1<nClusters1; n1++) {
     AliCluster *c1=layer1.GetCluster(n1);
     //
     //Int_t lab=c1->GetLabel(0);
     //
     Double_t z1=c1->GetZ();
     Float_t xyz1[3]; c1->GetGlobalXYZ(xyz1);
     Double_t phi1=layer1.GetClusterPhi(n1);
     Double_t zr2=zv + r2/r1*(z1-zv);
     Int_t start2=layer2.FindClusterIndex(zr2-kzWin);
     for (Int_t n2=start2; n2<nClusters2; n2++) {
         AliCluster *c2=layer2.GetCluster(n2);
         //
         //if (c2->GetLabel(0)!=lab) continue;
	 //
         Double_t z2=c2->GetZ();
         if (z2 > (zr2+kzWin)) break;  //check in Z

         Float_t xyz2[3]; c2->GetGlobalXYZ(xyz2);
         Double_t phi2=layer2.GetClusterPhi(n2);
         if (TMath::Abs(phi2-phi1) > kpWin) continue;  //check in Phi

         Double_t zr3=z1 + (r3-r1)/(r2-r1)*(z2-z1);
         Double_t crv=f1(xyz1[0], xyz1[1], xyz2[0], xyz2[1], GetX(), GetY());
         Double_t phir3 = phi1 + 0.5*crv*(r3 - r1); 

         Int_t start3=layer3.FindClusterIndex(zr3-kzWin/2);
         for (Int_t n3=start3; n3<nClusters3; n3++) {
             AliCluster *c3=layer3.GetCluster(n3);
             //
             //if (c3->GetLabel(0)!=lab) continue;
             //
             Double_t z3=c3->GetZ();
             if (z3 > (zr3+kzWin/2)) break;  //check in Z

             Float_t xyz3[3]; c3->GetGlobalXYZ(xyz3);
             Double_t phi3=layer3.GetClusterPhi(n3);
             if (TMath::Abs(phir3-phi3) > kpWin/100) continue;  //check in Phi

             AliITSUClusterPix cc(*((AliITSUClusterPix*)c2));
             cc.GoToFrameTrk();
             AddCookedSeed(xyz1, kSeedingLayer1, n1,
                           xyz3, kSeedingLayer3, n3, 
                           &cc,  kSeedingLayer2, n2);

	 }
     }
   }

   for (Int_t n1=0; n1<nClusters1; n1++) {
     AliCluster *c1=layer1.GetCluster(n1);
     ((AliITSUClusterPix*)c1)->GoToFrameTrk();
   }
   for (Int_t n2=0; n2<nClusters2; n2++) {
     AliCluster *c2=layer2.GetCluster(n2);
     ((AliITSUClusterPix*)c2)->GoToFrameTrk();
   }
   for (Int_t n3=0; n3<nClusters3; n3++) {
     AliCluster *c3=layer3.GetCluster(n3);
     ((AliITSUClusterPix*)c3)->GoToFrameTrk();
   }

   return fSeeds->GetEntriesFast();
}

Int_t AliITSUTrackerCooked::Clusters2Tracks(AliESDEvent *event) {
  //--------------------------------------------------------------------
  // This is the main tracking function
  // The clusters must already be loaded
  //--------------------------------------------------------------------

  if (!fSAonly) AliITSUTrackerGlo::Clusters2Tracks(event);

  if (fSeeds) {fSeeds->Delete(); delete fSeeds;}
  fSeeds=new TObjArray(77777);

  //Seeding with the triggered primary vertex
  Double_t xyz[3];
  const AliESDVertex *vtx=0;
  vtx=event->GetPrimaryVertexSPD();
  if (vtx->GetStatus()) {
     xyz[0]=vtx->GetX(); xyz[1]=vtx->GetY(); xyz[2]=vtx->GetZ();
     SetVertex(xyz);
     MakeSeeds();
  }
  //Seeding with the pileup primary vertices
  TClonesArray *verticesSPD=event->GetPileupVerticesSPD();
  Int_t nfoundSPD=verticesSPD->GetEntries(); 
  for (Int_t v=0; v<nfoundSPD; v++) {
      vtx=(AliESDVertex *)verticesSPD->UncheckedAt(v);
      if (!vtx->GetStatus()) continue;
      xyz[0]=vtx->GetX(); xyz[1]=vtx->GetY(); xyz[2]=vtx->GetZ();
      SetVertex(xyz);
      MakeSeeds();
  }
  fSeeds->Sort();
  Int_t nSeeds=fSeeds->GetEntriesFast();

  // Possibly, icrement the seeds with additional clusters (Kalman)

  // Possibly, (re)fit the found tracks 

  Int_t ngood=0;
  for (Int_t s=0; s<nSeeds; s++) {
      const AliITSUTrackCooked *track=(AliITSUTrackCooked*)fSeeds->At(s);
 
      Double_t x=track->GetX();
      Double_t y=track->GetY();
      Double_t phi=track->GetAlpha() + TMath::ATan2(y,x);
      const Float_t pi2 = 2.*TMath::Pi();
      if (phi<0.) phi+=pi2;
      else if (phi >= pi2) phi-=pi2;
      for (Int_t n=0; n<kNLayers-3; n++) {
        Double_t z;
        track->GetZAt(fgLayers[n].GetR(),GetBz(),z);
        fgLayers[n].SelectClusters(phi,kRoadY,z,kRoadZ);
      }
      
      ResetTrackToFollow(*track);
      ResetBestTrack();
      fI=kSeedingLayer2;
      fgLayers[fI].ResetTrack(*track);

      for (FollowProlongation(); fI<kSeedingLayer2; fI++) {
          while (TakeNextProlongation()) FollowProlongation();
      }

      if (fBestTrack->GetNumberOfClusters() < kminNumberOfClusters) continue;

      CookLabel(fBestTrack,0.); //For comparison only
      Int_t label=fBestTrack->GetLabel();
      if (label>0) ngood++;

      AliESDtrack iotrack;
      iotrack.UpdateTrackParams(fBestTrack,AliESDtrack::kITSin);
      iotrack.SetLabel(label);
      event->AddTrack(&iotrack);
      UseClusters(fBestTrack);
  }

  Info("Clusters2Tracks","Seeds: %d",nSeeds);
  if (nSeeds)
  Info("Clusters2Tracks","Good tracks/seeds: %f",Float_t(ngood)/nSeeds);

  if (fSeeds) {fSeeds->Delete(); delete fSeeds;}
  fSeeds=0;
    
  return 0;
}

void AliITSUTrackerCooked::FollowProlongation() {
  //--------------------------------------------------------------------
  // Push this track tree branch towards the primary vertex
  //--------------------------------------------------------------------
  while (fI) {
    fI--;
    fgLayers[fI].ResetSelectedClusters();  
    if (!TakeNextProlongation()) return;
  } 

  //deal with the best track
  Int_t ncl=fTrackToFollow->GetNumberOfClusters();
  Int_t nclb=fBestTrack->GetNumberOfClusters();
  if (ncl >= nclb) {
     Double_t chi2=fTrackToFollow->GetChi2();
     if (chi2 < kmaxChi2PerTrack) {        
        if (ncl > nclb || chi2 < fBestTrack->GetChi2()) {
	   ResetBestTrack();
        }
     }
  }

}

Int_t AliITSUTrackerCooked::TakeNextProlongation() {
  //--------------------------------------------------------------------
  // Switch to the next track tree branch
  //--------------------------------------------------------------------
  AliITSUlayer &layer=fgLayers[fI];

  const AliCluster *c=0; Int_t ci=-1;
  const AliCluster *cc=0; Int_t cci=-1;
  UShort_t volId=-1;
  Double_t z=0., dz=0., y=0., dy=0., chi2=0.; 
  while ((c=layer.GetNextCluster(ci))!=0) {
    Int_t id=c->GetVolumeId();
    if (id != volId) {
       volId=id;
       const AliITSUTrackCooked *t = fgLayers[fI+1].GetTrack();
       ResetTrackToFollow(*t);
       Double_t x=layer.GetXRef(ci);
       Double_t alpha=layer.GetAlphaRef(ci);
       if (!fTrackToFollow->Propagate(alpha, x, GetBz())) {
         //Warning("TakeNextProlongation","propagation failed !\n");
          continue;
       }
       dz=7*TMath::Sqrt(fTrackToFollow->GetSigmaZ2() + kSigma2);
       dy=7*TMath::Sqrt(fTrackToFollow->GetSigmaY2() + kSigma2);
       z=fTrackToFollow->GetZ();
       y=fTrackToFollow->GetY();
    }

    //if (TMath::Abs(fTrackToFollow.GetZ()-GetZ())>layer.GetR()+dz) continue;

    if (TMath::Abs(z - c->GetZ()) > dz) continue;
    if (TMath::Abs(y - c->GetY()) > dy) continue;

    Double_t ch2=fTrackToFollow->GetPredictedChi2(c); 
    if (ch2 > kmaxChi2PerCluster) continue;
    chi2=ch2;
    cc=c; cci=ci;
    break;
  }

  if (!cc) return 0;

  if (!fTrackToFollow->Update(cc,chi2,(fI<<28)+cci)) {
     //Warning("TakeNextProlongation","filtering failed !\n");
     return 0;
  }
  Double_t xx0 = (fI > 2) ? 0.008 : 0.003;  // Rough layer thickness
  Double_t x0  = 9.36; // Radiation length of Si [cm]
  Double_t rho = 2.33; // Density of Si [g/cm^3] 
  Double_t mass = fTrackToFollow->GetMass();
  fTrackToFollow->CorrectForMeanMaterial(xx0, xx0*x0*rho, mass, kTRUE);
  layer.ResetTrack(*fTrackToFollow); 


  return 1;
}

Int_t AliITSUTrackerCooked::PropagateBack(AliESDEvent *event) {
  //--------------------------------------------------------------------
  // Here, we implement the Kalman smoother ?
  // The clusters must already be loaded
  //--------------------------------------------------------------------
  Int_t n=event->GetNumberOfTracks();
  Int_t ntrk=0;
  Int_t ngood=0;
  for (Int_t i=0; i<n; i++) {
      AliESDtrack *esdTrack=event->GetTrack(i);

      if (!esdTrack->IsOn(AliESDtrack::kITSin)) continue;
      if ( esdTrack->IsOn(AliESDtrack::kTPCin)) continue;//skip a TPC+ITS track

      AliITSUTrackCooked track(*esdTrack);

      ResetTrackToFollow(track);

      fTrackToFollow->ResetCovariance(10.); fTrackToFollow->ResetClusters();
      if (RefitAt(40., fTrackToFollow, &track)) {

         CookLabel(fTrackToFollow, 0.); //For comparison only
         Int_t label=fTrackToFollow->GetLabel();
         if (label>0) ngood++;

         esdTrack->UpdateTrackParams(fTrackToFollow,AliESDtrack::kITSout);
         //UseClusters(fTrackToFollow);
         ntrk++;
      }
  }

  Info("PropagateBack","Back propagated tracks: %d",ntrk);
  if (ntrk)
  Info("PropagateBack","Good tracks/back propagated: %f",Float_t(ngood)/ntrk);
  
  if (!fSAonly) AliITSUTrackerGlo::PropagateBack(event);
  
  return 0;
}

Bool_t AliITSUTrackerCooked::
RefitAt(Double_t xx, AliITSUTrackCooked *t, const AliITSUTrackCooked *c) {
  //--------------------------------------------------------------------
  // This function refits the track "t" at the position "x" using
  // the clusters from "c"
  //--------------------------------------------------------------------
  Int_t index[kNLayers];
  Int_t k;
  for (k=0; k<kNLayers; k++) index[k]=-1;
  Int_t nc=c->GetNumberOfClusters();
  for (k=0; k<nc; k++) {
    Int_t idx=c->GetClusterIndex(k), nl=(idx&0xf0000000)>>28;
    index[nl]=idx;
  }

  Int_t from, to, step;
  if (xx > t->GetX()) {
      from=0; to=kNLayers;
      step=+1;
  } else {
      from=kNLayers-1; to=-1;
      step=-1;
  }

  for (Int_t i=from; i != to; i += step) {
     Int_t idx=index[i];
     if (idx>=0) {
        const AliCluster *cl=GetCluster(idx);
        Float_t xr,ar; cl->GetXAlphaRefPlane(xr, ar);
        if (!t->Propagate(Double_t(ar), Double_t(xr), GetBz())) {
           //Warning("RefitAt","propagation failed !\n");
           return kFALSE;
        }
        Double_t chi2=t->GetPredictedChi2(cl);
        if (chi2 < kmaxChi2PerCluster) t->Update(cl, chi2, idx);
     } else {
        Double_t r=fgLayers[i].GetR();
        Double_t phi,z;
        if (!t->GetPhiZat(r,phi,z)) {
           //Warning("RefitAt","failed to estimate track !\n");
           return kFALSE;
        }
        if (!t->Propagate(phi, r, GetBz())) {
           //Warning("RefitAt","propagation failed !\n");
           return kFALSE;
        }
     }
     Double_t xx0 = (i > 2) ? 0.008 : 0.003;  // Rough layer thickness
     Double_t x0  = 9.36; // Radiation length of Si [cm]
     Double_t rho = 2.33; // Density of Si [g/cm^3]
     Double_t mass = t->GetMass();
     t->CorrectForMeanMaterial(xx0, -step*xx0*x0*rho, mass, kTRUE);
  }

  if (!t->PropagateTo(xx,0.,0.)) return kFALSE;
  return kTRUE;
}

Int_t AliITSUTrackerCooked::RefitInward(AliESDEvent *event) {
  //--------------------------------------------------------------------
  // Some final refit, after the outliers get removed by the smoother ?  
  // The clusters must be loaded
  //--------------------------------------------------------------------
  Int_t n=event->GetNumberOfTracks();
  Int_t ntrk=0;
  Int_t ngood=0;
  for (Int_t i=0; i<n; i++) {
      AliESDtrack *esdTrack=event->GetTrack(i);

      if (!esdTrack->IsOn(AliESDtrack::kITSout)) continue;
      if ( esdTrack->IsOn(AliESDtrack::kTPCin)) continue;//skip a TPC+ITS track

      AliITSUTrackCooked track(*esdTrack);
      ResetTrackToFollow(track);

      fTrackToFollow->ResetCovariance(10.); fTrackToFollow->ResetClusters();
      if (!RefitAt(2.1, fTrackToFollow, &track)) continue;
      //Cross the beam pipe
      if (!fTrackToFollow->PropagateTo(1.8, 2.27e-3, 35.28*1.848)) continue;

      CookLabel(fTrackToFollow, 0.); //For comparison only
      Int_t label=fTrackToFollow->GetLabel();
      if (label>0) ngood++;

      esdTrack->UpdateTrackParams(fTrackToFollow,AliESDtrack::kITSrefit);
      //esdTrack->RelateToVertex(event->GetVertex(),GetBz(),33.);
      //UseClusters(fTrackToFollow);
      ntrk++;
  }

  Info("RefitInward","Refitted tracks: %d",ntrk);
  if (ntrk)
  Info("RefitInward","Good tracks/refitted: %f",Float_t(ngood)/ntrk);
    
  if (!fSAonly) AliITSUTrackerGlo::RefitInward(event);

  return 0;
}

Int_t AliITSUTrackerCooked::LoadClusters(TTree *cTree) {
  //--------------------------------------------------------------------
  // This function reads the ITSU clusters from the tree,
  // sort them, distribute over the internal tracker arrays, etc
  //--------------------------------------------------------------------
  if (!cTree) {
     AliFatal("No cluster tree !");
     return 1;
  }

  AliITSUTrackerGlo::LoadClusters(cTree);

  for (Int_t i=0; i<kNLayers; i++) {
      TClonesArray *clusters=fReconstructor->GetClusters(i);
      switch (i) {
      case kSeedingLayer1: 
      case kSeedingLayer2: 
      case kSeedingLayer3: 
	 fgLayers[i].InsertClusters(clusters,kTRUE,fSAonly);
         break;
      default:
	 fgLayers[i].InsertClusters(clusters,kFALSE,fSAonly);
         break;
      }
  }

  return 0;
}

void AliITSUTrackerCooked::UnloadClusters() {
  //--------------------------------------------------------------------
  // This function unloads ITSU clusters from the RAM
  //--------------------------------------------------------------------
  AliITSUTrackerGlo::UnloadClusters();
  for (Int_t i=0; i<kNLayers; i++) fgLayers[i].DeleteClusters();
}

AliCluster *AliITSUTrackerCooked::GetCluster(Int_t index) const {
  //--------------------------------------------------------------------
  //       Return pointer to a given cluster
  //--------------------------------------------------------------------
    Int_t l=(index & 0xf0000000) >> 28;
    Int_t c=(index & 0x0fffffff) >> 00;
    return fgLayers[l].GetCluster(c);
}

AliITSUTrackerCooked::AliITSUlayer::AliITSUlayer():
  fR(0),
  fN(0),
  fNsel(0),
  fI(0),
  fTrack(0) 
{
  //--------------------------------------------------------------------
  // This default constructor needs to be provided
  //--------------------------------------------------------------------
  for (Int_t i=0; i<kMaxClusterPerLayer; i++) fClusters[i]=0;
  for (Int_t i=0; i<kMaxSelected; i++) fIndex[i]=-1;
}

AliITSUTrackerCooked::AliITSUlayer::~AliITSUlayer()
{
  //--------------------------------------------------------------------
  // Simple destructor
  //--------------------------------------------------------------------
  delete fTrack;
}

void 
AliITSUTrackerCooked::AliITSUlayer::ResetTrack(const AliITSUTrackCooked &t) {
  //--------------------------------------------------------------------
  // Replace the track estimate at this layer
  //--------------------------------------------------------------------
   delete fTrack;
   fTrack=new AliITSUTrackCooked(t);
}

void AliITSUTrackerCooked::AliITSUlayer::
InsertClusters(TClonesArray *clusters, Bool_t seedingLayer, Bool_t saOnly)
{
  //--------------------------------------------------------------------
  // Load clusters to this layer
  //--------------------------------------------------------------------
  Int_t ncl=clusters->GetEntriesFast();
  Double_t r=0.;
  for (Int_t i=0; i<ncl; i++) {
     AliITSUClusterPix *c=(AliITSUClusterPix*)clusters->UncheckedAt(i);
     if (!saOnly) if (c->IsClusterUsed()) continue;
     c->GoToFrameGlo();
     Double_t x=c->GetX(), y=c->GetY();
     r += TMath::Sqrt(x*x + y*y);
     if (!seedingLayer) c->GoToFrameTrk();
     //if (!c->Misalign()) AliWarning("Can't misalign this cluster !");
     if (InsertCluster(c)) break;
  }
  if (fN) fR = r/fN;
  const Float_t pi2 = 2.*TMath::Pi();
  for (Int_t i=0; i<fN; i++) {
      AliCluster *c=fClusters[i];
      c->GetXAlphaRefPlane(fXRef[i],fAlphaRef[i]);
      Float_t xyz[3]; c->GetGlobalXYZ(xyz);
      Float_t phi=TMath::ATan2(xyz[1],xyz[0]);
      if (phi<0.) phi+=pi2;
      else if (phi >= pi2) phi-=pi2;
      fPhi[i]=phi;
  }
}

void AliITSUTrackerCooked::AliITSUlayer::DeleteClusters()
{
  //--------------------------------------------------------------------
  // Load clusters to this layer
  //--------------------------------------------------------------------
  //for (Int_t i=0; i<fN; i++) {delete fClusters[i]; fClusters[i]=0;}
  fN=0;
}

Int_t 
AliITSUTrackerCooked::AliITSUlayer::InsertCluster(AliCluster *c) {
  //--------------------------------------------------------------------
  // This function inserts a cluster to this layer in increasing
  // order of the cluster's fZ
  //--------------------------------------------------------------------
  if (fN>=kMaxClusterPerLayer) {
     ::Error("InsertCluster","Too many clusters !\n");
     return 1;
  }
  if (fN==0) fClusters[0]=c;
  else {
     Int_t i=FindClusterIndex(c->GetZ());
     Int_t k=fN-i;
     memmove(fClusters+i+1 ,fClusters+i,k*sizeof(AliCluster*));
     fClusters[i]=c;
  }
  fN++;
  return 0;
}

Int_t 
AliITSUTrackerCooked::AliITSUlayer::FindClusterIndex(Double_t z) const {
  //--------------------------------------------------------------------
  // This function returns the index of the first 
  // with its fZ >= "z". 
  //--------------------------------------------------------------------
  if (fN==0) return 0;

  Int_t b=0;
  if (z <= fClusters[b]->GetZ()) return b;

  Int_t e=b+fN-1;
  if (z > fClusters[e]->GetZ()) return e+1;

  Int_t m=(b+e)/2;
  for (; b<e; m=(b+e)/2) {
    if (z > fClusters[m]->GetZ()) b=m+1;
    else e=m; 
  }
  return m;
}

void AliITSUTrackerCooked::AliITSUlayer::
SelectClusters(Float_t phi, Float_t dy, Float_t z, Float_t dz) {
  //--------------------------------------------------------------------
  // This function selects clusters within the "road"
  //--------------------------------------------------------------------
  fNsel=0;

  Float_t dphi=dy/fR; 
  Float_t phiMin=phi-dphi;
  Float_t phiMax=phi+dphi;
  Float_t zMin=z-dz;
  Float_t zMax=z+dz;
 
  Int_t i=FindClusterIndex(zMin), imax=FindClusterIndex(zMax);
  for (; i<imax; i++) {
      Float_t cphi=fPhi[i];
      if (cphi <= phiMin) continue;
      if (cphi >  phiMax) continue;
      AliCluster *c=fClusters[i];
      if (c->IsClusterUsed()) continue;

      fIndex[fNsel++]=i;
      if (fNsel>=kMaxSelected) break;
  } 
}

const AliCluster *AliITSUTrackerCooked::AliITSUlayer::GetNextCluster(Int_t &ci){
  //--------------------------------------------------------------------
  // This function returns clusters within the "road" 
  //--------------------------------------------------------------------
  if (fI<fNsel) {
      ci=fIndex[fI++];
      return fClusters[ci];       
  }
  ci=-1;
  return 0; 
}

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