]>
Commit | Line | Data |
---|---|---|
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 | ||
28 | class TBrowser; | |
1a1fdef7 | 29 | class 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 | */ |
41 | class AliFMDRing : public TNamed | |
4347b38f | 42 | { |
4347b38f | 43 | public: |
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 | 401 | private: |
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 | // |