ROOT logo
//--------------------------------------------------------------------------------
//               Implementation of the ITS tracker class
//    It reads AliITSUClusterPix clusters and and fills the ESD with tracks
//    
//    The algorithm implemented here takes inspiration from UniCA code of FIAS
//    group. 
//--------------------------------------------------------------------------------

#include <TBranch.h>
#include <TMath.h>
using TMath::Abs;
using TMath::Sort;
using TMath::Sqrt;
#include <TTree.h>
#include <algorithm>
using std::sort;

// Vc library
//#include "Vc/Vc"
//#include "AliITSUTrackerSAauxVc.h" // Structs and other stuff using Vc library
#include "AliLog.h"
#include "AliESDEvent.h"
#include "AliITSUClusterPix.h"
#include "AliITSUTrackerSA.h"
#include "AliITSUReconstructor.h"
#include "AliITSURecoDet.h"
#include "AliESDtrack.h"

#include <Riostream.h>

using std::cout;
using std::endl;
using std::flush;

//#include "AliITSUtrackSA.h"      // Some dedicated SA track class ?

ClassImp(AliITSUTrackerSA)

const Double_t AliITSUTrackerSA::fgkToler =  1e-6;// tolerance for layer on-surface check
const Double_t AliITSUTrackerSA::fgkChi2Cut =  600.f;

//________________________________________________________________________________
AliITSUTrackerSA::AliITSUTrackerSA(AliITSUReconstructor* rec) :
fReconstructor(rec),
fITS(0),
fMatLUT(0),
fUseMatLUT(kFALSE),
fCurrMass(0.14),
//
fClustersTC(),
fChi2Cut( fgkChi2Cut ),
fPhiCut( 1  ),
fRPhiCut( 1 ),
fZCut( 1 )
{
  //--------------------------------------------------------------------
  // This default constructor needs to be provided
  //--------------------------------------------------------------------
  if (rec) Init(rec);
}

//________________________________________________________________________________
AliITSUTrackerSA::AliITSUTrackerSA(const AliITSUTrackerSA &t): AliTracker(t),
                                                               fReconstructor(t.fReconstructor),
                                                               fITS(t.fITS),
                                                               fMatLUT(t.fMatLUT),
                                                               fUseMatLUT(t.fUseMatLUT),
                                                               fCurrMass(t.fCurrMass),
  //
                                                               fClustersTC(),
                                                               fChi2Cut(fgkChi2Cut),
                                                               fPhiCut(),
                                                               fRPhiCut(),
                                                               fZCut()
{
  //--------------------------------------------------------------------
  // The copy constructor is protected
  //--------------------------------------------------------------------
}

//________________________________________________________________________________
AliITSUTrackerSA::~AliITSUTrackerSA()
{
  // d-tor
  delete fMatLUT;
}


//_________________________________________________________________________
void AliITSUTrackerSA::Init(AliITSUReconstructor* rec)
{
  // init with external reconstructor
  //
  fITS = rec->GetITSInterface();
  //
  // create material lookup table
  const int kNTest = 1000;
  const double kStepsPerCM=5;
  fMatLUT  = new AliITSUMatLUT(fITS->GetRMin(),fITS->GetRMax(),Nint(kStepsPerCM*(fITS->GetRMax()-fITS->GetRMin())));
  double zmn = 1e6;
  for (int ilr=fITS->GetNLayers();ilr--;) {
    AliITSURecoLayer* lr = fITS->GetLayer(ilr);
    if (zmn>Abs(lr->GetZMin())) zmn = Abs(lr->GetZMin());
    if (zmn>Abs(lr->GetZMax())) zmn = Abs(lr->GetZMax());
  }
  fMatLUT->FillData(kNTest,-zmn,zmn);
  //
}

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

  // Possibly, create the track "seeds" (combinatorial)

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

  // Possibly, (re)fit the found tracks

  // Three iterations:
  // - High momentum first;
  // - Low momentum with vertex constraint;
  // - Everything else.

  CellsCreation(0); 
  CellularAutomaton(event);
  // VertexFinding();
  // CellsCreation(1);
  // CellularAutomaton(event);

  return 0;
}

//________________________________________________________________________________
Int_t AliITSUTrackerSA::PropagateBack(AliESDEvent * event) {
  //--------------------------------------------------------------------
  // Here, we implement the Kalman smoother ?
  // The clusters must be already 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->GetStatus()&AliESDtrack::kITSin)==0) continue;

    AliITSUTrackCooked track(*esdTrack);

    track.ResetCovariance(10.); 

    int points[2*AliITSUAux::kMaxLayers];
    for (UInt_t k=0; k<2*AliITSUAux::kMaxLayers; k++) 
      points[k]=-1;
    Int_t nc=track.GetNumberOfClusters();
    for (Int_t k=0; k<nc; k++) {
      const int layer = (track.GetClusterIndex(k)&0xf0000000)>>28;
      const int idx = (track.GetClusterIndex(k)&0x0fffffff);
      points[layer<<1]=idx;
    }

    if (RefitTrack(&track,points,40,1)>=0) {

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

      esdTrack->UpdateTrackParams(&track,AliESDtrack::kITSout);
      ntrk++;
    }
  }

  Info("PropagateBack","Back propagated tracks: %d",ntrk);
  if (ntrk)
    Info("PropagateBack","Good tracks/back propagated: %f",Float_t(ngood)/ntrk);

  return 0;
}

