]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONGeometryBuilder.cxx
Logging of Debug, Info and Error Messages follwing AliRoot Standard http://aliweb...
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryBuilder.cxx
index 2639be8cbd09ec0fe9e408bafd87583998766ca7..4990d3e6e591a341493a5ebc90de4e63fb97902e 100644 (file)
 #include "AliMUONVGeometryBuilder.h"   
 #include "AliMUONChamberGeometry.h"    
 #include "AliMUONGeometryEnvelope.h"   
+#include "AliMUONGeometryEnvelopeStore.h"
 #include "AliMUONGeometryConstituent.h"        
 #include "AliMagF.h"
 #include "AliRun.h"
+#include "AliLog.h"
 
 ClassImp(AliMUONGeometryBuilder)
  
@@ -43,6 +45,7 @@ ClassImp(AliMUONGeometryBuilder)
 AliMUONGeometryBuilder::AliMUONGeometryBuilder() 
   : TObject(),
     fMUON(0),
+    fAlign(false),
     fGlobalTransformation(0),
     fGeometryBuilders(0)
 {
@@ -53,6 +56,7 @@ AliMUONGeometryBuilder::AliMUONGeometryBuilder()
 AliMUONGeometryBuilder::AliMUONGeometryBuilder(AliMUON* muon)
   : TObject(),
     fMUON(muon),
+    fAlign(false),
     fGlobalTransformation(0), 
     fGeometryBuilders(0)
 {
@@ -74,7 +78,7 @@ AliMUONGeometryBuilder::AliMUONGeometryBuilder(const AliMUONGeometryBuilder& rig
 {  
   // copy constructor (not implemented)
 
-  Fatal("AliMUONGeometryBuilder", "Copy constructor not provided.");
+  AliFatal("Copy constructor not provided.");
 }
 
 //______________________________________________________________________________
@@ -99,7 +103,7 @@ AliMUONGeometryBuilder::operator=(const AliMUONGeometryBuilder& right)
   // check assignement to self
   if (this == &right) return *this;
 
-  Fatal("operator =", "Assignement operator not provided.");
+  AliFatal("Assignement operator not provided.");
     
   return *this;  
 }    
@@ -197,8 +201,14 @@ void AliMUONGeometryBuilder::CreateGeometry()
 
     // Create geometry with each builder
     if (builder) {
-      builder->CreateGeometry();
-      builder->SetTransformations();
+      if (fAlign) {
+        builder->ReadTransformations();
+        builder->CreateGeometry();
+      }
+      else {  
+        builder->CreateGeometry();
+        builder->SetTransformations();
+      } 
     }
   }
 
@@ -210,7 +220,7 @@ void AliMUONGeometryBuilder::CreateGeometry()
           // Skip chambers with not defined geometry  
          
     // Loop over envelopes
-    const TObjArray* kEnvelopes = geometry->GetEnvelopes();
+    const TObjArray* kEnvelopes = geometry->GetEnvelopeStore()->GetEnvelopes();
     for (Int_t k=0; k<kEnvelopes->GetEntriesFast(); k++) {
 
       // Get envelope
@@ -223,7 +233,7 @@ void AliMUONGeometryBuilder::CreateGeometry()
         // virtual envelope + nof constituents = 0 
         //         => not allowed;
         //            empty virtual envelope has no sense 
-        Fatal("CreateGeometry", "Virtual envelope must have constituents.");
+        AliFatal("Virtual envelope must have constituents.");
         return;
       }
 
@@ -231,7 +241,7 @@ void AliMUONGeometryBuilder::CreateGeometry()
         // non virtual envelope + nof constituents > 0 
         //        => not allowed;
         //           use VMC to place constituents
-        Fatal("CreateGeometry", "Non virtual envelope cannot have constituents.");
+        AliFatal("Non virtual envelope cannot have constituents.");
         return;
       }
 
@@ -436,7 +446,45 @@ void AliMUONGeometryBuilder::InitGeometry()
       = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
 
     // Set sesitive volumes with each builder
-    if (builder) builder->SetSensitiveVolumes();
+    builder->SetSensitiveVolumes();
+
+    // Read sensitive volume map from a file
+    builder->ReadSVMap();
+    if (!fAlign)  builder->FillTransformations();
+  }
+}
+
+//______________________________________________________________________________
+void AliMUONGeometryBuilder::WriteTransformations()
+{
+ // Writes transformations into files per builder
+ // ---
+
+  for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
+
+    // Get the builder
+    AliMUONVGeometryBuilder* builder
+      = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
+
+    // Write transformations
+    builder->WriteTransformations();
+  }
+}
+
+//______________________________________________________________________________
+void AliMUONGeometryBuilder::WriteSVMaps(Bool_t rebuild)
+{
+ // Writes sensitive volume maps into files per builder
+ // ---
+
+  for (Int_t i=0; i<fGeometryBuilders->GetEntriesFast(); i++) {
+
+    // Get the builder
+    AliMUONVGeometryBuilder* builder
+      = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
+
+    // Write transformations      
+    builder->WriteSVMap(rebuild);
   }
 }
 
@@ -449,3 +497,23 @@ void AliMUONGeometryBuilder::AddBuilder(AliMUONVGeometryBuilder* geomBuilder)
   fGeometryBuilders->Add(geomBuilder);
 }
 
+//_____________________________________________________________________________
+void AliMUONGeometryBuilder::SetAlign(Bool_t align)
+{ 
+// Sets the option for alignement
+// ---
+
+  fAlign = align; 
+
+  for (Int_t j=0; j<AliMUONConstants::NCh(); j++) {
+
+    AliMUONChamberGeometry* geometry = fMUON->Chamber(j).GetGeometry();
+
+    if (!geometry) continue;
+          // Skip chambers with not defined geometry  
+         
+    geometry->SetAlign(align);   
+  }      
+}
+
+