3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
6 * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
8 * See cxx source for full Copyright notice
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
15 //__________________________________________________________________
17 // Parameters of the FMD rings.
18 // This class is responsible to make the (common) rings of the three
24 #ifndef ROOT_TObjArray
25 # include <TObjArray.h>
32 * @brief Geometry description and parameters of a ring in the FMD
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.
41 class AliFMDRing : public TNamed
49 AliFMDRing(Char_t fId);
53 virtual ~AliFMDRing() {}
55 * Initialize the ring geometry
61 * @param x Value of The Id of this ring type
63 void SetId(Char_t x) { fId = x; }
66 * @param x Value of With of bonding pad on sensor
68 void SetBondingWidth(Double_t x=.5) { fBondingWidth = x; }
71 * @param x Value of Size of wafer the sensor was made from
73 void SetWaferRadius(Double_t x=13.4/2) { fWaferRadius = x; }
76 * @param x Value of Thickness of sensor
78 void SetSiThickness(Double_t x=.032) { fSiThickness = x; }
81 * @param x Value of Lower radius of ring
83 void SetLowR(Double_t x) { fLowR = x; }
86 * @param x Value of Upper radius of ring
88 void SetHighR(Double_t x) { fHighR = x; }
91 * @param x Value of Opening angle of the silicon wafers
93 void SetTheta(Double_t x) { fTheta = x; }
96 * @param x Value of Number of strips
98 void SetNStrips(Int_t x) { fNStrips = x; }
101 * @param x Value of How far the ring extends beyond the z value given.
103 void SetRingDepth(Double_t x) { fRingDepth = x; }
106 * @param x Value of Radius of support legs
108 void SetLegRadius(Double_t x=.25) { fLegRadius = x; }
111 * @param x Value of Radius of support legs
113 void SetLegLength(Double_t x=.9) { fLegLength = x; }
116 * @param x Value of Radius of support legs
118 void SetLegOffset(Double_t x=2) { fLegOffset = x; }
121 * @param x Value of Staggering offset
123 void SetModuleSpacing(Double_t x=.5) { fModuleSpacing = x; }
126 * @param x Value of Thickness of print board
128 void SetPrintboardThickness(Double_t x=.08) { fPrintboardThickness = x; }
131 * @param x Value of Thickness of copper on print board
133 void SetCopperThickness(Double_t x=.01) { fCopperThickness = x; }
136 * @param x Value of Thickness of chip on print board
138 void SetChipThickness(Double_t x=.01) { fChipThickness = x; }
141 * @param x Value of spacing between si and PCB
143 void SetSpacing(Double_t x=.05) { fSpacing = x; }
146 * @param x Thickness of honeycomb plate
148 void SetHoneycombThickness(Double_t x=0.65) { fHoneycombThickness = x; }
151 * @param x Thickness of aluminium of honeycomb
153 void SetAlThickness(Double_t x=.1) { fAlThickness = x; }
157 * @return The Id of this ring type
159 Char_t GetId() const { return fId; }
162 * @return With of bonding pad on sensor
164 Double_t GetBondingWidth() const { return fBondingWidth; }
167 * @return Size of wafer the sensor was made from
169 Double_t GetWaferRadius() const { return fWaferRadius; }
172 * @return Thickness of sensor
174 Double_t GetSiThickness() const { return fSiThickness; }
177 * @return Minimum r for an active strip
179 Double_t GetMinR() const { return fMinR; }
182 * @return Maximum r for an active strip
184 Double_t GetMaxR() const { return fMaxR; }
187 * @return Lower radius of ring
189 Double_t GetLowR() const { return fLowR; }
192 * @return Upper radius of ring
194 Double_t GetHighR() const { return fHighR; }
197 * @return Opening angle of the sector (half that of silicon wafers)
199 Double_t GetTheta() const { return fTheta; }
202 * @return Number of strips
204 Int_t GetNStrips() const { return fNStrips; }
207 * @return Number of sectors
209 Int_t GetNSectors() const { return Int_t(360. / fTheta); }
212 * @return Number of modules (2 sectors per module)
214 Int_t GetNModules() const { return GetNSectors() / 2; }
217 * @return How far the ring extends beyond the z value given.
219 Double_t GetRingDepth() const { return fRingDepth; }
222 * @return Radius of support legs
224 Double_t GetLegRadius() const { return fLegRadius; }
227 * @return Radius of support legs
229 Double_t GetLegLength() const { return fLegLength; }
232 * @return Radius of support legs
234 Double_t GetLegOffset() const { return fLegOffset; }
237 * @return Staggering offset
239 Double_t GetModuleSpacing() const { return fModuleSpacing; }
242 * @return Thickness of print board
244 Double_t GetPrintboardThickness() const { return fPrintboardThickness; }
247 * @return Thickness copper of print board
249 Double_t GetCopperThickness() const { return fCopperThickness; }
252 * @return Thickness chip of print board
254 Double_t GetChipThickness() const { return fChipThickness; }
257 * @return Value of spacing between si and PCB
259 Double_t GetSpacing() const { return fSpacing; }
262 * @return Thickness of honeycomb plate
264 Double_t GetHoneycombThickness() const { return fHoneycombThickness; }
267 * @return Thickness of aluminium of honeycomb
269 Double_t GetAlThickness() const { return fAlThickness; }
272 * @return The strip pitch
274 Double_t GetPitch() const { return (fMaxR - fMinR) / fNStrips; }
277 * @return Radius (in cm) correspondig to strip @a strip
279 Double_t GetStripRadius(UShort_t strip) const;
282 * @return Full depth of (low) modules in this (half) ring
284 Double_t GetModuleDepth() const;
287 * @return Full depth of this (half) ring
289 Double_t GetFullDepth() const;
291 * Get the inner radius of the digitizer cards
293 * @return The inner radius of the digitizer cards
295 Double_t GetFMDDLowR() const { return 1.2*GetLowR(); }
297 * Get the outer radius of the digitizer cards
299 * @return The outer radius of the digitizer cards
301 Double_t GetFMDDHighR() const { return .95*GetHighR(); }
304 * @return Thickness of print board
306 Double_t GetFMDDPrintboardThickness() const { return 2*fPrintboardThickness; }
309 * @return Thickness copper of print board
311 Double_t GetFMDDCopperThickness() const { return 2*fCopperThickness; }
314 * @return Thickness chip of print board
316 Double_t GetFMDDChipThickness() const { return 2*fChipThickness; }
320 * @return List of verticies
322 const TObjArray& GetVerticies() const { return fVerticies; }
325 * @return Number of verticies
327 Int_t GetNVerticies() const { return fVerticies.GetEntries(); }
329 * @param i Vertex number
331 * @return the ith vertex
333 TVector2* GetVertex(Int_t i) const;
336 * @return List of verticies
338 const TObjArray& GetSensorVerticies() const { return fSensorVerticies; }
340 * @param i Vertex number
342 * @return the ith vertex
344 TVector2* GetSensorVertex(Int_t i) const;
347 * @return List of verticies
349 const TObjArray& GetHybridVerticies() const { return fHybridVerticies; }
351 * @param i Vertex number
353 * @return the ith vertex
355 TVector2* GetHybridVertex(Int_t i) const;
358 * Get a list of feet positions
361 * @return List TVector2 of feet positions on hybrid card
363 const TObjArray& GetFeetPositions() const { return fFeetPositions; }
365 * Get the number of feet positions
368 * @return Number of feet positions
370 Int_t GetNFeetPositions() const { return fFeetPositions.GetEntries(); }
372 * Get the @a i feet position
376 * @return The foot position of stand-off @a i
378 TVector2* GetFootPosition(Int_t i) const;
380 * Get the real length of a strip
382 * @param strip strip number
384 * @return length of strip
386 Float_t GetStripLength(UShort_t strip) const ;
388 * Get the length of a strip assuming the corners are not cut off
390 * @param strip strip number
392 * @return length of strip w/o corners
394 Float_t GetBaseStripLength(UShort_t strip) const ;
396 void Detector2XYZ(UShort_t sector, UShort_t strip,
397 Double_t& x, Double_t& y, Double_t& z) const;
399 Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z,
400 UShort_t& sector, UShort_t& strip) const;
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
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
429 ClassDef(AliFMDRing, 0);
432 //____________________________________________________________________