Adding the macros and the class for 2-dim unfolding (Ydalia)
[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 //***********************************************************
7 // Class AliAODRecoCascadeHF
8 // base class for AOD reconstructed heavy-flavour cascade decays
9 // (D*->D0pi, ...)
10 // The convention is: prong 0 is the bachelor, prong 1 is the "V0"
11 //
12 // Author: X-M. Zhang, zhangxm@ccnu.iop.edu.cn
13 //***********************************************************
14
15 #include <TRef.h>
16 #include <TRefArray.h>
17 #include "AliAODVertex.h"
18 #include "AliAODRecoDecayHF2Prong.h"
19
20 class AliAODRecoCascadeHF : public AliAODRecoDecayHF2Prong {
21
22  public:
23
24   AliAODRecoCascadeHF();
25   AliAODRecoCascadeHF(AliAODVertex *vtx2, Short_t charge,
26                       Double_t *px, Double_t *py, Double_t *pz,
27                       Double_t *d0, Double_t *d0err, Double_t dca);
28   AliAODRecoCascadeHF(AliAODVertex *vtx2, Short_t charge,
29                       Double_t *d0, Double_t *d0err, Double_t dca);
30   virtual ~AliAODRecoCascadeHF();
31
32   AliAODRecoCascadeHF(const AliAODRecoCascadeHF& source);
33   AliAODRecoCascadeHF& operator=(const AliAODRecoCascadeHF& source);
34
35   // 2prong (D0 for Dstar)
36   void Set2Prong(TObject *the2Prong) { f2Prong = the2Prong; }
37   void Check2Prong() const { if(!f2Prong.GetObject()) printf("f2Prong not set\n"); return; }
38   // GetDaughter(1) doesn't work because the V0 and the bachelor have different 
39   // process id and they can't go to the same TRefArray
40   AliAODRecoDecayHF2Prong* Get2Prong() const { if(GetDaughter(1)) { return (AliAODRecoDecayHF2Prong*)GetDaughter(1); } else { return (AliAODRecoDecayHF2Prong*)f2Prong.GetObject(); } }
41   void Unset2Prong () { f2Prong=0; return; }
42
43   // Bachelor (soft pion for Dstar)
44   AliAODTrack* GetBachelor() const {return (AliAODTrack*)GetDaughter(0);}
45
46   // D*->D0pi, D0->Kpi
47   Double_t EDstar() const {return E(413);} 
48   Double_t YDstar() const {return Y(413);} 
49   Bool_t   SelectDstar(const Double_t *cutsDstar,const Double_t *cutsD0,Bool_t testD0=kTRUE) const;
50   Double_t InvMassD0() const {return (Charge()>0 ? Get2Prong()->InvMassD0() : Get2Prong()->InvMassD0bar());}
51   Double_t InvMassDstarKpipi() const;
52   Double_t DeltaInvMass() const {return (InvMassDstarKpipi()-InvMassD0());}
53
54  protected:
55
56
57   TRef f2Prong; // the "V0" (e.g. D0->Kpi)
58
59   ClassDef(AliAODRecoCascadeHF, 1); // heavy-flavour cascade class
60 };
61
62 #endif