]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/AliFMDRing.h
Export raw reader
[u/mrichter/AliRoot.git] / FMD / AliFMDRing.h
CommitLineData
0d0e6995 1#ifndef ALIFMDRING_H
2#define ALIFMDRING_H
4347b38f 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 */
c2fc1258 10/** @file AliFMDRing.h
11 @author Christian Holm Christensen <cholm@nbi.dk>
12 @date Mon Mar 27 12:47:43 2006
13 @brief FMD ring geometry parameters
14*/
68e82e8d 15//__________________________________________________________________
16//
17// Parameters of the FMD rings.
68e82e8d 18// This class is responsible to make the (common) rings of the three
19// sub-detectors.
20//
1a1fdef7 21#ifndef ROOT_TNamed
22# include <TNamed.h>
4347b38f 23#endif
1a1fdef7 24#ifndef ROOT_TObjArray
25# include <TObjArray.h>
4347b38f 26#endif
27
28class TBrowser;
1a1fdef7 29class TVector2;
4347b38f 30
f70f588a 31/**
32 * @brief Geometry description and parameters of a ring in the FMD
33 * detector.
34 *
35 * As there are only 2 kinds of rings @e Inner (@c 'I') and @e Outer
36 * (@c 'O') the two objects of this class is owned by the
37 * AliFMDGeometry singleton object. The 3 AliFMDDetector objects
38 * shares these two instances as needed.
39 * @ingroup FMD_base
1a1fdef7 40*/
41class AliFMDRing : public TNamed
4347b38f 42{
4347b38f 43public:
f70f588a 44 /**
45 * CTOR
46 *
47 * @param fId Ring ID
48 */
1a1fdef7 49 AliFMDRing(Char_t fId);
f70f588a 50 /**
51 * DTOR
52 */
1a1fdef7 53 virtual ~AliFMDRing() {}
f70f588a 54 /**
55 * Initialize the ring geometry
56 */
1a1fdef7 57 virtual void Init();
58
f70f588a 59 /**
60 *
61 * @param x Value of The Id of this ring type
62 */
1a1fdef7 63 void SetId(Char_t x) { fId = x; }
f70f588a 64 /**
65 *
66 * @param x Value of With of bonding pad on sensor
67 */
1a1fdef7 68 void SetBondingWidth(Double_t x=.5) { fBondingWidth = x; }
f70f588a 69 /**
70 *
71 * @param x Value of Size of wafer the sensor was made from
72 */
1a1fdef7 73 void SetWaferRadius(Double_t x=13.4/2) { fWaferRadius = x; }
f70f588a 74 /**
75 *
76 * @param x Value of Thickness of sensor
77 */
d98fbfa5 78 void SetSiThickness(Double_t x=.032) { fSiThickness = x; }
f70f588a 79 /**
80 *
81 * @param x Value of Lower radius of ring
82 */
1a1fdef7 83 void SetLowR(Double_t x) { fLowR = x; }
f70f588a 84 /**
85 *
86 * @param x Value of Upper radius of ring
87 */
1a1fdef7 88 void SetHighR(Double_t x) { fHighR = x; }
f70f588a 89 /**
90 *
91 * @param x Value of Opening angle of the silicon wafers
92 */
1a1fdef7 93 void SetTheta(Double_t x) { fTheta = x; }
f70f588a 94 /**
95 *
96 * @param x Value of Number of strips
97 */
1a1fdef7 98 void SetNStrips(Int_t x) { fNStrips = x; }
f70f588a 99 /**
100 *
101 * @param x Value of How far the ring extends beyond the z value given.
102 */
1a1fdef7 103 void SetRingDepth(Double_t x) { fRingDepth = x; }
f70f588a 104 /**
105 *
106 * @param x Value of Radius of support legs
107 */
108 void SetLegRadius(Double_t x=.25) { fLegRadius = x; }
109 /**
110 *
111 * @param x Value of Radius of support legs
112 */
113 void SetLegLength(Double_t x=.9) { fLegLength = x; }
114 /**
115 *
116 * @param x Value of Radius of support legs
117 */
1a1fdef7 118 void SetLegOffset(Double_t x=2) { fLegOffset = x; }
f70f588a 119 /**
120 *
121 * @param x Value of Staggering offset
122 */
123 void SetModuleSpacing(Double_t x=.5) { fModuleSpacing = x; }
124 /**
125 *
126 * @param x Value of Thickness of print board
127 */
128 void SetPrintboardThickness(Double_t x=.08) { fPrintboardThickness = x; }
129 /**
130 *
131 * @param x Value of Thickness of copper on print board
132 */
4ac75127 133 void SetCopperThickness(Double_t x=.01) { fCopperThickness = x; }
f70f588a 134 /**
135 *
136 * @param x Value of Thickness of chip on print board
137 */
4ac75127 138 void SetChipThickness(Double_t x=.01) { fChipThickness = x; }
f70f588a 139 /**
140 *
141 * @param x Value of spacing between si and PCB
142 */
4ac75127 143 void SetSpacing(Double_t x=.05) { fSpacing = x; }
f70f588a 144 /**
145 *
146 * @param x Thickness of honeycomb plate
147 */
ed82d35e 148 void SetHoneycombThickness(Double_t x=0.65) { fHoneycombThickness = x; }
f70f588a 149 /**
150 *
151 * @param x Thickness of aluminium of honeycomb
152 */
d98fbfa5 153 void SetAlThickness(Double_t x=.1) { fAlThickness = x; }
4ac75127 154
f70f588a 155 /**
156 *
157 * @return The Id of this ring type
158 */
1a1fdef7 159 Char_t GetId() const { return fId; }
f70f588a 160 /**
161 *
162 * @return With of bonding pad on sensor
163 */
1a1fdef7 164 Double_t GetBondingWidth() const { return fBondingWidth; }
f70f588a 165 /**
166 *
167 * @return Size of wafer the sensor was made from
168 */
1a1fdef7 169 Double_t GetWaferRadius() const { return fWaferRadius; }
f70f588a 170 /**
171 *
172 * @return Thickness of sensor
173 */
1a1fdef7 174 Double_t GetSiThickness() const { return fSiThickness; }
f70f588a 175 /**
176 *
177 * @return Minimum r for an active strip
178 */
54e415a8 179 Double_t GetMinR() const { return fMinR; }
f70f588a 180 /**
181 *
182 * @return Maximum r for an active strip
183 */
54e415a8 184 Double_t GetMaxR() const { return fMaxR; }
f70f588a 185 /**
186 *
187 * @return Lower radius of ring
188 */
1a1fdef7 189 Double_t GetLowR() const { return fLowR; }
f70f588a 190 /**
191 *
192 * @return Upper radius of ring
193 */
1a1fdef7 194 Double_t GetHighR() const { return fHighR; }
f70f588a 195 /**
196 *
197 * @return Opening angle of the sector (half that of silicon wafers)
198 */
1a1fdef7 199 Double_t GetTheta() const { return fTheta; }
f70f588a 200 /**
201 *
202 * @return Number of strips
203 */
1a1fdef7 204 Int_t GetNStrips() const { return fNStrips; }
f70f588a 205 /**
206 *
207 * @return Number of sectors
208 */
1a1fdef7 209 Int_t GetNSectors() const { return Int_t(360. / fTheta); }
f70f588a 210 /**
211 *
212 * @return Number of modules (2 sectors per module)
213 */
1a1fdef7 214 Int_t GetNModules() const { return GetNSectors() / 2; }
f70f588a 215 /**
216 *
217 * @return How far the ring extends beyond the z value given.
218 */
1a1fdef7 219 Double_t GetRingDepth() const { return fRingDepth; }
f70f588a 220 /**
221 *
222 * @return Radius of support legs
223 */
1a1fdef7 224 Double_t GetLegRadius() const { return fLegRadius; }
f70f588a 225 /**
226 *
227 * @return Radius of support legs
228 */
1a1fdef7 229 Double_t GetLegLength() const { return fLegLength; }
f70f588a 230 /**
231 *
232 * @return Radius of support legs
233 */
1a1fdef7 234 Double_t GetLegOffset() const { return fLegOffset; }
f70f588a 235 /**
236 *
237 * @return Staggering offset
238 */
1a1fdef7 239 Double_t GetModuleSpacing() const { return fModuleSpacing; }
f70f588a 240 /**
241 *
242 * @return Thickness of print board
243 */
4347b38f 244 Double_t GetPrintboardThickness() const { return fPrintboardThickness; }
f70f588a 245 /**
246 *
247 * @return Thickness copper of print board
248 */
4ac75127 249 Double_t GetCopperThickness() const { return fCopperThickness; }
f70f588a 250 /**
251 *
252 * @return Thickness chip of print board
253 */
4ac75127 254 Double_t GetChipThickness() const { return fChipThickness; }
f70f588a 255 /**
256 *
257 * @return Value of spacing between si and PCB
258 */
4ac75127 259 Double_t GetSpacing() const { return fSpacing; }
f70f588a 260 /**
261 *
262 * @return Thickness of honeycomb plate
263 */
d98fbfa5 264 Double_t GetHoneycombThickness() const { return fHoneycombThickness; }
f70f588a 265 /**
266 *
267 * @return Thickness of aluminium of honeycomb
268 */
d98fbfa5 269 Double_t GetAlThickness() const { return fAlThickness; }
f70f588a 270 /**
271 *
272 * @return The strip pitch
273 */
54e415a8 274 Double_t GetPitch() const { return (fMaxR - fMinR) / fNStrips; }
f70f588a 275 /**
276 *
277 * @return Radius (in cm) correspondig to strip @a strip
278 */
bf000c32 279 Double_t GetStripRadius(UShort_t strip) const;
f70f588a 280 /**
281 *
282 * @return Full depth of (low) modules in this (half) ring
283 */
284 Double_t GetModuleDepth() const;
285 /**
286 *
287 * @return Full depth of this (half) ring
288 */
d98fbfa5 289 Double_t GetFullDepth() const;
f70f588a 290 /**
291 * Get the inner radius of the digitizer cards
292 *
293 * @return The inner radius of the digitizer cards
294 */
d98fbfa5 295 Double_t GetFMDDLowR() const { return 1.2*GetLowR(); }
f70f588a 296 /**
297 * Get the outer radius of the digitizer cards
298 *
299 * @return The outer radius of the digitizer cards
300 */
d98fbfa5 301 Double_t GetFMDDHighR() const { return .95*GetHighR(); }
f70f588a 302 /**
303 *
304 * @return Thickness of print board
305 */
d98fbfa5 306 Double_t GetFMDDPrintboardThickness() const { return 2*fPrintboardThickness; }
f70f588a 307 /**
308 *
309 * @return Thickness copper of print board
310 */
d98fbfa5 311 Double_t GetFMDDCopperThickness() const { return 2*fCopperThickness; }
f70f588a 312 /**
313 *
314 * @return Thickness chip of print board
315 */
d98fbfa5 316 Double_t GetFMDDChipThickness() const { return 2*fChipThickness; }
317
f70f588a 318 /**
319 *
320 * @return List of verticies
321 */
1a1fdef7 322 const TObjArray& GetVerticies() const { return fVerticies; }
f70f588a 323 /**
324 *
325 * @return Number of verticies
326 */
1a1fdef7 327 Int_t GetNVerticies() const { return fVerticies.GetEntries(); }
f70f588a 328 /**
329 * @param i Vertex number
330 *
331 * @return the ith vertex
332 */
1a1fdef7 333 TVector2* GetVertex(Int_t i) const;
f70f588a 334 /**
335 *
336 * @return List of verticies
337 */
338 const TObjArray& GetSensorVerticies() const { return fSensorVerticies; }
339 /**
340 * @param i Vertex number
341 *
342 * @return the ith vertex
343 */
344 TVector2* GetSensorVertex(Int_t i) const;
345 /**
346 *
347 * @return List of verticies
348 */
349 const TObjArray& GetHybridVerticies() const { return fHybridVerticies; }
350 /**
351 * @param i Vertex number
352 *
353 * @return the ith vertex
354 */
355 TVector2* GetHybridVertex(Int_t i) const;
356
357 /**
358 * Get a list of feet positions
359 *
360 *
361 * @return List TVector2 of feet positions on hybrid card
362 */
363 const TObjArray& GetFeetPositions() const { return fFeetPositions; }
364 /**
365 * Get the number of feet positions
366 *
367 *
368 * @return Number of feet positions
369 */
370 Int_t GetNFeetPositions() const { return fFeetPositions.GetEntries(); }
371 /**
372 * Get the @a i feet position
373 *
374 * @param i Index
375 *
376 * @return The foot position of stand-off @a i
377 */
378 TVector2* GetFootPosition(Int_t i) const;
fb848ec4 379 /**
380 * Get the real length of a strip
381 *
382 * @param strip strip number
383 *
384 * @return length of strip
385 */
386 Float_t GetStripLength(UShort_t strip) const ;
387 /**
388 * Get the length of a strip assuming the corners are not cut off
389 *
390 * @param strip strip number
391 *
392 * @return length of strip w/o corners
393 */
394 Float_t GetBaseStripLength(UShort_t strip) const ;
9f662337 395 /** Not used */
1a1fdef7 396 void Detector2XYZ(UShort_t sector, UShort_t strip,
397 Double_t& x, Double_t& y, Double_t& z) const;
9f662337 398 /** Not used */
54e415a8 399 Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z,
400 UShort_t& sector, UShort_t& strip) const;
1a1fdef7 401private:
402 Char_t fId; // The Id of this ring type
403 Double_t fBondingWidth; // With of bonding pad on sensor
404 Double_t fWaferRadius; // Size of wafer sensor was made from
405 Double_t fSiThickness; // Thickness of sensor
406 Double_t fLowR; // Lower radius of ring
407 Double_t fHighR; // Upper radius of ring
54e415a8 408 Double_t fMinR; // Lower radius of active strips
409 Double_t fMaxR; // Upper radius of active strips
1a1fdef7 410 Double_t fTheta; // Opening angle of the silicon wafers
411 Int_t fNStrips; // Number of strips
412 Double_t fRingDepth; // How far the ring extends beyond z
413 Double_t fLegRadius; // Radius of support legs
414 Double_t fLegLength; // Radius of support legs
415 Double_t fLegOffset; // Radius of support legs
416 Double_t fModuleSpacing; // Staggering offset
417 Double_t fPrintboardThickness; // Thickness of print board
4ac75127 418 Double_t fCopperThickness; // Thickness of Cu on print board
419 Double_t fChipThickness; // Thickness of chip on print board
420 Double_t fSpacing; // Spacing between si and PCB
d98fbfa5 421 Double_t fHoneycombThickness; // Thickness of honeycomb plate
422 Double_t fAlThickness; // Thickness of aluminium of honeycomb
4ac75127 423
f70f588a 424 TObjArray fVerticies; // List of active sensor verticies
425 TObjArray fSensorVerticies; // List of physical sensor verticies
426 TObjArray fHybridVerticies; // List of hybrid card verticies
427 TObjArray fFeetPositions; // List of feet positions
428
1a1fdef7 429 ClassDef(AliFMDRing, 0);
4347b38f 430};
431#endif
0d0e6995 432//____________________________________________________________________
433//
434// Local Variables:
435// mode: C++
436// End:
4347b38f 437//
438// EOF
439//