X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONGeometryBuilder.cxx;h=aea1e7060426f61f0c1c59d85cbcb3f17d5a1b51;hb=e3ddb73e7082564407ba18d673886687e51f9639;hp=f667ad848c09c33b6ee072599aec3e7274dccbbc;hpb=08086cd050746a743b0a9f788e1d4879551a186f;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONGeometryBuilder.cxx b/MUON/AliMUONGeometryBuilder.cxx index f667ad848c0..aea1e706042 100644 --- a/MUON/AliMUONGeometryBuilder.cxx +++ b/MUON/AliMUONGeometryBuilder.cxx @@ -14,12 +14,13 @@ **************************************************************************/ // $Id$ -// + +//----------------------------------------------------------------------------- // Class AliMUONGeometryBuilder // ---------------------------- // Manager class for geometry construction via geometry builders. -// // Author: Ivana Hrivnacova, IPN Orsay +//----------------------------------------------------------------------------- #include "AliMUONGeometryBuilder.h" #include "AliMUONVGeometryBuilder.h" @@ -30,9 +31,10 @@ #include "AliMUONGeometryEnvelope.h" #include "AliMUONGeometryEnvelopeStore.h" #include "AliMUONGeometryDetElement.h" -#include "AliMUONGeometryStore.h" #include "AliMUONGeometryConstituent.h" +#include "AliMpDEManager.h" + #include "AliModule.h" #include "AliLog.h" #include "AliRun.h" @@ -41,9 +43,6 @@ #include #include - -ClassImp(AliMUONGeometryBuilder) - // static data members const TString AliMUONGeometryBuilder::fgkDefaultVolPathsFileName = "volpath.dat"; @@ -51,6 +50,10 @@ const TString AliMUONGeometryBuilder::fgkDefaultTransformFileName = "transform. const TString AliMUONGeometryBuilder::fgkDefaultSVMapFileName = "svmap.dat"; const TString AliMUONGeometryBuilder::fgkOutFileNameExtension = ".out"; +/// \cond CLASSIMP +ClassImp(AliMUONGeometryBuilder) +/// \endcond + // static functions //______________________________________________________________________________ @@ -149,15 +152,6 @@ AliMUONGeometryBuilder::AliMUONGeometryBuilder() /// Default constructor } -//______________________________________________________________________________ -AliMUONGeometryBuilder::AliMUONGeometryBuilder(const AliMUONGeometryBuilder& right) - : TObject(right) -{ -/// Copy constructor (not implemented) - - AliFatal("Copy constructor not provided."); -} - //______________________________________________________________________________ AliMUONGeometryBuilder::~AliMUONGeometryBuilder() { @@ -167,20 +161,6 @@ AliMUONGeometryBuilder::~AliMUONGeometryBuilder() delete fGeometry; } -//______________________________________________________________________________ -AliMUONGeometryBuilder& -AliMUONGeometryBuilder::operator=(const AliMUONGeometryBuilder& right) -{ -/// Assignement operator (not implemented) - - // check assignement to self - if (this == &right) return *this; - - AliFatal("Assignement operator not provided."); - - return *this; -} - // // private functions // @@ -245,7 +225,7 @@ void AliMUONGeometryBuilder::PlaceVolume(const TString& name, const TString& mNa fModule->AliMatrix(krot, theta1, phi1, theta2, phi2, theta3, phi3); } - // Place the volume in ALIC + // Place the volume if (npar == 0) gMC->Gspos(name, copyNo, mName, xyz[0], xyz[1], xyz[2] , krot, only); else @@ -262,7 +242,7 @@ void AliMUONGeometryBuilder::CreateGeometryWithTGeo() if (fAlign) { // Read transformations from ASCII data file fGeometry->GetTransformer() - ->ReadGeometryData(fgkDefaultVolPathsFileName, fTransformFileName); + ->LoadGeometryData(fTransformFileName); } for (Int_t i=0; iGetEntriesFast(); i++) { @@ -274,6 +254,7 @@ void AliMUONGeometryBuilder::CreateGeometryWithTGeo() // Create geometry + envelopes // builder->CreateGeometry(); + builder->SetVolumes(); if (!fAlign) builder->SetTransformations(); // Place module volumes and envelopes @@ -303,6 +284,20 @@ void AliMUONGeometryBuilder::CreateGeometryWithTGeo() AliMUONGeometryEnvelope* env = (AliMUONGeometryEnvelope*)kEnvelopes->At(k); + // Check consistency of detElemId and module Id + if ( env->GetUniqueID() > 0 && + AliMpDEManager::GetGeomModuleId(env->GetUniqueID()) + != geometry->GetModuleId() ) { + + AliErrorStream() + << "Detection element " << env->GetUniqueID() + << " is being placed in geometry module " << geometry->GetModuleId() + << " but should go in " + << AliMpDEManager::GetGeomModuleId(env->GetUniqueID()) + << endl; + AliFatal("Inconsistent IDs"); + } + const TGeoCombiTrans* kEnvTrans = env->GetTransformation(); const char* only = "ONLY"; if (env->IsMANY()) only = "MANY"; @@ -352,12 +347,11 @@ void AliMUONGeometryBuilder::CreateGeometryWithTGeo() void AliMUONGeometryBuilder::CreateGeometryWithoutTGeo() { /// Construct geometry using geometry builders. -/// Virtual modules/enevlopes are not placed +/// Virtual modules/envelopes are not placed if (fAlign) { // Read transformations from ASCII data file - fGeometry->GetTransformer() - ->ReadGeometryData(fgkDefaultVolPathsFileName, fTransformFileName); + fGeometry->GetTransformer()->LoadGeometryData(fTransformFileName); } for (Int_t i=0; iGetEntriesFast(); i++) { @@ -400,6 +394,20 @@ void AliMUONGeometryBuilder::CreateGeometryWithoutTGeo() AliMUONGeometryEnvelope* env = (AliMUONGeometryEnvelope*)kEnvelopes->At(k); + // Check consistency of detElemId and module Id + if ( env->GetUniqueID() > 0 && + AliMpDEManager::GetGeomModuleId(env->GetUniqueID()) + != geometry->GetModuleId() ) { + + AliErrorStream() + << "Detection element " << env->GetUniqueID() + << " is being placed in geometry module " << geometry->GetModuleId() + << " but should go in " + << AliMpDEManager::GetGeomModuleId(env->GetUniqueID()) + << endl; + AliFatal("Inconsistent IDs"); + } + const TGeoCombiTrans* kEnvTrans = env->GetTransformation(); const char* only = "ONLY"; if (env->IsMANY()) only = "MANY"; @@ -422,7 +430,7 @@ void AliMUONGeometryBuilder::CreateGeometryWithoutTGeo() if (!env->IsVirtual() && env->GetConstituents()->GetEntriesFast() == 0 ) { // non virtual envelope + nof constituents = 0 - // => place envelope in ALICE by composed transformation: + // => place envelope by composed transformation: // Tch * [Tglobal] * Tenv // Compound chamber transformation with the envelope one @@ -446,7 +454,7 @@ void AliMUONGeometryBuilder::CreateGeometryWithoutTGeo() if (env->IsVirtual() && env->GetConstituents()->GetEntriesFast() > 0 ) { // virtual envelope + nof constituents > 0 // => do not place envelope and place constituents - // in ALICE by composed transformation: + // by composed transformation: // Tch * [Tglobal] * Tenv * Tconst for (Int_t l=0; lGetConstituents()->GetEntriesFast(); l++) { @@ -522,13 +530,23 @@ void AliMUONGeometryBuilder::CreateGeometry() { /// Construct geometry using geometry builders. - if ( gMC->IsRootGeometrySupported() && - TString(gMC->ClassName()) != "TGeant4" ) { + if ( gMC->IsRootGeometrySupported() ) { CreateGeometryWithTGeo(); } else CreateGeometryWithoutTGeo(); + + for (Int_t i=0; iGetEntriesFast(); i++) { + + // Get the builder + AliMUONVGeometryBuilder* builder + = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i); + + // Update detection elements from built geometry + Bool_t create = ! fAlign; + builder->UpdateDetElements(create); + } } //_____________________________________________________________________________ @@ -555,14 +573,12 @@ void AliMUONGeometryBuilder::InitGeometry(const TString& svmapFileName) // Load alignement data from geometry if geometry is read from Root file if ( gAlice->IsRootGeometry() ) { fAlign = true; - - fGeometry->GetTransformer() - ->ReadGeometryData(fgkDefaultVolPathsFileName, gGeoManager); - } + fGeometry->GetTransformer()->LoadGeometryData(); + } // Read sensitive volume map from a file fGeometry->ReadSVMap(svmapFileName); - + // Set the chamber (sensitive region) GEANT identifier // for (Int_t i=0; iGetEntriesFast(); i++) { @@ -573,17 +589,21 @@ void AliMUONGeometryBuilder::InitGeometry(const TString& svmapFileName) // Set sensitive volumes with each builder builder->SetSensitiveVolumes(); - - if (!fAlign) { - // Create detection elements from built geometry - builder->CreateDetElements(); - } } } +//________________________________________________________________ +void AliMUONGeometryBuilder::UpdateInternalGeometry() +{ +/// Update geometry after applying mis-alignment: +/// reload transformations in geometry builder. + + fGeometry->GetTransformer()->LoadTransformations(); +} + //______________________________________________________________________________ void AliMUONGeometryBuilder::WriteSVMaps(const TString& fileName, - Bool_t rebuild) + Bool_t rebuild, Bool_t writeEnvelopes) { /// Write sensitive volume maps into files per builder @@ -595,10 +615,6 @@ void AliMUONGeometryBuilder::WriteSVMaps(const TString& fileName, AliMUONVGeometryBuilder* builder = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i); - Bool_t writeEnvelopes = false; - if ( gMC->IsRootGeometrySupported() && - TString(gMC->ClassName()) != "TGeant4") writeEnvelopes = true; - builder->RebuildSVMaps(writeEnvelopes); } @@ -625,7 +641,7 @@ void AliMUONGeometryBuilder::SetAlign(Bool_t align) //_____________________________________________________________________________ void AliMUONGeometryBuilder::SetAlign(const TString& fileName, Bool_t align) { -/// Set the option for alignement +/// Set the option for alignement and the transformations file name fTransformFileName = fileName; fAlign = align;