//________________________________________________________________________________
Int_t AliITSUTrackerSA::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->GetStatus()&AliESDtrack::kITSout)==0) continue;

    AliITSUTrackCooked track(*esdTrack);

    track.ResetCovariance(10.); 

    int points[2*AliITSUAux::kMaxLayers];
    for (UInt_t k=0; k<2*AliITSUAux::kMaxLayers; k++) 
      points[k]=-1;
    Int_t nc=track.GetNumberOfClusters();
    for (Int_t k=0; k<nc; k++) {
      const int layer = (track.GetClusterIndex(k)&0xf0000000)>>28;
      const int idx = (track.GetClusterIndex(k)&0x0fffffff);
      points[layer<<1]=idx;
    }

    if (RefitTrack(&track,points,1.8,1)>=0) { //2.1,1)>=0) {

      //if (!track.PropagateTo(1.8, 2.27e-3, 35.28*1.848)) continue;
      CookLabel(&track, 0.); //For comparison only
      Int_t label=track.GetLabel();
      if (label>0) ngood++;

      //cout << esdTrack->GetStatus() << " ";
      esdTrack->UpdateTrackParams(&track,AliESDtrack::kITSrefit);
      //cout << esdTrack->GetStatus() << endl;
      ntrk++;
    } 
  }

  Info("RefitInward","Refitted tracks: %d",ntrk);
  if (ntrk)
    Info("RefitInward","Good tracks/refitted: %f",Float_t(ngood)/ntrk);
    
  return 0;
}

//________________________________________________________________________________
Int_t AliITSUTrackerSA::LoadClusters(TTree *cluTree) {
  //--------------------------------------------------------------------
  // This function reads the ITSU clusters from the tree,
  // sort them, distribute over the internal tracker arrays, etc
  //--------------------------------------------------------------------
  fITS->LoadClusters(cluTree);
  fITS->ProcessClusters();
  //
  for(int iL=0; iL<7; ++iL) {
    fClustersTC[iL]=*fITS->GetLayerActive(iL)->GetClustersAddress();
    AliITSURecoLayer* lr = fITS->GetLayerActive(iL) ; // assign the layer which the cluster belongs to
    for(int iC=0;iC<fClustersTC[iL]->GetEntriesFast();++iC) {
      const AliITSUClusterPix *cl = (AliITSUClusterPix*)fClustersTC[iL]->At(iC);
      float pos[3];
      cl->GetGlobalXYZ(pos);
      float phi = TMath::PiOver2(); 
      if(Abs(pos[0])>1e-9) {
        phi=TMath::ATan2(pos[1]-GetY(),pos[0]-GetX());
        if(phi<0.f) phi+=TMath::TwoPi();
      } else if(pos[1]<0.f) phi *= 3.f ;
      AliITSURecoSens* sens = lr->GetSensorFromID(cl->GetVolumeId());
      const float alpha = sens->GetPhiTF();
      const float cov[3]={cl->GetSigmaZ2(),cl->GetSigmaYZ(),cl->GetSigmaY2()};
      
      fLayer[iL].AddPoint(pos,cov,phi,alpha);
      for ( int i=0 ; i<3; ++i ) {
        fLayer[iL].Points.back().Label[i] = (cl->GetLabel(i)<0) ? -1 : cl->GetLabel(i);
      }
    }
  
    fLayer[iL].Sort(); 

  }
  return 0;
}

//________________________________________________________________________________
void AliITSUTrackerSA::UnloadClusters() {
  //--------------------------------------------------------------------
  // This function unloads ITSU clusters from the RAM
  //--------------------------------------------------------------------
  for(int i=0;i<7;++i) 
    fLayer[i].Clear();
  for(int i=0;i<5;++i) 
    fCells[i].clear();

}

