21 TH2* Get2DHistogramfromList(TList *pidqalist, const char* listname, const char* histoname);
22 void AddFit(TH2* h2d);
23 void PublishCanvas(TList *qaList, const char* det, const char* name, TString nadd="");
27 Int_t CheckLoadLibrary(const char* library);
33 Example (require aliroot environment)
35 root.exe -l -b -q $ALICE_ROOT/ANALYSIS/macros/MakePIDqaReport.C'("PIDqa.root")'
39 void MakePIDqaReport(const char* inputFile, const char* outputFile="PIDqaReport.pdf")
42 // Make a pdf file with the efficiency report
50 printf("Could not open file '%s'\n",f.GetName());
54 TList *qaList = (TList*) f.Get("PIDqa");
56 printf("Could not fine list 'PIDqa' in file '%s'\n",f.GetName());
65 // Invariant mass plots
74 PublishCanvas(qaList,"ITS","hNsigmaP_ITS_%s");
77 PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s");
78 // if (man->GetCurrentPeriod()=="11h"){
79 // PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s_Hybrid","Hybrid");
80 // PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s_OROChigh","OROChigh");
83 // TPC PID after 3 sigma TOF cut
84 PublishCanvas(qaList,"TPC_TOF","hNsigmaP_TPC_TOF_%s");
87 PublishCanvas(qaList,"TOF","hNsigmaP_TOF_%s");
91 TH2 *hLikeP_TRD_3tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_3tls_electron");
92 TH2 *hLikeP_TRD_3tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_3tls_pion");
93 TH2 *hLikeP_TRD_4tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_4tls_electron");
94 TH2 *hLikeP_TRD_4tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_4tls_pion");
95 TH2 *hLikeP_TRD_5tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_5tls_electron");
96 TH2 *hLikeP_TRD_5tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_5tls_pion");
99 * cTRDnsigma[countcanvas]->cd(1);
100 * TPaveText pt3TRD(.02,.02,.49,.52);
101 * pt3TRD.SetTextAlign(11);
102 * pt3TRD.SetTextSizePixels(16);
103 * pt3TRD.AddText(Form(" TRD PID QA %s.%s.%d", first.Data(), man->GetCurrentPeriod().Data(), pass));
108 hLikeP_TRD_3tls_electron->Draw("colz");
111 hLikeP_TRD_3tls_pion->Draw("colz");
114 hLikeP_TRD_4tls_electron->Draw("colz");
117 hLikeP_TRD_4tls_pion->Draw("colz");
120 hLikeP_TRD_5tls_electron->Draw("colz");
123 hLikeP_TRD_5tls_pion->Draw("colz");
129 TObjArray *qaInfo=(TObjArray*)qaList->FindObject("QAinfo");
130 TObjArray *tpcInfo=0x0;
131 if (qaInfo && (tpcInfo=(TObjArray*)qaInfo->FindObject("TPC_info"))){
132 TObjArray *tpcSplineInfo=(TObjArray*)tpcInfo->FindObject("TPC_spline_names");
133 TObjArray *tpcConfigInfo=(TObjArray*)tpcInfo->FindObject("TPC_config_info");
134 fCanvas->Divide(1,2);
136 TPaveText pt(.1,.1,.9,.9,"NDC");
139 pt.SetTextSizePixels(16);
142 for (Int_t i=0; i<tpcSplineInfo->GetEntriesFast();++i) pt.AddText(tpcSplineInfo->At(i)->GetName());
145 TPaveText pt2(.1,.1,.9,.9,"NDC");
146 pt2.SetBorderSize(1);
148 pt2.SetTextSizePixels(16);
150 for (Int_t i=0; i<tpcConfigInfo->GetEntriesFast();++i) pt2.AddText(tpcConfigInfo->At(i)->GetName());
170 const Int_t NCont=255;
172 TStyle *st = new TStyle("mystyle","mystyle");
173 gROOT->GetStyle("Plain")->Copy((*st));
179 st->SetNumberContours(NCont);
181 st->SetOptStat("erm");
183 st->SetGridColor(kGray+1);
184 st->SetPadGridX(kTRUE);
185 st->SetPadGridY(kTRUE);
186 st->SetPadTickX(kTRUE);
187 st->SetPadTickY(kTRUE);
190 const Int_t NRGBs = 5;
191 Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
192 Double_t red[NRGBs] = { 0.00, 0.00, 0.87, 1.00, 0.51 };
193 Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
194 Double_t blue[NRGBs] = { 0.51, 1.00, 0.12, 0.00, 0.00 };
196 TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
200 TH2* Get2DHistogramfromList(TList *pidqalist, const char* listname, const char* histoname)
202 TList *histolist = (TList *)pidqalist->FindObject(listname);
203 if (!histolist) {printf(" list not found \n"); return 0x0; }
204 TH2* histo = (TH2*)histolist->FindObject(histoname);
205 // if (!histo) {printf(" histogram not found \n"); return 0x0; }
209 void AddFit(TH2* h2d)
212 // Fit in slices and draw mean and sigma
214 TF1 *f1 = new TF1("f1", "gaus");
215 f1->SetRange(-1.5,1.5);
217 h2d->FitSlicesY(f1, 0,-1, 0, "QNR",&aSlices);
219 TH1* hMean=(TH1*)aSlices.At(1);
220 TH1* hSigma=(TH1*)aSlices.At(2);
221 TH1* hChi2=(TH1*)aSlices.At(3);
222 hChi2->Scale(1./10.);
223 aSlices.AddAt(0x0,1);
224 aSlices.AddAt(0x0,2);
225 aSlices.AddAt(0x0,3);
226 hMean->SetMarkerStyle(20);
227 hMean->SetMarkerSize(0.3);
228 hMean->SetOption("same");
229 h2d->GetListOfFunctions()->Add(hMean);
230 hSigma->SetMarkerStyle(20);
231 hSigma->SetMarkerSize(0.3);
232 hSigma->SetOption("same");
233 hSigma->SetMarkerColor(kMagenta);
234 h2d->GetListOfFunctions()->Add(hSigma);
235 hChi2->SetOption("same");
236 hChi2->SetMarkerColor(kMagenta + 2);
237 hChi2->SetLineColor(kMagenta + 2);
238 h2d->GetListOfFunctions()->Add(hChi2);
241 l=new TLine(h2d->GetXaxis()->GetXmin(),0,h2d->GetXaxis()->GetXmax(),0);
243 h2d->GetListOfFunctions()->Add(l);
244 l=new TLine(h2d->GetXaxis()->GetXmin(),1,h2d->GetXaxis()->GetXmax(),1);
246 h2d->GetListOfFunctions()->Add(l);
249 void PublishCanvas(TList *qaList, const char* det, const char* name, TString nadd)
252 // draw all nSigma + signal histo
258 TPaveText pt(.1,.1,.9,.9,"NDC");
261 pt.SetTextSizePixels(16);
262 pt.AddText(Form("%s PID QA",det));
264 pt.AddText(nadd.Data());
269 TH2 *hSig=Get2DHistogramfromList(qaList,det,Form("hSigP_%s",det));
271 hSig->SetOption("colz");
275 for (Int_t i=0;i<AliPID::kSPECIESC;++i){
276 // for (Int_t i=0;i<AliPID::kSPECIES;++i){
277 if (i==(Int_t)AliPID::kMuon) continue;
278 TH2 *h=Get2DHistogramfromList(qaList,det,Form(name,AliPID::ParticleName(i)));
280 h->SetOption("colz");
285 Int_t nPads=arrHistos.GetEntriesFast();
286 Int_t nCols = (Int_t)TMath::Ceil( TMath::Sqrt(nPads) );
287 Int_t nRows = (Int_t)TMath::Ceil( (Double_t)nPads/(Double_t)nCols );
290 fCanvas->Divide(nCols,nRows);
293 for (Int_t i=0; i<nPads;++i) {
296 arrHistos.At(i)->Draw();
316 CheckLoadLibrary("libCore");
317 CheckLoadLibrary("libPhysics");
318 CheckLoadLibrary("libMinuit");
319 CheckLoadLibrary("libGui");
320 CheckLoadLibrary("libXMLParser");
322 CheckLoadLibrary("libGeom");
323 CheckLoadLibrary("libVMC");
325 CheckLoadLibrary("libNet");
326 CheckLoadLibrary("libTree");
327 CheckLoadLibrary("libProof");
329 CheckLoadLibrary("libSTEERBase");
330 CheckLoadLibrary("libESD");
331 CheckLoadLibrary("libCDB");
332 CheckLoadLibrary("libRAWDatabase");
333 CheckLoadLibrary("libRAWDatarec");
334 CheckLoadLibrary("libANALYSIS");
335 CheckLoadLibrary("libSTEER");
337 CheckLoadLibrary("libSTAT");
339 CheckLoadLibrary("libAOD");
340 CheckLoadLibrary("libOADB");
341 CheckLoadLibrary("libANALYSISalice");
342 CheckLoadLibrary("libCORRFW");
345 CheckLoadLibrary("libTPCbase");
348 Int_t CheckLoadLibrary(const char* library)
350 // checks if a library is already loaded, if not loads the library
352 if (strlen(gSystem->GetLibraries(Form("%s.so", library), "", kFALSE)) > 0)
355 return gSystem->Load(library);