ROOT logo
#include <iostream.h>
#include <fstream.h>

void AliITSPlotTracksV1()
{
	TFile *file = new TFile("AliITSComparisonV1.root");
	TTree *tree = (TTree*)file->Get("Eval"); 
	
	if (!tree) {
		cerr << "Evaluation tree not found!" << endl;
		return;
	}
	
	// histogram definition - I (efficiency)
	TH1D *hFindables = new TH1D("hFindables", "Findable tracks", 10, 0, 2);
	TH1D *hGood = new TH1D("hGood", "Good found tracks", 10, 0, 2);
	TH1D *hFake = new TH1D("hFake", "Fake found tracks", 10, 0, 2);
	TH1D *hRatioG = new TH1D("hRatioG", "", 10, 0, 2);
	TH1D *hRatioF = new TH1D("hRatioF", "", 10, 0, 2);
	hGood->Sumw2(); 
	hFake->Sumw2();  
	hFindables->Sumw2();
	hRatioG->SetLineColor(kBlue); 
	hRatioG->SetLineWidth(2);
	hRatioF->SetLineColor(kRed); 
	hRatioF->SetLineWidth(2);
	
	// histograms definition - II (resolution)
	TH1D *hPhi    = new TH1D("hPhi", "#Phi resolution", 50, -15., 15.); 
	TH1D *hLambda = new TH1D("hLambda", "#lambda resolution", 50, -15., 15.); 
	TH1D *hPt     = new TH1D("hPt", "Relative Pt resolution", 40, -10., 10.);
	TH1D *hDtot   = new TH1D("hDtot", "Total impact parameter distribution", 100, 0., 2000.); 
	TH1D *hDr     = new TH1D("hDr", "Transv. impact parameter distribution", 50, -1000., 1000.);  
	TH1D *hDz     = new TH1D("hDz", "Long. impact parameter distribution", 50, -1000., 1000.);  
  	hPhi->SetFillColor(4);
	hLambda->SetFillColor(4);
	hPt->SetFillColor(2); 
	hDtot->SetFillColor(6);
	hDr->SetFillColor(kGreen);
	hDz->SetFillColor(kBlue);
	
	// Evaluation tree settings
	Int_t labITS, labTPC, signC;
	Int_t i, j, tot = (Int_t)tree->GetEntries();
	Double_t difpt, diflambda, difphi, Dz, Dr, Dtot, ptg;
	tree->SetBranchAddress("labITS"   , &labITS   );
	tree->SetBranchAddress("labTPC"   , &labTPC   );
	tree->SetBranchAddress("difpt"    , &difpt    ); 
	tree->SetBranchAddress("diflambda", &diflambda);
	tree->SetBranchAddress("difphi"   , &difphi   );
	tree->SetBranchAddress("Dz"       , &Dz       );
	tree->SetBranchAddress("Dr"       , &Dr       );
	tree->SetBranchAddress("Dtot"     , &Dtot     );
	tree->SetBranchAddress("ptg"      , &ptg      );
	tree->SetBranchAddress("signC"    , &signC    );
	
	// Filling the histogram of findable tracks (w.r. to momentum)
	for(i = 0; i < tot; i++) {
		tree->GetEntry(i);
		hFindables->Fill(ptg);
	}
	
	// Filling the evaluation histograms
	Int_t neglabs = 0;
	for(i = 0; i < tot; i++) {
		tree->GetEntry(i);
//		if(signC<0) continue;
		if (labITS < 0) neglabs++;
		if (labITS >= 0) {
			hGood->Fill(ptg); 
			hPt->Fill(difpt);
			hLambda->Fill(diflambda);
			hPhi->Fill(difphi);
			hDtot->Fill(Dtot);
			hDr->Fill(Dr);
			hDz->Fill(Dz);
		}
		else {
			hFake->Fill(ptg);
			neglabs++;
		}
	}
  
	// Drawing
	cerr << "Findable tracks   : " << hFindables->GetEntries() << endl;
	cerr << "Good found tracks : " << hGood->GetEntries() << endl;
	cerr << "Fake found tracks : " << hFake->GetEntries() << endl;
	
	gStyle->SetOptStat(111110);
	gStyle->SetOptFit(1);
	
	TCanvas *c1 = new TCanvas("c1","Parameter resolutions",0,0,700,700);
	c1->Divide(2, 2, 0.001, 0.001);
	c1->cd(1); hPhi->SetXTitle("(mrad)"); hPhi->Draw(); hPhi->Fit("gaus", "Q"); 
	c1->cd(2); hLambda->SetXTitle("(mrad)"); hLambda->Draw(); hLambda->Fit("gaus", "Q");
	c1->cd(3); hPt->SetXTitle("(%)"); hPt->Draw(); hPt->Fit("gaus", "Q");
	c1->cd(4); hDtot->SetXTitle("(micron)"); hDtot->Draw();
	c1->Update();
	
	TCanvas *c2 = new TCanvas("c2","Impact parameters resolution",100,100,700,400);
	c2->Divide(2, 1, 0.001, 0.001);
	c2->cd(1); hDr->SetXTitle("(micron)"); hDr->Draw(); hDr->Fit("gaus", "Q"); 
	c2->cd(2); hDz->SetXTitle("(micron)"); hDz->Draw(); hDz->Fit("gaus", "Q"); 
	c2->Update();
	
	TCanvas *c3 = new TCanvas("c3","Momentum distributions",200,200,800,500);
	c3->Divide(3, 1, 0.001, 0.001);
	c3->cd(1); hGood->Draw(); 
	c3->cd(2); hFake->Draw(); 
	c3->cd(3); hFindables->Draw();
	c3->Update();
	
	TCanvas *c4 = new TCanvas("c4","Tracking efficiency",300,300,800,500);
	hRatioG->Divide(hGood, hFindables, 1., 1.);
	hRatioF->Divide(hFake, hFindables, 1., 1.);
	hRatioG->SetMaximum(1.4);
	hRatioG->SetYTitle("Tracking efficiency");
	hRatioG->SetXTitle("Pt (GeV/c)");
	hRatioG->Draw();  // to not plot the erro bars    hg->Draw("histo");
	hRatioF->SetFillColor(1);
	hRatioF->SetFillStyle(3013);
	hRatioF->SetLineColor(2);
	hRatioF->SetLineWidth(2);
	hRatioF->Draw("same");  // to not plot the error bars  hRatioF->Draw("histosame");
	// a line to mark the best efficiency
	TLine *line1 = new TLine(0,1.0,2,1.0); line1->SetLineStyle(4);
	line1->Draw("same");
	TLine *line2 = new TLine(0,0.9,2,0.9); line2->SetLineStyle(4);
	line2->Draw("histosame");
	// a text explanation
	TText *text = new TText(0.461176,0.248448,"Fake tracks");
	text->SetTextSize(0.05);
	text->Draw();
	text = new TText(0.453919,1.11408,"Good tracks");
	text->SetTextSize(0.05);
	text->Draw();
	c4->Update();
	
	cout << "neglabs = " << neglabs << endl;  // provvisoria
}
 AliITSPlotTracksV1.C:1
 AliITSPlotTracksV1.C:2
 AliITSPlotTracksV1.C:3
 AliITSPlotTracksV1.C:4
 AliITSPlotTracksV1.C:5
 AliITSPlotTracksV1.C:6
 AliITSPlotTracksV1.C:7
 AliITSPlotTracksV1.C:8
 AliITSPlotTracksV1.C:9
 AliITSPlotTracksV1.C:10
 AliITSPlotTracksV1.C:11
 AliITSPlotTracksV1.C:12
 AliITSPlotTracksV1.C:13
 AliITSPlotTracksV1.C:14
 AliITSPlotTracksV1.C:15
 AliITSPlotTracksV1.C:16
 AliITSPlotTracksV1.C:17
 AliITSPlotTracksV1.C:18
 AliITSPlotTracksV1.C:19
 AliITSPlotTracksV1.C:20
 AliITSPlotTracksV1.C:21
 AliITSPlotTracksV1.C:22
 AliITSPlotTracksV1.C:23
 AliITSPlotTracksV1.C:24
 AliITSPlotTracksV1.C:25
 AliITSPlotTracksV1.C:26
 AliITSPlotTracksV1.C:27
 AliITSPlotTracksV1.C:28
 AliITSPlotTracksV1.C:29
 AliITSPlotTracksV1.C:30
 AliITSPlotTracksV1.C:31
 AliITSPlotTracksV1.C:32
 AliITSPlotTracksV1.C:33
 AliITSPlotTracksV1.C:34
 AliITSPlotTracksV1.C:35
 AliITSPlotTracksV1.C:36
 AliITSPlotTracksV1.C:37
 AliITSPlotTracksV1.C:38
 AliITSPlotTracksV1.C:39
 AliITSPlotTracksV1.C:40
 AliITSPlotTracksV1.C:41
 AliITSPlotTracksV1.C:42
 AliITSPlotTracksV1.C:43
 AliITSPlotTracksV1.C:44
 AliITSPlotTracksV1.C:45
 AliITSPlotTracksV1.C:46
 AliITSPlotTracksV1.C:47
 AliITSPlotTracksV1.C:48
 AliITSPlotTracksV1.C:49
 AliITSPlotTracksV1.C:50
 AliITSPlotTracksV1.C:51
 AliITSPlotTracksV1.C:52
 AliITSPlotTracksV1.C:53
 AliITSPlotTracksV1.C:54
 AliITSPlotTracksV1.C:55
 AliITSPlotTracksV1.C:56
 AliITSPlotTracksV1.C:57
 AliITSPlotTracksV1.C:58
 AliITSPlotTracksV1.C:59
 AliITSPlotTracksV1.C:60
 AliITSPlotTracksV1.C:61
 AliITSPlotTracksV1.C:62
 AliITSPlotTracksV1.C:63
 AliITSPlotTracksV1.C:64
 AliITSPlotTracksV1.C:65
 AliITSPlotTracksV1.C:66
 AliITSPlotTracksV1.C:67
 AliITSPlotTracksV1.C:68
 AliITSPlotTracksV1.C:69
 AliITSPlotTracksV1.C:70
 AliITSPlotTracksV1.C:71
 AliITSPlotTracksV1.C:72
 AliITSPlotTracksV1.C:73
 AliITSPlotTracksV1.C:74
 AliITSPlotTracksV1.C:75
 AliITSPlotTracksV1.C:76
 AliITSPlotTracksV1.C:77
 AliITSPlotTracksV1.C:78
 AliITSPlotTracksV1.C:79
 AliITSPlotTracksV1.C:80
 AliITSPlotTracksV1.C:81
 AliITSPlotTracksV1.C:82
 AliITSPlotTracksV1.C:83
 AliITSPlotTracksV1.C:84
 AliITSPlotTracksV1.C:85
 AliITSPlotTracksV1.C:86
 AliITSPlotTracksV1.C:87
 AliITSPlotTracksV1.C:88
 AliITSPlotTracksV1.C:89
 AliITSPlotTracksV1.C:90
 AliITSPlotTracksV1.C:91
 AliITSPlotTracksV1.C:92
 AliITSPlotTracksV1.C:93
 AliITSPlotTracksV1.C:94
 AliITSPlotTracksV1.C:95
 AliITSPlotTracksV1.C:96
 AliITSPlotTracksV1.C:97
 AliITSPlotTracksV1.C:98
 AliITSPlotTracksV1.C:99
 AliITSPlotTracksV1.C:100
 AliITSPlotTracksV1.C:101
 AliITSPlotTracksV1.C:102
 AliITSPlotTracksV1.C:103
 AliITSPlotTracksV1.C:104
 AliITSPlotTracksV1.C:105
 AliITSPlotTracksV1.C:106
 AliITSPlotTracksV1.C:107
 AliITSPlotTracksV1.C:108
 AliITSPlotTracksV1.C:109
 AliITSPlotTracksV1.C:110
 AliITSPlotTracksV1.C:111
 AliITSPlotTracksV1.C:112
 AliITSPlotTracksV1.C:113
 AliITSPlotTracksV1.C:114
 AliITSPlotTracksV1.C:115
 AliITSPlotTracksV1.C:116
 AliITSPlotTracksV1.C:117
 AliITSPlotTracksV1.C:118
 AliITSPlotTracksV1.C:119
 AliITSPlotTracksV1.C:120
 AliITSPlotTracksV1.C:121
 AliITSPlotTracksV1.C:122
 AliITSPlotTracksV1.C:123
 AliITSPlotTracksV1.C:124
 AliITSPlotTracksV1.C:125
 AliITSPlotTracksV1.C:126
 AliITSPlotTracksV1.C:127
 AliITSPlotTracksV1.C:128
 AliITSPlotTracksV1.C:129
 AliITSPlotTracksV1.C:130
 AliITSPlotTracksV1.C:131
 AliITSPlotTracksV1.C:132
 AliITSPlotTracksV1.C:133
 AliITSPlotTracksV1.C:134
 AliITSPlotTracksV1.C:135
 AliITSPlotTracksV1.C:136
 AliITSPlotTracksV1.C:137
 AliITSPlotTracksV1.C:138
 AliITSPlotTracksV1.C:139
 AliITSPlotTracksV1.C:140
 AliITSPlotTracksV1.C:141