X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=PHOS%2FAliPHOSRecPoint.cxx;h=9b3496d297abdfe0b536f1868c9851c1763ce904;hb=1afb990632992830c51016c8f066f86db9a90b4c;hp=e2a9ccf8219df5e61e3ed36a2288c5928e0c3ab7;hpb=ad8cfaf45387c79dfe79ba3cfec645132129bc9a;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSRecPoint.cxx b/PHOS/AliPHOSRecPoint.cxx index e2a9ccf8219..9b3496d297a 100644 --- a/PHOS/AliPHOSRecPoint.cxx +++ b/PHOS/AliPHOSRecPoint.cxx @@ -18,35 +18,102 @@ // Why should I put meaningless comments // just to satisfy // the code checker -//*-- Author: Gines Martinez (SUBATECH) +//-- Author: Gines Martinez (SUBATECH) // --- ROOT system --- #include "TPad.h" +#include "TGraph.h" +#include "TPaveText.h" +#include "TClonesArray.h" +#include "TGeoMatrix.h" // --- Standard library --- -#include -#include // --- AliRoot header files --- - +#include "AliLog.h" +#include "AliPHOSLoader.h" #include "AliPHOSGeometry.h" #include "AliPHOSDigit.h" #include "AliPHOSRecPoint.h" -#include "AliPHOSIndexToObject.h" +#include "AliGeomManager.h" ClassImp(AliPHOSRecPoint) //____________________________________________________________________________ AliPHOSRecPoint::AliPHOSRecPoint() - : AliRecPoint() + : AliCluster(),fPHOSMod(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) { // ctor - fGeom = (AliPHOSGeometry*) AliPHOSGeometry::GetInstance() ; - fPHOSMod = 0; } +//____________________________________________________________________________ +AliPHOSRecPoint::AliPHOSRecPoint(const char * ) + : AliCluster(),fPHOSMod(0), + fMulTrack(0),fMaxDigit(100),fMulDigit(0),fMaxTrack(200), + 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) + +{ + // ctor + +} +//_______________________________________________________________________ +AliPHOSRecPoint::~AliPHOSRecPoint() +{ + // dtor + + delete [] fDigitsList ; + delete [] fTracksList ; + +} +//____________________________________________________________________________ +AliPHOSRecPoint::AliPHOSRecPoint(const AliPHOSRecPoint &rp) : + AliCluster(rp), + fPHOSMod(rp.fPHOSMod),fMulTrack(rp.fMulTrack),fMaxDigit(rp.fMaxDigit), + fMulDigit(rp.fMulDigit),fMaxTrack(rp.fMaxTrack),fDigitsList(0x0), + fTracksList(0x0),fAmp(rp.fAmp),fIndexInList(rp.fIndexInList), + fLocPos(rp.fLocPos) +{ + //copy ctor + + if (rp.fMulDigit>0) fDigitsList = new Int_t[rp.fMulDigit]; + for(Int_t i=0; i0) fTracksList = new Int_t[rp.fMulTrack]; + for(Int_t i=0; i Something wrong with the code"); + digit = 0 ; //dynamic_cast((fDigitsList)[iDigit]); phosgeom->AbsToRelNumbering(digit->GetId(), relid) ; phosgeom->RelPosInModule(relid, xi[iDigit], zi[iDigit]) ; } @@ -131,7 +201,7 @@ void AliPHOSRecPoint::ExecuteEvent(Int_t event, Int_t px, Int_t py) clustertext ->Draw(""); } gPad->Update() ; - Print() ; + Print("dummy") ; delete[] xi ; delete[] zi ; } @@ -153,73 +223,36 @@ break; } } //____________________________________________________________________________ -void AliPHOSRecPoint::EvalAll() { +void AliPHOSRecPoint::EvalAll(TClonesArray * /* digits */) +{ //evaluates (if necessary) all RecPoint data members - EvalPHOSMod() ; } + //____________________________________________________________________________ -void AliPHOSRecPoint::EvalPHOSMod() +void AliPHOSRecPoint::EvalPHOSMod(AliPHOSDigit * digit) { // Returns the PHOS module in which the RecPoint is found - - AliPHOSIndexToObject * please = AliPHOSIndexToObject::GetInstance() ; + if( fPHOSMod == 0){ Int_t relid[4] ; - - AliPHOSDigit * digit ; - digit = (AliPHOSDigit *) ( please->GimeDigit(fDigitsList[0]) ) ; - AliPHOSGeometry * phosgeom = (AliPHOSGeometry *) fGeom ; + + AliPHOSGeometry * phosgeom = (AliPHOSGeometry::GetInstance()); phosgeom->AbsToRelNumbering(digit->GetId(), relid) ; fPHOSMod = relid[0]; + } } -//______________________________________________________________________________ -Int_t * AliPHOSRecPoint::GetPrimaries(Int_t & number) const +//____________________________________________________________________________ +void AliPHOSRecPoint::GetGlobalPosition(TVector3 & gpos, TMatrixF & gmat) const { - // Constructs the list of primary particles which have contributed to this RecPoint - - AliPHOSDigit * digit ; - Int_t index ; - Int_t maxcounter = 20 ; - Int_t counter = 0 ; - Int_t * tempo = new Int_t[maxcounter] ; - AliPHOSIndexToObject * please = AliPHOSIndexToObject::GetInstance() ; + // returns the position of the cluster in the global reference system of ALICE + // and the uncertainty on this position + + AliPHOSGeometry * phosgeom = (AliPHOSGeometry::GetInstance()); + phosgeom->GetGlobalPHOS(this, gpos, gmat); - for ( index = 0 ; index < GetDigitsMultiplicity() ; index++ ) { // all digits - digit = please->GimeDigit( fDigitsList[index] ) ; - Int_t nprimaries = digit->GetNprimary() ; - Int_t * newprimaryarray = new Int_t[nprimaries] ; - Int_t ii ; - for ( ii = 0 ; ii < nprimaries ; ii++) - newprimaryarray[ii] = digit->GetPrimary(ii+1) ; - Int_t jndex ; - for ( jndex = 0 ; jndex < nprimaries ; jndex++ ) { // all primaries in digit - if ( counter > maxcounter ) { - number = - 1 ; - cout << "AliPHOSRecPoint::GetNprimaries ERROR > increase maxcounter " << endl ; - break ; - } - Int_t newprimary = newprimaryarray[jndex] ; - Int_t kndex ; - Bool_t already = kFALSE ; - for ( kndex = 0 ; kndex < counter ; kndex++ ) { //check if not already stored - if ( newprimary == tempo[kndex] ){ - already = kTRUE ; - break ; - } - } // end of check - if ( !already) { // store it - tempo[counter] = newprimary ; - counter++ ; - } // store it - } // all primaries in digit - delete newprimaryarray ; - } // all digits - - number = counter ; - return tempo ; } //______________________________________________________________________________ @@ -243,3 +276,78 @@ void AliPHOSRecPoint::Paint(Option_t *) gPad->SetAttMarkerPS(markercolor,markerstyle,markersize) ; gPad->PaintPolyMarker(1,&x,&y,"") ; } +//______________________________________________________________________________ +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()). + + 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 for VolumeID=%d",GetVolumeId())); + + 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())); + } + +}