//________________________________________________________________________________
void AliITSUTrackerSA::CellularAutomaton(AliESDEvent *event) {

  // Here it's implemented the Cellular Automaton routine
  // Firstly the level of each doublet is set according to the level of
  // the neighbour doublets.
  // Doublet are considered to be neighbour if they share one point and the
  // phi and theta direction difference of the two is below a cut value.
  Int_t ntrk=0,ngood=0;

  for( int iL = 1; iL < 5; ++iL ) {
    for( size_t iC1 = 0; iC1 < fCells[iL-1].size(); ++iC1 ) {
      for( size_t iC2 = 0; iC2 < fCells[iL].size(); ++iC2 ) {
        if( fCells[iL-1][iC1].Points[1]==fCells[iL][iC2].Points[0] && 
            fCells[iL-1][iC1].Points[2]==fCells[iL][iC2].Points[1] && 
            fCells[iL-1][iC1].Level >= fCells[iL][iC2].Level - 1 ) {
          // The implementation of the curvature based matching has to be studied. 
          fCells[iL][iC2].Level = fCells[iL-1][iC1].Level+1;
          fCells[iL][iC2].Neighbours.push_back(iC1);
        }
      }
    }
  }
  
  for (int level = 5; level > 0; --level ) {
    vector<Road> roads; 
    roads.reserve(100); // should reserve() be based on number of clusters on outermost layer?
    for (int iCL=4; iCL >= level-1; --iCL ) {
      for (size_t iCell = 0; iCell < fCells[iCL].size(); ++iCell) {
        if ( fCells[iCL][iCell].Level != level ) continue;
        roads.push_back( Road(iCL,iCell) );
        for( size_t iN=0;iN<fCells[iCL][iCell].Neighbours.size(); ++iN ) {
          const int currD = iCL - 1;
          const int neigh = fCells[iCL][iCell].Neighbours[iN];
          if( iN > 0 ) roads.push_back(roads.back());
          CandidatesTreeTraversal(roads,neigh,currD);
        }
        fCells[iCL][iCell].Level = -1;
      }
    }

    // for(size_t iR=0; iR<roads.size(); ++iR) {
    //   cout << "ROAD " << iR << " | ";
    //   for(int i=0;i<5;++i) {
    //     if(roads[iR][i]<0) continue;
    //     else {
    //       if(roads[iR].Label==-1){
    //         roads[iR].Label = fCells[i][roads[iR][i]].Label;
    //         if(roads[iR].Label==-1) roads[iR].Label--;
    //       }
    //       if (fCells[i][roads[iR][i]].Label!=roads[iR].Label&&roads[iR].Label>-1) { 
    //         roads[iR].Label = -1;
    //         if(fCells[i][roads[iR][i]].Label==-1) roads[iR].Label--;
    //       }

    //       cout << fCells[i][roads[iR][i]].Label << " ";
    //     }
    //   }
    //   cout << " | " << roads[iR].Label << " | " << roads[iR].N << endl;
    // }
    vector<AliITSUTrackCooked> candidates;
    candidates.reserve(roads.size());

    for (size_t iR=0; iR<roads.size(); ++iR) { 
      if(roads[iR].N != level) {
        continue;
      }

      int points[2*AliITSUAux::kMaxLayers];
      for(unsigned int i=0;i<2*AliITSUAux::kMaxLayers;++i) points[i] = -1;
      for(int i=0;i<5;++i) {
        if(roads[iR].Elements[i]<0) continue;
        points[( i )<<1]=fLayer[ i ](fCells[i][roads[iR].Elements[i]].Points[0]);
        points[(i+1)<<1]=fLayer[i+1](fCells[i][roads[iR].Elements[i]].Points[1]);
        points[(i+2)<<1]=fLayer[i+2](fCells[i][roads[iR].Elements[i]].Points[2]);
      }

      candidates.push_back(AliITSUTrackCooked());
      
      InitTrackParams(candidates.back(),points);
      const double chi2 = RefitTrack( (AliExternalTrackParam*)&candidates.back(), points, 0. ,-1);

      if ( chi2 < 0. ) {
        // cout << "FAIL: " << chi2 << endl;
        // for(unsigned int i=0;i<2*AliITSUAux::kMaxLayers;++i) 
        //   cout << points[i] << " ";
        // cout << endl;
        candidates.back().SetChi2( 1e27 );
      } else candidates.back().SetChi2( chi2 );
      candidates.back().SetLabel(roads[iR].Label);
    }

    vector<int> index;
    index.reserve(candidates.size());
    for ( size_t i = 0; i < candidates.size(); ++i ) index.push_back(i);
    Comparison<AliITSUTrackCooked> comp(&candidates);
    sort(index.begin(),index.end(),comp);

    for ( size_t cand = 0; cand < candidates.size(); ++cand ) {
      const int ii = index[cand];

      if ( candidates[ii].GetChi2() < 0. ) continue;
      
      // cout << candidates[ii].GetChi2() << " " << candidates[ii].GetNumberOfClusters() << " | " << candidates[ii].GetLabel() << " | ";
      // for(int i=0;i<candidates[ii].GetNumberOfClusters();++i) {
      //   cout<< GetCluster(candidates[ii].GetClusterIndex(i))->GetLabel(0) << " ";
      // }
      // cout << endl;

      if( candidates[ii].GetChi2()/candidates[ii].GetNumberOfClusters() > fgkChi2Cut ) {      
        break;
      }
      bool goodTrack = true;
      for ( int point = 0; point < candidates[ii].GetNumberOfClusters(); ++point ) { 
        int layer = (candidates[ii].GetClusterIndex(point)&0xf0000000)>>28;
        int ind = (candidates[ii].GetClusterIndex(point)&0x0fffffff);

        if( (fLayer[ layer ].Points[ ind ].Used ) ) {
          goodTrack = false;
        }

      }
      if(!goodTrack) {
        continue;
      }
      for ( int point = 0; point < candidates[ii].GetNumberOfClusters(); ++point ) {
        int layer = (candidates[ii].GetClusterIndex(point)&0xf0000000)>>28;
        int ind = (candidates[ii].GetClusterIndex(point)&0x0fffffff);
        fLayer[ layer ].Points[ ind ].Used = true;
      }

      AliESDtrack outTrack;
      CookLabel((AliKalmanTrack*)&candidates[ii],0.f);
      ntrk++;
      if(candidates[ii].GetChi2()>0) ngood++;

      // cout << candidates[ii].GetChi2() << " " << candidates[ii].GetNumberOfClusters() << " | " << candidates[ii].GetLabel() << " | ";
      // for(int i=0;i<candidates[ii].GetNumberOfClusters();++i) {
      //   cout<< GetCluster(candidates[ii].GetClusterIndex(i))->GetLabel(0) << " ";
      // }
      // cout << endl;

      outTrack.UpdateTrackParams((AliKalmanTrack*)&candidates[ii],AliESDtrack::kITSin);
      outTrack.SetLabel(candidates[ii].GetLabel());
      event->AddTrack(&outTrack);
    }
  }
  Info("Clusters2Tracks","Reconstructed tracks: %d",ntrk);
  if (ntrk)
    Info("Clusters2Tracks","Good tracks/reconstructed: %f",Float_t(ngood)/ntrk);
}


