1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 //-- --- standard headers-------------
4 //--------Root headers ---------------
7 #include <TStopwatch.h>
13 #include <TLegendEntry.h>
17 #include <TParticle.h>
21 //----- AliRoot headers ---------------
25 #include "AliKalmanTrack.h"
26 #include "AliESDVertex.h"
27 #include "AliITSVertexer.h"
28 #include "AliITSVertexerTracks.h"
29 #include <AliHeader.h>
30 #include <AliGenEventHeader.h>
32 #include "AliRunLoader.h"
33 #include "AliITStrackV2.h"
34 #include "AliITSSimpleVertex.h"
35 #include "AliITSStrLine.h"
36 #include "AliITSLoader.h"
39 //-------------------------------------
43 void AliITSSecondaryVertices(Int_t ntracks, Int_t *pos) {
45 // example of usige AliITSVertexerTracks to get a (secodnary) vertex from a set of tracks.
49 AliRunLoader *rl = AliRunLoader::Open("galice.root");
51 cerr<<"Can't start session !\n";
56 AliMagF * magf = gAlice->Field();
57 AliKalmanTrack:: SetFieldMap(magf);
58 AliKalmanTrack::SetUniformFieldTracking();
60 cerr<<"Can't get AliRun !\n";
64 field=rl->GetAliRun()->Field()->SolenoidField()/10.;
68 TFile *ef=TFile::Open("AliESDs.root");
69 if (!ef || !ef->IsOpen()) {cerr<<"Can't AliESDs.root !n";}
70 AliESD* event = new AliESD;
71 TTree* tree = (TTree*) ef->Get("esdTree");
72 if (!tree) {cerr<<"no ESD tree foundn";};
73 tree->SetBranchAddress("ESD", &event);
78 Int_t ntrk=event->GetNumberOfTracks();
79 cout<<"Number of ESD tracks : "<<ntrk<<endl;
81 // Open input and output files
82 TFile *outFile = TFile::Open("AliITSVertices.root","recreate");
85 TTree *trkTree = new TTree("TreeT_ITS","its tracks");
86 AliITStrackV2 *itstrack = 0;
87 trkTree->Branch("tracks","AliITStrackV2",&itstrack,ntrk,0);
89 for(Int_t i=0; i<ntrk; i++) {
90 AliESDtrack *esdTrack = (AliESDtrack*)event->GetTrack(i);
91 UInt_t status=esdTrack->GetStatus();
92 UInt_t flags=AliESDtrack::kTPCin|AliESDtrack::kITSin;
93 if ((status&AliESDtrack::kTPCin)==0)continue;
94 if ((status&AliESDtrack::kITSin)==0)continue;
95 if ((status&AliESDtrack::kITSrefit)==0) continue;
96 if ((status&flags)==status) pipe=1;
98 itstrack = new AliITStrackV2(*esdTrack);
100 itstrack->PropagateTo(3.,0.0028,65.19);
101 itstrack->PropagateToVertex(); // This is not "exactly" the vertex
103 Int_t nclus=itstrack->GetNumberOfClusters();
112 event->GetVertex()->GetXYZ(vtx);
113 cout<<"Primary Vertex:"<<endl;
114 event->GetVertex()->PrintStatus();
115 cout<<"\n\n\n"<<endl;
119 AliITSVertexerTracks *vertexer = new AliITSVertexerTracks();
120 vertexer->SetDCAcut(0);
121 vertexer->SetDebug(0);
124 Double_t vertF1[3],vertF2[3],vertF3[3],vertF4[3],vertF5[3];
125 Int_t ncombi1,ncombi2,ncombi3,ncombi4,ncombi5;
126 Double_t sig1,sig2,sig3,sig4,sig5;
127 AliITSSimpleVertex *vert=0;
130 // Calculate vertex from tracks in pos
131 // BEWARE: the method VertexForSelectedTracks returns the address of the data member fSimpVert
132 // which is always the same for all calls to VertexForSelectedTracks.
134 cout<<"\nStraight Line Min Dist finder with weights"<<endl;
135 vert=(AliITSSimpleVertex*) vertexer->VertexForSelectedTracks(event,ntracks,pos,1);
137 vert->GetXYZ(vertF1);
138 ncombi1=vert->GetNContributors();
139 sig1=vert->GetDispersion();
142 cout<<"Straight Line Min Dist finder"<<endl;
143 vert=(AliITSSimpleVertex*) vertexer->VertexForSelectedTracks(event,ntracks,pos,2);
145 vert->GetXYZ(vertF2);
146 ncombi2=vert->GetNContributors();
147 sig2=vert->GetDispersion();
149 cout<<"Helix finder"<<endl;
150 vert=(AliITSSimpleVertex*) vertexer->VertexForSelectedTracks(event,ntracks,pos,3);
152 vert->GetXYZ(vertF3);
153 ncombi3=vert->GetNContributors();
154 sig3=vert->GetDispersion();
156 cout<<"Straight Line finder with weights"<<endl;
157 vert=(AliITSSimpleVertex*) vertexer->VertexForSelectedTracks(event,ntracks,pos,4);
159 vert->GetXYZ(vertF4);
160 ncombi4=vert->GetNContributors();
161 sig4=vert->GetDispersion();
163 cout<<"Straight Line finder with weights"<<endl;
164 vert=(AliITSSimpleVertex*) vertexer->VertexForSelectedTracks(event,ntracks,pos,5);
166 vert->GetXYZ(vertF5);
167 ncombi5=vert->GetNContributors();
168 sig5=vert->GetDispersion();