]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDgeometry.h
BlockFilter component added; minor corrections
[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 #include "TObjArray.h"
17
18 class TGeoHMatrix;
19
20 class AliRunLoader;
21
22 class AliTRDpadPlane;
23
24 class AliTRDgeometry : public AliGeometry {
25
26  public:
27
28   enum { kNplan =   6
29        , kNcham =   5
30        , kNsect =  18
31        , kNdet  = 540 
32        , kNdets =  30 };
33
34   AliTRDgeometry();
35   AliTRDgeometry(const AliTRDgeometry &g);
36   virtual ~AliTRDgeometry();
37   AliTRDgeometry &operator=(const AliTRDgeometry &g);
38
39   virtual void     Init();
40   virtual void     CreateGeometry(Int_t *idtmed);
41   virtual Int_t    IsVersion()                                         { return 1;               }
42   virtual Bool_t   Impact(const TParticle* ) const                     { return kTRUE;           }
43   virtual Bool_t   IsHole(Int_t /*p*/, Int_t /*c*/, Int_t /*s*/) const { return kFALSE;          }
44
45   virtual Bool_t   RotateBack(Int_t det, Double_t *loc, Double_t *glb) const;
46
47           void     GroupChamber(Int_t iplan, Int_t icham, Int_t *idtmed);
48           void     CreateFrame(Int_t *idtmed);
49           void     CreateServices(Int_t *idtmed);
50
51           Bool_t   CreateClusterMatrixArray();  
52   TGeoHMatrix     *GetClusterMatrix(Int_t det)                         { return (TGeoHMatrix *) 
53                                                                            fClusterMatrixArray->At(det); }
54
55           void     SetSMstatus(Int_t sm, Char_t status)                { fSMstatus[sm] = status; }
56
57   static  Int_t    GetDetectorSec(Int_t p, Int_t c);
58   static  Int_t    GetDetector(Int_t p, Int_t c, Int_t s);
59   static  Int_t    GetPlane(Int_t d);
60   virtual Int_t    GetChamber(Int_t d) const;
61   virtual Int_t    GetSector(Int_t d) const;
62
63           void     CreatePadPlaneArray();
64   AliTRDpadPlane  *CreatePadPlane(Int_t p, Int_t c);
65   AliTRDpadPlane  *GetPadPlane(Int_t p, Int_t c);
66           Int_t    GetRowMax(Int_t p, Int_t c, Int_t /*s*/);
67           Int_t    GetColMax(Int_t p);
68           Double_t GetRow0(Int_t p, Int_t c, Int_t /*s*/);
69           Double_t GetCol0(Int_t p);
70
71   // Translation from MCM to Pad and vice versa (these functions are now in feeParam)
72   //virtual Int_t    GetPadRowFromMCM(Int_t irob, Int_t imcm) const;
73   //virtual Int_t    GetPadColFromADC(Int_t irob, Int_t imcm, Int_t iadc) const;
74   //virtual Int_t    GetMCMfromPad(Int_t irow, Int_t icol) const;
75   //virtual Int_t    GetROBfromPad(Int_t irow, Int_t icol) const;
76   //virtual Int_t    GetRobSide(Int_t irob) const;
77   //virtual Int_t    GetColSide(Int_t icol) const;
78
79   static Float_t   GetTime0(Int_t p)                                   { return fgkTime0[p];     }
80
81           Char_t   GetSMstatus(Int_t sm) const                         { return fSMstatus[sm];   }
82           Float_t  GetChamberWidth(Int_t p) const                      { return fCwidth[p];      }
83           Float_t  GetChamberLength(Int_t p, Int_t c) const            { return fClength[p][c];  }
84
85   virtual void     GetGlobal(const AliRecPoint*, TVector3&, TMatrixF& ) const { }; 
86   virtual void     GetGlobal(const AliRecPoint*, TVector3& ) const            { };
87
88   static  Double_t GetAlpha()                                          { return 2.0 
89                                                                            * 3.14159265358979324 
90                                                                            / fgkNsect;           } 
91
92   static  Int_t    Nsect()                                             { return fgkNsect;        }
93   static  Int_t    Nplan()                                             { return fgkNplan;        }
94   static  Int_t    Ncham()                                             { return fgkNcham;        }
95   static  Int_t    Ndet()                                              { return fgkNdet;         }
96
97   static  Float_t  Cheight()                                           { return fgkCH;           }
98   static  Float_t  Cspace()                                            { return fgkVspace;       }
99   static  Float_t  CraHght()                                           { return fgkCraH;         }
100   static  Float_t  CdrHght()                                           { return fgkCdrH;         }
101   static  Float_t  CamHght()                                           { return fgkCamH;         }
102   static  Float_t  CroHght()                                           { return fgkCroH;         }
103   static  Float_t  CroWid()                                            { return fgkCroW;         }
104   static  Float_t  MyThick()                                           { return fgkMyThick;      }
105   static  Float_t  DrThick()                                           { return fgkDrThick;      }
106   static  Float_t  AmThick()                                           { return fgkAmThick;      }
107   static  Float_t  DrZpos()                                            { return fgkDrZpos;       }
108   static  Float_t  RpadW()                                             { return fgkRpadW;        }
109   static  Float_t  CpadW()                                             { return fgkCpadW;        }
110
111   static  Float_t  Cwidcha()                                           { return (fgkSwidth2 - fgkSwidth1) 
112                                                                                 / fgkSheight 
113                                                                                 * (fgkCH + fgkVspace);      }
114
115   static  Int_t    MCMmax()                                            { return fgkMCMmax;       }
116   static  Int_t    MCMrow()                                            { return fgkMCMrow;       }
117   static  Int_t    ROBmaxC0()                                          { return fgkROBmaxC0;     }
118   static  Int_t    ROBmaxC1()                                          { return fgkROBmaxC1;     }
119   static  Int_t    ADCmax()                                            { return fgkADCmax;       }
120   static  Int_t    TBmax()                                             { return fgkTBmax;        }            
121   static  Int_t    Padmax()                                            { return fgkPadmax;       }
122   static  Int_t    Colmax()                                            { return fgkColmax;       }
123   static  Int_t    RowmaxC0()                                          { return fgkRowmaxC0;     }
124   static  Int_t    RowmaxC1()                                          { return fgkRowmaxC1;     }
125
126  protected:
127
128   static const Int_t    fgkNsect;                            //  Number of sectors in the full detector (18)
129   static const Int_t    fgkNplan;                            //  Number of planes of the TRD (6)
130   static const Int_t    fgkNcham;                            //  Number of chambers in z-direction (5)
131   static const Int_t    fgkNdet;                             //  Total number of detectors (18 * 6 * 5 = 540)
132
133   static const Float_t  fgkTlength;                          //  Length of the TRD-volume in spaceframe (BTRD)
134
135   static const Float_t  fgkSheight;                          //  Height of the supermodule
136   static const Float_t  fgkSwidth1;                          //  Lower width of the supermodule
137   static const Float_t  fgkSwidth2;                          //  Upper width of the supermodule
138   static const Float_t  fgkSlength;                          //  Length of the supermodule
139
140   static const Float_t  fgkFlength;                          //  Length of the service space in front of a supermodule
141
142   static const Float_t  fgkSMpltT;                           //  Thickness of the super module side plates
143
144   static const Float_t  fgkCraH;                             //  Height of the radiator part of the chambers
145   static const Float_t  fgkCdrH;                             //  Height of the drift region of the chambers
146   static const Float_t  fgkCamH;                             //  Height of the amplification region of the chambers
147   static const Float_t  fgkCroH;                             //  Height of the readout of the chambers
148   static const Float_t  fgkCH;                               //  Total height of the chambers
149
150   static const Float_t  fgkVspace;                           //  Vertical spacing of the chambers
151   static const Float_t  fgkHspace;                           //  Horizontal spacing of the chambers
152   static const Float_t  fgkVrocsm;                           //  Radial distance of the first ROC to the outer SM plates
153   static const Float_t  fgkCalT;                             //  Thickness of the lower aluminum frame
154   static const Float_t  fgkCalW;                             //  Width of additional aluminum on lower frame
155   static const Float_t  fgkCclsT;                            //  Thickness of the lower Wacosit frame sides
156   static const Float_t  fgkCclfT;                            //  Thickness of the lower Wacosit frame front
157   static const Float_t  fgkCglT;                             //  Thichness of the glue around the radiator
158   static const Float_t  fgkCcuT;                             //  Thickness of the upper Wacosit frame
159   static const Float_t  fgkCauT;                             //  Thickness of the aluminum frame of the back panel
160
161   static const Float_t  fgkCroW;                             //  Additional width of the readout chamber frames
162
163   static const Float_t  fgkCpadW;                            //  Difference of outer chamber width and pad plane width
164   static const Float_t  fgkRpadW;                            //  Difference of outer chamber width and pad plane width
165
166   static const Float_t  fgkMyThick;                          //  Thickness of the mylar-layer
167   static const Float_t  fgkRaThick;                          //  Thickness of the radiator
168   static const Float_t  fgkXeThick;                          //  Thickness of the gas volume
169   static const Float_t  fgkDrThick;                          //  Thickness of the drift region
170   static const Float_t  fgkAmThick;                          //  Thickness of the amplification region
171   static const Float_t  fgkWrThick;                          //  Thickness of the wire planes
172   static const Float_t  fgkCuThick;                          //  Thickness of the pad plane
173   static const Float_t  fgkGlThick;                          //  Thickness of the glue layer
174   static const Float_t  fgkSuThick;                          //  Thickness of the NOMEX support structure
175   static const Float_t  fgkRpThick;                          //  Thickness of the PCB readout boards
176   static const Float_t  fgkRcThick;                          //  Thickness of the PCB copper layers
177   static const Float_t  fgkRoThick;                          //  Thickness of all other ROB componentes (caps, etc.)
178
179   static const Float_t  fgkRaZpos;                           //  Position of the radiator
180   static const Float_t  fgkDrZpos;                           //  Position of the drift region
181   static const Float_t  fgkAmZpos;                           //  Position of the amplification region
182   static const Float_t  fgkWrZpos;                           //  Position of the wire planes
183   static const Float_t  fgkCuZpos;                           //  Position of the pad plane
184   static const Float_t  fgkGlZpos;                           //  Position of the glue layer
185   static const Float_t  fgkSuZpos;                           //  Position of the HEXCEL+G10 support structure
186   static const Float_t  fgkRpZpos;                           //  Position of the PCB readout boards
187   static const Float_t  fgkRcZpos;                           //  Position of the PCB copper layers
188   static const Float_t  fgkRoZpos;                           //  Position of all other ROB componentes (caps, etc.)
189
190   static const Int_t    fgkMCMmax;                           //  Maximum number of MCMs per ROB
191   static const Int_t    fgkMCMrow;                           //  Maximum number of MCMs per ROB Row
192   static const Int_t    fgkROBmaxC0;                         //  Maximum number of ROBs per C0 chamber
193   static const Int_t    fgkROBmaxC1;                         //  Maximum number of ROBs per C1 chamber
194   static const Int_t    fgkADCmax;                           //  Maximum number of ADC channels per MCM
195   static const Int_t    fgkTBmax;                            //  Maximum number of Time bins
196   static const Int_t    fgkPadmax;                           //  Maximum number of pads per MCM
197   static const Int_t    fgkColmax;                           //  Maximum number of pads per padplane row
198   static const Int_t    fgkRowmaxC0;                         //  Maximum number of Rows per C0 chamber
199   static const Int_t    fgkRowmaxC1;                         //  Maximum number of Rows per C1 chamber
200
201   Char_t                fSMstatus[kNsect];                   //  Super module status byte
202
203   Float_t               fCwidth[kNplan];                     //  Outer widths of the chambers
204   Float_t               fClength[kNplan][kNcham];            //  Outer lengths of the chambers
205
206   Float_t               fRotB11[kNsect];                     //  Matrix elements for the backward rotation
207   Float_t               fRotB12[kNsect];                     //  Matrix elements for the backward rotation
208   Float_t               fRotB21[kNsect];                     //  Matrix elements for the backward rotation
209   Float_t               fRotB22[kNsect];                     //  Matrix elements for the backward rotation
210
211   static const Double_t fgkTime0Base;                        //  Base value for calculation of Time-position of pad 0
212   static const Float_t  fgkTime0[kNplan];                    //  Time-position of pad 0
213   
214   Float_t               fChamberUAorig[3*kNdets][3];         //  Volumes origin in
215   Float_t               fChamberUDorig[3*kNdets][3];         //  the chamber
216   Float_t               fChamberUForig[3*kNdets][3];         //  [3] = x, y, z
217   Float_t               fChamberUUorig[3*kNdets][3];         //
218
219   Float_t               fChamberUAboxd[3*kNdets][3];         //  Volumes box
220   Float_t               fChamberUDboxd[3*kNdets][3];         //  dimensions (half)
221   Float_t               fChamberUFboxd[3*kNdets][3];         //  [3] = x, y, z
222   Float_t               fChamberUUboxd[3*kNdets][3];         // 
223
224   TObjArray            *fClusterMatrixArray;                 //! Transformation matrices loc. cluster to tracking cs
225   TObjArray            *fPadPlaneArray;                      //! Array of pad plane objects
226
227   ClassDef(AliTRDgeometry,16)                                //  TRD geometry class
228
229 };
230
231 #endif