]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/AliFMDRing.h
Temporary reverting the changes introduced earlier to store the TGeo geometry. New...
[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 */
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
24class TBrowser;
1a1fdef7 25class 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*/
35class AliFMDRing : public TNamed
4347b38f 36{
4347b38f 37public:
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
115private:
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//