]> git.uio.no Git - u/mrichter/AliRoot.git/blob - FMD/AliFMDRing.h
Additional protection
[u/mrichter/AliRoot.git] / FMD / AliFMDRing.h
1 #ifndef ALIFMDRING_H
2 #define ALIFMDRING_H
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  */
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 //
17 #ifndef ROOT_TNamed
18 # include <TNamed.h>
19 #endif
20 #ifndef ROOT_TObjArray
21 # include <TObjArray.h>
22 #endif
23
24 class TBrowser;
25 class TVector2;
26
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
36 {
37 public:
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; }
71   
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 */
103   Double_t GetPrintboardThickness() const { return fPrintboardThickness; }
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
131
132   ClassDef(AliFMDRing, 0);
133 };
134 #endif 
135 //____________________________________________________________________
136 //
137 // Local Variables:
138 //   mode: C++
139 // End:
140 //
141 // EOF
142 //