]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSRecPoint.cxx
Loaders removed from the reconstruction code (C.Cheshkov)
[u/mrichter/AliRoot.git] / PHOS / AliPHOSRecPoint.cxx
index 99535ddd9590f51e13835fd87ce38d763cc3548b..fa8ac8436e8a61c38335d004cc6f13f292719054 100644 (file)
@@ -43,7 +43,7 @@ ClassImp(AliPHOSRecPoint)
 //____________________________________________________________________________
 AliPHOSRecPoint::AliPHOSRecPoint()
   : AliCluster(),fPHOSMod(0),
-    fMulTrack(0),fMaxDigit(100),fMulDigit(0),fMaxTrack(0),
+    fMulTrack(0),fMaxDigit(100),fMulDigit(0),fMaxTrack(200),
     fDigitsList(0),fTracksList(0),fAmp(0),
     fIndexInList(-1), // to be set when the point is already stored
     fLocPos(0,0,0),fLocPosM(0)
@@ -56,7 +56,7 @@ AliPHOSRecPoint::AliPHOSRecPoint()
 AliPHOSRecPoint::AliPHOSRecPoint(const char * ) 
   : AliCluster(),fPHOSMod(0),
     fMulTrack(0),fMaxDigit(100),fMulDigit(0),fMaxTrack(200),
-    fDigitsList(new int[fMaxDigit]),fTracksList(new int[fMaxTrack]),fAmp(0),
+    fDigitsList(new Int_t[fMaxDigit]),fTracksList(new Int_t[fMaxTrack]),fAmp(0),
     fIndexInList(-1), // to be set when the point is already stored
     fLocPos(0,0,0),fLocPosM(new TMatrixF(3,3))
 
@@ -78,16 +78,16 @@ AliPHOSRecPoint::~AliPHOSRecPoint()
 AliPHOSRecPoint::AliPHOSRecPoint(const AliPHOSRecPoint &rp) : 
   AliCluster(rp),
   fPHOSMod(rp.fPHOSMod),fMulTrack(rp.fMulTrack),fMaxDigit(rp.fMaxDigit),
-  fMulDigit(rp.fMulDigit),fMaxTrack(rp.fMaxTrack),fDigitsList(new int[rp.fMaxDigit]),
-  fTracksList(new int[rp.fMaxTrack]),fAmp(rp.fAmp),fIndexInList(rp.fIndexInList), 
+  fMulDigit(rp.fMulDigit),fMaxTrack(rp.fMaxTrack),fDigitsList(new Int_t[rp.fMaxDigit]),
+  fTracksList(new Int_t[rp.fMaxTrack]),fAmp(rp.fAmp),fIndexInList(rp.fIndexInList), 
   fLocPos(rp.fLocPos),fLocPosM(rp.fLocPosM)
 {
   //copy ctor
 
-  for(Int_t i=0; i<fMaxDigit; i++)
+  for(Int_t i=0; i<fMulDigit; i++)
     fDigitsList[i] = rp.fDigitsList[i];
 
-  for(Int_t i=0; i<fMaxTrack; i++)
+  for(Int_t i=0; i<fMulTrack; i++)
     fTracksList[i] = rp.fTracksList[i];
   
 }
@@ -164,11 +164,6 @@ void AliPHOSRecPoint::ExecuteEvent(Int_t event, Int_t, Int_t)
   case kButton1Down:{
     AliPHOSDigit * digit ;
   
-//  Accessing geometry this way is equivalent to getting from gAlice
-// to have Detector in Folder one have to load gAlice anyway
-//    AliPHOSLoader * gime = AliPHOSLoader::GetInstance();
-//    AliPHOSGeometry * phosgeom =  const_cast<AliPHOSGeometry*>(gime->PHOSGeometry());
-
     AliPHOSGeometry * phosgeom = AliPHOSLoader::GetPHOSGeometry();
 
     Int_t iDigit;
@@ -243,7 +238,7 @@ void AliPHOSRecPoint::EvalPHOSMod(AliPHOSDigit * digit)
   if( fPHOSMod == 0){
   Int_t relid[4] ; 
  
-  AliPHOSGeometry * phosgeom = (AliPHOSGetter::Instance())->PHOSGeometry();
+  AliPHOSGeometry * phosgeom = (AliPHOSGeometry::GetInstance());
 
   phosgeom->AbsToRelNumbering(digit->GetId(), relid) ;
   fPHOSMod = relid[0];
@@ -293,8 +288,10 @@ void  AliPHOSRecPoint::EvalPrimaries(TClonesArray * digits)
     }
   } // all digits
 
