ROOT logo
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// $Id$

/// \ingroup geometry
/// \class AliMUONGeometryDetElement
/// \brief Class for storing detection element transformations 
///
/// \author Ivana Hrivnacova, IPN Orsay

#ifndef ALI_MUON_GEOMETRY_DET_ELEMENT_H
#define ALI_MUON_GEOMETRY_DET_ELEMENT_H

#include <TObject.h>
#include <TString.h>

class TGeoHMatrix;

class AliMUONGeometryDetElement : public TObject
{
  public:
    AliMUONGeometryDetElement(Int_t detElemId);
    AliMUONGeometryDetElement(Int_t detElemId, const TString& volumePath);
    AliMUONGeometryDetElement(TRootIOCtor* /*ioCtor*/);
    virtual ~AliMUONGeometryDetElement();

    // static methods
    static const TString& GetDENamePrefix();
    static TString GetDEName(Int_t detElemId);

    // methods
    void Global2Local(
                 Float_t xg, Float_t yg, Float_t zg, 
                 Float_t& xl, Float_t& yl, Float_t& zl) const;
    void Global2Local(
                 Double_t xg, Double_t yg, Double_t zg, 
                 Double_t& xl, Double_t& yl, Double_t& zl) const;

    void Local2Global(
                 Float_t xl, Float_t yl, Float_t zl, 
                 Float_t& xg, Float_t& yg, Float_t& zg) const;
    void Local2Global(
                 Double_t xl, Double_t yl, Double_t zl, 
                 Double_t& xg, Double_t& yg, Double_t& zg) const;
    void PrintLocalTransform() const;
    void PrintGlobalTransform() const;

    // set methods
    void SetLocalTransformation(const TGeoHMatrix& transform, Bool_t warn = true);
    void SetGlobalTransformation(const TGeoHMatrix& transform, Bool_t warn = true);
    void SetVolumePath(const TString& volumePath);
    
    // get methods
    Int_t    GetId() const;
    TString  GetDEName() const;
    TString  GetVolumePath() const;
    TString  GetVolumeName() const;
    Int_t    GetVolumeCopyNo() const;
    const TGeoHMatrix*  GetLocalTransformation() const;
    const TGeoHMatrix*  GetGlobalTransformation() const;

  protected:
    /// Not implemented
    AliMUONGeometryDetElement();
    /// Not implemented
    AliMUONGeometryDetElement(const AliMUONGeometryDetElement& rhs);
    /// Not implemented
    AliMUONGeometryDetElement& operator = (const AliMUONGeometryDetElement& rhs);
  
  private:
    // methods
    void PrintTransform(const TGeoHMatrix* transform) const;
 
    // data members
    TString       fDEName;     ///< detection element name
    TString       fVolumePath; ///< \brief the full path of aligned volume
                               ///  or envelope in geometry
    TGeoHMatrix*  fLocalTransformation;  ///< the transformation wrt module
    TGeoHMatrix*  fGlobalTransformation; ///< the transformation wrt world

  ClassDef(AliMUONGeometryDetElement,2) // MUON det element transformations
};

// inline functions

/// Set the full path of the aligned volume or envelope in geometry
inline void AliMUONGeometryDetElement::SetVolumePath(const TString& volumePath)
{ fVolumePath = volumePath; }

/// Return detection element ID
inline Int_t AliMUONGeometryDetElement::GetId() const
{ return GetUniqueID(); }

/// Return detection element ID
inline TString AliMUONGeometryDetElement::GetDEName() const
{ return fDEName; }

/// Return the full path of the aligned volume or envelope in geometry
inline TString AliMUONGeometryDetElement::GetVolumePath() const
{ return fVolumePath; }

/// Return the detection element transformation wrt module
inline const TGeoHMatrix* 
AliMUONGeometryDetElement::GetLocalTransformation() const
{ return fLocalTransformation; }

/// Return the detection element transformation wrt world
inline const TGeoHMatrix* 
AliMUONGeometryDetElement::GetGlobalTransformation() const
{ return fGlobalTransformation; }

