// --- AliRoot header files ---
-#include "AliHeader.h"
#include "AliPHOSRecParticle.h"
#include "AliPHOSGetter.h"
-#include "TParticle.h"
+#include "AliPHOSGeometry.h"
-ClassImp(AliPHOSRecParticle)
+//____________________________________________________________________________
+ AliPHOSRecParticle::AliPHOSRecParticle(): fPHOSTrackSegment(0) , fDebug( kFALSE )
+{
+ // ctor
+ const Int_t nSPECIES = AliESDtrack::kSPECIESN;
+ for(Int_t i = 0; i<nSPECIES ; i++)
+ fPID[i]=0.;
+}
//____________________________________________________________________________
AliPHOSRecParticle::AliPHOSRecParticle(const AliPHOSRecParticle & rp)
+ : AliPHOSFastRecParticle(rp)
{
// copy ctor
fPolarTheta = rp.fPolarTheta;
fPolarPhi = rp.fPolarPhi;
fParticlePDG = rp.fParticlePDG;
-
+ const Int_t nSPECIES = AliESDtrack::kSPECIESN;
+ for(Int_t i = 0; i<nSPECIES ; i++)
+ fPID[i]=rp.fPID[i];
}
//____________________________________________________________________________
const Int_t AliPHOSRecParticle::GetNPrimaries() const
-{
- AliHeader *h = gAlice->GetHeader();
- return h->GetNprimary();
- // return gAlice->GetNtrack();
+{
+ return -1;
}
//____________________________________________________________________________
const Int_t AliPHOSRecParticle::GetNPrimariesToRecParticles() const
{
-
+ // Get the number of primaries at the origine of the RecParticle
Int_t rv = 0 ;
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
- gime->EmcRecPoint(gime->TrackSegment(GetPHOSTSIndex())->GetEmcIndex())->GetPrimaries(rv) ;
+ AliPHOSGetter * gime = AliPHOSGetter::Instance() ;
+ Int_t emcRPindex = dynamic_cast<AliPHOSTrackSegment*>(gime->TrackSegments()->At(GetPHOSTSIndex()))->GetEmcIndex();
+ dynamic_cast<AliPHOSEmcRecPoint*>(gime->EmcRecPoints()->At(emcRPindex))->GetPrimaries(rv) ;
return rv ;
}
+//____________________________________________________________________________
+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") ;
+ 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<double>(Theta()),static_cast<double>(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() ;
+ AliPHOSDigit * sdig ;
+
+ for(Int_t i = 0 ; i < sdigits->GetEntriesFast() ; i++){
+ sdig = static_cast<AliPHOSDigit *>(sdigits->At(i)) ;
+ if((sdig->GetId() == AbsId)){
+ if((sdig->GetAmp() > amp) && (sdig->GetNprimary())){
+ amp = sdig->GetAmp() ;
+ iPrim = sdig->GetPrimary(1) ;
+ }
+ // do not scan rest of list
+ if(sdig->GetId() > AbsId)
+ continue ;
+ }
+ }
+ }
+ if(iPrim >= 0)
+ return gime->Primary(iPrim) ;
+ else
+ return 0 ;
+}
+
//____________________________________________________________________________
const TParticle * AliPHOSRecParticle::GetPrimary(Int_t index) const
{
+ // Get one of the primary particles at the origine of the RecParticle
if ( index > GetNPrimariesToRecParticles() ) {
if (fDebug)
- cout << "WARNING : AliPHOSRecParticle::GetPrimary -> " << index << " is larger that the number of primaries "
- << GetNPrimaries() << endl ;
+ Warning("GetPrimary", "AliPHOSRecParticle::GetPrimary -> %d is larger that the number of primaries %d",
+ index, GetNPrimaries()) ;
return 0 ;
- } else {
- Int_t dummy ;
- AliPHOSGetter * gime = AliPHOSGetter::GetInstance() ;
- Int_t primaryindex = gime->EmcRecPoint(gime->TrackSegment(GetPHOSTSIndex())->GetEmcIndex())->GetPrimaries(dummy)[index] ;
- if (primaryindex >= 10000000) { // it comes from backgroundfile
- if (fDebug)
- cout << "WARNING : AliPHOSRecParticle::GetPrimary -> not a signal primary" << endl ;
- return 0 ;
- } else
- return gime->Primary(primaryindex) ;
}
- return 0 ;
+ else {
+ Int_t dummy ;
+ AliPHOSGetter * gime = AliPHOSGetter::Instance() ;
+
+ Int_t emcRPindex = dynamic_cast<AliPHOSTrackSegment*>(gime->TrackSegments()->At(GetPHOSTSIndex()))->GetEmcIndex();
+ Int_t primaryindex = dynamic_cast<AliPHOSEmcRecPoint*>(gime->EmcRecPoints()->At(emcRPindex))->GetPrimaries(dummy)[index] ;
+ return gime->Primary(primaryindex) ;
+ }
+ // return 0 ;
}
+//____________________________________________________________________________
+void AliPHOSRecParticle::SetPID(Int_t type, Double_t weight)
+{
+ // Set the probability densities that this reconstructed particle
+ // has a type of i:
+ // i particle types
+ // ----------------------
+ // 0 electron
+ // 1 muon
+ // 2 pi+-
+ // 3 K+-
+ // 4 p/pbar
+ // 5 photon
+ // 6 pi0 at high pt
+ // 7 neutron
+ // 8 K0L
+ // 9 Conversion electron
+
+ fPID[type] = weight ;
+}