ROOT logo
/*
  //Analysis of the output of AliTPCtaskPID.
  //3 6D histograms  - THnSparse created in the task:
  //TPC raw dEdx
  //TPC normalized dEdx (dEdx_rec/dNdx_mc)
  //TPC PID probabilities
  //
  //The values are binned in following variables:
  // Some of them are correlated - but THnSpase handle it  
  //                               ~ 14 MBy per object needed
  //


  .x ~/NimStyle.C
  .x ~/UliStyle.C
  .L $ALICE_ROOT/PWGPP/Macros/tpcQA.C+
  Init();
  
  // 0 - chi2
  // 1 - number of clusters
  // 2 - number of findable clusters
  // 3 - number of clusters/ findable clusters  
  // 4 - pt          - at the entrance of the TPC
  // 5 - eta         - at the entrance of the TPC
  // 6 - phi         - at the entrance of the TPC
  GetProjection(fTPCqa,0,4,  0,10, -1,1, -3.14,3.14)  ->ProfileX()->Draw();
  //
  MakeReport();
  
 
*/
#include "TFile.h"
#include "THnSparse.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TProfile.h"
#include "TF1.h"

#include "TLegend.h"
#include "TCanvas.h"

#include "AliPID.h"

Int_t kmicolors[10]={1,2,3,4,6,7,8,9,10,11};
Int_t kmimarkers[10]={21,22,23,24,25,26,27,28,29,30};



THnSparse * fTPCqa     = 0;
TString selName;
Int_t version=0;

void Init(){
  TFile *f = new TFile("OutputQA.root");
  TObjArray *array= (TObjArray*)f->Get("tpcTaskQA");
  delete f;
  new TCanvas("dEdx study");
  fTPCqa = (THnSparse*)array->At(0);
}


TH2F* GetProjection(THnSparse*his, Int_t i0, Int_t i1,  Float_t p0, Float_t p1, Float_t eta0, Float_t eta1, Float_t phi0, Float_t phi1){

  his->GetAxis(4)->SetRangeUser(p0,p1);
  his->GetAxis(5)->SetRangeUser(eta0,eta1);
  his->GetAxis(6)->SetRangeUser(phi0,phi1);
  TH2F * res = (TH2F*) his->Projection(i0,i1);
  res->SetXTitle(his->GetAxis(i1)->GetTitle());
  res->SetYTitle(his->GetAxis(i0)->GetTitle());
  return res;
}

TH1F* GetProjection(THnSparse*his, Int_t i0,  Float_t p0, Float_t p1, Float_t eta0, Float_t eta1, Float_t phi0, Float_t phi1){
  
  his->GetAxis(4)->SetRangeUser(p0,p1);
  his->GetAxis(5)->SetRangeUser(eta0,eta1);
  his->GetAxis(6)->SetRangeUser(phi0,phi1);
  TH1F * res = (TH1F*) his->Projection(i0);
  res->SetXTitle(his->GetAxis(i0)->GetTitle());
  return res;
}


