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