Refactoring: rempved the usage of AliHLTEMCALConstant
[u/mrichter/AliRoot.git] / HLT / EMCAL / AliHLTEMCALGeometry.cxx
1 /**************************************************************************
2  * This file is property of and copyright by the Experimental Nuclear     *
3  * Physics Group, Dep. of Physics                                         *
4  * University of Oslo, Norway, 2007                                       *
5  *                                                                        *
6  * Author: federico ronchetti         for the ALICE HLT Project.*
7  *                                                                        *
8  * Permission to use, copy, modify and distribute this software and its   *
9  * documentation strictly for non-commercial purposes is hereby granted   *
10  * without fee, provided that the above copyright notice appears in all   *
11  * copies and that both the copyright notice and this permission notice   *
12  * appear in the supporting documentation. The authors make no claims     *
13  * about the suitability of this software for any purpose. It is          *
14  * provided "as is" without express or implied warranty.                  *
15  **************************************************************************/
16
17 #include "AliHLTEMCALGeometry.h"
18 #include "AliHLTEMCALConstants.h"
19 // #include "AliHLTEMCALConstant.h"
20 #include "assert.h"
21 #include "AliHLTCaloConstantsHandler.h"
22 #include "AliHLTEMCALSharedMemoryInterface.h" 
23 #include "TVector3.h"
24
25 // using namespace EmcalHLTConst;
26
27 ClassImp(AliHLTEMCALGeometry);
28 TGeoManager *gGeoManager = 0;
29
30 AliHLTEMCALGeometry::AliHLTEMCALGeometry() :
31         AliHLTCaloGeometry ("EMCAL"),
32         fShmPtr(0),
33         fGeo(0),
34         fEMCALGeometry(0)
35 {
36         //fGeo = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
37         //fGeo = new AliEMCALGeometry("EMCAL_COMPLETE","EMCAL");
38         //fGeo =  AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
39         //TGeoManager::Import("/home/fedro/work/AliRoot/test/QA/geometry.root");
40         //fGeo = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
41         fShmPtr = new AliHLTEMCALSharedMemoryInterface();
42         GetGeometryFromCDB();
43 }
44
45 Int_t AliHLTEMCALGeometry::InitialiseGeometry()
46 {
47    
48    return GetGeometryFromCDB();
49 }
50
51
52 AliHLTEMCALGeometry::~AliHLTEMCALGeometry()
53 {
54
55 }
56   
57 void 
58 AliHLTEMCALGeometry::GetGlobalCoordinates(AliHLTCaloRecPointDataStruct &recPoint, AliHLTCaloGlobalCoordinate &globalCoord)
59 {
60   Int_t istrip = 0;
61   Float_t z0 = 0;
62   Float_t zb = 0;
63   Float_t z_is = 0;
64   Float_t d = 0;
65   Float_t x,y,z; // return variables in terry's RF
66   Float_t dz = fCaloConstants->GetMINCELLSTEPETA(); // base cell width in eta
67   Float_t dx = fCaloConstants->GetCELLSTEPPHI(); // base cell width in phi
68   
69   // parameters for shower depth calculation
70   Float_t X0 = fCaloConstants->GetRADLENGTH();
71   Float_t Ecr = fCaloConstants->GetCRITICENERGY();
72   Float_t Cj;
73   Float_t teta0 = fCaloConstants->GetCELLANGLE(); //tapering angle (deg)
74   Float_t teta1; //working angle
75   Float_t L = fCaloConstants->GetCELLHEIGHT();
76   // converting to MEV
77   Float_t E = recPoint.fAmp * 1000;
78   //TVector3 v1;
79   Double_t glob[3] ={0,0,0};
80   Double_t loc[3] = {0,0,0};
81   
82   if (recPoint.fZ >= 47.51 || recPoint.fZ< -0.51) {
83     Logging(kHLTLogError, "HLT", "EMCAL", "AliHLTEMCALGeometry::GetGlobalCoordinates: invalid Z: %f from recpoint ", recPoint.fZ);
84     return;
85   }
86   
87   if (recPoint.fX >= 23.51 || recPoint.fX< -0.51) {
88     Logging(kHLTLogError, "HLT", "EMCAL", "AliHLTEMCALGeometry::GetGlobalCoordinates: invalid X: % from recpoint ", recPoint.fX);
89     return;
90   }
91   
92   
93   switch ( recPoint.fParticle )
94     {
95     case 0:
96       Cj = - fCaloConstants->GetCJ(); // photon
97       d = X0 * TMath::Log( E / Ecr + Cj);
98       break;
99       
100     case 1:
101       Cj = + fCaloConstants->GetCJ(); // electron
102       d = X0 * TMath::Log( E / Ecr + Cj);
103       break;
104       
105     case 2:
106       // hadron
107       d = 0.5 * L;
108       break;
109                   
110     default:
111       Cj = - fCaloConstants->GetCJ(); // defaulting to photon
112       d = X0 * TMath::Log( E / Ecr + Cj);
113     }
114   
115   istrip = int ((recPoint.fZ + 0.5 ) / 2);
116   
117   // module angle
118   teta1 = TMath::DegToRad() * istrip * teta0;
119
120   // calculation of module corner along z
121   // as a function of strip
122
123   for (Int_t is=0; is<= istrip; is++) {
124
125     teta1 = TMath::DegToRad() * is * teta0;
126
127     z_is = z_is + 2*dz*(TMath::Sin(teta1)*TMath::Tan(teta1) + TMath::Cos(teta1));
128
129   }
130
131   z0 = dz * (recPoint.fZ - 2*istrip + 0.5);
132   zb = (2*dz-z0-d*TMath::Tan(teta1))*TMath::Cos(teta1);
133
134   z = z_is - zb*TMath::Cos(teta1);
135
136   //       cout << "----> istrip: " << istrip << endl;
137   //       cout << "----> z0: "<< z0 << endl;
138   //       cout << "----> zb: "<< zb << endl;
139   //       cout << "----> corner z: "<< z_is << endl;
140
141   //       cout << "----> teta1: "<< TMath::RadToDeg()*teta1 << endl;
142
143   y = d/TMath::Cos(teta1) + zb*TMath::Sin(teta1);
144
145   x = (recPoint.fX + 0.5)*dx;
146
147   // cout << "x: " << x << " y: "<< y << " z " << z << endl;
148
149   // check coordinate origin
150   loc[0] = x;
151   loc[1] = y;
152   loc[2] = z;
153
154   if(!fGeo)
155     {
156       Logging(kHLTLogError, "HLT", "EMCAL", "AliHLTEMCALGeometry::GetGlobalCoordinates: no geometry initialised");
157       return;
158     }
159
160   ConvertRecPointCoordinates(loc[1], loc[2], loc[3]);
161
162   fGeo->GetGlobal(loc, glob, recPoint.fModule);
163
164   globalCoord.fX = glob[0];
165   globalCoord.fY = glob[1];
166   globalCoord.fZ = glob[2];
167 }
168  
169 void 
170 AliHLTEMCALGeometry::GetCellAbsId(UInt_t module, UInt_t y, UInt_t z, Int_t& AbsId)
171 {
172
173   if(!fGeo)
174     {
175       Logging(kHLTLogError, "HLT", "EMCAL", "AliHLTEMCALGeometry::GetCellAbsId: no geometry initialised");
176       return;
177
178     }
179         
180   AbsId = fGeo->GetAbsCellIdFromCellIndexes(module, y, z);
181         
182 }
183
184 void AliHLTEMCALGeometry::ConvertRecPointCoordinates(Double_t &x, Double_t &y, Double_t &z) const
185 {
186   Double_t DX = 13.869008;
187   Double_t DY = 72.559998;
188   Double_t DZ = 175.00000;
189
190   x = y - DX;  //fixme
191   y = -x + DY; //fixme
192   z = z - DZ;  //fixme
193
194 }
195
196
197 int
198 AliHLTEMCALGeometry::GetGeometryFromCDB()
199 {
200
201   // AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
202
203   AliCDBPath path("GRP","Geometry","Data");
204   if(path.GetPath())
205     {
206       //      HLTInfo("configure from entry %s", path.GetPath());
207       AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(path/*,GetRunNo()*/);
208       if (pEntry)
209         {
210           if(!fEMCALGeometry)
211             {
212               delete fEMCALGeometry;
213               fEMCALGeometry = 0;
214             }
215
216           gGeoManager = (TGeoManager*) pEntry->GetObject();
217
218           if(gGeoManager)
219             {
220               fGeo = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
221               //fClusterAnalyserPtr->SetGeometry(fEMCALGeometry);
222             }
223
224         }
225       else
226         {
227           //HLTError("can not fetch object \"%s\" from OCDB", path);
228         }
229     }
230   return 0;
231 }