]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/RESONANCES/AliRsnDaughter.h
Major upgrade to the package, in order to speed-up the execution and remove some...
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnDaughter.h
index 030a1f6f7cd07ea8bbfefe34f8459ea2541d28f8..dd5eb738c3e58aca97ee4903d80a00fc5b06b4d7 100644 (file)
 #ifndef ALIRSNDAUGHTER_H
 #define ALIRSNDAUGHTER_H
 
-#include <TMath.h>
+#include <TLorentzVector.h>
 
-#include "AliPID.h"
-#include "AliVParticle.h"
 #include "AliESDtrack.h"
 #include "AliAODTrack.h"
+#include "AliESDv0.h"
+#include "AliAODv0.h"
 #include "AliMCParticle.h"
 
-class TParticle;
+typedef AliPID::EParticleType EPARTYPE;
+
 class AliStack;
-class AliMCParticle;
-// class AliESDtrack;
-// class AliESDtrack;
-// class AliAODTrack;
-class AliAODEvent;
+class AliVEvent;
+class AliMCEvent;
 class AliRsnPIDDefESD;
 
 class AliRsnDaughter : public TObject
 {
   public:
-
-    enum EPIDMethod {
-      kNoPID = 0,
-      kRealistic,
-      kPerfect,
-      kMethods
+    
+    enum ERefType
+    {
+      kTrack = 0,
+      kV0,
+      kNoType
     };
 
-    AliRsnDaughter(AliVParticle *ref = 0, TParticle *refMC = 0);
+    AliRsnDaughter();
     AliRsnDaughter(const AliRsnDaughter &copy);
     virtual ~AliRsnDaughter();
     AliRsnDaughter& operator= (const AliRsnDaughter& copy);
-
-    // momentum
-    Double_t Px() const {return fRef->Px();}
-    Double_t Py() const {return fRef->Py();}
-    Double_t Pz() const {return fRef->Pz();}
-    Double_t Pt() const {return fRef->Pt();}
-    Double_t P2() const {return Pt()*Pt() + Pz()*Pz();}
-    Double_t P()  const {return TMath::Sqrt(P2());}
-    Double_t Eta() const {return fRef->Eta();}
-    Double_t Y() const {return fRef->Y();}
-    Double_t Y(Double_t mass) const {return 0.5*TMath::Log((E(mass) + Pz()) / (E(mass) - Pz()));}
-    Double_t E() const {return fRef->E();}
-    Double_t E(Double_t mass) const {return TMath::Sqrt(mass*mass + P2());}
-    Double_t Phi() const {return fRef->Phi();}
-    Double_t Theta() const {return fRef->Theta();}
-    Double_t PhiDeg() const {return TMath::RadToDeg() * Phi();}
-    Double_t ThetaDeg() const {return TMath::RadToDeg() * Theta();}
-    void     RotateP(Double_t angle, Double_t &x, Double_t &y, Bool_t isDegrees = kTRUE) const;
-    Double_t AngleTo(AliRsnDaughter d, Bool_t outInDegrees = kTRUE);
-
-    // DCA vertex
-    Double_t Xv() const {return fRef->Xv();}
-    Double_t Yv() const {return fRef->Yv();}
-    Double_t Zv() const {return fRef->Zv();}
-    Double_t Dr() const {return fDr;}
-    Double_t Dz() const {return fDz;}
-    void     SetDr(Double_t value) {fDr = value;}
-    void     SetDz(Double_t value) {fDz = value;}
-
-    // PID
-    const Double_t        *PID() const {return fRef->PID();}
-    const Double_t        *ComputedWeights() const {return fPID;}
-    Bool_t                 CombineWithPriors(const Double_t* priors, AliRsnPIDDefESD* pidDef = 0x0);
-    AliPID::EParticleType  RealisticPID() const;
-    AliPID::EParticleType  PerfectPID() const;
-    Bool_t                 IsPerfectPID(const AliPID::EParticleType type) const  {return (PerfectPID() == type);}
-    Bool_t                 IsRealisticPID(const AliPID::EParticleType type) const  {return (RealisticPID() == type);}
-    Double_t               PIDProb(AliPID::EParticleType type) const {return PID()[(Int_t)type];}
-    AliPID::EParticleType  PIDType(Double_t &prob) const;
-    AliPID::EParticleType  AssignedPID() const;
-    AliPID::EParticleType  RequiredPID() const {return fReqPID;}
-    void                   SetRequiredPID(AliPID::EParticleType type) {fReqPID = type;}
-
-    // integer parameters
-    Bool_t  IsPos() const {return (fRef->Charge() > 0);}
-    Bool_t  IsNeg() const {return (fRef->Charge() < 0);}
-    Bool_t  IsNeutral() const {return (!IsPos() && !IsNeg());}
-    Bool_t  IsSign(Char_t sign) const { if (sign=='+') return IsPos(); else if (sign=='-') return IsNeg(); else return IsNeutral();}
-    Short_t Charge() const {if (IsPos()) return 1; else if (IsNeg()) return -1; else return 0;}
-    Char_t  ChargeC() const {if (IsPos()) return '+'; else if (IsNeg()) return '-'; else return '0';}
-    Int_t   GetLabel() const {return fRef->GetLabel();}
+    
+    // utilities
+    void    Reset();
+    void    Print(Option_t* const option = "") const;
+    
+    // flags and labels
     Int_t   GetID() const;
-    void    SetStatus(ULong_t value) {fStatus = value;}
-    ULong_t GetStatus() const {return fStatus;}
-    Bool_t  CheckFlag(ULong_t flag) const {return ((fStatus & flag) > 0);}
-    void    SetGood() {fOK = kTRUE;}
+    Int_t   GetLabel() const {return fLabel;}
+    Bool_t  HasFlag(ULong_t flag) const;
+    Bool_t  IsOK() const {return fOK;}
     void    SetBad() {fOK = kFALSE;}
-    Bool_t  IsOK() const { return fOK; }
-    Int_t   PairIndex() {return fPairIndex;}
-    void    SetPairIndex(Int_t value) {fPairIndex = value;}
-
-    // Kinkness
-    Char_t  KinkIndex() const {return fKinkIndex;}
-    Bool_t  IsKinkMother() const {return (fKinkIndex < 0);}
-    Bool_t  IsKinkDaughter() const {return (fKinkIndex > 0);}
-    Bool_t  IsKink() const {return (IsKinkMother() || IsKinkDaughter());}
-    void    SetKink(Char_t kink) {fKinkIndex = kink;}
-    void    SetKinkMother() {fKinkIndex = -1;}
-    void    SetKinkDaughter() {fKinkIndex = 1;}
-    void    SetNoKink() {fKinkIndex = 0;}
-    void    FindKinkIndex(const AliESDtrack* track);
-    void    FindKinkIndex(AliAODEvent*const event);
+    void    SetGood() {fOK = kTRUE;}
+    void    SetLabel(Int_t label) {fLabel = label;}
+
+    // 4-momentum
+    TLorentzVector& P(Bool_t mc = kFALSE) {return (mc ? fPMC : fP);}
+    Bool_t          SetMass(Double_t mass);
+    
+    // charge
+    Bool_t  IsPos()             const {return (fRef->Charge() > 0);}
+    Bool_t  IsNeg()             const {return (fRef->Charge() < 0);}
+    Bool_t  IsNeutral()         const {return (!IsPos() && !IsNeg());}
+    Bool_t  IsSign(Char_t sign) const {if (sign=='+') return IsPos(); else if (sign=='-') return IsNeg(); else return IsNeutral();}
+    Short_t Charge()            const {if (IsPos()) return  1 ; else if (IsNeg()) return -1 ; else return  0 ;}
+    Char_t  ChargeChar()        const {if (IsPos()) return '+'; else if (IsNeg()) return '-'; else return '0';}
 
     // MC info & references
-    AliVParticle*  GetRef() const {return fRef;}
-    AliESDtrack*   GetRefESD() {return dynamic_cast<AliESDtrack*>(fRef);}
-    AliAODTrack*   GetRefAOD() {return dynamic_cast<AliAODTrack*>(fRef);}
-    AliMCParticle* GetRefMC()  {return dynamic_cast<AliMCParticle*>(fRef);}
-    TParticle*     GetParticle() const {return fParticle;}
-    Int_t          GetMotherPDG() const {return fMotherPDG;}
-    void           SetRef(AliVParticle * const ref) {fRef = ref;}
-    void           SetParticle(TParticle * const p) {fParticle = p;}
+    AliVParticle*  GetRef()         const {return fRef;}
+    AliESDtrack*   GetRefESDtrack() const {return dynamic_cast<AliESDtrack*>(fRef);}
+    AliAODTrack*   GetRefAODtrack() const {return dynamic_cast<AliAODTrack*>(fRef);}
+    AliESDv0*      GetRefESDv0()    const {return dynamic_cast<AliESDv0*>(fRef);}
+    AliAODv0*      GetRefAODv0()    const {return dynamic_cast<AliAODv0*>(fRef);}
+    AliMCParticle* GetRefMC()       const {return fRefMC;}
+    TParticle*     GetParticle()    const {if (fRefMC) return fRefMC->Particle(); else return 0x0;}
+    Int_t          GetMotherPDG()   const {return fMotherPDG;}
+    Bool_t         IsAOD()          const {if (GetRefAODtrack() || GetRefAODv0()) return kTRUE; return kFALSE;}
+    Bool_t         IsESD()          const {if (GetRefESDtrack() || GetRefESDv0()) return kTRUE; return kFALSE;}
+    Bool_t         IsTrack()        const {if (GetRefESDtrack() || GetRefAODtrack()) return kTRUE; return kFALSE;}
+    Bool_t         IsV0()           const {if (GetRefESDv0() || GetRefAODv0()) return kTRUE; return kFALSE;}
+    ERefType       RefType()        const {if (IsTrack()) return kTrack; if (IsV0()) return kV0; return kNoType;}
+    void           SetRef(AliVParticle *ref) {fRef = ref;}
+    void           SetRefMC(AliMCParticle *refMC) {fRefMC = refMC;}
     void           SetMotherPDG(Int_t value) {fMotherPDG = value;}
-    void           FindMotherPDG(AliStack *const stack);
-    Double_t       GetMCEnergy(Double_t mass);
-
-    // utilities
-    void          Reset();
-    void          Print(Option_t*const option = "ALL") const;
-
-    // static functions
-    static void                   SetPIDMethod(EPIDMethod method) {fgPIDMethod = method;}
-    static AliPID::EParticleType  InternalType(Int_t pdgCode);
-    static const char*            MethodName(EPIDMethod method);
 
   private:
 
-    Bool_t         fOK;                     // status flag for usability
-    Int_t          fKinkIndex;              // indicator of kinkness of the track
-    TParticle     *fParticle;               // pointer to (eventual) MC information
-    Int_t          fMotherPDG;              // PDG code of mother (if any)
-    ULong_t        fStatus;                 // track status (if available)
-    Int_t          fPairIndex;              // to know if it is member #1 or #2 of the pair (cfr. to PairDef)
-
-    Double_t       fDr;                     // transverse impact parameter
-    Double_t       fDz;                     // longitudinal impact parameter
-    Double_t       fPID[AliPID::kSPECIES];  // PID probabilities
-    AliPID::EParticleType fReqPID;          // PID assigned by pairdef
-
-    AliVParticle  *fRef;                    // reference to read object
-
-    static EPIDMethod fgPIDMethod;          // PID method used for analysis
-
-    ClassDef(AliRsnDaughter, 7)
+    Bool_t         fOK;                // internal utility flag which is kFALSE when this object should not be used
+    Int_t          fLabel;             // GEANT label of corresponding MC (not trivial for V0s)
+    Int_t          fMotherPDG;         // PDG code of mother (makes sense only if fRefMC is defined)
+    
+    TLorentzVector fP;                 // 4-vector filled with track info from default ref (if present)
+    TLorentzVector fPMC;               // 4-vector filled with track info from MC ref (if present)
+    
+    AliVParticle  *fRef;               // reference to track in ESD/AOD/MC (all info are taken from this object)
+    AliMCParticle *fRefMC;             // reference to corresponding MC particle
+
+    ClassDef(AliRsnDaughter, 8)
 };
 
 #endif