2 // Class AliRsnDaughter
4 // Interface to candidate daughters of a resonance (tracks or V0s).
5 // It contains two pointers to two AliVParticle-derived objects.
6 // for the computations required during resonance analysis.
8 // Since the package revision, this object is not supposed to be stacked in memory
9 // but created "on fly" during analysis and used just for computations, as an interface.
11 // authors: A. Pulvirenti (alberto.pulvirenti@ct.infn.it)
12 // M. Vala (martin.vala@cern.ch)
15 #ifndef ALIRSNDAUGHTER_H
16 #define ALIRSNDAUGHTER_H
18 #include <TLorentzVector.h>
20 #include "AliESDtrack.h"
22 #include "AliESDcascade.h"
23 #include "AliMCParticle.h"
25 #include "AliAODTrack.h"
27 #include "AliAODcascade.h"
28 #include "AliAODMCParticle.h"
30 typedef AliPID::EParticleType EPARTYPE;
32 class AliRsnDaughter : public TObject
45 AliRsnDaughter(const AliRsnDaughter ©);
46 AliRsnDaughter& operator= (const AliRsnDaughter& copy);
47 virtual ~AliRsnDaughter() { /*nothing*/ }
49 // basic getters (for data members)
50 Bool_t IsOK() const {return fOK;}
51 Int_t GetLabel() const {return fLabel;}
52 Int_t GetMotherPDG() const {return fMotherPDG;}
53 TLorentzVector& Prec() {return fPrec;}
54 TLorentzVector& Psim() {return fPsim;}
55 TLorentzVector& P(Bool_t mc = kFALSE) {return (mc ? fPsim : fPrec);}
56 AliVParticle* GetRef() {return fRef;}
57 AliVParticle* GetRefMC() {return fRefMC;}
59 // basic setters (for data members)
60 void SetBad() {fOK = kFALSE;}
61 void SetGood() {fOK = kTRUE;}
62 void SetLabel(Int_t label) {fLabel = label;}
63 void SetMotherPDG(Int_t value) {fMotherPDG = value;}
64 void SetRef(AliVParticle *p) {fRef = p;}
65 void SetRefMC(AliVParticle *p = 0x0) {fRefMC = p;}
68 Bool_t IsPos() const {return (fRef->Charge() > 0);}
69 Bool_t IsNeg() const {return (fRef->Charge() < 0);}
70 Bool_t IsNeutral() const {return (!IsPos() && !IsNeg());}
71 Bool_t IsSign(Char_t sign) const {if (sign=='+') return IsPos(); else if (sign=='-') return IsNeg(); else return IsNeutral();}
72 Short_t Charge() const {if (IsPos()) return 1 ; else if (IsNeg()) return -1 ; else return 0 ;}
73 Char_t ChargeChar() const {if (IsPos()) return '+'; else if (IsNeg()) return '-'; else return '0';}
77 Int_t GetPDG(Bool_t abs = kTRUE);
79 Bool_t HasFlag(ULong_t flag);
80 Bool_t SetMass(Double_t mass);
81 Bool_t IsKinkDaughter();
83 // getters which automatically convert refs into allowed types
84 AliESDtrack* GetRefESDtrack() {return dynamic_cast<AliESDtrack*>(fRef);}
85 AliESDv0* GetRefESDv0() {return dynamic_cast<AliESDv0*>(fRef);}
86 AliESDcascade* GetRefESDcascade() {return dynamic_cast<AliESDcascade*>(fRef);}
87 AliAODTrack* GetRefAODtrack() {return dynamic_cast<AliAODTrack*>(fRef);}
88 AliAODv0* GetRefAODv0() {return dynamic_cast<AliAODv0*>(fRef);}
89 AliAODcascade* GetRefAODcascade() {return dynamic_cast<AliAODcascade*>(fRef);}
90 AliMCParticle* GetRefMCtrack() {return dynamic_cast<AliMCParticle*>(fRef);}
91 AliMCParticle* GetRefMCESD() {return dynamic_cast<AliMCParticle*>(fRefMC);}
92 AliAODMCParticle* GetRefMCAOD() {return dynamic_cast<AliAODMCParticle*>(fRefMC);}
94 // check the input type
95 Bool_t IsMC() {if (GetRefMCtrack()) return kTRUE; return kFALSE;}
96 Bool_t IsAOD() {if (GetRefAODtrack() || GetRefAODv0()) return kTRUE; return kFALSE;}
97 Bool_t IsESD() {if (GetRefESDtrack() || GetRefESDv0()) return kTRUE; return kFALSE;}
98 Bool_t IsTrack() {if (GetRefESDtrack() || GetRefAODtrack() || GetRefMCtrack()) return kTRUE; return kFALSE;}
99 Bool_t IsV0() {if (GetRefESDv0() || GetRefAODv0()) return kTRUE; return kFALSE;}
100 Bool_t IsCascade() {if (GetRefESDcascade() || GetRefAODcascade()) return kTRUE; return kFALSE;}
101 ERefType RefType() {if (IsTrack()) return kTrack; if (IsV0()) return kV0; if (IsCascade()) return kCascade; return kNoType;}
105 Bool_t fOK; // internal utility flag which is kFALSE when this object should not be used
106 Int_t fLabel; // GEANT label of corresponding MC
107 Int_t fMotherPDG; // PDG code of mother (makes sense only if fRefMC is defined)
109 TLorentzVector fPrec; // 4-vector filled with track info from default ref (if present)
110 TLorentzVector fPsim; // 4-vector filled with track info from MC ref (if present)
112 AliVParticle *fRef; // reference to reconstructed track in ESD/AOD
113 AliVParticle *fRefMC; // reference to corresponding MC particle
115 ClassDef(AliRsnDaughter, 8)