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

//-----------------------------------------------------------------
//   Implementation of the alignment steering class
//   It provides an access to the track space points
//   written along the esd tracks. The class enables
//   the user to plug any track fitter (deriving from
//   AliTrackFitter class) and minimization fo the
//   track residual sums (deriving from the AliTrackResiduals).
//-----------------------------------------------------------------

#include <TChain.h>
#include <TFile.h>
#include <TVector3.h>
#include <TSystem.h>

#include "AliAlignmentTracks.h"
#include "AliTrackPointArray.h"
#include "AliAlignObjParams.h"
#include "AliTrackFitterRieman.h"
#include "AliTrackResidualsChi2.h"
#include "AliESDEvent.h"
#include "AliLog.h"
#include "AliESDfriend.h"

ClassImp(AliAlignmentTracks)

//______________________________________________________________________________
AliAlignmentTracks::AliAlignmentTracks():
  fESDChain(0),
  fPointsFilename("AliTrackPoints.root"),
  fPointsFile(0),
  fPointsTree(0),
  fLastIndex(0),
  fArrayIndex(0),
  fIsIndexBuilt(kFALSE),
  fAlignObjs(0),
  fMisalignObjs(0),
  fTrackFitter(0),
  fMinimizer(0),
  fDoUpdate(kTRUE),
  fCovIsUsed(kFALSE)
{
  // Default constructor
  InitIndex();
  InitAlignObjs();
}

//______________________________________________________________________________
AliAlignmentTracks::AliAlignmentTracks(TChain *esdchain):
  fESDChain(esdchain),
  fPointsFilename("AliTrackPoints.root"),
  fPointsFile(0),
  fPointsTree(0),
  fLastIndex(0),
  fArrayIndex(0),
  fIsIndexBuilt(kFALSE),
  fAlignObjs(0),
  fMisalignObjs(0),
  fTrackFitter(0),
  fMinimizer(0),
  fDoUpdate(kTRUE),
  fCovIsUsed(kFALSE)
{
  // Constructor in the case
  // the user provides an already
  // built TChain with ESD trees
  InitIndex();
  InitAlignObjs();
}


//______________________________________________________________________________
AliAlignmentTracks::AliAlignmentTracks(const char *esdfilename, const char *esdtreename):
  fESDChain(new TChain(esdtreename)),
  fPointsFilename("AliTrackPoints.root"),
  fPointsFile(0),
  fPointsTree(0),
  fLastIndex(0),
  fArrayIndex(0),
  fIsIndexBuilt(kFALSE),
  fAlignObjs(0),
  fMisalignObjs(0),
  fTrackFitter(0),
  fMinimizer(0),
  fDoUpdate(kTRUE),
  fCovIsUsed(kFALSE)
{
  // Constructor in the case
  // the user provides a single ESD file
  // or a directory containing ESD files
  fESDChain->Add(esdfilename);

  InitIndex();
  InitAlignObjs();
}


//______________________________________________________________________________
AliAlignmentTracks::~AliAlignmentTracks()
{
  // Destructor
  if (fESDChain) delete fESDChain;

  DeleteIndex();
  DeleteAlignObjs();

  delete fTrackFitter;
  delete fMinimizer;

  if (fPointsFile) fPointsFile->Close();
}

//______________________________________________________________________________
void AliAlignmentTracks::AddESD(TChain *esdchain)
{
  // Add a chain with ESD files
  if (fESDChain)
    fESDChain->Add(esdchain);
  else
    fESDChain = esdchain;
}

//______________________________________________________________________________
void AliAlignmentTracks::AddESD(const char *esdfilename, const char *esdtreename)
{
  // Add a single file or
  // a directory to the chain
  // with the ESD files
  if (fESDChain)
    fESDChain->AddFile(esdfilename,TChain::kBigNumber,esdtreename);
  else {
    fESDChain = new TChain(esdtreename);
    fESDChain->Add(esdfilename);
  }
}


//________________________________________________________________________
void AliAlignmentTracks::ProcessESD(Bool_t onlyITS,
				    Int_t minITSpts,
				    Bool_t cuts,
				    Float_t minAngleWrtITSModulePlanes,
				    Float_t minMom,Float_t maxMom,
				    Float_t minAbsSinPhi,Float_t maxAbsSinPhi,
				    Float_t minSinTheta,Float_t maxSinTheta)
{
  // Analyzes and filters ESD tracks
  // Stores the selected track space points
  // into the output file

  if (!fESDChain) return;

  AliESDEvent *esd = new AliESDEvent();
  esd->ReadFromTree(fESDChain);
  AliESDfriend *esdf = 0; 
  fESDChain->SetBranchStatus("ESDfriend*",1);
  fESDChain->SetBranchAddress("ESDfriend.",&esdf);

  // Open the output file
  if (fPointsFilename.IsNull()) {
    AliWarning("Incorrect output filename!");
    return;
  }

  TFile *pointsFile = TFile::Open(fPointsFilename,"RECREATE");
  if (!pointsFile || !pointsFile->IsOpen()) {
    AliWarning(Form("Can't open %s !",fPointsFilename.Data()));
    return;
  }

  TTree *pointsTree = new TTree("spTree", "Tree with track space point arrays");
  const AliTrackPointArray *array = 0;
  AliTrackPointArray *array2 = 0;
  if(onlyITS) {   // only ITS AliTrackPoints 
    pointsTree->Branch("SP","AliTrackPointArray", &array2);
  } else {
    pointsTree->Branch("SP","AliTrackPointArray", &array);
  } 

  Int_t ievent = 0;
  while (fESDChain->GetEntry(ievent++)) {
    if (!esd) break;

    esd->SetESDfriend(esdf); //Attach the friend to the ESD

    Int_t ntracks = esd->GetNumberOfTracks();
    for (Int_t itrack=0; itrack < ntracks; itrack++) {
      AliESDtrack * track = esd->GetTrack(itrack);
      if (!track) continue;

      if(track->GetNcls(0) < minITSpts) continue;
      if(cuts) {
	if(track->GetP()<minMom || track->GetP()>maxMom) continue;
	Float_t abssinphi = TMath::Abs(TMath::Sin(track->GetAlpha()+TMath::ASin(track->GetSnp())));
	if(abssinphi<minAbsSinPhi || abssinphi>maxAbsSinPhi) continue;
	Float_t sintheta = TMath::Sin(0.5*TMath::Pi()-TMath::ATan(track->GetTgl()));
	if(sintheta<minSinTheta || sintheta>maxSinTheta) continue;
      } 

      AliTrackPoint point;
      array = track->GetTrackPointArray();

      if(onlyITS) {
	Bool_t layerOK[6]={kTRUE,kTRUE,kTRUE,kTRUE,kTRUE,kTRUE};
	Int_t ipt,volId,modId,layerId;
	Int_t jpt=0;
	for(ipt=0; ipt<array->GetNPoints(); ipt++) {
	  array->GetPoint(point,ipt);
	  volId = point.GetVolumeID();
	  layerId = AliGeomManager::VolUIDToLayer(volId,modId);
	  if(layerId>6) continue;
	  // check minAngleWrtITSModulePlanes
	  if(cuts) {
	    Double_t p[3]; track->GetDirection(p);
	    TVector3 pvec(p[0],p[1],p[2]);
	    Double_t rot[9]; AliGeomManager::GetOrigRotation(volId,rot);
	    TVector3 normvec(rot[1],rot[4],rot[7]);
	    Double_t angle = pvec.Angle(normvec);
	    if(angle>0.5*TMath::Pi()) angle = TMath::Pi()-angle;
	    angle = 0.5*TMath::Pi()-angle;
	    if(angle<minAngleWrtITSModulePlanes) {
	      layerOK[layerId-1]=kFALSE;
	      continue;
	    }
	  }
	  jpt++;
	}
	if(jpt < minITSpts) continue;      
	array2 = new AliTrackPointArray(jpt);
	jpt=0;
	for(ipt=0; ipt<array->GetNPoints(); ipt++) {
	  array->GetPoint(point,ipt);
	  volId = point.GetVolumeID();
	  layerId = AliGeomManager::VolUIDToLayer(volId,modId);
	  if(layerId>6 || !layerOK[layerId-1]) continue;
	  array2->AddPoint(jpt,&point);
	  jpt++;
	}
      } // end if(onlyITS)
 
      pointsTree->Fill();
    }
  }

  if (!pointsTree->Write()) {
    AliWarning("Can't write the tree with track point arrays!");
    return;
  }

  pointsFile->Close();

  return;
}

