]>
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" |
32992791 | 22 | #include "AliESDcascade.h" |
4fbb2459 | 23 | #include "AliMCParticle.h" |
a378358c | 24 | |
25 | #include "AliAODTrack.h" | |
26 | #include "AliAODv0.h" | |
32992791 | 27 | #include "AliAODcascade.h" |
ec927a7d | 28 | #include "AliAODMCParticle.h" |
a62a2d82 | 29 | |
2dab9030 | 30 | typedef AliPID::EParticleType EPARTYPE; |
31 | ||
5eb970a4 | 32 | class AliRsnDaughter : public TObject |
a62a2d82 | 33 | { |
06351446 | 34 | public: |
2dab9030 | 35 | |
36 | enum ERefType | |
37 | { | |
38 | kTrack = 0, | |
39 | kV0, | |
32992791 | 40 | kCascade, |
2dab9030 | 41 | kNoType |
aec0ec32 | 42 | }; |
43 | ||
2dab9030 | 44 | AliRsnDaughter(); |
aec0ec32 | 45 | AliRsnDaughter(const AliRsnDaughter ©); |
06351446 | 46 | AliRsnDaughter& operator= (const AliRsnDaughter& copy); |
a378358c | 47 | virtual ~AliRsnDaughter() { /*nothing*/ } |
2dab9030 | 48 | |
a378358c | 49 | // basic getters (for data members) |
32992791 | 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;} | |
2dab9030 | 58 | |
a378358c | 59 | // basic setters (for data members) |
32992791 | 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;} | |
2dab9030 | 66 | |
a378358c | 67 | // charge checkers |
2dab9030 | 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';} | |
a378358c | 74 | |
75 | // utilities | |
32992791 | 76 | void Reset(); |
77 | Int_t GetPDG(Bool_t abs = kTRUE); | |
78 | Int_t GetID(); | |
79 | Bool_t HasFlag(ULong_t flag); | |
80 | Bool_t SetMass(Double_t mass); | |
81 | Bool_t IsKinkDaughter(); | |
5eb970a4 | 82 | |
d0282f3d | 83 | // getters which automatically convert refs into allowed types |
32992791 | 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);} | |
93 | ||
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;} | |
7c2974c8 | 102 | |
06351446 | 103 | private: |
7c2974c8 | 104 | |
a378358c | 105 | Bool_t fOK; // internal utility flag which is kFALSE when this object should not be used |
32992791 | 106 | Int_t fLabel; // GEANT label of corresponding MC |
a378358c | 107 | Int_t fMotherPDG; // PDG code of mother (makes sense only if fRefMC is defined) |
2dab9030 | 108 | |
a378358c | 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) | |
2dab9030 | 111 | |
a378358c | 112 | AliVParticle *fRef; // reference to reconstructed track in ESD/AOD |
113 | AliVParticle *fRefMC; // reference to corresponding MC particle | |
2dab9030 | 114 | |
115 | ClassDef(AliRsnDaughter, 8) | |
a62a2d82 | 116 | }; |
117 | ||
118 | #endif |