Line data Source code
1 : #ifndef ALIFMDRING_H
2 : #define ALIFMDRING_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 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 : */
15 : //__________________________________________________________________
16 : //
17 : // Parameters of the FMD rings.
18 : // This class is responsible to make the (common) rings of the three
19 : // sub-detectors.
20 : //
21 : #ifndef ROOT_TNamed
22 : # include <TNamed.h>
23 : #endif
24 : #ifndef ROOT_TObjArray
25 : # include <TObjArray.h>
26 : #endif
27 :
28 : class TBrowser;
29 : class TVector2;
30 :
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
40 : */
41 : class AliFMDRing : public TNamed
42 : {
43 : public:
44 : /**
45 : * CTOR
46 : *
47 : * @param fId Ring ID
48 : */
49 : AliFMDRing(Char_t fId);
50 : /**
51 : * DTOR
52 : */
53 0 : virtual ~AliFMDRing() {}
54 : /**
55 : * Initialize the ring geometry
56 : */
57 : virtual void Init();
58 :
59 : /**
60 : *
61 : * @param x Value of The Id of this ring type
62 : */
63 0 : void SetId(Char_t x) { fId = x; }
64 : /**
65 : *
66 : * @param x Value of With of bonding pad on sensor
67 : */
68 12 : void SetBondingWidth(Double_t x=.5) { fBondingWidth = x; }
69 : /**
70 : *
71 : * @param x Value of Size of wafer the sensor was made from
72 : */
73 12 : void SetWaferRadius(Double_t x=13.4/2) { fWaferRadius = x; }
74 : /**
75 : *
76 : * @param x Value of Thickness of sensor
77 : */
78 12 : void SetSiThickness(Double_t x=.032) { fSiThickness = x; }
79 : /**
80 : *
81 : * @param x Value of Lower radius of ring
82 : */
83 12 : void SetLowR(Double_t x) { fLowR = x; }
84 : /**
85 : *
86 : * @param x Value of Upper radius of ring
87 : */
88 12 : void SetHighR(Double_t x) { fHighR = x; }
89 : /**
90 : *
91 : * @param x Value of Opening angle of the silicon wafers
92 : */
93 12 : void SetTheta(Double_t x) { fTheta = x; }
94 : /**
95 : *
96 : * @param x Value of Number of strips
97 : */
98 12 : void SetNStrips(Int_t x) { fNStrips = x; }
99 : /**
100 : *
101 : * @param x Value of How far the ring extends beyond the z value given.
102 : */
103 0 : void SetRingDepth(Double_t x) { fRingDepth = x; }
104 : /**
105 : *
106 : * @param x Value of Radius of support legs
107 : */
108 12 : void SetLegRadius(Double_t x=.25) { fLegRadius = x; }
109 : /**
110 : *
111 : * @param x Value of Radius of support legs
112 : */
113 12 : void SetLegLength(Double_t x=.9) { fLegLength = x; }
114 : /**
115 : *
116 : * @param x Value of Radius of support legs
117 : */
118 12 : void SetLegOffset(Double_t x=2) { fLegOffset = x; }
119 : /**
120 : *
121 : * @param x Value of Staggering offset
122 : */
123 12 : void SetModuleSpacing(Double_t x=.5) { fModuleSpacing = x; }
124 : /**
125 : *
126 : * @param x Value of Thickness of print board
127 : */
128 12 : void SetPrintboardThickness(Double_t x=.08) { fPrintboardThickness = x; }
129 : /**
130 : *
131 : * @param x Value of Thickness of copper on print board
132 : */
133 12 : void SetCopperThickness(Double_t x=.01) { fCopperThickness = x; }
134 : /**
135 : *
136 : * @param x Value of Thickness of chip on print board
137 : */
138 12 : void SetChipThickness(Double_t x=.01) { fChipThickness = x; }
139 : /**
140 : *
141 : * @param x Value of spacing between si and PCB
142 : */
143 12 : void SetSpacing(Double_t x=.05) { fSpacing = x; }
144 : /**
145 : *
146 : * @param x Thickness of honeycomb plate
147 : */
148 12 : void SetHoneycombThickness(Double_t x=0.65) { fHoneycombThickness = x; }
149 : /**
150 : *
151 : * @param x Thickness of aluminium of honeycomb
152 : */
153 12 : void SetAlThickness(Double_t x=.1) { fAlThickness = x; }
154 :
155 : /**
156 : *
157 : * @return The Id of this ring type
158 : */
159 22 : Char_t GetId() const { return fId; }
160 : /**
161 : *
162 : * @return With of bonding pad on sensor
163 : */
164 0 : Double_t GetBondingWidth() const { return fBondingWidth; }
165 : /**
166 : *
167 : * @return Size of wafer the sensor was made from
168 : */
169 0 : Double_t GetWaferRadius() const { return fWaferRadius; }
170 : /**
171 : *
172 : * @return Thickness of sensor
173 : */
174 884770 : Double_t GetSiThickness() const { return fSiThickness; }
175 : /**
176 : *
177 : * @return Minimum r for an active strip
178 : */
179 884736 : Double_t GetMinR() const { return fMinR; }
180 : /**
181 : *
182 : * @return Maximum r for an active strip
183 : */
184 884736 : Double_t GetMaxR() const { return fMaxR; }
185 : /**
186 : *
187 : * @return Lower radius of ring
188 : */
189 122 : Double_t GetLowR() const { return fLowR; }
190 : /**
191 : *
192 : * @return Upper radius of ring
193 : */
194 122 : Double_t GetHighR() const { return fHighR; }
195 : /**
196 : *
197 : * @return Opening angle of the sector (half that of silicon wafers)
198 : */
199 884820 : Double_t GetTheta() const { return fTheta; }
200 : /**
201 : *
202 : * @return Number of strips
203 : */
204 886980 : Int_t GetNStrips() const { return fNStrips; }
205 : /**
206 : *
207 : * @return Number of sectors
208 : */
209 750 : Int_t GetNSectors() const { return Int_t(360. / fTheta); }
210 : /**
211 : *
212 : * @return Number of modules (2 sectors per module)
213 : */
214 74 : Int_t GetNModules() const { return GetNSectors() / 2; }
215 : /**
216 : *
217 : * @return How far the ring extends beyond the z value given.
218 : */
219 0 : Double_t GetRingDepth() const { return fRingDepth; }
220 : /**
221 : *
222 : * @return Radius of support legs
223 : */
224 4 : Double_t GetLegRadius() const { return fLegRadius; }
225 : /**
226 : *
227 : * @return Radius of support legs
228 : */
229 28 : Double_t GetLegLength() const { return fLegLength; }
230 : /**
231 : *
232 : * @return Radius of support legs
233 : */
234 0 : Double_t GetLegOffset() const { return fLegOffset; }
235 : /**
236 : *
237 : * @return Staggering offset
238 : */
239 28 : Double_t GetModuleSpacing() const { return fModuleSpacing; }
240 : /**
241 : *
242 : * @return Thickness of print board
243 : */
244 28 : Double_t GetPrintboardThickness() const { return fPrintboardThickness; }
245 : /**
246 : *
247 : * @return Thickness copper of print board
248 : */
249 28 : Double_t GetCopperThickness() const { return fCopperThickness; }
250 : /**
251 : *
252 : * @return Thickness chip of print board
253 : */
254 28 : Double_t GetChipThickness() const { return fChipThickness; }
255 : /**
256 : *
257 : * @return Value of spacing between si and PCB
258 : */
259 28 : Double_t GetSpacing() const { return fSpacing; }
260 : /**
261 : *
262 : * @return Thickness of honeycomb plate
263 : */
264 24 : Double_t GetHoneycombThickness() const { return fHoneycombThickness; }
265 : /**
266 : *
267 : * @return Thickness of aluminium of honeycomb
268 : */
269 10 : Double_t GetAlThickness() const { return fAlThickness; }
270 : /**
271 : *
272 : * @return The strip pitch
273 : */
274 0 : Double_t GetPitch() const { return (fMaxR - fMinR) / fNStrips; }
275 : /**
276 : *
277 : * @return Radius (in cm) correspondig to strip @a strip
278 : */
279 : Double_t GetStripRadius(UShort_t strip) const;
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 : */
289 : Double_t GetFullDepth() const;
290 : /**
291 : * Get the inner radius of the digitizer cards
292 : *
293 : * @return The inner radius of the digitizer cards
294 : */
295 4 : Double_t GetFMDDLowR() const { return 1.2*GetLowR(); }
296 : /**
297 : * Get the outer radius of the digitizer cards
298 : *
299 : * @return The outer radius of the digitizer cards
300 : */
301 4 : Double_t GetFMDDHighR() const { return .95*GetHighR(); }
302 : /**
303 : *
304 : * @return Thickness of print board
305 : */
306 8 : Double_t GetFMDDPrintboardThickness() const { return 2*fPrintboardThickness; }
307 : /**
308 : *
309 : * @return Thickness copper of print board
310 : */
311 8 : Double_t GetFMDDCopperThickness() const { return 2*fCopperThickness; }
312 : /**
313 : *
314 : * @return Thickness chip of print board
315 : */
316 8 : Double_t GetFMDDChipThickness() const { return 2*fChipThickness; }
317 :
318 : /**
319 : *
320 : * @return List of verticies
321 : */
322 0 : const TObjArray& GetVerticies() const { return fVerticies; }
323 : /**
324 : *
325 : * @return Number of verticies
326 : */
327 0 : Int_t GetNVerticies() const { return fVerticies.GetEntries(); }
328 : /**
329 : * @param i Vertex number
330 : *
331 : * @return the ith vertex
332 : */
333 : TVector2* GetVertex(Int_t i) const;
334 : /**
335 : *
336 : * @return List of verticies
337 : */
338 4 : 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 12 : 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 0 : const TObjArray& GetFeetPositions() const { return fFeetPositions; }
364 : /**
365 : * Get the number of feet positions
366 : *
367 : *
368 : * @return Number of feet positions
369 : */
370 0 : 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;
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 ;
395 : /** Not used */
396 : void Detector2XYZ(UShort_t sector, UShort_t strip,
397 : Double_t& x, Double_t& y, Double_t& z) const;
398 : /** Not used */
399 : Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z,
400 : UShort_t& sector, UShort_t& strip) const;
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
408 : Double_t fMinR; // Lower radius of active strips
409 : Double_t fMaxR; // Upper radius of active strips
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
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
421 : Double_t fHoneycombThickness; // Thickness of honeycomb plate
422 : Double_t fAlThickness; // Thickness of aluminium of honeycomb
423 :
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 :
429 12 : ClassDef(AliFMDRing, 0);
430 : };
431 : #endif
432 : //____________________________________________________________________
433 : //
434 : // Local Variables:
435 : // mode: C++
436 : // End:
437 : //
438 : // EOF
439 : //
|