//_____________________________________________________________________________
void AliAlignmentTracks::ProcessESDCosmics(Bool_t onlyITS,
				   Int_t minITSpts,Float_t maxMatchingAngle,
				   Bool_t cuts,
				   Float_t minAngleWrtITSModulePlanes,
				   Float_t minMom,Float_t maxMom,
				   Float_t minAbsSinPhi,Float_t maxAbsSinPhi,
			     	   Float_t minSinTheta,Float_t maxSinTheta)
{
  // Analyzes and filters ESD tracks
  // Merges inward and outward tracks in one single track
  // Stores the selected track space points
  // into the output file

  if (!fESDChain) return;

  AliESDEvent *esd = new AliESDEvent();
  esd->ReadFromTree(fESDChain);
  AliESDfriend *esdf = 0; 
  fESDChain->SetBranchStatus("ESDfriend*",1);
  fESDChain->SetBranchAddress("ESDfriend.",&esdf);

  // Open the output file
  if (fPointsFilename.IsNull()) {
    AliWarning("Incorrect output filename!");
    return;
  }

  TFile *pointsFile = TFile::Open(fPointsFilename,"RECREATE");
  if (!pointsFile || !pointsFile->IsOpen()) {
    AliWarning(Form("Can't open %s !",fPointsFilename.Data()));
    return;
  }

  TTree *pointsTree = new TTree("spTree", "Tree with track space point arrays");
  const AliTrackPointArray *array = 0;
  AliTrackPointArray *array2 = 0;
  pointsTree->Branch("SP","AliTrackPointArray", &array2);

  Int_t ievent = 0;
  while (fESDChain->GetEntry(ievent++)) {
    if (!esd) break;

    esd->SetESDfriend(esdf); //Attach the friend to the ESD

    Int_t ntracks = esd->GetNumberOfTracks();
    if(ntracks<2) continue;
    Int_t *goodtracksArray = new Int_t[ntracks];
    Float_t *phiArray = new Float_t[ntracks];
    Float_t *thetaArray = new Float_t[ntracks];
    Int_t ngt=0;
    for (Int_t itrack=0; itrack < ntracks; itrack++) {
      AliESDtrack * track = esd->GetTrack(itrack);
      if (!track) continue;

      if(track->GetNcls(0) < minITSpts) continue;
      Float_t phi = track->GetAlpha()+TMath::ASin(track->GetSnp());
      Float_t theta = 0.5*TMath::Pi()-TMath::ATan(track->GetTgl());
      if(cuts) {
	if(track->GetP()<minMom || track->GetP()>maxMom) continue;
	Float_t abssinphi = TMath::Abs(TMath::Sin(phi));
	if(abssinphi<minAbsSinPhi || abssinphi>maxAbsSinPhi) continue;
	Float_t sintheta = TMath::Sin(theta);
	if(sintheta<minSinTheta || sintheta>maxSinTheta) continue;
      } 
      goodtracksArray[ngt]=itrack;
      phiArray[ngt]=phi;
      thetaArray[ngt]=theta;
      ngt++;
    }

    if(ngt<2) {
      delete [] goodtracksArray; goodtracksArray=0;
      delete [] phiArray; phiArray=0;
      delete [] thetaArray; thetaArray=0;
      continue;
    }

    // check matching of the two tracks from the muon
    Float_t min = 10000000.;
    Int_t good1 = -1, good2 = -1;
    for(Int_t itr1=0; itr1<ngt-1; itr1++) {
      for(Int_t itr2=itr1+1; itr2<ngt; itr2++) {
	Float_t deltatheta = TMath::Abs(TMath::Pi()-thetaArray[itr1]-thetaArray[itr2]);
	if(deltatheta>maxMatchingAngle) continue;
	Float_t deltaphi = TMath::Abs(TMath::Abs(phiArray[itr1]-phiArray[itr2])-TMath::Pi());
	if(deltaphi>maxMatchingAngle) continue;
	//printf("%f  %f     %f  %f\n",deltaphi,deltatheta,thetaArray[itr1],thetaArray[itr2]);
	if(deltatheta+deltaphi<min) {
	  min=deltatheta+deltaphi;
	  good1 = goodtracksArray[itr1];
	  good2 = goodtracksArray[itr2];
	}
      }
    }

    delete [] goodtracksArray; goodtracksArray=0;
    delete [] phiArray; phiArray=0;
    delete [] thetaArray; thetaArray=0;

    if(good1<0) continue;

    AliESDtrack * track1 = esd->GetTrack(good1);
    AliESDtrack * track2 = esd->GetTrack(good2);

    AliTrackPoint point;
    Int_t ipt,volId,modId,layerId;
    Int_t jpt=0;
    Bool_t layerOK[6][2]; 
    for(Int_t l1=0;l1<6;l1++) for(Int_t l2=0;l2<2;l2++) layerOK[l1][l2]=kTRUE; 
    array = track1->GetTrackPointArray();
    for(ipt=0; ipt<array->GetNPoints(); ipt++) {
      array->GetPoint(point,ipt);
      if(onlyITS) {
	volId = point.GetVolumeID();
	layerId = AliGeomManager::VolUIDToLayer(volId,modId);
	if(layerId>6) continue;
	// check minAngleWrtITSModulePlanes
	if(cuts) {
	  Double_t p[3]; track1->GetDirection(p);
	  TVector3 pvec(p[0],p[1],p[2]);
	  Double_t rot[9]; AliGeomManager::GetOrigRotation(volId,rot);
	  TVector3 normvec(rot[1],rot[4],rot[7]);
	  Double_t angle = pvec.Angle(normvec);
	  if(angle>0.5*TMath::Pi()) angle = TMath::Pi()-angle;
	  angle = 0.5*TMath::Pi()-angle;
	  if(angle<minAngleWrtITSModulePlanes) {
	    layerOK[layerId-1][0]=kFALSE;
	    continue;
	  }
	}
      }
      jpt++;
    }
    array = track2->GetTrackPointArray();
    for(ipt=0; ipt<array->GetNPoints(); ipt++) {
      array->GetPoint(point,ipt);
      if(onlyITS) {
	volId = point.GetVolumeID();
	layerId = AliGeomManager::VolUIDToLayer(volId,modId);
	if(layerId>6) continue;
	// check minAngleWrtITSModulePlanes
	if(cuts) {
	  Double_t p[3]; track2->GetDirection(p);
	  TVector3 pvec(p[0],p[1],p[2]);
	  Double_t rot[9]; AliGeomManager::GetOrigRotation(volId,rot);
	  TVector3 normvec(rot[1],rot[4],rot[7]);
	  Double_t angle = pvec.Angle(normvec);
	  if(angle>0.5*TMath::Pi()) angle = TMath::Pi()-angle;
	  angle = 0.5*TMath::Pi()-angle;
	  if(angle<minAngleWrtITSModulePlanes) {
	    layerOK[layerId-1][0]=kFALSE;
	    continue;
	  }
	}
      }
      jpt++;
    }

    if(jpt < 2*minITSpts) continue;
    array2 = new AliTrackPointArray(jpt);
    jpt=0;
    array = track1->GetTrackPointArray();
    for(ipt=0; ipt<array->GetNPoints(); ipt++) {
      array->GetPoint(point,ipt);
      if(onlyITS) {
	volId = point.GetVolumeID();
	layerId = AliGeomManager::VolUIDToLayer(volId,modId);
	if(layerId>6 || !layerOK[layerId-1][0]) continue;
      }
      array2->AddPoint(jpt,&point);
      jpt++;
    }
    array = track2->GetTrackPointArray();
    for(ipt=0; ipt<array->GetNPoints(); ipt++) {
      array->GetPoint(point,ipt);
      if(onlyITS) {
	volId = point.GetVolumeID();
	layerId = AliGeomManager::VolUIDToLayer(volId,modId);
	if(layerId>6 || !layerOK[layerId-1][1]) continue;
      }
      array2->AddPoint(jpt,&point);
      jpt++;
    }

    pointsTree->Fill();
  }

  if (!pointsTree->Write()) {
    AliWarning("Can't write the tree with track point arrays!");
    return;
  }

  pointsFile->Close();
  return;
}

//______________________________________________________________________________
void AliAlignmentTracks::ProcessESD(TSelector *selector)
{
  AliWarning(Form("ESD processing based on selector is not yet implemented (%p) !",selector));
}

//______________________________________________________________________________
void AliAlignmentTracks::BuildIndex()
{
  // Build index of points tree entries
  // Used for access based on the volume IDs
  if (fIsIndexBuilt) return;

  fIsIndexBuilt = kTRUE;

  // Dummy object is created in order
  // to initialize the volume paths
  AliAlignObjParams alobj;

  fPointsFile = TFile::Open(fPointsFilename);
  if (!fPointsFile || !fPointsFile->IsOpen()) {
    AliWarning(Form("Can't open %s !",fPointsFilename.Data()));
    return;
  }
  
  //  AliTrackPointArray* array = new AliTrackPointArray;
  AliTrackPointArray* array = 0;
  fPointsTree = (TTree*) fPointsFile->Get("spTree");
  if (!fPointsTree) {
    AliWarning("No pointsTree found!");
    return;
  }
  fPointsTree->SetBranchAddress("SP", &array);

  Int_t nArrays = (Int_t)fPointsTree->GetEntries();
  for (Int_t iArray = 0; iArray < nArrays; iArray++)
    {
      fPointsTree->GetEvent(iArray);
      if (!array) continue;
      for (Int_t ipoint = 0; ipoint < array->GetNPoints(); ipoint++) {
	UShort_t volId = array->GetVolumeID()[ipoint];
	// check if the volId is valid
	if (!AliGeomManager::SymName(volId)) {
	  AliError(Form("The volume id %d has no default volume name !",
			volId));
	  continue;
	}
	Int_t modId;
	Int_t layerId = AliGeomManager::VolUIDToLayer(volId,modId)
	              - AliGeomManager::kFirstLayer;
	if (!fArrayIndex[layerId][modId]) {
	  //first entry for this volume
	  fArrayIndex[layerId][modId] = new TArrayI(1000);
	}
	else {
	  Int_t size = fArrayIndex[layerId][modId]->GetSize();
	  // If needed allocate new size
	  if (fLastIndex[layerId][modId] >= size)
	    fArrayIndex[layerId][modId]->Set(size + 1000);
	}

	// Check if the index is already filled
	Bool_t fillIndex = kTRUE;
	if (fLastIndex[layerId][modId] != 0) {
	  if ((*fArrayIndex[layerId][modId])[fLastIndex[layerId][modId]-1] == iArray)
	    fillIndex = kFALSE;
	}
	// Fill the index array and store last filled index
	if (fillIndex) {
	  (*fArrayIndex[layerId][modId])[fLastIndex[layerId][modId]] = iArray;
	  fLastIndex[layerId][modId]++;
	}
      }
    }

}

//______________________________________________________________________________
void AliAlignmentTracks::InitIndex()
{
  // Initialize the index arrays
  Int_t nLayers = AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer;
  fLastIndex = new Int_t*[nLayers];
  fArrayIndex = new TArrayI**[nLayers];
  for (Int_t iLayer = 0; iLayer < (AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer); iLayer++) {
    fLastIndex[iLayer] = new Int_t[AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer)];
    fArrayIndex[iLayer] = new TArrayI*[AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer)];
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer); iModule++) {
      fLastIndex[iLayer][iModule] = 0;
      fArrayIndex[iLayer][iModule] = 0;
    }
  }
}

//______________________________________________________________________________
void AliAlignmentTracks::ResetIndex()
{
  // Reset the value of the last filled index
  // Do not realocate memory

  fIsIndexBuilt = kFALSE;
  
  for (Int_t iLayer = 0; iLayer < AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer; iLayer++) {
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer); iModule++) {
      fLastIndex[iLayer][iModule] = 0;
    }
  }
}

//______________________________________________________________________________
void AliAlignmentTracks::DeleteIndex()
{
  // Delete the index arrays
  // Called by the destructor
  for (Int_t iLayer = 0; iLayer < (AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer); iLayer++) {
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer); iModule++) {
      if (fArrayIndex[iLayer][iModule]) {
	delete fArrayIndex[iLayer][iModule];
	fArrayIndex[iLayer][iModule] = 0;
      }
    }
    delete [] fLastIndex[iLayer];
    delete [] fArrayIndex[iLayer];
  }
  delete [] fLastIndex;
  delete [] fArrayIndex;
}

