]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliAlignmentTracks.cxx
AliESDMuonTrack:
[u/mrichter/AliRoot.git] / STEER / AliAlignmentTracks.cxx
index 1836a314b719d66587634fe90f1d17c06eaf1e6a..cd8efdac45e422d7b73b1ae2c24d7464f69e5734 100644 (file)
 
 #include <TChain.h>
 #include <TFile.h>
+#include <TVector3.h>
 
 #include "AliAlignmentTracks.h"
 #include "AliTrackPointArray.h"
-#include "AliAlignObjAngles.h"
+#include "AliAlignObjParams.h"
 #include "AliTrackFitterRieman.h"
 #include "AliTrackResidualsChi2.h"
-#include "AliESD.h"
+#include "AliESDEvent.h"
 #include "AliLog.h"
 
 ClassImp(AliAlignmentTracks)
@@ -142,8 +143,14 @@ void AliAlignmentTracks::AddESD(const char *esdfilename, const char *esdtreename
   }
 }
 
-//______________________________________________________________________________
-void AliAlignmentTracks::ProcessESD()
+//________________________________________________________________________
+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
@@ -151,8 +158,8 @@ void AliAlignmentTracks::ProcessESD()
 
   if (!fESDChain) return;
 
-  AliESD *esd = 0;
-  fESDChain->SetBranchAddress("ESD",&esd);
+  AliESDEvent *esd = new AliESDEvent();
+  esd->ReadFromTree(fESDChain);
   AliESDfriend *esdf = 0; 
   fESDChain->SetBranchStatus("ESDfriend*",1);
   fESDChain->SetBranchAddress("ESDfriend.",&esdf);
@@ -171,7 +178,13 @@ void AliAlignmentTracks::ProcessESD()
 
   TTree *pointsTree = new TTree("spTree", "Tree with track space point arrays");
   const AliTrackPointArray *array = 0;
-  pointsTree->Branch("SP","AliTrackPointArray", &array);
+  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;
@@ -182,15 +195,47 @@ void AliAlignmentTracks::ProcessESD()
     for (Int_t itrack=0; itrack < ntracks; itrack++) {
       AliESDtrack * track = esd->GetTrack(itrack);
       if (!track) continue;
-     //  UInt_t status = AliESDtrack::kITSpid; 
-//       status|=AliESDtrack::kTPCpid; 
-//       status|=AliESDtrack::kTRDpid; 
-//       if ((track->GetStatus() & status) != status) continue;
 
-      if (track->GetP() < 0.5) 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) {
+       array2 = new AliTrackPointArray(track->GetNcls(0));
+       Bool_t smallAngleWrtITSModulePlanes=kFALSE;
+       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<7) {
+           array2->AddPoint(jpt,&point);
+           jpt++;
+         }
+         // 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[0],0.);
+           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) smallAngleWrtITSModulePlanes=kTRUE;
+         }
+       }
+       if(smallAngleWrtITSModulePlanes) continue;
+      } // end if(onlyITS)
       pointsTree->Fill();
     }
   }
@@ -201,6 +246,183 @@ void AliAlignmentTracks::ProcessESD()
   }
 
   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.Data() == "") {
+    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);
+
+    Int_t ntotpts;
+    if(onlyITS) {
+      ntotpts = track1->GetNcls(0)+track2->GetNcls(0);
+    } else {
+      ntotpts = track1->GetTrackPointArray()->GetNPoints()+
+               track2->GetTrackPointArray()->GetNPoints();
+    }
+    array2 = new AliTrackPointArray(ntotpts);
+    AliTrackPoint point;
+    Int_t ipt,volId,modId,layerId;
+    Int_t jpt=0;
+    Bool_t smallAngleWrtITSModulePlanes=kFALSE;
+    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[0],0.);
+         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) smallAngleWrtITSModulePlanes=kTRUE;
+       }
+      }
+      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) 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[0],0.);
+         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) smallAngleWrtITSModulePlanes=kTRUE;
+       }
+      }
+      array2->AddPoint(jpt,&point);
+      jpt++;
+    }
+
+    if(smallAngleWrtITSModulePlanes) continue;
+    pointsTree->Fill();
+  }
+
+  if (!pointsTree->Write()) {
+    AliWarning("Can't write the tree with track point arrays!");
+    return;
+  }
+
+  pointsFile->Close();
+  return;
 }
 
 //______________________________________________________________________________
@@ -220,7 +442,7 @@ void AliAlignmentTracks::BuildIndex()
 
   // Dummy object is created in order
   // to initialize the volume paths
