]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONGeometryEnvelopeStore.cxx
AliTriggerAnalysis: added switch to disable FMD histograms (runs much faster) (consta...
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryEnvelopeStore.cxx
index 63664707e2ee279c86a4cc300b4f8f6aeb2eaa4a..d03e601a76379ed071d66c4a4e0a8d164aa532df 100644 (file)
  **************************************************************************/
 
 // $Id$
-//
+
+//-----------------------------------------------------------------------------
 // Class AliMUONGeometryEnvelopeStore
 // ----------------------------------
 // Class for definititon of the temporary volume envelopes
 // used in geometry construction
-//
 // Author: Ivana Hrivnacova, IPN Orsay
-
-#include <TVirtualMC.h>
-#include <TGeoMatrix.h>
-#include <TObjArray.h>
-#include <TArrayI.h>
-#include <Riostream.h>
+//-----------------------------------------------------------------------------
 
 #include "AliMUONGeometryEnvelopeStore.h"
 #include "AliMUONGeometryEnvelope.h"
 #include "AliMUONGeometryDetElement.h"
-#include "AliMUONGeometryStore.h"
-#include "AliMUONConstants.h"
+#include "AliMUONGeometryBuilder.h"
+
+#include "AliMpExMap.h"
+
 #include "AliLog.h"
 
+#include <TGeoMatrix.h>
+#include <TObjArray.h>
+#include <Riostream.h>
+#include <TString.h>
+
+/// \cond CLASSIMP
 ClassImp(AliMUONGeometryEnvelopeStore)
+/// \endcond
 
 //______________________________________________________________________________
 AliMUONGeometryEnvelopeStore::AliMUONGeometryEnvelopeStore(
-                                 AliMUONGeometryStore* detElements)
+                                    AliMpExMap* detElements)
  : TObject(),
    fEnvelopes(0),
    fDetElements(detElements),
+   fReferenceFrame(),
    fDebug(false),
    fAlign(false)
 {
@@ -57,6 +62,7 @@ AliMUONGeometryEnvelopeStore::AliMUONGeometryEnvelopeStore()
  : TObject(),
    fEnvelopes(0),
    fDetElements(0),
+   fReferenceFrame(),
    fDebug(false),
    fAlign(false)
 {
@@ -64,13 +70,6 @@ AliMUONGeometryEnvelopeStore::AliMUONGeometryEnvelopeStore()
 }
 
 
-//______________________________________________________________________________
-AliMUONGeometryEnvelopeStore::AliMUONGeometryEnvelopeStore(const AliMUONGeometryEnvelopeStore& rhs)
-  : TObject(rhs)
-{
-  AliFatal("Copy constructor is not implemented.");
-}
-
 //______________________________________________________________________________
 AliMUONGeometryEnvelopeStore::~AliMUONGeometryEnvelopeStore() 
 {
@@ -84,24 +83,24 @@ AliMUONGeometryEnvelopeStore::~AliMUONGeometryEnvelopeStore()
   }  
 }
 
-//______________________________________________________________________________
-AliMUONGeometryEnvelopeStore& 
-AliMUONGeometryEnvelopeStore::operator = (const AliMUONGeometryEnvelopeStore& rhs) 
-{
-/// Protected assignement operator
-
-  // check assignement to self
-  if (this == &rhs) return *this;
-
-  AliFatal("Assignment operator is not implemented.");
-    
-  return *this;  
-}
-
 //
 // private methods
 //
 
+//______________________________________________________________________________
+TGeoHMatrix 
+AliMUONGeometryEnvelopeStore::ConvertDETransform(const TGeoHMatrix& transform) const
+{
+/// Convert transformation into the reference frame
+
+  if ( fReferenceFrame.IsIdentity() )
+    return transform;
+  else  {
+    return AliMUONGeometryBuilder::Multiply( fReferenceFrame.Inverse(),
+                                            transform );  
+  }                        
+}
+
 //______________________________________________________________________________
 AliMUONGeometryEnvelope* 
 AliMUONGeometryEnvelopeStore::FindEnvelope(const TString& name) const
