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 **************************************************************************/
16 // The class AliCFTrackQualityCuts is designed to select reconstructed tracks
17 // of high quality and to provide corresponding QA histograms.
18 // This class inherits from the Analysis' Framework abstract base class
19 // AliAnalysisCuts and is a part of the Correction Framework.
20 // This class acts on single, reconstructed tracks, it is applicable on
22 // It mainly consists of a IsSelected function that returns a boolean.
23 // This function checks whether the considered track passes a set of cuts:
24 // - number of clusters in the ITS
25 // - number of clusters in the TPC
26 // - number of clusters in the TRD
27 // - ratio of found / finable number of clusters in the TPC
28 // - number of tracklets in the TRD
29 // - number TRD tracklets used for pid
30 // - chi2 / cluster in the ITS
31 // - chi2 / cluster in the TPC
32 // - chi2 / tracklet in the TRD
33 // - successful TPC refit
34 // - successful ITS refit
35 // - covariance matrix diagonal elements
37 // The cut values for these cuts are set with the corresponding set functions.
38 // All cut classes provided by the correction framework are supposed to be
39 // added in the Analysis Framwork's class AliAnalysisFilter and applied by
40 // the filter via a loop.
42 // author: I. Kraus (Ingrid.Kraus@cern.ch)
44 // AliESDtrackCuts writte by Jan Fiete Grosse-Oetringhaus and
45 // AliRsnDaughterCut class written by A. Pulvirenti.
49 #include <TDirectory.h>
53 #include <AliESDtrack.h>
55 #include "AliCFTrackQualityCuts.h"
56 #include "AliAODTrack.h"
58 ClassImp(AliCFTrackQualityCuts)
60 //__________________________________________________________________________________
61 AliCFTrackQualityCuts::AliCFTrackQualityCuts() :
66 fMinFoundClusterTPC(0),
68 fMinNTrackletTRDpid(0),
69 fMaxChi2PerClusterTPC(0),
70 fMaxChi2PerClusterITS(0),
71 fMaxChi2PerTrackletTRD(0),
84 fhNBinsFoundClusterTPC(0),
85 fhNBinsTrackletTRD(0),
86 fhNBinsTrackletTRDpid(0),
90 fhNBinsCovariance11(0),
91 fhNBinsCovariance22(0),
92 fhNBinsCovariance33(0),
93 fhNBinsCovariance44(0),
94 fhNBinsCovariance55(0),
95 fhBinLimClusterTPC(0x0),
96 fhBinLimClusterITS(0x0),
97 fhBinLimClusterTRD(0x0),
98 fhBinLimFoundClusterTPC(0x0),
99 fhBinLimTrackletTRD(0x0),
100 fhBinLimTrackletTRDpid(0x0),
101 fhBinLimChi2TPC(0x0),
102 fhBinLimChi2ITS(0x0),
103 fhBinLimChi2TRD(0x0),
104 fhBinLimCovariance11(0x0),
105 fhBinLimCovariance22(0x0),
106 fhBinLimCovariance33(0x0),
107 fhBinLimCovariance44(0x0),
108 fhBinLimCovariance55(0x0)
111 // Default constructor
115 //__________________________________________________________________________________
116 AliCFTrackQualityCuts::AliCFTrackQualityCuts(Char_t* name, Char_t* title) :
117 AliCFCutBase(name,title),
121 fMinFoundClusterTPC(0),
123 fMinNTrackletTRDpid(0),
124 fMaxChi2PerClusterTPC(0),
125 fMaxChi2PerClusterITS(0),
126 fMaxChi2PerTrackletTRD(0),
136 fhNBinsClusterTPC(0),
137 fhNBinsClusterITS(0),
138 fhNBinsClusterTRD(0),
139 fhNBinsFoundClusterTPC(0),
140 fhNBinsTrackletTRD(0),
141 fhNBinsTrackletTRDpid(0),
145 fhNBinsCovariance11(0),
146 fhNBinsCovariance22(0),
147 fhNBinsCovariance33(0),
148 fhNBinsCovariance44(0),
149 fhNBinsCovariance55(0),
150 fhBinLimClusterTPC(0x0),
151 fhBinLimClusterITS(0x0),
152 fhBinLimClusterTRD(0x0),
153 fhBinLimFoundClusterTPC(0x0),
154 fhBinLimTrackletTRD(0x0),
155 fhBinLimTrackletTRDpid(0x0),
156 fhBinLimChi2TPC(0x0),
157 fhBinLimChi2ITS(0x0),
158 fhBinLimChi2TRD(0x0),
159 fhBinLimCovariance11(0x0),
160 fhBinLimCovariance22(0x0),
161 fhBinLimCovariance33(0x0),
162 fhBinLimCovariance44(0x0),
163 fhBinLimCovariance55(0x0)
170 //__________________________________________________________________________________
171 AliCFTrackQualityCuts::AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) :
173 fMinNClusterTPC(c.fMinNClusterTPC),
174 fMinNClusterITS(c.fMinNClusterITS),
175 fMinNClusterTRD(c.fMinNClusterTRD),
176 fMinFoundClusterTPC(c.fMinFoundClusterTPC),
177 fMinNTrackletTRD(c.fMinNTrackletTRD),
178 fMinNTrackletTRDpid(c.fMinNTrackletTRDpid),
179 fMaxChi2PerClusterTPC(c.fMaxChi2PerClusterTPC),
180 fMaxChi2PerClusterITS(c.fMaxChi2PerClusterITS),
181 fMaxChi2PerTrackletTRD(c.fMaxChi2PerTrackletTRD),
182 fCovariance11Max(c.fCovariance11Max),
183 fCovariance22Max(c.fCovariance22Max),
184 fCovariance33Max(c.fCovariance33Max),
185 fCovariance44Max(c.fCovariance44Max),
186 fCovariance55Max(c.fCovariance55Max),
188 fhCutStatistics(c.fhCutStatistics),
189 fhCutCorrelation(c.fhCutCorrelation),
191 fhNBinsClusterTPC(c.fhNBinsClusterTPC),
192 fhNBinsClusterITS(c.fhNBinsClusterITS),
193 fhNBinsClusterTRD(c.fhNBinsClusterTRD),
194 fhNBinsFoundClusterTPC(c.fhNBinsFoundClusterTPC),
195 fhNBinsTrackletTRD(c.fhNBinsTrackletTRD),
196 fhNBinsTrackletTRDpid(c.fhNBinsTrackletTRDpid),
197 fhNBinsChi2TPC(c.fhNBinsChi2TPC),
198 fhNBinsChi2ITS(c.fhNBinsChi2ITS),
199 fhNBinsChi2TRD(c.fhNBinsChi2TRD),
200 fhNBinsCovariance11(c.fhNBinsCovariance11),
201 fhNBinsCovariance22(c.fhNBinsCovariance22),
202 fhNBinsCovariance33(c.fhNBinsCovariance33),
203 fhNBinsCovariance44(c.fhNBinsCovariance44),
204 fhNBinsCovariance55(c.fhNBinsCovariance55),
205 fhBinLimClusterTPC(c.fhBinLimClusterTPC),
206 fhBinLimClusterITS(c.fhBinLimClusterITS),
207 fhBinLimClusterTRD(c.fhBinLimClusterTRD),
208 fhBinLimFoundClusterTPC(c.fhBinLimFoundClusterTPC),
209 fhBinLimTrackletTRD(c.fhBinLimTrackletTRD),
210 fhBinLimTrackletTRDpid(c.fhBinLimTrackletTRDpid),
211 fhBinLimChi2TPC(c.fhBinLimChi2TPC),
212 fhBinLimChi2ITS(c.fhBinLimChi2ITS),
213 fhBinLimChi2TRD(c.fhBinLimChi2TRD),
214 fhBinLimCovariance11(c.fhBinLimCovariance11),
215 fhBinLimCovariance22(c.fhBinLimCovariance22),
216 fhBinLimCovariance33(c.fhBinLimCovariance33),
217 fhBinLimCovariance44(c.fhBinLimCovariance44),
218 fhBinLimCovariance55(c.fhBinLimCovariance55)
223 ((AliCFTrackQualityCuts &) c).Copy(*this);
225 //__________________________________________________________________________________
226 AliCFTrackQualityCuts& AliCFTrackQualityCuts::operator=(const AliCFTrackQualityCuts& c)
229 // Assignment operator
232 AliCFCutBase::operator=(c) ;
233 fMinNClusterTPC = c.fMinNClusterTPC ;
234 fMinNClusterITS = c.fMinNClusterITS ;
235 fMinNClusterTRD = c.fMinNClusterTRD ;
236 fMinFoundClusterTPC = c.fMinFoundClusterTPC ;
237 fMinNTrackletTRD = c.fMinNTrackletTRD ;
238 fMinNTrackletTRDpid = c.fMinNTrackletTRDpid ;
239 fMaxChi2PerClusterTPC = c.fMaxChi2PerClusterTPC ;
240 fMaxChi2PerClusterITS = c.fMaxChi2PerClusterITS ;
241 fMaxChi2PerTrackletTRD = c.fMaxChi2PerTrackletTRD ;
242 fCovariance11Max = c.fCovariance11Max ;
243 fCovariance22Max = c.fCovariance22Max ;
244 fCovariance33Max = c.fCovariance33Max ;
245 fCovariance44Max = c.fCovariance44Max ;
246 fCovariance55Max = c.fCovariance55Max ;
247 fStatus = c.fStatus ;
248 fhCutStatistics = c.fhCutStatistics ;
249 fhCutCorrelation = c.fhCutCorrelation ;
250 fBitmap = c.fBitmap ;
251 fhNBinsClusterTPC = c.fhNBinsClusterTPC ;
252 fhNBinsClusterITS = c.fhNBinsClusterITS ;
253 fhNBinsClusterTRD = c.fhNBinsClusterTRD ;
254 fhNBinsFoundClusterTPC = c.fhNBinsFoundClusterTPC ;
255 fhNBinsTrackletTRD = c.fhNBinsTrackletTRD ;
256 fhNBinsTrackletTRDpid = c.fhNBinsTrackletTRDpid ;
257 fhNBinsChi2TPC = c.fhNBinsChi2TPC ;
258 fhNBinsChi2ITS = c.fhNBinsChi2ITS ;
259 fhNBinsChi2TRD = c.fhNBinsChi2TRD ;
260 fhNBinsCovariance11 = c.fhNBinsCovariance11 ;
261 fhNBinsCovariance22 = c.fhNBinsCovariance22 ;
262 fhNBinsCovariance33 = c.fhNBinsCovariance33 ;
263 fhNBinsCovariance44 = c.fhNBinsCovariance44 ;
264 fhNBinsCovariance55 = c.fhNBinsCovariance55 ;
265 fhBinLimClusterTPC = c.fhBinLimClusterTPC ;
266 fhBinLimClusterITS = c.fhBinLimClusterITS ;
267 fhBinLimClusterTRD = c.fhBinLimClusterTRD ;
268 fhBinLimFoundClusterTPC = c.fhBinLimFoundClusterTPC ;
269 fhBinLimTrackletTRD = c.fhBinLimTrackletTRD ;
270 fhBinLimTrackletTRDpid = c.fhBinLimTrackletTRDpid ;
271 fhBinLimChi2TPC = c.fhBinLimChi2TPC ;
272 fhBinLimChi2ITS = c.fhBinLimChi2ITS ;
273 fhBinLimChi2TRD = c.fhBinLimChi2TRD ;
274 fhBinLimCovariance11 = c.fhBinLimCovariance11 ;
275 fhBinLimCovariance22 = c.fhBinLimCovariance22 ;
276 fhBinLimCovariance33 = c.fhBinLimCovariance33 ;
277 fhBinLimCovariance44 = c.fhBinLimCovariance44 ;
278 fhBinLimCovariance55 = c.fhBinLimCovariance55 ;
280 for (Int_t i=0; i<c.kNHist; i++){
281 for (Int_t j=0; j<c.kNStepQA; j++){
282 if(c.fhQA[i][j]) fhQA[i][j] = (TH1F*)c.fhQA[i][j]->Clone();
285 ((AliCFTrackQualityCuts &) c).Copy(*this);
289 //__________________________________________________________________________________
290 AliCFTrackQualityCuts::~AliCFTrackQualityCuts()
295 if (fhCutStatistics) delete fhCutStatistics;
296 if (fhCutCorrelation) delete fhCutCorrelation;
298 for (Int_t i=0; i<kNHist; i++){
299 for (Int_t j=0; j<kNStepQA; j++){
300 if(fhQA[i][j]) delete fhQA[i][j];
303 if(fBitmap) delete fBitmap;
304 if(fhBinLimClusterTPC) delete fhBinLimClusterTPC;
305 if(fhBinLimClusterITS) delete fhBinLimClusterITS;
306 if(fhBinLimClusterTRD) delete fhBinLimClusterTRD;
307 if(fhBinLimFoundClusterTPC) delete fhBinLimFoundClusterTPC;
308 if(fhBinLimTrackletTRD) delete fhBinLimTrackletTRD;
309 if(fhBinLimTrackletTRDpid) delete fhBinLimTrackletTRDpid;
310 if(fhBinLimChi2TPC) delete fhBinLimChi2TPC;
311 if(fhBinLimChi2ITS) delete fhBinLimChi2ITS;
312 if(fhBinLimChi2TRD) delete fhBinLimChi2TRD;
313 if(fhBinLimCovariance11) delete fhBinLimCovariance11;
314 if(fhBinLimCovariance22) delete fhBinLimCovariance22;
315 if(fhBinLimCovariance33) delete fhBinLimCovariance33;
316 if(fhBinLimCovariance44) delete fhBinLimCovariance44;
317 if(fhBinLimCovariance55) delete fhBinLimCovariance55;
319 //__________________________________________________________________________________
320 void AliCFTrackQualityCuts::Initialise()
323 // sets everything to zero
328 fMinFoundClusterTPC = 0;
329 fMinNTrackletTRD = 0;
330 fMinNTrackletTRDpid = 0;
331 fMaxChi2PerClusterTPC = 0;
332 fMaxChi2PerClusterITS = 0;
333 fMaxChi2PerTrackletTRD = 0;
334 fCovariance11Max = 0;
335 fCovariance22Max = 0;
336 fCovariance33Max = 0;
337 fCovariance44Max = 0;
338 fCovariance55Max = 0;
344 SetMinFoundClusterTPC();
345 SetMinNTrackletTRD();
346 SetMinNTrackletTRDpid();
347 SetMaxChi2PerClusterTPC();
348 SetMaxChi2PerClusterITS();
349 SetMaxChi2PerTrackletTRD();
350 SetMaxCovDiagonalElements();
353 for (Int_t i=0; i<kNHist; i++){
354 for (Int_t j=0; j<kNStepQA; j++)
358 fhCutCorrelation = 0;
359 fBitmap=new TBits(0);
361 //set default bining for QA histograms
362 SetHistogramBins(kCutClusterTPC,165,-0.5,164.5);
363 SetHistogramBins(kCutClusterITS,8,-0.5,7.5);
364 SetHistogramBins(kCutClusterTRD,120,-0.5,119.5);
365 SetHistogramBins(kCutMinFoundClusterTPC,110,-0.05,1.05);
366 SetHistogramBins(kCutTrackletTRD,7,-0.5,6.5);
367 SetHistogramBins(kCutTrackletTRDpid,7,-0.5,6.5);
368 SetHistogramBins(kCutChi2TPC,500,0.,10.);
369 SetHistogramBins(kCutChi2ITS,500,0.,10.);
370 SetHistogramBins(kCutChi2TRD,500,0.,10.);
371 SetHistogramBins(kCutCovElement11,200,0.,20.);
372 SetHistogramBins(kCutCovElement22,200,0.,20.);
373 SetHistogramBins(kCutCovElement33,100,0.,1.);
374 SetHistogramBins(kCutCovElement44,100,0.,5.);
375 SetHistogramBins(kCutCovElement55,100,0.,5.);
377 //__________________________________________________________________________________
378 void AliCFTrackQualityCuts::Copy(TObject &c) const
383 AliCFTrackQualityCuts& target = (AliCFTrackQualityCuts &) c;
387 if (fhCutStatistics) target.fhCutStatistics = (TH1F*) fhCutStatistics->Clone();
388 if (fhCutCorrelation) target.fhCutCorrelation = (TH2F*) fhCutCorrelation->Clone();
390 for (Int_t i=0; i<kNHist; i++){
391 for (Int_t j=0; j<kNStepQA; j++){
392 if(fhQA[i][j]) target.fhQA[i][j] = (TH1F*)fhQA[i][j]->Clone();
397 //__________________________________________________________________________________
398 void AliCFTrackQualityCuts::SelectionBitMap(TObject* obj)
401 // test if the track passes the single cuts
402 // and store the information in a bitmap
405 // bitmap stores the decision of each single cut
406 for(Int_t i=0; i<kNCuts; i++)fBitmap->SetBitNumber(i,kFALSE);
409 if (!obj->InheritsFrom("AliVParticle")) {
410 AliError("object must derived from AliVParticle !");
414 Bool_t isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ;
415 Bool_t isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ;
417 AliESDtrack * esdTrack = 0x0 ;
418 AliAODTrack * aodTrack = 0x0 ;
419 if (isESDTrack) esdTrack = dynamic_cast<AliESDtrack*>(obj);
420 if (isAODTrack) aodTrack = dynamic_cast<AliAODTrack*>(obj);
422 // get cut quantities
423 Int_t nClustersTPC = 0;
424 Int_t nClustersITS = 0 ;
425 Int_t nClustersTRD = 0 ;
426 Int_t nTrackletsTRD = 0 ;
427 Float_t chi2PerClusterTPC = 0 ;
428 Float_t chi2PerClusterITS = 0 ;
429 Float_t chi2PerTrackletTRD = 0 ;
430 Double_t extCov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
431 Float_t fractionFoundClustersTPC = 0;
434 nClustersTPC = esdTrack->GetTPCclusters(0x0);
435 nClustersITS = esdTrack->GetITSclusters(0x0);
436 nClustersTRD = esdTrack->GetTRDncls();
437 nTrackletsTRD = esdTrack->GetTRDntracklets();
438 if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC);
439 if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS);
440 if (nTrackletsTRD != 0) chi2PerTrackletTRD = esdTrack->GetTRDchi2() / Float_t(nTrackletsTRD);
441 esdTrack->GetExternalCovariance(extCov);
442 if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = float(nClustersTPC) / float(esdTrack->GetTPCNclsF());
448 if (nClustersTPC >= fMinNClusterTPC)
449 fBitmap->SetBitNumber(iCutBit,kTRUE);
451 if (nClustersITS >= fMinNClusterITS)
452 fBitmap->SetBitNumber(iCutBit,kTRUE);
454 if (nClustersTRD >= fMinNClusterTRD)
455 fBitmap->SetBitNumber(iCutBit,kTRUE);
457 if ((fMinFoundClusterTPC <= 0) || (nClustersTPC > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC)))
458 fBitmap->SetBitNumber(iCutBit,kTRUE);
460 if (nTrackletsTRD >= fMinNTrackletTRD)
461 fBitmap->SetBitNumber(iCutBit,kTRUE);
463 if (esdTrack->GetTRDntrackletsPID() >= fMinNTrackletTRDpid)
464 fBitmap->SetBitNumber(iCutBit,kTRUE);
466 if (chi2PerClusterTPC <= fMaxChi2PerClusterTPC)
467 fBitmap->SetBitNumber(iCutBit,kTRUE);
469 if (chi2PerClusterITS <= fMaxChi2PerClusterITS)
470 fBitmap->SetBitNumber(iCutBit,kTRUE);
472 if (chi2PerTrackletTRD <= fMaxChi2PerTrackletTRD)
473 fBitmap->SetBitNumber(iCutBit,kTRUE);
475 if (extCov[0] <= fCovariance11Max)
476 fBitmap->SetBitNumber(iCutBit,kTRUE);
478 if (extCov[2] <= fCovariance22Max)
479 fBitmap->SetBitNumber(iCutBit,kTRUE);
481 if (extCov[5] <= fCovariance33Max)
482 fBitmap->SetBitNumber(iCutBit,kTRUE);
484 if (extCov[9] <= fCovariance44Max)
485 fBitmap->SetBitNumber(iCutBit,kTRUE);
487 if (extCov[14] <= fCovariance55Max)
488 fBitmap->SetBitNumber(iCutBit,kTRUE);
492 if ( (esdTrack->GetStatus() & fStatus) == fStatus ) fBitmap->SetBitNumber(iCutBit,kTRUE);
495 if ( (aodTrack->GetStatus() & fStatus) == fStatus ) fBitmap->SetBitNumber(iCutBit,kTRUE);
500 //__________________________________________________________________________________
501 Bool_t AliCFTrackQualityCuts::IsSelected(TObject* obj) {
503 // loops over decisions of single cuts and returns if the track is accepted
505 SelectionBitMap(obj);
507 if (fIsQAOn) FillHistograms(obj,0);
508 Bool_t isSelected = kTRUE;
510 for (UInt_t icut=0; icut<fBitmap->GetNbits();icut++) {
511 if(!fBitmap->TestBitNumber(icut)) {
516 if (!isSelected) return kFALSE ;
517 if (fIsQAOn) FillHistograms(obj,1);
520 //__________________________________________________________________________________
521 void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins)
528 if (index<0 || index>=kNHist) {
529 Error("SetHistogramBins","could not determine histogram from index %d",index);
535 fhNBinsClusterTPC=nbins+1;
536 fhBinLimClusterTPC=new Double_t[nbins+1];
537 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTPC[i]=bins[i];
541 fhNBinsClusterITS=nbins+1;
542 fhBinLimClusterITS=new Double_t[nbins+1];
543 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterITS[i]=bins[i];
547 fhNBinsClusterTRD=nbins+1;
548 fhBinLimClusterTRD=new Double_t[nbins+1];
549 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTRD[i]=bins[i];
552 case kCutMinFoundClusterTPC:
553 fhNBinsFoundClusterTPC=nbins+1;
554 fhBinLimFoundClusterTPC=new Double_t[nbins+1];
555 for(Int_t i=0;i<nbins+1;i++)fhBinLimFoundClusterTPC[i]=bins[i];
558 case kCutTrackletTRD:
559 fhNBinsTrackletTRD=nbins+1;
560 fhBinLimTrackletTRD=new Double_t[nbins+1];
561 for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRD[i]=bins[i];
564 case kCutTrackletTRDpid:
565 fhNBinsTrackletTRDpid=nbins+1;
566 fhBinLimTrackletTRDpid=new Double_t[nbins+1];
567 for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRDpid[i]=bins[i];
571 fhNBinsChi2TPC=nbins+1;
572 fhBinLimChi2TPC=new Double_t[nbins+1];
573 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TPC[i]=bins[i];
577 fhNBinsChi2ITS=nbins+1;
578 fhBinLimChi2ITS=new Double_t[nbins+1];
579 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2ITS[i]=bins[i];
583 fhNBinsChi2TRD=nbins+1;
584 fhBinLimChi2TRD=new Double_t[nbins+1];
585 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TRD[i]=bins[i];
588 case kCutCovElement11:
589 fhNBinsCovariance11=nbins+1;
590 fhBinLimCovariance11=new Double_t[nbins+1];
591 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance11[i]=bins[i];
594 case kCutCovElement22:
595 fhNBinsCovariance22=nbins+1;
596 fhBinLimCovariance22=new Double_t[nbins+1];
597 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance22[i]=bins[i];
600 case kCutCovElement33:
601 fhNBinsCovariance33=nbins+1;
602 fhBinLimCovariance33=new Double_t[nbins+1];
603 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance33[i]=bins[i];
606 case kCutCovElement44:
607 fhNBinsCovariance44=nbins+1;
608 fhBinLimCovariance44=new Double_t[nbins+1];
609 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance44[i]=bins[i];
612 case kCutCovElement55:
613 fhNBinsCovariance55=nbins+1;
614 fhBinLimCovariance55=new Double_t[nbins+1];
615 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance55[i]=bins[i];
619 //__________________________________________________________________________________
620 void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax)
625 if (index<0 || index>=kNHist) {
626 Error("SetHistogramBins","could not determine histogram from index %d",index);
632 fhNBinsClusterTPC=nbins+1;
633 fhBinLimClusterTPC=new Double_t[nbins+1];
634 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
638 fhNBinsClusterITS=nbins+1;
639 fhBinLimClusterITS=new Double_t[nbins+1];
640 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterITS[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
644 fhNBinsClusterTRD=nbins+1;
645 fhBinLimClusterTRD=new Double_t[nbins+1];
646 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
649 case kCutMinFoundClusterTPC:
650 fhNBinsFoundClusterTPC=nbins+1;
651 fhBinLimFoundClusterTPC=new Double_t[nbins+1];
652 for(Int_t i=0;i<nbins+1;i++)fhBinLimFoundClusterTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
655 case kCutTrackletTRD:
656 fhNBinsTrackletTRD=nbins+1;
657 fhBinLimTrackletTRD=new Double_t[nbins+1];
658 for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
661 case kCutTrackletTRDpid:
662 fhNBinsTrackletTRDpid=nbins+1;
663 fhBinLimTrackletTRDpid=new Double_t[nbins+1];
664 for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRDpid[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
668 fhNBinsChi2TPC=nbins+1;
669 fhBinLimChi2TPC=new Double_t[nbins+1];
670 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
674 fhNBinsChi2ITS=nbins+1;
675 fhBinLimChi2ITS=new Double_t[nbins+1];
676 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2ITS[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
680 fhNBinsChi2TRD=nbins+1;
681 fhBinLimChi2TRD=new Double_t[nbins+1];
682 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
685 case kCutCovElement11:
686 fhNBinsCovariance11=nbins+1;
687 fhBinLimCovariance11=new Double_t[nbins+1];
688 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance11[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
691 case kCutCovElement22:
692 fhNBinsCovariance22=nbins+1;
693 fhBinLimCovariance22=new Double_t[nbins+1];
694 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance22[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
697 case kCutCovElement33:
698 fhNBinsCovariance33=nbins+1;
699 fhBinLimCovariance33=new Double_t[nbins+1];
700 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance33[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
703 case kCutCovElement44:
704 fhNBinsCovariance44=nbins+1;
705 fhBinLimCovariance44=new Double_t[nbins+1];
706 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance44[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
709 case kCutCovElement55:
710 fhNBinsCovariance55=nbins+1;
711 fhBinLimCovariance55=new Double_t[nbins+1];
712 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance55[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
716 //__________________________________________________________________________________
717 void AliCFTrackQualityCuts::DefineHistograms() {
719 // histograms for cut variables, cut statistics and cut correlations
723 // book cut statistics and cut correlation histograms
724 fhCutStatistics = new TH1F(Form("%s_cut_statistics",GetName()), Form("%s cut statistics",GetName()), kNCuts,0.5,kNCuts+0.5);
725 fhCutStatistics->SetLineWidth(2);
726 fhCutStatistics->GetXaxis()->SetBinLabel(1, "nClustersTPC");
727 fhCutStatistics->GetXaxis()->SetBinLabel(2, "nClustersITS");
728 fhCutStatistics->GetXaxis()->SetBinLabel(3, "nClustersTRD");
729 fhCutStatistics->GetXaxis()->SetBinLabel(4, "fractionClustersTPC");
730 fhCutStatistics->GetXaxis()->SetBinLabel(5, "ntrackletsTRD");
731 fhCutStatistics->GetXaxis()->SetBinLabel(6, "ntrackletsTRDpid");
732 fhCutStatistics->GetXaxis()->SetBinLabel(7, "chi2PerClusterTPC");
733 fhCutStatistics->GetXaxis()->SetBinLabel(8, "chi2PerClusterITS");
734 fhCutStatistics->GetXaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
735 fhCutStatistics->GetXaxis()->SetBinLabel(10, "covElement11");
736 fhCutStatistics->GetXaxis()->SetBinLabel(11, "covElement22");
737 fhCutStatistics->GetXaxis()->SetBinLabel(12, "covElement33");
738 fhCutStatistics->GetXaxis()->SetBinLabel(13, "covElement44");
739 fhCutStatistics->GetXaxis()->SetBinLabel(14, "covElement55");
740 fhCutStatistics->GetXaxis()->SetBinLabel(15, "status");
742 fhCutCorrelation = new TH2F(Form("%s_cut_correlation",GetName()), Form("%s cut correlation",GetName()), kNCuts,0.5,kNCuts+0.5,kNCuts,0.5,kNCuts+0.5);
743 fhCutCorrelation->SetLineWidth(2);
744 fhCutCorrelation->GetXaxis()->SetBinLabel(1, "nClustersTPC");
745 fhCutCorrelation->GetXaxis()->SetBinLabel(2, "nClustersITS");
746 fhCutCorrelation->GetXaxis()->SetBinLabel(3, "nClustersTRD");
747 fhCutCorrelation->GetXaxis()->SetBinLabel(4, "fractionClustersTPC");
748 fhCutCorrelation->GetXaxis()->SetBinLabel(5, "ntrackletsTRD");
749 fhCutCorrelation->GetXaxis()->SetBinLabel(6, "ntrackletsTRDpid");
750 fhCutCorrelation->GetXaxis()->SetBinLabel(7, "chi2PerClusterTPC");
751 fhCutCorrelation->GetXaxis()->SetBinLabel(8, "chi2PerClusterITS");
752 fhCutCorrelation->GetXaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
753 fhCutCorrelation->GetXaxis()->SetBinLabel(10, "covElement11");
754 fhCutCorrelation->GetXaxis()->SetBinLabel(11, "covElement22");
755 fhCutCorrelation->GetXaxis()->SetBinLabel(12, "covElement33");
756 fhCutCorrelation->GetXaxis()->SetBinLabel(13, "covElement44");
757 fhCutCorrelation->GetXaxis()->SetBinLabel(14, "covElement55");
758 fhCutStatistics->GetXaxis()->SetBinLabel(15, "status");
760 fhCutCorrelation->GetYaxis()->SetBinLabel(1, "nClustersTPC");
761 fhCutCorrelation->GetYaxis()->SetBinLabel(2, "nClustersITS");
762 fhCutCorrelation->GetYaxis()->SetBinLabel(3, "nClustersTRD");
763 fhCutCorrelation->GetYaxis()->SetBinLabel(4, "fractionClustersTPC");
764 fhCutCorrelation->GetYaxis()->SetBinLabel(5, "ntrackletsTRD");
765 fhCutCorrelation->GetYaxis()->SetBinLabel(6, "ntrackletsTRDpid");
766 fhCutCorrelation->GetYaxis()->SetBinLabel(7, "chi2PerClusterTPC");
767 fhCutCorrelation->GetYaxis()->SetBinLabel(8, "chi2PerClusterITS");
768 fhCutCorrelation->GetYaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
769 fhCutCorrelation->GetYaxis()->SetBinLabel(10, "covElement11");
770 fhCutCorrelation->GetYaxis()->SetBinLabel(11, "covElement22");
771 fhCutCorrelation->GetYaxis()->SetBinLabel(12, "covElement33");
772 fhCutCorrelation->GetYaxis()->SetBinLabel(13, "covElement44");
773 fhCutCorrelation->GetYaxis()->SetBinLabel(14, "covElement55");
774 fhCutCorrelation->GetYaxis()->SetBinLabel(15, "status");
777 // book QA histograms
779 for (Int_t i=0; i<kNStepQA; i++) {
780 if (i==0) sprintf(str," ");
781 else sprintf(str,"_cut");
783 fhQA[kCutClusterTPC][i] = new TH1F(Form("%s_nClustersTPC%s",GetName(),str) ,"",fhNBinsClusterTPC-1,fhBinLimClusterTPC);
784 fhQA[kCutClusterITS][i] = new TH1F(Form("%s_nClustersITS%s",GetName(),str) ,"",fhNBinsClusterITS-1,fhBinLimClusterITS);
785 fhQA[kCutClusterTRD][i] = new TH1F(Form("%s_nClustersTRD%s",GetName(),str) ,"",fhNBinsClusterTRD-1,fhBinLimClusterTRD);
786 fhQA[kCutMinFoundClusterTPC][i] = new TH1F(Form("%s_fractionClustersTPC%s",GetName(),str) ,"",fhNBinsFoundClusterTPC-1,fhBinLimFoundClusterTPC);
787 fhQA[kCutTrackletTRD][i] = new TH1F(Form("%s_ntrackletsTRD%s",GetName(),str) ,"",fhNBinsTrackletTRD-1,fhBinLimTrackletTRD);
788 fhQA[kCutTrackletTRDpid][i] = new TH1F(Form("%s_ntrackletsTRDpid%s",GetName(),str) ,"",fhNBinsTrackletTRDpid-1,fhBinLimTrackletTRDpid);
789 fhQA[kCutChi2TPC][i] = new TH1F(Form("%s_chi2PerClusterTPC%s",GetName(),str),"",fhNBinsChi2TPC-1,fhBinLimChi2TPC);
790 fhQA[kCutChi2ITS][i] = new TH1F(Form("%s_chi2PerClusterITS%s",GetName(),str),"",fhNBinsChi2ITS-1,fhBinLimChi2ITS);
791 fhQA[kCutChi2TRD][i] = new TH1F(Form("%s_chi2PerTrackletTRD%s",GetName(),str),"",fhNBinsChi2TRD-1,fhBinLimChi2TRD);
792 fhQA[kCutCovElement11][i] = new TH1F(Form("%s_covMatrixDiagonal11%s",GetName(),str),"",fhNBinsCovariance11-1,fhBinLimCovariance11);
793 fhQA[kCutCovElement22][i] = new TH1F(Form("%s_covMatrixDiagonal22%s",GetName(),str),"",fhNBinsCovariance22-1,fhBinLimCovariance22);
794 fhQA[kCutCovElement33][i] = new TH1F(Form("%s_covMatrixDiagonal33%s",GetName(),str),"",fhNBinsCovariance33-1,fhBinLimCovariance33);
795 fhQA[kCutCovElement44][i] = new TH1F(Form("%s_covMatrixDiagonal44%s",GetName(),str),"",fhNBinsCovariance44-1,fhBinLimCovariance44);
796 fhQA[kCutCovElement55][i] = new TH1F(Form("%s_covMatrixDiagonal55%s",GetName(),str),"",fhNBinsCovariance55-1,fhBinLimCovariance55);
798 fhQA[kCutClusterTPC][i] ->SetXTitle("n TPC clusters");
799 fhQA[kCutClusterITS][i] ->SetXTitle("n ITS clusters");
800 fhQA[kCutClusterTRD][i] ->SetXTitle("n TRD clusters");
801 fhQA[kCutMinFoundClusterTPC][i]->SetXTitle("fraction TPC clusters");
802 fhQA[kCutTrackletTRD][i] ->SetXTitle("n tracklets TRD");
803 fhQA[kCutTrackletTRDpid][i]->SetXTitle("n tracklets TRD pid");
804 fhQA[kCutChi2TPC][i] ->SetXTitle("#chi^{2} per TPC cluster");
805 fhQA[kCutChi2ITS][i] ->SetXTitle("#chi^{2} per ITS cluster");
806 fhQA[kCutChi2TRD][i] ->SetXTitle("#chi^{2} per TRD tracklet");
807 fhQA[kCutCovElement11][i] ->SetXTitle("cov 11 : #sigma_{y}^{2} (cm^{2})");
808 fhQA[kCutCovElement22][i] ->SetXTitle("cov 22 : #sigma_{z}^{2} (cm^{2})");
809 fhQA[kCutCovElement33][i] ->SetXTitle("cov 33 : #sigma_{sin(#phi)}^{2}");
810 fhQA[kCutCovElement44][i] ->SetXTitle("cov 44 : #sigma_{tan(#theta_{dip})}^{2}");
811 fhQA[kCutCovElement55][i] ->SetXTitle("cov 55 : #sigma_{1/p_{T}}^{2} ((c/GeV)^{2})");
814 for(Int_t i=0; i<kNHist; i++) fhQA[i][1]->SetLineColor(color);
816 //__________________________________________________________________________________
817 void AliCFTrackQualityCuts::FillHistograms(TObject* obj, Bool_t b)
820 // fill the QA histograms
824 if (!obj->InheritsFrom("AliVParticle")) {
825 AliError("object must derived from AliVParticle !");
829 Bool_t isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ;
830 Bool_t isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ;
832 AliESDtrack * esdTrack = 0x0 ;
833 AliAODTrack * aodTrack = 0x0 ;
834 if (isESDTrack) esdTrack = dynamic_cast<AliESDtrack*>(obj);
835 if (isAODTrack) aodTrack = dynamic_cast<AliAODTrack*>(obj);
837 // b = 0: fill histograms before cuts
838 // b = 1: fill histograms after cuts
840 Int_t nClustersTPC = 0;
841 Int_t nClustersITS = 0 ;
842 Int_t nClustersTRD = 0 ;
843 Int_t nTrackletsTRD = 0 ;
844 Float_t chi2PerClusterTPC = 0 ;
845 Float_t chi2PerClusterITS = 0 ;
846 Float_t chi2PerTrackletTRD = 0 ;
847 Double_t extCov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
848 Float_t fractionFoundClustersTPC = 0;
851 nClustersTPC = esdTrack->GetTPCclusters(0x0);
852 nClustersITS = esdTrack->GetITSclusters(0x0);
853 nClustersTRD = esdTrack->GetTRDncls();
854 nTrackletsTRD = esdTrack->GetTRDntracklets();
855 if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC);
856 if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS);
857 if (nTrackletsTRD != 0) chi2PerTrackletTRD = esdTrack->GetTRDchi2() / Float_t(nTrackletsTRD);
858 esdTrack->GetExternalCovariance(extCov);
859 if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = float(nClustersTPC) / float(esdTrack->GetTPCNclsF());
861 fhQA[kCutClusterTPC][b]->Fill((float)nClustersTPC);
862 fhQA[kCutChi2TPC][b]->Fill(chi2PerClusterTPC);
863 fhQA[kCutClusterITS][b]->Fill((float)nClustersITS);
864 fhQA[kCutChi2ITS][b]->Fill(chi2PerClusterITS);
865 fhQA[kCutClusterTRD][b]->Fill((float)nClustersTRD);
866 fhQA[kCutChi2TRD][b]->Fill(chi2PerTrackletTRD);
867 if (b==0 || (b==1 && nClustersTPC>0)) fhQA[kCutMinFoundClusterTPC][b]->Fill((float)fractionFoundClustersTPC);
868 fhQA[kCutTrackletTRD][b]->Fill((float)nTrackletsTRD);
869 fhQA[kCutTrackletTRDpid][b]->Fill((float)esdTrack->GetTRDntrackletsPID());
870 fhQA[kCutCovElement11][b]->Fill(extCov[0]);
871 fhQA[kCutCovElement22][b]->Fill(extCov[2]);
872 fhQA[kCutCovElement33][b]->Fill(extCov[5]);
873 fhQA[kCutCovElement44][b]->Fill(extCov[9]);
874 fhQA[kCutCovElement55][b]->Fill(extCov[14]);
876 // fill cut statistics and cut correlation histograms with information from the bitmap
879 // Get the bitmap of the single cuts
881 SelectionBitMap(obj);
883 // Number of single cuts in this class
884 UInt_t ncuts = fBitmap->GetNbits();
885 for(UInt_t bit=0; bit<ncuts;bit++) {
886 if (!fBitmap->TestBitNumber(bit)) {
887 fhCutStatistics->Fill(bit+1);
888 for (UInt_t bit2=bit; bit2<ncuts;bit2++) {
889 if (!fBitmap->TestBitNumber(bit2))
890 fhCutCorrelation->Fill(bit+1,bit2+1);
895 //__________________________________________________________________________________
896 void AliCFTrackQualityCuts::SaveHistograms(const Char_t* dir) {
898 // saves the histograms in a directory (dir)
905 gDirectory->mkdir(dir);
908 gDirectory->mkdir("before_cuts");
909 gDirectory->mkdir("after_cuts");
911 fhCutStatistics->Write();
912 fhCutCorrelation->Write();
914 for (Int_t j=0; j<kNStepQA; j++) {
916 gDirectory->cd("before_cuts");
918 gDirectory->cd("after_cuts");
920 for(Int_t i=0; i<kNHist; i++) fhQA[i][j]->Write();
922 gDirectory->cd("../");
924 gDirectory->cd("../");
926 //__________________________________________________________________________________
927 void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale)
930 // draws some histograms
935 Float_t right = 0.03;
936 Float_t left = 0.175;
938 Float_t bottom = 0.175;
940 TCanvas* canvas1 = new TCanvas("Track_QA_Quality_1", "Track QA Quality 1", 800, 500);
941 canvas1->Divide(2, 1);
944 fhCutStatistics->SetStats(kFALSE);
945 fhCutStatistics->LabelsOption("v");
946 gPad->SetLeftMargin(left);
947 gPad->SetBottomMargin(0.25);
948 gPad->SetRightMargin(right);
949 gPad->SetTopMargin(0.1);
950 fhCutStatistics->Draw();
953 fhCutCorrelation->SetStats(kFALSE);
954 fhCutCorrelation->LabelsOption("v");
955 gPad->SetLeftMargin(0.30);
956 gPad->SetRightMargin(bottom);
957 gPad->SetTopMargin(0.1);
958 gPad->SetBottomMargin(0.25);
959 fhCutCorrelation->Draw("COLZ");
961 canvas1->SaveAs(Form("%s.eps", canvas1->GetName()));
962 canvas1->SaveAs(Form("%s.ps", canvas1->GetName()));
966 TCanvas* canvas2 = new TCanvas("Track_QA_Quality_2", "Track QA Quality 2", 1200, 800);
967 canvas2->Divide(2, 2);
970 gPad->SetRightMargin(right);
971 gPad->SetLeftMargin(left);
972 gPad->SetTopMargin(top);
973 gPad->SetBottomMargin(bottom);
974 fhQA[kCutClusterTPC][0]->SetStats(kFALSE);
975 fhQA[kCutClusterTPC][0]->Draw();
976 fhQA[kCutClusterTPC][1]->Draw("same");
979 gPad->SetRightMargin(right);
980 gPad->SetLeftMargin(left);
981 gPad->SetTopMargin(top);
982 gPad->SetBottomMargin(bottom);
983 fhQA[kCutChi2TPC][0]->SetStats(kFALSE);
984 fhQA[kCutChi2TPC][0]->Draw();
985 fhQA[kCutChi2TPC][1]->Draw("same");
988 gPad->SetRightMargin(right);
989 gPad->SetLeftMargin(left);
990 gPad->SetTopMargin(top);
991 gPad->SetBottomMargin(bottom);
992 fhQA[kCutClusterITS][0]->SetStats(kFALSE);
993 fhQA[kCutClusterITS][0]->Draw();
994 fhQA[kCutClusterITS][1]->Draw("same");
997 gPad->SetRightMargin(right);
998 gPad->SetLeftMargin(left);
999 gPad->SetTopMargin(top);
1000 gPad->SetBottomMargin(bottom);
1001 fhQA[kCutChi2ITS][0]->SetStats(kFALSE);
1002 fhQA[kCutChi2ITS][0]->Draw();
1003 fhQA[kCutChi2ITS][1]->Draw("same");
1005 canvas2->SaveAs(Form("%s.eps", canvas2->GetName()));
1006 canvas2->SaveAs(Form("%s.ps", canvas2->GetName()));
1010 TCanvas* canvas3 = new TCanvas("Track_QA_Quality_3", "Track QA Quality 3", 1200, 800);
1011 canvas3->Divide(3, 2);
1014 if(drawLogScale) gPad->SetLogy();
1015 gPad->SetRightMargin(right);
1016 gPad->SetLeftMargin(left);
1017 gPad->SetTopMargin(top);
1018 gPad->SetBottomMargin(bottom);
1019 fhQA[kCutCovElement11][0]->SetStats(kFALSE);
1020 fhQA[kCutCovElement11][0]->Draw();
1021 fhQA[kCutCovElement11][1]->Draw("same");
1024 if(drawLogScale) gPad->SetLogy();
1025 gPad->SetRightMargin(right);
1026 gPad->SetLeftMargin(left);
1027 gPad->SetTopMargin(top);
1028 gPad->SetBottomMargin(bottom);
1029 fhQA[kCutCovElement22][0]->SetStats(kFALSE);
1030 fhQA[kCutCovElement22][0]->Draw();
1031 fhQA[kCutCovElement22][1]->Draw("same");
1034 if(drawLogScale) gPad->SetLogy();
1035 gPad->SetRightMargin(right);
1036 gPad->SetLeftMargin(left);
1037 gPad->SetTopMargin(top);
1038 gPad->SetBottomMargin(bottom);
1039 fhQA[kCutCovElement33][0]->SetStats(kFALSE);
1040 fhQA[kCutCovElement33][0]->Draw();
1041 fhQA[kCutCovElement33][1]->Draw("same");
1044 if(drawLogScale) gPad->SetLogy();
1045 gPad->SetRightMargin(right);
1046 gPad->SetLeftMargin(left);
1047 gPad->SetTopMargin(top);
1048 gPad->SetBottomMargin(bottom);
1049 fhQA[kCutCovElement44][0]->SetStats(kFALSE);
1050 fhQA[kCutCovElement44][0]->Draw();
1051 fhQA[kCutCovElement44][1]->Draw("same");
1054 if(drawLogScale) gPad->SetLogy();
1055 gPad->SetRightMargin(right);
1056 gPad->SetLeftMargin(left);
1057 gPad->SetTopMargin(top);
1058 gPad->SetBottomMargin(bottom);
1059 fhQA[kCutCovElement55][0]->SetStats(kFALSE);
1060 fhQA[kCutCovElement55][0]->Draw();
1061 fhQA[kCutCovElement55][1]->Draw("same");
1063 canvas3->SaveAs(Form("%s.eps", canvas3->GetName()));
1064 canvas3->SaveAs(Form("%s.ps", canvas3->GetName()));
1066 //__________________________________________________________________________________
1067 void AliCFTrackQualityCuts::AddQAHistograms(TList *qaList) {
1069 // saves the histograms in a TList
1073 qaList->Add(fhCutStatistics);
1074 qaList->Add(fhCutCorrelation);
1076 for (Int_t j=0; j<kNStepQA; j++) {
1077 for(Int_t i=0; i<kNHist; i++)
1078 qaList->Add(fhQA[i][j]);