X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSRecParticle.cxx;h=f4ce52bc2964a1b84f9c30e284b7d0d348e56fc4;hb=9612251512502b83f92309adfed73d0e201c3134;hp=11c700fb6d436df4c5da2a69051b70667372a48d;hpb=25ed816ed926c2971087ab7bd327accd70110bac;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSRecParticle.cxx b/PHOS/AliPHOSRecParticle.cxx index 11c700fb6d4..f4ce52bc296 100644 --- a/PHOS/AliPHOSRecParticle.cxx +++ b/PHOS/AliPHOSRecParticle.cxx @@ -29,29 +29,37 @@ // --- AliRoot header files --- +#include "AliStack.h" +#include "AliPHOSHit.h" +#include "AliPHOSDigit.h" +#include "AliPHOSTrackSegment.h" +#include "AliPHOSEmcRecPoint.h" #include "AliPHOSRecParticle.h" -#include "AliPHOSGetter.h" +#include "AliPHOSLoader.h" #include "AliPHOSGeometry.h" #include "AliLog.h" //____________________________________________________________________________ - AliPHOSRecParticle::AliPHOSRecParticle(): fPHOSTrackSegment(0) , fDebug( kFALSE ) +AliPHOSRecParticle::AliPHOSRecParticle(): + fPHOSTrackSegment(0), + fDebug(kFALSE), + fPos() { // ctor - const Int_t nSPECIES = AliPID::kSPECIESN; + const Int_t nSPECIES = AliPID::kSPECIESCN; for(Int_t i = 0; i(gime->TrackSegments()->At(GetPHOSTSIndex()))->GetEmcIndex(); - dynamic_cast(gime->EmcRecPoints()->At(emcRPindex))->GetPrimaries(rv) ; + AliRunLoader* rl = AliRunLoader::Instance() ; + AliPHOSLoader * phosLoader = static_cast(rl->GetLoader("PHOSLoader")); + Int_t emcRPindex = static_cast(phosLoader->TrackSegments()->At(GetPHOSTSIndex()))->GetEmcIndex(); + static_cast(phosLoader->EmcRecPoints()->At(emcRPindex))->GetPrimaries(rv) ; return rv ; } @@ -101,24 +117,32 @@ const TParticle * AliPHOSRecParticle::GetPrimary() const { // Get the primary particle at the origine of the RecParticle and // which has deposited the largest energy in SDigits - AliPHOSGetter * gime = AliPHOSGetter::Instance() ; - if (!gime) - Error("GetPrimary", "Getter not yet instantiated") ; - gime->Event(gime->EventNumber(), "SRTPX") ; + AliRunLoader* rl = AliRunLoader::Instance() ; + AliPHOSLoader * phosLoader = static_cast(rl->GetLoader("PHOSLoader")); + rl->GetEvent(rl->GetEventNumber()) ; + rl->LoadKinematics("READ"); + rl->LoadSDigits("READ"); + if(GetNPrimaries() == 0) return 0 ; if(GetNPrimaries() == 1) return GetPrimary(0) ; Int_t AbsId = 0; Int_t module ; - const AliPHOSGeometry * geom = gime->PHOSGeometry() ; - Double_t x,z ; - geom->ImpactOnEmc(static_cast(Theta()),static_cast(Phi()), module,z,x); + + // Get PHOS Geometry object + AliPHOSGeometry *geom; + if (!(geom = AliPHOSGeometry::GetInstance())) + geom = AliPHOSGeometry::GetInstance("IHEP",""); + Double_t x,z ; +//DP to be fixed: Why do we use this method here??? M.B. use RecPoint??? + Double_t vtx[3]={0.,0.,0.} ; + geom->ImpactOnEmc(vtx,static_cast(Theta()),static_cast(Phi()), module,z,x); Int_t amp = 0 ; Int_t iPrim=-1 ; if(module != 0){ geom->RelPosToAbsId(module,x,z,AbsId) ; - TClonesArray * sdigits = gime->SDigits() ; + TClonesArray * sdigits = phosLoader->SDigits() ; AliPHOSDigit * sdig ; for(Int_t i = 0 ; i < sdigits->GetEntriesFast() ; i++){ @@ -135,7 +159,7 @@ const TParticle * AliPHOSRecParticle::GetPrimary() const } } if(iPrim >= 0) - return gime->Primary(iPrim) ; + return rl->Stack()->Particle(iPrim) ; else return 0 ; } @@ -148,36 +172,40 @@ Int_t AliPHOSRecParticle::GetPrimaryIndex() const // which the RecParticle is created from - AliPHOSGetter * gime = AliPHOSGetter::Instance() ; - if (!gime) - AliError(Form("Getter not yet instantiated")) ; - //PH gime->Event(gime->EventNumber(), "DRTX") ; - gime->Event(gime->EventNumber(), "DRT") ; + AliRunLoader* rl = AliRunLoader::Instance() ; + AliPHOSLoader * phosLoader = static_cast(rl->GetLoader("PHOSLoader")); + rl->GetEvent(rl->GetEventNumber()) ; + rl->LoadHits("READ"); + rl->LoadDigits("READ"); + rl->LoadRecPoints("READ"); + rl->LoadTracks("READ"); // Get TrackSegment corresponding to this RecParticle - AliPHOSTrackSegment *ts = gime->TrackSegment(fPHOSTrackSegment); + const AliPHOSTrackSegment *ts = phosLoader->TrackSegment(fPHOSTrackSegment); // Get EmcRecPoint corresponding to this TrackSegment Int_t emcRecPointIndex = ts->GetEmcIndex(); - AliPHOSEmcRecPoint *emcRecPoint = gime->EmcRecPoint(emcRecPointIndex); + const AliPHOSEmcRecPoint *emcRecPoint = phosLoader->EmcRecPoint(emcRecPointIndex); // Get the list of digits forming this EmcRecParticle Int_t nDigits = emcRecPoint->GetDigitsMultiplicity(); Int_t *digitList = emcRecPoint->GetDigitsList(); // Find the digit with maximum amplitude - AliPHOSDigit *digit = 0; Int_t maxAmp = 0; Int_t bestDigitIndex = -1; for (Int_t iDigit=0; iDigitDigit(digitList[iDigit]); + const AliPHOSDigit * digit = phosLoader->Digit(digitList[iDigit]); if (digit->GetAmp() > maxAmp) { maxAmp = digit->GetAmp(); bestDigitIndex = iDigit; } } - digit = gime->Digit(digitList[bestDigitIndex]); + if (bestDigitIndex>-1) { + const AliPHOSDigit * digit = phosLoader->Digit(digitList[bestDigitIndex]); + if (digit==0) return -12345; + } // Get the list of primary tracks producing this digit // and find which track has more track energy. @@ -218,17 +246,16 @@ Int_t AliPHOSRecParticle::GetPrimaryIndex() const // find which hit has deposited more energy // and find the primary track. - AliPHOSHit *hit = 0; - TClonesArray *hits = gime->Hits(); + TClonesArray *hits = phosLoader->Hits(); if (hits==0) return -12345; Double_t maxedep = 0; Int_t maxtrack = -1; Int_t nHits = hits ->GetEntries(); - Int_t id = digit->GetId(); + Int_t id = (phosLoader->Digit(digitList[bestDigitIndex]))->GetId(); for (Int_t iHit=0; iHitHit(iHit); + const AliPHOSHit * hit = phosLoader->Hit(iHit); if(hit->GetId() == id){ Double_t edep = hit->GetEnergy(); Int_t track = hit->GetPrimary(); @@ -255,11 +282,12 @@ const TParticle * AliPHOSRecParticle::GetPrimary(Int_t index) const } else { Int_t dummy ; - AliPHOSGetter * gime = AliPHOSGetter::Instance() ; + AliRunLoader* rl = AliRunLoader::Instance() ; + AliPHOSLoader * phosLoader = static_cast(rl->GetLoader("PHOSLoader")); - Int_t emcRPindex = dynamic_cast(gime->TrackSegments()->At(GetPHOSTSIndex()))->GetEmcIndex(); - Int_t primaryindex = dynamic_cast(gime->EmcRecPoints()->At(emcRPindex))->GetPrimaries(dummy)[index] ; - return gime->Primary(primaryindex) ; + Int_t emcRPindex = static_cast(phosLoader->TrackSegments()->At(GetPHOSTSIndex()))->GetEmcIndex(); + Int_t primaryindex = static_cast(phosLoader->EmcRecPoints()->At(emcRPindex))->GetPrimaries(dummy)[index] ; + return rl->Stack()->Particle(primaryindex) ; } // return 0 ; }