//________________________________________________________________________________
void AliITSUTrackerSA::CellsCreation(const int &cutLevel) {
  // Make associations between two points on adjacent layers within an azimuthal window.
  // Under consideration:
  // - track parameter estimation using the primary vertex position
  // To do:
  // - last iteration

  float phiCut = 7.f;
  if( cutLevel==0 ) phiCut = fPhiCut;

  // Doublets creation
  vector<Cell> doublets[6];
  for( int iL = 0 ; iL < 6 ; ++iL ) {
    for ( int iC1 = 0 ; iC1 < fLayer[iL].N ; ++iC1 ) {
      for ( int iC2 = 0; iC2 < fLayer[iL+1].N ; ++iC2 ) {
        const float dPhi = Abs( fLayer[iL][iC1].Phi - fLayer[iL+1][iC2].Phi );
        if( dPhi < phiCut || Abs( dPhi - TMath::TwoPi() ) < phiCut) {
          doublets[iL].push_back(Cell(iC1,iC2));
          if(Abs(fLayer[iL][iC1].XYZ[0]-fLayer[iL+1][iC2].XYZ[0])<1e-32) {
            doublets[iL].back().Param[0] = 1e32;
          } else {
            doublets[iL].back().Param[0] = (fLayer[iL][iC1].XYZ[1]-fLayer[iL+1][iC2].XYZ[1])/(fLayer[iL][iC1].XYZ[0]-fLayer[iL+1][iC2].XYZ[0]);
          }
          const float r1  = Sqrt(fLayer[iL][iC1].XYZ[0] * fLayer[iL][iC1].XYZ[0] + fLayer[iL][iC1].XYZ[1] * fLayer[iL][iC1].XYZ[1]);
          const float r2  = Sqrt(fLayer[iL+1][iC2].XYZ[0] * fLayer[iL+1][iC2].XYZ[0] + fLayer[iL+1][iC2].XYZ[1] * fLayer[iL+1][iC2].XYZ[1]);
          doublets[iL].back().Param[1] = (fLayer[iL][iC1].XYZ[2]-fLayer[iL+1][iC2].XYZ[2])/(r1-r2);
          doublets[iL].back().Label=-1;
          for(int i=0;i<3;++i) {
            for(int j=0;j<3;++j) {
              if(fLayer[iL][iC1].Label[i]>-1&&fLayer[iL][iC1].Label[i]==fLayer[iL+1][iC2].Label[j])
                doublets[iL].back().Label = fLayer[iL][iC1].Label[i];
            }
          } 
        } else if( fLayer[iL+1][iC2].Phi - fLayer[iL][iC1].Phi > phiCut ) break;
      }

    }
  }

  // Triplets creation
  for( int iL = 5; iL > 0; --iL ) {
    fCells[iL-1].clear();
    for ( size_t iD2 = 0; iD2 < doublets[iL].size(); ++iD2 ) {
      for ( size_t iD1 = 0; iD1 < doublets[iL-1].size(); ++iD1 ) {
        const int id1 = doublets[iL-1][iD1].Points[1];
        const int id2 = doublets[iL][iD2].Points[0];
        if ( id1 == id2 ) {
          const int id3 = doublets[iL][iD2].Points[1];
          const float r3 = Sqrt( fLayer[iL+1][id3].XYZ[0] * fLayer[iL+1][id3].XYZ[0] + fLayer[iL+1][id3].XYZ[1] * fLayer[iL+1][id3].XYZ[1] );
          const float r2 = Sqrt( fLayer[iL][id2].XYZ[0] * fLayer[iL][id2].XYZ[0] + fLayer[iL][id2].XYZ[1] * fLayer[iL][id2].XYZ[1] );
          const float extrZ3 = doublets[iL-1][iD1].Param[1] * ( r3 - r2 ) + fLayer[iL][id2].XYZ[2] ;
          const int iii = doublets[iL-1][iD1].Points[0];
          if ( Abs ( extrZ3 - fLayer[iL+1][id3].XYZ[2] ) < fZCut ) {      
            fCells[iL-1].push_back(Cell(doublets[iL-1][iD1].Points[0],id2,id3));
            fCells[iL-1].back().Param[0] = Curvature(fLayer[iL+1][id3].XYZ[0],fLayer[iL+1][id3].XYZ[1],fLayer[iL][id2].XYZ[0],fLayer[iL][id2].XYZ[1],fLayer[iL-1][iii].XYZ[0],fLayer[iL-1][iii].XYZ[1]);
            fCells[iL-1].back().Param[1] = doublets[iL][iD2].Param[1];
            if(doublets[iL-1][iD1].Label==doublets[iL][iD2].Label&&doublets[iL][iD2].Label!=-1) 
              fCells[iL-1].back().Label=doublets[iL][iD2].Label;
            else
              fCells[iL-1].back().Label=-1;
          } 
        } 
      }
    }
  }

}