void DrawChi2(){
  //
  //
  //
  TCanvas *canvas= new TCanvas("Chi2","Chi2");
  canvas->Divide(2,2);
  //
  canvas->cd(1);
  TH1 *hischi2  =  GetProjection(fTPCqa,0,  0,10, -0.9,0.9, -3.14,3.14); 
  hischi2->SetXTitle("#chi^{2}/N_{cl}");
  hischi2->Draw();
  canvas->cd(2)->SetLogx(kTRUE);
  TH1 *hischi2Pt  =  GetProjection(fTPCqa,0,4,  0,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Pt->SetXTitle("p_{t} (GeV/c)");
  hischi2Pt->SetYTitle("#chi^{2}/N_{cl}");
  hischi2Pt->SetMinimum(0);
  hischi2Pt->SetMaximum(4);
  hischi2Pt->Draw();
  //
  canvas->cd(3)->SetLogx(kFALSE);
  TH1 *hischi2Eta  =  GetProjection(fTPCqa,0,5,  0,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Eta->SetXTitle("#eta");
  hischi2Eta->SetYTitle("#chi^{2}/N_{cl}"); 
  hischi2Eta->SetMinimum(0);
  hischi2Eta->SetMaximum(4);
  hischi2Eta->Draw();
  
  canvas->cd(4)->SetLogx(kFALSE);
  TH1 *hischi2Phi  =  GetProjection(fTPCqa,0,6,  0,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Phi->SetXTitle("#phi");
  hischi2Phi->SetYTitle("#chi^{2}/N_{cl}");  
  hischi2Phi->SetMinimum(0);
  hischi2Phi->SetMaximum(4);
  hischi2Phi->Draw();
  
  canvas->SaveAs("pic/chi2.eps");
  canvas->SaveAs("pic/chi2.gif");
}



void DrawNclRatio(){
  //
  //
  //
  TCanvas *canvas= new TCanvas("Ncl_Nclf","Ncl_Nclf");
  canvas->Divide(2,2);
  //
  canvas->cd(1);
  TH1 *hischi2  =  GetProjection(fTPCqa,3,  0,10, -0.9,0.9, -3.14,3.14); 
  hischi2->SetXTitle("N_{cl}/N_{f}");
  hischi2->Draw();
  canvas->cd(2)->SetLogx(kTRUE);
  TH1 *hischi2Pt  =  GetProjection(fTPCqa,3,4,  0,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Pt->SetXTitle("p_{t} (GeV/c)");
  hischi2Pt->SetYTitle("N_{cl}/N_{f}");
  hischi2Pt->SetMinimum(0.6);
  hischi2Pt->SetMaximum(1.1);
  hischi2Pt->Draw();
  //
  canvas->cd(3)->SetLogx(kFALSE);
  TH1 *hischi2Eta  =  GetProjection(fTPCqa,3,5,  0,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Eta->SetXTitle("#eta");
  hischi2Eta->SetYTitle("N_{cl}/N_{f}"); 
  hischi2Eta->SetMinimum(0.6);
  hischi2Eta->SetMaximum(1.1);
  hischi2Eta->Draw();
  
  canvas->cd(4)->SetLogx(kFALSE);
  TH1 *hischi2Phi  =  GetProjection(fTPCqa,3,6,  0,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Phi->SetXTitle("#phi");
  hischi2Phi->SetYTitle("N_{cl}/N_{f}");  
  hischi2Phi->SetMinimum(0.6);
  hischi2Phi->SetMaximum(1.1);
  hischi2Phi->Draw();
  
  canvas->SaveAs("pic/nclratio.eps");
  canvas->SaveAs("pic/nclratio.gif");
}


void DrawNcl(){
  //
  //
  //
  TCanvas *canvas= new TCanvas("Ncl","Ncl");
  canvas->Divide(2,2);
  //
  canvas->cd(1);
  TH1 *hischi2  =  GetProjection(fTPCqa,1,  0.5,10, -0.9,0.9, -3.14,3.14); 
  hischi2->SetXTitle("N_{cl}");
  hischi2->Draw();
  canvas->cd(2)->SetLogx(kTRUE);
  TH1 *hischi2Pt  =  GetProjection(fTPCqa,1,4,  0.5,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Pt->SetXTitle("p_{t} (GeV/c)");
  hischi2Pt->SetYTitle("N_{cl}");
  hischi2Pt->SetMinimum(50);
  hischi2Pt->SetMaximum(160);
  hischi2Pt->Draw();
  //
  canvas->cd(3)->SetLogx(kFALSE);
  TH1 *hischi2Eta  =  GetProjection(fTPCqa,1,5,  0.5,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Eta->SetXTitle("#eta");
  hischi2Eta->SetYTitle("N_{cl}"); 
  hischi2Eta->SetMinimum(50);
  hischi2Eta->SetMaximum(160);
  hischi2Eta->Draw();
  
  canvas->cd(4)->SetLogx(kFALSE);
  TH1 *hischi2Phi  =  GetProjection(fTPCqa,1,6,  0.5,10, -0.9,0.9, -3.14,3.14)->ProfileX(); 
  hischi2Phi->SetXTitle("#phi");
  hischi2Phi->SetYTitle("N_{cl}");  
  hischi2Phi->SetMinimum(50);
  hischi2Phi->SetMaximum(160);
  hischi2Phi->Draw();

  canvas->SaveAs("pic/ncl.eps");
  canvas->SaveAs("pic/ncl.gif");
}

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