Updated with refactoring of geometry & segmentation classes;
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryModule.h
CommitLineData
e118b27e 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
692de412 7/// \ingroup geometry
8/// \class AliMUONGeometryModule
9/// \brief Geometry parameters for detector module
10///
11/// Class for definition of the detector module parameters
12/// (the transformations of detection elements, mapping between
13/// sensitive volumes and detection elements).
14///
15/// Author: Ivana Hrivnacova, IPN Orsay
e118b27e 16
f29ba3e1 17#ifndef ALI_MUON_GEOMETRY_MODULE_H
18#define ALI_MUON_GEOMETRY_MODULE_H
e118b27e 19
20#include <TObject.h>
21#include <TString.h>
22
23class TGeoTranslation;
24class TGeoRotation;
25class TGeoCombiTrans;
26class TObjArray;
27class TArrayI;
28
29class AliMUONGeometryEnvelope;
30class AliMUONGeometryEnvelopeStore;
31class AliMUONGeometryDetElement;
32class AliMUONGeometryStore;
33class AliMUONGeometrySVMap;
34class AliMUONVGeometryDEIndexing;
35
36class AliMUONGeometryModule : public TObject
37{
38 public:
39 AliMUONGeometryModule(Int_t moduleId);
40 AliMUONGeometryModule();
41 virtual ~AliMUONGeometryModule();
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 SetMotherVolume(const TString& motherVolumeName);
cfbf2f7d 60 void SetVolume(const TString& volumeName);
e118b27e 61 void SetTranslation(const TGeoTranslation& translation);
62 void SetRotation(const TGeoRotation& rotation);
63
64 void SetSensitiveVolume(Int_t volId);
65 void SetSensitiveVolume(const TString& name);
66 void SetAlign(Bool_t align);
67
68 // get methods
cfbf2f7d 69 Bool_t IsVirtual() const;
e118b27e 70 Int_t GetModuleId() const;
71 TString GetMotherVolume() const;
cfbf2f7d 72 TString GetVolume() const;
e118b27e 73 const TGeoCombiTrans* GetTransformation() const;
74 AliMUONGeometryDetElement* FindBySensitiveVolume(
75 const TString& volumePath) const;
76 AliMUONVGeometryDEIndexing* GetDEIndexing() const;
77 AliMUONGeometryEnvelopeStore* GetEnvelopeStore() const;
78 AliMUONGeometryStore* GetDetElementStore() const;
79 AliMUONGeometryDetElement* GetDetElement(Int_t detElemId) const;
80 AliMUONGeometrySVMap* GetSVMap() const;
81 Bool_t IsSensitiveVolume(Int_t volId) const;
82 Bool_t IsSensitiveVolume(const TString& volName) const;
83
84 protected:
85 AliMUONGeometryModule(const AliMUONGeometryModule& rhs);
86 // operators
87 AliMUONGeometryModule& operator = (const AliMUONGeometryModule& rhs);
88
89 private:
90 // methods
91 Int_t GetSVIndex(Int_t svVolId) const;
92
93 // data members
cfbf2f7d 94 Bool_t fIsVirtual; // true if module is not represented
95 // by a real volume
e118b27e 96 Int_t fModuleId; // the module Id
97 TString fMotherVolume; // mother volume name
cfbf2f7d 98 TString fVolume; // the volume name if not virtual
e118b27e 99 Int_t fNofSVs; // number of sensitive volumes
100 TArrayI* fSVVolumeIds; // densitive volumes IDs
101 TGeoCombiTrans* fTransformation;// the module transformation wrt to mother
102 // volume
103 AliMUONGeometryEnvelopeStore* fEnvelopes; // envelopes
104 AliMUONVGeometryDEIndexing* fDEIndexing; // DE indexing
105 AliMUONGeometryStore* fDetElements;// detection elements
106 AliMUONGeometrySVMap* fSVMap; // sensitive volumes map
107
108 ClassDef(AliMUONGeometryModule,2) // MUON geometry module class
109};
110
111// inline functions
112
113inline void
114AliMUONGeometryModule::SetMotherVolume(const TString& motherVolumeName)
115{ fMotherVolume = motherVolumeName; }
116
cfbf2f7d 117inline Bool_t AliMUONGeometryModule::IsVirtual() const
118{ return fIsVirtual; }
119
e118b27e 120inline Int_t AliMUONGeometryModule::GetModuleId() const
121{ return fModuleId; }
122
123inline TString AliMUONGeometryModule::GetMotherVolume() const
124{ return fMotherVolume; }
125
cfbf2f7d 126inline TString AliMUONGeometryModule::GetVolume() const
127{ return fVolume; }
128
e118b27e 129inline const TGeoCombiTrans* AliMUONGeometryModule::GetTransformation() const
130{ return fTransformation; }
131
132inline AliMUONGeometryEnvelopeStore*
133AliMUONGeometryModule::GetEnvelopeStore() const
134{ return fEnvelopes; }
135
136inline AliMUONVGeometryDEIndexing*
137AliMUONGeometryModule::GetDEIndexing() const
138{ return fDEIndexing; }
139
140inline AliMUONGeometryStore* AliMUONGeometryModule::GetDetElementStore() const
141{ return fDetElements; }
142
143inline AliMUONGeometrySVMap* AliMUONGeometryModule::GetSVMap() const
144{ return fSVMap; }
145
f29ba3e1 146#endif //ALI_MUON_GEOMETRY_MODULE_H