//______________________________________________________________________________
Bool_t AliITSUTrackerSA::InitTrackParams(AliITSUTrackCooked &track, int points[])
{
  // Set the initial guess on track kinematics for propagation.
  // Assume at least 3 points available
  int lrOcc[AliITSUAux::kMaxLayers], nCl=0;
  //
  // we will need endpoints and middle layer
  for (int i=fITS->GetNLayersActive()-1; i>=0; i--) {
    if (points[i<<0x1]>-1) {
      lrOcc[nCl++] = i;
      track.SetClusterIndex(i,points[i<<0x1]);
    }
  }

  if (nCl<3) {
    AliError(Form("Cannot estimate momentum of tracks with %d clusters",nCl));
    return kFALSE;
  }
  //
  const int lr0   = lrOcc[0];
  const int lr1   = lrOcc[nCl/2];
  const int lr2   = lrOcc[nCl-1];
  //
  const SpacePoint& cl0 = fLayer[lr0].Points[ points[lr0<<1] ];
  const SpacePoint& cl1 = fLayer[lr1].Points[ points[lr1<<1] ];
  const SpacePoint& cl2 = fLayer[lr2].Points[ points[lr2<<1] ];
  double cv = Curvature(cl0.XYZ[0],cl0.XYZ[1], cl1.XYZ[0],cl1.XYZ[1], cl2.XYZ[0],cl2.XYZ[1]);

  double tgl = (cl2.XYZ[2]-cl0.XYZ[2])/TMath::Sqrt((cl2.XYZ[0]-cl0.XYZ[0])*(cl2.XYZ[0]-cl0.XYZ[0])+(cl2.XYZ[1]-cl0.XYZ[1])*(cl2.XYZ[1]-cl0.XYZ[1]));
  //
  AliITSUClusterPix* clus = (AliITSUClusterPix*)fClustersTC[ lr0 ]->At( points[lr0<<1] );
  AliITSURecoLayer* lr = fITS->GetLayerActive(lr0);
  AliITSURecoSens* sens = lr->GetSensorFromID(clus->GetVolumeId());
  double x = sens->GetXTF() + clus->GetX();
  double alp = sens->GetPhiTF();
  //  printf("Alp: %f phi: %f\n",alp,phi);
  double par[5] = {clus->GetY(),clus->GetZ(),0,tgl,cv};
  double cov[15] = {
    5*5,
    0,  5*5,
    0,  0  , 0.7*0.7,
    0,  0,   0,       0.7*0.7,
    0,  0,   0,       0,      10
  };
  track.Set(x,alp,par,cov);

  return kTRUE;
}

//______________________________________________________________________________
void AliITSUTrackerSA::CandidatesTreeTraversal(vector<Road> &candidates, const int &iD, const int &doubl) {

  if ( doubl < 0 ) return;

  candidates.back().AddElement(doubl,iD);
  const int currentN = candidates.back().N;
  for ( size_t iN = 0; iN < fCells[doubl][iD].Neighbours.size(); ++iN ) {
    const int currD = doubl - 1 ;
    const int neigh = fCells[doubl][iD].Neighbours[iN];
    
    if ( iN > 0 ) {
      candidates.push_back(static_cast<Road>(candidates.back()));
      candidates.back().N = currentN;
    }

    CandidatesTreeTraversal(candidates,neigh,currD);
  }
  
  fCells[doubl][iD].Level = -1;

}

