AliRoot Core  edcc906 (edcc906)
AliAODVertex.h
Go to the documentation of this file.
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 
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  void SetX(Double_t x) { fPosition[0] = x; }
59  void SetY(Double_t y) { fPosition[1] = y; }
60  void SetZ(Double_t z) { fPosition[2] = z; }
61  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  { fPosition[0] = pos[0]; fPosition[1] = pos[1]; fPosition[2] = pos[2]; }
64 
65  void SetChi2perNDF(Double_t chi2perNDF) { fChi2perNDF = chi2perNDF; }
66 
67  void SetParent(TObject *parent) { fParent = parent; }
68 
69  Double_t GetX() const { return fPosition[0]; }
70  Double_t GetY() const { return fPosition[1]; }
71  Double_t GetZ() const { return fPosition[2]; }
72  void GetXYZ(Double_t position[3]) const
73  {position[0]=fPosition[0]; position[1]=fPosition[1]; position[2]=fPosition[2];}
74  template <class T> void GetPosition(T *pos) const
75  {pos[0]=fPosition[0]; pos[1]=fPosition[1]; pos[2]=fPosition[2];}
76 
77  template <class T> void SetCovMatrix(const T *covMatrix) {
79  fCovMatrix->SetCovMatrix(covMatrix);}
80 
81  template <class T> Bool_t GetCovMatrix(T *covMatrix) const {
82  if(!fCovMatrix) return kFALSE;
83  fCovMatrix->GetCovMatrix(covMatrix); return kTRUE;}
84 
85  void GetCovarianceMatrix(Double_t covmatrix[6]) const
86  {GetCovMatrix(covmatrix);}
87  void RemoveCovMatrix() {delete fCovMatrix; fCovMatrix=NULL;}
88 
89  template <class T> void GetSigmaXYZ(T *sigma) const;
90 
91  Double_t GetChi2perNDF() const { return fChi2perNDF; }
92  Double_t GetChi2() const { return fChi2perNDF*(Double_t)GetNDF(); }
93  Int_t GetNDF() const { return 2*GetNContributors()-3; }
94 
95  Short_t GetID() const { return fID; }
96  void SetID(Short_t id) { fID=id; }
97 
98  Char_t GetType() const { return fType; }
99  void SetType(AODVtx_t vtype) { fType=vtype; }
100 
101  TObject* GetParent() const { return fParent.GetObject(); }
102  Bool_t HasParent(TObject *parent) const { return (fParent.GetObject() == parent) ? kTRUE : kFALSE; }
103 
104  void AddDaughter(TObject *daughter);
105  void RemoveDaughter(TObject *daughter) { fDaughters.Remove(daughter); }
106  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  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  {return TMath::Sqrt(Distance2ToVertex(vtx));}
125  Double_t DistanceXY2ToVertex(const AliAODVertex *vtx) const;
126  Double_t DistanceXYToVertex(AliAODVertex *vtx) const
127  {return TMath::Sqrt(DistanceXY2ToVertex(vtx));}
128  Double_t Error2DistanceToVertex(AliAODVertex *vtx) const;
129  Double_t ErrorDistanceToVertex(AliAODVertex *vtx) const
130  {return TMath::Sqrt(Error2DistanceToVertex(vtx));}
131  Double_t Error2DistanceXYToVertex(AliAODVertex *vtx) const;
133  {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  void SetBC(Int_t bc) {fBCID = bc;}
142  Int_t GetBC() const {return fBCID;}
143 private:
144  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;
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  ClassDef(AliAODVertex, 8);
162 };
163 
164 inline Int_t AliAODVertex::GetNDaughters() const
165 {
166  if (!fProngs) {
167  return fDaughters.GetEntriesFast();
168  } else {
169  return fNprong;
170  }
171 }
172 
173 inline TObject* AliAODVertex::GetDaughter(Int_t i)
174 {
175  if (!fProngs) {
176  return fDaughters.At(i);
177  } else {
178  if (i < fNprong) {
179  return fProngs[i].GetObject();
180  } else {
181  AliWarning("Daughter index out of range !\n");
182  return 0;
183  }
184  }
185 }
186 
187 #endif
static const char * GetTypeName(AODVtx_t type)
void RemoveDaughters()
Definition: AliAODVertex.h:106
Double_t DistanceToVertex(AliAODVertex *vtx) const
Definition: AliAODVertex.h:123
Bool_t HasDaughter(TObject *daughter) const
void RemoveCovMatrix()
Definition: AliAODVertex.h:87
Double_t GetChi2() const
Definition: AliAODVertex.h:92
Double_t Distance2ToVertex(const AliAODVertex *vtx) const
Double_t RotatedCovMatrixXY(Double_t phi=0., Double_t theta=0.) const
void PrintIndices() const
void GetPosition(T *pos) const
Definition: AliAODVertex.h:74
Bool_t HasParent(TObject *parent) const
Definition: AliAODVertex.h:102
AliAODRedCov< 3 > * fCovMatrix
Definition: AliAODVertex.h:156
Double_t GetZ() const
Definition: AliAODVertex.h:71
Double_t Error2DistanceToVertex(AliAODVertex *vtx) const
const char * AsString() const
Double_t Error2DistanceXYToVertex(AliAODVertex *vtx) const
void SetPosition(Double_t x, Double_t y, Double_t z)
Definition: AliAODVertex.h:61
Int_t GetNDF() const
Definition: AliAODVertex.h:93
#define AliWarning(message)
Definition: AliLog.h:541
void SetNContributors(Int_t nc)
Definition: AliAODVertex.h:111
Double_t RotatedCovMatrixXX(Double_t phi=0., Double_t theta=0.) const
Double_t RotatedCovMatrixYY(Double_t phi=0.) const
void SetZ(Double_t z)
Definition: AliAODVertex.h:60
void PhiAndThetaToVertex(AliAODVertex *vtx, P &phi, T &theta) const
virtual ~AliAODVertex()
void SetType(AODVtx_t vtype)
Definition: AliAODVertex.h:99
TObject * GetDaughter(Int_t i)
Definition: AliAODVertex.h:173
Double_t GetY() const
Definition: AliAODVertex.h:70
Double_t RotatedCovMatrixYZ(Double_t phi=0., Double_t theta=0.) const
void SetCovMatrix(T *cmat)
Definition: AliAODRedCov.h:87
void SetID(Short_t id)
Definition: AliAODVertex.h:96
virtual AliAODVertex * CloneWithoutRefs() const
Int_t GetNDaughters() const
Definition: AliAODVertex.h:164
Double_t RotatedCovMatrixZZ(Double_t phi=0., Double_t theta=0.) const
Double32_t fChi2perNDF
Definition: AliAODVertex.h:149
Short_t GetID() const
Definition: AliAODVertex.h:95
Double_t GetX() const
Definition: AliAODVertex.h:69
void GetCovMatrix(T *cmat) const
Definition: AliAODRedCov.h:60
void SetCovMatrix(const T *covMatrix)
Definition: AliAODVertex.h:77
Int_t GetNContributors() const
void MakeProngs()
Definition: AliAODVertex.h:144
void SetParent(TObject *parent)
Definition: AliAODVertex.h:67
Int_t GetBC() const
Definition: AliAODVertex.h:142
Double_t DistanceXYToVertex(AliAODVertex *vtx) const
Definition: AliAODVertex.h:126
void SetY(Double_t y)
Definition: AliAODVertex.h:59
void Print(Option_t *option="") const
void AddDaughter(TObject *daughter)
Double32_t fPosition[3]
Definition: AliAODVertex.h:148
Double_t ErrorDistanceXYToVertex(AliAODVertex *vtx) const
Definition: AliAODVertex.h:132
Double_t RotatedCovMatrixXZ(Double_t phi=0., Double_t theta=0.) const
Double_t ErrorDistanceToVertex(AliAODVertex *vtx) const
Definition: AliAODVertex.h:129
void SetChi2perNDF(Double_t chi2perNDF)
Definition: AliAODVertex.h:65
TObject * GetParent() const
Definition: AliAODVertex.h:101
Double_t DistanceXY2ToVertex(const AliAODVertex *vtx) const
void RemoveDaughter(TObject *daughter)
Definition: AliAODVertex.h:105
void GetSigmaXYZ(T *sigma) const
TRef * fProngs
Definition: AliAODVertex.h:159
Bool_t GetCovMatrix(T *covMatrix) const
Definition: AliAODVertex.h:81
void SetPosition(T *pos)
Definition: AliAODVertex.h:62
void GetCovarianceMatrix(Double_t covmatrix[6]) const
Definition: AliAODVertex.h:85
Double_t GetChi2perNDF() const
Definition: AliAODVertex.h:91
AliAODVertex & operator=(const AliAODVertex &vtx)
void SetBC(Int_t bc)
Definition: AliAODVertex.h:141
Int_t fNContributors
index of prong
Definition: AliAODVertex.h:155
TRefArray fDaughters
Definition: AliAODVertex.h:158
Char_t GetType() const
Definition: AliAODVertex.h:98
void SetX(Double_t x)
Definition: AliAODVertex.h:58
void GetXYZ(Double_t position[3]) const
Definition: AliAODVertex.h:72