]>
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. | |
34 | */ | |
35 | class AliFMDRing : public TNamed | |
4347b38f | 36 | { |
4347b38f | 37 | public: |
1a1fdef7 | 38 | AliFMDRing(Char_t fId); |
39 | virtual ~AliFMDRing() {} | |
40 | /** Initialize the ring geometry */ | |
41 | virtual void Init(); | |
42 | ||
43 | /** @param x Value of The Id of this ring type */ | |
44 | void SetId(Char_t x) { fId = x; } | |
45 | /** @param x Value of With of bonding pad on sensor */ | |
46 | void SetBondingWidth(Double_t x=.5) { fBondingWidth = x; } | |
47 | /** @param x Value of Size of wafer the sensor was made from */ | |
48 | void SetWaferRadius(Double_t x=13.4/2) { fWaferRadius = x; } | |
49 | /** @param x Value of Thickness of sensor */ | |
50 | void SetSiThickness(Double_t x=.03) { fSiThickness = x; } | |
51 | /** @param x Value of Lower radius of ring */ | |
52 | void SetLowR(Double_t x) { fLowR = x; } | |
53 | /** @param x Value of Upper radius of ring */ | |
54 | void SetHighR(Double_t x) { fHighR = x; } | |
55 | /** @param x Value of Opening angle of the silicon wafers */ | |
56 | void SetTheta(Double_t x) { fTheta = x; } | |
57 | /** @param x Value of Number of strips */ | |
58 | void SetNStrips(Int_t x) { fNStrips = x; } | |
59 | /** @param x Value of How far the ring extends beyond the z value given. */ | |
60 | void SetRingDepth(Double_t x) { fRingDepth = x; } | |
61 | /** @param x Value of Radius of support legs */ | |
62 | void SetLegRadius(Double_t x=.5) { fLegRadius = x; } | |
63 | /** @param x Value of Radius of support legs */ | |
64 | void SetLegLength(Double_t x=1) { fLegLength = x; } | |
65 | /** @param x Value of Radius of support legs */ | |
66 | void SetLegOffset(Double_t x=2) { fLegOffset = x; } | |
67 | /** @param x Value of Staggering offset */ | |
68 | void SetModuleSpacing(Double_t x=1) { fModuleSpacing = x; } | |
69 | /** @param x Value of Thickness of print board */ | |
70 | void SetPrintboardThickness(Double_t x=.1) { fPrintboardThickness = x; } | |
4ac75127 | 71 | /** @param x Value of Thickness of copper on print board */ |
72 | void SetCopperThickness(Double_t x=.01) { fCopperThickness = x; } | |
73 | /** @param x Value of Thickness of chip on print board */ | |
74 | void SetChipThickness(Double_t x=.01) { fChipThickness = x; } | |
75 | /** @param x Value of spacing between si and PCB */ | |
76 | void SetSpacing(Double_t x=.05) { fSpacing = x; } | |
77 | ||
1a1fdef7 | 78 | /** @return The Id of this ring type */ |
79 | Char_t GetId() const { return fId; } | |
80 | /** @return With of bonding pad on sensor */ | |
81 | Double_t GetBondingWidth() const { return fBondingWidth; } | |
82 | /** @return Size of wafer the sensor was made from */ | |
83 | Double_t GetWaferRadius() const { return fWaferRadius; } | |
84 | /** @return Thickness of sensor */ | |
85 | Double_t GetSiThickness() const { return fSiThickness; } | |
54e415a8 | 86 | /** @return Minimum r for an active strip */ |
87 | Double_t GetMinR() const { return fMinR; } | |
88 | /** @return Maximum r for an active strip */ | |
89 | Double_t GetMaxR() const { return fMaxR; } | |
1a1fdef7 | 90 | /** @return Lower radius of ring */ |
91 | Double_t GetLowR() const { return fLowR; } | |
92 | /** @return Upper radius of ring */ | |
93 | Double_t GetHighR() const { return fHighR; } | |
94 | /** @return Opening angle of the sector (half that of silicon wafers) */ | |
95 | Double_t GetTheta() const { return fTheta; } | |
96 | /** @return Number of strips */ | |
97 | Int_t GetNStrips() const { return fNStrips; } | |
98 | /** @return Number of sectors */ | |
99 | Int_t GetNSectors() const { return Int_t(360. / fTheta); } | |
100 | /** @return Number of modules (2 sectors per module) */ | |
101 | Int_t GetNModules() const { return GetNSectors() / 2; } | |
102 | /** @return How far the ring extends beyond the z value given. */ | |
103 | Double_t GetRingDepth() const { return fRingDepth; } | |
104 | /** @return Radius of support legs */ | |
105 | Double_t GetLegRadius() const { return fLegRadius; } | |
106 | /** @return Radius of support legs */ | |
107 | Double_t GetLegLength() const { return fLegLength; } | |
108 | /** @return Radius of support legs */ | |
109 | Double_t GetLegOffset() const { return fLegOffset; } | |
110 | /** @return Staggering offset */ | |
111 | Double_t GetModuleSpacing() const { return fModuleSpacing; } | |
112 | /** @return Thickness of print board */ | |
4347b38f | 113 | Double_t GetPrintboardThickness() const { return fPrintboardThickness; } |
4ac75127 | 114 | /** @return Thickness copper of print board */ |
115 | Double_t GetCopperThickness() const { return fCopperThickness; } | |
116 | /** @return Thickness chip of print board */ | |
117 | Double_t GetChipThickness() const { return fChipThickness; } | |
118 | /** @return Value of spacing between si and PCB */ | |
119 | Double_t GetSpacing() const { return fSpacing; } | |
54e415a8 | 120 | /** @return The strip pitch */ |
121 | Double_t GetPitch() const { return (fMaxR - fMinR) / fNStrips; } | |
122 | ||
1a1fdef7 | 123 | /** @return List of verticies */ |
124 | const TObjArray& GetVerticies() const { return fVerticies; } | |
125 | /** @return Number of verticies */ | |
126 | Int_t GetNVerticies() const { return fVerticies.GetEntries(); } | |
127 | /** @param i Vertex number | |
128 | @return the ith vertex */ | |
129 | TVector2* GetVertex(Int_t i) const; | |
130 | ||
131 | void Detector2XYZ(UShort_t sector, UShort_t strip, | |
132 | Double_t& x, Double_t& y, Double_t& z) const; | |
54e415a8 | 133 | Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z, |
134 | UShort_t& sector, UShort_t& strip) const; | |
1a1fdef7 | 135 | private: |
136 | Char_t fId; // The Id of this ring type | |
137 | Double_t fBondingWidth; // With of bonding pad on sensor | |
138 | Double_t fWaferRadius; // Size of wafer sensor was made from | |
139 | Double_t fSiThickness; // Thickness of sensor | |
140 | Double_t fLowR; // Lower radius of ring | |
141 | Double_t fHighR; // Upper radius of ring | |
54e415a8 | 142 | Double_t fMinR; // Lower radius of active strips |
143 | Double_t fMaxR; // Upper radius of active strips | |
1a1fdef7 | 144 | Double_t fTheta; // Opening angle of the silicon wafers |
145 | Int_t fNStrips; // Number of strips | |
146 | Double_t fRingDepth; // How far the ring extends beyond z | |
147 | Double_t fLegRadius; // Radius of support legs | |
148 | Double_t fLegLength; // Radius of support legs | |
149 | Double_t fLegOffset; // Radius of support legs | |
150 | Double_t fModuleSpacing; // Staggering offset | |
151 | Double_t fPrintboardThickness; // Thickness of print board | |
4ac75127 | 152 | Double_t fCopperThickness; // Thickness of Cu on print board |
153 | Double_t fChipThickness; // Thickness of chip on print board | |
154 | Double_t fSpacing; // Spacing between si and PCB | |
155 | ||
1a1fdef7 | 156 | TObjArray fVerticies; // List of verticies |
68e82e8d | 157 | |
1a1fdef7 | 158 | ClassDef(AliFMDRing, 0); |
4347b38f | 159 | }; |
160 | #endif | |
0d0e6995 | 161 | //____________________________________________________________________ |
162 | // | |
163 | // Local Variables: | |
164 | // mode: C++ | |
165 | // End: | |
4347b38f | 166 | // |
167 | // EOF | |
168 | // |