//______________________________________________________________________________
Double_t AliITSUTrackerSA::RefitTrack(AliExternalTrackParam* trc, 
              Int_t clInfo[2*AliITSUAux::kMaxLayers],
              Double_t rDest, Int_t stopCond)
{
  // refit track till radius rDest. 
  // if stopCond<0 : propagate till last cluster then stop
  // if stopCond==0: propagate till last cluster then try to go till limiting rDest, don't mind if fail
  // if stopCond>0 : rDest must be reached
  //
  // The clList should provide the indices of clusters at corresponding layer (as stored in the layer
  // TClonesArray, with convention (allowing for up to 2 clusters per layer due to the overlaps):
  // if there is a cluster on given layer I, then it should be stored at clInfo[2*I-1]
  // if there is an additional cluster on this layer, it goes to clInfo[2*I]
  // -1 means no cluster
  //
  double rCurr = Sqrt(trc->GetX()*trc->GetX() + trc->GetY()*trc->GetY());
  int dir,lrStart,lrStop;
  //
  dir = rCurr<rDest ? 1 : -1;
  lrStart = fITS->FindFirstLayerID(rCurr,dir);
  lrStop  = fITS->FindLastLayerID(rDest,dir); // lr id before which we have to stop
  //
  if (lrStop<0 || lrStart<0) AliFatal(Form("Failed to find start(%d) or last(%d) layers. "
             "Track from %.3f to %.3f",lrStart,lrStop,rCurr,rDest));
  //
  int nCl = 0;
  for (int i=2*fITS->GetNLayersActive();i--;) {if (clInfo[i]<0) continue; nCl++;}
  //
  AliExternalTrackParam tmpTr(*trc);
  double chi2 = 0;
  int iclLr[2],nclLr;
  int nclFit = 0;
  //
  int lrStop1 = lrStop+dir;
  for (int ilr=lrStart;ilr!=lrStop1;ilr+=dir) {
    AliITSURecoLayer* lr = fITS->GetLayer(ilr);
    if ( dir*(rCurr-lr->GetR(dir))>0) continue; // this layer is already passed
    int ilrA2,ilrA = lr->GetActiveID();
    // passive layer or active w/o hits will be traversed on the way to next cluster
    if (!lr->IsActive() || clInfo[ilrA2=(ilrA<<1)]<0) continue; 
    //
    // select the order in which possible 2 clusters (in case of the overlap) will be traversed and fitted
    nclLr=0;
    if (dir>0) { // clusters are stored in increasing radius order
      iclLr[nclLr++]=clInfo[ilrA2++];
      if (clInfo[ilrA2]>=0) iclLr[nclLr++]=clInfo[ilrA2];
    }
    else {
      if ( clInfo[ilrA2+1]>=0 ) iclLr[nclLr++]=clInfo[ilrA2+1];
      iclLr[nclLr++]=clInfo[ilrA2];
    }
    //
    Bool_t transportedToLayer = kFALSE;
    for (int icl=0;icl<nclLr;icl++) {
      AliITSUClusterPix* clus =  (AliITSUClusterPix*)lr->GetCluster(iclLr[icl]);
      AliITSURecoSens* sens = lr->GetSensorFromID(clus->GetVolumeId());
      if (!tmpTr.Rotate(sens->GetPhiTF())) return -1;
      //
      double xClus = sens->GetXTF()+clus->GetX();
      if (!transportedToLayer) {
  if (ilr!=lrStart && !TransportToLayerX(&tmpTr,lrStart,ilr,xClus)) return -1; // go to the entrance to the layer
  lrStart = ilr;
  transportedToLayer = kTRUE;
      }
      //
      if (!PropagateSeed(&tmpTr,xClus,fCurrMass)) return -1;
      //
      Double_t p[2]={clus->GetY(), clus->GetZ()};
      Double_t cov[3]={clus->GetSigmaY2(), clus->GetSigmaYZ(), clus->GetSigmaZ2()};
      double chi2cl = tmpTr.GetPredictedChi2(p,cov);
      chi2 += chi2cl;
      //
      if ( !tmpTr.Update(p,cov) ) return -1;
      if (++nclFit==nCl && stopCond<0) {
  *trc = tmpTr;
  return chi2; // it was requested to not propagate after last update
      }
    }
    //
  }
  // All clusters were succesfully fitted. Even if the track does not reach rDest, this is enough to validate it.
  // Still, try to go as close as possible to rDest.
  //
  if (lrStart!=lrStop) {
    if (!TransportToLayer(&tmpTr,lrStart,lrStop)) return (stopCond>0) ? -chi2 : chi2; // rDest was obligatory
    if (!GoToExitFromLayer(&tmpTr,fITS->GetLayer(lrStop),dir)) return (stopCond>0) ? -chi2 : chi2; // rDest was obligatory
  }
  // go to the destination radius. Note that here we don't select direction to avoid precision problems
  if (!tmpTr.GetXatLabR(rDest,rDest,GetBz(),0) || !PropagateSeed(&tmpTr,rDest,fCurrMass, 100, kFALSE)) {
    return (stopCond>0) ? -chi2 : chi2; // rDest was obligatory
  }
  *trc = tmpTr;

  return chi2;
}

