Updated version.
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALGeometry.h
1 #ifndef ALIEMCALGEOMETRY_H
2 #define ALIEMCALGEOMETRY_H
3 /* Copyright(c) 1998-2004, 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 layers of scintillator, and lead.
11 //                  
12 //*-- Author: Sahal Yacoob (LBL / UCT)
13 //*--   and : Yves Schutz (Subatech)
14 //*--   and : Aleksei Pavlinov (WSU) - shashlyk staff
15 //*--   and : Gustavo Conesa: Add TRU mapping. TRU parameters still not fixed.
16
17 // --- ROOT system ---
18 #include <Riostream.h>
19 #include <TMath.h>
20 #include <TArrayD.h>
21 #include <TMatrixF.h>
22 class TVector3;
23
24 // --- AliRoot header files ---
25 #include "AliEMCALGeoUtils.h"
26 #include "AliEMCALEMCGeometry.h"
27 //class AliRecPoint;
28 //class AliEMCALRecPoint;
29
30 class AliEMCALGeometry : public AliEMCALGeoUtils {
31
32 public:
33
34   AliEMCALGeometry(); // default ctor only for internal usage (singleton)
35   AliEMCALGeometry(const AliEMCALGeometry& geom);
36   virtual ~AliEMCALGeometry(void); 
37
38   static AliEMCALGeometry * GetInstance(const Text_t* name,
39                                         const Text_t* title="") ; 
40   static AliEMCALGeometry * GetInstance();
41   AliEMCALGeometry & operator = (const AliEMCALGeometry  & /*rvalue*/) {
42     // assignement operator requested by coding convention but not needed
43     Fatal("operator =", "not implemented");
44     return *this;
45   };
46
47
48   //////////
49   // General
50   //
51   Bool_t  IsInitialized(void) const { return AliEMCALEMCGeometry::fgInit ; }
52   static const Char_t* GetDefaultGeometryName() {return AliEMCALEMCGeometry::fgkDefaultGeometryName;}
53
54   //////////////////////////
55   // Global geometry methods
56   //
57   using AliEMCALGeoUtils::GetGlobal;
58
59 //  virtual void GetGlobal(const AliRecPoint *rp, TVector3 & gpos, TMatrixF & /* gmat */) 
60 //    const {GetGlobal(rp,gpos); }
61 //  virtual void GetGlobalEMCAL(const AliEMCALRecPoint *rp, TVector3 &vglob) const;
62 //  virtual void GetGlobalEMCAL(const AliEMCALRecPoint *rp, TVector3 & gpos, TMatrixF & /* gmat */) 
63 //    const {GetGlobalEMCAL(rp,gpos); }
64
65   // Return EMC geometry parameters
66   AliEMCALEMCGeometry * GetEMCGeometry()      const {return fEMCGeometry ;}
67
68   //////////////////////////////////////
69   // Return EMCAL geometrical parameters
70   //
71   const Char_t*  GetNameOfEMCALEnvelope(void) const {return fEMCGeometry->GetNameOfEMCALEnvelope();}
72   Float_t  GetArm1PhiMin(void) const { return fEMCGeometry->GetArm1PhiMin(); }
73   Float_t  GetArm1PhiMax(void) const { return fEMCGeometry->GetArm1PhiMax(); }
74   Float_t  GetArm1EtaMin(void) const { return fEMCGeometry->GetArm1EtaMin();}
75   Float_t  GetArm1EtaMax(void) const { return fEMCGeometry->GetArm1EtaMax();}
76   Float_t  GetIPDistance(void) const { return fEMCGeometry->GetIPDistance();}   
77   Float_t  GetEnvelop(Int_t index) const { return fEMCGeometry->GetEnvelop(index); }  
78   Float_t  GetShellThickness(void) const { return fEMCGeometry->GetShellThickness(); }
79   Float_t  GetZLength(void) const { return fEMCGeometry->GetZLength(); } 
80   Int_t    GetNECLayers(void) const {return fEMCGeometry->GetNECLayers();}
81   Int_t    GetNZ(void) const {return fEMCGeometry->GetNZ();}
82   Int_t    GetNEta(void) const {return fEMCGeometry->GetNEta();}
83   Int_t    GetNPhi(void) const {return fEMCGeometry->GetNPhi();}
84   Float_t  GetECPbRadThick(void)const {return fEMCGeometry->GetECPbRadThick();}
85   Float_t  GetECScintThick(void) const {return fEMCGeometry->GetECScintThick();}
86   Float_t  GetSampling(void) const {return fEMCGeometry->GetSampling(); } 
87   Int_t    GetNumberOfSuperModules(void) const {return fEMCGeometry->GetNumberOfSuperModules();}
88   Float_t  GetfPhiGapForSuperModules(void) const {return fEMCGeometry->GetfPhiGapForSuperModules();}
89   Float_t  GetPhiModuleSize(void) const  {return fEMCGeometry->GetPhiModuleSize();}
90   Float_t  GetEtaModuleSize(void) const  {return fEMCGeometry->GetEtaModuleSize();}
91   Float_t  GetFrontSteelStrip(void) const {return fEMCGeometry->GetFrontSteelStrip();}
92   Float_t  GetLateralSteelStrip(void) const {return fEMCGeometry->GetLateralSteelStrip();}
93   Float_t  GetPassiveScintThick(void) const {return fEMCGeometry->GetPassiveScintThick();}
94   Float_t  GetPhiTileSize(void) const {return fEMCGeometry->GetPhiTileSize();}
95   Float_t  GetEtaTileSize(void) const {return fEMCGeometry->GetEtaTileSize();}
96   Int_t    GetNPhiSuperModule(void) const {return fEMCGeometry->GetNPhiSuperModule();}
97   Int_t    GetNPHIdiv(void) const {return fEMCGeometry->GetNPHIdiv();}
98   Int_t    GetNETAdiv(void) const {return fEMCGeometry->GetNETAdiv();}
99   Int_t    GetNCells(void)  const {return fEMCGeometry->GetNCells();}
100   Float_t  GetLongModuleSize(void) const {return fEMCGeometry->GetLongModuleSize();}
101   Float_t  GetTrd1Angle(void) const {return fEMCGeometry->GetTrd1Angle();}
102   Float_t  Get2Trd1Dx2(void)  const {return fEMCGeometry->Get2Trd1Dx2();}
103   // --
104   Int_t    GetNCellsInSupMod(void) const {return fEMCGeometry->GetNCellsInSupMod();}
105   Int_t    GetNCellsInModule(void)  const {return fEMCGeometry->GetNCellsInModule(); }
106   Int_t    GetKey110DEG(void)      const {return fEMCGeometry->GetKey110DEG();}
107   Int_t    GetILOSS(void) const {return fEMCGeometry->GetILOSS();}
108   Int_t    GetIHADR(void) const {return fEMCGeometry->GetIHADR();}
109   // For gamma(Jet) trigger simulations
110   Int_t    GetNTRU() const    {return fEMCGeometry->GetNTRU(); }  
111   Int_t    GetNTRUEta() const {return fEMCGeometry->GetNTRUEta(); }  
112   Int_t    GetNTRUPhi() const {return fEMCGeometry->GetNTRUPhi(); }
113   Int_t    GetNEtaSubOfTRU() const {return fEMCGeometry->GetNEtaSubOfTRU();}
114   Int_t    GetNModulesInTRU() const {return fEMCGeometry->GetNModulesInTRU(); }
115   Int_t    GetNModulesInTRUEta() const {return fEMCGeometry->GetNModulesInTRUEta(); }  
116   Int_t    GetNModulesInTRUPhi() const {return fEMCGeometry->GetNModulesInTRUPhi(); }  
117
118   // --
119   Float_t  GetDeltaEta(void) const {return fEMCGeometry->GetDeltaEta();}
120   Float_t  GetDeltaPhi(void) const {return fEMCGeometry->GetDeltaPhi();}
121   Int_t    GetNTowers(void) const {return fEMCGeometry->GetNTowers();}
122   //
123   Double_t GetPhiCenterOfSM(Int_t nsupmod) const {return fEMCGeometry->GetPhiCenterOfSM(nsupmod);}
124   Float_t *GetSuperModulesPars(void) const {return fEMCGeometry->GetSuperModulesPars();}
125   //
126   Bool_t   GetPhiBoundariesOfSM(Int_t nSupMod, Double_t &phiMin, Double_t &phiMax) const {return fEMCGeometry->GetPhiBoundariesOfSM(nSupMod, phiMin, phiMax);}
127   Bool_t   GetPhiBoundariesOfSMGap(Int_t nPhiSec, Double_t &phiMin, Double_t &phiMax) const {return fEMCGeometry->GetPhiBoundariesOfSMGap(nPhiSec, phiMin, phiMax);}
128   //
129   
130   //  Methods for AliEMCALRecPoint with taking into account energy of rec.point - Jul 30. 2007
131   using AliEMCALGeoUtils::RelPosCellInSModule;
132   Bool_t   RelPosCellInSModule(Int_t absId,Double_t distEff,Double_t &xr,Double_t &yr,
133                                                            Double_t & zr) const;
134         
135   //Not in use, comment for the moment
136   //Bool_t   RelPosCellInSModule(Int_t absId,Int_t maxAbsId,Double_t distEff,Double_t &xr,
137   //                   Double_t &yr,Double_t &zr) const;
138
139   ///////////////////////////////
140   //Geometry data member setters
141   //
142   void SetNZ(Int_t nz) { fEMCGeometry->SetNZ(nz);}
143   void SetNPhi(Int_t nphi) { fEMCGeometry->SetNPhi(nphi);}
144
145   void SetNTRUEta(Int_t ntru) { fEMCGeometry->SetNTRUEta(ntru);}
146   void SetNTRUPhi(Int_t ntru) { fEMCGeometry->SetNTRUPhi(ntru);}
147   void SetSampling(Float_t samp) { fEMCGeometry->SetSampling(samp);}
148   
149 /*   /////////////////// */
150 /*   // useful utilities */
151 /*   // */
152 /*   Float_t AngleFromEta(Float_t eta) const { // returns theta in radians for a given pseudorapidity */
153 /*     return 2.0*TMath::ATan(TMath::Exp(-eta)); */
154 /*   } */
155 /*   Float_t ZFromEtaR(Float_t r,Float_t eta) const { // returns z in for a given */
156 /*     // pseudorapidity and r=sqrt(x*x+y*y). */
157 /*     return r/TMath::Tan(AngleFromEta(eta)); */
158 /*   } */
159
160   //////////////////////////////////////////////////
161   // Obsolete methods to be thrown out when feasible
162   Float_t GetAlFrontThickness(void) const { return fEMCGeometry->GetAlFrontThickness();}
163   Float_t GetGap2Active(void) const {return  fEMCGeometry->GetGap2Active();}
164   Float_t GetSteelFrontThickness(void) const { return fEMCGeometry->GetSteelFrontThickness();}
165   Float_t GetTrd2AngleY(void) const {return fEMCGeometry->GetTrd2AngleY();}
166   Float_t Get2Trd2Dy2(void)  const {return fEMCGeometry->Get2Trd2Dy2();}
167   Float_t GetTubsR(void)     const {return fEMCGeometry->GetTubsR();}
168   Float_t GetTubsTurnAngle(void) const {return fEMCGeometry->GetTubsTurnAngle();}
169   Float_t GetIP2ECASection(void) const { return fEMCGeometry->GetIP2ECASection(); }   
170   //////////////////////////////////////////////////
171
172 protected:
173
174   // ctor only for internal usage (singleton)
175   AliEMCALGeometry(const Text_t* name, const Text_t* title);
176
177   void Init(void);                      // initializes the parameters of EMCAL
178   
179 private:
180
181   //Member data
182   static AliEMCALGeometry * fgGeom;     // pointer to the unique instance of the singleton
183   //  static Bool_t  fgInit;            // Tells if geometry has been succesfully set up.
184   static const Char_t* fgkDefaultGeometryName; // Default name of geometry
185
186   ///////////////////////////////////////////////////////////
187
188   ClassDef(AliEMCALGeometry, 15) // EMCAL geometry class 
189 };
190
191 #endif // AliEMCALGEOMETRY_H