changing AliEMCALGeoUtils --> AliEMCALGeomery
[u/mrichter/AliRoot.git] / HLT / EMCAL / AliHLTEMCALGeometry.cxx
index 1d8c7ba..0863b6d 100644 (file)
@@ -26,16 +26,8 @@ TGeoManager *gGeoManager = 0;
 
 AliHLTEMCALGeometry::AliHLTEMCALGeometry() :
        AliHLTCaloGeometry ("EMCAL"),
-       fGeo(0),
-       fEMCALGeometry(0)
+       fGeo(0),fReco(0)
 {
-
-  //fGeo = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
-       //fGeo = new AliEMCALGeometry("EMCAL_COMPLETE","EMCAL");
-       //fGeo =  AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
-       //TGeoManager::Import("/home/fedro/work/AliRoot/test/QA/geometry.root");
-       //fGeo = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
-
   GetGeometryFromCDB();
 }
 
@@ -54,117 +46,26 @@ AliHLTEMCALGeometry::~AliHLTEMCALGeometry()
 void 
 AliHLTEMCALGeometry::GetGlobalCoordinates(AliHLTCaloRecPointDataStruct &recPoint, AliHLTCaloGlobalCoordinate &globalCoord)
 {
-  Int_t istrip = 0;
-  Float_t z0 = 0;
-  Float_t zb = 0;
-  Float_t z_is = 0;
-  Float_t d = 0;
-  Float_t x,y,z; // return variables in terry's RF
-  Float_t dz = fCaloConstants->GetMINCELLSTEPETA(); // base cell width in eta
-  Float_t dx = fCaloConstants->GetCELLSTEPPHI(); // base cell width in phi
-  
-  // parameters for shower depth calculation
-  Float_t X0 = fCaloConstants->GetRADLENGTH();
-  Float_t Ecr = fCaloConstants->GetCRITICENERGY();
-  Float_t Cj;
-  Float_t teta0 = fCaloConstants->GetCELLANGLE(); //tapering angle (deg)
-  Float_t teta1; //working angle
-  Float_t L = fCaloConstants->GetCELLHEIGHT();
-  // converting to MEV
-  Float_t E = recPoint.fAmp * 1000;
-  //TVector3 v1;
-  Double_t glob[3] ={0,0,0};
-  Double_t loc[3] = {0,0,0};
-  
-  if (recPoint.fZ >= 47.51 || recPoint.fZ< -0.51) {
-    Logging(kHLTLogError, "HLT", "EMCAL", "AliHLTEMCALGeometry::GetGlobalCoordinates: invalid Z: %f from recpoint ", recPoint.fZ);
-    return;
-  }
-  
-  if (recPoint.fX >= 23.51 || recPoint.fX< -0.51) {
-    Logging(kHLTLogError, "HLT", "EMCAL", "AliHLTEMCALGeometry::GetGlobalCoordinates: invalid X: % from recpoint ", recPoint.fX);
-    return;
-  }
-  
-  
-  switch ( recPoint.fParticle )
-    {
-    case 0:
-      Cj = - fCaloConstants->GetCJ(); // photon
-      d = X0 * TMath::Log( E / Ecr + Cj);
-      break;
-      
-    case 1:
-      Cj = + fCaloConstants->GetCJ(); // electron
-      d = X0 * TMath::Log( E / Ecr + Cj);
-      break;
-      
-    case 2:
-      // hadron
-      d = 0.5 * L;
-      break;
-                 
-    default:
-      Cj = - fCaloConstants->GetCJ(); // defaulting to photon
-      d = X0 * TMath::Log( E / Ecr + Cj);
-    }
-  
-  istrip = int ((recPoint.fZ + 0.5 ) / 2);
-  
-  // module angle
-  teta1 = TMath::DegToRad() * istrip * teta0;
-
-  // calculation of module corner along z
-  // as a function of strip
-
-  for (Int_t is=0; is<= istrip; is++) {
-
-    teta1 = TMath::DegToRad() * is * teta0;
-
-    z_is = z_is + 2*dz*(TMath::Sin(teta1)*TMath::Tan(teta1) + TMath::Cos(teta1));
-
-  }
-
-  z0 = dz * (recPoint.fZ - 2*istrip + 0.5);
-  zb = (2*dz-z0-d*TMath::Tan(teta1))*TMath::Cos(teta1);
-
-  z = z_is - zb*TMath::Cos(teta1);
-
-  //      cout << "----> istrip: " << istrip << endl;
-  //      cout << "----> z0: "<< z0 << endl;
-  //      cout << "----> zb: "<< zb << endl;
-  //      cout << "----> corner z: "<< z_is << endl;
-
-  //      cout << "----> teta1: "<< TMath::RadToDeg()*teta1 << endl;
-
-  y = d/TMath::Cos(teta1) + zb*TMath::Sin(teta1);
 
-  x = (recPoint.fX + 0.5)*dx;
-
-  // cout << "x: " << x << " y: "<< y << " z " << z << endl;
-
-  // check coordinate origin
-  loc[0] = x;
-  loc[1] = y;
-  loc[2] = z;
-
-  if(!fGeo)
-    {
-      Logging(kHLTLogError, "HLT", "EMCAL", "AliHLTEMCALGeometry::GetGlobalCoordinates: no geometry initialised");
-      return;
-    }
-
-  ConvertRecPointCoordinates(loc[1], loc[2], loc[3]);
-
-  fGeo->GetGlobal(loc, glob, recPoint.fModule);
+  Float_t fDepth;
+  Float_t *fRot = fReco->GetMisalRotShiftArray();
+  Float_t *fTrans = fReco->GetMisalTransShiftArray();
+  Float_t glob[] = {0.,0.,0.};
 
+  //assume photo for the moment
+  fDepth = fReco->GetDepth(recPoint.fAmp,AliEMCALRecoUtils::kPhoton,recPoint.fModule);
+  
+  fGeo->RecalculateTowerPosition(recPoint.fX, recPoint.fZ,recPoint.fModule, fDepth, fTrans, fRot, glob);
+  
   globalCoord.fX = glob[0];
   globalCoord.fY = glob[1];
   globalCoord.fZ = glob[2];
+  
+
 }
  
 void 
