X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliAODVertex.h;h=cfb4ceb8ecdf38be73bbcd11fe99c1c07a68cf31;hb=ab37e14c31b5754a9cc8294ea6ed623f79203afd;hp=4133ac3f85edb1030364764116566b7387dadd5d;hpb=cfa5b70c8acf157eeba94a95ac8d0503aa6c7f07;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliAODVertex.h b/STEER/AliAODVertex.h index 4133ac3f85e..cfb4ceb8ecd 100644 --- a/STEER/AliAODVertex.h +++ b/STEER/AliAODVertex.h @@ -17,6 +17,7 @@ #include "AliVVertex.h" #include "AliAODRedCov.h" +#include "AliLog.h" class AliAODVertex : public AliVVertex { @@ -30,19 +31,23 @@ class AliAODVertex : public AliVVertex { Double_t chi2perNDF = -999., TObject *parent = 0x0, Short_t id=-1, - Char_t vtype=kUndef); + Char_t vtype=kUndef, + Int_t nprong = 0); AliAODVertex(const Float_t *position, const Float_t *covMatrix=0x0, Double_t chi2perNDF = -999., TObject *parent = 0x0, Short_t id=-1, - Char_t vtype=kUndef); + Char_t vtype=kUndef, + Int_t nprong = 0); AliAODVertex(const Double_t *position, Double_t chi2perNDF, - Char_t vtype=kUndef); + Char_t vtype=kUndef, + Int_t nprong = 0); AliAODVertex(const Float_t *position, Double_t chi2perNDF, - Char_t vtype=kUndef); + Char_t vtype=kUndef, + Int_t nprong = 0); virtual ~AliAODVertex(); AliAODVertex(const AliAODVertex& vtx); @@ -96,12 +101,12 @@ class AliAODVertex : public AliVVertex { void AddDaughter(TObject *daughter); void RemoveDaughter(TObject *daughter) { fDaughters.Remove(daughter); } - void RemoveDaughters() { fDaughters.Clear(); } - TObject* GetDaughter(Int_t i) { return fDaughters.At(i); } + void RemoveDaughters() { fDaughters.Clear(); if(fProngs) {delete [] fProngs; fProngs=0; MakeProngs(); fIprong=0;} } + TObject* GetDaughter(Int_t i); Bool_t HasDaughter(TObject *daughter) const; - Int_t GetNDaughters() const { return fDaughters.GetEntriesFast(); } + Int_t GetNDaughters() const; Int_t GetNContributors() const; - + void SetNContributors(Int_t nc) {fNContributors = nc;} // covariance matrix elements after rotation by phi around z-axis // and, then, by theta around new y-axis Double_t RotatedCovMatrixXX(Double_t phi = 0., Double_t theta = 0.) const; @@ -116,22 +121,50 @@ class AliAODVertex : public AliVVertex { Double_t ErrorDistanceToVertex(AliAODVertex *vtx) const; Double_t DistanceXYToVertex(AliAODVertex *vtx) const; Double_t ErrorDistanceXYToVertex(AliAODVertex *vtx) const; - + void PrintIndices() const; void Print(Option_t* option = "") const; - - private : - - Double32_t fPosition[3]; // vertex position - Double32_t fChi2perNDF; // chi2/NDF of vertex fit - Short_t fID; // vertex ID; corresponds to the array index of the appropriate ESD container - Char_t fType; // vertex type - - AliAODRedCov<3> *fCovMatrix; // vertex covariance matrix; values of and below the diagonal - TRef fParent; // reference to the parent particle - TRefArray fDaughters; // references to the daughter particles - - ClassDef(AliAODVertex,4); + private: + void MakeProngs() {if (fNprong > 0) {fProngs = new TRef[fNprong]; fIprong=0;}} + + private: + + Double32_t fPosition[3]; // vertex position + Double32_t fChi2perNDF; // chi2/NDF of vertex fit + Short_t fID; // vertex ID; corresponds to the array index of the appropriate ESD container + Char_t fType; // vertex type + Int_t fNprong; // number of prongs + Int_t fIprong; //!index of prong + Int_t fNContributors; // Number of contributors for SPD vertex + AliAODRedCov<3> *fCovMatrix; // vertex covariance matrix; values of and below the diagonal + TRef fParent; // reference to the parent particle + TRefArray fDaughters; // references to the daughter particles + TRef *fProngs; //[fNprong] alternative daughters for n-prong vertex + + ClassDef(AliAODVertex, 6); }; +inline Int_t AliAODVertex::GetNDaughters() const +{ + if (!fProngs) { + return fDaughters.GetEntriesFast(); + } else { + return fNprong; + } +} + +inline TObject* AliAODVertex::GetDaughter(Int_t i) +{ + if (!fProngs) { + return fDaughters.At(i); + } else { + if (i < fNprong) { + return fProngs[i].GetObject(); + } else { + AliWarning("Daughter index out of range !\n"); + return 0; + } + } +} + #endif