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
43 #include "AliTRDQATask.h"
47 //______________________________________________________________________________
48 AliTRDQATask::AliTRDQATask(const char *name) :
49 AliAnalysisTask(name,""),
71 // Input slot #0 works with an Ntuple
72 DefineInput(0, TChain::Class());
73 // Output slot #0 writes into a TH1 container
74 DefineOutput(0, TObjArray::Class()) ;
77 //______________________________________________________________________________
78 void AliTRDQATask::ConnectInputData(const Option_t *)
80 // Initialisation of branch container and histograms
82 AliInfo(Form("*** Initialization of %s", GetName())) ;
85 fChain = dynamic_cast<TChain *>(GetInputData(0)) ;
87 AliError(Form("Input 0 for %s not found\n", GetName()));
91 // One should first check if the branch address was taken by some other task
92 char ** address = (char **)GetBranchAddress(0, "ESD");
94 fESD = (AliESD*)(*address);
97 SetBranchAddress(0, "ESD", &fESD);
101 //________________________________________________________________________
102 void AliTRDQATask::CreateOutputObjects()
108 fNTracks = new TH1D("ntracks", ";number of all tracks", 500, -0.5, 499.5);
109 fEventSize = new TH1D("evSize", ";event size (MB)", 100, 0, 5);
111 fTrackStatus = new TH1D("trackStatus", ";status bit", 32, -0.5, 31.5);
112 fKinkIndex = new TH1D("kinkIndex", ";kink index", 41, -20.5, 20.5);
114 fParIn = new TH1D("parIn", "Inner Plane", 2, -0.5, 1.5);
115 fParOut = new TH1D("parOut", "Outer Plane", 2, -0.5, 1.5);
117 fXIn = new TH1D("xIn", ";X at the inner plane (cm)", 200, 50, 250);
118 fXOut = new TH1D("xOut", ";X at the outer plane (cm)", 300, 50, 400);
120 const int knNameAlpha = 4;
121 const char *namesAlpha[knNameAlpha] = {"alphaTPCi", "alphaTPCo", "alphaTRDo", "alphaTRDr"};
123 for(int i=0; i<knNameAlpha; i++) {
124 fAlpha[i] = new TH1D(namesAlpha[i], "alpha", 100, -4, 4);
126 fSectorTRD = new TH1D ("sectorTRD", ";sector TRD", 20, -0.5, 19.5);
130 const int knbits = 6;
131 const char *suf[knbits] = {"TPCi", "TPCo", "TPCz", "TRDo", "TRDr", "TRDz"};
132 for(int i=0; i<knbits; i++) {
133 fPt[i] = new TH1D(Form("pt%s",suf[i]), ";p_{T} (GeV/c);entries TPC", 50, 0, 10);
134 fTheta[i] = new TH1D(Form("theta%s", suf[i]), "theta (rad)", 100, -4, 4);
135 fSigmaY[i] = new TH1D(Form("sigmaY%s",suf[i]), ";sigma Y (cm)", 200, 0, 1);
136 fChi2[i] = new TH1D(Form("Chi2%s", suf[i]), ";#chi2 / ndf", 100, 0, 10);
137 fPlaneYZ[i] = new TH2D(Form("planeYZ%s", suf[i]), Form("%sy (cm);z (cm)", suf[i]),
138 100, -60, 60, 500, -500, 500);
142 fEffPt[0] = (TH1D*) fPt[0]->Clone(Form("eff_%s_%s", suf[0], suf[1]));
143 fEffPt[1] = (TH1D*) fPt[0]->Clone(Form("eff_%s_%s", suf[1], suf[3]));
144 fEffPt[2] = (TH1D*) fPt[0]->Clone(Form("eff_%s_%s", suf[3], suf[4]));
145 fEffPt[3] = (TH1D*) fPt[0]->Clone(Form("eff_%s_%s", suf[1], suf[4]));
147 for(int i=0; i<4; i++) {
149 fEffPt[i]->SetMarkerStyle(20);
150 fEffPt[i]->SetMinimum(0);
151 fEffPt[i]->SetMaximum(1.1);
155 fClustersTRD[0] = new TH1D("clsTRDo", "TRDo;number of clusters", 130, -0.5, 129.5);;
156 fClustersTRD[1] = new TH1D("clsTRDr", "TRDr;number of clusters", 130, -0.5, 129.5);;
157 fClustersTRD[2] = new TH1D("clsTRDz", "TRDz;number of clusters", 130, -0.5, 129.5);;
159 // for good refitted tracks only
160 fTime = new TH1D("time", ";time bin", 25, -0.5, 24.5);
161 fBudget = new TH1D("budget", ";material budget", 100, 0, 100);
162 fQuality = new TH1D("quality", ";track quality", 100, 0, 1.1);
163 fSignal = new TH1D("signal", ";signal", 100, 0, 1e3);
166 fTrdSigMom = new TH2D("trdSigMom", ";momentum (GeV/c);signal", 100, 0, 3, 100, 0, 1e3);
167 fTpcSigMom = new TH2D("tpcSigMom", ";momentum (GeV/c);signal", 100, 0, 3, 100, 0, 200);
169 const char *pidName[6] = {"El", "Mu", "Pi", "K", "P", "Ch"};
170 for(int i=0; i<6; i++) {
173 fTpcPID[i] = new TH1D(Form("tpcPid%s",pidName[i]), pidName[i], 100, 0, 1.5);
174 fTpcPID[i]->GetXaxis()->SetTitle("probability");
176 fTpcSigMomPID[i] = new TH2D(Form("tpcSigMom%s",pidName[i]), "", 100, 0, 3, 100, 0, 200);
177 fTpcSigMomPID[i]->SetTitle(Form("%s;momentum (GeV/c);signal",pidName[i]));
180 fTrdPID[i] = new TH1D(Form("trdPid%s",pidName[i]), pidName[i], 100, 0, 1.5);
181 fTrdPID[i]->GetXaxis()->SetTitle("probability");
183 fTrdSigMomPID[i] = new TH2D(Form("trdSigMom%s",pidName[i]), "", 100, 0, 3, 100, 0, 1e3);
184 fTrdSigMomPID[i]->SetTitle(Form("%s;momentum (GeV/c);signal",pidName[i]));
188 // create output container
189 fOutputContainer = new TObjArray(150);
191 // register histograms to the container
194 fOutputContainer->AddAt(fNTracks, counter++);
195 fOutputContainer->AddAt(fEventSize, counter++);
196 fOutputContainer->AddAt(fTrackStatus, counter++);
197 fOutputContainer->AddAt(fKinkIndex, counter++);
198 fOutputContainer->AddAt(fParIn, counter++);
199 fOutputContainer->AddAt(fParOut, counter++);
200 fOutputContainer->AddAt(fXIn, counter++);
201 fOutputContainer->AddAt(fXOut, counter++);
202 fOutputContainer->AddAt(fAlpha[0], counter++);
203 fOutputContainer->AddAt(fAlpha[1], counter++);
204 fOutputContainer->AddAt(fAlpha[2], counter++);
205 fOutputContainer->AddAt(fAlpha[3], counter++);
207 fOutputContainer->AddAt(fSectorTRD, counter++);
208 for(int i=0; i<knbits; i++) {
209 fOutputContainer->AddAt(fPt[i], counter++);
210 fOutputContainer->AddAt(fTheta[i], counter++);
211 fOutputContainer->AddAt(fSigmaY[i], counter++);
212 fOutputContainer->AddAt(fChi2[i], counter++);
213 fOutputContainer->AddAt(fPlaneYZ[i], counter++);
215 fOutputContainer->AddAt(fEffPt[0], counter++);
216 fOutputContainer->AddAt(fEffPt[1], counter++);
217 fOutputContainer->AddAt(fEffPt[2], counter++);
218 fOutputContainer->AddAt(fEffPt[3], counter++);
220 fOutputContainer->AddAt(fClustersTRD[0], counter++);
221 fOutputContainer->AddAt(fClustersTRD[1], counter++);
222 fOutputContainer->AddAt(fClustersTRD[2], counter++);
223 fOutputContainer->AddAt(fTime, counter++);
224 fOutputContainer->AddAt(fBudget, counter++);
225 fOutputContainer->AddAt(fQuality, counter++);
226 fOutputContainer->AddAt(fSignal, counter++);
227 fOutputContainer->AddAt(fTrdSigMom, counter++);
228 fOutputContainer->AddAt(fTpcSigMom, counter++);
229 for(int i=0; i<6; i++) {
230 fOutputContainer->AddAt(fTpcPID[i], counter++);
231 fOutputContainer->AddAt(fTpcSigMomPID[i], counter++);
232 fOutputContainer->AddAt(fTrdPID[i], counter++);
233 fOutputContainer->AddAt(fTrdSigMomPID[i], counter++);
236 //AliInfo(Form("Number of histograms = %d", counter));
240 //______________________________________________________________________________
241 void AliTRDQATask::Exec(Option_t *)
245 Long64_t entry = fChain->GetReadEntry() ;
247 // Processing of one event
250 AliError("fESD is not connected to the input!") ;
254 if ( !((entry-1)%100) )
255 AliInfo(Form("%s ----> Processing event # %lld", (dynamic_cast<TChain *>(fChain))->GetFile()->GetName(), entry)) ;
257 int nTracks = fESD->GetNumberOfTracks();
258 fNTracks->Fill(nTracks);
261 for(int i=0; i<nTracks; i++) {
263 AliESDtrack *track = fESD->GetTrack(i);
264 const AliExternalTrackParam *paramOut = track->GetOuterParam();
265 const AliExternalTrackParam *paramIn = track->GetInnerParam();
267 fParIn->Fill(!!paramIn);
268 if (!paramIn) continue;
269 fXIn->Fill(paramIn->GetX());
271 fParOut->Fill(!!paramOut);
272 if (!paramOut) continue;
273 fXOut->Fill(paramOut->GetX());
275 int sector = GetSector(paramOut->GetAlpha());
276 if (!CheckSector(sector)) continue;
277 fSectorTRD->Fill(sector);
279 fKinkIndex->Fill(track->GetKinkIndex(0));
280 if (track->GetKinkIndex(0)) continue;
283 UInt_t status = track->GetStatus();
284 for(int bit=0; bit<32; bit++)
285 if (u<<bit & status) fTrackStatus->Fill(bit);
287 const int knbits = 6;
288 int bit[6] = {0,0,0,0,0,0};
289 bit[0] = status & AliESDtrack::kTPCin;
290 bit[1] = status & AliESDtrack::kTPCout;
291 bit[2] = (status & AliESDtrack::kTPCout) && !(status & AliESDtrack::kTRDout);
292 bit[3] = status & AliESDtrack::kTRDout;
293 bit[4] = status & AliESDtrack::kTRDrefit;
294 bit[5] = (status & AliESDtrack::kTRDout) && !(status & AliESDtrack::kTRDrefit);
297 // transverse momentum
298 const double *val = track->GetParameter(); // parameters at the vertex
299 double pt = 1./TMath::Abs(val[4]);
301 for(int b=0; b<knbits; b++) {
304 fTheta[b]->Fill(val[3]);
305 fSigmaY[b]->Fill(TMath::Sqrt(paramOut->GetSigmaY2()));
306 fChi2[b]->Fill(track->GetTRDchi2()/track->GetTRDncls());
307 fPlaneYZ[b]->Fill(paramOut->GetY(), paramOut->GetZ());
313 fAlpha[0]->Fill(paramIn->GetAlpha());
314 fAlpha[1]->Fill(paramOut->GetAlpha());
317 if (bit[3]) fAlpha[2]->Fill(paramOut->GetAlpha());
318 if (bit[4]) fAlpha[3]->Fill(paramOut->GetAlpha());
321 for(int b=0; b<3; b++)
322 if (bit[3+b]) fClustersTRD[b]->Fill(track->GetTRDncls());
325 if (!bit[4]) continue;
327 fQuality->Fill(track->GetTRDQuality());
328 fBudget->Fill(track->GetTRDBudget());
329 fSignal->Fill(track->GetTRDsignal());
331 fTrdSigMom->Fill(track->GetP(), track->GetTRDsignal());
332 fTpcSigMom->Fill(track->GetP(), track->GetTPCsignal());
335 if (status & AliESDtrack::kTRDpid) {
337 for(int l=0; l<6; l++) fTime->Fill(track->GetTRDTimBin(l));
339 // fill pid histograms
340 double trdr0 = 0, tpcr0 = 0;
341 int trdBestPid = 5, tpcBestPid = 5; // charged
342 const double kminPidValue = 0.9;
345 track->GetTPCpid(pp); // ESD inconsequence
347 for(int pid=0; pid<5; pid++) {
349 trdr0 += track->GetTRDpid(pid);
352 fTrdPID[pid]->Fill(track->GetTRDpid(pid));
353 fTpcPID[pid]->Fill(pp[pid]);
355 if (track->GetTRDpid(pid) > kminPidValue) trdBestPid = pid;
356 if (pp[pid] > kminPidValue) tpcBestPid = pid;
359 fTrdPID[5]->Fill(trdr0); // check unitarity
360 fTrdSigMomPID[trdBestPid]->Fill(track->GetP(), track->GetTRDsignal());
362 fTpcPID[5]->Fill(tpcr0); // check unitarity
363 fTpcSigMomPID[tpcBestPid]->Fill(track->GetP(), track->GetTPCsignal());
369 PostData(0, fOutputContainer);
372 //______________________________________________________________________________
373 void AliTRDQATask::Terminate(Option_t *)
375 // Processing when the event loop is ended
376 fOutputContainer = (TObjArray*)GetOutputData(0);
378 fNTracks = (TH1D*)fOutputContainer->At(counter++);
379 fEventSize = (TH1D*)fOutputContainer->At(counter++);
380 fTrackStatus = (TH1D*)fOutputContainer->At(counter++);
381 fKinkIndex = (TH1D*)fOutputContainer->At(counter++);
382 fParIn = (TH1D*)fOutputContainer->At(counter++);
383 fParOut = (TH1D*)fOutputContainer->At(counter++);
384 fXIn = (TH1D*)fOutputContainer->At(counter++);
385 fXOut = (TH1D*)fOutputContainer->At(counter++);
386 fAlpha[0] = (TH1D*)fOutputContainer->At(counter++);
387 fAlpha[1] = (TH1D*)fOutputContainer->At(counter++);
388 fAlpha[2] = (TH1D*)fOutputContainer->At(counter++);
389 fAlpha[3] = (TH1D*)fOutputContainer->At(counter++);
391 fSectorTRD = (TH1D*)fOutputContainer->At(counter++);
392 const int knbits = 6;
393 for(int i=0; i<knbits; i++) {
394 fPt[i] = (TH1D*)fOutputContainer->At(counter++);
395 fTheta[i] = (TH1D*)fOutputContainer->At(counter++);
396 fSigmaY[i] = (TH1D*)fOutputContainer->At(counter++);
397 fChi2[i] = (TH1D*)fOutputContainer->At(counter++);
398 fPlaneYZ[i] = (TH2D*)fOutputContainer->At(counter++);
400 fEffPt[0] = (TH1D*)fOutputContainer->At(counter++);
401 fEffPt[1] = (TH1D*)fOutputContainer->At(counter++);
402 fEffPt[2] = (TH1D*)fOutputContainer->At(counter++);
403 fEffPt[3] = (TH1D*)fOutputContainer->At(counter++);
405 fClustersTRD[0] = (TH1D*)fOutputContainer->At(counter++);
406 fClustersTRD[1] = (TH1D*)fOutputContainer->At(counter++);
407 fClustersTRD[2] = (TH1D*)fOutputContainer->At(counter++);
408 fTime = (TH1D*)fOutputContainer->At(counter++);
409 fBudget = (TH1D*)fOutputContainer->At(counter++);
410 fQuality = (TH1D*)fOutputContainer->At(counter++);
411 fSignal = (TH1D*)fOutputContainer->At(counter++);
412 fTrdSigMom = (TH2D*)fOutputContainer->At(counter++);
413 fTpcSigMom = (TH2D*)fOutputContainer->At(counter++);
414 for(int i=0; i<6; i++) {
415 fTpcPID[i] = (TH1D*)fOutputContainer->At(counter++);
416 fTpcSigMomPID[i] = (TH2D*)fOutputContainer->At(counter++);
417 fTrdPID[i] = (TH1D*)fOutputContainer->At(counter++);
418 fTrdSigMomPID[i] = (TH2D*)fOutputContainer->At(counter++);
421 // create efficiency histograms
422 Bool_t problem = kFALSE ;
423 AliInfo(Form(" *** %s Report:", GetName())) ;
433 sprintf(line, ".!tar -zcf %s.tar.gz *.eps", GetName()) ;
434 gROOT->ProcessLine(line);
436 AliInfo(Form("!!! All the eps files are in %s.tar.gz !!!", GetName())) ;
440 report="Problems found, please check!!!";
444 AliInfo(Form("*** %s Summary Report: %s\n",GetName(), report.Data())) ;
448 //______________________________________________________________________________
449 int AliTRDQATask::GetSector(const double alpha) const
451 // Gets the sector number
453 double size = TMath::DegToRad() * 20.;
454 int sector = (int)((alpha + TMath::Pi())/size);
458 //______________________________________________________________________________
459 int AliTRDQATask::CheckSector(const int sector) const
461 // Checks the sector number
463 int sec[] = {2,3,5,6,11,12,13,15};
465 for(int i=0; i<knSec; i++)
466 if (sector == sec[i]) return 1;
471 //______________________________________________________________________________
472 void AliTRDQATask::CalculateEff()
474 // calculates the efficiency
476 for(int i=0; i<4; i++) fEffPt[i]->Reset();
478 fEffPt[0]->Add(fPt[1]);
479 fEffPt[0]->Divide(fPt[0]);
481 fEffPt[1]->Add(fPt[3]);
482 fEffPt[1]->Divide(fPt[1]);
484 fEffPt[2]->Add(fPt[4]);
485 fEffPt[2]->Divide(fPt[3]);
487 fEffPt[3]->Add(fPt[4]);
488 fEffPt[3]->Divide(fPt[1]);
491 //______________________________________________________________________________
492 void AliTRDQATask::DrawESD() const
496 TCanvas * cTRD = new TCanvas("cTRD", "TRD ESD Test", 400, 10, 600, 700) ;
499 gROOT->SetStyle("Plain");
500 gStyle->SetPalette(1);
501 gStyle->SetOptStat(0);
503 TGaxis::SetMaxDigits(3);
505 gStyle->SetLabelFont(52, "XYZ");
506 gStyle->SetTitleFont(62, "XYZ");
507 gStyle->SetPadRightMargin(0.02);
511 const int knplots = 18;
512 const int knover[knplots] = {1,1,1,4,1,1,1,1,1,1,2,1,1,3,1,1,1,1};
513 const int knnames = 24;
514 const char *names[knnames] = {
515 "ntracks", "kinkIndex", "trackStatus",
516 "ptTPCi", "ptTPCo", "ptTRDo", "ptTRDr", "ptTPCz", "ptTRDz",
517 "eff_TPCi_TPCo", "eff_TPCo_TRDo", "eff_TRDo_TRDr", "eff_TPCo_TRDr",
518 "clsTRDo", "clsTRDr", "clsTRDz",
519 "alphaTPCi", "alphaTPCo", "alphaTRDo", "alphaTRDr", "sectorTRD",
520 "time", "budget", "signal"
523 const int klogy[knnames] = {
533 for(int i=0; i<knplots; i++) {
536 // new TCanvas(names[i], names[nhist], 500, 300);
538 for(int j=0; j<knover[i]; j++) {
539 TH1D *hist = dynamic_cast<TH1D*>(gDirectory->FindObject(names[nhist++]));
541 if (hist->GetMaximum() > 0 )
542 gPad->SetLogy(klogy[i]);
543 if (strstr(hist->GetName(), "eff")) {
544 hist->SetMarkerStyle(20);
546 hist->SetMaximum(1.2);
549 if (!j) hist->Draw();
550 else hist->Draw("SAME");
553 cTRD->Print("TRD_ESD.eps");
556 //______________________________________________________________________________
557 void AliTRDQATask::DrawGeoESD() const
561 TCanvas * cTRDGeo = new TCanvas("cTRDGeo", "TRD ESDGeo Test", 400, 10, 600, 700) ;
562 cTRDGeo->Divide(4,2) ;
564 gStyle->SetOptStat(0);
565 TGaxis::SetMaxDigits(3);
567 gStyle->SetLabelFont(52, "XYZ");
568 gStyle->SetTitleFont(62, "XYZ");
570 gStyle->SetPadTopMargin(0.06);
571 gStyle->SetTitleBorderSize(0);
574 const int knnames = 7;
575 const char *names[knnames] = {
577 "planeYZTPCo", "planeYZTPCz", "planeYZTRDo", "planeYZTRDr", "planeYZTRDz",
580 const char *opt[knnames] = {
582 "colz","colz", "colz", "colz", "colz"
585 const int klogy[knnames] = {
590 for(int i=0; i<knnames; i++) {
592 TH1D *hist = dynamic_cast<TH1D*>(gDirectory->FindObject(names[i]));
595 //if (i<2) new TCanvas(names[i], names[i], 500, 300);
596 //else new TCanvas(names[i], names[i], 300, 900);
598 if (hist->GetMaximum() > 0 )
599 gPad->SetLogy(klogy[i]);
600 if (strstr(opt[i],"colz")) gPad->SetRightMargin(0.1);
603 AliInfo(Form("%s\t%d", names[i], hist->GetEntries()));
606 cTRDGeo->Print("TRD_Geo.eps");
609 //______________________________________________________________________________
610 void AliTRDQATask::DrawConvESD() const
614 AliInfo("Plotting....") ;
615 TCanvas * cTRDConv = new TCanvas("cTRDConv", "TRD ESDConv Test", 400, 10, 600, 700) ;
616 cTRDConv->Divide(3,2) ;
618 gROOT->SetStyle("Plain");
620 gStyle->SetPalette(1);
622 TGaxis::SetMaxDigits(3);
624 gStyle->SetLabelFont(52, "XYZ");
625 gStyle->SetTitleFont(62, "XYZ");
626 gStyle->SetPadRightMargin(0.02);
628 const int knnames = 9;
629 const int knplots = 5;
630 const int knover[knplots] = {3,1,1,3,1};
632 const char *names[knnames] = {
633 "sigmaYTPCo","sigmaYTRDo", "sigmaYTRDr", "sigmaYTPCz", "sigmaYTRDz",
634 "Chi2TPCo", "Chi2TRDo", "Chi2TRDr", "Chi2TRDz"
637 const char *opt[knplots] = {
641 const int klogy[knplots] = {
646 for(int i=0; i<knplots; i++) {
648 //new TCanvas(names[i], names[i], 500, 300);
649 if (strstr(opt[i],"colz")) gPad->SetRightMargin(0.1);
651 for(int j=0; j<knover[i]; j++) {
652 TH1D *hist = dynamic_cast<TH1D*>(gDirectory->FindObject(names[nhist++]));
653 if ( hist->GetMaximum() > 0 )
654 gPad->SetLogy(klogy[i]);
655 if (!j) hist->Draw(opt[i]);
656 else hist->Draw("same");
660 cTRDConv->Print("TRD_Conv.eps");
663 //______________________________________________________________________________
664 void AliTRDQATask::DrawPidESD() const
668 TCanvas * cTRDPid = new TCanvas("cTRDPid", "TRD ESDPid Test", 400, 10, 600, 700) ;
669 cTRDPid->Divide(9,3) ;
671 gROOT->SetStyle("Plain");
673 gStyle->SetPalette(1);
674 gStyle->SetOptStat(0);
676 TGaxis::SetMaxDigits(3);
678 gStyle->SetLabelFont(52, "XYZ");
679 gStyle->SetTitleFont(62, "XYZ");
681 gStyle->SetPadTopMargin(0.05);
682 gStyle->SetPadRightMargin(0.02);
686 const int knnames = 27;
687 const char *names[knnames] = {
689 "signal", "trdSigMom", "tpcSigMom",
691 "trdPidEl", "trdPidMu", "trdPidPi", "trdPidK", "trdPidP", "trdPidCh",
692 "trdSigMomEl", "trdSigMomMu", "trdSigMomPi", "trdSigMomK", "trdSigMomP", "trdSigMomCh",
694 "tpcPidEl", "tpcPidMu", "tpcPidPi", "tpcPidK", "tpcPidP", "tpcPidCh",
695 "tpcSigMomEl", "tpcSigMomMu", "tpcSigMomPi", "tpcSigMomK", "tpcSigMomP", "tpcSigMomCh"
699 const char *opt[knnames] = {
703 "", "", "", "", "", "" ,
704 "colz", "colz", "colz", "colz", "colz", "colz",
706 "", "", "", "", "", "" ,
707 "colz", "colz", "colz", "colz", "colz", "colz"
710 const int klogy[knnames] = {
721 for(int i=0; i<knnames; i++) {
724 TH1D *hist = dynamic_cast<TH1D*>(gDirectory->FindObject(names[i]));
727 //new TCanvas(names[i], names[i], 500, 300);
728 if ( hist->GetMaximum() > 0 )
729 gPad->SetLogy(klogy[i]);
730 if (strstr(opt[i],"colz")) gPad->SetRightMargin(0.1);
732 if (strstr(names[i],"sigMom")) gPad->SetLogz(1);
733 if (strstr(names[i],"SigMom")) gPad->SetLogz(1);
736 AliInfo(Form("%s\t%d", names[i], hist->GetEntries()));
738 cTRDPid->Print("TRD_Pid.eps");