Making SetAlign option working aagain:
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Jun 2008 14:11:46 +0000 (14:11 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Jun 2008 14:11:46 +0000 (14:11 +0000)
In AliMUONVGeometryBuilder:
- Introduced new method SetVolumes(), separated from SetTransformations(),
  as this setting has to be done always
- Method CreateDetElements() replaced with UpdateDetElements(Bool_t),
  det elements are not created if SetAlign option is switched on
In all geometry builders:
- Implemented the new method SetVolumes() by separating the the code
  from SetTransformations()

17 files changed:
MUON/AliMUONCommonGeometryBuilder.h
MUON/AliMUONGeometryBuilder.cxx
MUON/AliMUONGeometryTransformer.cxx
MUON/AliMUONSlatGeometryBuilder.cxx
MUON/AliMUONSlatGeometryBuilder.h
MUON/AliMUONSt1GeometryBuilder.cxx
MUON/AliMUONSt1GeometryBuilder.h
MUON/AliMUONSt1GeometryBuilderV2.cxx
MUON/AliMUONSt1GeometryBuilderV2.h
MUON/AliMUONSt2GeometryBuilder.cxx
MUON/AliMUONSt2GeometryBuilder.h
MUON/AliMUONSt2GeometryBuilderV2.cxx
MUON/AliMUONSt2GeometryBuilderV2.h
MUON/AliMUONTriggerGeometryBuilder.cxx
MUON/AliMUONTriggerGeometryBuilder.h
MUON/AliMUONVGeometryBuilder.cxx
MUON/AliMUONVGeometryBuilder.h

index 81e0c58..18b7418 100644 (file)
@@ -28,6 +28,7 @@ class AliMUONCommonGeometryBuilder : public AliMUONVGeometryBuilder
     virtual void  CreateMaterials();
     virtual void  CreateGeometry()      {}  ///< No geometry is created
     virtual void  SetSensitiveVolumes() {}  ///< No sensitive volumes are set
+    virtual void  SetVolumes()          {}  ///< No volumes are set
     virtual void  SetTransformations()  {}  ///< No transformations are set
 
   protected:
index 1421411..c17062c 100644 (file)
@@ -254,6 +254,7 @@ void AliMUONGeometryBuilder::CreateGeometryWithTGeo()
     // Create geometry + envelopes
     //
     builder->CreateGeometry();
+    builder->SetVolumes();
     if (!fAlign) builder->SetTransformations();
     
     // Place module volumes and envelopes
@@ -541,10 +542,11 @@ void AliMUONGeometryBuilder::CreateGeometry()
     // Get the builder
     AliMUONVGeometryBuilder* builder
       = (AliMUONVGeometryBuilder*)fGeometryBuilders->At(i);
-
-    // Create detection elements from built geometry
-    builder->CreateDetElements();
-  }  
+    // Update detection elements from built geometry
+    Bool_t create = ! fAlign;
+    builder->UpdateDetElements(create);
+  }
 }
 
 //_____________________________________________________________________________
index 19c0564..1c6dca5 100644 (file)
@@ -762,14 +762,18 @@ void AliMUONGeometryTransformer::CreateModules()
   // Load mapping as its info is used to define modules & DEs
   LoadMapping();
 
-  // Loop over geometry module
-  for (Int_t moduleId = 0; moduleId < AliMpConstants::NofGeomModules(); ++moduleId ) {
+  if ( fModuleTransformers->GetEntriesFast() == 0 ) {
+    // Create modules only if they do not yet exist
+
+    // Loop over geometry module
+    for (Int_t moduleId = 0; moduleId < AliMpConstants::NofGeomModules(); ++moduleId ) {
     
-    // Create geometry module transformer
-    AliMUONGeometryModuleTransformer* moduleTransformer
-      = new AliMUONGeometryModuleTransformer(moduleId);
-    AddModuleTransformer(moduleTransformer);
-  }   
+      // Create geometry module transformer
+      AliMUONGeometryModuleTransformer* moduleTransformer
+        = new AliMUONGeometryModuleTransformer(moduleId);
+      AddModuleTransformer(moduleTransformer);
+    }
+  }     
     
   // Loop over detection elements
   AliMpDEIterator it;
