+void AliPHOSRecPoint::GetLocalPosition(TVector3 & pos) const
+{
+ // returns the position of the cluster in the local reference system
+ // of the sub-detector
+
+ pos = fLocPos;
+}
+
+//____________________________________________________________________________
+void AliPHOSRecPoint::EvalLocal2TrackingCSTransform()
+{
+ //Evaluates local to "tracking" c.s. transformation (B.P.).
+ //All evaluations should be completed before calling for this function.
+ //See ALICE PPR Chapter 5 p.18 for "tracking" c.s. definition,
+ //or just ask Jouri Belikov. :)
+
+ if(IsEmc()) {
+ SetVolumeId(AliGeomManager::LayerToVolUID(AliGeomManager::kPHOS1,GetPHOSMod()-1));
+ }
+ else
+ SetVolumeId(AliGeomManager::LayerToVolUID(AliGeomManager::kPHOS2,GetPHOSMod()-1));
+
+ 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()).
+
+ const Float_t * inthermo = geoEMCA->GetInnerThermoHalfSize() ;
+ const Float_t * strip = geoEMCA->GetStripHalfSize() ;
+ const Float_t * splate = geoEMCA->GetSupportPlateHalfSize();
+ const Float_t * crystal = geoEMCA->GetCrystalHalfSize() ;
+ const Float_t * pin = geoEMCA->GetAPDHalfSize() ;
+ const 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