Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-2007, 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 : /* $Id$ */
17 :
18 : //-------------------------------------------------------------------------
19 : // AOD track base class
20 : // Base class for Analysis Object Data
21 : // Generic version
22 : // Author: Markus Oldenburg, CERN
23 : // Inheritance from AliVVertex: A. Dainese
24 : //-------------------------------------------------------------------------
25 :
26 : #include "AliAODVertex.h"
27 : #include "AliAODTrack.h"
28 :
29 170 : ClassImp(AliAODVertex)
30 :
31 : //______________________________________________________________________________
32 : AliAODVertex::AliAODVertex() :
33 2 : AliVVertex(),
34 2 : fChi2perNDF(-999.),
35 2 : fID(-1),
36 2 : fBCID(AliVTrack::kTOFBCNA),
37 2 : fType(kUndef),
38 2 : fNprong(0),
39 2 : fIprong(0),
40 2 : fNContributors(0),
41 2 : fCovMatrix(NULL),
42 2 : fParent(),
43 2 : fDaughters(),
44 2 : fProngs(NULL)
45 10 : {
46 : // default constructor
47 :
48 2 : fPosition[0] = fPosition[1] = fPosition[2] = -999.;
49 4 : }
50 :
51 : //______________________________________________________________________________
52 : AliAODVertex::AliAODVertex(const Double_t position[3],
53 : const Double_t covMatrix[6],
54 : Double_t chi2perNDF,
55 : TObject *parent,
56 : Short_t id,
57 : Char_t vtype,
58 : Int_t nprong) :
59 44 : AliVVertex(),
60 44 : fChi2perNDF(chi2perNDF),
61 44 : fID(id),
62 44 : fBCID(AliVTrack::kTOFBCNA),
63 44 : fType(vtype),
64 44 : fNprong(nprong),
65 44 : fIprong(0),
66 44 : fNContributors(0),
67 44 : fCovMatrix(NULL),
68 44 : fParent(parent),
69 44 : fDaughters(),
70 44 : fProngs(0)
71 220 : {
72 : // constructor
73 :
74 44 : SetPosition(position);
75 84 : if (covMatrix) SetCovMatrix(covMatrix);
76 44 : MakeProngs();
77 88 : }
78 :
79 : //______________________________________________________________________________
80 : AliAODVertex::AliAODVertex(const Float_t position[3],
81 : const Float_t covMatrix[6],
82 : Double_t chi2perNDF,
83 : TObject *parent,
84 : Short_t id,
85 : Char_t vtype,
86 : Int_t nprong) :
87 :
88 0 : AliVVertex(),
89 0 : fChi2perNDF(chi2perNDF),
90 0 : fID(id),
91 0 : fBCID(AliVTrack::kTOFBCNA),
92 0 : fType(vtype),
93 0 : fNprong(nprong),
94 0 : fIprong(0),
95 0 : fNContributors(0),
96 0 : fCovMatrix(NULL),
97 0 : fParent(parent),
98 0 : fDaughters(),
99 0 : fProngs(0)
100 0 : {
101 : // constructor
102 :
103 0 : SetPosition(position);
104 0 : if (covMatrix) SetCovMatrix(covMatrix);
105 0 : MakeProngs();
106 0 : }
107 :
108 : //______________________________________________________________________________
109 : AliAODVertex::AliAODVertex(const Double_t position[3],
110 : Double_t chi2perNDF,
111 : Char_t vtype,
112 : Int_t nprong) :
113 0 : AliVVertex(),
114 0 : fChi2perNDF(chi2perNDF),
115 0 : fID(-1),
116 0 : fBCID(AliVTrack::kTOFBCNA),
117 0 : fType(vtype),
118 0 : fNprong(nprong),
119 0 : fIprong(0),
120 0 : fNContributors(0),
121 0 : fCovMatrix(NULL),
122 0 : fParent(),
123 0 : fDaughters(),
124 0 : fProngs(0)
125 0 : {
126 : // constructor without covariance matrix
127 :
128 0 : SetPosition(position);
129 0 : MakeProngs();
130 0 : }
131 :
132 : //______________________________________________________________________________
133 : AliAODVertex::AliAODVertex(const Float_t position[3],
134 : Double_t chi2perNDF,
135 : Char_t vtype, Int_t nprong) :
136 0 : AliVVertex(),
137 0 : fChi2perNDF(chi2perNDF),
138 0 : fID(-1),
139 0 : fBCID(AliVTrack::kTOFBCNA),
140 0 : fType(vtype),
141 0 : fNprong(nprong),
142 0 : fIprong(0),
143 0 : fNContributors(0),
144 0 : fCovMatrix(NULL),
145 0 : fParent(),
146 0 : fDaughters(),
147 0 : fProngs(0)
148 0 : {
149 : // constructor without covariance matrix
150 :
151 0 : SetPosition(position);
152 0 : MakeProngs();
153 0 : }
154 :
155 : //______________________________________________________________________________
156 : AliAODVertex::~AliAODVertex()
157 276 : {
158 : // Destructor
159 :
160 86 : delete fCovMatrix;
161 46 : if (fNprong > 0) delete[] fProngs;
162 138 : }
163 :
164 : //______________________________________________________________________________
165 : AliAODVertex::AliAODVertex(const AliAODVertex& vtx) :
166 0 : AliVVertex(vtx),
167 0 : fChi2perNDF(vtx.fChi2perNDF),
168 0 : fID(vtx.fID),
169 0 : fBCID(vtx.fBCID),
170 0 : fType(vtx.fType),
171 0 : fNprong(vtx.fNprong),
172 0 : fIprong(vtx.fIprong),
173 0 : fNContributors(vtx.fNContributors),
174 0 : fCovMatrix(NULL),
175 0 : fParent(vtx.fParent),
176 0 : fDaughters(vtx.fDaughters),
177 0 : fProngs(0)
178 0 : {
179 : // Copy constructor.
180 :
181 0 : for (int i = 0; i < 3; i++)
182 0 : fPosition[i] = vtx.fPosition[i];
183 :
184 0 : if (vtx.fCovMatrix) fCovMatrix=new AliAODRedCov<3>(*vtx.fCovMatrix);
185 0 : MakeProngs();
186 0 : for (int i = 0; i < fNprong; i++) {
187 0 : fProngs[i] = vtx.fProngs[i];
188 : }
189 0 : }
190 :
191 : //______________________________________________________________________________
192 : AliAODVertex* AliAODVertex::CloneWithoutRefs() const
193 : {
194 : // Special method to copy all but the refs
195 :
196 0 : Double_t cov[6] = { 0.0 };
197 :
198 0 : if (fCovMatrix) fCovMatrix->GetCovMatrix(cov);
199 :
200 0 : AliAODVertex* v = new AliAODVertex(fPosition,
201 0 : cov,
202 0 : fChi2perNDF,
203 : 0x0,
204 0 : fID,
205 0 : fType,
206 : 0);
207 :
208 0 : v->SetName(GetName());
209 : // NOTE title is not allowed to be set, as GetNContributors
210 : // relies on the title to use the references which are not copied here
211 :
212 : // to insure the main vertex retains the ncontributors information
213 : // (which is otherwise computed dynamically from
214 : // references to tracks, which is not kept in the returned object)
215 : // we set it here
216 0 : v->SetNContributors(fNContributors);
217 :
218 0 : return v;
219 0 : }
220 :
221 : //______________________________________________________________________________
222 : AliAODVertex& AliAODVertex::operator=(const AliAODVertex& vtx)
223 : {
224 : // Assignment operator
225 0 : if (this != &vtx) {
226 :
227 : // name and type
228 0 : AliVVertex::operator=(vtx);
229 :
230 : //momentum
231 0 : for (int i = 0; i < 3; i++)
232 0 : fPosition[i] = vtx.fPosition[i];
233 :
234 0 : fChi2perNDF = vtx.fChi2perNDF;
235 0 : fID = vtx.fID;
236 0 : fType = vtx.fType;
237 0 : fBCID = vtx.fBCID;
238 :
239 : //covariance matrix
240 0 : delete fCovMatrix;
241 0 : fCovMatrix = NULL;
242 0 : if (vtx.fCovMatrix) fCovMatrix = new AliAODRedCov<3>(*vtx.fCovMatrix);
243 :
244 : //other stuff
245 0 : fNContributors = vtx.fNContributors;
246 0 : fParent = vtx.fParent;
247 0 : fDaughters = vtx.fDaughters;
248 0 : fNprong = vtx.fNprong;
249 0 : fIprong = vtx.fIprong;
250 :
251 0 : MakeProngs();
252 0 : for (int i = 0; i < fNprong; i++) {
253 0 : fProngs[i] = vtx.fProngs[i];
254 : }
255 0 : }
256 :
257 0 : return *this;
258 : }
259 :
260 : //______________________________________________________________________________
261 : void AliAODVertex::AddDaughter(TObject *daughter)
262 : {
263 : // Add reference to daughter track
264 332 : if (!fProngs) {
265 166 : if (fDaughters.GetEntries()==0) {
266 : TRefArray* arr = &fDaughters;
267 52 : new(arr)TRefArray(TProcessID::GetProcessWithUID(daughter));
268 26 : }
269 166 : fDaughters.Add(daughter);
270 166 : } else {
271 0 : if (fIprong < fNprong) {
272 0 : fProngs[fIprong++] = daughter;
273 0 : } else {
274 0 : AliWarning("Number of daughters out of range !\n");
275 : }
276 : }
277 166 : return;
278 0 : }
279 :
280 :
281 : //______________________________________________________________________________
282 : template <class T> void AliAODVertex::GetSigmaXYZ(T sigma[3]) const
283 : {
284 : // Return errors on vertex position in thrust frame
285 :
286 : if(fCovMatrix) {
287 : sigma[0]=fCovMatrix[3]; //GetCovXZ
288 : sigma[1]=fCovMatrix[4]; //GetCovYZ
289 : sigma[2]=fCovMatrix[5]; //GetCovZZ
290 : } else
291 : sigma[0]=sigma[1]=sigma[2]=-999.;
292 :
293 : /*
294 : for (int i = 0, j = 6; i < 3; i++) {
295 : j -= i+1;
296 : sigma[2-i] = fCovMatrix ? TMath::Sqrt(fCovMatrix[j]) : -999.;
297 : }
298 : */
299 : }
300 :
301 : //______________________________________________________________________________
302 : Int_t AliAODVertex::GetNContributors() const
303 : {
304 : // Returns the number of tracks used to fit this vertex.
305 : Int_t cont = 0;
306 :
307 0 : TString vtitle = GetTitle();
308 0 : if (!vtitle.Contains("VertexerTracks") || vtitle.Contains("TracksNoConstraint") || fType==kPileupTracks
309 : ) {
310 0 : cont = fNContributors;
311 0 : } else {
312 0 : for (Int_t iDaug = 0; iDaug < GetNDaughters(); iDaug++) {
313 0 : AliAODTrack* aodT = dynamic_cast<AliAODTrack*>(fDaughters.At(iDaug));
314 0 : if (!aodT) continue;
315 0 : if (aodT->GetUsedForPrimVtxFit()) cont++;
316 0 : }
317 : // the constraint adds another DOF
318 0 : if(vtitle.Contains("VertexerTracksWithConstraint"))cont++;
319 : }
320 : return cont;
321 0 : }
322 :
323 : //______________________________________________________________________________
324 : Bool_t AliAODVertex::HasDaughter(TObject *daughter) const
325 : {
326 : // Checks if the given daughter (particle) is part of this vertex.
327 0 : if (!fProngs) {
328 0 : TRefArrayIter iter(&fDaughters);
329 0 : while (TObject *daugh = iter.Next()) {
330 0 : if (daugh == daughter) return kTRUE;
331 0 : }
332 0 : return kFALSE;
333 0 : } else {
334 : Bool_t has = kFALSE;
335 0 : for (int i = 0; i < fNprong; i++) {
336 0 : if (fProngs[i].GetObject() == daughter) has = kTRUE;
337 : }
338 0 : return has;
339 : }
340 0 : }
341 :
342 : //______________________________________________________________________________
343 : Double_t AliAODVertex::RotatedCovMatrixXX(Double_t phi, Double_t theta) const
344 : {
345 : // XX term of covariance matrix after rotation by phi around z-axis
346 : // and, then, by theta around new y-axis
347 :
348 0 : if (!fCovMatrix) {
349 : //AliFatal("Covariance matrix not set");
350 0 : return -999.;
351 : }
352 :
353 0 : Double_t covMatrix[6];
354 :
355 0 : GetCovMatrix(covMatrix);
356 :
357 0 : Double_t cp = TMath::Cos(phi);
358 0 : Double_t sp = TMath::Sin(phi);
359 0 : Double_t ct = TMath::Cos(theta);
360 0 : Double_t st = TMath::Sin(theta);
361 : return
362 0 : covMatrix[0]*cp*cp*ct*ct // GetCovXX
363 0 : +covMatrix[1]*2.*cp*sp*ct*ct // GetCovXY
364 0 : +covMatrix[3]*2.*cp*ct*st // GetCovXZ
365 0 : +covMatrix[2]*sp*sp*ct*ct // GetCovYY
366 0 : +covMatrix[4]*2.*sp*ct*st // GetCovYZ
367 0 : +covMatrix[5]*st*st; // GetCovZZ
368 0 : }
369 :
370 : //______________________________________________________________________________
371 : Double_t AliAODVertex::RotatedCovMatrixXY(Double_t phi, Double_t theta) const
372 : {
373 : // XY term of covariance matrix after rotation by phi around z-axis
374 : // and, then, by theta around new y-axis
375 :
376 0 : if (!fCovMatrix) {
377 : //AliFatal("Covariance matrix not set");
378 0 : return -999.;
379 : }
380 :
381 0 : Double_t covMatrix[6];
382 :
383 0 : GetCovMatrix(covMatrix);
384 :
385 0 : Double_t cp = TMath::Cos(phi);
386 0 : Double_t sp = TMath::Sin(phi);
387 0 : Double_t ct = TMath::Cos(theta);
388 0 : Double_t st = TMath::Sin(theta);
389 : return
390 0 : -covMatrix[0]*cp*sp*ct // GetCovXX
391 0 : +covMatrix[1]*ct*(cp*cp-sp*sp) // GetCovXY
392 0 : -covMatrix[3]*sp*st // GetCovXZ
393 0 : +covMatrix[2]*cp*sp*ct // GetCovYY
394 0 : +covMatrix[4]*cp*st; // GetCovYZ
395 0 : }
396 :
397 : //______________________________________________________________________________
398 : Double_t AliAODVertex::RotatedCovMatrixXZ(Double_t phi, Double_t theta) const
399 : {
400 : // XZ term of covariance matrix after rotation by phi around z-axis
401 : // and, then, by theta around new y-axis
402 :
403 0 : if (!fCovMatrix) {
404 : //AliFatal("Covariance matrix not set");
405 0 : return -999.;
406 : }
407 :
408 0 : Double_t covMatrix[6];
409 :
410 0 : GetCovMatrix(covMatrix);
411 :
412 0 : Double_t cp = TMath::Cos(phi);
413 0 : Double_t sp = TMath::Sin(phi);
414 0 : Double_t ct = TMath::Cos(theta);
415 0 : Double_t st = TMath::Sin(theta);
416 : return
417 0 : -covMatrix[0]*cp*cp*ct*st // GetCovXX
418 0 : -covMatrix[1]*2.*cp*sp*ct*st // GetCovXY
419 0 : +covMatrix[3]*cp*(ct*ct-st*st) // GetCovXZ
420 0 : -covMatrix[2]*sp*sp*ct*st // GetCovYY
421 0 : +covMatrix[4]*sp*(ct*ct-st*st) // GetCovYZ
422 0 : +covMatrix[5]*ct*st; // GetCovZZ
423 0 : }
424 :
425 : //______________________________________________________________________________
426 : Double_t AliAODVertex::RotatedCovMatrixYY(Double_t phi) const
427 : {
428 : // YY term of covariance matrix after rotation by phi around z-axis
429 : // and, then, by theta around new y-axis
430 :
431 0 : if (!fCovMatrix) {
432 : //AliFatal("Covariance matrix not set");
433 0 : return -999.;
434 : }
435 :
436 0 : Double_t covMatrix[6];
437 :
438 0 : GetCovMatrix(covMatrix);
439 :
440 0 : Double_t cp = TMath::Cos(phi);
441 0 : Double_t sp = TMath::Sin(phi);
442 : return
443 0 : covMatrix[0]*sp*sp // GetCovXX
444 0 : -covMatrix[1]*2.*cp*sp // GetCovXY
445 0 : +covMatrix[2]*cp*cp; // GetCovYY
446 0 : }
447 :
448 : //______________________________________________________________________________
449 : Double_t AliAODVertex::RotatedCovMatrixYZ(Double_t phi, Double_t theta) const
450 : {
451 : // YZ term of covariance matrix after rotation by phi around z-axis
452 : // and, then, by theta around new y-axis
453 :
454 0 : if (!fCovMatrix) {
455 : //AliFatal("Covariance matrix not set");
456 0 : return -999.;
457 : }
458 :
459 0 : Double_t covMatrix[6];
460 :
461 0 : GetCovMatrix(covMatrix);
462 :
463 0 : Double_t cp = TMath::Cos(phi);
464 0 : Double_t sp = TMath::Sin(phi);
465 0 : Double_t ct = TMath::Cos(theta);
466 0 : Double_t st = TMath::Sin(theta);
467 : return
468 0 : covMatrix[0]*cp*sp*st // GetCovXX
469 0 : +covMatrix[1]*st*(sp*sp-cp*cp) // GetCovXY
470 0 : -covMatrix[3]*sp*ct // GetCovXZ
471 0 : -covMatrix[2]*cp*sp*st // GetCovYY
472 0 : +covMatrix[4]*cp*ct; // GetCovYZ
473 0 : }
474 :
475 : //______________________________________________________________________________
476 : Double_t AliAODVertex::RotatedCovMatrixZZ(Double_t phi, Double_t theta) const
477 : {
478 : // ZZ term of covariance matrix after rotation by phi around z-axis
479 : // and, then, by theta around new y-axis
480 :
481 0 : if (!fCovMatrix) {
482 : //AliFatal("Covariance matrix not set");
483 0 : return -999.;
484 : }
485 :
486 0 : Double_t covMatrix[6];
487 :
488 0 : GetCovMatrix(covMatrix);
489 :
490 0 : Double_t cp = TMath::Cos(phi);
491 0 : Double_t sp = TMath::Sin(phi);
492 0 : Double_t ct = TMath::Cos(theta);
493 0 : Double_t st = TMath::Sin(theta);
494 : return
495 0 : covMatrix[0]*cp*cp*st*st // GetCovXX
496 0 : +covMatrix[1]*2.*cp*sp*st*st // GetCovXY
497 0 : -covMatrix[3]*2.*cp*ct*st // GetCovXZ
498 0 : +covMatrix[2]*sp*sp*st*st // GetCovYY
499 0 : -covMatrix[4]*2.*sp*sp*ct*st // GetCovYZ
500 0 : +covMatrix[5]*ct*ct; // GetCovZZ
501 0 : }
502 :
503 : //______________________________________________________________________________
504 : Double_t AliAODVertex::Distance2ToVertex(const AliAODVertex *vtx) const
505 : {
506 : // distance in 3D to another AliAODVertex
507 :
508 0 : Double_t dx = GetX()-vtx->GetX();
509 0 : Double_t dy = GetY()-vtx->GetY();
510 0 : Double_t dz = GetZ()-vtx->GetZ();
511 :
512 0 : return dx*dx+dy*dy+dz*dz;
513 : }
514 :
515 : //______________________________________________________________________________
516 : Double_t AliAODVertex::DistanceXY2ToVertex(const AliAODVertex *vtx) const
517 : {
518 : // distance in XY to another AliAODVertex
519 :
520 0 : Double_t dx = GetX()-vtx->GetX();
521 0 : Double_t dy = GetY()-vtx->GetY();
522 :
523 0 : return dx*dx+dy*dy;
524 : }
525 :
526 : //______________________________________________________________________________
527 : Double_t AliAODVertex::Error2DistanceToVertex(AliAODVertex *vtx) const
528 : {
529 : // error on the distance in 3D to another AliAODVertex
530 :
531 0 : Double_t phi,theta;
532 0 : PhiAndThetaToVertex(vtx,phi,theta);
533 : // error2 due to this vertex
534 0 : Double_t error2 = RotatedCovMatrixXX(phi,theta);
535 : // error2 due to vtx vertex
536 0 : Double_t error2vtx = vtx->RotatedCovMatrixXX(phi,theta);
537 :
538 0 : return error2+error2vtx;
539 0 : }
540 :
541 : //______________________________________________________________________________
542 : Double_t AliAODVertex::Error2DistanceXYToVertex(AliAODVertex *vtx) const
543 : {
544 : // error on the distance in XY to another AliAODVertex
545 :
546 0 : Double_t phi,theta;
547 0 : PhiAndThetaToVertex(vtx,phi,theta);
548 : // error2 due to this vertex
549 0 : Double_t error2 = RotatedCovMatrixXX(phi);
550 : // error2 due to vtx vertex
551 0 : Double_t error2vtx = vtx->RotatedCovMatrixXX(phi);
552 :
553 0 : return error2+error2vtx;
554 0 : }
555 :
556 : //______________________________________________________________________________
557 : template <class T, class P>
558 : void AliAODVertex::PhiAndThetaToVertex(AliAODVertex *vtx, P &phi, T &theta) const
559 : {
560 : // rotation angles around z-axis (phi) and around new y-axis (theta)
561 : // with which vtx is seen (used by RotatedCovMatrix... methods)
562 :
563 0 : phi = TMath::Pi()+TMath::ATan2(-vtx->GetY()+GetY(),-vtx->GetX()+GetX());
564 0 : Double_t vtxxphi = vtx->GetX()*TMath::Cos(phi)+vtx->GetY()*TMath::Sin(phi);
565 0 : Double_t xphi = GetX()*TMath::Cos(phi)+GetY()*TMath::Sin(phi);
566 0 : theta = TMath::ATan2(vtx->GetZ()-GetZ(),vtxxphi-xphi);
567 0 : }
568 :
569 : //______________________________________________________________________________
570 : void AliAODVertex::PrintIndices() const
571 : {
572 : // Print indices of particles originating form this vertex
573 :
574 0 : TRefArrayIter iter(&fDaughters);
575 0 : while (TObject *daugh = iter.Next()) {
576 0 : printf("Particle %p originates from this vertex.\n", static_cast<void*>(daugh));
577 0 : }
578 0 : }
579 :
580 : //______________________________________________________________________________
581 : const char* AliAODVertex::AsString() const
582 : {
583 : // Make a string describing this object
584 :
585 0 : TString tmp(Form("%10s pos(%7.2f,%7.2f,%7.2f)",GetTypeName((AODVtx_t)GetType()),GetX(),GetY(),GetZ()));
586 :
587 0 : if (GetType()==kPrimary || GetType()==kMainSPD || GetType()==kPileupSPD )
588 : {
589 0 : tmp += Form(" ncontrib %d chi2/ndf %4.1f",GetNContributors(),GetChi2perNDF());
590 :
591 : }
592 :
593 0 : if ( !fParent.GetObject() )
594 : {
595 0 : tmp += " no parent";
596 : }
597 0 : if ( fDaughters.GetEntriesFast() > 0 )
598 : {
599 0 : if ( fDaughters.GetEntriesFast() == 1 )
600 : {
601 0 : tmp += " origin of 1 particle";
602 : }
603 : else
604 : {
605 0 : tmp += Form(" origin of %2d particles",fDaughters.GetEntriesFast());
606 : }
607 : }
608 :
609 0 : return Form("%s",tmp.Data()); // feed to circular buffer
610 0 : }
611 :
612 : //______________________________________________________________________________
613 : const char* AliAODVertex::GetTypeName(AODVtx_t type)
614 : {
615 : // Return an ASCII version of type
616 :
617 0 : switch (type)
618 : {
619 : case kPrimary:
620 0 : return "primary";
621 : break;
622 : case kKink:
623 0 : return "kink";
624 : break;
625 : case kV0:
626 0 : return "v0";
627 : break;
628 : case kCascade:
629 0 : return "cascade";
630 : break;
631 : case kMainSPD:
632 0 : return "mainSPD";
633 : break;
634 : case kPileupSPD:
635 0 : return "pileupSPD";
636 : break;
637 : case kPileupTracks:
638 0 : return "pileupTRK";
639 : break;
640 : case kMainTPC:
641 0 : return "mainTPC";
642 : break;
643 : default:
644 0 : return "unknown";
645 : break;
646 : };
647 0 : }
648 :
649 : //______________________________________________________________________________
650 : void AliAODVertex::Print(Option_t* /*option*/) const
651 : {
652 : // Print information of all data members
653 :
654 0 : printf("Vertex position:\n");
655 0 : printf(" x = %f\n", fPosition[0]);
656 0 : printf(" y = %f\n", fPosition[1]);
657 0 : printf(" z = %f\n", fPosition[2]);
658 0 : printf(" parent particle: %p\n", static_cast<void*>(fParent.GetObject()));
659 0 : printf(" origin of %d particles\n", fDaughters.GetEntriesFast());
660 0 : printf(" vertex type %d\n", fType);
661 :
662 : /*
663 : if (fCovMatrix) {
664 : printf("Covariance matrix:\n");
665 : printf(" %12.10f %12.10f %12.10f\n %12.10f %12.10f %12.10f\n %12.10f %12.10f %12.10f\n",
666 : fCovMatrix[0],
667 : fCovMatrix[1],
668 : fCovMatrix[3],
669 : fCovMatrix[1],
670 : fCovMatrix[2],
671 : fCovMatrix[4],
672 : fCovMatrix[3],
673 : fCovMatrix[4],
674 : fCovMatrix[5]);
675 : } */
676 0 : printf(" Chi^2/NDF = %f\n", fChi2perNDF);
677 0 : }
678 :
|