ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include<Riostream.h>
#include<AliRun.h>
#include<TTree.h>
#include<AliRunLoader.h>
#include<AliESD.h>
#include<TMath.h>
#include<AliHeader.h>
#include<AliGenEventHeader.h>
#include<AliVertexerTracks.h>
#include<AliITSVertexerTracks.h>
#include<AliVertex.h>
#include<AliESDVertex.h>
#include<TFile.h>
#endif

void TestVertexerTracks(){
  if (gAlice) {
    delete AliRunLoader::Instance();
    delete gAlice;
    gAlice = 0x0;
  }

  AliRunLoader *rl = AliRunLoader::Open("galice.root");
  if (rl == 0x0) {
    cerr<<"Can not open session"<<endl;
    return;
  }
  
  rl->LoadgAlice();
  AliMagF * magf = gAlice->Field();
  AliTracker::SetFieldMap(magf,kTRUE);
  printf("MagneticField=%f\n",AliTracker::GetBz());

  rl->LoadHeader();
  rl->LoadKinematics();
  Int_t totev=rl->GetNumberOfEvents();
  cout<<"Number of events="<<totev<<endl;

  TFile *ef=TFile::Open("AliESDs.root");
  if (!ef || !ef->IsOpen()) {cerr<<"Can't AliESDs.root !n";}
  AliESD* event = new AliESD;
  TTree* tree = (TTree*) ef->Get("esdTree");
  if (!tree) {cerr<<"no ESD tree foundn";};
  tree->SetBranchAddress("ESD", &event);

  Int_t e=0;
  tree->GetEvent(e);
  Int_t ntrk=event->GetNumberOfTracks();
  cout<<"Number of ESD tracks : "<<ntrk<<endl; 

  rl->GetEvent(e);
  AliESDVertex *vertESD = event->GetVertex();
  Double_t recVertex[3];
  AliGenEventHeader *header=rl->GetHeader()->GenEventHeader();
  TArrayF mcVertex(3);
  header->PrimaryVertex(mcVertex);
  cout<<"Primary vertex (MC) ";
  for(Int_t kk=0;kk<3;kk++)cout<<mcVertex[kk]<<" ";
  cout<<endl;
  vertESD->GetXYZ(recVertex);
  cout<<"Primary vertex (from SPD clusters) ";
  for(Int_t kk=0;kk<3;kk++)cout<<recVertex[kk]<<" ";
  cout<<endl;
  TObjArray *trkarr=new TObjArray();
  trkarr->Expand(3);

  TTree *trkTree = new TTree("TreeT","tracks");
  AliESDtrack *esdTrack = 0;
  trkTree->Branch("tracks","AliESDtrack",&esdTrack);

  esdTrack=(AliESDtrack*)event->GetTrack(2);
  trkarr->AddLast(esdTrack);
  trkTree->Fill();

  esdTrack=(AliESDtrack*)event->GetTrack(3);
  trkarr->AddLast(esdTrack);
  trkTree->Fill();

  esdTrack=(AliESDtrack*)event->GetTrack(4);
  trkarr->AddLast(esdTrack);
  trkTree->Fill();

  // BEWARE: the method VertexForSelectedTracks returns the address of the data member fVert 
  // which is always the same for all calls to VertexForSelectedTracks.

  printf("\n*****************************\n");
  printf("Call VertexForSelectedTracks with different arguments\n");
  printf("*****************************\n");
  AliVertexerTracks *vtx=new AliVertexerTracks();
  AliVertex *vert=vtx->VertexForSelectedTracks(trkarr);
  vert->Print();
  AliVertex *vert2=vtx->VertexForSelectedTracks(trkTree);
  vert->Print();
  vert2->Print();

  printf("\n*****************************\n");
  printf("Use different finder algorithms\n");
  printf("*****************************\n");
  vtx->SetFinderAlgorithm(1);
  AliVertex *v1=vtx->VertexForSelectedTracks(trkarr);
  v1->Print();
  vtx->SetFinderAlgorithm(2);
  AliVertex *v2=vtx->VertexForSelectedTracks(trkarr);
  v2->Print();
  vtx->SetFinderAlgorithm(3);
  AliVertex *v3=vtx->VertexForSelectedTracks(trkarr);
  v3->Print();
  vtx->SetFinderAlgorithm(4);
  AliVertex *v4=vtx->VertexForSelectedTracks(trkarr);
  v4->Print();
  vtx->SetFinderAlgorithm(5);
  AliVertex *v5=vtx->VertexForSelectedTracks(trkarr);
  v5->Print();
  delete vtx;

  printf("\n*****************************\n");
  printf("Call AliITSVertexerTracks::VertexForSelected Tracks\n");
  printf("*****************************\n");
  Int_t trkPos[3]={0,1,2};
  AliITSVertexerTracks *itsvtx=new AliITSVertexerTracks();
  itsvtx->SetDebug(0);
  AliVertex *vert3=itsvtx->VertexForSelectedTracks(event,3,trkPos,1);
  vert3->Print();
  delete itsvtx;
  
  printf("\n*****************************\n");
  printf("Find Primary Vertex\n");
  printf("*****************************\n");
  AliITSVertexerTracks *itsvtx2=new AliITSVertexerTracks();
  itsvtx2->SetDebug(0);
  AliESDVertex* evert=itsvtx2->FindPrimaryVertexForCurrentEvent(event);
  evert->Print();
  delete itsvtx2;
}



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