Fixes for some mem-leaks: most changes where pretty basic (i.e. adding deletes).
[u/mrichter/AliRoot.git] / STEER / AliESDVertex.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 //-----------------------------------------------------------------
17 //           Implementation of the Primary Vertex class
18 //           for the Event Data Summary class
19 //           This class contains the Primary Vertex
20 //           of the event coming from reconstruction
21 // Origin: A.Dainese, andrea.dainese@lnl.infn.it
22 //-----------------------------------------------------------------
23
24 //---- standard headers ----
25 #include "Riostream.h"
26 //---- Root headers --------
27 #include <TMath.h>
28 #include <TROOT.h>
29 //---- AliRoot headers -----
30 #include "AliESDVertex.h"
31
32
33 ClassImp(AliESDVertex)
34
35 //--------------------------------------------------------------------------
36 AliESDVertex::AliESDVertex() :
37   AliVertex(),
38   fCovXX(0.005*0.005),
39   fCovXY(0),
40   fCovYY(0.005*0.005),
41   fCovXZ(0),
42   fCovYZ(0),
43   fCovZZ(5.3*5.3),
44   fChi2(0)
45 {
46   //
47   // Default Constructor, set everything to 0
48   //
49   SetToZero();
50 }
51
52 //--------------------------------------------------------------------------
53 AliESDVertex::AliESDVertex(Double_t positionZ,Double_t sigmaZ,
54                            Int_t nContributors,const Char_t *vtxName) :
55   AliVertex(),
56   fCovXX(0.005*0.005),
57   fCovXY(0),
58   fCovYY(0.005*0.005),
59   fCovXZ(0),
60   fCovYZ(0),
61   fCovZZ(sigmaZ*sigmaZ),
62   fChi2(0)
63 {
64   //
65   // Constructor for vertex Z from pixels
66   //
67
68   SetToZero();
69
70   fPosition[2]   = positionZ;
71   SetName(vtxName);
72   SetNContributors(nContributors);
73
74 }
75
76 //------------------------------------------------------------------------- 
77 AliESDVertex::AliESDVertex(Double_t position[3],Double_t covmatrix[6],
78                            Double_t chi2,Int_t nContributors,
79                            const Char_t *vtxName) :
80   AliVertex(position,0.,nContributors),
81   fCovXX(covmatrix[0]),
82   fCovXY(covmatrix[1]),
83   fCovYY(covmatrix[2]),
84   fCovXZ(covmatrix[3]),
85   fCovYZ(covmatrix[4]),
86   fCovZZ(covmatrix[5]),
87   fChi2(chi2)
88 {
89   //
90   // Constructor for vertex in 3D from tracks
91   //
92
93   SetToZero();
94   SetName(vtxName);
95
96 }
97 //--------------------------------------------------------------------------
98 AliESDVertex::AliESDVertex(Double_t position[3],Double_t sigma[3],
99                            const Char_t *vtxName) :
100   AliVertex(position,0.,0),
101   fCovXX(sigma[0]*sigma[0]),
102   fCovXY(0),
103   fCovYY(sigma[1]*sigma[1]),
104   fCovXZ(0),
105   fCovYZ(0),
106   fCovZZ(sigma[2]*sigma[2]),
107   fChi2(0)
108 {
109   //
110   // Constructor for smearing of true position
111   //
112
113   SetToZero();
114   SetName(vtxName);
115
116 }
117 //--------------------------------------------------------------------------
118 AliESDVertex::AliESDVertex(Double_t position[3],Double_t sigma[3],
119                            Double_t snr[3], const Char_t *vtxName) :
120   AliVertex(position,0.,0),
121   fCovXX(sigma[0]*sigma[0]),
122   fCovXY(0),
123   fCovYY(sigma[1]*sigma[1]),
124   fCovXZ(0),
125   fCovYZ(0),
126   fCovZZ(sigma[2]*sigma[2]),
127   fChi2(0)
128 {
129   //
130   // Constructor for Pb-Pb
131   //
132
133   SetToZero();
134   SetName(vtxName);
135
136   fSNR[0]        = snr[0];
137   fSNR[1]        = snr[1];
138   fSNR[2]        = snr[2];
139
140 }
141 //--------------------------------------------------------------------------
142 AliESDVertex::AliESDVertex(const AliESDVertex &source):
143   AliVertex(source),
144   fCovXX(source.fCovXX),
145   fCovXY(source.fCovXY),
146   fCovYY(source.fCovYY),
147   fCovXZ(source.fCovXZ),
148   fCovYZ(source.fCovYZ),
149   fCovZZ(source.fCovZZ),
150   fChi2(source.fChi2)
151 {
152   //
153   // Copy constructor
154   //
155   for(Int_t i=0;i<3;i++) {
156     fSNR[i] = source.fSNR[i];
157   }
158 }
159 //--------------------------------------------------------------------------
160 AliESDVertex &AliESDVertex::operator=(const AliESDVertex &source){
161   //
162   // assignment operator
163   //
164   if(&source != this){
165     AliVertex::operator=(source);
166     for(Int_t i=0;i<3;++i)fSNR[i] = source.fSNR[i];
167     fCovXX = source.fCovXX;
168     fCovXY = source.fCovXY;
169     fCovYY = source.fCovYY;
170     fCovXZ = source.fCovXZ;
171     fCovYZ = source.fCovYZ;
172     fCovZZ = source.fCovZZ;
173     fChi2 = source.fChi2;
174   }
175   return *this;
176 }
177 //--------------------------------------------------------------------------
178 void AliESDVertex::SetToZero() {
179   //
180   // Set the content of arrays to 0. Used by constructors
181   //
182   for(Int_t i=0; i<3; i++){
183     fSNR[i] = 0.;
184   }
185 }
186 //--------------------------------------------------------------------------
187 void AliESDVertex::GetSigmaXYZ(Double_t sigma[3]) const {
188   //
189   // Return errors on vertex position in thrust frame
190   //
191   sigma[0] = TMath::Sqrt(fCovXX);
192   sigma[1] = TMath::Sqrt(fCovYY);
193   sigma[2] = TMath::Sqrt(fCovZZ);
194
195   return;
196 }
197 //--------------------------------------------------------------------------
198 void AliESDVertex::GetCovMatrix(Double_t covmatrix[6]) const {
199   //
200   // Return covariance matrix of the vertex
201   //
202   covmatrix[0] = fCovXX;
203   covmatrix[1] = fCovXY;
204   covmatrix[2] = fCovYY;
205   covmatrix[3] = fCovXZ;
206   covmatrix[4] = fCovYZ;
207   covmatrix[5] = fCovZZ;
208
209   return;
210 }
211
212 //--------------------------------------------------------------------------
213 void AliESDVertex::GetSNR(Double_t snr[3]) const {
214   //
215   // Return S/N ratios
216   //
217   for(Int_t i=0;i<3;i++) snr[i] = fSNR[i];
218
219   return;
220 }
221 //--------------------------------------------------------------------------
222 void AliESDVertex::Print(Option_t* /*option*/) const {
223   //
224   // Print out information on all data members
225   //
226   printf("ESD vertex position:\n");
227   printf("   x = %f +- %f\n",fPosition[0],TMath::Sqrt(fCovXX));
228   printf("   y = %f +- %f\n",fPosition[1],TMath::Sqrt(fCovYY));
229   printf("   z = %f +- %f\n",fPosition[2],TMath::Sqrt(fCovZZ));
230   printf(" Covariance matrix:\n");
231   printf(" %12.10f  %12.10f  %12.10f\n %12.10f  %12.10f  %12.10f\n %12.10f  %12.10f  %12.10f\n",fCovXX,fCovXY,fCovXZ,fCovXY,fCovYY,fCovYZ,fCovXZ,fCovYZ,fCovZZ);
232   printf(" S/N = (%f, %f, %f)\n",fSNR[0],fSNR[1],fSNR[2]);
233   printf(" chi2 = %f\n",fChi2);
234   printf(" # tracks (or tracklets) = %d\n",fNContributors);
235
236   return;
237 }
238
239
240
241