]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONGeometryEnvelopeStore.cxx
Refactoring of geometry classes:
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryEnvelopeStore.cxx
index 63664707e2ee279c86a4cc300b4f8f6aeb2eaa4a..0886d2361a5b4a04d45d4c63b29558d81cc34140 100644 (file)
@@ -33,6 +33,7 @@
 #include "AliMUONGeometryDetElement.h"
 #include "AliMUONGeometryStore.h"
 #include "AliMUONConstants.h"
+#include "AliMUONGeometryBuilder.h"
 #include "AliLog.h"
 
 ClassImp(AliMUONGeometryEnvelopeStore)
@@ -43,6 +44,7 @@ AliMUONGeometryEnvelopeStore::AliMUONGeometryEnvelopeStore(
  : TObject(),
    fEnvelopes(0),
    fDetElements(detElements),
+   fReferenceFrame(),
    fDebug(false),
    fAlign(false)
 {
@@ -57,6 +59,7 @@ AliMUONGeometryEnvelopeStore::AliMUONGeometryEnvelopeStore()
  : TObject(),
    fEnvelopes(0),
    fDetElements(0),
+   fReferenceFrame(),
    fDebug(false),
    fAlign(false)
 {
@@ -102,6 +105,21 @@ AliMUONGeometryEnvelopeStore::operator = (const AliMUONGeometryEnvelopeStore& rh
 // private methods
 //
 
+//______________________________________________________________________________
+TGeoHMatrix 
+AliMUONGeometryEnvelopeStore::ConvertTransform(const TGeoHMatrix& transform) const
+{
+// Convert transformation into the reference frame
+
+  if ( fReferenceFrame.IsIdentity() )
+    return transform;
+  else  {
+    return AliMUONGeometryBuilder::Multiply( fReferenceFrame.Inverse(),
+                                            transform,
+                                            fReferenceFrame );  
+  }                        
+}
+
 //______________________________________________________________________________
 AliMUONGeometryEnvelope* 
 AliMUONGeometryEnvelopeStore::FindEnvelope(const TString& name) const
@@ -136,7 +154,12 @@ Bool_t AliMUONGeometryEnvelopeStore::AlignEnvelope(
     return false;
   };
 
-  envelope->SetTransform(*(detElement->GetLocalTransformation()));
+  // Apply frame transform
+  TGeoHMatrix newTransform 
+    = ConvertTransform(*(detElement->GetLocalTransformation()));
+
+  envelope->SetTransform(newTransform);
+  
   return true;
 }