Commit of new FMD3 geometry and other geometry related issues.
[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
c2fc1258 31/** @brief Geometry description and parameters of a ring in the FMD
1a1fdef7 32 detector.
33
34 As there are only 2 kinds of rings @e Inner (@c 'I') and @e
35 Outer (@c 'O') the two objects of this class is owned by the
36 Geometry::FMD singleton object. The 3 Geometry::FMDDetector
37 objects shares these two instances as needed.
9f662337 38 @ingroup FMD_base
1a1fdef7 39*/
40class AliFMDRing : public TNamed
4347b38f 41{
4347b38f 42public:
9f662337 43 /** CTOR
44 @param fId Ring ID */
1a1fdef7 45 AliFMDRing(Char_t fId);
9f662337 46 /** DTOR */
1a1fdef7 47 virtual ~AliFMDRing() {}
48 /** Initialize the ring geometry */
49 virtual void Init();
50
51 /** @param x Value of The Id of this ring type */
52 void SetId(Char_t x) { fId = x; }
53 /** @param x Value of With of bonding pad on sensor */
54 void SetBondingWidth(Double_t x=.5) { fBondingWidth = x; }
55 /** @param x Value of Size of wafer the sensor was made from */
56 void SetWaferRadius(Double_t x=13.4/2) { fWaferRadius = x; }
57 /** @param x Value of Thickness of sensor */
d98fbfa5 58 void SetSiThickness(Double_t x=.032) { fSiThickness = x; }
1a1fdef7 59 /** @param x Value of Lower radius of ring */
60 void SetLowR(Double_t x) { fLowR = x; }
61 /** @param x Value of Upper radius of ring */
62 void SetHighR(Double_t x) { fHighR = x; }
63 /** @param x Value of Opening angle of the silicon wafers */
64 void SetTheta(Double_t x) { fTheta = x; }
65 /** @param x Value of Number of strips */
66 void SetNStrips(Int_t x) { fNStrips = x; }
67 /** @param x Value of How far the ring extends beyond the z value given. */
68 void SetRingDepth(Double_t x) { fRingDepth = x; }
69 /** @param x Value of Radius of support legs */
ed82d35e 70 void SetLegRadius(Double_t x=.2) { fLegRadius = x; }
1a1fdef7 71 /** @param x Value of Radius of support legs */
72 void SetLegLength(Double_t x=1) { fLegLength = x; }
73 /** @param x Value of Radius of support legs */
74 void SetLegOffset(Double_t x=2) { fLegOffset = x; }
75 /** @param x Value of Staggering offset */
ed82d35e 76 void SetModuleSpacing(Double_t x=.6) { fModuleSpacing = x; }
1a1fdef7 77 /** @param x Value of Thickness of print board */
78 void SetPrintboardThickness(Double_t x=.1) { fPrintboardThickness = x; }
4ac75127 79 /** @param x Value of Thickness of copper on print board */
80 void SetCopperThickness(Double_t x=.01) { fCopperThickness = x; }
81 /** @param x Value of Thickness of chip on print board */
82 void SetChipThickness(Double_t x=.01) { fChipThickness = x; }
83 /** @param x Value of spacing between si and PCB */
84 void SetSpacing(Double_t x=.05) { fSpacing = x; }
d98fbfa5 85 /** @param x Thickness of honeycomb plate */
ed82d35e 86 void SetHoneycombThickness(Double_t x=0.65) { fHoneycombThickness = x; }
d98fbfa5 87 /** @param x Thickness of aluminium of honeycomb */
88 void SetAlThickness(Double_t x=.1) { fAlThickness = x; }
4ac75127 89
1a1fdef7 90 /** @return The Id of this ring type */
91 Char_t GetId() const { return fId; }
92 /** @return With of bonding pad on sensor */
93 Double_t GetBondingWidth() const { return fBondingWidth; }
94 /** @return Size of wafer the sensor was made from */
95 Double_t GetWaferRadius() const { return fWaferRadius; }
96 /** @return Thickness of sensor */
97 Double_t GetSiThickness() const { return fSiThickness; }
54e415a8 98 /** @return Minimum r for an active strip */
99 Double_t GetMinR() const { return fMinR; }
100 /** @return Maximum r for an active strip */
101 Double_t GetMaxR() const { return fMaxR; }
1a1fdef7 102 /** @return Lower radius of ring */
103 Double_t GetLowR() const { return fLowR; }
104 /** @return Upper radius of ring */
105 Double_t GetHighR() const { return fHighR; }
106 /** @return Opening angle of the sector (half that of silicon wafers) */
107 Double_t GetTheta() const { return fTheta; }
108 /** @return Number of strips */
109 Int_t GetNStrips() const { return fNStrips; }
110 /** @return Number of sectors */
111 Int_t GetNSectors() const { return Int_t(360. / fTheta); }
112 /** @return Number of modules (2 sectors per module) */
113 Int_t GetNModules() const { return GetNSectors() / 2; }
114 /** @return How far the ring extends beyond the z value given. */
115 Double_t GetRingDepth() const { return fRingDepth; }
116 /** @return Radius of support legs */
117 Double_t GetLegRadius() const { return fLegRadius; }
118 /** @return Radius of support legs */
119 Double_t GetLegLength() const { return fLegLength; }
120 /** @return Radius of support legs */
121 Double_t GetLegOffset() const { return fLegOffset; }
122 /** @return Staggering offset */
123 Double_t GetModuleSpacing() const { return fModuleSpacing; }
124 /** @return Thickness of print board */
4347b38f 125 Double_t GetPrintboardThickness() const { return fPrintboardThickness; }
4ac75127 126 /** @return Thickness copper of print board */
127 Double_t GetCopperThickness() const { return fCopperThickness; }
128 /** @return Thickness chip of print board */
129 Double_t GetChipThickness() const { return fChipThickness; }
130 /** @return Value of spacing between si and PCB */
131 Double_t GetSpacing() const { return fSpacing; }
d98fbfa5 132 /** @return Thickness of honeycomb plate */
133 Double_t GetHoneycombThickness() const { return fHoneycombThickness; }
134 /** @return Thickness of aluminium of honeycomb */
135 Double_t GetAlThickness() const { return fAlThickness; }
54e415a8 136 /** @return The strip pitch */
137 Double_t GetPitch() const { return (fMaxR - fMinR) / fNStrips; }
bf000c32 138 /** @return Radius (in cm) correspondig to strip @a strip */
139 Double_t GetStripRadius(UShort_t strip) const;
d98fbfa5 140 /** @return Full depth of this (half) ring */
141 Double_t GetFullDepth() const;
142 /** Get the inner radius of the digitizer cards */
143 Double_t GetFMDDLowR() const { return 1.2*GetLowR(); }
144 /** Get the outer radius of the digitizer cards */
145 Double_t GetFMDDHighR() const { return .95*GetHighR(); }
146 /** @return Thickness of print board */
147 Double_t GetFMDDPrintboardThickness() const { return 2*fPrintboardThickness; }
148 /** @return Thickness copper of print board */
149 Double_t GetFMDDCopperThickness() const { return 2*fCopperThickness; }
150 /** @return Thickness chip of print board */
151 Double_t GetFMDDChipThickness() const { return 2*fChipThickness; }
152
1a1fdef7 153 /** @return List of verticies */
154 const TObjArray& GetVerticies() const { return fVerticies; }
155 /** @return Number of verticies */
156 Int_t GetNVerticies() const { return fVerticies.GetEntries(); }
157 /** @param i Vertex number
158 @return the ith vertex */
159 TVector2* GetVertex(Int_t i) const;
160
9f662337 161 /** Not used */
1a1fdef7 162 void Detector2XYZ(UShort_t sector, UShort_t strip,
163 Double_t& x, Double_t& y, Double_t& z) const;
9f662337 164 /** Not used */
54e415a8 165 Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z,
166 UShort_t& sector, UShort_t& strip) const;
1a1fdef7 167private:
168 Char_t fId; // The Id of this ring type
169 Double_t fBondingWidth; // With of bonding pad on sensor
170 Double_t fWaferRadius; // Size of wafer sensor was made from
171 Double_t fSiThickness; // Thickness of sensor
172 Double_t fLowR; // Lower radius of ring
173 Double_t fHighR; // Upper radius of ring
54e415a8 174 Double_t fMinR; // Lower radius of active strips
175 Double_t fMaxR; // Upper radius of active strips
1a1fdef7 176 Double_t fTheta; // Opening angle of the silicon wafers
177 Int_t fNStrips; // Number of strips
178 Double_t fRingDepth; // How far the ring extends beyond z
179 Double_t fLegRadius; // Radius of support legs
180 Double_t fLegLength; // Radius of support legs
181 Double_t fLegOffset; // Radius of support legs
182 Double_t fModuleSpacing; // Staggering offset
183 Double_t fPrintboardThickness; // Thickness of print board
4ac75127 184 Double_t fCopperThickness; // Thickness of Cu on print board
185 Double_t fChipThickness; // Thickness of chip on print board
186 Double_t fSpacing; // Spacing between si and PCB
d98fbfa5 187 Double_t fHoneycombThickness; // Thickness of honeycomb plate
188 Double_t fAlThickness; // Thickness of aluminium of honeycomb
4ac75127 189
1a1fdef7 190 TObjArray fVerticies; // List of verticies
68e82e8d 191
1a1fdef7 192 ClassDef(AliFMDRing, 0);
4347b38f 193};
194#endif
0d0e6995 195//____________________________________________________________________
196//
197// Local Variables:
198// mode: C++
199// End:
4347b38f 200//
201// EOF
202//