X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliAODVertex.h;h=ea1d154826001e32fd663637d0e4a1e700cfc585;hb=8b26452de28c64f8c3abbb1103d12fcf002a9005;hp=385b131196cc79cad25f7e1e447d0107884f40bb;hpb=9f7c531f7ae9197771e51b674602c73a9bf07303;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliAODVertex.h b/STEER/AliAODVertex.h index 385b131196c..ea1d1548260 100644 --- a/STEER/AliAODVertex.h +++ b/STEER/AliAODVertex.h @@ -8,14 +8,18 @@ //------------------------------------------------------------------------- // AOD vertex base class // Author: Markus Oldenburg, CERN +// Inheritance from AliVVertex: A. Dainese //------------------------------------------------------------------------- -#include #include #include #include -class AliAODVertex : public TObject { +#include "AliVVertex.h" +#include "AliAODRedCov.h" +#include "AliLog.h" + +class AliAODVertex : public AliVVertex { public : @@ -24,20 +28,26 @@ class AliAODVertex : public TObject { AliAODVertex(); AliAODVertex(const Double_t *position, const Double_t *covMatrix=0x0, - Double_t chi2 = -999., + Double_t chi2perNDF = -999., TObject *parent = 0x0, - Char_t vtype=kUndef); - AliAODVertex(const Float_t *position, - const Float_t *covMatrix=0x0, - Double_t chi2 = -999., - TObject *parent = 0x0, - Char_t vtype=kUndef); + Short_t id=-1, + 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, + Int_t nprong = 0); AliAODVertex(const Double_t *position, - Double_t chi2, - Char_t vtype=kUndef); + Double_t chi2perNDF, + Char_t vtype=kUndef, + Int_t nprong = 0); AliAODVertex(const Float_t *position, - Double_t chi2, - Char_t vtype=kUndef); + Double_t chi2perNDF, + Char_t vtype=kUndef, + Int_t nprong = 0); virtual ~AliAODVertex(); AliAODVertex(const AliAODVertex& vtx); @@ -50,41 +60,52 @@ class AliAODVertex : public TObject { template void SetPosition(T *pos) { fPosition[0] = pos[0]; fPosition[1] = pos[1]; fPosition[2] = pos[2]; } - void SetChi2(Double_t chi2) { fChi2 = chi2; } + void SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; } void SetParent(TObject *parent) { fParent = parent; } - Double_t GetX() const { return fPosition[0]; } - Double_t GetY() const { return fPosition[1]; } - Double_t GetZ() const { return fPosition[2]; } + Double_t GetX() const { return fPosition[0]; } + Double_t GetY() const { return fPosition[1]; } + Double_t GetZ() const { return fPosition[2]; } + void GetXYZ(Double_t position[3]) const + {position[0]=fPosition[0]; position[1]=fPosition[1]; position[2]=fPosition[2];} template void GetPosition(T *pos) const {pos[0]=fPosition[0]; pos[1]=fPosition[1]; pos[2]=fPosition[2];} template void SetCovMatrix(const T *covMatrix) { - if(!fCovMatrix) fCovMatrix=new AliAODVtxCov(); + if(!fCovMatrix) fCovMatrix=new AliAODRedCov<3>(); fCovMatrix->SetCovMatrix(covMatrix);} template Bool_t GetCovMatrix(T *covMatrix) const { if(!fCovMatrix) return kFALSE; fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;} + void GetCovarianceMatrix(Double_t covmatrix[6]) const + {GetCovMatrix(covmatrix);} void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;} template void GetSigmaXYZ(T *sigma) const; - Double_t GetChi2() const { return fChi2; } - Double_t GetChi2perNDF() const - { return fChi2/(2.*fDaughters.GetEntriesFast()-3.); } + Double_t GetChi2perNDF() const { return fChi2perNDF; } + Double_t GetChi2() const { return fChi2perNDF*(Double_t)GetNDF(); } + Int_t GetNDF() const { return 2*GetNContributors()-3; } - Char_t GetVtxType() const { return fType; } - void GetVtxType(Char_t vtype) { fType=vtype; } + Short_t GetID() const { return fID; } + void SetID(Short_t id) { fID=id; } + + Char_t GetType() const { return fType; } + void SetType(AODVtx_t vtype) { fType=vtype; } TObject* GetParent() const { return fParent.GetObject(); } Bool_t HasParent(TObject *parent) const { return (fParent.GetObject() == parent) ? kTRUE : kFALSE; } - void AddDaughter(TObject *daughter) { fDaughters.Add(daughter);} + void AddDaughter(TObject *daughter); void RemoveDaughter(TObject *daughter) { fDaughters.Remove(daughter); } + 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; + Int_t GetNContributors() const; // covariance matrix elements after rotation by phi around z-axis // and, then, by theta around new y-axis @@ -103,46 +124,46 @@ class AliAODVertex : public TObject { void PrintIndices() const; void Print(Option_t* option = "") const; - - class AliAODVtxCov { - - // - // Class containing the covariance matrix for the vertex - // - // X Y Z - // - // X fDiag[ 0] - // - // Y fOdia[ 0] fDiag[ 1] - // - // Z fOdia[ 1] fOdia[ 2] fDiag[ 2] - // - // - - public: - AliAODVtxCov() {} - virtual ~AliAODVtxCov() {} - template void GetCovMatrix(T *cmat) const; - template void SetCovMatrix(T *cmat); - - private: - Double32_t fDiag[3]; // Diagonal elements - Double32_t fODia[3]; // [-1, 1,8] 8 bit precision for off diagonal elements - - ClassDef(AliAODVertex::AliAODVtxCov,1) - - }; - - private : - - Double32_t fPosition[3]; // vertex position - Double32_t fChi2; // chi2 of vertex fit - AliAODVtxCov *fCovMatrix; // vertex covariance matrix; values of and below the diagonal - TRef fParent; // reference to the parent particle - TRefArray fDaughters; // references to the daughter particles - Char_t fType; // Vertex type - - ClassDef(AliAODVertex,1); + 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 + 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, 5); }; +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