]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
- Removing use of volpath.dat file, now we can use volume symnames
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Jun 2007 16:27:54 +0000 (16:27 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Jun 2007 16:27:54 +0000 (16:27 +0000)
  to retrieve the modules and DE transformations from geometry
- Functions ReadGeometryData(*) replaced with
  LoadGeometryData(fileName)
  LoadGeometryData()
  The second one uses geometry loaded in AliGeomManger

MUON/AliMUONGeometryTransformer.cxx
MUON/AliMUONGeometryTransformer.h

index 3ff6521f6a102c2fbbb3c7657adaedeabf514e83..4555490685f7bac7eb630b554df1bcef7e514657 100644 (file)
@@ -27,6 +27,7 @@
 #include "AliMUONGeometryBuilder.h"
 
 #include "AliMpDEManager.h"
+#include "AliMpConstants.h"
 #include "AliMpExMap.h"
 
 #include "AliLog.h"
 #include <TGeoManager.h>
 #include <TGeoPhysicalNode.h>
 #include <TFile.h>
+#include <TString.h>
 
 #include <sstream>
 
 /// \cond CLASSIMP
 ClassImp(AliMUONGeometryTransformer)
 /// \endcond
+
+const TString  AliMUONGeometryTransformer::fgkDefaultDetectorName = "MUON";
  
 //______________________________________________________________________________
-AliMUONGeometryTransformer::AliMUONGeometryTransformer(Bool_t isOwner,
-                                          const TString& detectorName)
+AliMUONGeometryTransformer::AliMUONGeometryTransformer()
 
   : TObject(),
-    fDetectorName(detectorName),
+    fDetectorName(fgkDefaultDetectorName),
     fModuleTransformers(0),
     fMisAlignArray(0)
 {
@@ -59,11 +62,11 @@ AliMUONGeometryTransformer::AliMUONGeometryTransformer(Bool_t isOwner,
 
   // Create array for geometry modules
   fModuleTransformers = new TObjArray(100);
-  fModuleTransformers->SetOwner(isOwner);
+  fModuleTransformers->SetOwner(true);
 }
 
 //______________________________________________________________________________
-AliMUONGeometryTransformer::AliMUONGeometryTransformer() 
+AliMUONGeometryTransformer::AliMUONGeometryTransformer(TRootIOCtor* /*ioCtor*/
   : TObject(),
     fDetectorName(),
     fModuleTransformers(0),
@@ -117,43 +120,6 @@ TGeoHMatrix AliMUONGeometryTransformer::GetTransform(
 }
 
 
-//______________________________________________________________________________
-void AliMUONGeometryTransformer::FillModuleVolPath(Int_t moduleId,
-                                           const TString& volPath) 
-{
-/// Create module with the given moduleId and volPath
-
-  // Get/Create geometry module transformer
-  AliMUONGeometryModuleTransformer* moduleTransformer
-    = GetModuleTransformerNonConst(moduleId, false);
-
-  if ( !moduleTransformer ) {
-    moduleTransformer = new AliMUONGeometryModuleTransformer(moduleId);
-    AddModuleTransformer(moduleTransformer);
-  }  
-  moduleTransformer->SetVolumePath(volPath);
-}                 
-  
-//______________________________________________________________________________
-void AliMUONGeometryTransformer::FillDetElemVolPath(Int_t detElemId, 
-                                           const TString& volPath) 
-{
-/// Create detection element with the given detElemId and volPath
-
-  // Module Id
-  Int_t moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
-
-  // Get detection element store
-  AliMpExMap* detElements = 
-    GetModuleTransformer(moduleId)->GetDetElementStore();     
-
-  // Add detection element
-  AliMUONGeometryDetElement* detElement
-    = new AliMUONGeometryDetElement(detElemId, volPath);
-  detElements->Add(detElemId, detElement);
-}                 
-  
-
 //______________________________________________________________________________
 void AliMUONGeometryTransformer::FillModuleTransform(Int_t moduleId,
                   Double_t x, Double_t y, Double_t z,
@@ -220,40 +186,6 @@ void AliMUONGeometryTransformer::FillDetElemTransform(
   detElement->SetGlobalTransformation(globalTransform);
 }                 
 
-//______________________________________________________________________________
-Bool_t  
-AliMUONGeometryTransformer::ReadVolPaths(ifstream& in)
-{
-/// Read modules and detection element volume paths from stream
-
-  Int_t id;
-  TString key, volumePath;
-  in >> key;
-  
-  while ( !in.eof() ) {
-
-    in >> id >> volumePath;
-
-    // cout << "id="     << id << "  "
-    //          << "volPath= " << volumePath
-    //  << endl;   
-
-    if ( key == AliMUONGeometryModuleTransformer::GetModuleNamePrefix() ) 
-      FillModuleVolPath(id, volumePath);
-  
-    else if ( key == AliMUONGeometryDetElement::GetDENamePrefix() )
-      FillDetElemVolPath(id, volumePath);
-  
-    else {
-      AliFatal(Form("%s key not recognized",  key.Data()));
-      return false;
-    }
-    in >> key;
-  }     
-
-  return true;
-}
-
 //______________________________________________________________________________
 TString  AliMUONGeometryTransformer::ReadModuleTransforms(ifstream& in)
 {
@@ -340,95 +272,6 @@ TString  AliMUONGeometryTransformer::ReadDetElemTransforms(ifstream& in)
   return key;
 }
 
-//______________________________________________________________________________
-Bool_t  
-AliMUONGeometryTransformer::LoadTransforms(TGeoManager* tgeoManager)
-{
-/// Load transformations for defined modules and detection elements
-/// from the root file
-
-  if ( !tgeoManager) {
-    AliFatal("No TGeoManager defined.");
-    return false;
-  }   
-
-  for (Int_t i=0; i<fModuleTransformers->GetEntriesFast(); i++) {
-    AliMUONGeometryModuleTransformer* moduleTransformer 
-      = (AliMUONGeometryModuleTransformer*)fModuleTransformers->At(i);
-
-    // Module path
-    TString path = moduleTransformer->GetVolumePath();
-    
-    // Make physical node
-    TGeoPhysicalNode* moduleNode = tgeoManager->MakePhysicalNode(path);
-    if ( ! moduleNode ) {
-      AliErrorStream() 
-        << "Module id: " << moduleTransformer->GetModuleId()
-       << " volume path: " << path << " not found in geometry." << endl;
-       return false;
-    }   
-    
-    // Set matrix from physical node
-    TGeoHMatrix matrix = *moduleNode->GetMatrix();
-    moduleTransformer->SetTransformation(matrix);
-    
-    // Loop over detection elements
-    AliMpExMap* detElements = moduleTransformer->GetDetElementStore();    
-   
-    for (Int_t j=0; j<detElements->GetSize(); j++) {
-      AliMUONGeometryDetElement* detElement
-        = (AliMUONGeometryDetElement*)detElements->GetObject(j);
-
-      // Det element path
-      TString dePath = detElement->GetVolumePath();
-
-      // Make physical node
-      TGeoPhysicalNode* deNode = tgeoManager->MakePhysicalNode(dePath);
-      if ( ! deNode ) {
-        AliErrorStream() 
-          << "Det element id: " << detElement->GetId()
-         << " volume path: " << path << " not found in geometry." << endl;
-         return false;
-      }        
-        
-      // Set global matrix from physical node
-      TGeoHMatrix globalMatrix = *deNode->GetMatrix();
-      detElement->SetGlobalTransformation(globalMatrix);
-
-      // Set local matrix
-      TGeoHMatrix localMatrix = 
-        AliMUONGeometryBuilder::Multiply(
-          matrix.Inverse(), globalMatrix );
-      detElement->SetLocalTransformation(localMatrix);
-    }  
-  } 
-  return true;    
-}  
-
-//______________________________________________________________________________
-Bool_t  
-AliMUONGeometryTransformer::ReadVolPaths(const TString& fileName)
-{
-/// Read detection element volume paths from a file.
-/// Return true, if reading finished correctly.
-
-  // File path
-  TString filePath = gSystem->Getenv("ALICE_ROOT");
-  filePath += "/MUON/data/";
-  filePath += fileName;
-  
-  // Open input file
-  ifstream in(filePath, ios::in);
-  if (!in) {
-    cerr << filePath << endl;  
-    AliFatal("File not found.");
-    return false;
-  }
-
-  ReadVolPaths(in);
-  return true;
-}
-
 //______________________________________________________________________________
 Bool_t  
 AliMUONGeometryTransformer::ReadTransformations(const TString& fileName)
@@ -467,26 +310,58 @@ AliMUONGeometryTransformer::ReadTransformations(const TString& fileName)
 
 //______________________________________________________________________________
 Bool_t  
-AliMUONGeometryTransformer::ReadTransformations2(const TString& fileName)
+AliMUONGeometryTransformer::LoadTransformations()
 {
-/// Read transformations from root geometry file.
-/// Return true, if reading finished correctly.
+/// Load transformations for defined modules and detection elements
+/// using AliGeomManager
 
-  // File path
-  TString filePath = gSystem->Getenv("ALICE_ROOT");
-  filePath += "/MUON/data/";
-  filePath += fileName;
-  
-  // Load root geometry
-  TGeoManager* tgeoManager = gGeoManager;
-  if (!tgeoManager)
-    tgeoManager = TGeoManager::Import(fileName);
+  if ( ! AliGeomManager::GetGeometry() ) {
+    AliFatal("Geometry has to be laoded in AliGeomManager first.");
+    return false;
+  }   
 
-  // Retrieve matrices
-  LoadTransforms(tgeoManager);     
-  
-  return true;
-}
+  for (Int_t i=0; i<fModuleTransformers->GetEntriesFast(); i++) {
+    AliMUONGeometryModuleTransformer* moduleTransformer 
+      = (AliMUONGeometryModuleTransformer*)fModuleTransformers->At(i);
+
+    // Module symbolic name
+    TString symname = GetModuleSymName(moduleTransformer->GetModuleId());
+    
+    // Set matrix from physical node
+    TGeoHMatrix* matrix = AliGeomManager::GetMatrix(symname);
+    if ( !matrix ) {
+      AliErrorStream() << "Geometry module matrix not found." << endl;
+      return false;
+    }  
+    moduleTransformer->SetTransformation(*matrix);
+    
+    // Loop over detection elements
+    AliMpExMap* detElements = moduleTransformer->GetDetElementStore();    
+   
+    for (Int_t j=0; j<detElements->GetSize(); j++) {
+      AliMUONGeometryDetElement* detElement
+        = (AliMUONGeometryDetElement*)detElements->GetObject(j);
+
+      // Det element  symbolic name
+      TString symname = GetDESymName(detElement->GetId());
+    
+      // Set global matrix from physical node
+      TGeoHMatrix* globalMatrix = AliGeomManager::GetMatrix(symname);
+      if ( !matrix ) {
+        AliErrorStream() << "Detection element matrix not found." << endl;
+        return false;
+      }  
+      detElement->SetGlobalTransformation(*globalMatrix);
+
+      // Set local matrix
+      TGeoHMatrix localMatrix = 
+        AliMUONGeometryBuilder::Multiply(
+          (*matrix).Inverse(), (*globalMatrix) );
+      detElement->SetLocalTransformation(localMatrix);
+    }  
+  } 
+  return true;    
+}  
 
 //______________________________________________________________________________
 void AliMUONGeometryTransformer::WriteTransform(ofstream& out,
@@ -515,47 +390,6 @@ void AliMUONGeometryTransformer::WriteTransform(ofstream& out,
       << setw(8) << setprecision(4) << a6 << "  " << endl; 
 }
 
-//______________________________________________________________________________
-void AliMUONGeometryTransformer::WriteModuleVolPaths(ofstream& out) const
-{
-/// Write module volume paths for all module transformers
-
-  for (Int_t i=0; i<fModuleTransformers->GetEntriesFast(); i++) {
-    AliMUONGeometryModuleTransformer* moduleTransformer 
-      = (AliMUONGeometryModuleTransformer*)fModuleTransformers->At(i);
-
-    // Write data on out
-    out << AliMUONGeometryModuleTransformer::GetModuleNamePrefix() << " "
-        << setw(4) << moduleTransformer->GetModuleId() << "    " 
-        << moduleTransformer->GetVolumePath() << endl;
-  }     
-  out << endl;                 
-}
-
-//______________________________________________________________________________
-void AliMUONGeometryTransformer::WriteDetElemVolPaths(ofstream& out) const
-{
-/// Write detection element volume paths for all detection elements in all 
-/// module transformers
-
-  for (Int_t i=0; i<fModuleTransformers->GetEntriesFast(); i++) {
-    AliMUONGeometryModuleTransformer* moduleTransformer 
-      = (AliMUONGeometryModuleTransformer*)fModuleTransformers->At(i);
-    AliMpExMap* detElements = moduleTransformer->GetDetElementStore();    
-
-    for (Int_t j=0; j<detElements->GetSize(); j++) {
-      AliMUONGeometryDetElement* detElement
-        = (AliMUONGeometryDetElement*)detElements->GetObject(j);
-       
-      // Write data on out
-      out << AliMUONGeometryDetElement::GetDENamePrefix() << " " 
-          << setw(4) << detElement->GetId() << "    " 
-          << detElement->GetVolumePath() << endl;
-    }
-    out << endl;                       
-  }     
-}
-
 //______________________________________________________________________________
 void AliMUONGeometryTransformer::WriteModuleTransforms(ofstream& out) const
 {
@@ -608,14 +442,8 @@ TString AliMUONGeometryTransformer::GetModuleSymName(Int_t moduleId) const
 {
 /// Return the module symbolic name (use for alignment)
 
-  const AliMUONGeometryModuleTransformer* kTransformer 
-    = GetModuleTransformer(moduleId);
-  if ( ! kTransformer ) {
-    AliErrorStream() << "Module " << moduleId << " not found." << endl; 
-    return "";
-  }   
-  
-  return "/" + fDetectorName + "/" + kTransformer->GetModuleName();
+  return "/" + fDetectorName + "/" 
+             + AliMUONGeometryModuleTransformer::GetModuleName(moduleId);
 }  
 
 //______________________________________________________________________________
@@ -623,17 +451,11 @@ TString AliMUONGeometryTransformer::GetDESymName(Int_t detElemId) const
 {
 /// Return the detection element symbolic name (used for alignment)
 
-  const AliMUONGeometryDetElement* kDetElement 
-    = GetDetElement(detElemId);
-  if ( ! kDetElement ) {
-    AliErrorStream() << "Det element " << detElemId << " not found." << endl; 
-    return "";
-  }   
-  
   // Module Id
   Int_t moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
 
-  return GetModuleSymName(moduleId) + "/" + kDetElement->GetDEName();
+  return GetModuleSymName(moduleId) + "/" 
+         + AliMUONGeometryDetElement::GetDEName(detElemId);
 }  
 
 //
@@ -642,94 +464,40 @@ TString AliMUONGeometryTransformer::GetDESymName(Int_t detElemId) const
 
 //______________________________________________________________________________
 Bool_t  
-AliMUONGeometryTransformer::ReadGeometryData(
-                                const TString& volPathFileName,
-                                const TString& transformFileName)
+AliMUONGeometryTransformer::LoadGeometryData(const TString& fileName)
 {
-/// Read geometry data from given files;
-/// if transformFileName has ".root" extension, the transformations
-/// are loaded from root geometry file, otherwise ASCII file
-/// format is supposed
+/// Read geometry data either from ASCII file with transformations or
+/// from root geometry file (if fileName has ".root" extension)
 
-  Bool_t result1 = ReadVolPaths(volPathFileName);
+  CreateModules();
 
   // Get file extension
-  std::string fileName = transformFileName.Data();
-  std::string rootExt = fileName.substr(fileName.size()-5, fileName.size());
-  Bool_t result2;
-  if ( rootExt != ".root" ) 
-    result2 = ReadTransformations(transformFileName);
-  else   
-    result2 = ReadTransformations2(transformFileName);
-  
-  return result1 && result2;
-}  
-
-//______________________________________________________________________________
-Bool_t  
-AliMUONGeometryTransformer::ReadGeometryData(
-                                const TString& volPathFileName,
-                                TGeoManager* tgeoManager)
-{
-/// Load geometry data from root geometry using defined
-/// volume paths from file
-
-  Bool_t result1 = ReadVolPaths(volPathFileName);
-
-  Bool_t result2 = LoadTransforms(tgeoManager);
+  std::string fileName2 = fileName.Data();
+  std::string rootExt = fileName2.substr(fileName2.size()-5, fileName2.size());
   
-  return result1 && result2;
+  if ( rootExt != ".root" ) 
+    return ReadTransformations(fileName);
+  else  { 
+    // Load root geometry
+    AliGeomManager::LoadGeometry(fileName.Data());
+    return LoadTransformations();
+  }  
 }  
 
 //______________________________________________________________________________
 Bool_t  
-AliMUONGeometryTransformer::WriteGeometryData(
-                                 const TString& volPathFileName,
-                                 const TString& transformFileName,
-                                const TString& misalignFileName) const
+AliMUONGeometryTransformer::LoadGeometryData()
 {
-/// Write geometry data into given files
+/// Load geometry data from already loaded Root geometry using AliGeomManager
 
-  Bool_t result1 = WriteVolumePaths(volPathFileName);
-  Bool_t result2 = WriteTransformations(transformFileName);
-  
-  Bool_t result3 = true;
-  if ( misalignFileName != "" )
-    result3 = WriteMisAlignmentData(misalignFileName);
-  
-  return result1 && result2 && result3;
-}
-                                
-//______________________________________________________________________________
-Bool_t  
-AliMUONGeometryTransformer::WriteVolumePaths(const TString& fileName) const
-{
-/// Write volume paths for modules and detection element volumes into a file.
-/// Return true, if writing finished correctly.
+  if ( ! AliGeomManager::GetGeometry() ) {
+    AliErrorStream() << "Geometry has not been loaded in AliGeomManager" << endl;
+    return false;
+  }    
 
-  // No writing
-  // if builder is not associated with any geometry module
-  if (fModuleTransformers->GetEntriesFast() == 0) return false;
+  CreateModules();
 
-  // File path
-  TString filePath = gSystem->Getenv("ALICE_ROOT");
-  filePath += "/MUON/data/";
-  filePath += fileName;
-  
-  // Open output file
-  ofstream out(filePath, ios::out);
-  if (!out) {
-    cerr << filePath << endl;  
-    AliError("File not found.");
-    return false;
-  }
-#if !defined (__DECCXX)
-  out.setf(std::ios::fixed);
-#endif
-  WriteModuleVolPaths(out);
-  WriteDetElemVolPaths(out);
-  
-  return true;
+  return LoadTransformations();
 }  
 
 //______________________________________________________________________________
@@ -867,6 +635,40 @@ void  AliMUONGeometryTransformer::AddMisAlignDetElement(Int_t detElemId,
                                       const_cast<TGeoHMatrix&>(matrix),kTRUE);
 }
 
+//______________________________________________________________________________
+void AliMUONGeometryTransformer::CreateModules()
+{
+/// Create modules and their detection elements using info from mapping;
+/// but do not fill matrices
+
+
+  // Loop over geometry module
+  for (Int_t moduleId = 0; moduleId < AliMpConstants::NofGeomModules(); ++moduleId ) {
+    
+    // Create geometry module transformer
+    AliMUONGeometryModuleTransformer* moduleTransformer
+      = new AliMUONGeometryModuleTransformer(moduleId);
+    AddModuleTransformer(moduleTransformer);
+  }   
+    
+  // Loop over detection elements
+  AliMpDEIterator it;
+  for ( it.First(); ! it.IsDone(); it.Next() ) {
+    
+    Int_t detElemId = it.CurrentDEId();
+    Int_t moduleId = AliMpDEManager::GetGeomModuleId(detElemId);
+
+    // Get detection element store
+    AliMpExMap* detElements = 
+      GetModuleTransformer(moduleId)->GetDetElementStore();     
+
+    // Add detection element
+    AliMUONGeometryDetElement* detElement 
+      = new AliMUONGeometryDetElement(detElemId);
+    detElements->Add(detElemId, detElement);
+  }   
+}
+
 //_____________________________________________________________________________
 void AliMUONGeometryTransformer::AddAlignableVolumes() const
 {
@@ -884,14 +686,19 @@ void AliMUONGeometryTransformer::AddAlignableVolumes() const
 
     // Set module symbolic name
     TGeoPNEntry* pnEntry
-      = gGeoManager->SetAlignableEntry(GetModuleSymName(module->GetModuleId()), 
+      = gGeoManager->SetAlignableEntry(GetModuleSymName(module->GetModuleId()),
                                        module->GetVolumePath());
-    // Set module matrix
-    pnEntry->SetMatrix(new TGeoHMatrix(*module->GetTransformation()));  
-       // the matrix will be deleted via TGeoManager                                    
-
-    //cout << "Module sym name: " << GetModuleSymName(module->GetModuleId()) 
-    //     << "  volPath: " << module->GetVolumePath() << endl;
+    if ( ! pnEntry ) {
+      AliErrorStream() 
+        << "Volume path for geometry module "
+        << module->GetModuleId()
+        << " not found in geometry." << endl;
+    }
+    else {
+      // Set module matrix
+      pnEntry->SetMatrix(new TGeoHMatrix(*module->GetTransformation()));  
+       // the matrix will be deleted via TGeoManager  
+    }                                     
 
     // Detection elements
     AliMpExMap* detElements = module->GetDetElementStore();    
@@ -904,12 +711,17 @@ void AliMUONGeometryTransformer::AddAlignableVolumes() const
       TGeoPNEntry* pnEntry
         = gGeoManager->SetAlignableEntry(GetDESymName(detElement->GetId()), 
                                          detElement->GetVolumePath());
-      // Set detection element matrix
-      pnEntry->SetMatrix(new TGeoHMatrix(*detElement->GetGlobalTransformation()));                                      
-       // the matrix will be deleted via TGeoManager                                    
-
-      //cout << "DE name: " << GetDESymName(detElement->GetId()) 
-      //     << "  volPath: " << detElement->GetVolumePath() << endl;
+      if ( ! pnEntry ) {
+        AliErrorStream() 
+          << "Volume path for detection element "
+          << detElement->GetId()
+          << " not found in geometry." << endl;
+      }
+      else {
+        // Set detection element matrix
+        pnEntry->SetMatrix(new TGeoHMatrix(*detElement->GetGlobalTransformation()));                                      
+         // the matrix will be deleted via TGeoManager 
+      }                                      
     }  
   }     
 }           
index 1ca5bdc037e665b3f161467070e4b92d3cb3266b..7274c2dab462d6eed6560259ae3cc8a90531347f 100644 (file)
@@ -9,10 +9,12 @@
 ///
 /// Geometry transformations can be filled in these ways:
 /// - by geometry builder when geometry is built via builders
-/// - from Root geometry file (*.root) or Root geometry manager
-/// - from ASCII file (*.dat)
-/// If geometry is loaded from a file, the list of aligned volume paths
-/// has to be read first from volpaths.dat file.
+///   (this way is used when running simulation and building geometry
+///    via VirtualMC)
+/// - from Root geometry file (*.root) or ASCII file (*.dat) using
+///   the method LoadGeometryData(const TString& fileName)
+/// - from geometry loaded in AliGeomManager using
+///   the method LoadGeometryData() without arguments
 /// 
 /// \author Ivana Hrivnacova, IPN Orsay
 
@@ -32,31 +34,25 @@ class TClonesArray;
 class AliMUONGeometryTransformer : public TObject
 {
   public:
-    AliMUONGeometryTransformer(Bool_t isOwner, const TString& detName = "MUON");
     AliMUONGeometryTransformer();
+    AliMUONGeometryTransformer(TRootIOCtor* /*ioCtor*/);
     virtual  ~AliMUONGeometryTransformer();
     
     // methods
     void  AddModuleTransformer(AliMUONGeometryModuleTransformer* transformer);
     void  AddMisAlignModule(Int_t moduleId, const TGeoHMatrix& matrix);
     void  AddMisAlignDetElement(Int_t detElemId, const TGeoHMatrix& matrix);
+    void  CreateModules();
 
     void  AddAlignableVolumes() const; 
     TClonesArray* CreateZeroAlignmentData() const;
-    void  ClearMisAlignmentData();                            
+    void  ClearMisAlignmentData();     
 
     // IO
     //
-    Bool_t  ReadGeometryData(const TString& volPathFileName,
-                             const TString& transformFileName);
-    Bool_t  ReadGeometryData(const TString& volPathFileName,
-                             TGeoManager* geoManager);
-
-    Bool_t  WriteGeometryData(const TString& volPathFileName,
-                             const TString& transformFileName,
-                            const TString& misalignFileName = "") const;
-   
-    Bool_t  WriteVolumePaths(const TString& fileName) const;
+    Bool_t  LoadGeometryData(const TString& fileName);
+    Bool_t  LoadGeometryData();
+
     Bool_t  WriteTransformations(const TString& fileName) const;
     Bool_t  WriteMisAlignmentData(const TString& fileName) const;
 
@@ -75,6 +71,10 @@ class AliMUONGeometryTransformer : public TObject
     void Local2Global(Int_t detElemId,
                  Double_t xl, Double_t yl, Double_t zl, 
                  Double_t& xg, Double_t& yg, Double_t& zg) const;
+                 
+    // Set methods
+    void SetDetName(const TString& detName);                 
+    void SetOwner(Bool_t isOwner);                 
 
     // Get methods
     //
@@ -108,9 +108,6 @@ class AliMUONGeometryTransformer : public TObject
                  Double_t a1, Double_t a2, Double_t a3, 
                  Double_t a4, Double_t a5, Double_t a6) const;
 
-    void FillModuleVolPath(Int_t moduleId, const TString& volPath); 
-    void FillDetElemVolPath(Int_t detElemId, const TString& volPath); 
-
     void FillModuleTransform(Int_t moduleId,
                   Double_t x, Double_t y, Double_t z,
                  Double_t a1, Double_t a2, Double_t a3, 
@@ -120,30 +117,28 @@ class AliMUONGeometryTransformer : public TObject
                  Double_t a1, Double_t a2, Double_t a3, 
                  Double_t a4, Double_t a5, Double_t a6);
 
-    Bool_t  ReadVolPaths(ifstream& in);
     TString ReadModuleTransforms(ifstream& in);
     TString ReadDetElemTransforms(ifstream& in);
-    Bool_t  LoadTransforms(TGeoManager* tgeoManager); 
-
-    Bool_t  ReadVolPaths(const TString& fileName);
     Bool_t  ReadTransformations(const TString& fileName);
-    Bool_t  ReadTransformations2(const TString& fileName);
+    Bool_t  LoadTransformations(); 
 
     void    WriteTransform(ofstream& out, const TGeoMatrix* transform) const;
-    void    WriteModuleVolPaths(ofstream& out) const;
-    void    WriteDetElemVolPaths(ofstream& out) const;
     void    WriteModuleTransforms(ofstream& out) const;
     void    WriteDetElemTransforms(ofstream& out) const;
     
     TString GetModuleSymName(Int_t moduleId) const;
     TString GetDESymName(Int_t detElemId) const;
+    
+    // static data members
+    static const TString  fgkDefaultDetectorName; ///< Default detector name
+    
 
     // data members
     TString        fDetectorName;       ///< Detector name
     TObjArray*     fModuleTransformers; ///< array of module transformers
     TClonesArray*  fMisAlignArray;      ///< array of misalignment data
 
-  ClassDef(AliMUONGeometryTransformer,2)  // Geometry parametrisation
+  ClassDef(AliMUONGeometryTransformer,3)  // Geometry parametrisation
 };
 
 // inline methods
@@ -155,6 +150,14 @@ inline Int_t AliMUONGeometryTransformer::GetNofModuleTransformers() const
 /// Return the array of misalignment data
 inline const TClonesArray* AliMUONGeometryTransformer::GetMisAlignmentData() const     
 { return fMisAlignArray; }                    
+                              
+/// Set detector name
+inline void AliMUONGeometryTransformer::SetDetName(const TString& detName)
+{  fDetectorName = detName; }               
+
+/// Set ownership of array module transformers
+inline void AliMUONGeometryTransformer::SetOwner(Bool_t isOwner)
+{  fModuleTransformers->SetOwner(isOwner); }               
 
 #endif //ALI_MUON_GEOMETRY_TRANSFORMER_H