]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - FMD/AliFMDGeometry.h
Removal of effc++ warnings
[u/mrichter/AliRoot.git] / FMD / AliFMDGeometry.h
... / ...
CommitLineData
1#ifndef ALIFMDGEOMETRY_H
2#define ALIFMDGEOMETRY_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
4 * reserved.
5 *
6 * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
7 *
8 * See cxx source for full Copyright notice
9 */
10/** @file AliFMDGeometry.h
11 @author Christian Holm Christensen <cholm@nbi.dk>
12 @date Mon Mar 27 12:40:37 2006
13 @brief Geometry mananger for the FMD
14*/
15//____________________________________________________________________
16//
17// Forward Multiplicity Detector based on Silicon wafers.
18//
19// This class is a singleton that handles the geometry parameters of
20// the FMD detectors.
21// The actual code is done by various separate classes.
22//
23#ifndef ALIGEOMETRY_H
24# include <AliGeometry.h>
25#endif
26#ifndef ROOT_TArrayI
27# include <TArrayI.h>
28#endif
29#ifndef ROOT_TMatrixFfwd
30# include <TMatrixFfwd.h>
31#endif
32class TVector3;
33class TParticle;
34class AliRecPoint;
35class AliFMDRing;
36class AliFMDDetector;
37class AliFMD1;
38class AliFMD2;
39class AliFMD3;
40class AliFMDGeometryBuilder;
41
42
43//__________________________________________________________________
44/** @brief Singleton object of FMD geometry descriptions and parameters.
45 This class is a singleton that handles the geometry parameters of
46 the FMD detectors.
47
48 The actual code is done by various separate classes. Below is
49 diagram showing the relationship between the various FMD classes
50 that handles the geometry
51 @verbatim
52 +------------+
53 +- | AliFMDRing |
54 2 | +------------+
55 +----------------+<>--+ |
56 | AliFMDGeometry | ^
57 +----------------+<>--+ V 1..2
58 3 | +----------------+
59 +-| AliFMDDetector |
60 +----------------+
61 ^
62 |
63 +-------------+-------------+
64 | | |
65 +---------+ +---------+ +---------+
66 | AliFMD1 | | AliFMD2 | | AliFMD3 |
67 +---------+ +---------+ +---------+
68
69 @endverbatim
70 - AliFMDRing
71 This class contains all stuff needed to do with a ring. It's
72 used by the AliFMDDetector objects to instantise inner and
73 outer rings. The AliFMDRing objects are shared by the
74 AliFMDDetector objects, and owned by the AliFMDv1 object.
75 - AliFMD1, AliFMD2, and AliFMD3
76 These are specialisation of AliFMDDetector, that contains the
77 particularities of each of the sub-detector system. It is
78 envisioned that the classes should also define the support
79 volumes and material for each of the detectors.
80
81 @ingroup FMD_base
82 */
83class AliFMDGeometry : public AliGeometry
84{
85public:
86 /** @return Singleton */
87 static AliFMDGeometry* Instance();
88 /** Initialize */
89 virtual void Init();
90 /** Initialize transforms */
91 virtual void InitTransformations();
92 /** @return Get inner description */
93 AliFMDRing* GetInner() const { return fInner; }
94 /** @return Get outer description */
95 AliFMDRing* GetOuter() const { return fOuter; }
96 /** @return Get FMD1 description */
97 AliFMD1* GetFMD1() const { return (fUseFMD1 ? fFMD1 : 0); }
98 /** @return Get FMD2 description */
99 AliFMD2* GetFMD2() const { return (fUseFMD2 ? fFMD2 : 0); }
100 /** @return Get FMD3 description */
101 AliFMD3* GetFMD3() const { return (fUseFMD3 ? fFMD3 : 0); }
102 /** Get description of a sub-detector
103 @param i Sub-detector #
104 @return Description of sub-detector, or 0 */
105 AliFMDDetector* GetDetector(Int_t i) const;
106 /** Get description of a ring
107 @param i Ring id
108 @return Description of ring, or 0 */
109 AliFMDRing* GetRing(Char_t i) const;
110 /** @param i IF true, disable sub-detector @a i */
111 void Disable(Int_t i);
112 /** @param i IF true, enable sub-detector @a i */
113 void Enable(Int_t i);
114 /** @return Density @f$ \rho@f$ of silicon */
115 Double_t GetSiDensity() const { return 2.33; }
116 /** Translate detector coordinates (detector, ring, sector, strip)
117 to spatial coordinates (x, y, z) in the master reference frame
118 of ALICE. The member function uses the transformations
119 previously obtained from the TGeoManager.
120 @param detector Detector number
121 @param ring Ring id
122 @param sector Sector number
123 @param strip Strip number
124 @param x On return, X coordinate
125 @param y On return, Y coordinate
126 @param z On return, Z coordinate */
127 void Detector2XYZ(UShort_t detector, Char_t ring,
128 UShort_t sector, UShort_t strip,
129 Double_t& x, Double_t& y, Double_t& z) const;
130 /** Translate spatial coordinates (x,y,z) in the master reference
131 frame of ALICE to the detector coordinates (detector, ring,
132 sector, strip). Note, that if this method is to be used in
133 reconstruction or the like, then the input z-coordinate should
134 be corrected for the events interactions points z-coordinate,
135 like
136 @code
137 geom->XYZ2Detector(x,y,z-ipz,d,r,s,t);
138 @endcode
139 @param x X coordinate
140 @param y Y coordinate
141 @param z Z coordinate
142 @param detector On return, Detector number
143 @param ring On return, Ring id
144 @param sector On return, Sector number
145 @param strip On return, Strip number
146 @return @c false of (@a x, @a y, @a z) is not within this
147 detector. */
148 Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z,
149 UShort_t& detector, Char_t& ring,
150 UShort_t& sector, UShort_t& strip) const;
151 /** Make the geometry. This delegates to AliFMDGeometryBuilder */
152 void Build();
153 /** @return Get detector offset in paths */
154 Int_t GetDetectorOff() const { return fDetectorOff; }
155 /** @return Get sensor offset in paths */
156 Int_t GetModuleOff() const { return fModuleOff; }
157 /** @return Get ring offset in paths */
158 Int_t GetRingOff() const { return fRingOff; }
159 /** @return Get ring sector in paths */
160 Int_t GetSectorOff() const { return fSectorOff; }
161 /** @param off Detector off-set set in geometry path */
162 void SetDetectorOff(Int_t off) { fDetectorOff = off; }
163 /** @param off Module off-set set in geometry path */
164 void SetModuleOff(Int_t off) { fModuleOff = off; }
165 /** @param off Ring off-set set in geometry path */
166 void SetRingOff(Int_t off) { fRingOff = off; }
167 /** @param off Sectord off-set set in geometry path */
168 void SetSectorOff(Int_t off) { fSectorOff = off; }
169 /** Check if volume @a vol is marked as active
170 @param vol Volume ID
171 @return @c true if @a vol is declared active */
172 Bool_t IsActive(Int_t vol) const;
173 /** Set active volumes
174 @param active Active volume id array
175 @param n elements of @a active */
176 void SetActive(Int_t* active, Int_t n);
177 /** @param id Register volume @a id to be active */
178 void AddActive(Int_t id);
179 /** Set an external geometry builder
180 @param b Geometry builder */
181 void SetBuilder(AliFMDGeometryBuilder* b) { fBuilder = b; }
182 /** Extract informaton from TGeoManager */
183 void ExtractGeomInfo();
184 /** Whether we are to use a detailed geometry or not
185 @param det if @c true, make a detailed geometry. */
186 void SetDetailed(Bool_t det) { fDetailed = det; }
187 /** @return @c true if geometry is detailed */
188 Bool_t IsDetailed() const { return fDetailed; }
189 /** @param ass Whether to use assemblies or not */
190 void UseAssembly(Bool_t ass) { fUseAssembly = ass; }
191
192 // AliGeometry member functions
193 /** Get global coordinates cooresponding to a rec point.
194 @param p Reconstructed point.
195 @param pos On return, the position
196 @param mat On return, the material at @a post */
197 virtual void GetGlobal(const AliRecPoint* p, TVector3& pos,
198 TMatrixF& mat) const;
199 /** Get global coordinates cooresponding to a rec point.
200 @param p Reconstructed point.
201 @param pos On return, the position */
202 virtual void GetGlobal(const AliRecPoint* p, TVector3& pos) const;
203 /** Check if particle will hit an active detector element. Note
204 done yet.
205 @param particle Track
206 @return @c true if @a particle will hit this detector */
207 virtual Bool_t Impact(const TParticle* particle) const;
208protected:
209 Bool_t fIsInitialized; // Whether singleton is initalized
210 AliFMDRing* fInner; // Inner ring geometry information
211 AliFMDRing* fOuter; // Outer ring geometry information
212 AliFMD1* fFMD1; // FMD1 geometry information
213 AliFMD2* fFMD2; // FMD2 geometry information
214 AliFMD3* fFMD3; // FMD3 geometry information
215 Bool_t fUseFMD1; // Wheter to Use FMD1 or not
216 Bool_t fUseFMD2; // Wheter to Use FMD2 or not
217 Bool_t fUseFMD3; // Wheter to Use FMD3 or not
218 static AliFMDGeometry* fgInstance; // Singleton instance
219 /** CTOR */
220 AliFMDGeometry();
221 /** Copy CTOR
222 @param other To copy from */
223 AliFMDGeometry(const AliFMDGeometry& other);
224 /** Assignment operator
225 @param other To assig from
226 @return reference to this. */
227 AliFMDGeometry& operator=(const AliFMDGeometry& other);
228 virtual ~AliFMDGeometry() {}
229
230 AliFMDGeometryBuilder* fBuilder; // Geometry builder
231 Int_t fDetectorOff; // Detector off-set
232 Int_t fModuleOff; // Module off-set
233 Int_t fRingOff; // ring offset
234 Int_t fSectorOff; // Sector offset
235 TArrayI fActive; // Active volumes
236 Bool_t fDetailed; // Whether to make detailed geom
237 Bool_t fUseAssembly; // Whther to use assemblies
238
239 ClassDef(AliFMDGeometry,1); // Geometry parameters and manager
240};
241
242
243#endif
244//____________________________________________________________________
245//
246// Local Variables:
247// mode: C++
248// End:
249//
250// EOF
251//