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 */
6 //***********************************************************
7 // Class AliAODRecoDecayHF
8 // base class for AOD reconstructed heavy-flavour decays
9 // Author: A.Dainese, andrea.dainese@lnl.infn.it
10 //***********************************************************
13 #include "AliAODRecoDecay.h"
15 class AliAODRecoDecayHF : public AliAODRecoDecay {
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();
30 AliAODRecoDecayHF(const AliAODRecoDecayHF& source);
31 AliAODRecoDecayHF& operator=(const AliAODRecoDecayHF& source);
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()); }
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());}
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);}
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;}}
81 // check if it is like-sign
82 Bool_t IsLikeSign() const;
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
91 ClassDef(AliAODRecoDecayHF,3) // base class for AOD reconstructed
92 // heavy-flavour decays
95 inline void AliAODRecoDecayHF::SetProngIDs(Int_t nIDs,UShort_t *id)
97 if(nIDs!=GetNProngs()) {
98 printf("Wrong number of IDs, must be nProngs\n");
101 if(fProngID) delete [] fProngID;
102 fProngID = new UShort_t[nIDs];
103 for(Int_t i=0;i<nIDs;i++)
108 inline Bool_t AliAODRecoDecayHF::IsLikeSign() const
110 // check if it is like-sign
112 Int_t ndg=GetNDaughters();
114 printf("Daughters not available\n");
117 Int_t chargeDg0 = ((AliAODTrack*)GetDaughter(0))->Charge();
119 for(Int_t i=1; i<ndg; i++) {
120 if(chargeDg0!=((AliAODTrack*)GetDaughter(i))->Charge()) return kFALSE;