4741abd3d3c36afd6e3b55c35baee6ccffac5422
[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 #ifndef ALIFMDPOLYGON_H
11 # include <AliFMDPolygon.h>
12 #endif
13 #ifndef ROOT_TArrayI
14 # include <TArrayI.h>
15 #endif
16
17 class TBrowser;
18 class TNode;
19 class TObjArray;
20 class TShape;
21 class TList;
22
23
24 //__________________________________________________________________
25 struct AliFMDRing : public TObject
26 {
27   Char_t   fId;                  // ID
28   Bool_t   fDetailed;
29   Int_t    fActiveId;            // Active volume 
30   Int_t    fPrintboardBottomId;  // Print board bottom volume
31   Int_t    fPrintboardTopId;     // Print board top volume
32   Int_t    fRingId;              // Ring volume
33   Int_t    fSectionId;           // Section volumes 
34   Int_t    fStripId;             // Strip volumes 
35   Int_t    fVirtualBackId;       // Virtual Back volume
36   Int_t    fVirtualFrontId;      // Virtual Front volume
37
38   Double_t fBondingWidth;        // With of bonding pad on sensor
39   Double_t fWaferRadius;         // Size of wafer the sensor was made from 
40   Double_t fSiThickness;         // Thickness of sensor
41   Double_t fLowR;                // Lower radius of ring
42   Double_t fHighR;               // Upper radius of ring
43   Double_t fTheta;               // Opening angle of the silicon wafers
44   Int_t    fNStrips;             // Number of strips 
45   Double_t fRingDepth;           // How far the ring extends beyond
46                                  // the z value given. 
47   Double_t fLegRadius;           // Radius of support legs 
48   Double_t fLegLength;           // Radius of support legs 
49   Double_t fLegOffset;           // Radius of support legs 
50
51   Double_t fModuleSpacing;       // Staggering offset 
52   Double_t fPrintboardThickness; // Thickness of print board
53
54   TArrayI    fRotations;         // Array of rotations
55   TShape*    fShape;             // Shape used for event display
56   TObjArray* fRotMatricies;      // Matricies used for event display
57
58   AliFMDPolygon  fPolygon;               // Polygon shape 
59 public:
60   //----------------------------------------------------------------
61   AliFMDRing(Char_t id='\0', Bool_t detailed=kTRUE);
62   virtual ~AliFMDRing();
63   void   Init();
64   bool   IsWithin(size_t moduleNo, double x, double y) const;
65   void   SetupCoordinates();  
66   void   SetupGeometry(Int_t vacuumId, Int_t siId, Int_t pcbId, 
67                        Int_t pbRotId, Int_t idRotId);
68   void   Geometry(const char* mother, Int_t baseId, Double_t z, Int_t pbRotId,
69                   Int_t idRotId);
70   void   SimpleGeometry(TList* nodes, 
71                         TNode* mother, 
72                         Int_t colour, 
73                         Double_t z, 
74                         Int_t n);
75   void   Gsatt();
76   void   Draw(Option_t* opt="HOL") const; //*MENU*
77   void   Browse(TBrowser* b);
78   Bool_t IsFolder() const { return kTRUE; }
79   
80   Char_t   GetId()                  const { return fId; }
81   Int_t    GetActiveId()            const { return fActiveId; }
82   Int_t    GetPrintboardBottomId()  const { return fPrintboardBottomId; }
83   Int_t    GetPrintboardTopId()     const { return fPrintboardTopId; }
84   Int_t    GetRingId()              const { return fRingId; }
85   Int_t    GetSectionId()           const { return fSectionId; }
86   Int_t    GetStripId()             const { return fStripId; }
87   Int_t    GetVirtualBackId()       const { return fVirtualBackId; }
88   Int_t    GetVirtualFrontId()      const { return fVirtualFrontId; }
89   Double_t GetBondingWidth()        const { return fBondingWidth; }
90   Double_t GetWaferRadius()         const { return fWaferRadius; }
91   Double_t GetSiThickness()         const { return fSiThickness; }
92   Double_t GetLowR()                const { return fLowR; }
93   Double_t GetHighR()               const { return fHighR; }
94   Double_t GetTheta()               const { return fTheta; }
95   Int_t    GetNStrips()             const { return fNStrips; }
96   Int_t    GetNSectors()            const { return Int_t(360 / fTheta); }
97   Double_t GetLegRadius()           const { return fLegRadius; }
98   Double_t GetLegLength()           const { return fLegLength; }
99   Double_t GetModuleSpacing()       const { return fModuleSpacing; }
100   Double_t GetPrintboardThickness() const { return fPrintboardThickness; }
101   Double_t GetRingDepth()           const { return fRingDepth; }
102
103   void SetBondingWidth(Double_t width)            { fBondingWidth = width; }
104   void SetWaferRadius(Double_t radius)            { fWaferRadius = radius; } 
105   void SetSiThickness(Double_t thickness)         { fSiThickness = thickness; }
106   void SetLowR(Double_t lowR)                     { fLowR = lowR; }
107   void SetHighR(Double_t highR)                   { fHighR = highR; }
108   void SetTheta(Double_t theta)                   { fTheta = theta; }
109   void SetNStrips(Int_t nStrips)                  { fNStrips = nStrips; }
110   void SetLegRadius(Double_t radius)              { fLegRadius = radius; }
111   void SetLegLength(Double_t length)              { fLegLength = length; }
112   void SetLegOffset(Double_t offset)              { fLegOffset = offset; }
113
114   void SetModuleSpacing(Double_t       spacing)   { fModuleSpacing = spacing; }
115   void SetPrintboardThickness(Double_t thickness) { fPrintboardThickness = thickness; }
116
117   ClassDef(AliFMDRing, 1) // FMD Ring volume parameters 
118 };
119 #endif 
120 //____________________________________________________________________
121 //
122 // Local Variables:
123 //   mode: C++
124 // End:
125 //
126 // EOF
127 //