]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliAODRecoCascadeHF.h
7656380eadc1cf7a5682fdb4039ee0b24da4d0eb
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAODRecoCascadeHF.h
1 #ifndef ALIAODRECOCASCADEHF_H
2 #define ALIAODRECOCASCADEHF_H
3 /* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */ 
7
8 //***********************************************************
9 // Class AliAODRecoCascadeHF
10 // base class for AOD reconstructed heavy-flavour cascade decays
11 // (D*->D0pi, ...)
12 // The convention is: prong 0 is the bachelor, prong 1 is the "V0"
13 //
14 // Author: X-M. Zhang, zhangxm@iopp.ccnu.edu.cn
15 //***********************************************************
16
17 #include <TRef.h>
18 #include <TRefArray.h>
19 #include <TClonesArray.h>
20 #include <TClass.h>
21 #include "AliAODVertex.h"
22 #include "AliAODv0.h"
23 #include "AliAODRecoDecayHF2Prong.h"
24
25 class AliAODRecoCascadeHF : public AliAODRecoDecayHF2Prong {
26
27  public:
28
29   AliAODRecoCascadeHF();
30   AliAODRecoCascadeHF(AliAODVertex *vtx2, Short_t charge,
31                       Double_t *px, Double_t *py, Double_t *pz,
32                       Double_t *d0, Double_t *d0err, Double_t dca);
33   AliAODRecoCascadeHF(AliAODVertex *vtx2, Short_t charge,
34                       Double_t *d0, Double_t *d0err, Double_t dca);
35   virtual ~AliAODRecoCascadeHF();
36
37   AliAODRecoCascadeHF(const AliAODRecoCascadeHF& source);
38   AliAODRecoCascadeHF& operator=(const AliAODRecoCascadeHF& source);
39
40   // 2prong (D0 for Dstar)
41   AliAODRecoDecayHF2Prong* Get2Prong() const {
42     if(!GetDaughter(1)) return 0;
43     if ( ! ((AliAODRecoDecay*)GetDaughter(1))->IsA()->InheritsFrom("AliAODRecoDecayHF2Prong") ){
44       AliWarning("Object is not of type AliAODRecoDecayHF2Prong");
45       return 0;
46     }
47     return (AliAODRecoDecayHF2Prong*)GetDaughter(1);
48   }
49
50   // Bachelor (soft pion for Dstar)
51   AliAODTrack* GetBachelor() const {return (AliAODTrack*)GetDaughter(0);}
52
53   // v0 (Ks or Lambda for Lambda_c)
54   AliAODv0* Getv0() const {
55     if ( ! ((AliAODRecoDecay*)GetDaughter(1))->IsA()->InheritsFrom("AliAODv0") ){
56        AliWarning("Object is not of type v0");
57        return 0;
58       }
59     return (AliAODv0*)GetDaughter(1);
60     }
61
62   // Get v0 positive track
63   AliAODTrack* Getv0PositiveTrack() const { return  (AliAODTrack*)Getv0()->GetDaughter(0);  }
64   // Get v0 negative track
65   AliAODTrack* Getv0NegativeTrack() const { return  (AliAODTrack*)Getv0()->GetDaughter(1);  }
66
67   // D*->D0pi, D0->Kpi
68   Double_t EDstar() const {return E(413);} 
69   Double_t YDstar() const {return Y(413);} 
70   Bool_t   SelectDstar(const Double_t *cutsDstar,const Double_t *cutsD0,Bool_t testD0=kTRUE) const;
71   Double_t InvMassD0() const {return (Charge()>0 ? Get2Prong()->InvMassD0() : Get2Prong()->InvMassD0bar());}
72   Double_t InvMassDstarKpipi() const;
73   Double_t DeltaInvMass() const {return (InvMassDstarKpipi()-InvMassD0());}
74   Double_t AngleD0dkpPisoft() const;
75   Bool_t   TrigonometricalCut() const;
76
77   // Lc invariant mass
78   Double_t InvMassLctoK0sP() const {
79     UInt_t pdg[2]={2212,310}; return InvMass(2,pdg);
80   }
81   Double_t InvMassLctoLambdaPi() const {
82     UInt_t pdg[2]={211,3122}; return InvMass(2,pdg);
83   }
84   Bool_t SelectLctoV0(const Double_t *cutsLctoV0, Bool_t okLck0sp, Bool_t okLcLpi) const;
85
86   Int_t MatchToMC(Int_t pdgabs,Int_t pdgabs2prong,
87                   Int_t *pdgDg,Int_t *pdgDg2prong,
88                   TClonesArray *mcArray) const;
89
90  protected:
91
92   ClassDef(AliAODRecoCascadeHF, 2); // heavy-flavour cascade class
93 };
94
95 #endif