Merge with TRD-develop
[u/mrichter/AliRoot.git] / TRD / AliTRDgeometry.h
1 #ifndef ALITRDGEOMETRY_H
2 #define ALITRDGEOMETRY_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 #include "AliGeometry.h"
9
10 class AliTRDgeometry : public AliGeometry {
11
12  public:
13
14   AliTRDgeometry();
15   virtual ~AliTRDgeometry();
16
17   virtual void     CreateGeometry(Int_t *idtmed);
18   virtual Int_t    IsVersion() const = 0;
19   virtual void     Init();
20   virtual Bool_t   Local2Global(Int_t d, Float_t *local, Float_t *global) const;
21   virtual Bool_t   Local2Global(Int_t p, Int_t c, Int_t s, Float_t *local, Float_t *global) const;
22   virtual Bool_t   Rotate(Int_t d, Float_t *pos, Float_t *rot) const;
23   virtual Bool_t   RotateBack(Int_t d, Float_t *rot, Float_t *pos) const;
24
25   static  Int_t    Nsect()   { return fgkNsect; };
26   static  Int_t    Nplan()   { return fgkNplan; };
27   static  Int_t    Ncham()   { return fgkNcham; };
28   static  Int_t    Ndet()    { return fgkNdet;  };
29
30   static  Float_t  Rmin()    { return fgkRmin;  };
31   static  Float_t  Rmax()    { return fgkRmax;  };
32   static  Float_t  Zmax1()   { return fgkZmax1; };
33   static  Float_t  Zmax2()   { return fgkZmax2; };
34
35   static  Float_t  Cwidcha() { return (fgkSwidth2 - fgkSwidth1) 
36                              / fgkSheight * (fgkCheight + fgkCspace); };
37   static  Float_t  Cheight() { return fgkCheight; };
38   static  Float_t  Cspace()  { return fgkCspace;  };
39   static  Float_t  MyThick() { return fgkMyThick; };
40   static  Float_t  DrThick() { return fgkDrThick; };
41   static  Float_t  RaThick() { return fgkRaThick; };
42
43   virtual void     SetPHOShole() = 0;
44   virtual void     SetRICHhole() = 0;
45
46   virtual void     SetRowPadSize(Float_t size) {};
47   virtual void     SetColPadSize(Float_t size);
48   virtual void     SetTimeBinSize(Float_t size);
49
50   virtual Bool_t   GetPHOShole() const = 0;
51   virtual Bool_t   GetRICHhole() const = 0;
52
53   virtual Int_t    GetDetector(Int_t p, Int_t c, Int_t s) const;
54   virtual Int_t    GetPlane(Int_t d)   const;
55   virtual Int_t    GetChamber(Int_t d) const;
56   virtual Int_t    GetSector(Int_t d)  const;
57
58   virtual Float_t  GetChamberWidth(Int_t p)             const { return fCwidth[p]; };
59    
60   virtual Int_t    GetRowMax(Int_t p, Int_t c, Int_t s) const { return fRowMax[p][c][s]; };
61   virtual Int_t    GetColMax(Int_t p)                   const { return fColMax[p];       };
62   virtual Int_t    GetTimeMax()                         const { return fTimeMax;         };
63  
64   virtual Float_t  GetRow0(Int_t p, Int_t c, Int_t s)   const { return fRow0[p][c][s]; };
65   virtual Float_t  GetCol0(Int_t p)                     const { return fCol0[p];       };
66   virtual Float_t  GetTime0(Int_t p)                    const { return fTime0[p];      };
67
68   virtual Float_t  GetRowPadSize()                      const { return fRowPadSize;  };
69   virtual Float_t  GetColPadSize()                      const { return fColPadSize;  };
70   virtual Float_t  GetTimeBinSize()                     const { return fTimeBinSize; };
71
72   virtual void     GetGlobal(const AliRecPoint *p, TVector3 &pos, TMatrix &mat) const; 
73   virtual void     GetGlobal(const AliRecPoint *p, TVector3 &pos) const;   
74
75   static  Double_t GetAlpha() { return 2 * 3.14159265358979323846 / fgkNsect; }; 
76
77  protected:
78
79   enum { kNplan = 6, kNcham = 5, kNsect = 18, kNdet = 540 };
80   static const Int_t   fgkNsect;                            // Number of sectors in the full detector (18)
81   static const Int_t   fgkNplan;                            // Number of planes of the TRD (6)
82   static const Int_t   fgkNcham;                            // Number of chambers in z-direction (5)
83   static const Int_t   fgkNdet;                             // Total number of detectors (18 * 6 * 5 = 540)
84
85   static const Float_t fgkRmin;                             // Minimal radius of the TRD
86   static const Float_t fgkRmax;                             // Maximal radius of the TRD
87
88   static const Float_t fgkZmax1;                            // Half-length of the TRD at outer radius
89   static const Float_t fgkZmax2;                            // Half-length of the TRD at inner radius
90
91   static const Float_t fgkSheight;                          // Height of the TRD-volume in spaceframe (BTR1-3)
92   static const Float_t fgkSwidth1;                          // Lower width of the TRD-volume in spaceframe (BTR1-3)
93   static const Float_t fgkSwidth2;                          // Upper width of the TRD-volume in spaceframe (BTR1-3)
94   static const Float_t fgkSlenTR1;                          // Length of the TRD-volume in spaceframe (BTR1)
95   static const Float_t fgkSlenTR2;                          // Length of the TRD-volume in spaceframe (BTR2)
96   static const Float_t fgkSlenTR3;                          // Length of the TRD-volume in spaceframe (BTR3)
97
98   static const Float_t fgkCheight;                          // Height of the chambers
99   static const Float_t fgkCspace;                           // Vertical spacing of the chambers
100   static const Float_t fgkCaframe;                          // Height of the aluminum frame
101   static const Float_t fgkCcframe;                          // Height of the carbon frame
102   static const Float_t fgkCathick;                          // Thickness of the aluminum frame
103   static const Float_t fgkCcthick;                          // Thickness of the carbon frame
104
105   static const Float_t fgkSeThick;                          // Thickness of the radiator seal
106   static const Float_t fgkRaThick;                          // Thickness of the radiator
107   static const Float_t fgkPeThick;                          // Thickness of the PE-layer in the radiator
108   static const Float_t fgkMyThick;                          // Thickness of the mylar-layer
109   static const Float_t fgkXeThick;                          // Thickness of the gas volume
110   static const Float_t fgkDrThick;                          // Thickness of the drift region
111   static const Float_t fgkAmThick;                          // Thickness of the amplification region
112   static const Float_t fgkCuThick;                          // Thickness of the pad plane
113   static const Float_t fgkSuThick;                          // Thickness of the HEXCEL+G10 support structure
114   static const Float_t fgkFeThick;                          // Thickness of the FEE + signal lines
115   static const Float_t fgkCoThick;                          // Thickness of the PE of the cooling device
116   static const Float_t fgkWaThick;                          // Thickness of the cooling water
117
118   static const Float_t fgkSeZpos;                           // Position of the radiator seal
119   static const Float_t fgkRaZpos;                           // Position of the radiator
120   static const Float_t fgkPeZpos;                           // Position of the PE-layer in the radiator
121   static const Float_t fgkMyZpos;                           // Position of the mylar-layer
122   static const Float_t fgkDrZpos;                           // Position of the drift region
123   static const Float_t fgkAmZpos;                           // Position of the amplification region
124   static const Float_t fgkCuZpos;                           // Position of the pad plane
125   static const Float_t fgkSuZpos;                           // Position of the HEXCEL+G10 support structure
126   static const Float_t fgkFeZpos;                           // Position of the FEE + signal lines
127   static const Float_t fgkCoZpos;                           // Position of the PE of the cooling device
128   static const Float_t fgkWaZpos;                           // Position of the colling water
129
130   Int_t                fRowMax[kNplan][kNcham][kNsect];     // Number of pad-rows
131   Int_t                fColMax[kNplan];                     // Number of pad-columns
132   Int_t                fTimeMax;                            // Number of time buckets
133
134   Float_t              fCwidth[kNplan];                     // Width of the chambers
135
136   Float_t              fRow0[kNplan][kNcham][kNsect];       // Row-position of pad 0
137   Float_t              fCol0[kNplan];                       // Column-position of pad 0
138   Float_t              fTime0[kNplan];                      // Time-position of pad 0
139
140   Float_t              fRowPadSize;                         // Pad size in z-direction
141   Float_t              fColPadSize;                         // Pad size in rphi-direction
142   Float_t              fTimeBinSize;                        // Size of the time buckets
143
144   Float_t              fRotA11[kNsect];                     // Matrix elements for the rotation
145   Float_t              fRotA12[kNsect];                     // Matrix elements for the rotation
146   Float_t              fRotA21[kNsect];                     // Matrix elements for the rotation
147   Float_t              fRotA22[kNsect];                     // Matrix elements for the rotation
148
149   Float_t              fRotB11[kNsect];                     // Matrix elements for the backward rotation
150   Float_t              fRotB12[kNsect];                     // Matrix elements for the backward rotation
151   Float_t              fRotB21[kNsect];                     // Matrix elements for the backward rotation
152   Float_t              fRotB22[kNsect];                     // Matrix elements for the backward rotation
153
154   ClassDef(AliTRDgeometry,2)                                // TRD geometry base class
155
156 };
157
158 #endif