LCOV - code coverage report
Current view: top level - STEER/AOD - AliAODVertex.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 44 315 14.0 %
Date: 2016-06-14 17:26:59 Functions: 9 36 25.0 %

          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             : 

Generated by: LCOV version 1.11