]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONGeometryModuleTransformer.h
23935415e8f3d42a3d4f89120974a664e1a9722b
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryModuleTransformer.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2  * See cxx source for full Copyright notice                               */
3
4 /* $Id$ */
5 // Revision of includes 07/05/2004
6
7 /// \ingroup geometry
8 /// \class AliMUONGeometryModuleTransformer
9 /// \brief Geometry transformer for a detector module
10 ///
11 /// Class for definition of the transformation for a detector module
12 /// and its detection elements
13 ///
14 /// \author Ivana Hrivnacova, IPN Orsay
15
16 #ifndef ALI_MUON_GEOMETRY_MODULE_TRANSFORMER_H
17 #define ALI_MUON_GEOMETRY_MODULE_TRANSFORMER_H
18
19 #include <TObject.h>
20 #include <TString.h>
21
22 class AliMUONGeometryDetElement;
23
24 class AliMpExMap;
25
26 class TGeoTranslation;
27 class TGeoRotation;
28 class TGeoHMatrix;
29 class TObjArray;
30 class TArrayI;
31
32 class AliMUONGeometryModuleTransformer : public TObject
33 {
34   public:
35     AliMUONGeometryModuleTransformer(Int_t moduleId);
36     AliMUONGeometryModuleTransformer(TRootIOCtor* /*ioCtor*/);
37     virtual ~AliMUONGeometryModuleTransformer();
38
39     // static methods
40     static TString GetModuleNamePrefix();
41     static TString GetModuleName(Int_t moduleId);
42
43     // methods
44     void Global2Local(Int_t detElemId,
45                  Float_t xg, Float_t yg, Float_t zg, 
46                  Float_t& xl, Float_t& yl, Float_t& zl) const;
47     void Global2Local(Int_t detElemId,
48                  Double_t xg, Double_t yg, Double_t zg, 
49                  Double_t& xl, Double_t& yl, Double_t& zl) const;
50
51     void Local2Global(Int_t detElemId,
52                  Float_t xl, Float_t yl, Float_t zl, 
53                  Float_t& xg, Float_t& yg, Float_t& zg) const;
54     void Local2Global(Int_t detElemId,
55                  Double_t xl, Double_t yl, Double_t zl, 
56                  Double_t& xg, Double_t& yg, Double_t& zg) const;
57
58     // set methods
59     void  SetTransformation(const TGeoHMatrix& transform);
60     void  SetVolumePath(const TString& volumePath);
61  
62     // get methods
63     Int_t    GetModuleId() const;
64     TString  GetModuleName() const;
65     TString  GetVolumePath() const;
66     TString  GetVolumeName() const;
67     TString  GetMotherVolumeName() const;
68
69     const TGeoHMatrix*  GetTransformation() const;    
70     AliMpExMap*         GetDetElementStore() const; 
71     AliMUONGeometryDetElement*  
72                         GetDetElement(Int_t detElemId, Bool_t warn = true) const;    
73
74   protected:
75     /// Not implemented
76     AliMUONGeometryModuleTransformer();
77     /// Not implemented
78     AliMUONGeometryModuleTransformer(const AliMUONGeometryModuleTransformer& rhs);
79     /// Not implemented
80     AliMUONGeometryModuleTransformer& 
81       operator = (const AliMUONGeometryModuleTransformer& rhs);
82
83   private:
84     // static data members
85     static const TString  fgkModuleNamePrefix; ///< Geometry module name prefix
86
87     // data members
88     Int_t                 fModuleId;   ///< the module Id
89     TString               fModuleName; ///< the module name
90     TString               fVolumePath; ///< \brief the full path of aligned module volume
91                                        /// or envelope in geometry
92     TGeoHMatrix*          fTransformation;///< \brief the module transformation wrt to top
93                                           /// volume (world)
94     AliMpExMap*           fDetElements;   ///< detection elements
95  
96   ClassDef(AliMUONGeometryModuleTransformer,3) // MUON geometry module class
97 };
98
99 // inline functions
100
101 /// Return module name prefix
102 inline TString 
103 AliMUONGeometryModuleTransformer::GetModuleNamePrefix()
104 { return fgkModuleNamePrefix; }
105
106 /// Set the full path of aligned module volume or envelope in geometry
107 inline void 
108 AliMUONGeometryModuleTransformer::SetVolumePath(const TString& volumePath)
109 { fVolumePath = volumePath; }
110
111 /// Return module ID
112 inline Int_t  
113 AliMUONGeometryModuleTransformer::GetModuleId() const
114 { return fModuleId; }
115
116 /// Return module name
117 inline TString
118 AliMUONGeometryModuleTransformer::GetModuleName() const
119 { return fModuleName; }
120
121 /// Return the full path of aligned module volume or envelope in geometry
122 inline TString 
123 AliMUONGeometryModuleTransformer::GetVolumePath() const
124 { return fVolumePath; }
125
126 /// Return the module transformation wrt to the top volume (world)
127 inline const TGeoHMatrix* 
128 AliMUONGeometryModuleTransformer::GetTransformation() const 
129 { return fTransformation; }
130
131 /// Return detection elements associated with this module
132 inline  AliMpExMap* 
133 AliMUONGeometryModuleTransformer::GetDetElementStore() const
134 { return fDetElements; }
135
136 #endif //ALI_MUON_GEOMETRY_MODULE_TRANSFORMER_H