//______________________________________________________________________________
Bool_t AliAlignmentTracks::ReadAlignObjs(const char *alignObjFileName, const char* arrayName)
{
  // Read alignment object from a file: update the alignobj already present with the one in the file
  // To be replaced by a call to CDB
  
  if(gSystem->AccessPathName(alignObjFileName,kFileExists)){
    printf("Wrong AlignObjs File Name \n");
    return kFALSE;
  } 

  TFile *fRealign=TFile::Open(alignObjFileName);
  if (!fRealign || !fRealign->IsOpen()) {
    AliError(Form("Could not open Align Obj File file %s !",alignObjFileName));
    return kFALSE;
  }  
  printf("Getting TClonesArray \n");
  TClonesArray *clnarray=(TClonesArray*)fRealign->Get(arrayName);
  Int_t size=clnarray->GetSize();
  UShort_t volid;

  for(Int_t ivol=0;ivol<size;ivol++){
    AliAlignObjParams *a=(AliAlignObjParams*)clnarray->At(ivol);
    volid=a->GetVolUID();
    Int_t iModule;
    AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);
    if(iLayer<AliGeomManager::kFirstLayer||iLayer>AliGeomManager::kSSD2)continue;
    printf("Updating volume: %d ,layer: %d module: %d \n",volid,iLayer,iModule);
    *fAlignObjs[iLayer-AliGeomManager::kFirstLayer][iModule] *= *a;
  }
 
  delete clnarray;
  fRealign->Close();
  return kTRUE;
}

//______________________________________________________________________________
void AliAlignmentTracks::InitAlignObjs()
{
  // Initialize the alignment objects array
  Int_t nLayers = AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer;
  fAlignObjs = new AliAlignObj**[nLayers];
  for (Int_t iLayer = 0; iLayer < (AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer); iLayer++) {
    fAlignObjs[iLayer] = new AliAlignObj*[AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer)];
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer); iModule++) {
      UShort_t volid = AliGeomManager::LayerToVolUID(iLayer+ AliGeomManager::kFirstLayer,iModule);
      fAlignObjs[iLayer][iModule] = new AliAlignObjParams(AliGeomManager::SymName(volid),volid,0,0,0,0,0,0,kTRUE);
    }
  }
}

//______________________________________________________________________________
void AliAlignmentTracks::ResetAlignObjs()
{
  // Reset the alignment objects array
  for (Int_t iLayer = 0; iLayer < (AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer); iLayer++) {
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer); iModule++)
      fAlignObjs[iLayer][iModule]->SetPars(0,0,0,0,0,0);
  }
}

//______________________________________________________________________________
void AliAlignmentTracks::DeleteAlignObjs()
{
  // Delete the alignment objects array
  for (Int_t iLayer = 0; iLayer < (AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer); iLayer++) {
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer); iModule++)
      if (fAlignObjs[iLayer][iModule])
	delete fAlignObjs[iLayer][iModule];
    delete [] fAlignObjs[iLayer];
  }
  delete [] fAlignObjs;
  fAlignObjs = 0;
}

Bool_t AliAlignmentTracks::AlignDetector(AliGeomManager::ELayerID firstLayer,
					 AliGeomManager::ELayerID lastLayer,
					 AliGeomManager::ELayerID layerRangeMin,
					 AliGeomManager::ELayerID layerRangeMax,
					 Int_t iterations)
{
  // Align detector volumes within
  // a given layer range
  // (could be whole detector).
  // Tracks are fitted only within
  // the range defined by the user.
  Int_t nModules = 0;
  for (Int_t iLayer = firstLayer; iLayer <= lastLayer; iLayer++)
    nModules += AliGeomManager::LayerSize(iLayer);
  TArrayI volIds(nModules);

  Int_t modnum = 0;
  for (Int_t iLayer = firstLayer; iLayer <= lastLayer; iLayer++) {
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer); iModule++) {
      UShort_t volId = AliGeomManager::LayerToVolUID(iLayer,iModule);
      volIds.AddAt(volId,modnum);
      modnum++;
    }
  }

  Bool_t result = kFALSE;
  while (iterations > 0) {
    if (!(result = AlignVolumes(&volIds,0x0,layerRangeMin,layerRangeMax))) break;
    iterations--;
  }
  return result;
}

//______________________________________________________________________________
Bool_t AliAlignmentTracks::AlignLayer(AliGeomManager::ELayerID layer,
				      AliGeomManager::ELayerID layerRangeMin,
				      AliGeomManager::ELayerID layerRangeMax,
				      Int_t iterations)
{
  // Align detector volumes within
  // a given layer.
  // Tracks are fitted only within
  // the range defined by the user.
  Int_t nModules = AliGeomManager::LayerSize(layer);
  TArrayI volIds(nModules);
  for (Int_t iModule = 0; iModule < nModules; iModule++) {
    UShort_t volId = AliGeomManager::LayerToVolUID(layer,iModule);
    volIds.AddAt(volId,iModule);
  }

  Bool_t result = kFALSE;
  while (iterations > 0) {
    if (!(result = AlignVolumes(&volIds,0x0,layerRangeMin,layerRangeMax))) break;
    iterations--;
  }
  return result;
}

//______________________________________________________________________________
Bool_t AliAlignmentTracks::AlignVolume(UShort_t volId, UShort_t volIdFit,
				     Int_t iterations)
{
  // Align single detector volume to
  // another volume.
  // Tracks are fitted only within
  // the second volume.
  TArrayI volIds(1);
  volIds.AddAt(volId,0);
  TArrayI volIdsFit(1);
  volIdsFit.AddAt(volIdFit,0);

  Bool_t result = kFALSE;
  while (iterations > 0) {
    if (!(result = AlignVolumes(&volIds,&volIdsFit))) break;
    iterations--;
  }
  return result;
}

//______________________________________________________________________________
Bool_t AliAlignmentTracks::AlignVolumes(const TArrayI *volids, const TArrayI *volidsfit,
				     AliGeomManager::ELayerID layerRangeMin,
				     AliGeomManager::ELayerID layerRangeMax,
				     Int_t iterations)
{
  // Align a set of detector volumes.
  // Tracks are fitted only within
  // the range defined by the user
  // (by layerRangeMin and layerRangeMax)
  // or within the set of volidsfit
  // Repeat the procedure 'iterations' times

  Int_t nVolIds = volids->GetSize();
  if (nVolIds == 0) {
    AliError("Volume IDs array is empty!");
    return kFALSE;
  }
 
  // Load only the tracks with at least one
  // space point in the set of volume (volids)
  BuildIndex();
  AliTrackPointArray **points;
  Int_t pointsdim;
  // Start the iterations
  Bool_t result = kFALSE;
  while (iterations > 0) {
    Int_t nArrays = LoadPoints(volids, points,pointsdim);
    if (nArrays == 0) {
      UnloadPoints(pointsdim, points);
      return kFALSE;
    }

    AliTrackResiduals *minimizer = CreateMinimizer();
    minimizer->SetNTracks(nArrays);
    minimizer->InitAlignObj();
    AliTrackFitter *fitter = CreateFitter();
    for (Int_t iArray = 0; iArray < nArrays; iArray++) {
      if (!points[iArray]) continue;
      fitter->SetTrackPointArray(points[iArray], kFALSE);
      if (fitter->Fit(volids,volidsfit,layerRangeMin,layerRangeMax) == kFALSE) continue;
      AliTrackPointArray *pVolId,*pTrack;
      fitter->GetTrackResiduals(pVolId,pTrack);
      minimizer->AddTrackPointArrays(pVolId,pTrack);
    }
    if (!(result = minimizer->Minimize())) {
      UnloadPoints(pointsdim, points);
      break;
    }

    // Update the alignment object(s)
    if (fDoUpdate) for (Int_t iVolId = 0; iVolId < nVolIds; iVolId++) {
      UShort_t volid = (*volids)[iVolId];
      Int_t iModule;
      AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);
      AliAlignObj *alignObj = fAlignObjs[iLayer-AliGeomManager::kFirstLayer][iModule];      
      *alignObj *= *minimizer->GetAlignObj();
      if(iterations==1)alignObj->Print("");
    }

    UnloadPoints(pointsdim, points);
    
    iterations--;
  }
  return result;
}
  
//______________________________________________________________________________
Int_t AliAlignmentTracks::LoadPoints(const TArrayI *volids, AliTrackPointArray** &points,Int_t &pointsdim)
{
  // Load track point arrays with at least
  // one space point in a given set of detector
  // volumes (array volids).
  // Use the already created tree index for
  // fast access.

  if (!fPointsTree) {
    AliError("Tree with the space point arrays not initialized!");
    points = 0;
    return 0;
  }

  Int_t nVolIds = volids->GetSize();
  if (nVolIds == 0) {
    AliError("Volume IDs array is empty!");
    points = 0;
    return 0;
  }

  Int_t nArrays = 0;
  for (Int_t iVolId = 0; iVolId < nVolIds; iVolId++) {
    UShort_t volid = (*volids)[iVolId];
    Int_t iModule;
    AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);

    // In case of empty index
    if (fLastIndex[iLayer-AliGeomManager::kFirstLayer][iModule] == 0) {
      AliWarning(Form("There are no space-points belonging to the volume which is to be aligned (Volume ID =%d)!",volid));
      continue;
    }
    nArrays += fLastIndex[iLayer-AliGeomManager::kFirstLayer][iModule];
  }

  if (nArrays == 0) {
    AliError("There are no space-points belonging to all of the volumes which are to be aligned!");
    points = 0x0;
    return 0;
  }

  AliTrackPointArray* array = 0;
  fPointsTree->SetBranchAddress("SP", &array);

  // Allocate the pointer to the space-point arrays
  pointsdim=nArrays;
  points = new AliTrackPointArray*[nArrays];
  for (Int_t i = 0; i < nArrays; i++) points[i] = 0x0;

  // Init the array used to flag already loaded tree entries
  Bool_t *indexUsed = new Bool_t[(UInt_t)fPointsTree->GetEntries()];
  for (Int_t i = 0; i < fPointsTree->GetEntries(); i++)
    indexUsed[i] = kFALSE;

  // Start the loop over the volume ids
  Int_t iArray = 0;
  for (Int_t iVolId = 0; iVolId < nVolIds; iVolId++) {
    UShort_t volid = (*volids)[iVolId];
    Int_t iModule;
    AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);

    Int_t nArraysId = fLastIndex[iLayer-AliGeomManager::kFirstLayer][iModule];
    TArrayI *index = fArrayIndex[iLayer-AliGeomManager::kFirstLayer][iModule];
    AliTrackPoint p;

    for (Int_t iArrayId = 0; iArrayId < nArraysId; iArrayId++) {

      // Get tree entry
      Int_t entry = (*index)[iArrayId];
      if (indexUsed[entry] == kTRUE) {
	nArrays--;
	continue;
      }
      fPointsTree->GetEvent(entry);
      if (!array) {
	AliWarning("Wrong space point array index!");
	continue;
      }
      indexUsed[entry] = kTRUE;

      // Get the space-point array
      Int_t nPoints = array->GetNPoints();
      points[iArray] = new AliTrackPointArray(nPoints);
      for (Int_t iPoint = 0; iPoint < nPoints; iPoint++) {
	array->GetPoint(p,iPoint);
	Int_t modnum;
	AliGeomManager::ELayerID layer = AliGeomManager::VolUIDToLayer(p.GetVolumeID(),modnum);
	// check if the layer id is valid
	if ((layer < AliGeomManager::kFirstLayer) ||
	    (layer >= AliGeomManager::kLastLayer)) {
	  AliError(Form("Layer index is invalid: %d (%d -> %d) !",
			layer,AliGeomManager::kFirstLayer,AliGeomManager::kLastLayer-1));
	  continue;
	}
	if ((modnum >= AliGeomManager::LayerSize(layer)) ||
	    (modnum < 0)) {
	  AliError(Form("Module number inside layer %d is invalid: %d (0 -> %d)",
			layer,modnum,AliGeomManager::LayerSize(layer)));
	  continue;
	}

	// Misalignment is introduced here
	// Switch it off in case of real
	// alignment job!
	if (fMisalignObjs) {
	  AliAlignObj *misalignObj = fMisalignObjs[layer-AliGeomManager::kFirstLayer][modnum];
	  if (misalignObj)
	    misalignObj->Transform(p);
	}
	// End of misalignment


	AliAlignObj *alignObj = fAlignObjs[layer-AliGeomManager::kFirstLayer][modnum];
	UShort_t volp=p.GetVolumeID();
	Bool_t found=kFALSE;
	if(fCovIsUsed){
	  for (Int_t iVol = 0; iVol < nVolIds; iVol++) {
	    UShort_t vol = (*volids)[iVol];
	    if(volp==vol){
	      alignObj->Transform(p,kFALSE);
	      found=kTRUE;
	      break;
	    }
	  }
	}
	if(!found)alignObj->Transform(p,fCovIsUsed);
	points[iArray]->AddPoint(iPoint,&p);
      }
      iArray++;
    }
  }


  delete [] indexUsed;

  return nArrays;
}

