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