2 TH2* Get2DHistogramfromList(TList *pidqalist, const char* listname, const char* histoname);
4 void PublishCanvas(TList *qaList, const char* det, const char* name, TString nadd="");
8 Int_t CheckLoadLibrary(const char* library);
14 Example (require aliroot environment)
16 root.exe -l -b -q $ALICE_ROOT/ANALYSIS/macros/MakePIDqaReport.C'("PIDqa.root")'
20 void MakePIDqaReport(const char* inputFile, const char* outputFile="PIDqaReport.pdf")
23 // Make a pdf file with the efficiency report
31 printf("Could not open file '%s'\n",f.GetName())
35 TList *qaList = (TList*) f.Get("PIDqa");
37 printf("Could not fine list 'PIDqa' in file '%s'\n",f.GetName())
46 // Invariant mass plots
55 PublishCanvas(qaList,"ITS","hNsigmaP_ITS_%s");
58 PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s");
59 // if (man->GetCurrentPeriod()=="11h"){
60 // PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s_Hybrid","Hybrid");
61 // PublishCanvas(qaList,"TPC","hNsigmaP_TPC_%s_OROChigh","OROChigh");
64 // TPC PID after 3 sigma TOF cut
65 PublishCanvas(qaList,"TPC_TOF","hNsigmaP_TPC_TOF_%s");
68 PublishCanvas(qaList,"TOF","hNsigmaP_TOF_%s");
72 TH2 *hLikeP_TRD_3tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_3tls_electron");
73 TH2 *hLikeP_TRD_3tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_3tls_pion");
74 TH2 *hLikeP_TRD_4tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_4tls_electron");
75 TH2 *hLikeP_TRD_4tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_4tls_pion");
76 TH2 *hLikeP_TRD_5tls_electron=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_5tls_electron");
77 TH2 *hLikeP_TRD_5tls_pion=Get2DHistogramfromList(qaList,"TRD","hLikeP_TRD_5tls_pion");
80 * cTRDnsigma[countcanvas]->cd(1);
81 * TPaveText pt3TRD(.02,.02,.49,.52);
82 * pt3TRD.SetTextAlign(11);
83 * pt3TRD.SetTextSizePixels(16);
84 * pt3TRD.AddText(Form(" TRD PID QA %s.%s.%d", first.Data(), man->GetCurrentPeriod().Data(), pass));
89 hLikeP_TRD_3tls_electron->Draw("colz");
92 hLikeP_TRD_3tls_pion->Draw("colz");
95 hLikeP_TRD_4tls_electron->Draw("colz");
98 hLikeP_TRD_4tls_pion->Draw("colz");
101 hLikeP_TRD_5tls_electron->Draw("colz");
104 hLikeP_TRD_5tls_pion->Draw("colz");
110 TObjArray *qaInfo=(TObjArray*)PIDqa->FindObject("QAinfo");
111 TObjArray *tpcInfo=0x0;
112 if (qaInfo && (tpcInfo=(TObjArray*)qaInfo->FindObject("TPC_info"))){
113 TObjArray *tpcSplineInfo=(TObjArray*)tpcInfo->FindObject("TPC_spline_names");
114 TObjArray *tpcConfigInfo=(TObjArray*)tpcInfo->FindObject("TPC_config_info");
115 fCanvas->Divide(1,2);
117 TPaveText pt(.1,.1,.9,.9,"NDC");
120 pt.SetTextSizePixels(16);
123 for (Int_t i=0; i<tpcSplineInfo->GetEntriesFast();++i) pt.AddText(tpcSplineInfo->At(i)->GetName());
126 TPaveText pt2(.1,.1,.9,.9,"NDC");
127 pt2.SetBorderSize(1);
129 pt2.SetTextSizePixels(16);
131 for (Int_t i=0; i<tpcConfigInfo->GetEntriesFast();++i) pt2.AddText(tpcConfigInfo->At(i)->GetName());
151 const Int_t NCont=255;
153 TStyle *st = new TStyle("mystyle","mystyle");
154 gROOT->GetStyle("Plain")->Copy((*st));
160 st->SetNumberContours(NCont);
162 st->SetOptStat("erm");
164 st->SetGridColor(kGray+1);
165 st->SetPadGridX(kTRUE);
166 st->SetPadGridY(kTRUE);
167 st->SetPadTickX(kTRUE);
168 st->SetPadTickY(kTRUE);
171 const Int_t NRGBs = 5;
172 Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
173 Double_t red[NRGBs] = { 0.00, 0.00, 0.87, 1.00, 0.51 };
174 Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
175 Double_t blue[NRGBs] = { 0.51, 1.00, 0.12, 0.00, 0.00 };
177 TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
181 TH2* Get2DHistogramfromList(TList *pidqalist, const char* listname, const char* histoname)
183 TList *histolist = (TList *)pidqalist->FindObject(listname);
184 if (!histolist) {printf(" list not found \n"); return 0x0; }
185 TH2* histo = (TH2*)histolist->FindObject(histoname);
186 // if (!histo) {printf(" histogram not found \n"); return 0x0; }
190 void AddFit(TH2* h2d)
193 // Fit in slices and draw mean and sigma
195 TF1 *f1 = new TF1("f1", "gaus");
196 f1->SetRange(-1.5,1.5);
198 h2d->FitSlicesY(f1, 0,-1, 0, "QNR",&aSlices);
200 TH1* hMean=(TH1*)aSlices.At(1);
201 TH1* hSigma=(TH1*)aSlices.At(2);
202 TH1* hChi2=(TH1*)aSlices.At(3);
203 hChi2->Scale(1./10.);
204 aSlices.AddAt(0x0,1);
205 aSlices.AddAt(0x0,2);
206 aSlices.AddAt(0x0,3);
207 hMean->SetMarkerStyle(20);
208 hMean->SetMarkerSize(0.3);
209 hMean->SetOption("same");
210 h2d->GetListOfFunctions()->Add(hMean);
211 hSigma->SetMarkerStyle(20);
212 hSigma->SetMarkerSize(0.3);
213 hSigma->SetOption("same");
214 hSigma->SetMarkerColor(kMagenta);
215 h2d->GetListOfFunctions()->Add(hSigma);
216 hChi2->SetOption("same");
217 hChi2->SetMarkerColor(kMagenta + 2);
218 hChi2->SetLineColor(kMagenta + 2);
219 h2d->GetListOfFunctions()->Add(hChi2);
222 l=new TLine(h2d->GetXaxis()->GetXmin(),0,h2d->GetXaxis()->GetXmax(),0);
224 h2d->GetListOfFunctions()->Add(l);
225 l=new TLine(h2d->GetXaxis()->GetXmin(),1,h2d->GetXaxis()->GetXmax(),1);
227 h2d->GetListOfFunctions()->Add(l);
230 void PublishCanvas(TList *qaList, const char* det, const char* name, TString nadd)
233 // draw all nSigma + signal histo
239 TPaveText pt(.1,.1,.9,.9,"NDC");
242 pt.SetTextSizePixels(16);
243 pt.AddText(Form("%s PID QA",det));
245 pt.AddText(nadd.Data());
250 TH2 *hSig=Get2DHistogramfromList(qaList,det,Form("hSigP_%s",det));
252 hSig->SetOption("colz");
256 for (Int_t i=0;i<AliPID::kSPECIESC;++i){
257 // for (Int_t i=0;i<AliPID::kSPECIES;++i){
258 if (i==(Int_t)AliPID::kMuon) continue;
259 TH2 *h=Get2DHistogramfromList(qaList,det,Form(name,AliPID::ParticleName(i)));
261 h->SetOption("colz");
266 Int_t nPads=arrHistos.GetEntriesFast();
267 Int_t nCols = (Int_t)TMath::Ceil( TMath::Sqrt(nPads) );
268 Int_t nRows = (Int_t)TMath::Ceil( (Double_t)nPads/(Double_t)nCols );
271 fCanvas->Divide(nCols,nRows);
274 for (Int_t i=0; i<nPads;++i) {
277 arrHistos.At(i)->Draw();
297 CheckLoadLibrary("libCore");
298 CheckLoadLibrary("libPhysics");
299 CheckLoadLibrary("libMinuit");
300 CheckLoadLibrary("libGui");
301 CheckLoadLibrary("libXMLParser");
303 CheckLoadLibrary("libGeom");
304 CheckLoadLibrary("libVMC");
306 CheckLoadLibrary("libNet");
307 CheckLoadLibrary("libTree");
308 CheckLoadLibrary("libProof");
310 CheckLoadLibrary("libSTEERBase");
311 CheckLoadLibrary("libESD");
312 CheckLoadLibrary("libCDB");
313 CheckLoadLibrary("libRAWDatabase");
314 CheckLoadLibrary("libRAWDatarec");
315 CheckLoadLibrary("libANALYSIS");
316 CheckLoadLibrary("libSTEER");
318 CheckLoadLibrary("libSTAT");
320 CheckLoadLibrary("libAOD");
321 CheckLoadLibrary("libOADB");
322 CheckLoadLibrary("libANALYSISalice");
323 CheckLoadLibrary("libCORRFW");
326 CheckLoadLibrary("libTPCbase");
329 Int_t CheckLoadLibrary(const char* library)
331 // checks if a library is already loaded, if not loads the library
333 if (strlen(gSystem->GetLibraries(Form("%s.so", library), "", kFALSE)) > 0)
336 return gSystem->Load(library);