//______________________________________________________________________________
void AliAlignmentTracks::UnloadPoints(Int_t n, AliTrackPointArray **points)
{
  // Unload track point arrays for a given
  // detector volume
  for (Int_t iArray = 0; iArray < n; iArray++)
    delete points[iArray];
  delete [] points;
}

//______________________________________________________________________________
AliTrackFitter *AliAlignmentTracks::CreateFitter()
{
  // Check if the user has already supplied
  // a track fitter object.
  // If not, create a default one.
  if (!fTrackFitter)
    fTrackFitter = new AliTrackFitterRieman;

  return fTrackFitter;
}

//______________________________________________________________________________
AliTrackResiduals *AliAlignmentTracks::CreateMinimizer()
{
  // Check if the user has already supplied
  // a track residuals minimizer object.
  // If not, create a default one.
  if (!fMinimizer)
    fMinimizer = new AliTrackResidualsChi2;

  return fMinimizer;
}

//______________________________________________________________________________
Bool_t AliAlignmentTracks::Misalign(const char *misalignObjFileName, const char* arrayName)
{
  // The method reads from a file a set of AliAlignObj which are
  // then used to apply misalignments directly on the track
  // space-points. The method is supposed to be used only for
  // fast development and debugging of the alignment algorithms.
  // Be careful not to use it in the case of 'real' alignment
  // scenario since it will bias the results.

  // Initialize the misalignment objects array
  Int_t nLayers = AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer;
  fMisalignObjs = new AliAlignObj**[nLayers];
  for (Int_t iLayer = 0; iLayer < (AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer); iLayer++) {
    fMisalignObjs[iLayer] = new AliAlignObj*[AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer)];
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer); iModule++)
      fMisalignObjs[iLayer][iModule] = 0x0;
  }

  // Open the misliagnment file and load the array with
  // misalignment objects
  TFile* inFile = TFile::Open(misalignObjFileName,"READ");
  if (!inFile || !inFile->IsOpen()) {
    AliError(Form("Could not open misalignment file %s !",misalignObjFileName));
    return kFALSE;
  }

  TClonesArray* array = ((TClonesArray*) inFile->Get(arrayName));
  if (!array) {
    AliError(Form("Could not find misalignment array %s in the file %s !",arrayName,misalignObjFileName));
    inFile->Close();
    return kFALSE;
  }
  inFile->Close();

  // Store the misalignment objects for further usage  
  Int_t nObjs = array->GetEntriesFast();
  AliGeomManager::ELayerID layerId; // volume layer
  Int_t modId; // volume ID inside the layer
  for(Int_t i=0; i<nObjs; i++)
    {
      AliAlignObj* alObj = (AliAlignObj*)array->UncheckedAt(i);
      alObj->GetVolUID(layerId,modId);
      if(layerId<AliGeomManager::kFirstLayer) {
	AliWarning(Form("Alignment object is ignored: %s",alObj->GetSymName()));
	continue;
      }
      fMisalignObjs[layerId-AliGeomManager::kFirstLayer][modId] = alObj;
    }
  return kTRUE;
}


