From 327d130227ab92bc5eb1661b2a84c548735c2086 Mon Sep 17 00:00:00 2001 From: ivana Date: Thu, 28 Jun 2007 16:27:54 +0000 Subject: [PATCH] - Removing use of volpath.dat file, now we can use volume symnames 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 | 466 +++++++++------------------- MUON/AliMUONGeometryTransformer.h | 57 ++-- 2 files changed, 169 insertions(+), 354 deletions(-) diff --git a/MUON/AliMUONGeometryTransformer.cxx b/MUON/AliMUONGeometryTransformer.cxx index 3ff6521f6a1..4555490685f 100644 --- a/MUON/AliMUONGeometryTransformer.cxx +++ b/MUON/AliMUONGeometryTransformer.cxx @@ -27,6 +27,7 @@ #include "AliMUONGeometryBuilder.h" #include "AliMpDEManager.h" +#include "AliMpConstants.h" #include "AliMpExMap.h" #include "AliLog.h" @@ -39,19 +40,21 @@ #include #include #include +#include #include /// \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; iGetEntriesFast(); 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; jGetSize(); 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; iGetEntriesFast(); 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; jGetSize(); 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; iGetEntriesFast(); 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; iGetEntriesFast(); i++) { - AliMUONGeometryModuleTransformer* moduleTransformer - = (AliMUONGeometryModuleTransformer*)fModuleTransformers->At(i); - AliMpExMap* detElements = moduleTransformer->GetDetElementStore(); - - for (Int_t j=0; jGetSize(); 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(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 + } } } } diff --git a/MUON/AliMUONGeometryTransformer.h b/MUON/AliMUONGeometryTransformer.h index 1ca5bdc037e..7274c2dab46 100644 --- a/MUON/AliMUONGeometryTransformer.h +++ b/MUON/AliMUONGeometryTransformer.h @@ -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 -- 2.39.3