#endif //ALI_MUON_GEOMETRY_DET_ELEMENT_H
 AliMUONGeometryDetElement.h:1
 AliMUONGeometryDetElement.h:2
 AliMUONGeometryDetElement.h:3
 AliMUONGeometryDetElement.h:4
 AliMUONGeometryDetElement.h:5
 AliMUONGeometryDetElement.h:6
 AliMUONGeometryDetElement.h:7
 AliMUONGeometryDetElement.h:8
 AliMUONGeometryDetElement.h:9
 AliMUONGeometryDetElement.h:10
 AliMUONGeometryDetElement.h:11
 AliMUONGeometryDetElement.h:12
 AliMUONGeometryDetElement.h:13
 AliMUONGeometryDetElement.h:14
 AliMUONGeometryDetElement.h:15
 AliMUONGeometryDetElement.h:16
 AliMUONGeometryDetElement.h:17
 AliMUONGeometryDetElement.h:18
 AliMUONGeometryDetElement.h:19
 AliMUONGeometryDetElement.h:20
 AliMUONGeometryDetElement.h:21
 AliMUONGeometryDetElement.h:22
 AliMUONGeometryDetElement.h:23
 AliMUONGeometryDetElement.h:24
 AliMUONGeometryDetElement.h:25
 AliMUONGeometryDetElement.h:26
 AliMUONGeometryDetElement.h:27
 AliMUONGeometryDetElement.h:28
 AliMUONGeometryDetElement.h:29
 AliMUONGeometryDetElement.h:30
 AliMUONGeometryDetElement.h:31
 AliMUONGeometryDetElement.h:32
 AliMUONGeometryDetElement.h:33
 AliMUONGeometryDetElement.h:34
 AliMUONGeometryDetElement.h:35
 AliMUONGeometryDetElement.h:36
 AliMUONGeometryDetElement.h:37
 AliMUONGeometryDetElement.h:38
 AliMUONGeometryDetElement.h:39
 AliMUONGeometryDetElement.h:40
 AliMUONGeometryDetElement.h:41
 AliMUONGeometryDetElement.h:42
 AliMUONGeometryDetElement.h:43
 AliMUONGeometryDetElement.h:44
 AliMUONGeometryDetElement.h:45
 AliMUONGeometryDetElement.h:46
 AliMUONGeometryDetElement.h:47
 AliMUONGeometryDetElement.h:48
 AliMUONGeometryDetElement.h:49
 AliMUONGeometryDetElement.h:50
 AliMUONGeometryDetElement.h:51
 AliMUONGeometryDetElement.h:52
 AliMUONGeometryDetElement.h:53
 AliMUONGeometryDetElement.h:54
 AliMUONGeometryDetElement.h:55
 AliMUONGeometryDetElement.h:56
 AliMUONGeometryDetElement.h:57
 AliMUONGeometryDetElement.h:58
 AliMUONGeometryDetElement.h:59
 AliMUONGeometryDetElement.h:60
 AliMUONGeometryDetElement.h:61
 AliMUONGeometryDetElement.h:62
 AliMUONGeometryDetElement.h:63
 AliMUONGeometryDetElement.h:64
 AliMUONGeometryDetElement.h:65
 AliMUONGeometryDetElement.h:66
 AliMUONGeometryDetElement.h:67
 AliMUONGeometryDetElement.h:68
 AliMUONGeometryDetElement.h:69
 AliMUONGeometryDetElement.h:70
 AliMUONGeometryDetElement.h:71
 AliMUONGeometryDetElement.h:72
 AliMUONGeometryDetElement.h:73
 AliMUONGeometryDetElement.h:74
 AliMUONGeometryDetElement.h:75
 AliMUONGeometryDetElement.h:76
 AliMUONGeometryDetElement.h:77
 AliMUONGeometryDetElement.h:78
 AliMUONGeometryDetElement.h:79
 AliMUONGeometryDetElement.h:80
 AliMUONGeometryDetElement.h:81
 AliMUONGeometryDetElement.h:82
 AliMUONGeometryDetElement.h:83
 AliMUONGeometryDetElement.h:84
 AliMUONGeometryDetElement.h:85
 AliMUONGeometryDetElement.h:86
 AliMUONGeometryDetElement.h:87
 AliMUONGeometryDetElement.h:88
 AliMUONGeometryDetElement.h:89
 AliMUONGeometryDetElement.h:90
 AliMUONGeometryDetElement.h:91
 AliMUONGeometryDetElement.h:92
 AliMUONGeometryDetElement.h:93
 AliMUONGeometryDetElement.h:94
 AliMUONGeometryDetElement.h:95
 AliMUONGeometryDetElement.h:96
 AliMUONGeometryDetElement.h:97
 AliMUONGeometryDetElement.h:98
 AliMUONGeometryDetElement.h:99
 AliMUONGeometryDetElement.h:100
 AliMUONGeometryDetElement.h:101
 AliMUONGeometryDetElement.h:102
 AliMUONGeometryDetElement.h:103
 AliMUONGeometryDetElement.h:104
 AliMUONGeometryDetElement.h:105
 AliMUONGeometryDetElement.h:106
 AliMUONGeometryDetElement.h:107
 AliMUONGeometryDetElement.h:108
 AliMUONGeometryDetElement.h:109
 AliMUONGeometryDetElement.h:110
 AliMUONGeometryDetElement.h:111
 AliMUONGeometryDetElement.h:112
 AliMUONGeometryDetElement.h:113