Ion pump and bellows moved out by 15 cm to make space for forward
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALGeometry.h
1 #ifndef ALIEMCALGEOMETRY_H
2 #define ALIEMCALGEOMETRY_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 // Geometry class  for EMCAL : singleton
10 // EMCAL consists of a shell of Pb
11 //                  
12 //*-- Author: Yves Schutz (SUBATECH)
13
14 #include <assert.h> 
15
16 // --- ROOT system ---
17
18 class TObjArray ;  
19 class TVector3; 
20 class TMatrix ; 
21
22 // --- AliRoot header files ---
23
24 #include "AliGeometry.h"
25
26
27 class AliEMCALGeometry : public AliGeometry {
28
29 public: 
30
31   AliEMCALGeometry() {
32     // default ctor 
33     // must be kept public for root persistency purposes, but should never be called by the outside world
34   } ;  
35
36   AliEMCALGeometry(const AliEMCALGeometry & geom) {
37     // cpy ctor requested by Coding Convention but not yet needed
38     assert(0==1) ;
39   } 
40   
41   virtual ~AliEMCALGeometry(void) ; 
42   static AliEMCALGeometry * GetInstance(const Text_t* name, const Text_t* title="") ; 
43   static AliEMCALGeometry * GetInstance() ; 
44
45   AliEMCALGeometry & operator = (const AliEMCALGeometry  & rvalue) const {
46     // assignement operator requested by coding convention but not needed
47     assert(0==1) ;
48     return *(GetInstance()) ; 
49   }
50   virtual void GetGlobal(const AliRecPoint *, TVector3 &, TMatrix &) const {}
51   virtual void GetGlobal(const AliRecPoint *, TVector3 &) const {}
52   // General
53
54   Bool_t  IsInitialized(void) const { return fgInit ; }  
55                                                                        
56   // Return EMCA geometrical parameters
57
58   // geometry
59   const Float_t GetAirGap() const { return fAirGap ; }
60   const Float_t GetArm1PhiMin() const { return fArm1PhiMin ; }
61   const Float_t GetArm1PhiMax() const { return fArm1PhiMax ; }
62   const Float_t GetArm2PhiMin() const { return fArm2PhiMin ; }
63   const Float_t GetArm2PhiMax() const { return fArm2PhiMax ; }
64   const Float_t GetIPDistance()   const { return  fIPDistance  ; } 
65   const Float_t GetEnvelop(Int_t index) const { return fEnvelop[index] ; }  
66   const Float_t GetShellThickness() const { return fShellThickness ; }
67   const Float_t GetZLength() const { return fZLength ; } 
68   const Float_t GetGap2Active() const {return  fGap2Active ; }
69   // material 
70   const Float_t GetAmat()   const { return  fAmat ; }  
71   const Float_t GetZmat()   const { return  fZmat ; }   
72   const Float_t GetDmat()   const { return  fDmat ; }  
73   const Float_t GetRmat()   const { return  fRmat ; }  
74   const Float_t GetEmat()   const { return  fEmat ; }  
75   const Float_t GetLmat()   const { return  fEmat * fRmat ; }  
76
77 protected:
78
79   AliEMCALGeometry(const Text_t* name, const Text_t* title="") : AliGeometry(name, title) { 
80     // ctor only for internal usage (singleton)
81     Init() ; 
82   }
83   void Init(void) ;            // initializes the parameters of EMCAL 
84
85 private:
86
87   static AliEMCALGeometry * fgGeom ; // pointer to the unique instance of the singleton 
88   static Bool_t fgInit ;             // Tells if geometry has been succesfully set up 
89
90   // geometry
91   Float_t fAirGap ;                  // Distance between envelop and active material 
92   Float_t fArm1PhiMin ;              // Minimum phi angle covered by Arm 1 
93   Float_t fArm1PhiMax ;              // Maximum phi angle covered by Arm 1       
94   Float_t fArm2PhiMin ;              // Minimum phi angle covered by Arm 2        
95   Float_t fArm2PhiMax ;              // Maximum phi angle covered by Arm 2
96   // It is assumed that Arm1 and Arm2 have the same following parameters
97   Float_t fEnvelop[3] ;              // the GEANT TUB that contains the 2 arms
98   Float_t fIPDistance ;              // Distance of the inner surface to the interaction point
99   Float_t fShellThickness ;          // Total thickness in (x,y) direction
100   Float_t fZLength ;                 // Total length in z direction
101   Float_t fGap2Active ;              // Gap between the envelop and the active material
102
103   //material
104   Float_t fAmat ;  // average atomic weight of the active material
105   Float_t fZmat ;  // average atomic number of the active material 
106   Float_t fDmat ;  // average density of the active material
107   Float_t fRmat ;  // average radiation length of the active material
108   Float_t fEmat ;  // thickness of the active material in radiation length units
109  
110   ClassDef(AliEMCALGeometry,1)       // EMCAL geometry class 
111
112 } ;
113
114 #endif // AliEMCALGEOMETRY_H