ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TSystem.h>
#include <TFile.h>
#include <TTree.h>
#include <TGeoManager.h>
#include <TGeoGlobalMagField.h>
#include <TStopwatch.h>
#include <TCanvas.h>
#include <TVirtualPad.h>

#include "AliTracker.h"
#include "AliGeomManager.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliGRPManager.h"
#include "AliRunLoader.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"
#include "AliMagF.h"
#include "AliESDEvent.h"
#include "AliITSURecoParam.h"
#include "AliITSUReconstructor.h"
#include "AliITSUCATracker.h"
#endif

extern TSystem *gSystem;

const AliESDVertex *SetMCvertex(const AliRunLoader *rl, AliTracker *tr);

void testTrackerCA() {
  gSystem->Load("libITSUpgradeBase");
  gSystem->Load("libITSUpgradeSim");
  gSystem->Load("libITSUpgradeRec");

  // TGeoGlobalMagField::Instance()->
  //   SetField(new AliMagF("Maps","Maps", -1., -1., AliMagF::k5kG));
  // // TGeoManager::Import("geometry.root");
  AliCDBManager* man = AliCDBManager::Instance();
  man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  man->SetSpecificStorage("GRP/GRP/Data",
			  Form("local://%s",gSystem->pwd()));
  man->SetSpecificStorage("ITS/Align/Data",
			  Form("local://%s",gSystem->pwd()));
  man->SetSpecificStorage("ITS/Calib/RecoParam",
			  Form("local://%s",gSystem->pwd()));
  man->SetRun(0);
  if ( !TGeoGlobalMagField::Instance()->GetField() ) {
    printf("Loading field map...\n");
    AliGRPManager grpMan;
    if( !grpMan.ReadGRPEntry() ) { 
      printf("Cannot get GRP entry\n"); 
    }
    if( !grpMan.SetMagField() ) { 
      printf("Problem with magnetic field setup\n"); 
    }
  }
  AliGeomManager::LoadGeometry("geometry.root");
  //
  //
  AliCDBEntry* ent = man->Get("ITS/Calib/RecoParam");
  AliITSURecoParam* par = (AliITSURecoParam*)((TObjArray*)ent->GetObject())->At(1);
  //
  AliITSUReconstructor *rec = new AliITSUReconstructor();
  rec->SetRecoParam(par);
  //
  rec->Init();
  AliITSUCATracker *tracker = new AliITSUCATracker();
  tracker->SetPhiCut(0.15f);
  //tracker->SetThetaBin(0.03f);
  tracker->SetChi2Cut(3000);
  tracker->Init(rec);


  TFile *esdFile=TFile::Open("AliESDs.root","recreate");
  TTree *esdTree = new TTree("esdTree", "Tree with ESD objects");
  AliESDEvent *esd=new AliESDEvent();
  esd->CreateStdContent();
  esd->WriteToTree(esdTree);
    
  TFile *clsFile=TFile::Open("ITS.RecPoints.root");
    
  AliRunLoader *rl = AliRunLoader::Open("galice.root","something");
  rl->LoadHeader();

  TH1F fGHisto("ghisto","Good tracks #chi^{2};#chi^{2};Entries",100,0,400);
  TH1F fFHisto("fhisto","Fake tracks #chi^{2};#chi^{2};Entries",100,0,400);

  TStopwatch timer;    
  Int_t nEvents=rl->GetNumberOfEvents();
  for (Int_t i=0; i<nEvents; i++) {
    //for ( Int_t i=1; i<2; i++) {  
    cout<<"\nEvent number "<<i<<endl;
    rl->GetEvent(i);

    const AliESDVertex *vtx=SetMCvertex(rl,tracker);
    esd->SetPrimaryVertexSPD(vtx);              

    TTree *cTree=(TTree *)clsFile->Get(Form("Event%d/TreeR",i));
    tracker->LoadClusters(cTree);
    tracker->Clusters2Tracks(esd);
    tracker->PropagateBack(esd);
    tracker->RefitInward(esd);
    // fGHisto.Add(tracker->GetGHisto());
    // fFHisto.Add(tracker->GetFHisto());
    tracker->UnloadClusters();

    Int_t n=esd->GetNumberOfTracks();
    cout << "Number of reconstructed tracks " << n << endl;
    for (Int_t t=0; t<n; t++) {
      AliESDtrack *track=esd->GetTrack(t);
      if (!track->RelateToVertex(vtx, tracker->GetBz(), 33)) continue;
      //Double_t r[3]; track->GetXYZ(r);
      //cout<<r[0]<<' '<<r[1]<<' '<<r[2]-vtx->GetZ()<<endl;
    }

    esdTree->Fill();
    esd->Reset();
    delete vtx;
  }
  timer.Stop(); timer.Print();
  #ifdef _TUNING_
  TCanvas *cv1 = new TCanvas("chi2","chi2",1400,1000);
  cv1->Divide(2,2);
  for(int i=0;i<4;i++) {
    cv1->cd(i+1);
    cv1->cd(i+1)->SetLogy();
    tracker->fGoodCombChi2[i]->Draw();
    tracker->fFakeCombChi2[i]->SetLineColor(kRed);
    tracker->fFakeCombChi2[i]->Draw("same");
  }
  TCanvas *ccv1 = new TCanvas("deltan","DeltaN",1400,1000);
  ccv1->Divide(2,2);
  for(int i=0;i<4;i++) {
    ccv1->cd(i+1);
    ccv1->cd(i+1)->SetLogy();
    tracker->fGoodCombN[i]->Draw();
    tracker->fFakeCombN[i]->SetLineColor(kRed);
    tracker->fFakeCombN[i]->Draw("same");
  }
  TCanvas *cv2 = new TCanvas("chi2tracks","chi2tracks");
  cv2->cd();
  cv2->cd()->SetLogy();
  tracker->fGoodCombChi2[4]->Draw();
  tracker->fFakeCombChi2[4]->SetLineColor(kRed);
  tracker->fFakeCombChi2[4]->Draw("same");
  TCanvas *cv3 = new TCanvas();
  cv3->cd();
  tracker->fTanF->SetLineColor(kRed);
  tracker->fTanF->Draw("");
  tracker->fTan->Draw("same");
  TCanvas *cv33 = new TCanvas();
  cv33->cd();
  tracker->fPhiF->SetLineColor(kRed);
  tracker->fPhiF->Draw("");
  tracker->fPhi->Draw("same");
  // TCanvas *cv4 = new TCanvas();
  // cv4->cd();
  // tracker->fNEntries->Draw();
  for (int i = 0; i < 6; ++i)
  {
    TCanvas *cv = new TCanvas(Form("Doublets%i",i),Form("Doublets%i",i),1400,500);
    cv->Divide(2);
    cv->cd(1);
    tracker->fGDZ[i]->Draw();
    tracker->fFDZ[i]->SetLineColor(kRed);
    tracker->fFDZ[i]->Draw("same");
    cv->cd(2);
    tracker->fGDXY[i]->Draw();
    tracker->fFDXY[i]->SetLineColor(kRed);
    tracker->fFDXY[i]->Draw("same");
  }
  for (int i = 0; i < 5; ++i)
  {
    TCanvas *cv = new TCanvas(Form("Cells%i",i),Form("Cells%i",i),1400,500);
    cv->Divide(2);
    cv->cd(1);
    tracker->fGDCAZ[i]->Draw();
    tracker->fFDCAZ[i]->SetLineColor(kRed);
    tracker->fFDCAZ[i]->Draw("same");
    cv->cd(2);
    tracker->fGDCAXY[i]->Draw();
    tracker->fFDCAXY[i]->SetLineColor(kRed);
    tracker->fFDCAXY[i]->Draw("same");
  }
  // TCanvas *ccv4 = new TCanvas("iparams","Impact Parameters",1000,700);
  // ccv4->Divide(2);
  // ccv4->cd(1);
  // tracker->fIPGoodXY->Draw();
  // tracker->fIPFakeXY->SetLineColor(kRed);
  // tracker->fIPFakeXY->Draw("same");
  // ccv4->cd(2);
  // tracker->fIPGoodZ->Draw();
  // tracker->fIPFakeZ->SetLineColor(kRed);
  // tracker->fIPFakeZ->Draw("same");
  #endif
  delete tracker;
  //delete clsFile;
  esdFile->cd();
  esdTree->Write();
  delete esd;
  delete esdFile;

}

