Line data Source code
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 172 : ClassImp(AliVertex)
28 :
29 : //--------------------------------------------------------------------------
30 : AliVertex::AliVertex() :
31 265 : AliVVertex(),
32 265 : fSigma(0),
33 265 : fNContributors(0),
34 265 : fNIndices(0),
35 265 : fIndices(0)
36 795 : {
37 : //
38 : // Default Constructor, set everything to 0
39 : //
40 2120 : for(Int_t k=0;k<3;k++) fPosition[k] = 0;
41 265 : }
42 :
43 : //--------------------------------------------------------------------------
44 : AliVertex::AliVertex(const Double_t position[3],Double_t dispersion,
45 : Int_t nContributors):
46 106 : AliVVertex(),
47 106 : fSigma(dispersion),
48 106 : fNContributors(nContributors),
49 106 : fNIndices(0),
50 106 : fIndices(0)
51 318 : {
52 : //
53 : // Standard Constructor
54 : //
55 :
56 848 : for(Int_t k=0;k<3;k++) fPosition[k] = position[k];
57 106 : SetName("BaseVertex");
58 :
59 106 : }
60 :
61 : //--------------------------------------------------------------------------
62 : AliVertex::AliVertex(const AliVertex &source):
63 26 : AliVVertex(source),
64 52 : fSigma(source.GetDispersion()),
65 52 : fNContributors(source.GetNContributors()),
66 52 : fNIndices(source.GetNIndices()),
67 26 : fIndices(0x0)
68 78 : {
69 : //
70 : // Copy constructor
71 : //
72 208 : for(Int_t i=0;i<3;i++)fPosition[i] = source.fPosition[i];
73 26 : if(source.fNIndices>0) {
74 52 : fIndices = new UShort_t[fNIndices];
75 26 : memcpy(fIndices,source.fIndices,fNIndices*sizeof(UShort_t));
76 26 : }
77 26 : }
78 :
79 : //--------------------------------------------------------------------------
80 : AliVertex &AliVertex::operator=(const AliVertex &source){
81 : //
82 : // assignment operator
83 : //
84 240 : if(&source != this){
85 120 : AliVVertex::operator=(source);
86 960 : for(Int_t i=0;i<3;i++)fPosition[i] = source.fPosition[i];
87 120 : fSigma = source.GetDispersion();
88 120 : fNContributors = source.GetNContributors();
89 120 : fNIndices = source.GetNIndices();
90 120 : if(fIndices)delete [] fIndices;
91 120 : fIndices = 0;
92 120 : if(fNIndices>0) {
93 16 : fIndices = new UShort_t[fNIndices];
94 16 : memcpy(fIndices,source.fIndices,fNIndices*sizeof(UShort_t));
95 16 : }
96 : }
97 120 : return *this;
98 : }
99 :
100 :
101 : //--------------------------------------------------------------------------
102 698 : AliVertex::~AliVertex() {
103 : //
104 : // Default Destructor
105 : //
106 425 : delete [] fIndices;
107 349 : fIndices = 0;
108 349 : }
109 :
110 : void AliVertex::Clear(Option_t* option)
111 : {
112 : // Delete allocated memory
113 0 : delete [] fIndices;
114 0 : fIndices = 0;
115 0 : AliVVertex::Clear(option);
116 0 : }
117 :
118 : //--------------------------------------------------------------------------
119 : void AliVertex::GetXYZ(Double_t position[3]) const {
120 : //
121 : // Return position of the vertex in global frame
122 : //
123 720 : position[0] = fPosition[0];
124 360 : position[1] = fPosition[1];
125 360 : position[2] = fPosition[2];
126 :
127 360 : return;
128 : }
129 : //--------------------------------------------------------------------------
130 : void AliVertex::GetCovarianceMatrix(Double_t covmatrix[6]) const {
131 : //
132 : // Fake method (is implmented in AliESDVertex)
133 : //
134 0 : for(Int_t i=0;i<6;i++) covmatrix[i] = -999.;
135 :
136 0 : 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 36 : if(fNContributors<1) { printf("fNContributors<1"); return; }
144 18 : fNIndices = nindices;
145 18 : delete [] fIndices;
146 18 : fIndices = new UShort_t[fNIndices];
147 380 : for(Int_t i=0;i<fNIndices;i++) fIndices[i] = indices[i];
148 18 : return;
149 18 : }
150 : //--------------------------------------------------------------------------
151 : Bool_t AliVertex::UsesTrack(Int_t index) const {
152 : //
153 : // checks if a track is used for the vertex
154 : //
155 286 : if(fNIndices<1) {/* printf("fNIndices<1"); */return kFALSE; }
156 2479 : for(Int_t i=0;i<fNIndices;i++) {
157 1245 : if((Int_t)fIndices[i]==index) return kTRUE;
158 : }
159 55 : return kFALSE;
160 143 : }
161 : //--------------------------------------------------------------------------
162 : void AliVertex::Print(Option_t* /*option*/) const {
163 : //
164 : // Print out information on all data members
165 : //
166 0 : printf("Vertex position:\n");
167 0 : printf(" x = %f\n",fPosition[0]);
168 0 : printf(" y = %f\n",fPosition[1]);
169 0 : printf(" z = %f\n",fPosition[2]);
170 0 : printf(" Dispersion = %f\n",fSigma);
171 0 : printf(" # tracks = %d\n",fNContributors);
172 :
173 0 : return;
174 : }
175 :
176 :
177 :
178 :
|