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

/* $Id$ */
// Revision of includes 07/05/2004

/// \ingroup geometry
/// \class AliMUONGeometryModuleTransformer
/// \brief Geometry transformer for a detector module
///
/// Class for definition of the transformation for a detector module
/// and its detection elements
///
/// \author Ivana Hrivnacova, IPN Orsay

#ifndef ALI_MUON_GEOMETRY_MODULE_TRANSFORMER_H
#define ALI_MUON_GEOMETRY_MODULE_TRANSFORMER_H

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

class AliMUONGeometryDetElement;

class AliMpExMap;

class TGeoTranslation;
class TGeoRotation;
class TGeoHMatrix;
class TObjArray;
class TArrayI;

class AliMUONGeometryModuleTransformer : public TObject
{
  public:
    AliMUONGeometryModuleTransformer(Int_t moduleId);
    AliMUONGeometryModuleTransformer(TRootIOCtor* /*ioCtor*/);
    virtual ~AliMUONGeometryModuleTransformer();

    // static methods
    static const TString& GetModuleNamePrefix();
    static       TString  GetModuleName(Int_t moduleId);

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

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

    // set methods
    void  SetTransformation(const TGeoHMatrix& transform);
    void  SetVolumePath(const TString& volumePath);
 
    // get methods
    Int_t    GetModuleId() const;
    TString  GetModuleName() const;
    TString  GetVolumePath() const;
    TString  GetVolumeName() const;
    TString  GetMotherVolumeName() const;

    const TGeoHMatrix*  GetTransformation() const;    
    AliMpExMap*         GetDetElementStore() const; 
    AliMUONGeometryDetElement*  
                        GetDetElement(Int_t detElemId, Bool_t warn = true) const;    

  protected:
    /// Not implemented
    AliMUONGeometryModuleTransformer();
    /// Not implemented
    AliMUONGeometryModuleTransformer(const AliMUONGeometryModuleTransformer& rhs);
    /// Not implemented
    AliMUONGeometryModuleTransformer& 
      operator = (const AliMUONGeometryModuleTransformer& rhs);

  private:
    // data members
    Int_t                 fModuleId;   ///< the module Id
    TString               fModuleName; ///< the module name
    TString               fVolumePath; ///< \brief the full path of aligned module volume
                                       /// or envelope in geometry
    TGeoHMatrix*          fTransformation;///< \brief the module transformation wrt to top
                                          /// volume (world)
    AliMpExMap*           fDetElements;   ///< detection elements
 
  ClassDef(AliMUONGeometryModuleTransformer,3) // MUON geometry module class
};

// inline functions

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

/// Return module ID
inline Int_t  
AliMUONGeometryModuleTransformer::GetModuleId() const
{ return fModuleId; }

/// Return module name
inline TString
AliMUONGeometryModuleTransformer::GetModuleName() const
{ return fModuleName; }

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

/// Return the module transformation wrt to the top volume (world)
inline const TGeoHMatrix* 
AliMUONGeometryModuleTransformer::GetTransformation() const 
{ return fTransformation; }

/// Return detection elements associated with this module
inline  AliMpExMap* 
AliMUONGeometryModuleTransformer::GetDetElementStore() const
{ return fDetElements; }

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