Geometry bug fixes
authorkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 18 Apr 2007 09:34:05 +0000 (09:34 +0000)
committerkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 18 Apr 2007 09:34:05 +0000 (09:34 +0000)
PHOS/AliPHOSGeometry.cxx
PHOS/AliPHOSPIDv1.cxx

index e423919..32b883a 100644 (file)
@@ -318,7 +318,7 @@ void AliPHOSGeometry::ImpactOnEmc(Double_t * vtx, Double_t theta, Double_t phi,
   // calculates the impact coordinates on PHOS of a neutral particle  
   // emitted in the vertex vtx[3] with direction theta and phi in the ALICE global coordinate system
   TVector3 p(TMath::Sin(theta)*TMath::Cos(phi),TMath::Sin(theta)*TMath::Sin(phi),TMath::Cos(theta)) ;
-  TVector3 v(vtx[0],vtx[1],vtx[2]) ;
+  TVector3 v(vtx[0],vtx[1],-vtx[2]) ;
 
   //calculate offset to crystal surface
   Float_t * inthermo = fGeometryEMCA->GetInnerThermoHalfSize() ;
@@ -688,7 +688,7 @@ void AliPHOSGeometry::Local2Global(Int_t mod, Float_t x, Float_t z,
   Float_t * pin = fGeometryEMCA->GetAPDHalfSize() ;
   Float_t * preamp = fGeometryEMCA->GetPreampHalfSize() ;
   Float_t dy=-inthermo[1]+strip[1]+splate[1]+crystal[1]-fGeometryEMCA->GetAirGapLed()/2.+pin[1]+preamp[1] ;
-  Double_t posL[3]={x,dy,z} ;
+  Double_t posL[3]={x,-dy,z} ;
   Double_t posG[3] ;
   TGeoHMatrix *mPHOS = gGeoManager->GetCurrentMatrix();
   if (mPHOS) mPHOS->LocalToMaster(posL,posG);
index 8ca5f67..79a668e 100644 (file)
@@ -18,6 +18,9 @@
 /* History of cvs commits:
  *
  * $Log$
+ * Revision 1.108  2007/04/16 09:03:37  kharlov
+ * Incedent angle correction fixed
+ *
  * Revision 1.107  2007/04/02 15:00:16  cvetan
  * No more calls to gAlice in the reconstruction
  *
 #include "AliPHOSGetter.h"
 #include "AliESD.h"
 #include "AliESDVertex.h"
+#include "AliGenerator.h"
 
 ClassImp( AliPHOSPIDv1) 
 
@@ -896,11 +900,6 @@ TVector3 AliPHOSPIDv1::GetMomentumDirection(AliPHOSEmcRecPoint * emc, AliPHOSCpv
   //  However because of the poor position resolution of PPSD the direction is always taken as if we were 
   //  in case 1.
 
-  TVector3 dir(0,0,0) ; 
-  TMatrixF  dummy ;
-  
-  emc->GetGlobalPosition(dir, dummy) ;
-
   TVector3 local ; 
   emc->GetLocalPosition(local) ;
 
@@ -931,16 +930,17 @@ TVector3 AliPHOSPIDv1::GetMomentumDirection(AliPHOSEmcRecPoint * emc, AliPHOSCpv
   Float_t depthx = 0.;
   Float_t depthz = 0.;
   if (energy > 0 && vInc.Y()!=0.) {
-    depthx = ( para * TMath::Log(energy) + parb ) * vInc.X()/vInc.Y() ;
-    depthz = ( para * TMath::Log(energy) + parb ) * vInc.Z()/vInc.Y() ;
+    depthx = ( para * TMath::Log(energy) + parb ) * vInc.X()/TMath::Abs(vInc.Y()) ;
+    depthz = ( para * TMath::Log(energy) + parb ) * vInc.Z()/TMath::Abs(vInc.Y()) ;
   }
 
-  dir.SetXYZ(dir.X()-(depthxOld-depthx)*TMath::Sin(dir.Phi()),
-             dir.Y()-(depthxOld-depthx)*TMath::Cos(dir.Phi()),
-             dir.Z()+depthzOld-depthz) ;
+  //Correct for the vertex position and shower depth
+  Double_t xd=x+(depthxOld-depthx) ;
+  Double_t zd=z+(depthzOld-depthz) ; 
+  TVector3 dir(0,0,0) ; 
+  phosgeom->Local2Global(emc->GetPHOSMod(),xd,zd,dir) ;
 
-  //Correct for the vertex position
-  dir = dir - fVtx ;
+  dir-=fVtx ;
   dir.SetMag(1.) ;
 
   return dir ;  
@@ -1747,11 +1747,17 @@ void AliPHOSPIDv1::GetVertex(void)
   //Try to extract vertex from data
   if(fESD){
     const AliESDVertex *esdVtx = fESD->GetVertex() ;
-    if(esdVtx){
+    if(esdVtx && esdVtx->GetChi2()!=0.){
       fVtx.SetXYZ(esdVtx->GetXv(),esdVtx->GetYv(),esdVtx->GetZv()) ;
       return ;
     }
   }
+  if(gAlice && gAlice->GetMCApp() && gAlice->Generator()){
+     Float_t ox,oy,oz ;
+     gAlice->Generator()->GetOrigin(ox,oy,oz);
+     fVtx.SetXYZ(ox,oy,oz) ;
+     return ;
+  }
  
   AliWarning("Can not read vertex from data, use fixed \n") ;
   fVtx.SetXYZ(0.,0.,0.) ;