const AliESDVertex *SetMCvertex(const AliRunLoader *rl, AliTracker *tracker) {
  AliGenEventHeader *h=rl->GetHeader()->GenEventHeader();
  TArrayF vtx(3);
  h->PrimaryVertex(vtx);
  cout<<"Vertex "<<vtx[0]<<' '<<vtx[1]<<' '<<vtx[2]<<endl;
  Double_t xyz[]={vtx[0],vtx[1],vtx[2]};
  Double_t ers[]={2.,2.,2.};
  tracker->SetVertex(xyz,ers);
  AliESDVertex *vertex=new AliESDVertex(xyz,ers);
  return vertex;
}
 testTrackerCA.C:1
 testTrackerCA.C:2
 testTrackerCA.C:3
 testTrackerCA.C:4
 testTrackerCA.C:5
 testTrackerCA.C:6
 testTrackerCA.C:7
 testTrackerCA.C:8
 testTrackerCA.C:9
 testTrackerCA.C:10
 testTrackerCA.C:11
 testTrackerCA.C:12
 testTrackerCA.C:13
 testTrackerCA.C:14
 testTrackerCA.C:15
 testTrackerCA.C:16
 testTrackerCA.C:17
 testTrackerCA.C:18
 testTrackerCA.C:19
 testTrackerCA.C:20
 testTrackerCA.C:21
 testTrackerCA.C:22
 testTrackerCA.C:23
 testTrackerCA.C:24
 testTrackerCA.C:25
 testTrackerCA.C:26
 testTrackerCA.C:27
 testTrackerCA.C:28
 testTrackerCA.C:29
 testTrackerCA.C:30
 testTrackerCA.C:31
 testTrackerCA.C:32
 testTrackerCA.C:33
 testTrackerCA.C:34
 testTrackerCA.C:35
 testTrackerCA.C:36
 testTrackerCA.C:37
 testTrackerCA.C:38
 testTrackerCA.C:39
 testTrackerCA.C:40
 testTrackerCA.C:41
 testTrackerCA.C:42
 testTrackerCA.C:43
 testTrackerCA.C:44
 testTrackerCA.C:45
 testTrackerCA.C:46
 testTrackerCA.C:47
 testTrackerCA.C:48
 testTrackerCA.C:49
 testTrackerCA.C:50
 testTrackerCA.C:51
 testTrackerCA.C:52
 testTrackerCA.C:53
 testTrackerCA.C:54
 testTrackerCA.C:55
 testTrackerCA.C:56
 testTrackerCA.C:57
 testTrackerCA.C:58
 testTrackerCA.C:59
 testTrackerCA.C:60
 testTrackerCA.C:61
 testTrackerCA.C:62
 testTrackerCA.C:63
 testTrackerCA.C:64
 testTrackerCA.C:65
 testTrackerCA.C:66
 testTrackerCA.C:67
 testTrackerCA.C:68
 testTrackerCA.C:69
 testTrackerCA.C:70
 testTrackerCA.C:71
 testTrackerCA.C:72
 testTrackerCA.C:73
 testTrackerCA.C:74
 testTrackerCA.C:75
 testTrackerCA.C:76
 testTrackerCA.C:77
 testTrackerCA.C:78
 testTrackerCA.C:79
 testTrackerCA.C:80
 testTrackerCA.C:81
 testTrackerCA.C:82
 testTrackerCA.C:83
 testTrackerCA.C:84
 testTrackerCA.C:85
 testTrackerCA.C:86
 testTrackerCA.C:87
 testTrackerCA.C:88
 testTrackerCA.C:89
 testTrackerCA.C:90
 testTrackerCA.C:91
 testTrackerCA.C:92
 testTrackerCA.C:93
 testTrackerCA.C:94
 testTrackerCA.C:95
 testTrackerCA.C:96
 testTrackerCA.C:97
 testTrackerCA.C:98
 testTrackerCA.C:99
 testTrackerCA.C:100
 testTrackerCA.C:101
 testTrackerCA.C:102
 testTrackerCA.C:103
 testTrackerCA.C:104
 testTrackerCA.C:105
 testTrackerCA.C:106
 testTrackerCA.C:107
 testTrackerCA.C:108
 testTrackerCA.C:109
 testTrackerCA.C:110
 testTrackerCA.C:111
 testTrackerCA.C:112
 testTrackerCA.C:113
 testTrackerCA.C:114
 testTrackerCA.C:115
 testTrackerCA.C:116
 testTrackerCA.C:117
 testTrackerCA.C:118
 testTrackerCA.C:119
 testTrackerCA.C:120
 testTrackerCA.C:121
 testTrackerCA.C:122
 testTrackerCA.C:123
 testTrackerCA.C:124
 testTrackerCA.C:125
 testTrackerCA.C:126
 testTrackerCA.C:127
 testTrackerCA.C:128
 testTrackerCA.C:129
 testTrackerCA.C:130
 testTrackerCA.C:131
 testTrackerCA.C:132
 testTrackerCA.C:133
 testTrackerCA.C:134
 testTrackerCA.C:135
 testTrackerCA.C:136
 testTrackerCA.C:137
 testTrackerCA.C:138
 testTrackerCA.C:139
 testTrackerCA.C:140
 testTrackerCA.C:141
 testTrackerCA.C:142
 testTrackerCA.C:143
 testTrackerCA.C:144
 testTrackerCA.C:145
 testTrackerCA.C:146
 testTrackerCA.C:147
 testTrackerCA.C:148
 testTrackerCA.C:149
 testTrackerCA.C:150
 testTrackerCA.C:151
 testTrackerCA.C:152
 testTrackerCA.C:153
 testTrackerCA.C:154
 testTrackerCA.C:155
 testTrackerCA.C:156
 testTrackerCA.C:157
 testTrackerCA.C:158
 testTrackerCA.C:159
 testTrackerCA.C:160
 testTrackerCA.C:161
 testTrackerCA.C:162
 testTrackerCA.C:163
 testTrackerCA.C:164
 testTrackerCA.C:165
 testTrackerCA.C:166
 testTrackerCA.C:167
 testTrackerCA.C:168
 testTrackerCA.C:169
 testTrackerCA.C:170
 testTrackerCA.C:171
 testTrackerCA.C:172
 testTrackerCA.C:173
 testTrackerCA.C:174
 testTrackerCA.C:175
 testTrackerCA.C:176
 testTrackerCA.C:177
 testTrackerCA.C:178
 testTrackerCA.C:179
 testTrackerCA.C:180
 testTrackerCA.C:181
 testTrackerCA.C:182
 testTrackerCA.C:183
 testTrackerCA.C:184
 testTrackerCA.C:185
 testTrackerCA.C:186
 testTrackerCA.C:187
 testTrackerCA.C:188
 testTrackerCA.C:189
 testTrackerCA.C:190
 testTrackerCA.C:191
 testTrackerCA.C:192
 testTrackerCA.C:193
 testTrackerCA.C:194
 testTrackerCA.C:195
 testTrackerCA.C:196
 testTrackerCA.C:197
 testTrackerCA.C:198
 testTrackerCA.C:199
 testTrackerCA.C:200
 testTrackerCA.C:201
 testTrackerCA.C:202
 testTrackerCA.C:203
 testTrackerCA.C:204
 testTrackerCA.C:205
 testTrackerCA.C:206
 testTrackerCA.C:207
 testTrackerCA.C:208
 testTrackerCA.C:209
 testTrackerCA.C:210
 testTrackerCA.C:211
 testTrackerCA.C:212
 testTrackerCA.C:213
 testTrackerCA.C:214
 testTrackerCA.C:215
 testTrackerCA.C:216
 testTrackerCA.C:217