]>
Commit | Line | Data |
---|---|---|
e2bafbbc | 1 | // |
06351446 | 2 | // Class AliRsnDaughter |
3 | // | |
a378358c | 4 | // Interface to candidate daughters of a resonance (tracks or V0s). |
5 | // It contains two pointers to two AliVParticle-derived objects. | |
5eb970a4 | 6 | // for the computations required during resonance analysis. |
7 | // --- | |
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. | |
c37c6481 | 10 | // |
e0baff8c | 11 | // authors: A. Pulvirenti (alberto.pulvirenti@ct.infn.it) |
12 | // M. Vala (martin.vala@cern.ch) | |
e2bafbbc | 13 | // |
a62a2d82 | 14 | |
15 | #ifndef ALIRSNDAUGHTER_H | |
16 | #define ALIRSNDAUGHTER_H | |
17 | ||
2dab9030 | 18 | #include <TLorentzVector.h> |
7c2974c8 | 19 | |
4fbb2459 | 20 | #include "AliESDtrack.h" |
2dab9030 | 21 | #include "AliESDv0.h" |
4fbb2459 | 22 | #include "AliMCParticle.h" |
a378358c | 23 | |
24 | #include "AliAODTrack.h" | |
25 | #include "AliAODv0.h" | |
ec927a7d | 26 | #include "AliAODMCParticle.h" |
a62a2d82 | 27 | |
2dab9030 | 28 | typedef AliPID::EParticleType EPARTYPE; |
29 | ||
5eb970a4 | 30 | class AliRsnDaughter : public TObject |
a62a2d82 | 31 | { |
06351446 | 32 | public: |
2dab9030 | 33 | |
34 | enum ERefType | |
35 | { | |
36 | kTrack = 0, | |
37 | kV0, | |
38 | kNoType | |
aec0ec32 | 39 | }; |
40 | ||
2dab9030 | 41 | AliRsnDaughter(); |
aec0ec32 | 42 | AliRsnDaughter(const AliRsnDaughter ©); |
06351446 | 43 | AliRsnDaughter& operator= (const AliRsnDaughter& copy); |
a378358c | 44 | virtual ~AliRsnDaughter() { /*nothing*/ } |
2dab9030 | 45 | |
a378358c | 46 | // basic getters (for data members) |
47 | Bool_t IsOK() const {return fOK;} | |
48 | Int_t GetLabel() const {return fLabel;} | |
49 | Int_t GetMotherPDG() const {return fMotherPDG;} | |
50 | TLorentzVector& Prec() {return fPrec;} | |
51 | TLorentzVector& Psim() {return fPsim;} | |
52 | TLorentzVector& P(Bool_t mc = kFALSE) {return (mc ? fPsim : fPrec);} | |
53 | AliVParticle* GetRef() {return fRef;} | |
54 | AliVParticle* GetRefMC() {return fRefMC;} | |
2dab9030 | 55 | |
a378358c | 56 | // basic setters (for data members) |
57 | void SetBad() {fOK = kFALSE;} | |
58 | void SetGood() {fOK = kTRUE;} | |
59 | void SetLabel(Int_t label) {fLabel = label;} | |
60 | void SetMotherPDG(Int_t value) {fMotherPDG = value;} | |
61 | void SetRef(AliVParticle *p) {fRef = p;} | |
62 | void SetRefMC(AliVParticle *p = 0x0) {fRefMC = p;} | |
2dab9030 | 63 | |
a378358c | 64 | // charge checkers |
2dab9030 | 65 | Bool_t IsPos() const {return (fRef->Charge() > 0);} |
66 | Bool_t IsNeg() const {return (fRef->Charge() < 0);} | |
67 | Bool_t IsNeutral() const {return (!IsPos() && !IsNeg());} | |
68 | Bool_t IsSign(Char_t sign) const {if (sign=='+') return IsPos(); else if (sign=='-') return IsNeg(); else return IsNeutral();} | |
69 | Short_t Charge() const {if (IsPos()) return 1 ; else if (IsNeg()) return -1 ; else return 0 ;} | |
70 | Char_t ChargeChar() const {if (IsPos()) return '+'; else if (IsNeg()) return '-'; else return '0';} | |
a378358c | 71 | |
72 | // utilities | |
73 | void Reset(); | |
74 | Int_t GetPDG(Bool_t abs = kTRUE); | |
75 | Int_t GetID(); | |
76 | Bool_t HasFlag(ULong_t flag); | |
77 | Bool_t SetMass(Double_t mass); | |
5eb970a4 | 78 | |
d0282f3d | 79 | // getters which automatically convert refs into allowed types |
a378358c | 80 | AliMCParticle* GetRefMCtrack() {return dynamic_cast<AliMCParticle*>(fRef);} |
81 | AliESDtrack* GetRefESDtrack() {return dynamic_cast<AliESDtrack*>(fRef);} | |
82 | AliAODTrack* GetRefAODtrack() {return dynamic_cast<AliAODTrack*>(fRef);} | |
83 | AliESDv0* GetRefESDv0() {return dynamic_cast<AliESDv0*>(fRef);} | |
84 | AliAODv0* GetRefAODv0() {return dynamic_cast<AliAODv0*>(fRef);} | |
85 | AliMCParticle* GetRefMCESD() {return dynamic_cast<AliMCParticle*>(fRefMC);} | |
86 | AliAODMCParticle* GetRefMCAOD() {return dynamic_cast<AliAODMCParticle*>(fRefMC);} | |
87 | Bool_t IsMC() {if (GetRefMCtrack()) return kTRUE; return kFALSE;} | |
88 | Bool_t IsAOD() {if (GetRefAODtrack() || GetRefAODv0()) return kTRUE; return kFALSE;} | |
89 | Bool_t IsESD() {if (GetRefESDtrack() || GetRefESDv0()) return kTRUE; return kFALSE;} | |
90 | Bool_t IsTrack() {if (GetRefESDtrack() || GetRefAODtrack() || GetRefMCtrack()) return kTRUE; return kFALSE;} | |
91 | Bool_t IsV0() {if (GetRefESDv0() || GetRefAODv0()) return kTRUE; return kFALSE;} | |
92 | ERefType RefType() {if (IsTrack()) return kTrack; if (IsV0()) return kV0; return kNoType;} | |
7c2974c8 | 93 | |
06351446 | 94 | private: |
7c2974c8 | 95 | |
a378358c | 96 | Bool_t fOK; // internal utility flag which is kFALSE when this object should not be used |
97 | Int_t fLabel; // GEANT label of corresponding MC (not trivial for V0s) | |
98 | Int_t fMotherPDG; // PDG code of mother (makes sense only if fRefMC is defined) | |
2dab9030 | 99 | |
a378358c | 100 | TLorentzVector fPrec; // 4-vector filled with track info from default ref (if present) |
101 | TLorentzVector fPsim; // 4-vector filled with track info from MC ref (if present) | |
2dab9030 | 102 | |
a378358c | 103 | AliVParticle *fRef; // reference to reconstructed track in ESD/AOD |
104 | AliVParticle *fRefMC; // reference to corresponding MC particle | |
2dab9030 | 105 | |
106 | ClassDef(AliRsnDaughter, 8) | |
a62a2d82 | 107 | }; |
108 | ||
109 | #endif |