]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDgeometry.h
Implementing of new function to check for holes (M.Ivanov)
[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 ///////////////////////////////////////////////////////////////////////////////
9 //                                                                           //
10 //  TRD geometry class                                                       //
11 //                                                                           //
12 ///////////////////////////////////////////////////////////////////////////////
13
14 #include "AliGeometry.h"
15
16 class AliTRDparameter;
17
18 class AliTRDgeometry : public AliGeometry {
19
20  public:
21
22   enum { kNplan = 6, kNcham = 5, kNsect = 18, kNdet = 540 };
23
24   AliTRDgeometry();
25   virtual ~AliTRDgeometry();
26
27   virtual void     CreateGeometry(Int_t *idtmed);
28   virtual Int_t    IsVersion() const = 0;
29   virtual void     Init();
30   virtual Bool_t   Impact(const TParticle* ) const { return kTRUE; };
31   virtual Bool_t   Local2Global(Int_t d, Float_t *local, Float_t *global, AliTRDparameter *par) const;
32   virtual Bool_t   Local2Global(Int_t p, Int_t c, Int_t s, Float_t *local, Float_t *global, AliTRDparameter *par) const;
33
34   virtual Bool_t   Global2Local(Int_t mode, Float_t *local, Float_t *global, Int_t* index,  AliTRDparameter *par) const;
35   virtual Bool_t   Global2Detector(Float_t global[3], Int_t index[3],  AliTRDparameter *par);
36
37   virtual Bool_t   Rotate(Int_t d, Float_t *pos, Float_t *rot) const;
38   virtual Bool_t   RotateBack(Int_t d, Float_t *rot, Float_t *pos) const;
39
40   static  Int_t    Nsect()   { return fgkNsect; };
41   static  Int_t    Nplan()   { return fgkNplan; };
42   static  Int_t    Ncham()   { return fgkNcham; };
43   static  Int_t    Ndet()    { return fgkNdet;  };
44
45   static  Float_t  Rmin()    { return fgkRmin;  };
46   static  Float_t  Rmax()    { return fgkRmax;  };
47   static  Float_t  Zmax1()   { return fgkZmax1; };
48   static  Float_t  Zmax2()   { return fgkZmax2; };
49
50   static  Float_t  Cwidcha() { return (fgkSwidth2 - fgkSwidth1) 
51                              / fgkSheight * (fgkCH + fgkVspace); };
52   static  Float_t  Cheight() { return fgkCH;      };
53   static  Float_t  Cspace()  { return fgkVspace;  };
54   static  Float_t  CraHght() { return fgkCraH;    };
55   static  Float_t  CdrHght() { return fgkCdrH;    };
56   static  Float_t  CamHght() { return fgkCamH;    };
57   static  Float_t  CroHght() { return fgkCroH;    };
58   static  Float_t  MyThick() { return fgkMyThick; };
59   static  Float_t  DrThick() { return fgkDrThick; };
60   static  Float_t  AmThick() { return fgkAmThick; };
61   static  Float_t  DrZpos()  { return fgkDrZpos;  };
62   static  Float_t  RpadW()   { return fgkRpadW;   };
63   static  Float_t  CpadW()   { return fgkCpadW;   };
64
65   virtual void     SetPHOShole() = 0;
66   virtual void     SetRICHhole() = 0;
67
68   virtual void     SetOldGeometry();
69
70   virtual Bool_t   GetPHOShole() const = 0;
71   virtual Bool_t   GetRICHhole() const = 0;
72   virtual Bool_t   IsHole(Int_t /*iplan*/, Int_t /*icham*/, Int_t /*isect*/) const {return kFALSE;}
73   virtual Int_t    GetDetectorSec(const Int_t p, const Int_t c) const;
74   virtual Int_t    GetDetector(const Int_t p, const Int_t c, const Int_t s) const;
75   virtual Int_t    GetPlane(const Int_t d)   const;
76   virtual Int_t    GetChamber(const Int_t d) const;
77   virtual Int_t    GetSector(const Int_t d)  const;
78
79           Float_t  GetChamberWidth(const Int_t p)                 const { return fCwidth[p];     };
80           Float_t  GetChamberLength(const Int_t p, const Int_t c) const { return fClength[p][c]; }; 
81
82   virtual void     GetGlobal(const AliRecPoint* , TVector3& , TMatrix& ) const { }; 
83   virtual void     GetGlobal(const AliRecPoint* , TVector3& ) const { };
84  
85   static  Double_t GetAlpha()  { return 2 * 3.14159265358979323846 / fgkNsect; }; 
86
87  protected:
88  
89   static const Int_t   fgkNsect;                            // Number of sectors in the full detector (18)
90   static const Int_t   fgkNplan;                            // Number of planes of the TRD (6)
91   static const Int_t   fgkNcham;                            // Number of chambers in z-direction (5)
92   static const Int_t   fgkNdet;                             // Total number of detectors (18 * 6 * 5 = 540)
93
94   static const Float_t fgkRmin;                             // Minimal radius of the TRD
95   static const Float_t fgkRmax;                             // Maximal radius of the TRD
96
97   static const Float_t fgkZmax1;                            // Half-length of the TRD at outer radius
98   static const Float_t fgkZmax2;                            // Half-length of the TRD at inner radius
99
100   static const Float_t fgkSheight;                          // Height of the TRD-volume in spaceframe (BTR1-3)
101   static const Float_t fgkSwidth1;                          // Lower width of the TRD-volume in spaceframe (BTR1-3)
102   static const Float_t fgkSwidth2;                          // Upper width of the TRD-volume in spaceframe (BTR1-3)
103   static const Float_t fgkSlenTR1;                          // Length of the TRD-volume in spaceframe (BTR1)
104   static const Float_t fgkSlenTR2;                          // Length of the TRD-volume in spaceframe (BTR2)
105   static const Float_t fgkSlenTR3;                          // Length of the TRD-volume in spaceframe (BTR3)
106
107   static const Float_t fgkSMpltT;                           // Thickness of the super module side plates
108   static const Float_t fgkSMgapT;                           // Thickness of the gap between side plates and space frame
109
110   static const Float_t fgkCraH;                             // Height of the radiator part of the chambers
111   static const Float_t fgkCdrH;                             // Height of the drift region of the chambers
112   static const Float_t fgkCamH;                             // Height of the amplification region of the chambers
113   static const Float_t fgkCroH;                             // Height of the readout of the chambers
114   static const Float_t fgkCH;                               // Total height of the chambers
115
116   static const Float_t fgkVspace;                           // Vertical spacing of the chambers
117   static const Float_t fgkHspace;                           // Horizontal spacing of the chambers
118
119   static const Float_t fgkCalT;                             // Thickness of the lower aluminum frame
120   static const Float_t fgkCclsT;                            // Thickness of the lower G10 frame sides
121   static const Float_t fgkCclfT;                            // Thickness of the lower G10 frame front
122   static const Float_t fgkCcuT;                             // Thickness of the upper G10 frame
123   static const Float_t fgkCauT;                             // Thickness of the upper aluminum frame
124
125   static const Float_t fgkCroW;                             // Additional width of the readout chamber frames
126
127   static const Float_t fgkCpadW;                            // Difference of outer chamber width and pad plane width
128   static const Float_t fgkRpadW;                            // Difference of outer chamber width and pad plane width
129
130   static const Float_t fgkRaThick;                          // Thickness of the radiator
131   static const Float_t fgkMyThick;                          // Thickness of the mylar-layer
132   static const Float_t fgkXeThick;                          // Thickness of the gas volume
133   static const Float_t fgkDrThick;                          // Thickness of the drift region
134   static const Float_t fgkAmThick;                          // Thickness of the amplification region
135   static const Float_t fgkCuThick;                          // Thickness of the pad plane
136   static const Float_t fgkSuThick;                          // Thickness of the HEXCEL+G10 support structure
137   static const Float_t fgkFeThick;                          // Thickness of the FEE + signal lines
138   static const Float_t fgkCoThick;                          // Thickness of the PE of the cooling device
139   static const Float_t fgkWaThick;                          // Thickness of the cooling water
140
141   static const Float_t fgkRaZpos;                           // Position of the radiator
142   static const Float_t fgkMyZpos;                           // Position of the mylar-layer
143   static const Float_t fgkDrZpos;                           // Position of the drift region
144   static const Float_t fgkAmZpos;                           // Position of the amplification region
145   static const Float_t fgkCuZpos;                           // Position of the pad plane
146   static const Float_t fgkSuZpos;                           // Position of the HEXCEL+G10 support structure
147   static const Float_t fgkFeZpos;                           // Position of the FEE + signal lines
148   static const Float_t fgkCoZpos;                           // Position of the PE of the cooling device
149   static const Float_t fgkWaZpos;                           // Position of the colling water
150
151   Float_t              fCwidth[kNplan];                     // Outer widths of the chambers
152   Float_t              fClength[kNplan][kNcham];            // Outer lengths of the chambers
153   Float_t              fClengthPH[kNplan][kNcham];          // For sectors with holes for the PHOS
154   Float_t              fClengthRH[kNplan][kNcham];          // For sectors with holes for the RICH
155
156   Float_t              fRotA11[kNsect];                     // Matrix elements for the rotation
157   Float_t              fRotA12[kNsect];                     // Matrix elements for the rotation
158   Float_t              fRotA21[kNsect];                     // Matrix elements for the rotation
159   Float_t              fRotA22[kNsect];                     // Matrix elements for the rotation
160
161   Float_t              fRotB11[kNsect];                     // Matrix elements for the backward rotation
162   Float_t              fRotB12[kNsect];                     // Matrix elements for the backward rotation
163   Float_t              fRotB21[kNsect];                     // Matrix elements for the backward rotation
164   Float_t              fRotB22[kNsect];                     // Matrix elements for the backward rotation
165
166   ClassDef(AliTRDgeometry,6)                                // TRD geometry base class
167
168 };
169
170 #endif