-  AliAlignObjAngles alobj;
+  AliAlignObjParams alobj;
 
   fPointsFile = TFile::Open(fPointsFilename);
   if (!fPointsFile || !fPointsFile->IsOpen()) {
@@ -245,14 +467,14 @@ void AliAlignmentTracks::BuildIndex()
       for (Int_t ipoint = 0; ipoint < array->GetNPoints(); ipoint++) {
        UShort_t volId = array->GetVolumeID()[ipoint];
        // check if the volId is valid
-       if (!AliAlignObj::SymName(volId)) {
+       if (!AliGeomManager::SymName(volId)) {
          AliError(Form("The volume id %d has no default volume name !",
                        volId));
          continue;
        }
        Int_t modId;
-       Int_t layerId = AliAlignObj::VolUIDToLayer(volId,modId)
-                     - AliAlignObj::kFirstLayer;
+       Int_t layerId = AliGeomManager::VolUIDToLayer(volId,modId)
+                     - AliGeomManager::kFirstLayer;
        if (!fArrayIndex[layerId][modId]) {
          //first entry for this volume
          fArrayIndex[layerId][modId] = new TArrayI(1000);
@@ -284,13 +506,13 @@ void AliAlignmentTracks::BuildIndex()
 void AliAlignmentTracks::InitIndex()
 {
   // Initialize the index arrays
-  Int_t nLayers = AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer;
+  Int_t nLayers = AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer;
   fLastIndex = new Int_t*[nLayers];
   fArrayIndex = new TArrayI**[nLayers];
-  for (Int_t iLayer = 0; iLayer < (AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer); iLayer++) {
-    fLastIndex[iLayer] = new Int_t[AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer)];
-    fArrayIndex[iLayer] = new TArrayI*[AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer)];
-    for (Int_t iModule = 0; iModule < AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer); iModule++) {
+  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;
     }
@@ -305,8 +527,8 @@ void AliAlignmentTracks::ResetIndex()
 
   fIsIndexBuilt = kFALSE;
   
-  for (Int_t iLayer = 0; iLayer < AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer; iLayer++) {
-    for (Int_t iModule = 0; iModule < AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer); iModule++) {
+  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;
     }
   }
@@ -317,8 +539,8 @@ void AliAlignmentTracks::DeleteIndex()
 {
   // Delete the index arrays
   // Called by the destructor
-  for (Int_t iLayer = 0; iLayer < (AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer); iLayer++) {
-    for (Int_t iModule = 0; iModule < AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer); iModule++) {
+  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;
@@ -345,13 +567,13 @@ Bool_t AliAlignmentTracks::ReadAlignObjs(const char *alignObjFileName, const cha
 void AliAlignmentTracks::InitAlignObjs()
 {
   // Initialize the alignment objects array
-  Int_t nLayers = AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer;
+  Int_t nLayers = AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer;
   fAlignObjs = new AliAlignObj**[nLayers];
-  for (Int_t iLayer = 0; iLayer < (AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer); iLayer++) {
-    fAlignObjs[iLayer] = new AliAlignObj*[AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer)];
-    for (Int_t iModule = 0; iModule < AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer); iModule++) {
-      UShort_t volid = AliAlignObj::LayerToVolUID(iLayer+ AliAlignObj::kFirstLayer,iModule);
-      fAlignObjs[iLayer][iModule] = new AliAlignObjAngles(AliAlignObj::SymName(volid),volid,0,0,0,0,0,0,kTRUE);
+  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);
     }
   }
 }
@@ -360,8 +582,8 @@ void AliAlignmentTracks::InitAlignObjs()
 void AliAlignmentTracks::ResetAlignObjs()
 {
   // Reset the alignment objects array
-  for (Int_t iLayer = 0; iLayer < (AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer); iLayer++) {
-    for (Int_t iModule = 0; iModule < AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer); iModule++)
+  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);
   }
 }
@@ -370,8 +592,8 @@ void AliAlignmentTracks::ResetAlignObjs()
 void AliAlignmentTracks::DeleteAlignObjs()
 {
   // Delete the alignment objects array
-  for (Int_t iLayer = 0; iLayer < (AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer); iLayer++) {
-    for (Int_t iModule = 0; iModule < AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer); iModule++)
+  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];
@@ -380,10 +602,10 @@ void AliAlignmentTracks::DeleteAlignObjs()
   fAlignObjs = 0;
 }
 