@@ -810,8 +814,8 @@ void AliMUONGeometryTransformer::AddAlignableVolumes() const
                                        module->GetVolumePath());
     if ( ! pnEntry ) {
       AliErrorStream() 
-        << "Volume path for geometry module "
-        << module->GetModuleId()
+        << "Volume path " << module->GetVolumePath().Data()
+        << " for geometry module " << module->GetModuleId() << " " << module
         << " not found in geometry." << endl;
     }
     else {
@@ -833,8 +837,9 @@ void AliMUONGeometryTransformer::AddAlignableVolumes() const
                                          detElement->GetVolumePath());
       if ( ! pnEntryDE ) {
         AliErrorStream() 
-          << "Volume path for detection element "
-          << detElement->GetId()
+          << "Volume path " 
+          << detElement->GetVolumePath().Data() 
+          << " for detection element " << detElement->GetId()
           << " not found in geometry." << endl;
       }
       else {
index b6cce47..a212a91 100644 (file)
@@ -2054,11 +2054,10 @@ void AliMUONSlatGeometryBuilder::CreateGeometry()
 
 }
 
-
 //______________________________________________________________________________
-void AliMUONSlatGeometryBuilder::SetTransformations()
+void AliMUONSlatGeometryBuilder::SetVolumes()
 {
-/// Defines the transformations for the station345 chambers.
+/// Defines the volumes for the station345 chambers.
 
   if (gAlice->GetModule("DIPO")) {
     // if DIPO is preset, the whole station will be placed in DDIP volume
@@ -2091,6 +2090,13 @@ void AliMUONSlatGeometryBuilder::SetTransformations()
   SetVolume(13, "SC09O", true);
   SetVolume(14, "SC10I", true);
   SetVolume(15, "SC10O", true);
+}
+
+
+//______________________________________________________________________________
+void AliMUONSlatGeometryBuilder::SetTransformations()
+{
+/// Defines the transformations for the station345 chambers.
 
 // Stations 345 are not perpendicular to the beam axis
 // See AliMUONConstants class
index bdcb455..ddacc87 100644 (file)
@@ -27,6 +27,7 @@ class AliMUONSlatGeometryBuilder : public AliMUONVGeometryBuilder
 
     // methods
     virtual void CreateGeometry();
+    virtual void SetVolumes();
     virtual void SetTransformations();
     virtual void SetSensitiveVolumes();
 
index 8d29a1d..bcc9ebb 100644 (file)
@@ -270,6 +270,12 @@ void AliMUONSt1GeometryBuilder::CreateGeometry()
 }
 
 //______________________________________________________________________________
+void AliMUONSt1GeometryBuilder::SetVolumes() 
+{
+/// Define the volumes for the station2 chambers.
+}
+
+//______________________________________________________________________________
 void AliMUONSt1GeometryBuilder::SetTransformations()
 {
 /// Define the transformations for the station2 chambers.
index da2d4f6..211df7d 100644 (file)
@@ -27,6 +27,7 @@ class AliMUONSt1GeometryBuilder : public AliMUONVGeometryBuilder
   
     // methods
     virtual void CreateGeometry();
+    virtual void SetVolumes();
     virtual void SetTransformations();
     virtual void SetSensitiveVolumes();
     
index 286c62e..2bd3a88 100644 (file)
@@ -2801,9 +2801,9 @@ void AliMUONSt1GeometryBuilderV2::CreateGeometry()
 }
 
 //______________________________________________________________________________
-void AliMUONSt1GeometryBuilderV2::SetTransformations() 
+void AliMUONSt1GeometryBuilderV2::SetVolumes() 
 {
-/// Define the transformations for the station2 chambers.
+/// Define the volumes for the station2 chambers.
 
   if (gAlice->GetModule("SHIL")) {
     SetMotherVolume(0, "YOUT1");
@@ -2812,6 +2812,12 @@ void AliMUONSt1GeometryBuilderV2::SetTransformations()
 
   SetVolume(0, "SC01", true);
   SetVolume(1, "SC02", true);
+}
+
+//______________________________________________________________________________
+void AliMUONSt1GeometryBuilderV2::SetTransformations() 
+{
+/// Define the transformations for the station2 chambers.
 
   Double_t zpos1 = - AliMUONConstants::DefaultChamberZ(0); 
   SetTranslation(0, TGeoTranslation(0., 0., zpos1));
index ba9cde3..a9e4b46 100644 (file)
@@ -43,6 +43,7 @@ class AliMUONSt1GeometryBuilderV2 : public AliMUONVGeometryBuilder
 
     virtual void CreateMaterials();
     virtual void CreateGeometry();
+    virtual void SetVolumes();
     virtual void SetTransformations();
     virtual void SetSensitiveVolumes();
    
index 18de72d..de0f380 100644 (file)
@@ -192,13 +192,19 @@ void AliMUONSt2GeometryBuilder::CreateGeometry()
 }
 
 //______________________________________________________________________________
-void AliMUONSt2GeometryBuilder::SetTransformations()
+void AliMUONSt2GeometryBuilder::SetVolumes()
 {
-/// Defines the transformations for the station2 chambers.
+/// Defines the volumes for the station2 chambers.
 
   // Define chamber volumes as virtual
   SetVolume(2, "SC03", true);
   SetVolume(3, "SC04", true);
+}
+
+//______________________________________________________________________________
+void AliMUONSt2GeometryBuilder::SetTransformations()
+{
+/// Defines the transformations for the station2 chambers.
 
   Double_t zpos1 = - AliMUONConstants::DefaultChamberZ(2); 
   SetTranslation(2, TGeoTranslation(0., 0., zpos1));
index 459a443..92fe8ae 100644 (file)
@@ -27,6 +27,7 @@ class AliMUONSt2GeometryBuilder : public AliMUONVGeometryBuilder
   
     // methods
     virtual void CreateGeometry();
+    virtual void SetVolumes();
     virtual void SetTransformations();
     virtual void SetSensitiveVolumes();
     
index 009287d..6bc441e 100644 (file)
@@ -761,9 +761,9 @@ void AliMUONSt2GeometryBuilderV2::CreateGeometry()
 
 }
 //______________________________________________________________________________
-void AliMUONSt2GeometryBuilderV2::SetTransformations()
+void AliMUONSt2GeometryBuilderV2::SetVolumes()
 {
-/// Defines the transformations for the station2 chambers.
+/// Defines the volumes for the station2 chambers.
 
   if (gAlice->GetModule("SHIL")) {
     SetMotherVolume(2, "YOUT1");
@@ -773,6 +773,12 @@ void AliMUONSt2GeometryBuilderV2::SetTransformations()
   // Define chamber volumes as virtual
   SetVolume(2, "SC03", true);
   SetVolume(3, "SC04", true);
+}
+
+//______________________________________________________________________________
+void AliMUONSt2GeometryBuilderV2::SetTransformations()
+{
+/// Defines the transformations for the station2 chambers.
 
   Double_t zpos1 = - AliMUONConstants::DefaultChamberZ(2); 
   SetTranslation(2, TGeoTranslation(0., 0., zpos1));
index a822b40..1540a9e 100644 (file)
@@ -27,6 +27,7 @@ class AliMUONSt2GeometryBuilderV2 : public AliMUONVGeometryBuilder
   
     // methods
     virtual void CreateGeometry();
+    virtual void SetVolumes();
     virtual void SetTransformations();
     virtual void SetSensitiveVolumes();
     
index 1c06ad7..37f8782 100644 (file)
@@ -1676,9 +1676,9 @@ void AliMUONTriggerGeometryBuilder::CreateGeometry()
 }
 
 //______________________________________________________________________________
-void AliMUONTriggerGeometryBuilder::SetTransformations() 
+void AliMUONTriggerGeometryBuilder::SetVolumes() 
 {
-/// Defines the transformations for the trigger chambers.
+/// Defines the volumes for the trigger chambers.
 
     if (gAlice->GetModule("SHIL")) {
       SetMotherVolume(16, "YOUT2");
@@ -1691,6 +1691,12 @@ void AliMUONTriggerGeometryBuilder::SetTransformations()
     SetVolume(17, "SC12");
     SetVolume(18, "SC13");
     SetVolume(19, "SC14");
+}
+
+//______________________________________________________________________________
+void AliMUONTriggerGeometryBuilder::SetTransformations() 
+{
+/// Defines the transformations for the trigger chambers.
 
     Double_t zpos1= AliMUONConstants::DefaultChamberZ(10); 
     SetTranslation(16, TGeoTranslation(0., 0., zpos1));
index 9301776..9f31619 100644 (file)
@@ -26,6 +26,7 @@ class AliMUONTriggerGeometryBuilder : public AliMUONVGeometryBuilder
   
     // methods
     virtual void CreateGeometry();
+    virtual void SetVolumes();
     virtual void SetTransformations();
     virtual void SetSensitiveVolumes();
     
index 7c55f6d..9a4d3dd 100644 (file)
@@ -350,12 +350,14 @@ void  AliMUONVGeometryBuilder::SetReferenceFrame(
   }          
 }
 
-
 //______________________________________________________________________________
-void  AliMUONVGeometryBuilder::CreateDetElements() const
+void  AliMUONVGeometryBuilder::UpdateDetElements(Bool_t create) const
 {
-/// Create detection elements and fill their global and
-/// local transformations from geometry.
+/// Create or update detection elements:
+/// - if parameter create is true: detection elements are
+/// created and their global and local transformations are filled from geometry.
+/// - otherwise: only the volume path is passed from geometry
+/// to detection elements
 
   for (Int_t i=0; i<fGeometryModules->GetEntriesFast(); i++) {
     AliMUONGeometryModule* geometry 
@@ -381,29 +383,39 @@ void  AliMUONVGeometryBuilder::CreateDetElements() const
       TString volPath = geometry->GetVolumePath();
       volPath += ComposePath(envelope->GetName(), envelope->GetCopyNo());
 
-      // Create detection element 
-      AliMUONGeometryDetElement* detElement
-        = new AliMUONGeometryDetElement(detElemId, volPath);
-      detElements->Add(detElemId, detElement);
+      if ( create ) {
+        // Create detection element 
+        AliMUONGeometryDetElement* detElement
+          = new AliMUONGeometryDetElement(detElemId, volPath);
+        detElements->Add(detElemId, detElement);
       
-      // Compose  local transformation
-      const TGeoCombiTrans* transform = envelope->GetTransformation(); 
-      // Apply frame transform
-      TGeoHMatrix localTransform = ConvertDETransform(*transform);
-      detElement->SetLocalTransformation(localTransform);
-
-      // Compose global transformation
-      TGeoHMatrix globalTransform 
-       = AliMUONGeometryBuilder::Multiply( 
+        // Compose  local transformation
+        const TGeoCombiTrans* transform = envelope->GetTransformation(); 
+        // Apply frame transform
+        TGeoHMatrix localTransform = ConvertDETransform(*transform);
+        detElement->SetLocalTransformation(localTransform);
+
+        // Compose global transformation
+        TGeoHMatrix globalTransform 
+         = AliMUONGeometryBuilder::Multiply( 
                    (*geometry->GetTransformer()->GetTransformation()),
                     localTransform );
                    ;
-      // Set the global transformation to detection element
-      detElement->SetGlobalTransformation(globalTransform);
-      
-    }  
+        // Set the global transformation to detection element
+        detElement->SetGlobalTransformation(globalTransform);
+      }
+      else {
+        // Get existing det elements
+        AliMUONGeometryDetElement* detElement
+          = (AliMUONGeometryDetElement*)detElements->GetValue(detElemId);
+          
+        // Set volume path  
+        detElement->SetVolumePath(volPath); 
+      }
+    }    
   }
 }
+
 //_____ _________________________________________________________________________
 void  AliMUONVGeometryBuilder::RebuildSVMaps(Bool_t withEnvelopes) const
 {
index 2a2911c..9fa9327 100644 (file)
@@ -37,7 +37,7 @@ class AliMUONVGeometryBuilder : public TObject
     // methods
     void  SetReferenceFrame(const TGeoCombiTrans& referenceFrame);
     void  RebuildSVMaps(Bool_t withEnvelopes = true) const;
-    void  CreateDetElements() const;
+    void  UpdateDetElements(Bool_t create) const;
 
                   /// Function to be overriden in a concrete chamber/station
                  /// geometry builder class.
@@ -57,6 +57,12 @@ class AliMUONVGeometryBuilder : public TObject
 
                   /// Function to be overriden in a concrete chamber/station
                  /// geometry class. \n
+                 /// The volume name for each geometry module, its virtuality
+                  /// and eventually the mother volume name should be defined
+    virtual void SetVolumes() = 0;
+
+                  /// Function to be overriden in a concrete chamber/station
+                 /// geometry class. \n
                  /// The transformation of each chamber(s) wrt ALICE
                  /// should be defined and set to its geometry class. 
     virtual void SetTransformations() = 0;