]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONGeometryModuleTransformer.h
Fix for savannah bug report 87728 (Laurent) + fix invalid read found with valgrind...
[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 const 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     // data members
85     Int_t                 fModuleId;   ///< the module Id
86     TString               fModuleName; ///< the module name
87     TString               fVolumePath; ///< \brief the full path of aligned module volume
88                                        /// or envelope in geometry
89     TGeoHMatrix*          fTransformation;///< \brief the module transformation wrt to top
90                                           /// volume (world)
91     AliMpExMap*           fDetElements;   ///< detection elements
92  
93   ClassDef(AliMUONGeometryModuleTransformer,3) // MUON geometry module class
94 };
95
96 // inline functions
97
98 /// Set the full path of aligned module volume or envelope in geometry
99 inline void 
100 AliMUONGeometryModuleTransformer::SetVolumePath(const TString& volumePath)
101 { fVolumePath = volumePath; }
102
103 /// Return module ID
104 inline Int_t  
105 AliMUONGeometryModuleTransformer::GetModuleId() const
106 { return fModuleId; }
107
108 /// Return module name
109 inline TString
110 AliMUONGeometryModuleTransformer::GetModuleName() const
111 { return fModuleName; }
112
113 /// Return the full path of aligned module volume or envelope in geometry
114 inline TString 
115 AliMUONGeometryModuleTransformer::GetVolumePath() const
116 { return fVolumePath; }
117
118 /// Return the module transformation wrt to the top volume (world)
119 inline const TGeoHMatrix* 
120 AliMUONGeometryModuleTransformer::GetTransformation() const 
121 { return fTransformation; }
122
123 /// Return detection elements associated with this module
124 inline  AliMpExMap* 
125 AliMUONGeometryModuleTransformer::GetDetElementStore() const
126 { return fDetElements; }
127
128 #endif //ALI_MUON_GEOMETRY_MODULE_TRANSFORMER_H