LCOV - code coverage report
Current view: top level - STEER/AOD - AliAODVertex.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 14 49 28.6 %
Date: 2016-06-14 17:26:59 Functions: 13 44 29.5 %

          Line data    Source code
       1             : #ifndef ALIAODVERTEX_H
       2             : #define ALIAODVERTEX_H
       3             : /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
       4             :  * See cxx source for full Copyright notice                               */
       5             : 
       6             : /* $Id$ */
       7             : 
       8             : //-------------------------------------------------------------------------
       9             : //     AOD vertex base class
      10             : //     Author: Markus Oldenburg, CERN
      11             : //     Inheritance from AliVVertex: A. Dainese
      12             : //-------------------------------------------------------------------------
      13             : 
      14             : #include <TRef.h>
      15             : #include <TRefArray.h>
      16             : #include <TMath.h>
      17             : 
      18             : #include "AliVVertex.h"
      19             : #include "AliAODRedCov.h"
      20             : #include "AliLog.h"
      21             : 
      22             : class AliAODVertex : public AliVVertex {
      23             : 
      24             :  public :
      25             : 
      26             :   enum AODVtx_t {kUndef=-1, kPrimary, kKink, kV0, kCascade, kMulti, kMainSPD, kPileupSPD, kPileupTracks,kMainTPC};
      27             : 
      28             :   AliAODVertex();
      29             :   AliAODVertex(const Double_t *position, 
      30             :                const Double_t *covMatrix=0x0,
      31             :                Double_t chi2perNDF = -999.,
      32             :                TObject *parent = 0x0,
      33             :                Short_t id=-1,
      34             :                Char_t vtype=kUndef,
      35             :                Int_t nprong = 0);
      36             :   AliAODVertex(const Float_t *position, 
      37             :                const Float_t *covMatrix=0x0,
      38             :                Double_t chi2perNDF = -999.,
      39             :                TObject *parent = 0x0,
      40             :                Short_t id=-1,
      41             :                Char_t vtype=kUndef,
      42             :                Int_t nprong = 0);
      43             :     AliAODVertex(const Double_t *position, 
      44             :                  Double_t chi2perNDF,
      45             :                  Char_t vtype=kUndef,
      46             :                  Int_t nprong = 0);
      47             :     AliAODVertex(const Float_t *position, 
      48             :                  Double_t chi2perNDF,
      49             :                  Char_t vtype=kUndef,
      50             :                  Int_t nprong = 0);
      51             : 
      52             :   virtual ~AliAODVertex();
      53             :   AliAODVertex(const AliAODVertex& vtx); 
      54             :   AliAODVertex& operator=(const AliAODVertex& vtx);
      55             : 
      56             :   virtual AliAODVertex* CloneWithoutRefs() const;
      57             :   
      58           0 :   void     SetX(Double_t x) { fPosition[0] = x; }
      59           0 :   void     SetY(Double_t y) { fPosition[1] = y; }
      60           0 :   void     SetZ(Double_t z) { fPosition[2] = z; }
      61           0 :   void     SetPosition(Double_t x, Double_t y, Double_t z) { fPosition[0] = x; fPosition[1] = y; fPosition[2] = z; }
      62             :   template <class T> void SetPosition(T *pos)
      63          88 :     { fPosition[0] = pos[0]; fPosition[1] = pos[1]; fPosition[2] = pos[2]; }
      64             : 
      65           0 :   void     SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; }
      66             : 
      67           0 :   void     SetParent(TObject *parent) { fParent = parent; }
      68             : 
      69          16 :   Double_t GetX() const { return fPosition[0]; }
      70          16 :   Double_t GetY() const { return fPosition[1]; }
      71          16 :   Double_t GetZ() const { return fPosition[2]; }
      72             :   void     GetXYZ(Double_t position[3]) const 
      73           0 :     {position[0]=fPosition[0]; position[1]=fPosition[1]; position[2]=fPosition[2];}
      74             :   template <class T> void GetPosition(T *pos) const
      75           0 :     {pos[0]=fPosition[0]; pos[1]=fPosition[1]; pos[2]=fPosition[2];}
      76             : 
      77             :   template <class T> void SetCovMatrix(const T *covMatrix) {
      78         160 :     if(!fCovMatrix) fCovMatrix=new AliAODRedCov<3>();
      79          40 :     fCovMatrix->SetCovMatrix(covMatrix);}
      80             : 
      81             :   template <class T> Bool_t GetCovMatrix(T *covMatrix) const {
      82          16 :     if(!fCovMatrix) return kFALSE;
      83          16 :     fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
      84             : 
      85             :   void GetCovarianceMatrix(Double_t covmatrix[6]) const 
      86          16 :                     {GetCovMatrix(covmatrix);}
      87           0 :   void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
      88             : 
      89             :   template <class T> void     GetSigmaXYZ(T *sigma) const;
      90             : 
      91           0 :   Double_t GetChi2perNDF() const { return fChi2perNDF; }
      92           0 :   Double_t GetChi2() const { return fChi2perNDF*(Double_t)GetNDF(); }
      93           0 :   Int_t    GetNDF() const { return 2*GetNContributors()-3; }
      94             : 
      95           0 :   Short_t  GetID() const { return fID; }
      96           0 :   void     SetID(Short_t id) { fID=id; }
      97             : 
      98         264 :   Char_t   GetType() const { return fType; }
      99           0 :   void     SetType(AODVtx_t vtype) { fType=vtype; }
     100             : 
     101           0 :   TObject* GetParent() const   { return fParent.GetObject(); }
     102           0 :   Bool_t   HasParent(TObject *parent) const { return (fParent.GetObject() == parent) ? kTRUE : kFALSE; }
     103             : 
     104             :   void     AddDaughter(TObject *daughter);
     105           0 :   void     RemoveDaughter(TObject *daughter) { fDaughters.Remove(daughter); }
     106           0 :   void     RemoveDaughters() { fDaughters.Clear(); if(fProngs) {delete [] fProngs; fProngs=0; MakeProngs(); fIprong=0;} }
     107             :   TObject* GetDaughter(Int_t i); 
     108             :   Bool_t   HasDaughter(TObject *daughter) const;
     109             :   Int_t    GetNDaughters() const;
     110             :   Int_t    GetNContributors() const;
     111          32 :   void     SetNContributors(Int_t nc) {fNContributors = nc;}
     112             :   // covariance matrix elements after rotation by phi around z-axis 
     113             :   // and, then, by theta around new y-axis
     114             :   Double_t  RotatedCovMatrixXX(Double_t phi = 0., Double_t theta = 0.) const;
     115             :   Double_t  RotatedCovMatrixXY(Double_t phi = 0., Double_t theta = 0.) const;
     116             :   Double_t  RotatedCovMatrixYY(Double_t phi = 0.) const;
     117             :   Double_t  RotatedCovMatrixXZ(Double_t phi = 0., Double_t theta = 0.) const;
     118             :   Double_t  RotatedCovMatrixYZ(Double_t phi = 0., Double_t theta = 0.) const;
     119             :   Double_t  RotatedCovMatrixZZ(Double_t phi = 0., Double_t theta = 0.) const;
     120             : 
     121             :   template <class T, class P> void     PhiAndThetaToVertex(AliAODVertex *vtx, P &phi, T &theta) const;
     122             :   Double_t  Distance2ToVertex(const AliAODVertex *vtx) const;
     123             :   Double_t  DistanceToVertex(AliAODVertex *vtx) const 
     124           0 :      {return TMath::Sqrt(Distance2ToVertex(vtx));}
     125             :   Double_t  DistanceXY2ToVertex(const AliAODVertex *vtx) const;
     126             :   Double_t  DistanceXYToVertex(AliAODVertex *vtx) const 
     127           0 :      {return TMath::Sqrt(DistanceXY2ToVertex(vtx));}
     128             :   Double_t  Error2DistanceToVertex(AliAODVertex *vtx) const;
     129             :   Double_t  ErrorDistanceToVertex(AliAODVertex *vtx) const
     130           0 :      {return TMath::Sqrt(Error2DistanceToVertex(vtx));}
     131             :   Double_t  Error2DistanceXYToVertex(AliAODVertex *vtx) const;
     132             :   Double_t  ErrorDistanceXYToVertex(AliAODVertex *vtx) const
     133           0 :      {return TMath::Sqrt(Error2DistanceXYToVertex(vtx));}
     134             :   
     135             :   void     PrintIndices() const;
     136             :   void     Print(Option_t* option = "") const;
     137             : 
     138             :   const char* AsString() const;
     139             :   
     140             :   static const char* GetTypeName(AODVtx_t type);
     141          16 :   void     SetBC(Int_t bc)               {fBCID = bc;}
     142           0 :   Int_t    GetBC()              const    {return fBCID;}  
     143             : private:
     144         132 :   void     MakeProngs() {if (fNprong > 0) {fProngs = new TRef[fNprong]; fIprong=0;}}
     145             :           
     146             :  private:
     147             : 
     148             :   Double32_t      fPosition[3];   // vertex position
     149             :   Double32_t      fChi2perNDF;    // chi2/NDF of vertex fit
     150             :   Short_t         fID;            // vertex ID; corresponds to the array index of the appropriate ESD container
     151             :   Char_t          fBCID;          // BC ID assigned to vertex
     152             :   Char_t          fType;          // vertex type
     153             :   Int_t           fNprong;        // number of prongs
     154             :   Int_t           fIprong;        //!index  of prong
     155             :   Int_t           fNContributors; // Number of contributors for SPD vertex
     156             :   AliAODRedCov<3> *fCovMatrix;    // vertex covariance matrix; values of and below the diagonal
     157             :   TRef            fParent;        // reference to the parent particle
     158             :   TRefArray       fDaughters;     // references to the daughter particles
     159             :   TRef            *fProngs;       //[fNprong] alternative daughters for n-prong vertex
     160             :   
     161         516 :   ClassDef(AliAODVertex, 8);
     162             : };
     163             : 
     164             : inline  Int_t AliAODVertex::GetNDaughters() const
     165             : {
     166           0 :     if (!fProngs) {
     167           0 :         return fDaughters.GetEntriesFast();
     168             :     } else {
     169           0 :         return fNprong;
     170             :     }
     171           0 : }
     172             : 
     173             : inline TObject* AliAODVertex::GetDaughter(Int_t i)
     174             : {
     175           0 :     if (!fProngs) {
     176           0 :         return fDaughters.At(i);
     177             :     } else {
     178           0 :         if (i < fNprong) {
     179           0 :             return fProngs[i].GetObject();
     180             :         } else {
     181           0 :             AliWarning("Daughter index out of range !\n");
     182           0 :             return 0;
     183             :         }
     184             :     }
     185           0 : }
     186             : 
     187             : #endif

Generated by: LCOV version 1.11