787ef4c86c18172f82ef762ce7879b00faf3fa96
[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 : Alexei 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   Float_t  GetTrd1AlFrontThick() const {return fEMCGeometry->GetTrd1AlFrontThick();}
104   Float_t  GetTrd1BondPaperThick() const {return fEMCGeometry->GetTrd1BondPaperThick();}
105    // --
106   Int_t    GetNCellsInSupMod(void) const {return fEMCGeometry->GetNCellsInSupMod();}
107   Int_t    GetNCellsInModule(void)  const {return fEMCGeometry->GetNCellsInModule(); }
108   Int_t    GetKey110DEG(void)      const {return fEMCGeometry->GetKey110DEG();}
109   Int_t    GetILOSS(void) const {return fEMCGeometry->GetILOSS();}
110   Int_t    GetIHADR(void) const {return fEMCGeometry->GetIHADR();}
111   // For gamma(Jet) trigger simulations
112   Int_t    GetNTRU() const    {return fEMCGeometry->GetNTRU(); }  
113   Int_t    GetNTRUEta() const {return fEMCGeometry->GetNTRUEta(); }  
114   Int_t    GetNTRUPhi() const {return fEMCGeometry->GetNTRUPhi(); }
115   Int_t    GetNEtaSubOfTRU() const {return fEMCGeometry->GetNEtaSubOfTRU();}
116   Int_t    GetNModulesInTRU() const {return fEMCGeometry->GetNModulesInTRU(); }
117   Int_t    GetNModulesInTRUEta() const {return fEMCGeometry->GetNModulesInTRUEta(); }  
118   Int_t    GetNModulesInTRUPhi() const {return fEMCGeometry->GetNModulesInTRUPhi(); }  
119
120   // --
121   Float_t  GetDeltaEta(void) const {return fEMCGeometry->GetDeltaEta();}
122   Float_t  GetDeltaPhi(void) const {return fEMCGeometry->GetDeltaPhi();}
123   Int_t    GetNTowers(void) const {return fEMCGeometry->GetNTowers();}
124   //
125   Double_t GetPhiCenterOfSM(Int_t nsupmod) const {return fEMCGeometry->GetPhiCenterOfSM(nsupmod);}
126   Float_t *GetSuperModulesPars(void) const {return fEMCGeometry->GetSuperModulesPars();}
127   //
128   Bool_t   GetPhiBoundariesOfSM(Int_t nSupMod, Double_t &phiMin, Double_t &phiMax) const {return fEMCGeometry->GetPhiBoundariesOfSM(nSupMod, phiMin, phiMax);}
129   Bool_t   GetPhiBoundariesOfSMGap(Int_t nPhiSec, Double_t &phiMin, Double_t &phiMax) const {return fEMCGeometry->GetPhiBoundariesOfSMGap(nPhiSec, phiMin, phiMax);}
130   //
131   
132   //  Methods for AliEMCALRecPoint with taking into account energy of rec.point - Jul 30. 2007
133   using AliEMCALGeoUtils::RelPosCellInSModule;
134   Bool_t   RelPosCellInSModule(Int_t absId,Double_t distEff,Double_t &xr,Double_t &yr,
135                                                            Double_t & zr) const;
136         
137   //Not in use, comment for the moment
138   //Bool_t   RelPosCellInSModule(Int_t absId,Int_t maxAbsId,Double_t distEff,Double_t &xr,
139   //                   Double_t &yr,Double_t &zr) const;
140
141   ///////////////////////////////
142   //Geometry data member setters
143   //
144   void SetNZ(Int_t nz) { fEMCGeometry->SetNZ(nz);}
145   void SetNPhi(Int_t nphi) { fEMCGeometry->SetNPhi(nphi);}
146
147   void SetNTRUEta(Int_t ntru) { fEMCGeometry->SetNTRUEta(ntru);}
148   void SetNTRUPhi(Int_t ntru) { fEMCGeometry->SetNTRUPhi(ntru);}
149   void SetSampling(Float_t samp) { fEMCGeometry->SetSampling(samp);}
150
151   void PrintGeometry() {fEMCGeometry->PrintGeometry();}  //*MENU*  
152
153   //////////////////////////////////////////////////
154   // Obsolete methods to be thrown out when feasible
155   Float_t GetGap2Active(void) const {return  fEMCGeometry->GetGap2Active();}
156   Float_t GetSteelFrontThickness(void) const { return fEMCGeometry->GetSteelFrontThickness();}
157   Float_t GetTrd2AngleY(void) const {return fEMCGeometry->GetTrd2AngleY();}
158   Float_t Get2Trd2Dy2(void)  const {return fEMCGeometry->Get2Trd2Dy2();}
159   Float_t GetTubsR(void)     const {return fEMCGeometry->GetTubsR();}
160   Float_t GetTubsTurnAngle(void) const {return fEMCGeometry->GetTubsTurnAngle();}
161   //Float_t GetAlFrontThickness(void) const { return fEMCGeometry->GetAlFrontThickness();}
162   //  Float_t GetIP2ECASection(void) const { return fEMCGeometry->GetIP2ECASection(); }   
163   //////////////////////////////////////////////////
164
165 protected:
166
167   // ctor only for internal usage (singleton)
168   AliEMCALGeometry(const Text_t* name, const Text_t* title);
169
170   void Init(void);                      // initializes the parameters of EMCAL
171   
172 private:
173
174   //Member data
175   static AliEMCALGeometry * fgGeom;     // pointer to the unique instance of the singleton
176   //  static Bool_t  fgInit;            // Tells if geometry has been succesfully set up.
177   static const Char_t* fgkDefaultGeometryName; // Default name of geometry
178
179   ///////////////////////////////////////////////////////////
180
181   ClassDef(AliEMCALGeometry, 15) // EMCAL geometry class 
182 };
183
184 #endif // AliEMCALGEOMETRY_H