]>
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; } | |
4347b38f | 71 | |
1a1fdef7 | 72 | /** @return The Id of this ring type */ |
73 | Char_t GetId() const { return fId; } | |
74 | /** @return With of bonding pad on sensor */ | |
75 | Double_t GetBondingWidth() const { return fBondingWidth; } | |
76 | /** @return Size of wafer the sensor was made from */ | |
77 | Double_t GetWaferRadius() const { return fWaferRadius; } | |
78 | /** @return Thickness of sensor */ | |
79 | Double_t GetSiThickness() const { return fSiThickness; } | |
80 | /** @return Lower radius of ring */ | |
81 | Double_t GetLowR() const { return fLowR; } | |
82 | /** @return Upper radius of ring */ | |
83 | Double_t GetHighR() const { return fHighR; } | |
84 | /** @return Opening angle of the sector (half that of silicon wafers) */ | |
85 | Double_t GetTheta() const { return fTheta; } | |
86 | /** @return Number of strips */ | |
87 | Int_t GetNStrips() const { return fNStrips; } | |
88 | /** @return Number of sectors */ | |
89 | Int_t GetNSectors() const { return Int_t(360. / fTheta); } | |
90 | /** @return Number of modules (2 sectors per module) */ | |
91 | Int_t GetNModules() const { return GetNSectors() / 2; } | |
92 | /** @return How far the ring extends beyond the z value given. */ | |
93 | Double_t GetRingDepth() const { return fRingDepth; } | |
94 | /** @return Radius of support legs */ | |
95 | Double_t GetLegRadius() const { return fLegRadius; } | |
96 | /** @return Radius of support legs */ | |
97 | Double_t GetLegLength() const { return fLegLength; } | |
98 | /** @return Radius of support legs */ | |
99 | Double_t GetLegOffset() const { return fLegOffset; } | |
100 | /** @return Staggering offset */ | |
101 | Double_t GetModuleSpacing() const { return fModuleSpacing; } | |
102 | /** @return Thickness of print board */ | |
4347b38f | 103 | Double_t GetPrintboardThickness() const { return fPrintboardThickness; } |
1a1fdef7 | 104 | /** @return List of verticies */ |
105 | const TObjArray& GetVerticies() const { return fVerticies; } | |
106 | /** @return Number of verticies */ | |
107 | Int_t GetNVerticies() const { return fVerticies.GetEntries(); } | |
108 | /** @param i Vertex number | |
109 | @return the ith vertex */ | |
110 | TVector2* GetVertex(Int_t i) const; | |
111 | ||
112 | void Detector2XYZ(UShort_t sector, UShort_t strip, | |
113 | Double_t& x, Double_t& y, Double_t& z) const; | |
114 | ||
115 | private: | |
116 | Char_t fId; // The Id of this ring type | |
117 | Double_t fBondingWidth; // With of bonding pad on sensor | |
118 | Double_t fWaferRadius; // Size of wafer sensor was made from | |
119 | Double_t fSiThickness; // Thickness of sensor | |
120 | Double_t fLowR; // Lower radius of ring | |
121 | Double_t fHighR; // Upper radius of ring | |
122 | Double_t fTheta; // Opening angle of the silicon wafers | |
123 | Int_t fNStrips; // Number of strips | |
124 | Double_t fRingDepth; // How far the ring extends beyond z | |
125 | Double_t fLegRadius; // Radius of support legs | |
126 | Double_t fLegLength; // Radius of support legs | |
127 | Double_t fLegOffset; // Radius of support legs | |
128 | Double_t fModuleSpacing; // Staggering offset | |
129 | Double_t fPrintboardThickness; // Thickness of print board | |
130 | TObjArray fVerticies; // List of verticies | |
68e82e8d | 131 | |
1a1fdef7 | 132 | ClassDef(AliFMDRing, 0); |
4347b38f | 133 | }; |
134 | #endif | |
0d0e6995 | 135 | //____________________________________________________________________ |
136 | // | |
137 | // Local Variables: | |
138 | // mode: C++ | |
139 | // End: | |
4347b38f | 140 | // |
141 | // EOF | |
142 | // |