//________________________________________________
void AliAlignmentTracks::WriteRealignObjArray(TString outfilename,AliGeomManager::ELayerID layerRangeMin,AliGeomManager::ELayerID layerRangeMax){
  
  Int_t last=0;
  TClonesArray *clonesArray=new TClonesArray("AliAlignObjParams",2200);
  TClonesArray &alo=*clonesArray;
  for (Int_t iLayer = layerRangeMin-AliGeomManager::kFirstLayer; iLayer <= (layerRangeMax - AliGeomManager::kFirstLayer);iLayer++) {
  
    for (Int_t iModule = 0; iModule < AliGeomManager::LayerSize(iLayer + AliGeomManager::kFirstLayer); iModule++) {
     
      AliAlignObj *alignObj = fAlignObjs[iLayer][iModule]; 
      new(alo[last])AliAlignObjParams(*alignObj);
      last++;
    }
  }
  TFile *file=new TFile(outfilename.Data(),"RECREATE");
  file->cd();
 
  alo.Write("ITSAlignObjs",TObject::kSingleKey);
  file->Close();    
 
     
  delete clonesArray;
  return;
}
 AliAlignmentTracks.cxx:1
 AliAlignmentTracks.cxx:2
 AliAlignmentTracks.cxx:3
 AliAlignmentTracks.cxx:4
 AliAlignmentTracks.cxx:5
 AliAlignmentTracks.cxx:6
 AliAlignmentTracks.cxx:7
 AliAlignmentTracks.cxx:8
 AliAlignmentTracks.cxx:9
 AliAlignmentTracks.cxx:10
 AliAlignmentTracks.cxx:11
 AliAlignmentTracks.cxx:12
 AliAlignmentTracks.cxx:13
 AliAlignmentTracks.cxx:14
 AliAlignmentTracks.cxx:15
 AliAlignmentTracks.cxx:16
 AliAlignmentTracks.cxx:17
 AliAlignmentTracks.cxx:18
 AliAlignmentTracks.cxx:19
 AliAlignmentTracks.cxx:20
 AliAlignmentTracks.cxx:21
 AliAlignmentTracks.cxx:22
 AliAlignmentTracks.cxx:23
 AliAlignmentTracks.cxx:24
 AliAlignmentTracks.cxx:25
 AliAlignmentTracks.cxx:26
 AliAlignmentTracks.cxx:27
 AliAlignmentTracks.cxx:28
 AliAlignmentTracks.cxx:29
 AliAlignmentTracks.cxx:30
 AliAlignmentTracks.cxx:31
 AliAlignmentTracks.cxx:32
 AliAlignmentTracks.cxx:33
 AliAlignmentTracks.cxx:34
 AliAlignmentTracks.cxx:35
 AliAlignmentTracks.cxx:36
 AliAlignmentTracks.cxx:37
 AliAlignmentTracks.cxx:38
 AliAlignmentTracks.cxx:39
 AliAlignmentTracks.cxx:40
 AliAlignmentTracks.cxx:41
 AliAlignmentTracks.cxx:42
 AliAlignmentTracks.cxx:43
 AliAlignmentTracks.cxx:44
 AliAlignmentTracks.cxx:45
 AliAlignmentTracks.cxx:46
 AliAlignmentTracks.cxx:47
 AliAlignmentTracks.cxx:48
 AliAlignmentTracks.cxx:49
 AliAlignmentTracks.cxx:50
 AliAlignmentTracks.cxx:51
 AliAlignmentTracks.cxx:52
 AliAlignmentTracks.cxx:53
 AliAlignmentTracks.cxx:54
 AliAlignmentTracks.cxx:55
 AliAlignmentTracks.cxx:56
 AliAlignmentTracks.cxx:57
 AliAlignmentTracks.cxx:58
 AliAlignmentTracks.cxx:59
 AliAlignmentTracks.cxx:60
 AliAlignmentTracks.cxx:61
 AliAlignmentTracks.cxx:62
 AliAlignmentTracks.cxx:63
 AliAlignmentTracks.cxx:64
 AliAlignmentTracks.cxx:65
 AliAlignmentTracks.cxx:66
 AliAlignmentTracks.cxx:67
 AliAlignmentTracks.cxx:68
 AliAlignmentTracks.cxx:69
 AliAlignmentTracks.cxx:70
 AliAlignmentTracks.cxx:71
 AliAlignmentTracks.cxx:72
 AliAlignmentTracks.cxx:73
 AliAlignmentTracks.cxx:74
 AliAlignmentTracks.cxx:75
 AliAlignmentTracks.cxx:76
 AliAlignmentTracks.cxx:77
 AliAlignmentTracks.cxx:78
 AliAlignmentTracks.cxx:79
 AliAlignmentTracks.cxx:80
 AliAlignmentTracks.cxx:81
 AliAlignmentTracks.cxx:82
 AliAlignmentTracks.cxx:83
 AliAlignmentTracks.cxx:84
 AliAlignmentTracks.cxx:85
 AliAlignmentTracks.cxx:86
 AliAlignmentTracks.cxx:87
 AliAlignmentTracks.cxx:88
 AliAlignmentTracks.cxx:89
 AliAlignmentTracks.cxx:90
 AliAlignmentTracks.cxx:91
 AliAlignmentTracks.cxx:92
 AliAlignmentTracks.cxx:93
 AliAlignmentTracks.cxx:94
 AliAlignmentTracks.cxx:95
 AliAlignmentTracks.cxx:96
 AliAlignmentTracks.cxx:97
 AliAlignmentTracks.cxx:98
 AliAlignmentTracks.cxx:99
 AliAlignmentTracks.cxx:100
 AliAlignmentTracks.cxx:101
 AliAlignmentTracks.cxx:102
 AliAlignmentTracks.cxx:103
 AliAlignmentTracks.cxx:104
 AliAlignmentTracks.cxx:105
 AliAlignmentTracks.cxx:106
 AliAlignmentTracks.cxx:107
 AliAlignmentTracks.cxx:108
 AliAlignmentTracks.cxx:109
 AliAlignmentTracks.cxx:110
 AliAlignmentTracks.cxx:111
 AliAlignmentTracks.cxx:112
 AliAlignmentTracks.cxx:113
 AliAlignmentTracks.cxx:114
 AliAlignmentTracks.cxx:115
 AliAlignmentTracks.cxx:116
 AliAlignmentTracks.cxx:117
 AliAlignmentTracks.cxx:118
 AliAlignmentTracks.cxx:119
 AliAlignmentTracks.cxx:120
 AliAlignmentTracks.cxx:121
 AliAlignmentTracks.cxx:122
 AliAlignmentTracks.cxx:123
 AliAlignmentTracks.cxx:124
 AliAlignmentTracks.cxx:125
 AliAlignmentTracks.cxx:126
 AliAlignmentTracks.cxx:127
 AliAlignmentTracks.cxx:128
 AliAlignmentTracks.cxx:129
 AliAlignmentTracks.cxx:130
 AliAlignmentTracks.cxx:131
 AliAlignmentTracks.cxx:132
 AliAlignmentTracks.cxx:133
 AliAlignmentTracks.cxx:134
 AliAlignmentTracks.cxx:135
 AliAlignmentTracks.cxx:136
 AliAlignmentTracks.cxx:137
 AliAlignmentTracks.cxx:138
 AliAlignmentTracks.cxx:139
 AliAlignmentTracks.cxx:140
 AliAlignmentTracks.cxx:141
 AliAlignmentTracks.cxx:142
 AliAlignmentTracks.cxx:143
 AliAlignmentTracks.cxx:144
 AliAlignmentTracks.cxx:145
 AliAlignmentTracks.cxx:146
 AliAlignmentTracks.cxx:147
 AliAlignmentTracks.cxx:148
 AliAlignmentTracks.cxx:149
 AliAlignmentTracks.cxx:150
 AliAlignmentTracks.cxx:151
 AliAlignmentTracks.cxx:152
 AliAlignmentTracks.cxx:153
 AliAlignmentTracks.cxx:154
 AliAlignmentTracks.cxx:155
 AliAlignmentTracks.cxx:156
 AliAlignmentTracks.cxx:157
 AliAlignmentTracks.cxx:158
 AliAlignmentTracks.cxx:159
 AliAlignmentTracks.cxx:160
 AliAlignmentTracks.cxx:161
 AliAlignmentTracks.cxx:162
 AliAlignmentTracks.cxx:163
 AliAlignmentTracks.cxx:164
 AliAlignmentTracks.cxx:165
 AliAlignmentTracks.cxx:166
 AliAlignmentTracks.cxx:167
 AliAlignmentTracks.cxx:168
 AliAlignmentTracks.cxx:169
 AliAlignmentTracks.cxx:170
 AliAlignmentTracks.cxx:171
 AliAlignmentTracks.cxx:172
 AliAlignmentTracks.cxx:173
 AliAlignmentTracks.cxx:174
 AliAlignmentTracks.cxx:175
 AliAlignmentTracks.cxx:176
 AliAlignmentTracks.cxx:177
 AliAlignmentTracks.cxx:178
 AliAlignmentTracks.cxx:179
 AliAlignmentTracks.cxx:180
 AliAlignmentTracks.cxx:181
 AliAlignmentTracks.cxx:182
 AliAlignmentTracks.cxx:183
 AliAlignmentTracks.cxx:184
 AliAlignmentTracks.cxx:185
 AliAlignmentTracks.cxx:186
 AliAlignmentTracks.cxx:187
 AliAlignmentTracks.cxx:188
 AliAlignmentTracks.cxx:189
 AliAlignmentTracks.cxx:190
 AliAlignmentTracks.cxx:191
 AliAlignmentTracks.cxx:192
 AliAlignmentTracks.cxx:193
 AliAlignmentTracks.cxx:194
 AliAlignmentTracks.cxx:195
 AliAlignmentTracks.cxx:196
 AliAlignmentTracks.cxx:197
 AliAlignmentTracks.cxx:198
 AliAlignmentTracks.cxx:199
 AliAlignmentTracks.cxx:200
 AliAlignmentTracks.cxx:201
 AliAlignmentTracks.cxx:202
 AliAlignmentTracks.cxx:203
 AliAlignmentTracks.cxx:204
 AliAlignmentTracks.cxx:205
 AliAlignmentTracks.cxx:206
 AliAlignmentTracks.cxx:207
 AliAlignmentTracks.cxx:208
 AliAlignmentTracks.cxx:209
 AliAlignmentTracks.cxx:210
 AliAlignmentTracks.cxx:211
 AliAlignmentTracks.cxx:212
 AliAlignmentTracks.cxx:213
 AliAlignmentTracks.cxx:214
 AliAlignmentTracks.cxx:215
 AliAlignmentTracks.cxx:216
 AliAlignmentTracks.cxx:217
 AliAlignmentTracks.cxx:218
 AliAlignmentTracks.cxx:219
 AliAlignmentTracks.cxx:220
 AliAlignmentTracks.cxx:221
 AliAlignmentTracks.cxx:222
 AliAlignmentTracks.cxx:223
 AliAlignmentTracks.cxx:224
 AliAlignmentTracks.cxx:225
 AliAlignmentTracks.cxx:226
 AliAlignmentTracks.cxx:227
 AliAlignmentTracks.cxx:228
 AliAlignmentTracks.cxx:229
 AliAlignmentTracks.cxx:230
 AliAlignmentTracks.cxx:231
 AliAlignmentTracks.cxx:232
 AliAlignmentTracks.cxx:233
 AliAlignmentTracks.cxx:234
 AliAlignmentTracks.cxx:235
 AliAlignmentTracks.cxx:236
 AliAlignmentTracks.cxx:237
 AliAlignmentTracks.cxx:238
 AliAlignmentTracks.cxx:239
 AliAlignmentTracks.cxx:240
 AliAlignmentTracks.cxx:241
 AliAlignmentTracks.cxx:242
 AliAlignmentTracks.cxx:243
 AliAlignmentTracks.cxx:244
 AliAlignmentTracks.cxx:245
 AliAlignmentTracks.cxx:246
 AliAlignmentTracks.cxx:247
 AliAlignmentTracks.cxx:248
 AliAlignmentTracks.cxx:249
 AliAlignmentTracks.cxx:250
 AliAlignmentTracks.cxx:251
 AliAlignmentTracks.cxx:252
 AliAlignmentTracks.cxx:253
 AliAlignmentTracks.cxx:254
 AliAlignmentTracks.cxx:255
 AliAlignmentTracks.cxx:256
 AliAlignmentTracks.cxx:257
 AliAlignmentTracks.cxx:258
 AliAlignmentTracks.cxx:259
 AliAlignmentTracks.cxx:260
 AliAlignmentTracks.cxx:261
 AliAlignmentTracks.cxx:262
 AliAlignmentTracks.cxx:263
 AliAlignmentTracks.cxx:264
 AliAlignmentTracks.cxx:265
 AliAlignmentTracks.cxx:266
 AliAlignmentTracks.cxx:267
 AliAlignmentTracks.cxx:268
 AliAlignmentTracks.cxx:269
 AliAlignmentTracks.cxx:270
 AliAlignmentTracks.cxx:271
 AliAlignmentTracks.cxx:272
 AliAlignmentTracks.cxx:273
 AliAlignmentTracks.cxx:274
 AliAlignmentTracks.cxx:275
 AliAlignmentTracks.cxx:276
 AliAlignmentTracks.cxx:277
 AliAlignmentTracks.cxx:278
 AliAlignmentTracks.cxx:279
 AliAlignmentTracks.cxx:280
 AliAlignmentTracks.cxx:281
 AliAlignmentTracks.cxx:282
 AliAlignmentTracks.cxx:283
 AliAlignmentTracks.cxx:284
 AliAlignmentTracks.cxx:285
 AliAlignmentTracks.cxx:286
 AliAlignmentTracks.cxx:287
 AliAlignmentTracks.cxx:288
 AliAlignmentTracks.cxx:289
 AliAlignmentTracks.cxx:290
 AliAlignmentTracks.cxx:291
 AliAlignmentTracks.cxx:292
 AliAlignmentTracks.cxx:293
 AliAlignmentTracks.cxx:294
 AliAlignmentTracks.cxx:295
 AliAlignmentTracks.cxx:296
 AliAlignmentTracks.cxx:297
 AliAlignmentTracks.cxx:298
 AliAlignmentTracks.cxx:299
 AliAlignmentTracks.cxx:300
 AliAlignmentTracks.cxx:301
 AliAlignmentTracks.cxx:302
 AliAlignmentTracks.cxx:303
 AliAlignmentTracks.cxx:304
 AliAlignmentTracks.cxx:305
 AliAlignmentTracks.cxx:306
 AliAlignmentTracks.cxx:307
 AliAlignmentTracks.cxx:308
 AliAlignmentTracks.cxx:309
 AliAlignmentTracks.cxx:310
 AliAlignmentTracks.cxx:311
 AliAlignmentTracks.cxx:312
 AliAlignmentTracks.cxx:313
 AliAlignmentTracks.cxx:314
 AliAlignmentTracks.cxx:315
 AliAlignmentTracks.cxx:316
 AliAlignmentTracks.cxx:317
 AliAlignmentTracks.cxx:318
 AliAlignmentTracks.cxx:319
 AliAlignmentTracks.cxx:320
 AliAlignmentTracks.cxx:321
 AliAlignmentTracks.cxx:322
 AliAlignmentTracks.cxx:323
 AliAlignmentTracks.cxx:324
 AliAlignmentTracks.cxx:325
 AliAlignmentTracks.cxx:326
 AliAlignmentTracks.cxx:327
 AliAlignmentTracks.cxx:328
 AliAlignmentTracks.cxx:329
 AliAlignmentTracks.cxx:330
 AliAlignmentTracks.cxx:331
 AliAlignmentTracks.cxx:332
 AliAlignmentTracks.cxx:333
 AliAlignmentTracks.cxx:334
 AliAlignmentTracks.cxx:335
 AliAlignmentTracks.cxx:336
 AliAlignmentTracks.cxx:337
 AliAlignmentTracks.cxx:338
 AliAlignmentTracks.cxx:339
 AliAlignmentTracks.cxx:340
 AliAlignmentTracks.cxx:341
 AliAlignmentTracks.cxx:342
 AliAlignmentTracks.cxx:343
 AliAlignmentTracks.cxx:344
 AliAlignmentTracks.cxx:345
 AliAlignmentTracks.cxx:346
 AliAlignmentTracks.cxx:347
 AliAlignmentTracks.cxx:348
 AliAlignmentTracks.cxx:349
 AliAlignmentTracks.cxx:350
 AliAlignmentTracks.cxx:351
 AliAlignmentTracks.cxx:352
 AliAlignmentTracks.cxx:353
 AliAlignmentTracks.cxx:354
 AliAlignmentTracks.cxx:355
 AliAlignmentTracks.cxx:356
 AliAlignmentTracks.cxx:357
 AliAlignmentTracks.cxx:358
 AliAlignmentTracks.cxx:359
 AliAlignmentTracks.cxx:360
 AliAlignmentTracks.cxx:361
 AliAlignmentTracks.cxx:362
 AliAlignmentTracks.cxx:363
 AliAlignmentTracks.cxx:364
 AliAlignmentTracks.cxx:365
 AliAlignmentTracks.cxx:366
 AliAlignmentTracks.cxx:367
 AliAlignmentTracks.cxx:368
 AliAlignmentTracks.cxx:369
 AliAlignmentTracks.cxx:370
 AliAlignmentTracks.cxx:371
 AliAlignmentTracks.cxx:372
 AliAlignmentTracks.cxx:373
 AliAlignmentTracks.cxx:374
 AliAlignmentTracks.cxx:375
 AliAlignmentTracks.cxx:376
 AliAlignmentTracks.cxx:377
 AliAlignmentTracks.cxx:378
 AliAlignmentTracks.cxx:379
 AliAlignmentTracks.cxx:380
 AliAlignmentTracks.cxx:381
 AliAlignmentTracks.cxx:382
 AliAlignmentTracks.cxx:383
 AliAlignmentTracks.cxx:384
 AliAlignmentTracks.cxx:385
 AliAlignmentTracks.cxx:386
 AliAlignmentTracks.cxx:387
 AliAlignmentTracks.cxx:388
 AliAlignmentTracks.cxx:389
 AliAlignmentTracks.cxx:390
 AliAlignmentTracks.cxx:391
 AliAlignmentTracks.cxx:392
 AliAlignmentTracks.cxx:393
 AliAlignmentTracks.cxx:394
 AliAlignmentTracks.cxx:395
 AliAlignmentTracks.cxx:396
 AliAlignmentTracks.cxx:397
 AliAlignmentTracks.cxx:398
 AliAlignmentTracks.cxx:399
 AliAlignmentTracks.cxx:400
 AliAlignmentTracks.cxx:401
 AliAlignmentTracks.cxx:402
 AliAlignmentTracks.cxx:403
 AliAlignmentTracks.cxx:404
 AliAlignmentTracks.cxx:405
 AliAlignmentTracks.cxx:406
 AliAlignmentTracks.cxx:407
 AliAlignmentTracks.cxx:408
 AliAlignmentTracks.cxx:409
 AliAlignmentTracks.cxx:410
 AliAlignmentTracks.cxx:411
 AliAlignmentTracks.cxx:412
 AliAlignmentTracks.cxx:413
 AliAlignmentTracks.cxx:414
 AliAlignmentTracks.cxx:415
 AliAlignmentTracks.cxx:416
 AliAlignmentTracks.cxx:417
 AliAlignmentTracks.cxx:418
 AliAlignmentTracks.cxx:419
 AliAlignmentTracks.cxx:420
 AliAlignmentTracks.cxx:421
 AliAlignmentTracks.cxx:422
 AliAlignmentTracks.cxx:423
 AliAlignmentTracks.cxx:424
 AliAlignmentTracks.cxx:425
 AliAlignmentTracks.cxx:426
 AliAlignmentTracks.cxx:427
 AliAlignmentTracks.cxx:428
 AliAlignmentTracks.cxx:429
 AliAlignmentTracks.cxx:430
 AliAlignmentTracks.cxx:431
 AliAlignmentTracks.cxx:432
 AliAlignmentTracks.cxx:433
 AliAlignmentTracks.cxx:434
 AliAlignmentTracks.cxx:435
 AliAlignmentTracks.cxx:436
 AliAlignmentTracks.cxx:437
 AliAlignmentTracks.cxx:438
 AliAlignmentTracks.cxx:439
 AliAlignmentTracks.cxx:440
 AliAlignmentTracks.cxx:441
 AliAlignmentTracks.cxx:442
 AliAlignmentTracks.cxx:443
 AliAlignmentTracks.cxx:444
 AliAlignmentTracks.cxx:445
 AliAlignmentTracks.cxx:446
 AliAlignmentTracks.cxx:447
 AliAlignmentTracks.cxx:448
 AliAlignmentTracks.cxx:449
 AliAlignmentTracks.cxx:450
 AliAlignmentTracks.cxx:451
 AliAlignmentTracks.cxx:452
 AliAlignmentTracks.cxx:453
 AliAlignmentTracks.cxx:454
 AliAlignmentTracks.cxx:455
 AliAlignmentTracks.cxx:456
 AliAlignmentTracks.cxx:457
 AliAlignmentTracks.cxx:458
 AliAlignmentTracks.cxx:459
 AliAlignmentTracks.cxx:460
 AliAlignmentTracks.cxx:461
 AliAlignmentTracks.cxx:462
 AliAlignmentTracks.cxx:463
 AliAlignmentTracks.cxx:464
 AliAlignmentTracks.cxx:465
 AliAlignmentTracks.cxx:466
 AliAlignmentTracks.cxx:467
 AliAlignmentTracks.cxx:468
 AliAlignmentTracks.cxx:469
 AliAlignmentTracks.cxx:470
 AliAlignmentTracks.cxx:471
 AliAlignmentTracks.cxx:472
 AliAlignmentTracks.cxx:473
 AliAlignmentTracks.cxx:474
 AliAlignmentTracks.cxx:475
 AliAlignmentTracks.cxx:476
 AliAlignmentTracks.cxx:477
 AliAlignmentTracks.cxx:478
 AliAlignmentTracks.cxx:479
 AliAlignmentTracks.cxx:480
 AliAlignmentTracks.cxx:481
 AliAlignmentTracks.cxx:482
 AliAlignmentTracks.cxx:483
 AliAlignmentTracks.cxx:484
 AliAlignmentTracks.cxx:485
 AliAlignmentTracks.cxx:486
 AliAlignmentTracks.cxx:487
 AliAlignmentTracks.cxx:488
 AliAlignmentTracks.cxx:489
 AliAlignmentTracks.cxx:490
 AliAlignmentTracks.cxx:491
 AliAlignmentTracks.cxx:492
 AliAlignmentTracks.cxx:493
 AliAlignmentTracks.cxx:494
 AliAlignmentTracks.cxx:495
 AliAlignmentTracks.cxx:496
 AliAlignmentTracks.cxx:497
 AliAlignmentTracks.cxx:498
 AliAlignmentTracks.cxx:499
 AliAlignmentTracks.cxx:500
 AliAlignmentTracks.cxx:501
 AliAlignmentTracks.cxx:502
 AliAlignmentTracks.cxx:503
 AliAlignmentTracks.cxx:504
 AliAlignmentTracks.cxx:505
 AliAlignmentTracks.cxx:506
 AliAlignmentTracks.cxx:507
 AliAlignmentTracks.cxx:508
 AliAlignmentTracks.cxx:509
 AliAlignmentTracks.cxx:510
 AliAlignmentTracks.cxx:511
 AliAlignmentTracks.cxx:512
 AliAlignmentTracks.cxx:513
 AliAlignmentTracks.cxx:514
 AliAlignmentTracks.cxx:515
 AliAlignmentTracks.cxx:516
 AliAlignmentTracks.cxx:517
 AliAlignmentTracks.cxx:518
 AliAlignmentTracks.cxx:519
 AliAlignmentTracks.cxx:520
 AliAlignmentTracks.cxx:521
 AliAlignmentTracks.cxx:522
 AliAlignmentTracks.cxx:523
 AliAlignmentTracks.cxx:524
 AliAlignmentTracks.cxx:525
 AliAlignmentTracks.cxx:526
 AliAlignmentTracks.cxx:527
 AliAlignmentTracks.cxx:528
 AliAlignmentTracks.cxx:529
 AliAlignmentTracks.cxx:530
 AliAlignmentTracks.cxx:531
 AliAlignmentTracks.cxx:532
 AliAlignmentTracks.cxx:533
 AliAlignmentTracks.cxx:534
 AliAlignmentTracks.cxx:535
 AliAlignmentTracks.cxx:536
 AliAlignmentTracks.cxx:537
 AliAlignmentTracks.cxx:538
 AliAlignmentTracks.cxx:539
 AliAlignmentTracks.cxx:540
 AliAlignmentTracks.cxx:541
 AliAlignmentTracks.cxx:542
 AliAlignmentTracks.cxx:543
 AliAlignmentTracks.cxx:544
 AliAlignmentTracks.cxx:545
 AliAlignmentTracks.cxx:546
 AliAlignmentTracks.cxx:547
 AliAlignmentTracks.cxx:548
 AliAlignmentTracks.cxx:549
 AliAlignmentTracks.cxx:550
 AliAlignmentTracks.cxx:551
 AliAlignmentTracks.cxx:552
 AliAlignmentTracks.cxx:553
 AliAlignmentTracks.cxx:554
 AliAlignmentTracks.cxx:555
 AliAlignmentTracks.cxx:556
 AliAlignmentTracks.cxx:557
 AliAlignmentTracks.cxx:558
 AliAlignmentTracks.cxx:559
 AliAlignmentTracks.cxx:560
 AliAlignmentTracks.cxx:561
 AliAlignmentTracks.cxx:562
 AliAlignmentTracks.cxx:563
 AliAlignmentTracks.cxx:564
 AliAlignmentTracks.cxx:565
 AliAlignmentTracks.cxx:566
 AliAlignmentTracks.cxx:567
 AliAlignmentTracks.cxx:568
 AliAlignmentTracks.cxx:569
 AliAlignmentTracks.cxx:570
 AliAlignmentTracks.cxx:571
 AliAlignmentTracks.cxx:572
 AliAlignmentTracks.cxx:573
 AliAlignmentTracks.cxx:574
 AliAlignmentTracks.cxx:575
 AliAlignmentTracks.cxx:576
 AliAlignmentTracks.cxx:577
 AliAlignmentTracks.cxx:578
 AliAlignmentTracks.cxx:579
 AliAlignmentTracks.cxx:580
 AliAlignmentTracks.cxx:581
 AliAlignmentTracks.cxx:582
 AliAlignmentTracks.cxx:583
 AliAlignmentTracks.cxx:584
 AliAlignmentTracks.cxx:585
 AliAlignmentTracks.cxx:586
 AliAlignmentTracks.cxx:587
 AliAlignmentTracks.cxx:588
 AliAlignmentTracks.cxx:589
 AliAlignmentTracks.cxx:590
 AliAlignmentTracks.cxx:591
 AliAlignmentTracks.cxx:592
 AliAlignmentTracks.cxx:593
 AliAlignmentTracks.cxx:594
 AliAlignmentTracks.cxx:595
 AliAlignmentTracks.cxx:596
 AliAlignmentTracks.cxx:597
 AliAlignmentTracks.cxx:598
 AliAlignmentTracks.cxx:599
 AliAlignmentTracks.cxx:600
 AliAlignmentTracks.cxx:601
 AliAlignmentTracks.cxx:602
 AliAlignmentTracks.cxx:603
 AliAlignmentTracks.cxx:604
 AliAlignmentTracks.cxx:605
 AliAlignmentTracks.cxx:606
 AliAlignmentTracks.cxx:607
 AliAlignmentTracks.cxx:608
 AliAlignmentTracks.cxx:609
 AliAlignmentTracks.cxx:610
 AliAlignmentTracks.cxx:611
 AliAlignmentTracks.cxx:612
 AliAlignmentTracks.cxx:613
 AliAlignmentTracks.cxx:614
 AliAlignmentTracks.cxx:615
 AliAlignmentTracks.cxx:616
 AliAlignmentTracks.cxx:617
 AliAlignmentTracks.cxx:618
 AliAlignmentTracks.cxx:619
 AliAlignmentTracks.cxx:620
 AliAlignmentTracks.cxx:621
 AliAlignmentTracks.cxx:622
 AliAlignmentTracks.cxx:623
 AliAlignmentTracks.cxx:624
 AliAlignmentTracks.cxx:625
 AliAlignmentTracks.cxx:626
 AliAlignmentTracks.cxx:627
 AliAlignmentTracks.cxx:628
 AliAlignmentTracks.cxx:629
 AliAlignmentTracks.cxx:630
 AliAlignmentTracks.cxx:631
 AliAlignmentTracks.cxx:632
 AliAlignmentTracks.cxx:633
 AliAlignmentTracks.cxx:634
 AliAlignmentTracks.cxx:635
 AliAlignmentTracks.cxx:636
 AliAlignmentTracks.cxx:637
 AliAlignmentTracks.cxx:638
 AliAlignmentTracks.cxx:639
 AliAlignmentTracks.cxx:640
 AliAlignmentTracks.cxx:641
 AliAlignmentTracks.cxx:642
 AliAlignmentTracks.cxx:643
 AliAlignmentTracks.cxx:644
 AliAlignmentTracks.cxx:645
 AliAlignmentTracks.cxx:646
 AliAlignmentTracks.cxx:647
 AliAlignmentTracks.cxx:648
 AliAlignmentTracks.cxx:649
 AliAlignmentTracks.cxx:650
 AliAlignmentTracks.cxx:651
 AliAlignmentTracks.cxx:652
 AliAlignmentTracks.cxx:653
 AliAlignmentTracks.cxx:654
 AliAlignmentTracks.cxx:655
 AliAlignmentTracks.cxx:656
 AliAlignmentTracks.cxx:657
 AliAlignmentTracks.cxx:658
 AliAlignmentTracks.cxx:659
 AliAlignmentTracks.cxx:660
 AliAlignmentTracks.cxx:661
 AliAlignmentTracks.cxx:662
 AliAlignmentTracks.cxx:663
 AliAlignmentTracks.cxx:664
 AliAlignmentTracks.cxx:665
 AliAlignmentTracks.cxx:666
 AliAlignmentTracks.cxx:667
 AliAlignmentTracks.cxx:668
 AliAlignmentTracks.cxx:669
 AliAlignmentTracks.cxx:670
 AliAlignmentTracks.cxx:671
 AliAlignmentTracks.cxx:672
 AliAlignmentTracks.cxx:673
 AliAlignmentTracks.cxx:674
 AliAlignmentTracks.cxx:675
 AliAlignmentTracks.cxx:676
 AliAlignmentTracks.cxx:677
 AliAlignmentTracks.cxx:678
 AliAlignmentTracks.cxx:679
 AliAlignmentTracks.cxx:680
 AliAlignmentTracks.cxx:681
 AliAlignmentTracks.cxx:682
 AliAlignmentTracks.cxx:683
 AliAlignmentTracks.cxx:684
 AliAlignmentTracks.cxx:685
 AliAlignmentTracks.cxx:686
 AliAlignmentTracks.cxx:687
 AliAlignmentTracks.cxx:688
 AliAlignmentTracks.cxx:689
 AliAlignmentTracks.cxx:690
 AliAlignmentTracks.cxx:691
 AliAlignmentTracks.cxx:692
 AliAlignmentTracks.cxx:693
 AliAlignmentTracks.cxx:694
 AliAlignmentTracks.cxx:695
 AliAlignmentTracks.cxx:696
 AliAlignmentTracks.cxx:697
 AliAlignmentTracks.cxx:698
 AliAlignmentTracks.cxx:699
 AliAlignmentTracks.cxx:700
 AliAlignmentTracks.cxx:701
 AliAlignmentTracks.cxx:702
 AliAlignmentTracks.cxx:703
 AliAlignmentTracks.cxx:704
 AliAlignmentTracks.cxx:705
 AliAlignmentTracks.cxx:706
 AliAlignmentTracks.cxx:707
 AliAlignmentTracks.cxx:708
 AliAlignmentTracks.cxx:709
 AliAlignmentTracks.cxx:710
 AliAlignmentTracks.cxx:711
 AliAlignmentTracks.cxx:712
 AliAlignmentTracks.cxx:713
 AliAlignmentTracks.cxx:714
 AliAlignmentTracks.cxx:715
 AliAlignmentTracks.cxx:716
 AliAlignmentTracks.cxx:717
 AliAlignmentTracks.cxx:718
 AliAlignmentTracks.cxx:719
 AliAlignmentTracks.cxx:720
 AliAlignmentTracks.cxx:721
 AliAlignmentTracks.cxx:722
 AliAlignmentTracks.cxx:723
 AliAlignmentTracks.cxx:724
 AliAlignmentTracks.cxx:725
 AliAlignmentTracks.cxx:726
 AliAlignmentTracks.cxx:727
 AliAlignmentTracks.cxx:728
 AliAlignmentTracks.cxx:729
 AliAlignmentTracks.cxx:730
 AliAlignmentTracks.cxx:731
 AliAlignmentTracks.cxx:732
 AliAlignmentTracks.cxx:733
 AliAlignmentTracks.cxx:734
 AliAlignmentTracks.cxx:735
 AliAlignmentTracks.cxx:736
 AliAlignmentTracks.cxx:737
 AliAlignmentTracks.cxx:738
 AliAlignmentTracks.cxx:739
 AliAlignmentTracks.cxx:740
 AliAlignmentTracks.cxx:741
 AliAlignmentTracks.cxx:742
 AliAlignmentTracks.cxx:743
 AliAlignmentTracks.cxx:744
 AliAlignmentTracks.cxx:745
 AliAlignmentTracks.cxx:746
 AliAlignmentTracks.cxx:747
 AliAlignmentTracks.cxx:748
 AliAlignmentTracks.cxx:749
 AliAlignmentTracks.cxx:750
 AliAlignmentTracks.cxx:751
 AliAlignmentTracks.cxx:752
 AliAlignmentTracks.cxx:753
 AliAlignmentTracks.cxx:754
 AliAlignmentTracks.cxx:755
 AliAlignmentTracks.cxx:756
 AliAlignmentTracks.cxx:757
 AliAlignmentTracks.cxx:758
 AliAlignmentTracks.cxx:759
 AliAlignmentTracks.cxx:760
 AliAlignmentTracks.cxx:761
 AliAlignmentTracks.cxx:762
 AliAlignmentTracks.cxx:763
 AliAlignmentTracks.cxx:764
 AliAlignmentTracks.cxx:765
 AliAlignmentTracks.cxx:766
 AliAlignmentTracks.cxx:767
 AliAlignmentTracks.cxx:768
 AliAlignmentTracks.cxx:769
 AliAlignmentTracks.cxx:770
 AliAlignmentTracks.cxx:771
 AliAlignmentTracks.cxx:772
 AliAlignmentTracks.cxx:773
 AliAlignmentTracks.cxx:774
 AliAlignmentTracks.cxx:775
 AliAlignmentTracks.cxx:776
 AliAlignmentTracks.cxx:777
 AliAlignmentTracks.cxx:778
 AliAlignmentTracks.cxx:779
 AliAlignmentTracks.cxx:780
 AliAlignmentTracks.cxx:781
 AliAlignmentTracks.cxx:782
 AliAlignmentTracks.cxx:783
 AliAlignmentTracks.cxx:784
 AliAlignmentTracks.cxx:785
 AliAlignmentTracks.cxx:786
 AliAlignmentTracks.cxx:787
 AliAlignmentTracks.cxx:788
 AliAlignmentTracks.cxx:789
 AliAlignmentTracks.cxx:790
 AliAlignmentTracks.cxx:791
 AliAlignmentTracks.cxx:792
 AliAlignmentTracks.cxx:793
 AliAlignmentTracks.cxx:794
 AliAlignmentTracks.cxx:795
 AliAlignmentTracks.cxx:796
 AliAlignmentTracks.cxx:797
 AliAlignmentTracks.cxx:798
 AliAlignmentTracks.cxx:799
 AliAlignmentTracks.cxx:800
 AliAlignmentTracks.cxx:801
 AliAlignmentTracks.cxx:802
 AliAlignmentTracks.cxx:803
 AliAlignmentTracks.cxx:804
 AliAlignmentTracks.cxx:805
 AliAlignmentTracks.cxx:806
 AliAlignmentTracks.cxx:807
 AliAlignmentTracks.cxx:808
 AliAlignmentTracks.cxx:809
 AliAlignmentTracks.cxx:810
 AliAlignmentTracks.cxx:811
 AliAlignmentTracks.cxx:812
 AliAlignmentTracks.cxx:813
 AliAlignmentTracks.cxx:814
 AliAlignmentTracks.cxx:815
 AliAlignmentTracks.cxx:816
 AliAlignmentTracks.cxx:817
 AliAlignmentTracks.cxx:818
 AliAlignmentTracks.cxx:819
 AliAlignmentTracks.cxx:820
 AliAlignmentTracks.cxx:821
 AliAlignmentTracks.cxx:822
 AliAlignmentTracks.cxx:823
 AliAlignmentTracks.cxx:824
 AliAlignmentTracks.cxx:825
 AliAlignmentTracks.cxx:826
 AliAlignmentTracks.cxx:827
 AliAlignmentTracks.cxx:828
 AliAlignmentTracks.cxx:829
 AliAlignmentTracks.cxx:830
 AliAlignmentTracks.cxx:831
 AliAlignmentTracks.cxx:832
 AliAlignmentTracks.cxx:833
 AliAlignmentTracks.cxx:834
 AliAlignmentTracks.cxx:835
 AliAlignmentTracks.cxx:836
 AliAlignmentTracks.cxx:837
 AliAlignmentTracks.cxx:838
 AliAlignmentTracks.cxx:839
 AliAlignmentTracks.cxx:840
 AliAlignmentTracks.cxx:841
 AliAlignmentTracks.cxx:842
 AliAlignmentTracks.cxx:843
 AliAlignmentTracks.cxx:844
 AliAlignmentTracks.cxx:845
 AliAlignmentTracks.cxx:846
 AliAlignmentTracks.cxx:847
 AliAlignmentTracks.cxx:848
 AliAlignmentTracks.cxx:849
 AliAlignmentTracks.cxx:850
 AliAlignmentTracks.cxx:851
 AliAlignmentTracks.cxx:852
 AliAlignmentTracks.cxx:853
 AliAlignmentTracks.cxx:854
 AliAlignmentTracks.cxx:855
 AliAlignmentTracks.cxx:856
 AliAlignmentTracks.cxx:857
 AliAlignmentTracks.cxx:858
 AliAlignmentTracks.cxx:859
 AliAlignmentTracks.cxx:860
 AliAlignmentTracks.cxx:861
 AliAlignmentTracks.cxx:862
 AliAlignmentTracks.cxx:863
 AliAlignmentTracks.cxx:864
 AliAlignmentTracks.cxx:865
 AliAlignmentTracks.cxx:866
 AliAlignmentTracks.cxx:867
 AliAlignmentTracks.cxx:868
 AliAlignmentTracks.cxx:869
 AliAlignmentTracks.cxx:870
 AliAlignmentTracks.cxx:871
 AliAlignmentTracks.cxx:872
 AliAlignmentTracks.cxx:873
 AliAlignmentTracks.cxx:874
 AliAlignmentTracks.cxx:875
 AliAlignmentTracks.cxx:876
 AliAlignmentTracks.cxx:877
 AliAlignmentTracks.cxx:878
 AliAlignmentTracks.cxx:879
 AliAlignmentTracks.cxx:880
 AliAlignmentTracks.cxx:881
 AliAlignmentTracks.cxx:882
 AliAlignmentTracks.cxx:883
 AliAlignmentTracks.cxx:884
 AliAlignmentTracks.cxx:885
 AliAlignmentTracks.cxx:886
 AliAlignmentTracks.cxx:887
 AliAlignmentTracks.cxx:888
 AliAlignmentTracks.cxx:889
 AliAlignmentTracks.cxx:890
 AliAlignmentTracks.cxx:891
 AliAlignmentTracks.cxx:892
 AliAlignmentTracks.cxx:893
 AliAlignmentTracks.cxx:894
 AliAlignmentTracks.cxx:895
 AliAlignmentTracks.cxx:896
 AliAlignmentTracks.cxx:897
 AliAlignmentTracks.cxx:898
 AliAlignmentTracks.cxx:899
 AliAlignmentTracks.cxx:900
 AliAlignmentTracks.cxx:901
 AliAlignmentTracks.cxx:902
 AliAlignmentTracks.cxx:903
 AliAlignmentTracks.cxx:904
 AliAlignmentTracks.cxx:905
 AliAlignmentTracks.cxx:906
 AliAlignmentTracks.cxx:907
 AliAlignmentTracks.cxx:908
 AliAlignmentTracks.cxx:909
 AliAlignmentTracks.cxx:910
 AliAlignmentTracks.cxx:911
 AliAlignmentTracks.cxx:912
 AliAlignmentTracks.cxx:913
 AliAlignmentTracks.cxx:914
 AliAlignmentTracks.cxx:915
 AliAlignmentTracks.cxx:916
 AliAlignmentTracks.cxx:917
 AliAlignmentTracks.cxx:918
 AliAlignmentTracks.cxx:919
 AliAlignmentTracks.cxx:920
 AliAlignmentTracks.cxx:921
 AliAlignmentTracks.cxx:922
 AliAlignmentTracks.cxx:923
 AliAlignmentTracks.cxx:924
 AliAlignmentTracks.cxx:925
 AliAlignmentTracks.cxx:926
 AliAlignmentTracks.cxx:927
 AliAlignmentTracks.cxx:928
 AliAlignmentTracks.cxx:929
 AliAlignmentTracks.cxx:930
 AliAlignmentTracks.cxx:931
 AliAlignmentTracks.cxx:932
 AliAlignmentTracks.cxx:933
 AliAlignmentTracks.cxx:934
 AliAlignmentTracks.cxx:935
 AliAlignmentTracks.cxx:936
 AliAlignmentTracks.cxx:937
 AliAlignmentTracks.cxx:938
 AliAlignmentTracks.cxx:939
 AliAlignmentTracks.cxx:940
 AliAlignmentTracks.cxx:941
 AliAlignmentTracks.cxx:942
 AliAlignmentTracks.cxx:943
 AliAlignmentTracks.cxx:944
 AliAlignmentTracks.cxx:945
 AliAlignmentTracks.cxx:946
 AliAlignmentTracks.cxx:947
 AliAlignmentTracks.cxx:948
 AliAlignmentTracks.cxx:949
 AliAlignmentTracks.cxx:950
 AliAlignmentTracks.cxx:951
 AliAlignmentTracks.cxx:952
 AliAlignmentTracks.cxx:953
 AliAlignmentTracks.cxx:954
 AliAlignmentTracks.cxx:955
 AliAlignmentTracks.cxx:956
 AliAlignmentTracks.cxx:957
 AliAlignmentTracks.cxx:958
 AliAlignmentTracks.cxx:959
 AliAlignmentTracks.cxx:960
 AliAlignmentTracks.cxx:961
 AliAlignmentTracks.cxx:962
 AliAlignmentTracks.cxx:963
 AliAlignmentTracks.cxx:964
 AliAlignmentTracks.cxx:965
 AliAlignmentTracks.cxx:966
 AliAlignmentTracks.cxx:967
 AliAlignmentTracks.cxx:968
 AliAlignmentTracks.cxx:969
 AliAlignmentTracks.cxx:970
 AliAlignmentTracks.cxx:971
 AliAlignmentTracks.cxx:972
 AliAlignmentTracks.cxx:973
 AliAlignmentTracks.cxx:974
 AliAlignmentTracks.cxx:975
 AliAlignmentTracks.cxx:976
 AliAlignmentTracks.cxx:977
 AliAlignmentTracks.cxx:978
 AliAlignmentTracks.cxx:979
 AliAlignmentTracks.cxx:980
 AliAlignmentTracks.cxx:981
 AliAlignmentTracks.cxx:982
 AliAlignmentTracks.cxx:983
 AliAlignmentTracks.cxx:984
 AliAlignmentTracks.cxx:985
 AliAlignmentTracks.cxx:986
 AliAlignmentTracks.cxx:987
 AliAlignmentTracks.cxx:988
 AliAlignmentTracks.cxx:989
 AliAlignmentTracks.cxx:990
 AliAlignmentTracks.cxx:991
 AliAlignmentTracks.cxx:992
 AliAlignmentTracks.cxx:993
 AliAlignmentTracks.cxx:994
 AliAlignmentTracks.cxx:995
 AliAlignmentTracks.cxx:996
 AliAlignmentTracks.cxx:997
 AliAlignmentTracks.cxx:998
 AliAlignmentTracks.cxx:999
 AliAlignmentTracks.cxx:1000
 AliAlignmentTracks.cxx:1001
 AliAlignmentTracks.cxx:1002
 AliAlignmentTracks.cxx:1003
 AliAlignmentTracks.cxx:1004
 AliAlignmentTracks.cxx:1005
 AliAlignmentTracks.cxx:1006
 AliAlignmentTracks.cxx:1007
 AliAlignmentTracks.cxx:1008
 AliAlignmentTracks.cxx:1009
 AliAlignmentTracks.cxx:1010
 AliAlignmentTracks.cxx:1011
 AliAlignmentTracks.cxx:1012
 AliAlignmentTracks.cxx:1013
 AliAlignmentTracks.cxx:1014
 AliAlignmentTracks.cxx:1015
 AliAlignmentTracks.cxx:1016
 AliAlignmentTracks.cxx:1017
 AliAlignmentTracks.cxx:1018
 AliAlignmentTracks.cxx:1019
 AliAlignmentTracks.cxx:1020
 AliAlignmentTracks.cxx:1021
 AliAlignmentTracks.cxx:1022
 AliAlignmentTracks.cxx:1023
 AliAlignmentTracks.cxx:1024
 AliAlignmentTracks.cxx:1025
 AliAlignmentTracks.cxx:1026
 AliAlignmentTracks.cxx:1027
 AliAlignmentTracks.cxx:1028
 AliAlignmentTracks.cxx:1029
 AliAlignmentTracks.cxx:1030
 AliAlignmentTracks.cxx:1031
 AliAlignmentTracks.cxx:1032
 AliAlignmentTracks.cxx:1033
 AliAlignmentTracks.cxx:1034
 AliAlignmentTracks.cxx:1035
 AliAlignmentTracks.cxx:1036
 AliAlignmentTracks.cxx:1037
 AliAlignmentTracks.cxx:1038
 AliAlignmentTracks.cxx:1039
 AliAlignmentTracks.cxx:1040
 AliAlignmentTracks.cxx:1041
 AliAlignmentTracks.cxx:1042
 AliAlignmentTracks.cxx:1043
 AliAlignmentTracks.cxx:1044
 AliAlignmentTracks.cxx:1045
 AliAlignmentTracks.cxx:1046
 AliAlignmentTracks.cxx:1047
 AliAlignmentTracks.cxx:1048
 AliAlignmentTracks.cxx:1049
 AliAlignmentTracks.cxx:1050
 AliAlignmentTracks.cxx:1051
 AliAlignmentTracks.cxx:1052
 AliAlignmentTracks.cxx:1053
 AliAlignmentTracks.cxx:1054
 AliAlignmentTracks.cxx:1055
 AliAlignmentTracks.cxx:1056
 AliAlignmentTracks.cxx:1057
 AliAlignmentTracks.cxx:1058
 AliAlignmentTracks.cxx:1059
 AliAlignmentTracks.cxx:1060
 AliAlignmentTracks.cxx:1061
 AliAlignmentTracks.cxx:1062
 AliAlignmentTracks.cxx:1063
 AliAlignmentTracks.cxx:1064
 AliAlignmentTracks.cxx:1065