ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//-------------------------------------------------------------------------
//               Implementation of the V0 vertexer class
//                  reads tracks writes out V0 vertices
//                      fills the ESD with the V0s       
//     Origin: Iouri Belikov, IPHC, Strasbourg, Jouri.Belikov@cern.ch
//-------------------------------------------------------------------------


#include "AliESDEvent.h"
#include "AliESDv0.h"
#include "AliV0vertexer.h"

ClassImp(AliV0vertexer)


//A set of very loose cuts 
Double_t AliV0vertexer::fgChi2max=33.; //max chi2
Double_t AliV0vertexer::fgDNmin=0.05;  //min imp parameter for the 1st daughter
Double_t AliV0vertexer::fgDPmin=0.05;  //min imp parameter for the 2nd daughter
Double_t AliV0vertexer::fgDCAmax=1.5;  //max DCA between the daughter tracks
Double_t AliV0vertexer::fgCPAmin=0.9;  //min cosine of V0's pointing angle
Double_t AliV0vertexer::fgRmin=0.2;    //min radius of the fiducial volume
Double_t AliV0vertexer::fgRmax=200.;   //max radius of the fiducial volume

Int_t AliV0vertexer::Tracks2V0vertices(AliESDEvent *event) {
  //--------------------------------------------------------------------
  //This function reconstructs V0 vertices
  //--------------------------------------------------------------------

   const AliESDVertex *vtxT3D=event->GetPrimaryVertex();

   Double_t xPrimaryVertex=vtxT3D->GetX();
   Double_t yPrimaryVertex=vtxT3D->GetY();
   Double_t zPrimaryVertex=vtxT3D->GetZ();

   Int_t nentr=event->GetNumberOfTracks();
   Double_t b=event->GetMagneticField();

   if (nentr<2) return 0; 

   TArrayI neg(nentr);
   TArrayI pos(nentr);

   Int_t nneg=0, npos=0, nvtx=0;

   Int_t i;
   for (i=0; i<nentr; i++) {
     AliESDtrack *esdTrack=event->GetTrack(i);
     ULong_t status=esdTrack->GetStatus();

     //if ((status&AliESDtrack::kITSrefit)==0)//not to accept the ITS SA tracks
        if ((status&AliESDtrack::kTPCrefit)==0) continue;

     Double_t d=esdTrack->GetD(xPrimaryVertex,yPrimaryVertex,b);
     if (TMath::Abs(d)<fDPmin) continue;
     if (TMath::Abs(d)>fRmax) continue;

     if (esdTrack->GetSign() < 0.) neg[nneg++]=i;
     else pos[npos++]=i;
   }   


   for (i=0; i<nneg; i++) {
      Int_t nidx=neg[i];
      AliESDtrack *ntrk=event->GetTrack(nidx);

      for (Int_t k=0; k<npos; k++) {
         Int_t pidx=pos[k];
	 AliESDtrack *ptrk=event->GetTrack(pidx);

         if (TMath::Abs(ntrk->GetD(xPrimaryVertex,yPrimaryVertex,b))<fDNmin)
	   if (TMath::Abs(ptrk->GetD(xPrimaryVertex,yPrimaryVertex,b))<fDNmin) continue;

         Double_t xn, xp, dca=ntrk->GetDCA(ptrk,b,xn,xp);
         if (dca > fDCAmax) continue;
         if ((xn+xp) > 2*fRmax) continue;
         if ((xn+xp) < 2*fRmin) continue;
   
         AliExternalTrackParam nt(*ntrk), pt(*ptrk);
         Bool_t corrected=kFALSE;
         if ((nt.GetX() > 3.) && (xn < 3.)) {
	   //correct for the beam pipe material
           corrected=kTRUE;
         }
         if ((pt.GetX() > 3.) && (xp < 3.)) {
	   //correct for the beam pipe material
           corrected=kTRUE;
         }
         if (corrected) {
	   dca=nt.GetDCA(&pt,b,xn,xp);
           if (dca > fDCAmax) continue;
           if ((xn+xp) > 2*fRmax) continue;
           if ((xn+xp) < 2*fRmin) continue;
	 }

         nt.PropagateTo(xn,b); pt.PropagateTo(xp,b);

         AliESDv0 vertex(nt,nidx,pt,pidx);
         if (vertex.GetChi2V0() > fChi2max) continue;
	 
         Double_t x=vertex.Xv(), y=vertex.Yv();
         Double_t r2=x*x + y*y;
         if (r2 < fRmin*fRmin) continue;
         if (r2 > fRmax*fRmax) continue;

	 Float_t cpa=vertex.GetV0CosineOfPointingAngle(xPrimaryVertex,yPrimaryVertex,zPrimaryVertex);
         const Double_t pThr=1.5;
         Double_t pv0=vertex.P();
         if (pv0<pThr) {
           //Below the threshold "pThr", try a momentum dependent cos(PA) cut 
           const Double_t bend=0.03; // approximate Xi bending angle
           const Double_t qt=0.211;  // max Lambda pT in Omega decay
           const Double_t cpaThr=TMath::Cos(TMath::ATan(qt/pThr) + bend);
           Double_t 
           cpaCut=(fCPAmin/cpaThr)*TMath::Cos(TMath::ATan(qt/pv0) + bend); 
           if (cpa < cpaCut) continue;
         } else
	 if (cpa < fCPAmin) continue;

	 vertex.SetDcaV0Daughters(dca);
         vertex.SetV0CosineOfPointingAngle(cpa);
         vertex.ChangeMassHypothesis(kK0Short);

         event->AddV0(&vertex);

         nvtx++;
      }
   }

   Info("Tracks2V0vertices","Number of reconstructed V0 vertices: %d",nvtx);

   return nvtx;
}














 AliV0vertexer.cxx:1
 AliV0vertexer.cxx:2
 AliV0vertexer.cxx:3
 AliV0vertexer.cxx:4
 AliV0vertexer.cxx:5
 AliV0vertexer.cxx:6
 AliV0vertexer.cxx:7
 AliV0vertexer.cxx:8
 AliV0vertexer.cxx:9
 AliV0vertexer.cxx:10
 AliV0vertexer.cxx:11
 AliV0vertexer.cxx:12
 AliV0vertexer.cxx:13
 AliV0vertexer.cxx:14
 AliV0vertexer.cxx:15
 AliV0vertexer.cxx:16
 AliV0vertexer.cxx:17
 AliV0vertexer.cxx:18
 AliV0vertexer.cxx:19
 AliV0vertexer.cxx:20
 AliV0vertexer.cxx:21
 AliV0vertexer.cxx:22
 AliV0vertexer.cxx:23
 AliV0vertexer.cxx:24
 AliV0vertexer.cxx:25
 AliV0vertexer.cxx:26
 AliV0vertexer.cxx:27
 AliV0vertexer.cxx:28
 AliV0vertexer.cxx:29
 AliV0vertexer.cxx:30
 AliV0vertexer.cxx:31
 AliV0vertexer.cxx:32
 AliV0vertexer.cxx:33
 AliV0vertexer.cxx:34
 AliV0vertexer.cxx:35
 AliV0vertexer.cxx:36
 AliV0vertexer.cxx:37
 AliV0vertexer.cxx:38
 AliV0vertexer.cxx:39
 AliV0vertexer.cxx:40
 AliV0vertexer.cxx:41
 AliV0vertexer.cxx:42
 AliV0vertexer.cxx:43
 AliV0vertexer.cxx:44
 AliV0vertexer.cxx:45
 AliV0vertexer.cxx:46
 AliV0vertexer.cxx:47
 AliV0vertexer.cxx:48
 AliV0vertexer.cxx:49
 AliV0vertexer.cxx:50
 AliV0vertexer.cxx:51
 AliV0vertexer.cxx:52
 AliV0vertexer.cxx:53
 AliV0vertexer.cxx:54
 AliV0vertexer.cxx:55
 AliV0vertexer.cxx:56
 AliV0vertexer.cxx:57
 AliV0vertexer.cxx:58
 AliV0vertexer.cxx:59
 AliV0vertexer.cxx:60
 AliV0vertexer.cxx:61
 AliV0vertexer.cxx:62
 AliV0vertexer.cxx:63
 AliV0vertexer.cxx:64
 AliV0vertexer.cxx:65
 AliV0vertexer.cxx:66
 AliV0vertexer.cxx:67
 AliV0vertexer.cxx:68
 AliV0vertexer.cxx:69
 AliV0vertexer.cxx:70
 AliV0vertexer.cxx:71
 AliV0vertexer.cxx:72
 AliV0vertexer.cxx:73
 AliV0vertexer.cxx:74
 AliV0vertexer.cxx:75
 AliV0vertexer.cxx:76
 AliV0vertexer.cxx:77
 AliV0vertexer.cxx:78
 AliV0vertexer.cxx:79
 AliV0vertexer.cxx:80
 AliV0vertexer.cxx:81
 AliV0vertexer.cxx:82
 AliV0vertexer.cxx:83
 AliV0vertexer.cxx:84
 AliV0vertexer.cxx:85
 AliV0vertexer.cxx:86
 AliV0vertexer.cxx:87
 AliV0vertexer.cxx:88
 AliV0vertexer.cxx:89
 AliV0vertexer.cxx:90
 AliV0vertexer.cxx:91
 AliV0vertexer.cxx:92
 AliV0vertexer.cxx:93
 AliV0vertexer.cxx:94
 AliV0vertexer.cxx:95
 AliV0vertexer.cxx:96
 AliV0vertexer.cxx:97
 AliV0vertexer.cxx:98
 AliV0vertexer.cxx:99
 AliV0vertexer.cxx:100
 AliV0vertexer.cxx:101
 AliV0vertexer.cxx:102
 AliV0vertexer.cxx:103
 AliV0vertexer.cxx:104
 AliV0vertexer.cxx:105
 AliV0vertexer.cxx:106
 AliV0vertexer.cxx:107
 AliV0vertexer.cxx:108
 AliV0vertexer.cxx:109
 AliV0vertexer.cxx:110
 AliV0vertexer.cxx:111
 AliV0vertexer.cxx:112
 AliV0vertexer.cxx:113
 AliV0vertexer.cxx:114
 AliV0vertexer.cxx:115
 AliV0vertexer.cxx:116
 AliV0vertexer.cxx:117
 AliV0vertexer.cxx:118
 AliV0vertexer.cxx:119
 AliV0vertexer.cxx:120
 AliV0vertexer.cxx:121
 AliV0vertexer.cxx:122
 AliV0vertexer.cxx:123
 AliV0vertexer.cxx:124
 AliV0vertexer.cxx:125
 AliV0vertexer.cxx:126
 AliV0vertexer.cxx:127
 AliV0vertexer.cxx:128
 AliV0vertexer.cxx:129
 AliV0vertexer.cxx:130
 AliV0vertexer.cxx:131
 AliV0vertexer.cxx:132
 AliV0vertexer.cxx:133
 AliV0vertexer.cxx:134
 AliV0vertexer.cxx:135
 AliV0vertexer.cxx:136
 AliV0vertexer.cxx:137
 AliV0vertexer.cxx:138
 AliV0vertexer.cxx:139
 AliV0vertexer.cxx:140
 AliV0vertexer.cxx:141
 AliV0vertexer.cxx:142
 AliV0vertexer.cxx:143
 AliV0vertexer.cxx:144
 AliV0vertexer.cxx:145
 AliV0vertexer.cxx:146
 AliV0vertexer.cxx:147
 AliV0vertexer.cxx:148
 AliV0vertexer.cxx:149
 AliV0vertexer.cxx:150
 AliV0vertexer.cxx:151
 AliV0vertexer.cxx:152
 AliV0vertexer.cxx:153
 AliV0vertexer.cxx:154
 AliV0vertexer.cxx:155
 AliV0vertexer.cxx:156
 AliV0vertexer.cxx:157
 AliV0vertexer.cxx:158
 AliV0vertexer.cxx:159
 AliV0vertexer.cxx:160
 AliV0vertexer.cxx:161
 AliV0vertexer.cxx:162