2 // This class works as generic interface to each candidate resonance daughter.
3 // Its main purpose is to provide a unique reference which includes all the
4 // facilities available in the AliVParticle generic base class, plus all info
5 // which could be needed during analysis, which are not in AliVParticle but
6 // need to be accessed from ESD or AOD objects, usually in different ways.
7 // When MC is available, AliRsnDaughter matches each reconstructed object with
8 // its corresponding MC particle.
10 // Currently, this interface can point to all kinds of single-particle object
11 // which one can have in the reconstructed event: charged tracks, V0s and
12 // cascades. It is care of the user to treat each of them in the correct way,
13 // regarding cuts, functions to be computed, etc.
15 // authors: A. Pulvirenti (alberto.pulvirenti@ct.infn.it)
16 // M. Vala (martin.vala@cern.ch)
19 #include <TParticle.h>
20 #include <TDatabasePDG.h>
22 #include "AliRsnDaughter.h"
24 ClassImp(AliRsnDaughter)
26 //_____________________________________________________________________________
27 AliRsnDaughter::AliRsnDaughter(const AliRsnDaughter ©) :
31 fMotherPDG(copy.fMotherPDG),
37 fOwnerEvent(copy.fOwnerEvent)
41 // Pointers are NOT duplicated, since they don't come from a 'new'
42 // statement, but from just referencing something in the data source.
46 //_____________________________________________________________________________
47 AliRsnDaughter& AliRsnDaughter::operator=(const AliRsnDaughter ©)
50 // Assignment operator.
51 // Pointers are NOT duplicated, since they don't come from a 'new'
52 // statement, but from just referencing something in the data source.
57 fMotherPDG = copy.fMotherPDG;
63 fOwnerEvent = copy.fOwnerEvent;
68 //_____________________________________________________________________________
69 void AliRsnDaughter::Reset()
72 // Reset this track to meaningless values and to a 'bad' status.
73 // After this has been done, this object should not be used
74 // for analysis unless initialized properly.
82 fPsim.SetXYZT(0.0, 0.0, 0.0, 0.0);
83 fPrec.SetXYZT(0.0, 0.0, 0.0, 0.0);
89 //_____________________________________________________________________________
90 Int_t AliRsnDaughter::GetPDG()
93 // Return the PDG code of the particle from MC ref (if any).
94 // If argument is kTRUE, returns its absolute value.
97 if (Match(fRefMC, AliMCParticle::Class()))
98 return ((AliMCParticle*)fRefMC)->Particle()->GetPdgCode();
99 else if (Match(fRefMC, AliAODMCParticle::Class()))
100 return ((AliAODMCParticle*)fRefMC)->GetPdgCode();
102 AliWarning("Cannot retrieve PDG");
107 //_____________________________________________________________________________
108 Int_t AliRsnDaughter::GetID()
111 // Return reference index, using the "GetID" method
112 // of the possible source object.
113 // When this method is unsuccessful (e.g.: V0s), return the label.
117 AliESDtrack *esd = Ref2ESDtrack();
118 if (esd) return esd->GetID();
121 AliAODTrack *aod = Ref2AODtrack();
122 if (aod) return aod->GetID();
128 //_____________________________________________________________________________
129 Int_t AliRsnDaughter::GetMother()
132 // Return index of the first mother of the MC reference, if any.
133 // Otherwise, returns -1 (the same as for primary tracks)
136 if (!fRefMC) return -1;
138 if (fRefMC->InheritsFrom(AliMCParticle::Class())) {
139 AliMCParticle *mc = (AliMCParticle*)fRefMC;
140 return mc->Particle()->GetFirstMother();
141 } else if (fRefMC->InheritsFrom(AliAODMCParticle::Class())) {
142 AliAODMCParticle *mc = (AliAODMCParticle*)fRefMC;
143 return mc->GetMother();
151 //______________________________________________________________________________
152 void AliRsnDaughter::Print(Option_t *opt) const
155 // Override of TObject::Print()
158 AliInfo("=== DAUGHTER INFO ======================================================================");
159 AliInfo(Form(" (sim) px,py,pz = %6.2f %6.2f %6.2f", fPsim.X(), fPsim.Y(), fPsim.Z()));
160 AliInfo(Form(" (rec) px,py,pz = %6.2f %6.2f %6.2f", fPrec.X(), fPrec.Y(), fPrec.Z()));
161 AliInfo(Form(" OK, RsnID, Label, MotherPDG = %s, %5d, %5d, %4d", (fOK ? "true " : "false"), fRsnID, fLabel, fMotherPDG));
162 AliInfo("========================================================================================");
165 //______________________________________________________________________________
166 const char* AliRsnDaughter::SpeciesName(ESpecies species)
169 // Return a string with the short name of the particle
173 case kElectron: return "E";
174 case kMuon: return "Mu";
175 case kPion: return "Pi";
176 case kKaon: return "K";
177 case kProton: return "P";
178 case kKaon0: return "K0s";
179 case kLambda: return "Lambda";
180 case kXi: return "Xi";
181 case kOmega: return "Omega";
182 default: return "Undef";
186 //______________________________________________________________________________
187 Int_t AliRsnDaughter::SpeciesPDG(ESpecies species)
190 // Return the PDG code of a particle species (abs value)
194 case kElectron: return 11;
195 case kMuon: return 13;
196 case kPion: return 211;
197 case kKaon: return 321;
198 case kProton: return 2212;
199 case kKaon0: return 310;
200 case kLambda: return 3122;
201 case kXi: return 3312;
202 case kOmega: return 3334;
207 //______________________________________________________________________________
208 Double_t AliRsnDaughter::SpeciesMass(ESpecies species)
211 // Return the mass of a particle species
214 TDatabasePDG *db = TDatabasePDG::Instance();
215 TParticlePDG *part = 0x0;
217 Int_t pdg = SpeciesPDG(species);
219 part = db->GetParticle(pdg);
226 //______________________________________________________________________________
227 EPARTYPE AliRsnDaughter::ToAliPID(ESpecies species)
230 // Convert an enum element from this object
231 // into the enumeration of AliPID.
232 // If no match are cound 'kUnknown' is returned.
236 case kElectron: return AliPID::kElectron;
237 case kMuon: return AliPID::kMuon;
238 case kPion: return AliPID::kPion;
239 case kKaon: return AliPID::kKaon;
240 case kProton: return AliPID::kProton;
241 case kKaon0: return AliPID::kKaon0;
242 default: return AliPID::kUnknown;
246 //______________________________________________________________________________
247 AliRsnDaughter::ESpecies AliRsnDaughter::FromAliPID(EPARTYPE pid)
250 // Convert an enum element from AliPID
251 // into the enumeration of this object.
252 // If no match are cound 'kUnknown' is returned.
256 case AliPID::kElectron: return kElectron;
257 case AliPID::kMuon: return kMuon;
258 case AliPID::kPion: return kPion;
259 case AliPID::kKaon: return kKaon;
260 case AliPID::kProton: return kProton;
261 case AliPID::kKaon0: return kKaon0;
262 default: return kUnknown;