]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/RESONANCES/AliRsnDaughter.h
Update of package classes.
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnDaughter.h
1 //
2 // Class AliRsnDaughter
3 //
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.
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.
10 //
11 // authors: A. Pulvirenti (alberto.pulvirenti@ct.infn.it)
12 //          M. Vala (martin.vala@cern.ch)
13 //
14
15 #ifndef ALIRSNDAUGHTER_H
16 #define ALIRSNDAUGHTER_H
17
18 #include <TLorentzVector.h>
19
20 #include "AliESDtrack.h"
21 #include "AliESDv0.h"
22 #include "AliESDcascade.h"
23 #include "AliMCParticle.h"
24
25 #include "AliAODTrack.h"
26 #include "AliAODv0.h"
27 #include "AliAODcascade.h"
28 #include "AliAODMCParticle.h"
29
30 typedef AliPID::EParticleType EPARTYPE;
31
32 class AliRsnDaughter : public TObject
33 {
34   public:
35     
36     enum ERefType
37     {
38       kTrack = 0,
39       kV0,
40       kCascade,
41       kNoType
42     };
43
44     AliRsnDaughter();
45     AliRsnDaughter(const AliRsnDaughter &copy);
46     AliRsnDaughter& operator= (const AliRsnDaughter& copy);
47     virtual ~AliRsnDaughter() { /*nothing*/ }
48     
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;}
58     
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;}
66     
67     // charge checkers
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';}
74     
75     // utilities
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();
82
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);}
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;}
102
103   private:
104
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)
108     
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)
111     
112     AliVParticle  *fRef;         // reference to reconstructed track in ESD/AOD
113     AliVParticle  *fRefMC;       // reference to corresponding MC particle
114
115     ClassDef(AliRsnDaughter, 8)
116 };
117
118 #endif