- Three classes by MinJung Kweon AliHFEpriVtx, AliHFEsecVtx and AliHFEmcQA for primar...
[u/mrichter/AliRoot.git] / STEER / AliVertex.cxx
1 /**************************************************************************
2  * Copyright(c) 2006-2008, 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 base Vertex class
18 //           This class contains the Secondary Vertex
19 //           of a set of tracks
20 //           And it is the base class for primary vertices
21 // Origin: F.Prino, Torino, prino@to.infn.it
22 //-----------------------------------------------------------------
23
24 #include "AliVertex.h"
25
26
27 ClassImp(AliVertex)
28
29 //--------------------------------------------------------------------------
30 AliVertex::AliVertex() :
31   AliVVertex(),
32   fSigma(0),
33   fNContributors(0),
34   fNIndices(0),
35   fIndices(0)
36 {
37 //
38 // Default Constructor, set everything to 0
39 //
40   for(Int_t k=0;k<3;k++) fPosition[k]   = 0;
41 }
42
43 //--------------------------------------------------------------------------
44 AliVertex::AliVertex(Double_t position[3],Double_t dispersion,
45                      Int_t nContributors):
46   AliVVertex(),
47   fSigma(dispersion),
48   fNContributors(nContributors),
49   fNIndices(0),
50   fIndices(0)
51 {
52   //
53   // Standard Constructor
54   //
55
56   for(Int_t k=0;k<3;k++) fPosition[k]   = position[k];
57   SetName("BaseVertex");
58
59 }
60
61 //--------------------------------------------------------------------------
62 AliVertex::AliVertex(const AliVertex &source):
63   AliVVertex(source),
64   fSigma(source.GetDispersion()),
65   fNContributors(source.GetNContributors()),
66   fNIndices(source.GetNIndices()),
67   fIndices(0x0)
68 {
69   //
70   // Copy constructor
71   //
72   for(Int_t i=0;i<3;i++)fPosition[i] = source.fPosition[i];
73   if(source.fNIndices>0) {
74     fIndices = new UShort_t[fNIndices];
75     memcpy(fIndices,source.fIndices,fNIndices*sizeof(UShort_t));
76   }
77 }
78
79 //--------------------------------------------------------------------------
80 AliVertex &AliVertex::operator=(const AliVertex &source){
81   //
82   // assignment operator
83   //
84   if(&source != this){
85     AliVVertex::operator=(source);
86     for(Int_t i=0;i<3;i++)fPosition[i] = source.fPosition[i];
87     fSigma = source.GetDispersion();
88     fNContributors = source.GetNContributors();
89     fNIndices = source.GetNIndices();
90     if(fIndices)delete [] fIndices;
91     fIndices = 0;
92     if(fNIndices>0) {
93       fIndices = new UShort_t[fNIndices];
94       memcpy(fIndices,source.fIndices,fNIndices*sizeof(UShort_t));
95     }
96   }
97   return *this;
98 }
99
100
101 //--------------------------------------------------------------------------
102 AliVertex::~AliVertex() {
103 //  
104 // Default Destructor
105 //
106   delete [] fIndices;
107   fIndices = 0;
108 }
109
110 void AliVertex::Clear(Option_t* option) 
111 {
112     // Delete allocated memory
113     delete [] fIndices;
114     fIndices = 0;
115     AliVVertex::Clear(option);
116 }
117
118 //--------------------------------------------------------------------------
119 void AliVertex::GetXYZ(Double_t position[3]) const {
120 //
121 // Return position of the vertex in global frame
122 //
123   position[0] = fPosition[0];
124   position[1] = fPosition[1];
125   position[2] = fPosition[2];
126
127   return;
128 }
129 //--------------------------------------------------------------------------
130 void AliVertex::GetCovarianceMatrix(Double_t covmatrix[6]) const {
131 //
132 // Fake method (is implmented in AliESDVertex)
133 //
134   for(Int_t i=0;i<6;i++) covmatrix[i] = -999.;
135
136   return;
137 }
138 //--------------------------------------------------------------------------
139 void AliVertex::SetIndices(Int_t nindices,UShort_t *indices) {
140 //
141 // Set indices of tracks used for vertex determination 
142 //
143   if(fNContributors<1)  { printf("fNContributors<1"); return; }
144   fNIndices = nindices;
145   delete [] fIndices;
146   fIndices = new UShort_t[fNIndices];
147   for(Int_t i=0;i<fNIndices;i++) fIndices[i] = indices[i]; 
148   return;
149 }
150 //--------------------------------------------------------------------------
151 Bool_t AliVertex::UsesTrack(Int_t index) const {
152 //
153 // checks if a track is used for the vertex 
154 //
155   if(fNIndices<1)  {/* printf("fNIndices<1"); */return kFALSE; }
156   for(Int_t i=0;i<fNIndices;i++) {
157     if((Int_t)fIndices[i]==index) return kTRUE;
158   }
159   return kFALSE;
160 }
161 //--------------------------------------------------------------------------
162 void AliVertex::Print(Option_t* /*option*/) const {
163 //
164 // Print out information on all data members
165 //
166   printf("Vertex position:\n");
167   printf("   x = %f\n",fPosition[0]);
168   printf("   y = %f\n",fPosition[1]);
169   printf("   z = %f\n",fPosition[2]);
170   printf(" Dispersion = %f\n",fSigma);
171   printf(" # tracks = %d\n",fNContributors);
172
173   return;
174 }
175
176
177
178