//____________________________________________________________________________
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)
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))
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];
}
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;
if( fPHOSMod == 0){
Int_t relid[4] ;
- AliPHOSGeometry * phosgeom = (AliPHOSGetter::Instance())->PHOSGeometry();
+ AliPHOSGeometry * phosgeom = (AliPHOSGeometry::GetInstance());
phosgeom->AbsToRelNumbering(digit->GetId(), relid) ;
fPHOSMod = relid[0];
}
} // 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] ;
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."));
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()));
+ }
+
}