-  if(fMulTrack)
+  if(fMulTrack > 0){
+    if(fTracksList)delete [] fTracksList;
     fTracksList = new Int_t[fMulTrack] ;
+  }
   for(index = 0; index < fMulTrack; index++)
     fTracksList[index] = tempo[index] ;
   
@@ -361,8 +358,33 @@ void AliPHOSRecPoint::EvalLocal2TrackingCSTransform()
   else
     SetVolumeId(AliGeomManager::LayerToVolUID(AliGeomManager::kPHOS2,GetPHOSMod()-1));
 
-  Double_t lxyz[3] = {fLocPos.X(),0,fLocPos.Z()};
+  Double_t lxyz[3] = {fLocPos.X(),fLocPos.Y(),fLocPos.Z()};
   Double_t txyz[3] = {0,0,0};
+  Double_t dy;
+  Double_t crystalShift;
+
+  AliPHOSGeometry * phosgeom = AliPHOSGeometry::GetInstance();
+  AliPHOSEMCAGeometry* geoEMCA = phosgeom->GetEMCAGeometry(); 
+
+  //Calculate offset to crystal surface.
+  //See fCrystalShift code in AliPHOSGeometry::Init()).
+
+  Float_t * inthermo = geoEMCA->GetInnerThermoHalfSize() ;
+  Float_t * strip = geoEMCA->GetStripHalfSize() ;
+  Float_t* splate = geoEMCA->GetSupportPlateHalfSize();
+  Float_t * crystal = geoEMCA->GetCrystalHalfSize() ;
+  Float_t * pin = geoEMCA->GetAPDHalfSize() ;
+  Float_t * preamp = geoEMCA->GetPreampHalfSize() ;
+  crystalShift = -inthermo[1]+strip[1]+splate[1]+crystal[1]-geoEMCA->GetAirGapLed()/2.+pin[1]+preamp[1] ;
+
+  if(IsEmc()) {
+    dy = crystalShift;
+    lxyz[2] = -lxyz[2]; //Opposite z directions in EMC matrix and local frame!!!
+  }
+  else
+    dy = phosgeom->GetCPVBoxSize(1)/2.; //center of CPV module
+
+  lxyz[1] = lxyz[1] - dy;
 
   const TGeoHMatrix* tr2loc = GetTracking2LocalMatrix();
   if(!tr2loc) AliFatal(Form("No Tracking2LocalMatrix found."));
@@ -370,4 +392,21 @@ void AliPHOSRecPoint::EvalLocal2TrackingCSTransform()
   tr2loc->MasterToLocal(lxyz,txyz);
   SetX(txyz[0]); SetY(txyz[1]); SetZ(txyz[2]);
 
+  if(AliLog::GetGlobalDebugLevel()>0) {
+    TVector3 gpos; TMatrixF gmat;
+    GetGlobalPosition(gpos,gmat);
+    Float_t gxyz[3];
+    GetGlobalXYZ(gxyz);
+    TString emc;
+    if(IsEmc()) 
+      emc="EMC";
+    else
+      emc="CPV";
+    AliInfo(Form("lCS-->(%.3f,%.3f,%.3f), tCS-->(%.3f,%.3f,%.3f), gCS-->(%.3f,%.3f,%.3f),  gCScalc-->(%.3f,%.3f,%.3f), module %d %s",
+                fLocPos.X(),fLocPos.Y(),fLocPos.Z(),
+                GetX(),GetY(),GetZ(),
+                gpos.X(),gpos.Y(),gpos.Z(),
+                gxyz[0],gxyz[1],gxyz[2],GetPHOSMod(),emc.Data()));
+  }
+
 }