]>
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 | |
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 | */ |
40 | class AliFMDRing : public TNamed | |
4347b38f | 41 | { |
4347b38f | 42 | public: |
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 | 167 | private: |
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 | // |