-void AliAlignmentTracks::AlignDetector(AliAlignObj::ELayerID firstLayer,
-                                      AliAlignObj::ELayerID lastLayer,
-                                      AliAlignObj::ELayerID layerRangeMin,
-                                      AliAlignObj::ELayerID layerRangeMax,
+void AliAlignmentTracks::AlignDetector(AliGeomManager::ELayerID firstLayer,
+                                      AliGeomManager::ELayerID lastLayer,
+                                      AliGeomManager::ELayerID layerRangeMin,
+                                      AliGeomManager::ELayerID layerRangeMax,
                                       Int_t iterations)
 {
   // Align detector volumes within
@@ -392,14 +614,14 @@ void AliAlignmentTracks::AlignDetector(AliAlignObj::ELayerID firstLayer,
   // Tracks are fitted only within
   // the range defined by the user.
   Int_t nModules = 0;
-  for (Int_t iLayer = firstLayer; iLayer < lastLayer; iLayer++)
-    nModules += AliAlignObj::LayerSize(iLayer);
+  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 < AliAlignObj::LayerSize(iLayer); iModule++) {
-      UShort_t volId = AliAlignObj::LayerToVolUID(iLayer,iModule);
+  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++;
     }
@@ -412,19 +634,19 @@ void AliAlignmentTracks::AlignDetector(AliAlignObj::ELayerID firstLayer,
 }
 
 //______________________________________________________________________________
-void AliAlignmentTracks::AlignLayer(AliAlignObj::ELayerID layer,
-                                   AliAlignObj::ELayerID layerRangeMin,
-                                   AliAlignObj::ELayerID layerRangeMax,
+void 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 = AliAlignObj::LayerSize(layer);
+  Int_t nModules = AliGeomManager::LayerSize(layer);
   TArrayI volIds(nModules);
   for (Int_t iModule = 0; iModule < nModules; iModule++) {
-    UShort_t volId = AliAlignObj::LayerToVolUID(layer,iModule);
+    UShort_t volId = AliGeomManager::LayerToVolUID(layer,iModule);
     volIds.AddAt(volId,iModule);
   }
 
@@ -455,8 +677,8 @@ void AliAlignmentTracks::AlignVolume(UShort_t volId, UShort_t volIdFit,
 
 //______________________________________________________________________________
 void AliAlignmentTracks::AlignVolumes(const TArrayI *volids, const TArrayI *volidsfit,
-                                    AliAlignObj::ELayerID layerRangeMin,
-                                    AliAlignObj::ELayerID layerRangeMax,
+                                    AliGeomManager::ELayerID layerRangeMin,
+                                    AliGeomManager::ELayerID layerRangeMax,
                                     Int_t iterations)
 {
   // Align a set of detector volumes.
@@ -499,8 +721,8 @@ void AliAlignmentTracks::AlignVolumes(const TArrayI *volids, const TArrayI *voli
     if (fDoUpdate) for (Int_t iVolId = 0; iVolId < nVolIds; iVolId++) {
       UShort_t volid = (*volids)[iVolId];
       Int_t iModule;
-      AliAlignObj::ELayerID iLayer = AliAlignObj::VolUIDToLayer(volid,iModule);
-      AliAlignObj *alignObj = fAlignObjs[iLayer-AliAlignObj::kFirstLayer][iModule];      
+      AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);
+      AliAlignObj *alignObj = fAlignObjs[iLayer-AliGeomManager::kFirstLayer][iModule];      
       *alignObj *= *minimizer->GetAlignObj();
       alignObj->Print("");
     }
@@ -537,14 +759,14 @@ Int_t AliAlignmentTracks::LoadPoints(const TArrayI *volids, AliTrackPointArray**
   for (Int_t iVolId = 0; iVolId < nVolIds; iVolId++) {
     UShort_t volid = (*volids)[iVolId];
     Int_t iModule;
-    AliAlignObj::ELayerID iLayer = AliAlignObj::VolUIDToLayer(volid,iModule);
+    AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);
 
     // In case of empty index
-    if (fLastIndex[iLayer-AliAlignObj::kFirstLayer][iModule] == 0) {
+    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-AliAlignObj::kFirstLayer][iModule];
+    nArrays += fLastIndex[iLayer-AliGeomManager::kFirstLayer][iModule];
   }
 
   if (nArrays == 0) {
@@ -570,10 +792,10 @@ Int_t AliAlignmentTracks::LoadPoints(const TArrayI *volids, AliTrackPointArray**
   for (Int_t iVolId = 0; iVolId < nVolIds; iVolId++) {
     UShort_t volid = (*volids)[iVolId];
     Int_t iModule;
-    AliAlignObj::ELayerID iLayer = AliAlignObj::VolUIDToLayer(volid,iModule);
+    AliGeomManager::ELayerID iLayer = AliGeomManager::VolUIDToLayer(volid,iModule);
 
-    Int_t nArraysId = fLastIndex[iLayer-AliAlignObj::kFirstLayer][iModule];
-    TArrayI *index = fArrayIndex[iLayer-AliAlignObj::kFirstLayer][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++) {
@@ -594,18 +816,18 @@ Int_t AliAlignmentTracks::LoadPoints(const TArrayI *volids, AliTrackPointArray**
       for (Int_t iPoint = 0; iPoint < nPoints; iPoint++) {
        array->GetPoint(p,iPoint);
        Int_t modnum;
-       AliAlignObj::ELayerID layer = AliAlignObj::VolUIDToLayer(p.GetVolumeID(),modnum);
+       AliGeomManager::ELayerID layer = AliGeomManager::VolUIDToLayer(p.GetVolumeID(),modnum);
        // check if the layer id is valid
-       if ((layer < AliAlignObj::kFirstLayer) ||
-           (layer >= AliAlignObj::kLastLayer)) {
+       if ((layer < AliGeomManager::kFirstLayer) ||
+           (layer >= AliGeomManager::kLastLayer)) {
          AliError(Form("Layer index is invalid: %d (%d -> %d) !",
-                       layer,AliAlignObj::kFirstLayer,AliAlignObj::kLastLayer-1));
+                       layer,AliGeomManager::kFirstLayer,AliGeomManager::kLastLayer-1));
          continue;
        }
-       if ((modnum >= AliAlignObj::LayerSize(layer)) ||
+       if ((modnum >= AliGeomManager::LayerSize(layer)) ||
            (modnum < 0)) {
          AliError(Form("Module number inside layer %d is invalid: %d (0 -> %d)",
-                       layer,modnum,AliAlignObj::LayerSize(layer)));
+                       layer,modnum,AliGeomManager::LayerSize(layer)));
          continue;
        }
 
@@ -613,13 +835,13 @@ Int_t AliAlignmentTracks::LoadPoints(const TArrayI *volids, AliTrackPointArray**
        // Switch it off in case of real
        // alignment job!
        if (fMisalignObjs) {
-         AliAlignObj *misalignObj = fMisalignObjs[layer-AliAlignObj::kFirstLayer][modnum];
+         AliAlignObj *misalignObj = fMisalignObjs[layer-AliGeomManager::kFirstLayer][modnum];
          if (misalignObj)
            misalignObj->Transform(p);
        }
        // End of misalignment
 
-       AliAlignObj *alignObj = fAlignObjs[layer-AliAlignObj::kFirstLayer][modnum];
+       AliAlignObj *alignObj = fAlignObjs[layer-AliGeomManager::kFirstLayer][modnum];
        alignObj->Transform(p);
        points[iArray]->AddPoint(iPoint,&p);
       }
@@ -678,11 +900,11 @@ Bool_t AliAlignmentTracks::Misalign(const char *misalignObjFileName, const char*
   // scenario since it will bias the results.
 
   // Initialize the misalignment objects array
-  Int_t nLayers = AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer;
+  Int_t nLayers = AliGeomManager::kLastLayer - AliGeomManager::kFirstLayer;
   fMisalignObjs = new AliAlignObj**[nLayers];
-  for (Int_t iLayer = 0; iLayer < (AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer); iLayer++) {
-    fMisalignObjs[iLayer] = new AliAlignObj*[AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer)];
-    for (Int_t iModule = 0; iModule < AliAlignObj::LayerSize(iLayer + AliAlignObj::kFirstLayer); iModule++)
+  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;
   }
 
@@ -704,13 +926,13 @@ Bool_t AliAlignmentTracks::Misalign(const char *misalignObjFileName, const char*
 
   // Store the misalignment objects for further usage  
   Int_t nObjs = array->GetEntriesFast();
-  AliAlignObj::ELayerID layerId; // volume layer
+  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);
-      fMisalignObjs[layerId-AliAlignObj::kFirstLayer][modId] = alObj;
+      fMisalignObjs[layerId-AliGeomManager::kFirstLayer][modId] = alObj;
     }
   return kTRUE;
 }