]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/QA/tasks/macros/drawTHnSparse.C
Fix in GetTPCClusterInfo(...) (M.Ivanov)
[u/mrichter/AliRoot.git] / HLT / QA / tasks / macros / drawTHnSparse.C
CommitLineData
21fba467 1// $Id$
2/*
3 * Drawing macro for reading the THnSparse output of the
4 * HLT/QA/tasks/AliAnalysisTaskHLTCentralBarrel.cxx task.
5 *
6 * The cuts are user defined as arguments of the function.
7 * The input file contains information about the run number
8 * and date that will appear in the canvas title.
9 *
10 * The cuts are turned into strings and incorporated in the
11 * name of the output file, which contains canvases with event
12 * and track properties for HLT and offline.
13 *
14 * Since the run information is available, there will be a new
15 * folder created and the canvas ROOT files will be saved in there.
16 *
17 * @ingroup alihlt_qa
18 * @author Kalliopi.Kanaki@ift.uib.no
19 */
20
21void drawTHnSparse( TString inputFile,
22 double minEta=-2, double maxEta=2,
23 int minTrackMult=0, int maxTrackMult=20000,
24 double minPt=0, double maxPt=200,
25 double minDCAr=-80, double maxDCAr=80,
26 double minDCAz=-80, double maxDCAz=80,
27 int minTPCclus=0, int maxTPCclus=200,
28 int minITSclus=1, int maxITSclus=6,
29 int vertexStatus=2
30 )
31{
32 gROOT->SetStyle("Plain");
33 gStyle->SetPalette(1);
34 gStyle->SetOptStat(10);
35 TH1::AddDirectory(kFALSE);
36
37 TFile *file = TFile::Open(inputFile);
38 if(!file){
39 printf("Error: No file %s in folder.\n", inputFile);
40 return;
41 }
42
43 TList *list = static_cast<TList*>(file->Get("esd_thnsparse"));
44 if(!list){
45 printf("Error: No List contained in file %s.\n", inputFile);
46 return;
47 }
48
49 THnSparseF *heventHLT = (THnSparse*)list->FindObject("fEventHLT");
50 if(!heventHLT){
51 printf("Error: There is no HLT THnSparse object in file %s\n", inputFile);
52 }
53 THnSparseF *heventOFF = (THnSparse*)list->FindObject("fEventOFF");
54 if(!heventOFF){
55 printf("Error: There is no OFF THnSparse object in file %s\n", inputFile);
56 }
57 THnSparseF *htrackHLT = (THnSparse*)list->FindObject("fTrackHLT");
58 if(!htrackHLT){
59 printf("Error: No HLT THnSparse object found\n");
60 return;
61 }
62 THnSparseF *htrackOFF = (THnSparse*)list->FindObject("fTrackOFF");
63 if(!htrackOFF){
64 printf("Error: No OFF THnSparse object found\n");
65 return;
66 }
67
68
69 TText *hText = list->FindObject("text");
70 if(!hText) printf("No hText\n");
71
72 TString t = "event properties for ";
73 t+=hText->GetTitle();
74
75 TCanvas *can0 = new TCanvas("can0",t,900,600);
76 can0->Divide(3,2);
77 plotEventQuantities(can0,heventOFF,heventHLT,hText);
78
79 TCanvas *can1 = new TCanvas("can1","track properties",1100,900);
80 can1->Divide(4,3);
81 plotTrackQuantities(can1, htrackOFF, htrackHLT, hText,
82 minEta, maxEta, minPt, maxPt, minDCAr, maxDCAr, minDCAz, maxDCAz, minTPCclus, maxTPCclus, minITSclus, maxITSclus, minTrackMult, maxTrackMult, vertexStatus);
83
84 TCanvas *can2 = new TCanvas("can2","2-D HLT track correlations",1200,800);
85 can2->Divide(4,2);
86 plot2D(can2, htrackHLT, minEta, maxEta, minPt, maxPt, minDCAr, maxDCAr, minDCAz, maxDCAz, minTPCclus, maxTPCclus, minITSclus, maxITSclus, minTrackMult, maxTrackMult);
87
88 TCanvas *can3 = new TCanvas("can3","2-D OFF track correlations",1200,800);
89 can3->Divide(4,2);
90 plot2D(can3, htrackOFF, minEta, maxEta, minPt, maxPt, minDCAr, maxDCAr, minDCAz, maxDCAz, minTPCclus, maxTPCclus, minITSclus, maxITSclus, minTrackMult, maxTrackMult);
91
92 TString folder = hText->GetTitle();
93 folder.ReplaceAll(" ","");
94 folder.Remove(0,3);
95 folder.Remove(6,15);
96
97 gSystem->Exec("mkdir "+folder);
98 can0->SaveAs(folder+"/event_properties.root");
99
100
101 stringstream sMinEta, sMaxEta;
102 sMinEta << minEta; sMaxEta << maxEta;
103
104 stringstream sMinTM, sMaxTM;
105 sMinTM << minTrackMult; sMaxTM << maxTrackMult;
106
107 stringstream sMinPt, sMaxPt;
108 sMinPt << minPt; sMaxPt << maxPt;
109
110 stringstream sMinDCAr, sMaxDCAr;
111 sMinDCAr << minDCAr; sMaxDCAr << maxDCAr;
112
113 stringstream sMinDCAz, sMaxDCAz;
114 sMinDCAz << minDCAz; sMaxDCAz << maxDCAz;
115
116 stringstream sMinTPCclus, sMaxTPCclus;
117 sMinTPCclus << minTPCclus; sMaxTPCclus << maxTPCclus;
118
119 stringstream sMinITSclus, sMaxITSclus;
120 sMinITSclus << minITSclus; sMaxITSclus << maxITSclus;
121
122 stringstream sVS; sVS << vertexStatus;
123
124 TString trackName = "track_properties_";
125 trackName += "eta"+sMinEta.str()+"_"+sMaxEta.str()+"_";
126 trackName += "Pt"+sMinPt.str()+"_"+sMaxPt.str()+"_";
127 trackName += "TM"+sMinTM.str()+"_"+sMaxTM.str()+"_";
128 trackName += "DCAr"+sMinDCAr.str()+"_"+sMaxDCAr.str()+"_";
129 trackName += "DCAz"+sMinDCAz.str()+"_"+sMaxDCAz.str()+"_";
130 trackName += "TPCclus"+sMinTPCclus.str()+"_"+sMaxTPCclus.str()+"_";
131 trackName += "ITSclus"+sMinITSclus.str()+"_"+sMaxITSclus.str()+"_";
132 if(vertexStatus==2){
133 trackName.Chop(); trackName += ".root";
134 }
135 else {
136 trackName += "VS"+sVS.str();
137 trackName += ".root";
138 }
139 can1->SaveAs(folder+"/"+trackName);
140
141 can2->SaveAs(folder+"/HLT_2D_track_correlations.root");
142 can3->SaveAs(folder+"/OFF_2D_track_correlations.root");
143
144 return;
145}
146
147void printStats(TH1D *hlt, TH1D *off){
148 gPad->Update();
149 TPaveStats *st1 = (TPaveStats*)hlt->FindObject("stats");
150 st1->SetLineColor(0);
151
152 gPad->Update();
153 TPaveStats *st2 = (TPaveStats*)off->FindObject("stats");
154 st2->SetY2NDC(st1->GetY1NDC()-0.05);
155 st2->SetY1NDC(st2->GetY2NDC()-TMath::Abs(st1->GetY1NDC()-st1->GetY2NDC()));
156 st2->SetLineColor(0);
157 st2->SetTextColor(off->GetLineColor());
158 st2->SetFillStyle(0);
159 st2->Draw();
160}
161
162void defineYaxisMax(TH1D *hlt, TH1D *off){
163 if(hlt->GetMaximum() > off->GetMaximum()) off->SetMaximum(1.1*hlt->GetMaximum());
164 else hlt->SetMaximum(1.1*off->GetMaximum());
165}
166
167void printLegend(TLegend *l, TH1D *hlt, TH1D *off){
168 l->SetFillColor(10);
169 l->SetLineColor(10);
170 l->AddEntry(hlt, "HLT", "l");
171 l->AddEntry(off, "OFF", "l");
172 l->Draw("same");
173}
174
175//====================== for 1D distributions ===============================//
176
177void plotAid(TCanvas* can, THnSparse* hOFF, THnSparse* hHLT, TText* hText, TH1D *hlt, TH1D *off, TLegend *l, int size,
178 double minEta, double maxEta,
179 double minPt, double maxPt,
180 double minDCAr, double maxDCAr,
181 double minDCAz, double maxDCAz,
182 int minTPCclus, int maxTPCclus,
183 int minITSclus, int maxITSclus,
184 int minTrackMult, int maxTrackMult,
185 int VS
186 )
187{
188 hHLT->GetAxis(0)->SetRangeUser(minPt,maxPt);
189 hHLT->GetAxis(1)->SetRangeUser(minTPCclus,maxTPCclus);
190 hHLT->GetAxis(3)->SetRangeUser(minEta, maxEta);
191 hHLT->GetAxis(5)->SetRangeUser(minDCAr, maxDCAr);
192 hHLT->GetAxis(6)->SetRangeUser(minDCAz, maxDCAz);
193 hHLT->GetAxis(10)->SetRangeUser(minITSclus, maxITSclus);
194 hHLT->GetAxis(11)->SetRangeUser(minTrackMult, maxTrackMult);
195 if(VS!=2) hHLT->GetAxis(12)->SetRangeUser(VS,VS);
196
197 hOFF->GetAxis(0)->SetRangeUser(minPt,maxPt);
198 hOFF->GetAxis(1)->SetRangeUser(minTPCclus,maxTPCclus);
199 hOFF->GetAxis(3)->SetRangeUser(minEta, maxEta);
200 hOFF->GetAxis(5)->SetRangeUser(minDCAr, maxDCAr);
201 hOFF->GetAxis(6)->SetRangeUser(minDCAz, maxDCAz);
202 hOFF->GetAxis(10)->SetRangeUser(minITSclus, maxITSclus);
203 hOFF->GetAxis(11)->SetRangeUser(minTrackMult, maxTrackMult);
204 if(VS!=2) hOFF->GetAxis(12)->SetRangeUser(VS,VS);
205
206 for(int i=0; i<size; i++){
207
208 hlt = hHLT->Projection(i);
209 off = hOFF->Projection(i);
210 hlt->SetTitle(hHLT->Projection(i)->GetTitle());
211 defineYaxisMax(hlt, off);
212 off->SetLineColor(2);
213
214 can->cd(i+1);
215 hlt->Draw();
216 off->Draw("sames");
217 printStats(hlt, off);
218 }
219 printLegend(l,hlt,off);
220}
221
222//====================== for 2D distributions ===============================//
223
224void plot2D(TCanvas* can, THnSparse* h,
225 double minEta, double maxEta,
226 double minPt, double maxPt,
227 double minDCAr, double maxDCAr,
228 double minDCAz, double maxDCAz,
229 int minTPCclus, int maxTPCclus,
230 int minITSclus, int maxITSclus,
231 int minTrackMult, int maxTrackMult
232 )
233{
234
235 h->GetAxis(0)->SetRangeUser(minPt,maxPt);
236 h->GetAxis(1)->SetRangeUser(minTPCclus,maxTPCclus);
237 h->GetAxis(3)->SetRangeUser(minEta, maxEta);
238 h->GetAxis(5)->SetRangeUser(minDCAr, maxDCAr);
239 h->GetAxis(6)->SetRangeUser(minDCAz, maxDCAz);
240 h->GetAxis(10)->SetRangeUser(minITSclus, maxITSclus);
241 h->GetAxis(11)->SetRangeUser(minTrackMult, maxTrackMult);
242
243 can->cd(1);
244 h->Projection(1,0)->Draw("colz");
245 can->cd(2);
246 h->Projection(1,3)->Draw("colz");
247 can->cd(3);
248 h->Projection(1,5)->Draw("colz");
249 can->cd(4);
250 h->Projection(1,6)->Draw("colz");
251
252 can->cd(5);
253 h->Projection(6,0)->Draw("colz");
254 can->cd(6);
255 h->Projection(6,3)->Draw("colz");
256 can->cd(7);
257 h->Projection(3,0)->Draw("colz");
258 can->cd(8);
259 h->Projection(3,4)->Draw("colz");
260
261}
262
263void plotAid(TCanvas* can, THnSparse* hOFF, THnSparse* hHLT, TText* hText, TH1D *hlt, TH1D *off, TLegend *l, int size){
264
265 for(int i=0; i<size; i++){
266 hlt = hHLT->Projection(i);
267 off = hOFF->Projection(i);
268 hlt->SetTitle(hHLT->Projection(i)->GetTitle());
269 defineYaxisMax(hlt, off);
270 off->SetLineColor(2);
271
272 can->cd(i+1);
273 hlt->Draw();
274 off->Draw("sames");
275 printStats(hlt, off);
276 }
277 printLegend(l,hlt,off);
278}
279
280void plotEventQuantities(TCanvas* can, THnSparse* heventOFF, THnSparse* heventHLT, TText* hText){
281
282 TH1D *hlt = NULL;
283 TH1D *off = NULL;
284
285 TLegend *leg1 = new TLegend(0.6,0.6,0.8,0.8);
286
287 plotAid(can, heventOFF, heventHLT, hText, hlt, off, leg1, 6);
288 return;
289}
290
291void plotTrackQuantities( TCanvas* can, THnSparse* htrackOFF, THnSparse* htrackHLT, TText* hText,
292 double minEta, double maxEta,
293 double minPt, double maxPt,
294 double minDCAr, double maxDCAr,
295 double minDCAz, double maxDCAz,
296 int minTPCclus, int maxTPCclus,
297 int minITSclus, int maxITSclus,
298 int minTrackMult, int maxTrackMult,
299 int VS
300 )
301{
302 TH1D *hlt = NULL;
303 TH1D *off = NULL;
304
305 TLegend *leg1 = new TLegend(0.6,0.6,0.8,0.8);
306 plotAid(can, htrackOFF, htrackHLT, hText, hlt, off, leg1, 11,
307 minEta, maxEta, minPt, maxPt, minDCAr, maxDCAr, minDCAz, maxDCAz, minTPCclus, maxTPCclus, minITSclus, maxITSclus, minTrackMult, maxTrackMult, VS);
308return;
309}