-AliHLTEMCALGeometry::GetCellAbsId(UInt_t module, UInt_t y, UInt_t z, Int_t& AbsId)
+AliHLTEMCALGeometry::GetCellAbsId(UInt_t module, UInt_t x, UInt_t z, Int_t& AbsId)
 {
 
   if(!fGeo)
@@ -173,21 +74,10 @@ AliHLTEMCALGeometry::GetCellAbsId(UInt_t module, UInt_t y, UInt_t z, Int_t& AbsI
       return;
 
     }
-       
-  AbsId = fGeo->GetAbsCellIdFromCellIndexes(module, y, z);
-       
-}
-
-void AliHLTEMCALGeometry::ConvertRecPointCoordinates(Double_t &x, Double_t &y, Double_t &z) const
-{
-  Double_t DX = 13.869008;
-  Double_t DY = 72.559998;
-  Double_t DZ = 175.00000;
+       AbsId = fGeo->GetAbsCellIdFromCellIndexes(module, (Int_t) x, (Int_t) z);
 
-  x = y - DX;  //fixme
-  y = -x + DY; //fixme
-  z = z - DZ;  //fixme
 
+       
 }
 
 
@@ -204,24 +94,39 @@ AliHLTEMCALGeometry::GetGeometryFromCDB()
       AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(path/*,GetRunNo()*/);
       if (pEntry)
        {
-         if(!fEMCALGeometry)
+         if(!fGeo)
            {
-             delete fEMCALGeometry;
-             fEMCALGeometry = 0;
+             delete fGeo;
+             fGeo = 0;
            }
 
          gGeoManager = (TGeoManager*) pEntry->GetObject();
 
          if(gGeoManager)
            {
-             fGeo = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
-             //fClusterAnalyserPtr->SetGeometry(fEMCALGeometry);
+             fGeo = AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1");
+             //fGeo = new AliEMCALGeoUtils("EMCAL_COMPLETE","EMCAL");
+             fReco = new AliEMCALRecoUtils;
+             // FIXME
+             // need to be parametrized
+             // misalignment corrections to be put into OCDB
+
+             fReco->SetMisalTransShift(0,1.08); 
+             fReco->SetMisalTransShift(1,8.35); 
+             fReco->SetMisalTransShift(2,1.12); //sector 0
+             fReco->SetMisalRotShift(3,-8.05); 
+             fReco->SetMisalRotShift(4,8.05); 
+             fReco->SetMisalTransShift(3,-0.42); 
+             fReco->SetMisalTransShift(5,1.55);//sector 1
+             
            }
 
        }
       else
        {
-         //HLTError("can not fetch object \"%s\" from OCDB", path);
+         //HLTError("can not fetch object \"%s\" from OCDB", path);
+         Logging(kHLTLogError, "HLT", "EMCAL", "can not fetch object from OCDB");
+
        }
     }
   return 0;