//______________________________________________________________________________
Bool_t AliITSUTrackerSA::PropagateSeed(AliExternalTrackParam *seed, Double_t xToGo, Double_t mass, Double_t maxStep, Bool_t matCorr) 
{
  // propagate seed to given x applying material correction if requested
  const Double_t kEpsilon = 1e-5;
  Double_t xpos     = seed->GetX();
  Int_t dir         = (xpos<xToGo) ? 1:-1;
  Double_t xyz0[3],xyz1[3];
  //
  Bool_t updTime = dir>0 && seed->IsStartedTimeIntegral();
  if (matCorr || updTime) seed->GetXYZ(xyz1);   //starting global position
  while ( (xToGo-xpos)*dir > kEpsilon){
    Double_t step = dir*TMath::Min(TMath::Abs(xToGo-xpos), maxStep);
    Double_t x    = xpos+step;
    Double_t bz=GetBz();   // getting the local Bz
    if (!seed->PropagateTo(x,bz))  return kFALSE;
    double ds = 0;
    if (matCorr || updTime) {
      xyz0[0]=xyz1[0]; // global pos at the beginning of step
      xyz0[1]=xyz1[1];
      xyz0[2]=xyz1[2];
      seed->GetXYZ(xyz1);    //  // global pos at the end of step
      //
      if (matCorr) {
  Double_t xrho,xx0;
  ds = GetMaterialBudget(xyz0,xyz1,xx0,xrho); 
  if (dir>0) xrho = -xrho; // outward should be negative
  if (!seed->CorrectForMeanMaterial(xx0,xrho,mass)) return kFALSE;
      }
      else { // matCorr is not requested but time integral is
  double d0 = xyz1[0]-xyz0[0];
  double d1 = xyz1[1]-xyz0[1];
  double d2 = xyz1[2]-xyz0[2];  
  ds = TMath::Sqrt(d0*d0+d1*d1+d2*d2);
      }
    }
    if (updTime) seed->AddTimeStep(ds);
    //
    xpos = seed->GetX();
  }
  return kTRUE;
}

//_________________________________________________________________________
Bool_t AliITSUTrackerSA::TransportToLayer(AliExternalTrackParam* seed, Int_t lFrom, Int_t lTo, Double_t rLim)
{
  // transport track from layerFrom to the entrance of layerTo or to rLim (if>0), wathever is closer
  //  
  if (lTo==lFrom) AliFatal(Form("was called with lFrom=%d lTo=%d",lFrom,lTo));
  //
  int dir = lTo > lFrom ? 1:-1;
  AliITSURecoLayer* lrFr = fITS->GetLayer(lFrom); // this can be 0 when extrapolation from TPC to ITS is requested
  Bool_t checkFirst = kTRUE;
  Bool_t limReached = kFALSE;
  while(lFrom!=lTo) {
    if (lrFr) {
      if (!GoToExitFromLayer(seed,lrFr,dir,checkFirst)) return kFALSE; // go till the end of current layer
      checkFirst = kFALSE;
    }
    AliITSURecoLayer* lrTo =  fITS->GetLayer( (lFrom+=dir) );
    if (!lrTo) AliFatal(Form("Layer %d does not exist",lFrom));
    //
    // go the entrance of the layer, assuming no materials in between
    double xToGo = lrTo->GetR(-dir);
    if (rLim>0) {
      if (dir>0) {
  if (rLim<xToGo) {xToGo = rLim; limReached = kTRUE;}
      }
      else {
  if (rLim>xToGo) {xToGo = rLim; limReached = kTRUE;}
      }
    }
    //    double xts = xToGo;
    if (!seed->GetXatLabR(xToGo,xToGo,GetBz(),dir)) {
      //      printf("FailHere1: %f %f %d\n",xts,xToGo,dir);
      //      seed->Print("etp");
      return kFALSE;
    }
    if (!PropagateSeed(seed,xToGo,fCurrMass,100, kFALSE )) {
      //printf("FailHere2: %f %f %d\n",xts,xToGo,dir);
      //seed->Print("etp");
      return kFALSE;
    }
    lrFr = lrTo;
    if (limReached) break;
  }
  return kTRUE;
  //
}

//_________________________________________________________________________
Bool_t AliITSUTrackerSA::TransportToLayerX(AliExternalTrackParam* seed, Int_t lFrom, Int_t lTo, Double_t xStop)
{
  // transport track from layerFrom to the entrance of layerTo but do not pass control parameter X
  //  
  if (lTo==lFrom) AliFatal(Form("was called with lFrom=%d lTo=%d",lFrom,lTo));
  //
  int dir = lTo > lFrom ? 1:-1;
  AliITSURecoLayer* lrFr = fITS->GetLayer(lFrom); // this can be 0 when extrapolation from TPC to ITS is requested
  Bool_t checkFirst = kTRUE;
  while(lFrom!=lTo) {
    if (lrFr) {
      if (!GoToExitFromLayer(seed,lrFr,dir,checkFirst)) return kFALSE; // go till the end of current layer
      checkFirst = kFALSE;
    }
    AliITSURecoLayer* lrTo =  fITS->GetLayer( (lFrom+=dir) );
    if (!lrTo) AliFatal(Form("Layer %d does not exist",lFrom));
    //
    // go the entrance of the layer, assuming no materials in between
    double xToGo = lrTo->GetR(-dir); // R of the entrance to layer
    //
    //    double xts = xToGo;
    if (!seed->GetXatLabR(xToGo,xToGo,GetBz(),dir)) {
      //      printf("FailHere1: %f %f %d\n",xts,xToGo,dir);
      //      seed->Print("etp");
      return kFALSE;
    }
    if ( (dir>0&&xToGo>xStop) || (dir<0&&xToGo<xStop) ) xToGo = xStop;
    //
#ifdef _ITSU_DEBUG_
    AliDebug(2,Form("go in dir=%d to R=%.4f(X:%.4f)",dir,lrTo->GetR(-dir), xToGo));
#endif
    if (!PropagateSeed(seed,xToGo,fCurrMass,100, kFALSE )) {
      //printf("FailHere2: %f %f %d\n",xts,xToGo,dir);
      //seed->Print("etp");
      return kFALSE;
    }
    lrFr = lrTo;
  }
  return kTRUE;
  //
}

