#include <TParticle.h>
#include <TDatabasePDG.h>
#include "AliRsnDaughter.h"
ClassImp(AliRsnDaughter)
AliRsnDaughter::AliRsnDaughter(const AliRsnDaughter ©) :
TObject(copy),
fOK(copy.fOK),
fLabel(copy.fLabel),
fMotherPDG(copy.fMotherPDG),
fRsnID(copy.fRsnID),
fPrec(copy.fPrec),
fPsim(copy.fPsim),
fRef(copy.fRef),
fRefMC(copy.fRefMC),
fOwnerEvent(copy.fOwnerEvent)
{
}
AliRsnDaughter &AliRsnDaughter::operator=(const AliRsnDaughter ©)
{
if (this == ©)
return *this;
fOK = copy.fOK;
fLabel = copy.fLabel;
fMotherPDG = copy.fMotherPDG;
fRsnID = copy.fRsnID;
fPsim = copy.fPsim;
fPrec = copy.fPrec;
fRef = copy.fRef;
fRefMC = copy.fRefMC;
fOwnerEvent = copy.fOwnerEvent;
return (*this);
}
void AliRsnDaughter::Reset()
{
fOK = kFALSE;
fLabel = -1;
fMotherPDG = 0;
fRsnID = -1;
fPsim.SetXYZT(0.0, 0.0, 0.0, 0.0);
fPrec.SetXYZT(0.0, 0.0, 0.0, 0.0);
fRef = fRefMC = 0x0;
fOwnerEvent = 0x0;
}
Int_t AliRsnDaughter::GetPDG()
{
if (Match(fRefMC, AliMCParticle::Class()))
return ((AliMCParticle *)fRefMC)->Particle()->GetPdgCode();
else if (Match(fRefMC, AliAODMCParticle::Class()))
return ((AliAODMCParticle *)fRefMC)->GetPdgCode();
else {
AliWarning("Cannot retrieve PDG");
return 0;
}
}
Int_t AliRsnDaughter::GetID()
{
AliESDtrack *esd = Ref2ESDtrack();
if (esd) return esd->GetID();
AliAODTrack *aod = Ref2AODtrack();
if (aod) return aod->GetID();
return GetLabel();
}
Int_t AliRsnDaughter::GetMother()
{
if (!fRefMC) return -1;
if (fRefMC->InheritsFrom(AliMCParticle::Class())) {
AliMCParticle *mc = (AliMCParticle *)fRefMC;
return mc->Particle()->GetFirstMother();
} else if (fRefMC->InheritsFrom(AliAODMCParticle::Class())) {
AliAODMCParticle *mc = (AliAODMCParticle *)fRefMC;
return mc->GetMother();
}
else
return -1;
}
void AliRsnDaughter::Print(Option_t *) const
{
AliInfo("=== DAUGHTER INFO ======================================================================");
AliInfo(Form(" (sim) px,py,pz = %6.2f %6.2f %6.2f", fPsim.X(), fPsim.Y(), fPsim.Z()));
AliInfo(Form(" (rec) px,py,pz = %6.2f %6.2f %6.2f", fPrec.X(), fPrec.Y(), fPrec.Z()));
AliInfo(Form(" OK, RsnID, Label, MotherPDG = %s, %5d, %5d, %4d", (fOK ? "true " : "false"), fRsnID, fLabel, fMotherPDG));
AliInfo("========================================================================================");
}
const char *AliRsnDaughter::SpeciesName(ESpecies species)
{
switch (species) {
case kElectron: return "E";
case kMuon: return "Mu";
case kPion: return "Pi";
case kKaon: return "K";
case kProton: return "P";
case kKaon0: return "K0s";
case kLambda: return "Lambda";
case kXi: return "Xi";
case kOmega: return "Omega";
default: return "Undef";
}
}
Int_t AliRsnDaughter::SpeciesPDG(ESpecies species)
{
switch (species) {
case kElectron: return 11;
case kMuon: return 13;
case kPion: return 211;
case kKaon: return 321;
case kProton: return 2212;
case kKaon0: return 311;
case kLambda: return 3122;
case kXi: return 3312;
case kOmega: return 3334;
default: return 0;
}
}
Double_t AliRsnDaughter::SpeciesMass(ESpecies species)
{
TDatabasePDG *db = TDatabasePDG::Instance();
TParticlePDG *part = 0x0;
Int_t pdg = SpeciesPDG(species);
if (pdg) {
part = db->GetParticle(pdg);
return part->Mass();
}
else
return 0.0;
}
EPARTYPE AliRsnDaughter::ToAliPID(ESpecies species)
{
switch (species) {
case kElectron: return AliPID::kElectron;
case kMuon: return AliPID::kMuon;
case kPion: return AliPID::kPion;
case kKaon: return AliPID::kKaon;
case kProton: return AliPID::kProton;
case kKaon0: return AliPID::kKaon0;
default: return AliPID::kUnknown;
}
}
AliRsnDaughter::ESpecies AliRsnDaughter::FromAliPID(EPARTYPE pid)
{
switch (pid) {
case AliPID::kElectron: return kElectron;
case AliPID::kMuon: return kMuon;
case AliPID::kPion: return kPion;
case AliPID::kKaon: return kKaon;
case AliPID::kProton: return kProton;
case AliPID::kKaon0: return kKaon0;
default: return kUnknown;
}
}