1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //_________________________________________________________________________
19 // An analysis task to check the TRD data in simulated data
21 //*-- Sylwester Radomski
22 //////////////////////////////////////////////////////////////////////////////
27 // tpcz = kTPCout && !kTRDout
30 // trdz = kTRDout && !kTRDref
42 #include "AliTRDQATask.h"
46 //______________________________________________________________________________
47 AliTRDQATask::AliTRDQATask(const char *name) :
48 AliAnalysisTask(name,""),
53 // Input slot #0 works with an Ntuple
54 DefineInput(0, TChain::Class());
55 // Output slot #0 writes into a TH1 container
56 DefineOutput(0, TObjArray::Class()) ;
59 //______________________________________________________________________________
60 void AliTRDQATask::ConnectInputData(const Option_t *)
62 // Initialisation of branch container and histograms
64 AliInfo(Form("*** Initialization of %s", GetName())) ;
67 fChain = dynamic_cast<TChain *>(GetInputData(0)) ;
69 AliError(Form("Input 0 for %s not found\n", GetName()));
73 // One should first check if the branch address was taken by some other task
74 char ** address = (char **)GetBranchAddress(0, "ESD");
76 fESD = (AliESD*)(*address);
79 SetBranchAddress(0, "ESD", &fESD);
83 //________________________________________________________________________
84 void AliTRDQATask::CreateOutputObjects()
90 fNTracks = new TH1D("ntracks", ";number of all tracks", 500, -0.5, 499.5);
91 fEventSize = new TH1D("evSize", ";event size (MB)", 100, 0, 5);
93 fTrackStatus = new TH1D("trackStatus", ";status bit", 32, -0.5, 31.5);
94 fKinkIndex = new TH1D("kinkIndex", ";kink index", 41, -20.5, 20.5);
96 fParIn = new TH1D("parIn", "Inner Plane", 2, -0.5, 1.5);
97 fParOut = new TH1D("parOut", "Outer Plane", 2, -0.5, 1.5);
99 fXIn = new TH1D("xIn", ";X at the inner plane (cm)", 200, 50, 250);
100 fXOut = new TH1D("xOut", ";X at the outer plane (cm)", 300, 50, 400);
102 const int knNameAlpha = 4;
103 const char *namesAlpha[knNameAlpha] = {"alphaTPCi", "alphaTPCo", "alphaTRDo", "alphaTRDr"};
105 for(int i=0; i<knNameAlpha; i++) {
106 fAlpha[i] = new TH1D(namesAlpha[i], "alpha", 100, -4, 4);
108 fSectorTRD = new TH1D ("sectorTRD", ";sector TRD", 20, -0.5, 19.5);
112 const int knbits = 6;
113 const char *suf[knbits] = {"TPCi", "TPCo", "TPCz", "TRDo", "TRDr", "TRDz"};
114 for(int i=0; i<knbits; i++) {
115 fPt[i] = new TH1D(Form("pt%s",suf[i]), ";p_{T} (GeV/c);entries TPC", 50, 0, 10);
116 fTheta[i] = new TH1D(Form("theta%s", suf[i]), "theta (rad)", 100, -4, 4);
117 fSigmaY[i] = new TH1D(Form("sigmaY%s",suf[i]), ";sigma Y (cm)", 200, 0, 1);
118 fChi2[i] = new TH1D(Form("Chi2%s", suf[i]), ";#chi2 / ndf", 100, 0, 10);
119 fPlaneYZ[i] = new TH2D(Form("planeYZ%s", suf[i]), Form("%sy (cm);z (cm)", suf[i]),
120 100, -60, 60, 500, -500, 500);
124 fEffPt[0] = (TH1D*) fPt[0]->Clone(Form("eff_%s_%s", suf[0], suf[1]));
125 fEffPt[1] = (TH1D*) fPt[0]->Clone(Form("eff_%s_%s", suf[1], suf[3]));
126 fEffPt[2] = (TH1D*) fPt[0]->Clone(Form("eff_%s_%s", suf[3], suf[4]));
127 fEffPt[3] = (TH1D*) fPt[0]->Clone(Form("eff_%s_%s", suf[1], suf[4]));
129 for(int i=0; i<4; i++) {
131 fEffPt[i]->SetMarkerStyle(20);
132 fEffPt[i]->SetMinimum(0);
133 fEffPt[i]->SetMaximum(1.1);
137 fClustersTRD[0] = new TH1D("clsTRDo", "TRDo;number of clusters", 130, -0.5, 129.5);;
138 fClustersTRD[1] = new TH1D("clsTRDr", "TRDr;number of clusters", 130, -0.5, 129.5);;
139 fClustersTRD[2] = new TH1D("clsTRDz", "TRDz;number of clusters", 130, -0.5, 129.5);;
141 // for good refitted tracks only
142 fTime = new TH1D("time", ";time bin", 25, -0.5, 24.5);
143 fBudget = new TH1D("budget", ";material budget", 100, 0, 100);
144 fQuality = new TH1D("quality", ";track quality", 100, 0, 1.1);
145 fSignal = new TH1D("signal", ";signal", 100, 0, 1e3);
148 fTrdSigMom = new TH2D("trdSigMom", ";momentum (GeV/c);signal", 100, 0, 3, 100, 0, 1e3);
149 fTpcSigMom = new TH2D("tpcSigMom", ";momentum (GeV/c);signal", 100, 0, 3, 100, 0, 200);
151 const char *pidName[6] = {"El", "Mu", "Pi", "K", "P", "Ch"};
152 for(int i=0; i<6; i++) {
155 fTpcPID[i] = new TH1D(Form("tpcPid%s",pidName[i]), pidName[i], 100, 0, 1.5);
156 fTpcPID[i]->GetXaxis()->SetTitle("probability");
158 fTpcSigMomPID[i] = new TH2D(Form("tpcSigMom%s",pidName[i]), "", 100, 0, 3, 100, 0, 200);
159 fTpcSigMomPID[i]->SetTitle(Form("%s;momentum (GeV/c);signal",pidName[i]));
162 fTrdPID[i] = new TH1D(Form("trdPid%s",pidName[i]), pidName[i], 100, 0, 1.5);
163 fTrdPID[i]->GetXaxis()->SetTitle("probability");
165 fTrdSigMomPID[i] = new TH2D(Form("trdSigMom%s",pidName[i]), "", 100, 0, 3, 100, 0, 1e3);
166 fTrdSigMomPID[i]->SetTitle(Form("%s;momentum (GeV/c);signal",pidName[i]));
170 // create output container
171 fOutputContainer = new TObjArray(150);
173 // register histograms to the container
176 fOutputContainer->AddAt(fNTracks, counter++);
177 fOutputContainer->AddAt(fEventSize, counter++);
178 fOutputContainer->AddAt(fTrackStatus, counter++);
179 fOutputContainer->AddAt(fKinkIndex, counter++);
180 fOutputContainer->AddAt(fParIn, counter++);
181 fOutputContainer->AddAt(fParOut, counter++);
182 fOutputContainer->AddAt(fXIn, counter++);
183 fOutputContainer->AddAt(fXOut, counter++);
184 fOutputContainer->AddAt(fAlpha[0], counter++);
185 fOutputContainer->AddAt(fAlpha[1], counter++);
186 fOutputContainer->AddAt(fAlpha[2], counter++);
187 fOutputContainer->AddAt(fAlpha[3], counter++);
189 fOutputContainer->AddAt(fSectorTRD, counter++);
190 for(int i=0; i<knbits; i++) {
191 fOutputContainer->AddAt(fPt[i], counter++);
192 fOutputContainer->AddAt(fTheta[i], counter++);
193 fOutputContainer->AddAt(fSigmaY[i], counter++);
194 fOutputContainer->AddAt(fChi2[i], counter++);
195 fOutputContainer->AddAt(fPlaneYZ[i], counter++);
197 fOutputContainer->AddAt(fEffPt[0], counter++);
198 fOutputContainer->AddAt(fEffPt[1], counter++);
199 fOutputContainer->AddAt(fEffPt[2], counter++);
200 fOutputContainer->AddAt(fEffPt[3], counter++);
202 fOutputContainer->AddAt(fClustersTRD[0], counter++);
203 fOutputContainer->AddAt(fClustersTRD[1], counter++);
204 fOutputContainer->AddAt(fClustersTRD[2], counter++);
205 fOutputContainer->AddAt(fTime, counter++);
206 fOutputContainer->AddAt(fBudget, counter++);
207 fOutputContainer->AddAt(fQuality, counter++);
208 fOutputContainer->AddAt(fSignal, counter++);
209 fOutputContainer->AddAt(fTrdSigMom, counter++);
210 fOutputContainer->AddAt(fTpcSigMom, counter++);
211 for(int i=0; i<6; i++) {
212 fOutputContainer->AddAt(fTpcPID[i], counter++);
213 fOutputContainer->AddAt(fTpcSigMomPID[i], counter++);
214 fOutputContainer->AddAt(fTrdPID[i], counter++);
215 fOutputContainer->AddAt(fTrdSigMomPID[i], counter++);
218 //AliInfo(Form("Number of histograms = %d", counter));
222 //______________________________________________________________________________
223 void AliTRDQATask::Exec(Option_t *)
227 Long64_t entry = fChain->GetReadEntry() ;
229 // Processing of one event
232 AliError("fESD is not connected to the input!") ;
236 if ( !((entry-1)%100) )
237 AliInfo(Form("%s ----> Processing event # %lld", (dynamic_cast<TChain *>(fChain))->GetFile()->GetName(), entry)) ;
239 int nTracks = fESD->GetNumberOfTracks();
240 fNTracks->Fill(nTracks);
243 for(int i=0; i<nTracks; i++) {
245 AliESDtrack *track = fESD->GetTrack(i);
246 const AliExternalTrackParam *paramOut = track->GetOuterParam();
247 const AliExternalTrackParam *paramIn = track->GetInnerParam();
249 fParIn->Fill(!!paramIn);
250 if (!paramIn) continue;
251 fXIn->Fill(paramIn->GetX());
253 fParOut->Fill(!!paramOut);
254 if (!paramOut) continue;
255 fXOut->Fill(paramOut->GetX());
257 int sector = GetSector(paramOut->GetAlpha());
258 if (!CheckSector(sector)) continue;
259 fSectorTRD->Fill(sector);
261 fKinkIndex->Fill(track->GetKinkIndex(0));
262 if (track->GetKinkIndex(0)) continue;
265 UInt_t status = track->GetStatus();
266 for(int bit=0; bit<32; bit++)
267 if (u<<bit & status) fTrackStatus->Fill(bit);
269 const int knbits = 6;
270 int bit[6] = {0,0,0,0,0,0};
271 bit[0] = status & AliESDtrack::kTPCin;
272 bit[1] = status & AliESDtrack::kTPCout;
273 bit[2] = (status & AliESDtrack::kTPCout) && !(status & AliESDtrack::kTRDout);
274 bit[3] = status & AliESDtrack::kTRDout;
275 bit[4] = status & AliESDtrack::kTRDrefit;
276 bit[5] = (status & AliESDtrack::kTRDout) && !(status & AliESDtrack::kTRDrefit);
279 // transverse momentum
280 const double *val = track->GetParameter(); // parameters at the vertex
281 double pt = 1./TMath::Abs(val[4]);
283 for(int b=0; b<knbits; b++) {
286 fTheta[b]->Fill(val[3]);
287 fSigmaY[b]->Fill(TMath::Sqrt(paramOut->GetSigmaY2()));
288 fChi2[b]->Fill(track->GetTRDchi2()/track->GetTRDncls());
289 fPlaneYZ[b]->Fill(paramOut->GetY(), paramOut->GetZ());
295 fAlpha[0]->Fill(paramIn->GetAlpha());
296 fAlpha[1]->Fill(paramOut->GetAlpha());
299 if (bit[3]) fAlpha[2]->Fill(paramOut->GetAlpha());
300 if (bit[4]) fAlpha[3]->Fill(paramOut->GetAlpha());
303 for(int b=0; b<3; b++)
304 if (bit[3+b]) fClustersTRD[b]->Fill(track->GetTRDncls());
307 if (!bit[4]) continue;
309 fQuality->Fill(track->GetTRDQuality());
310 fBudget->Fill(track->GetTRDBudget());
311 fSignal->Fill(track->GetTRDsignal());
313 fTrdSigMom->Fill(track->GetP(), track->GetTRDsignal());
314 fTpcSigMom->Fill(track->GetP(), track->GetTPCsignal());
317 if (status & AliESDtrack::kTRDpid) {
319 for(int l=0; l<6; l++) fTime->Fill(track->GetTRDTimBin(l));
321 // fill pid histograms
322 double trdr0 = 0, tpcr0 = 0;
323 int trdBestPid = 5, tpcBestPid = 5; // charged
324 const double kminPidValue = 0.9;
327 track->GetTPCpid(pp); // ESD inconsequence
329 for(int pid=0; pid<5; pid++) {
331 trdr0 += track->GetTRDpid(pid);
334 fTrdPID[pid]->Fill(track->GetTRDpid(pid));
335 fTpcPID[pid]->Fill(pp[pid]);
337 if (track->GetTRDpid(pid) > kminPidValue) trdBestPid = pid;
338 if (pp[pid] > kminPidValue) tpcBestPid = pid;
341 fTrdPID[5]->Fill(trdr0); // check unitarity
342 fTrdSigMomPID[trdBestPid]->Fill(track->GetP(), track->GetTRDsignal());
344 fTpcPID[5]->Fill(tpcr0); // check unitarity
345 fTpcSigMomPID[tpcBestPid]->Fill(track->GetP(), track->GetTPCsignal());
351 PostData(0, fOutputContainer);
354 //______________________________________________________________________________
355 void AliTRDQATask::Terminate(Option_t *)
357 // Processing when the event loop is ended
358 fOutputContainer = (TObjArray*)GetOutputData(0);
360 fNTracks = (TH1D*)fOutputContainer->At(counter++);
361 fEventSize = (TH1D*)fOutputContainer->At(counter++);
362 fTrackStatus = (TH1D*)fOutputContainer->At(counter++);
363 fKinkIndex = (TH1D*)fOutputContainer->At(counter++);
364 fParIn = (TH1D*)fOutputContainer->At(counter++);
365 fParOut = (TH1D*)fOutputContainer->At(counter++);
366 fXIn = (TH1D*)fOutputContainer->At(counter++);
367 fXOut = (TH1D*)fOutputContainer->At(counter++);
368 fAlpha[0] = (TH1D*)fOutputContainer->At(counter++);
369 fAlpha[1] = (TH1D*)fOutputContainer->At(counter++);
370 fAlpha[2] = (TH1D*)fOutputContainer->At(counter++);
371 fAlpha[3] = (TH1D*)fOutputContainer->At(counter++);
373 fSectorTRD = (TH1D*)fOutputContainer->At(counter++);
374 const int knbits = 6;
375 for(int i=0; i<knbits; i++) {
376 fPt[i] = (TH1D*)fOutputContainer->At(counter++);
377 fTheta[i] = (TH1D*)fOutputContainer->At(counter++);
378 fSigmaY[i] = (TH1D*)fOutputContainer->At(counter++);
379 fChi2[i] = (TH1D*)fOutputContainer->At(counter++);
380 fPlaneYZ[i] = (TH2D*)fOutputContainer->At(counter++);
382 fEffPt[0] = (TH1D*)fOutputContainer->At(counter++);
383 fEffPt[1] = (TH1D*)fOutputContainer->At(counter++);
384 fEffPt[2] = (TH1D*)fOutputContainer->At(counter++);
385 fEffPt[3] = (TH1D*)fOutputContainer->At(counter++);
387 fClustersTRD[0] = (TH1D*)fOutputContainer->At(counter++);
388 fClustersTRD[1] = (TH1D*)fOutputContainer->At(counter++);
389 fClustersTRD[2] = (TH1D*)fOutputContainer->At(counter++);
390 fTime = (TH1D*)fOutputContainer->At(counter++);
391 fBudget = (TH1D*)fOutputContainer->At(counter++);
392 fQuality = (TH1D*)fOutputContainer->At(counter++);
393 fSignal = (TH1D*)fOutputContainer->At(counter++);
394 fTrdSigMom = (TH2D*)fOutputContainer->At(counter++);
395 fTpcSigMom = (TH2D*)fOutputContainer->At(counter++);
396 for(int i=0; i<6; i++) {
397 fTpcPID[i] = (TH1D*)fOutputContainer->At(counter++);
398 fTpcSigMomPID[i] = (TH2D*)fOutputContainer->At(counter++);
399 fTrdPID[i] = (TH1D*)fOutputContainer->At(counter++);
400 fTrdSigMomPID[i] = (TH2D*)fOutputContainer->At(counter++);
403 // create efficiency histograms
404 Bool_t problem = kFALSE ;
405 AliInfo(Form(" *** %s Report:", GetName())) ;
415 sprintf(line, ".!tar -zcf %s.tar.gz *.eps", GetName()) ;
416 gROOT->ProcessLine(line);
418 AliInfo(Form("!!! All the eps files are in %s.tar.gz !!!", GetName())) ;
422 report="Problems found, please check!!!";
426 AliInfo(Form("*** %s Summary Report: %s\n",GetName(), report)) ;
430 //______________________________________________________________________________
431 const int AliTRDQATask::GetSector(const double alpha) const
433 // Gets the sector number
435 double size = TMath::DegToRad() * 20.;
436 int sector = (int)((alpha + TMath::Pi())/size);
440 //______________________________________________________________________________
441 const int AliTRDQATask::CheckSector(const int sector) const
443 // Checks the sector number
445 int sec[] = {2,3,5,6,11,12,13,15};
447 for(int i=0; i<knSec; i++)
448 if (sector == sec[i]) return 1;
453 //______________________________________________________________________________
454 void AliTRDQATask::CalculateEff()
456 // calculates the efficiency
458 for(int i=0; i<4; i++) fEffPt[i]->Reset();
460 fEffPt[0]->Add(fPt[1]);
461 fEffPt[0]->Divide(fPt[0]);
463 fEffPt[1]->Add(fPt[3]);
464 fEffPt[1]->Divide(fPt[1]);
466 fEffPt[2]->Add(fPt[4]);
467 fEffPt[2]->Divide(fPt[3]);
469 fEffPt[3]->Add(fPt[4]);
470 fEffPt[3]->Divide(fPt[1]);
473 //______________________________________________________________________________
474 void AliTRDQATask::DrawESD() const
478 TCanvas * cTRD = new TCanvas("cTRD", "TRD ESD Test", 400, 10, 600, 700) ;
481 gROOT->SetStyle("Plain");
482 gStyle->SetPalette(1);
483 gStyle->SetOptStat(0);
485 TGaxis::SetMaxDigits(3);
487 gStyle->SetLabelFont(52, "XYZ");
488 gStyle->SetTitleFont(62, "XYZ");
489 gStyle->SetPadRightMargin(0.02);
493 const int knplots = 18;
494 const int knover[knplots] = {1,1,1,4,1,1,1,1,1,1,2,1,1,3,1,1,1,1};
495 const int knnames = 24;
496 const char *names[knnames] = {
497 "ntracks", "kinkIndex", "trackStatus",
498 "ptTPCi", "ptTPCo", "ptTRDo", "ptTRDr", "ptTPCz", "ptTRDz",
499 "eff_TPCi_TPCo", "eff_TPCo_TRDo", "eff_TRDo_TRDr", "eff_TPCo_TRDr",
500 "clsTRDo", "clsTRDr", "clsTRDz",
501 "alphaTPCi", "alphaTPCo", "alphaTRDo", "alphaTRDr", "sectorTRD",
502 "time", "budget", "signal"
505 const int klogy[knnames] = {
515 for(int i=0; i<knplots; i++) {
518 // new TCanvas(names[i], names[nhist], 500, 300);
520 for(int j=0; j<knover[i]; j++) {
521 TH1D *hist = dynamic_cast<TH1D*>(gDirectory->FindObject(names[nhist++]));
523 if (hist->GetMaximum() > 0 )
524 gPad->SetLogy(klogy[i]);
525 if (strstr(hist->GetName(), "eff")) {
526 hist->SetMarkerStyle(20);
528 hist->SetMaximum(1.2);
531 if (!j) hist->Draw();
532 else hist->Draw("SAME");
535 cTRD->Print("TRD_ESD.eps");
538 //______________________________________________________________________________
539 void AliTRDQATask::DrawGeoESD() const
543 TCanvas * cTRDGeo = new TCanvas("cTRDGeo", "TRD ESDGeo Test", 400, 10, 600, 700) ;
544 cTRDGeo->Divide(4,2) ;
546 gStyle->SetOptStat(0);
547 TGaxis::SetMaxDigits(3);
549 gStyle->SetLabelFont(52, "XYZ");
550 gStyle->SetTitleFont(62, "XYZ");
552 gStyle->SetPadTopMargin(0.06);
553 gStyle->SetTitleBorderSize(0);
556 const int knnames = 7;
557 const char *names[knnames] = {
559 "planeYZTPCo", "planeYZTPCz", "planeYZTRDo", "planeYZTRDr", "planeYZTRDz",
562 const char *opt[knnames] = {
564 "colz","colz", "colz", "colz", "colz"
567 const int klogy[knnames] = {
572 for(int i=0; i<knnames; i++) {
574 TH1D *hist = dynamic_cast<TH1D*>(gDirectory->FindObject(names[i]));
577 //if (i<2) new TCanvas(names[i], names[i], 500, 300);
578 //else new TCanvas(names[i], names[i], 300, 900);
580 if (hist->GetMaximum() > 0 )
581 gPad->SetLogy(klogy[i]);
582 if (strstr(opt[i],"colz")) gPad->SetRightMargin(0.1);
585 AliInfo(Form("%s\t%d", names[i], hist->GetEntries()));
588 cTRDGeo->Print("TRD_Geo.eps");
591 //______________________________________________________________________________
592 void AliTRDQATask::DrawConvESD() const
596 AliInfo("Plotting....") ;
597 TCanvas * cTRDConv = new TCanvas("cTRDConv", "TRD ESDConv Test", 400, 10, 600, 700) ;
598 cTRDConv->Divide(3,2) ;
600 gROOT->SetStyle("Plain");
602 gStyle->SetPalette(1);
604 TGaxis::SetMaxDigits(3);
606 gStyle->SetLabelFont(52, "XYZ");
607 gStyle->SetTitleFont(62, "XYZ");
608 gStyle->SetPadRightMargin(0.02);
610 const int knnames = 9;
611 const int knplots = 5;
612 const int knover[knplots] = {3,1,1,3,1};
614 const char *names[knnames] = {
615 "sigmaYTPCo","sigmaYTRDo", "sigmaYTRDr", "sigmaYTPCz", "sigmaYTRDz",
616 "Chi2TPCo", "Chi2TRDo", "Chi2TRDr", "Chi2TRDz"
619 const char *opt[knplots] = {
623 const int klogy[knplots] = {
628 for(int i=0; i<knplots; i++) {
630 //new TCanvas(names[i], names[i], 500, 300);
631 if (strstr(opt[i],"colz")) gPad->SetRightMargin(0.1);
633 for(int j=0; j<knover[i]; j++) {
634 TH1D *hist = dynamic_cast<TH1D*>(gDirectory->FindObject(names[nhist++]));
635 if ( hist->GetMaximum() > 0 )
636 gPad->SetLogy(klogy[i]);
637 if (!j) hist->Draw(opt[i]);
638 else hist->Draw("same");
642 cTRDConv->Print("TRD_Conv.eps");
645 //______________________________________________________________________________
646 void AliTRDQATask::DrawPidESD() const
650 TCanvas * cTRDPid = new TCanvas("cTRDPid", "TRD ESDPid Test", 400, 10, 600, 700) ;
651 cTRDPid->Divide(9,3) ;
653 gROOT->SetStyle("Plain");
655 gStyle->SetPalette(1);
656 gStyle->SetOptStat(0);
658 TGaxis::SetMaxDigits(3);
660 gStyle->SetLabelFont(52, "XYZ");
661 gStyle->SetTitleFont(62, "XYZ");
663 gStyle->SetPadTopMargin(0.05);
664 gStyle->SetPadRightMargin(0.02);
668 const int knnames = 27;
669 const char *names[knnames] = {
671 "signal", "trdSigMom", "tpcSigMom",
673 "trdPidEl", "trdPidMu", "trdPidPi", "trdPidK", "trdPidP", "trdPidCh",
674 "trdSigMomEl", "trdSigMomMu", "trdSigMomPi", "trdSigMomK", "trdSigMomP", "trdSigMomCh",
676 "tpcPidEl", "tpcPidMu", "tpcPidPi", "tpcPidK", "tpcPidP", "tpcPidCh",
677 "tpcSigMomEl", "tpcSigMomMu", "tpcSigMomPi", "tpcSigMomK", "tpcSigMomP", "tpcSigMomCh"
681 const char *opt[knnames] = {
685 "", "", "", "", "", "" ,
686 "colz", "colz", "colz", "colz", "colz", "colz",
688 "", "", "", "", "", "" ,
689 "colz", "colz", "colz", "colz", "colz", "colz"
692 const int klogy[knnames] = {
703 for(int i=0; i<knnames; i++) {
706 TH1D *hist = dynamic_cast<TH1D*>(gDirectory->FindObject(names[i]));
709 //new TCanvas(names[i], names[i], 500, 300);
710 if ( hist->GetMaximum() > 0 )
711 gPad->SetLogy(klogy[i]);
712 if (strstr(opt[i],"colz")) gPad->SetRightMargin(0.1);
714 if (strstr(names[i],"sigMom")) gPad->SetLogz(1);
715 if (strstr(names[i],"SigMom")) gPad->SetLogz(1);
718 AliInfo(Form("%s\t%d", names[i], hist->GetEntries()));
720 cTRDPid->Print("TRD_Pid.eps");