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