]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliAODRecoDecayHF.h
Bug fix (Renu)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAODRecoDecayHF.h
1 #ifndef ALIAODRECODECAYHF_H
2 #define ALIAODRECODECAYHF_H
3 /* Copyright(c) 1998-2006, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 //***********************************************************
7 // Class AliAODRecoDecayHF
8 // base class for AOD reconstructed heavy-flavour decays
9 // Author: A.Dainese, andrea.dainese@lnl.infn.it
10 //***********************************************************
11
12 #include <TRef.h>
13 #include "AliAODRecoDecay.h"
14
15 class AliAODRecoDecayHF : public AliAODRecoDecay {
16
17  public:
18
19   AliAODRecoDecayHF();
20   AliAODRecoDecayHF(AliAODVertex *vtx2,Int_t nprongs,Short_t charge,
21                     Double_t *px,Double_t *py,Double_t *pz,
22                     Double_t *d0,Double_t *d0err);
23   AliAODRecoDecayHF(AliAODVertex *vtx2,Int_t nprongs,Short_t charge,
24                     Double_t *d0,Double_t *d0err);
25   AliAODRecoDecayHF(Double_t vtx1[3],Double_t vtx2[3],
26                     Int_t nprongs,Short_t charge,
27                     Double_t *px,Double_t *py,Double_t *pz,Double_t *d0);
28   virtual ~AliAODRecoDecayHF();
29
30   AliAODRecoDecayHF(const AliAODRecoDecayHF& source);
31   AliAODRecoDecayHF& operator=(const AliAODRecoDecayHF& source); 
32    
33
34   // primary vertex
35   void SetPrimaryVtxRef(TObject *vtx) { fEventPrimaryVtx = vtx; }
36   AliAODVertex* GetPrimaryVtxRef() const { return (AliAODVertex*)(fEventPrimaryVtx.GetObject()); }
37   void SetOwnPrimaryVtx(const AliAODVertex *vtx) { UnsetOwnPrimaryVtx(); fOwnPrimaryVtx = new AliAODVertex(*vtx);}
38   void CheckOwnPrimaryVtx() const 
39     {if(!fOwnPrimaryVtx) printf("fOwnPrimaryVtx not set"); return;}
40   AliAODVertex* GetOwnPrimaryVtx() const {return fOwnPrimaryVtx;}
41   void GetOwnPrimaryVtx(Double_t vtx[3]) const 
42     {CheckOwnPrimaryVtx();fOwnPrimaryVtx->GetPosition(vtx);}
43   void UnsetOwnPrimaryVtx() {if(fOwnPrimaryVtx) {delete fOwnPrimaryVtx; fOwnPrimaryVtx=0;} return;}
44   AliAODVertex* GetPrimaryVtx() const { return (GetOwnPrimaryVtx() ? GetOwnPrimaryVtx() : GetPrimaryVtxRef()); }
45
46   // kinematics & topology
47   Double_t DecayLength() const 
48     { return AliAODRecoDecay::DecayLength(GetPrimaryVtx());}
49   Double_t DecayLengthError() const 
50     { return AliAODRecoDecay::DecayLengthError(GetPrimaryVtx());}
51   Double_t NormalizedDecayLength() const 
52     { return AliAODRecoDecay::NormalizedDecayLength(GetPrimaryVtx());}
53   Double_t DecayLengthXY() const 
54     { return AliAODRecoDecay::DecayLengthXY(GetPrimaryVtx());}
55   Double_t DecayLengthXYError() const 
56     { return AliAODRecoDecay::DecayLengthXYError(GetPrimaryVtx());}
57   Double_t NormalizedDecayLengthXY() const 
58     { return AliAODRecoDecay::NormalizedDecayLengthXY(GetPrimaryVtx());}
59   Double_t Ct(UInt_t pdg) const 
60     { return AliAODRecoDecay::Ct(pdg,GetPrimaryVtx());}
61   Double_t CosPointingAngle() const 
62     { return AliAODRecoDecay::CosPointingAngle(GetPrimaryVtx());}
63   Double_t CosPointingAngleXY() const 
64     { return AliAODRecoDecay::CosPointingAngleXY(GetPrimaryVtx());}
65   Double_t ImpParXY() const 
66     { return AliAODRecoDecay::ImpParXY(GetPrimaryVtx());}
67   Double_t QtProngFlightLine(Int_t ip) const 
68     { return AliAODRecoDecay::QtProngFlightLine(ip,GetPrimaryVtx());}
69   Double_t QlProngFlightLine(Int_t ip) const 
70     { return AliAODRecoDecay::QlProngFlightLine(ip,GetPrimaryVtx());}
71
72   // prongs
73   Double_t Getd0errProng(Int_t ip) const {return fd0err[ip];}
74   Double_t Normalizedd0Prong(Int_t ip) const 
75     {return Getd0Prong(ip)/Getd0errProng(ip);}
76   
77   void SetProngIDs(Int_t nIDs,UShort_t *id);
78   UShort_t GetProngID(Int_t ip) const 
79     {if(fProngID) {return fProngID[ip];} else {return 9999;}}
80
81   // check if it is like-sign
82   Bool_t IsLikeSign() const;
83
84  protected:
85
86   AliAODVertex *fOwnPrimaryVtx; // primary vertex for this candidate
87   TRef          fEventPrimaryVtx; // ref to primary vertex of the event
88   Double_t     *fd0err;  //[fNProngs] error on prongs rphi impact param [cm]
89   UShort_t     *fProngID;  //[fNProngs] track ID of daughters
90
91   ClassDef(AliAODRecoDecayHF,3)  // base class for AOD reconstructed 
92                                  // heavy-flavour decays
93 };
94
95 inline void AliAODRecoDecayHF::SetProngIDs(Int_t nIDs,UShort_t *id) 
96 {
97   if(nIDs!=GetNProngs()) { 
98     printf("Wrong number of IDs, must be nProngs\n");
99     return;
100   }
101   if(fProngID) delete [] fProngID;
102   fProngID = new UShort_t[nIDs];
103   for(Int_t i=0;i<nIDs;i++) 
104     fProngID[i] = id[i]; 
105   return;
106 }
107
108 inline Bool_t AliAODRecoDecayHF::IsLikeSign() const
109 {
110   // check if it is like-sign
111
112   Int_t ndg=GetNDaughters();
113   if(!ndg) {
114     printf("Daughters not available\n");
115     return kFALSE;
116   }
117   Int_t chargeDg0 = ((AliAODTrack*)GetDaughter(0))->Charge();
118
119   for(Int_t i=1; i<ndg; i++) {
120     if(chargeDg0!=((AliAODTrack*)GetDaughter(i))->Charge()) return kFALSE;
121   }
122
123   return kTRUE;
124 }
125
126 #endif
127