]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/QA/tasks/macros/drawTHnSparse.C
- remove default "projection" prefix from all histogram titles
[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,
cb9ecd10 28 int minITSclus=0, int maxITSclus=6,
21fba467 29 int vertexStatus=2
30 )
31{
32 gROOT->SetStyle("Plain");
33 gStyle->SetPalette(1);
34 gStyle->SetOptStat(10);
56ce6b77 35 //gROOT->ForceStyle();
21fba467 36 TH1::AddDirectory(kFALSE);
37
38 TFile *file = TFile::Open(inputFile);
39 if(!file){
40 printf("Error: No file %s in folder.\n", inputFile);
41 return;
42 }
43
44 TList *list = static_cast<TList*>(file->Get("esd_thnsparse"));
45 if(!list){
46 printf("Error: No List contained in file %s.\n", inputFile);
47 return;
48 }
49
50 THnSparseF *heventHLT = (THnSparse*)list->FindObject("fEventHLT");
51 if(!heventHLT){
52 printf("Error: There is no HLT THnSparse object in file %s\n", inputFile);
53 }
54 THnSparseF *heventOFF = (THnSparse*)list->FindObject("fEventOFF");
55 if(!heventOFF){
56 printf("Error: There is no OFF THnSparse object in file %s\n", inputFile);
57 }
58 THnSparseF *htrackHLT = (THnSparse*)list->FindObject("fTrackHLT");
59 if(!htrackHLT){
60 printf("Error: No HLT THnSparse object found\n");
61 return;
62 }
63 THnSparseF *htrackOFF = (THnSparse*)list->FindObject("fTrackOFF");
64 if(!htrackOFF){
65 printf("Error: No OFF THnSparse object found\n");
66 return;
67 }
68
69
70 TText *hText = list->FindObject("text");
71 if(!hText) printf("No hText\n");
72
73 TString t = "event properties for ";
74 t+=hText->GetTitle();
75
76 TCanvas *can0 = new TCanvas("can0",t,900,600);
77 can0->Divide(3,2);
78 plotEventQuantities(can0,heventOFF,heventHLT,hText);
79
80 TCanvas *can1 = new TCanvas("can1","track properties",1100,900);
81 can1->Divide(4,3);
82 plotTrackQuantities(can1, htrackOFF, htrackHLT, hText,
83 minEta, maxEta, minPt, maxPt, minDCAr, maxDCAr, minDCAz, maxDCAz, minTPCclus, maxTPCclus, minITSclus, maxITSclus, minTrackMult, maxTrackMult, vertexStatus);
84
85 TCanvas *can2 = new TCanvas("can2","2-D HLT track correlations",1200,800);
86 can2->Divide(4,2);
87 plot2D(can2, htrackHLT, minEta, maxEta, minPt, maxPt, minDCAr, maxDCAr, minDCAz, maxDCAz, minTPCclus, maxTPCclus, minITSclus, maxITSclus, minTrackMult, maxTrackMult);
88
89 TCanvas *can3 = new TCanvas("can3","2-D OFF track correlations",1200,800);
90 can3->Divide(4,2);
91 plot2D(can3, htrackOFF, minEta, maxEta, minPt, maxPt, minDCAr, maxDCAr, minDCAz, maxDCAz, minTPCclus, maxTPCclus, minITSclus, maxITSclus, minTrackMult, maxTrackMult);
92
93 TString folder = hText->GetTitle();
94 folder.ReplaceAll(" ","");
95 folder.Remove(0,3);
96 folder.Remove(6,15);
97
98 gSystem->Exec("mkdir "+folder);
99 can0->SaveAs(folder+"/event_properties.root");
5608862a 100 can0->SaveAs(folder+"/event_properties.png");
21fba467 101
102
103 stringstream sMinEta, sMaxEta;
104 sMinEta << minEta; sMaxEta << maxEta;
105
106 stringstream sMinTM, sMaxTM;
107 sMinTM << minTrackMult; sMaxTM << maxTrackMult;
108
109 stringstream sMinPt, sMaxPt;
110 sMinPt << minPt; sMaxPt << maxPt;
111
112 stringstream sMinDCAr, sMaxDCAr;
113 sMinDCAr << minDCAr; sMaxDCAr << maxDCAr;
114
115 stringstream sMinDCAz, sMaxDCAz;
116 sMinDCAz << minDCAz; sMaxDCAz << maxDCAz;
117
118 stringstream sMinTPCclus, sMaxTPCclus;
119 sMinTPCclus << minTPCclus; sMaxTPCclus << maxTPCclus;
120
121 stringstream sMinITSclus, sMaxITSclus;
122 sMinITSclus << minITSclus; sMaxITSclus << maxITSclus;
123
124 stringstream sVS; sVS << vertexStatus;
125
126 TString trackName = "track_properties_";
127 trackName += "eta"+sMinEta.str()+"_"+sMaxEta.str()+"_";
128 trackName += "Pt"+sMinPt.str()+"_"+sMaxPt.str()+"_";
129 trackName += "TM"+sMinTM.str()+"_"+sMaxTM.str()+"_";
130 trackName += "DCAr"+sMinDCAr.str()+"_"+sMaxDCAr.str()+"_";
131 trackName += "DCAz"+sMinDCAz.str()+"_"+sMaxDCAz.str()+"_";
132 trackName += "TPCclus"+sMinTPCclus.str()+"_"+sMaxTPCclus.str()+"_";
133 trackName += "ITSclus"+sMinITSclus.str()+"_"+sMaxITSclus.str()+"_";
134 if(vertexStatus==2){
135 trackName.Chop(); trackName += ".root";
136 }
137 else {
138 trackName += "VS"+sVS.str();
139 trackName += ".root";
140 }
141 can1->SaveAs(folder+"/"+trackName);
5608862a 142 trackName.ReplaceAll("root","png");
143 can1->SaveAs(folder+"/"+trackName);
144
21fba467 145
146 can2->SaveAs(folder+"/HLT_2D_track_correlations.root");
147 can3->SaveAs(folder+"/OFF_2D_track_correlations.root");
5608862a 148 can2->SaveAs(folder+"/HLT_2D_track_correlations.png");
149 can3->SaveAs(folder+"/OFF_2D_track_correlations.png");
21fba467 150
151 return;
152}
153
154void printStats(TH1D *hlt, TH1D *off){
155 gPad->Update();
156 TPaveStats *st1 = (TPaveStats*)hlt->FindObject("stats");
157 st1->SetLineColor(0);
158
159 gPad->Update();
160 TPaveStats *st2 = (TPaveStats*)off->FindObject("stats");
161 st2->SetY2NDC(st1->GetY1NDC()-0.05);
162 st2->SetY1NDC(st2->GetY2NDC()-TMath::Abs(st1->GetY1NDC()-st1->GetY2NDC()));
163 st2->SetLineColor(0);
164 st2->SetTextColor(off->GetLineColor());
165 st2->SetFillStyle(0);
166 st2->Draw();
167}
168
169void defineYaxisMax(TH1D *hlt, TH1D *off){
170 if(hlt->GetMaximum() > off->GetMaximum()) off->SetMaximum(1.1*hlt->GetMaximum());
171 else hlt->SetMaximum(1.1*off->GetMaximum());
172}
173
174void printLegend(TLegend *l, TH1D *hlt, TH1D *off){
175 l->SetFillColor(10);
176 l->SetLineColor(10);
177 l->AddEntry(hlt, "HLT", "l");
178 l->AddEntry(off, "OFF", "l");
179 l->Draw("same");
180}
181
182//====================== for 1D distributions ===============================//
183
184void plotAid(TCanvas* can, THnSparse* hOFF, THnSparse* hHLT, TText* hText, TH1D *hlt, TH1D *off, TLegend *l, int size,
185 double minEta, double maxEta,
186 double minPt, double maxPt,
187 double minDCAr, double maxDCAr,
188 double minDCAz, double maxDCAz,
189 int minTPCclus, int maxTPCclus,
190 int minITSclus, int maxITSclus,
191 int minTrackMult, int maxTrackMult,
192 int VS
193 )
194{
195 hHLT->GetAxis(0)->SetRangeUser(minPt,maxPt);
196 hHLT->GetAxis(1)->SetRangeUser(minTPCclus,maxTPCclus);
197 hHLT->GetAxis(3)->SetRangeUser(minEta, maxEta);
198 hHLT->GetAxis(5)->SetRangeUser(minDCAr, maxDCAr);
199 hHLT->GetAxis(6)->SetRangeUser(minDCAz, maxDCAz);
200 hHLT->GetAxis(10)->SetRangeUser(minITSclus, maxITSclus);
201 hHLT->GetAxis(11)->SetRangeUser(minTrackMult, maxTrackMult);
202 if(VS!=2) hHLT->GetAxis(12)->SetRangeUser(VS,VS);
203
204 hOFF->GetAxis(0)->SetRangeUser(minPt,maxPt);
205 hOFF->GetAxis(1)->SetRangeUser(minTPCclus,maxTPCclus);
206 hOFF->GetAxis(3)->SetRangeUser(minEta, maxEta);
207 hOFF->GetAxis(5)->SetRangeUser(minDCAr, maxDCAr);
208 hOFF->GetAxis(6)->SetRangeUser(minDCAz, maxDCAz);
209 hOFF->GetAxis(10)->SetRangeUser(minITSclus, maxITSclus);
210 hOFF->GetAxis(11)->SetRangeUser(minTrackMult, maxTrackMult);
211 if(VS!=2) hOFF->GetAxis(12)->SetRangeUser(VS,VS);
212
213 for(int i=0; i<size; i++){
214
215 hlt = hHLT->Projection(i);
216 off = hOFF->Projection(i);
56ce6b77 217
218 hlt->SetTitle(fix1DTitle(hHLT->Projection(i)->GetTitle()));
219
21fba467 220 defineYaxisMax(hlt, off);
e84c79f2 221 //off->SetLineColor(2);
222 off->SetLineStyle(2);
21fba467 223
224 can->cd(i+1);
225 hlt->Draw();
226 off->Draw("sames");
227 printStats(hlt, off);
228 }
229 printLegend(l,hlt,off);
230}
231
232//====================== for 2D distributions ===============================//
233
234void plot2D(TCanvas* can, THnSparse* h,
235 double minEta, double maxEta,
236 double minPt, double maxPt,
237 double minDCAr, double maxDCAr,
238 double minDCAz, double maxDCAz,
239 int minTPCclus, int maxTPCclus,
240 int minITSclus, int maxITSclus,
241 int minTrackMult, int maxTrackMult
242 )
243{
21fba467 244 h->GetAxis(0)->SetRangeUser(minPt,maxPt);
245 h->GetAxis(1)->SetRangeUser(minTPCclus,maxTPCclus);
246 h->GetAxis(3)->SetRangeUser(minEta, maxEta);
247 h->GetAxis(5)->SetRangeUser(minDCAr, maxDCAr);
248 h->GetAxis(6)->SetRangeUser(minDCAz, maxDCAz);
249 h->GetAxis(10)->SetRangeUser(minITSclus, maxITSclus);
250 h->GetAxis(11)->SetRangeUser(minTrackMult, maxTrackMult);
251
56ce6b77 252 can->cd(1);
253 TH2D *ht = h->Projection(1,0);
254 ht->SetTitle(fix2DTitle(h->Projection(1)->GetTitle(), h->Projection(0)->GetTitle()));
255 ht->Draw("colz");
256
21fba467 257 can->cd(2);
56ce6b77 258 ht = h->Projection(1,3);
259 ht->SetTitle(fix2DTitle(h->Projection(1)->GetTitle(), h->Projection(3)->GetTitle()));
260 ht->Draw("colz");
261
21fba467 262 can->cd(3);
56ce6b77 263 ht = h->Projection(1,5);
264 ht->SetTitle(fix2DTitle(h->Projection(1)->GetTitle(), h->Projection(5)->GetTitle()));
265 ht->Draw("colz");
266
21fba467 267 can->cd(4);
56ce6b77 268 ht = h->Projection(1,6);
269 ht->SetTitle(fix2DTitle(h->Projection(1)->GetTitle(), h->Projection(6)->GetTitle()));
270 ht->Draw("colz");
21fba467 271
272 can->cd(5);
56ce6b77 273 ht = h->Projection(6,0);
274 ht->SetTitle(fix2DTitle(h->Projection(6)->GetTitle(), h->Projection(0)->GetTitle()));
275 ht->Draw("colz");
276
21fba467 277 can->cd(6);
56ce6b77 278 ht = h->Projection(6,3);
279 ht->SetTitle(fix2DTitle(h->Projection(6)->GetTitle(), h->Projection(3)->GetTitle()));
280 ht->Draw("colz");
281
21fba467 282 can->cd(7);
56ce6b77 283 ht = h->Projection(3,0);
284 ht->SetTitle(fix2DTitle(h->Projection(3)->GetTitle(), h->Projection(0)->GetTitle()));
285 ht->Draw("colz");
286
21fba467 287 can->cd(8);
56ce6b77 288 ht = h->Projection(3,4);
289 ht->SetTitle(fix2DTitle(h->Projection(3)->GetTitle(), h->Projection(4)->GetTitle()));
290 ht->Draw("colz");
21fba467 291}
292
293void plotAid(TCanvas* can, THnSparse* hOFF, THnSparse* hHLT, TText* hText, TH1D *hlt, TH1D *off, TLegend *l, int size){
294
295 for(int i=0; i<size; i++){
296 hlt = hHLT->Projection(i);
297 off = hOFF->Projection(i);
56ce6b77 298 hlt->SetTitle(fix1DTitle(hHLT->Projection(i)->GetTitle()));
21fba467 299 defineYaxisMax(hlt, off);
300 off->SetLineColor(2);
301
302 can->cd(i+1);
303 hlt->Draw();
304 off->Draw("sames");
305 printStats(hlt, off);
306 }
307 printLegend(l,hlt,off);
308}
309
310void plotEventQuantities(TCanvas* can, THnSparse* heventOFF, THnSparse* heventHLT, TText* hText){
311
312 TH1D *hlt = NULL;
313 TH1D *off = NULL;
314
315 TLegend *leg1 = new TLegend(0.6,0.6,0.8,0.8);
316
317 plotAid(can, heventOFF, heventHLT, hText, hlt, off, leg1, 6);
318 return;
319}
320
321void plotTrackQuantities( TCanvas* can, THnSparse* htrackOFF, THnSparse* htrackHLT, TText* hText,
322 double minEta, double maxEta,
323 double minPt, double maxPt,
324 double minDCAr, double maxDCAr,
325 double minDCAz, double maxDCAz,
326 int minTPCclus, int maxTPCclus,
327 int minITSclus, int maxITSclus,
328 int minTrackMult, int maxTrackMult,
329 int VS
330 )
331{
332 TH1D *hlt = NULL;
333 TH1D *off = NULL;
334
335 TLegend *leg1 = new TLegend(0.6,0.6,0.8,0.8);
336 plotAid(can, htrackOFF, htrackHLT, hText, hlt, off, leg1, 11,
337 minEta, maxEta, minPt, maxPt, minDCAr, maxDCAr, minDCAz, maxDCAz, minTPCclus, maxTPCclus, minITSclus, maxITSclus, minTrackMult, maxTrackMult, VS);
56ce6b77 338 return;
339}
340
341TString fix1DTitle(const char* c){
342 TString tmp = c;
343 tmp.ReplaceAll("projection ","");
344 return tmp;
345}
346
347TString fix2DTitle(const char* c1, const char* c2){
348 TString tmp = fix1DTitle(c1)+" vs."+fix1DTitle(c2);
349 return tmp;
21fba467 350}