//_________________________________________________________________________
Bool_t AliITSUTrackerSA::GoToExitFromLayer(AliExternalTrackParam* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check)
{
  // go to the exit from lr in direction dir, applying material corrections in steps specific for this layer
  // If check is requested, do this only provided the track has not exited the layer already
  double xToGo = lr->GetR(dir);
  if (check) { // do we need to track till the surface of the current layer ?
    double curR2 = seed->GetX()*seed->GetX() + seed->GetY()*seed->GetY(); // current radius
    if      (dir>0) { if (curR2-xToGo*xToGo>-fgkToler) return kTRUE; } // on the surface or outside of the layer
    else if (dir<0) { if (xToGo*xToGo-curR2>-fgkToler) return kTRUE; } // on the surface or outside of the layer
  }
  if (!seed->GetXatLabR(xToGo,xToGo,GetBz(),dir)) return kFALSE;
  // go via layer to its boundary, applying material correction.
  if (!PropagateSeed(seed,xToGo,fCurrMass, lr->GetMaxStep())) return kFALSE;
  //
  return kTRUE;
  //
}

//_________________________________________________________________________
Bool_t AliITSUTrackerSA::GoToEntranceToLayer(AliExternalTrackParam* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check)
{
  // go to the entrance of lr in direction dir, w/o applying material corrections.
  // If check is requested, do this only provided the track did not reach the layer already
  double xToGo = lr->GetR(-dir);
  if (check) { // do we need to track till the surface of the current layer ?
    double curR2 = seed->GetX()*seed->GetX() + seed->GetY()*seed->GetY(); // current radius
    if      (dir>0) { if (curR2-xToGo*xToGo>-fgkToler) return kTRUE; } // already passed
    else if (dir<0) { if (xToGo*xToGo-curR2>-fgkToler) return kTRUE; } // already passed
  }
  if (!seed->GetXatLabR(xToGo,xToGo,GetBz(),dir)) return kFALSE;
  // go via layer to its boundary, applying material correction.
  if (!PropagateSeed(seed,xToGo,fCurrMass, 100, kFALSE)) return kFALSE;
  return kTRUE;
  //
}

//____________________________________________________
Double_t AliITSUTrackerSA::GetMaterialBudget(const double* pnt0,const double* pnt1, double& x2x0, double& rhol) const
{
  double par[7];
  if (fUseMatLUT && fMatLUT) {
    double d = fMatLUT->GetMatBudget(pnt0,pnt1,par);
    x2x0 = par[AliITSUMatLUT::kParX2X0];
    rhol = par[AliITSUMatLUT::kParRhoL];    
    return d;
  }
  else {
    MeanMaterialBudget(pnt0,pnt1,par);
    x2x0 = par[1];
    rhol = par[0]*par[4];    
    return par[4];
  }
}

//____________________________________________________________________
Double_t AliITSUTrackerSA::Curvature(Double_t x1,Double_t y1,Double_t x2,Double_t y2,Double_t x3,Double_t y3) {

  //calculates the curvature of track
  Double_t den = (x3-x1)*(y2-y1)-(x2-x1)*(y3-y1);
  if(den*den<1e-32) return 0.;
  Double_t a = ((y3-y1)*(x2*x2+y2*y2-x1*x1-y1*y1)-(y2-y1)*(x3*x3+y3*y3-x1*x1-y1*y1))/den;
  if((y2-y1)*(y2-y1)<1e-32) return 0.;
  Double_t b = -(x2*x2-x1*x1+y2*y2-y1*y1+a*(x2-x1))/(y2-y1);
  Double_t c = -x1*x1-y1*y1-a*x1-b*y1;
  Double_t xc= -a/2.;

  if((a*a+b*b-4*c)<0) return 0.;
  Double_t rad = TMath::Sqrt(a*a+b*b-4*c)/2.;
  if(rad*rad<1e-32) return 1e16;

  if((x1>0 && y1>0 && x1<xc)) rad*=-1;
  if((x1<0 && y1>0 && x1<xc)) rad*=-1;
    //  if((x1<0 && y1<0 && x1<xc)) rad*=-1;
    // if((x1>0 && y1<0 && x1<xc)) rad*=-1;

  return 1/rad;

}

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