@@ -130,13 +129,18 @@ Bool_t AliMUONGeometryEnvelopeStore::AlignEnvelope(
   if (detElemId == 0) return false;
   
   AliMUONGeometryDetElement* detElement 
-    = (AliMUONGeometryDetElement*) fDetElements->Get(detElemId);
+    = (AliMUONGeometryDetElement*) fDetElements->GetValue(detElemId);
   if (!detElement) {
     AliWarning("Transformation not found.");
     return false;
   };
 
-  envelope->SetTransform(*(detElement->GetLocalTransformation()));
+  // Apply frame transform
+  TGeoHMatrix newTransform 
+    = ConvertDETransform(*(detElement->GetLocalTransformation()));
+
+  envelope->SetTransform(newTransform);
+  
   return true;
 }  
 
@@ -402,7 +406,7 @@ void  AliMUONGeometryEnvelopeStore::AddEnvelopeConstituent(const TString& name,
                                          const TString& envName, Int_t copyNo) 
 {
 /// Add the volume with the specified name and transformation
-/// to the list of envelopes.
+/// as a constituent of the envelope envName.
 
   if (fDebug) {
     cout << "... Adding constituent " << name
@@ -426,7 +430,7 @@ void  AliMUONGeometryEnvelopeStore::AddEnvelopeConstituent(const TString& name,
                                           const TGeoTranslation& translation)
 {
 /// Add the volume with the specified name and transformation
-/// to the list of envelopes.
+/// as a constituent of the envelope envName.
 
   if (fDebug) {
     cout << "... Adding constituent " << name
@@ -452,7 +456,7 @@ void  AliMUONGeometryEnvelopeStore::AddEnvelopeConstituent(const TString& name,
                                          const TGeoRotation& rotation)
 {
 /// Add the volume with the specified name and transformation
-/// to the list of envelopes.
+/// as a constituent of the envelope envName.
 
   if (fDebug) {
     cout << "... Adding constituent " << name
@@ -477,7 +481,7 @@ void  AliMUONGeometryEnvelopeStore::AddEnvelopeConstituent(const TString& name,
                                           const TGeoCombiTrans& transform)
 {
 /// Add the volume with the specified name and transformation
-/// to the list of envelopes.
+/// as a constituent of the envelope envName.
 
   if (fDebug) {
     cout << "... Adding constituent " << name
@@ -502,7 +506,7 @@ void  AliMUONGeometryEnvelopeStore::AddEnvelopeConstituentParam(const TString& n
                                         Int_t npar, Double_t* param) 
 {
 /// Add the volume with the specified name and transformation
-/// to the list of envelopes.
+/// as a constituent of the envelope envName.
 
   if (fDebug) {
     cout << "... Adding parameterised constituent " << name
@@ -527,7 +531,7 @@ void  AliMUONGeometryEnvelopeStore::AddEnvelopeConstituentParam(const TString& n
                                          Int_t npar, Double_t* param)
 {
 /// Add the volume with the specified name and transformation
-/// to the list of envelopes.
+/// as a constituent of the envelope envName.
 
   if (fDebug) {
     cout << "... Adding parameterised constituent " << name
@@ -554,7 +558,7 @@ void  AliMUONGeometryEnvelopeStore::AddEnvelopeConstituentParam(const TString& n
                                          Int_t npar, Double_t* param)
 {
 /// Add the volume with the specified name and transformation
-/// to the list of envelopes.
+/// as a constituent of the envelope envName.
 
   if (fDebug) {
     cout << "... Adding parameterised constituent " << name
@@ -580,7 +584,7 @@ void  AliMUONGeometryEnvelopeStore::AddEnvelopeConstituentParam(const TString& n
                                          Int_t npar, Double_t* param)
 {
 /// Add the volume with the specified name and transformation
-/// to the list of envelopes.
+/// as a constituent of the envelope envName.
 
   if (fDebug) {
     cout << "... Adding parameterised constituent " << name