ROOT logo
/****************************************************************************
 *                                                                          *
 * This macro determines the impact parameter of each track in pp event     *
 * with respect to the primaty vertex position reconstructed using all      *
 * the other tracks in the event. This procedure is necessary to avoid      *
 * biases in the impact parameter estimate.                                 *
 *                                                                          *
 * Output:  TNtuple (ntd0) on file ImpactParameters.root                    *
 *          There is one entry per track. The elements of the ntuple are:   *
 *          1) Event: Event number                                          *
 *          2) nTraks: Number of tracks for this event                      *
 *          3) pt: Transverse momentum for the current track                *
 *          4) d0rphi: transverse impact parameter of the current track     *
 *          5) vx:     x coordinate of the vertex                           *
 *          6) vy:     y coordinate of the vertex                           *
 * origin: A.Dainese    andrea.dainese@pd.infn.it                           * 
 ****************************************************************************/ 
#if !defined(__CINT__) || defined(__MAKECINT__)
//-- --- standard headers------------- 
#include <Riostream.h>
//--------Root headers ---------------
#include <TSystem.h>
#include <TFile.h>
#include <TNtuple.h>
#include <TString.h>
#include <TStopwatch.h>
#include <TObject.h>
#include <TVector3.h>
#include <TTree.h>
#include <TParticle.h>
#include <TArray.h>
//----- AliRoot headers ---------------
#include "alles.h"
#include "AliRun.h"
#include "AliKalmanTrack.h"
#include "AliITStrackV2.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"
#include "AliV0vertex.h"
#include "AliV0vertexer.h"
#include "AliITSVertex.h"
#include "AliITSVertexer.h"
#include "AliITSVertexerTracks.h"
#endif
//-------------------------------------

// field (T)
const Double_t kBz = 0.4;

// this function ckecks file existence
Bool_t GetInputFile();
void   MoveTracks(TTree& itsTree,TObjArray& array);


void   AliITSImpactParametersPP(Int_t evFirst=0,Int_t evLast=0) {

  const Char_t *name="AliITSImpactParametersPP";
  cerr<<'\n'<<name<<"...\n";
  gBenchmark->Start(name);  

  AliKalmanTrack::SetConvConst(100/0.299792458/kBz);


  // check existence of input file
  if(!GetInputFile()) { cerr<<"No tracks file found"<<endl; return; }

  TString outName("ImpactParameters.root");

  // primary vertex
  Double_t v1[3] = {0.,0.,0,};
  
  Int_t    ev,itsEntries,i;
  Int_t    nTotEv=0;
  Double_t pt,d0rphi;
  Char_t   trksName[100];
  AliITStrackV2 *itstrack = 0;

  // output ntuple
  TNtuple *ntd0 = new TNtuple("ntd0","ntd0","Event:nTrks:pt:d0rphi:vx:vy");

  // create the AliITSVertexerTracks object
  AliITSVertexerTracks *vertexer1 = new AliITSVertexerTracks;
  vertexer1->SetMinTracks(3);
  vertexer1->SetDebug(0);
  Int_t skipped[2];

  // Open file with ITS tracks
  TFile* itstrks = TFile::Open("AliITStracksV2.root");


  // loop on events in file
  for(ev=evFirst; ev<=evLast; ev++) {
    printf(" --- Processing event  %d ---\n",ev);
    sprintf(trksName,"TreeT_ITS_%d",ev);

    // tracks from ITS
    TTree *itsTree  =(TTree*)itstrks->Get(trksName);
    if(!itsTree) continue;
    itsEntries = (Int_t)itsTree->GetEntries();
    printf("+++\n+++ Number of tracks in ITS: %d\n+++\n\n",itsEntries);

    TObjArray tArray(itsEntries);
    MoveTracks(*itsTree,tArray);
    
    // count the total number of events
    nTotEv++;

    // loop on tracks
    for(i=0; i<itsEntries; i++) {
      itstrack = (AliITStrackV2*)tArray.At(i);

      // pt
      pt = itstrack->Pt();

      // primary vertex from other tracks in event
      Bool_t goodVtx = kFALSE;
      vertexer1->SetVtxStart(0.,0.);
      skipped[0] = i;
      skipped[1] = -1;
      vertexer1->SetSkipTracks(1,skipped);
      AliITSVertex *vertex1 = 
        (AliITSVertex*)vertexer1->VertexOnTheFly(*itsTree); 
      if(vertex1->GetNContributors()>0) goodVtx = kTRUE; 
      vertex1->GetXYZ(v1);
      //vertex1->PrintStatus(); 
      // impact parameter w.r.t. v1      (in microns)
      d0rphi =  10000.*itstrack->GetD(v1[0],v1[1]);
      delete vertex1;

      // fill ntuple
      if (goodVtx) ntd0->Fill(ev,itsEntries,pt,d0rphi,v1[0],v1[1]);

      itstrack = 0;
    }   // loop on tracks

    delete itsTree;

  }    // loop on events in file


  printf("\n+++\n+++ Total number of events: %d\n+++\n",nTotEv);

  delete vertexer1;

  itstrks->Close();

  // store ntuple in a file
  TFile* outroot = new TFile(outName.Data(),"recreate");
  ntd0->Write();
  outroot->Close();
  delete outroot;


  gBenchmark->Stop(name);
  gBenchmark->Show(name);

  return;
}
//___________________________________________________________________________
Bool_t   GetInputFile() {
  TString itsName("AliITStracksV2.root");

  if(gSystem->AccessPathName(itsName.Data(),kFileExists)) return kFALSE;

  return kTRUE;
}
//___________________________________________________________________________
void MoveTracks(TTree& itsTree,TObjArray& array) {
//
// this function creates two TObjArrays with tracks
//
 
  Int_t entr = (Int_t)itsTree.GetEntries();

  // trasfer tracks from tree to array
  for(Int_t i=0; i<entr; i++) {

    AliITStrackV2 *t = new AliITStrackV2; 
    itsTree.SetBranchAddress("tracks",&t);

    itsTree.GetEvent(i);

    array.AddLast(t);

  }

  return;
}



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