]> git.uio.no Git - u/mrichter/AliRoot.git/blame - CORRFW/AliCFTrackQualityCuts.cxx
fix coding convention errors
[u/mrichter/AliRoot.git] / CORRFW / AliCFTrackQualityCuts.cxx
CommitLineData
563113d0 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15
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
21// ESD and AOD data.
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:
563113d0 24// - number of clusters in the ITS
65e7777d 25// - number of clusters in the TPC
18274103 26// - number of clusters in the TRD
65e7777d 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
563113d0 30// - chi2 / cluster in the ITS
65e7777d 31// - chi2 / cluster in the TPC
32// - chi2 / tracklet in the TRD
c2c45ca4 33// - number of clusters in the TPC used for dEdx calculation
563113d0 34// - successful TPC refit
35// - successful ITS refit
36// - covariance matrix diagonal elements
37//
38// The cut values for these cuts are set with the corresponding set functions.
39// All cut classes provided by the correction framework are supposed to be
40// added in the Analysis Framwork's class AliAnalysisFilter and applied by
41// the filter via a loop.
42//
43// author: I. Kraus (Ingrid.Kraus@cern.ch)
44// idea taken form
45// AliESDtrackCuts writte by Jan Fiete Grosse-Oetringhaus and
46// AliRsnDaughterCut class written by A. Pulvirenti.
47
48
49#include <TCanvas.h>
50#include <TDirectory.h>
563113d0 51#include <TH2.h>
6cb5e116 52#include <TBits.h>
563113d0 53
54#include <AliESDtrack.h>
c2c45ca4 55#include <AliESDtrackCuts.h>
563113d0 56#include <AliLog.h>
57#include "AliCFTrackQualityCuts.h"
8edd0c2c 58#include "AliAODTrack.h"
563113d0 59
60ClassImp(AliCFTrackQualityCuts)
61
62//__________________________________________________________________________________
63AliCFTrackQualityCuts::AliCFTrackQualityCuts() :
64 AliCFCutBase(),
65 fMinNClusterTPC(0),
66 fMinNClusterITS(0),
18274103 67 fMinNClusterTRD(0),
65e7777d 68 fMinFoundClusterTPC(0),
69 fMinNTrackletTRD(0),
70 fMinNTrackletTRDpid(0),
563113d0 71 fMaxChi2PerClusterTPC(0),
72 fMaxChi2PerClusterITS(0),
65e7777d 73 fMaxChi2PerTrackletTRD(0),
c2c45ca4 74 fMinNdEdxClusterTPC(0),
563113d0 75 fCovariance11Max(0),
76 fCovariance22Max(0),
77 fCovariance33Max(0),
78 fCovariance44Max(0),
79 fCovariance55Max(0),
8edd0c2c 80 fStatus(0),
563113d0 81 fhCutStatistics(0),
82 fhCutCorrelation(0),
83 fBitmap(0x0),
c2c45ca4 84 fTrackCuts(0x0),
563113d0 85 fhNBinsClusterTPC(0),
86 fhNBinsClusterITS(0),
18274103 87 fhNBinsClusterTRD(0),
65e7777d 88 fhNBinsFoundClusterTPC(0),
89 fhNBinsTrackletTRD(0),
90 fhNBinsTrackletTRDpid(0),
563113d0 91 fhNBinsChi2TPC(0),
92 fhNBinsChi2ITS(0),
18274103 93 fhNBinsChi2TRD(0),
c2c45ca4 94 fhNBinsdEdxClusterTPC(0),
563113d0 95 fhNBinsCovariance11(0),
96 fhNBinsCovariance22(0),
97 fhNBinsCovariance33(0),
98 fhNBinsCovariance44(0),
99 fhNBinsCovariance55(0),
100 fhBinLimClusterTPC(0x0),
101 fhBinLimClusterITS(0x0),
18274103 102 fhBinLimClusterTRD(0x0),
65e7777d 103 fhBinLimFoundClusterTPC(0x0),
104 fhBinLimTrackletTRD(0x0),
105 fhBinLimTrackletTRDpid(0x0),
563113d0 106 fhBinLimChi2TPC(0x0),
107 fhBinLimChi2ITS(0x0),
18274103 108 fhBinLimChi2TRD(0x0),
c2c45ca4 109 fhBinLimdEdxClusterTPC(0x0),
563113d0 110 fhBinLimCovariance11(0x0),
111 fhBinLimCovariance22(0x0),
112 fhBinLimCovariance33(0x0),
113 fhBinLimCovariance44(0x0),
114 fhBinLimCovariance55(0x0)
6cb5e116 115{
563113d0 116 //
117 // Default constructor
118 //
563113d0 119 Initialise();
120}
121//__________________________________________________________________________________
122AliCFTrackQualityCuts::AliCFTrackQualityCuts(Char_t* name, Char_t* title) :
123 AliCFCutBase(name,title),
124 fMinNClusterTPC(0),
125 fMinNClusterITS(0),
18274103 126 fMinNClusterTRD(0),
65e7777d 127 fMinFoundClusterTPC(0),
128 fMinNTrackletTRD(0),
129 fMinNTrackletTRDpid(0),
563113d0 130 fMaxChi2PerClusterTPC(0),
131 fMaxChi2PerClusterITS(0),
65e7777d 132 fMaxChi2PerTrackletTRD(0),
c2c45ca4 133 fMinNdEdxClusterTPC(0),
563113d0 134 fCovariance11Max(0),
135 fCovariance22Max(0),
136 fCovariance33Max(0),
137 fCovariance44Max(0),
138 fCovariance55Max(0),
8edd0c2c 139 fStatus(0),
563113d0 140 fhCutStatistics(0),
141 fhCutCorrelation(0),
142 fBitmap(0x0),
c2c45ca4 143 fTrackCuts(0x0),
563113d0 144 fhNBinsClusterTPC(0),
145 fhNBinsClusterITS(0),
18274103 146 fhNBinsClusterTRD(0),
65e7777d 147 fhNBinsFoundClusterTPC(0),
148 fhNBinsTrackletTRD(0),
149 fhNBinsTrackletTRDpid(0),
563113d0 150 fhNBinsChi2TPC(0),
151 fhNBinsChi2ITS(0),
18274103 152 fhNBinsChi2TRD(0),
c2c45ca4 153 fhNBinsdEdxClusterTPC(0),
563113d0 154 fhNBinsCovariance11(0),
155 fhNBinsCovariance22(0),
156 fhNBinsCovariance33(0),
157 fhNBinsCovariance44(0),
158 fhNBinsCovariance55(0),
159 fhBinLimClusterTPC(0x0),
160 fhBinLimClusterITS(0x0),
18274103 161 fhBinLimClusterTRD(0x0),
65e7777d 162 fhBinLimFoundClusterTPC(0x0),
163 fhBinLimTrackletTRD(0x0),
164 fhBinLimTrackletTRDpid(0x0),
563113d0 165 fhBinLimChi2TPC(0x0),
166 fhBinLimChi2ITS(0x0),
18274103 167 fhBinLimChi2TRD(0x0),
c2c45ca4 168 fhBinLimdEdxClusterTPC(0x0),
563113d0 169 fhBinLimCovariance11(0x0),
170 fhBinLimCovariance22(0x0),
171 fhBinLimCovariance33(0x0),
172 fhBinLimCovariance44(0x0),
173 fhBinLimCovariance55(0x0)
563113d0 174{
175 //
176 // Constructor
177 //
563113d0 178 Initialise();
179}
180//__________________________________________________________________________________
181AliCFTrackQualityCuts::AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) :
182 AliCFCutBase(c),
183 fMinNClusterTPC(c.fMinNClusterTPC),
184 fMinNClusterITS(c.fMinNClusterITS),
18274103 185 fMinNClusterTRD(c.fMinNClusterTRD),
65e7777d 186 fMinFoundClusterTPC(c.fMinFoundClusterTPC),
187 fMinNTrackletTRD(c.fMinNTrackletTRD),
188 fMinNTrackletTRDpid(c.fMinNTrackletTRDpid),
563113d0 189 fMaxChi2PerClusterTPC(c.fMaxChi2PerClusterTPC),
190 fMaxChi2PerClusterITS(c.fMaxChi2PerClusterITS),
65e7777d 191 fMaxChi2PerTrackletTRD(c.fMaxChi2PerTrackletTRD),
c2c45ca4 192 fMinNdEdxClusterTPC(c.fMinNdEdxClusterTPC),
563113d0 193 fCovariance11Max(c.fCovariance11Max),
194 fCovariance22Max(c.fCovariance22Max),
195 fCovariance33Max(c.fCovariance33Max),
196 fCovariance44Max(c.fCovariance44Max),
197 fCovariance55Max(c.fCovariance55Max),
8edd0c2c 198 fStatus(c.fStatus),
563113d0 199 fhCutStatistics(c.fhCutStatistics),
200 fhCutCorrelation(c.fhCutCorrelation),
201 fBitmap(c.fBitmap),
c2c45ca4 202 fTrackCuts(c.fTrackCuts),
563113d0 203 fhNBinsClusterTPC(c.fhNBinsClusterTPC),
204 fhNBinsClusterITS(c.fhNBinsClusterITS),
18274103 205 fhNBinsClusterTRD(c.fhNBinsClusterTRD),
65e7777d 206 fhNBinsFoundClusterTPC(c.fhNBinsFoundClusterTPC),
207 fhNBinsTrackletTRD(c.fhNBinsTrackletTRD),
208 fhNBinsTrackletTRDpid(c.fhNBinsTrackletTRDpid),
563113d0 209 fhNBinsChi2TPC(c.fhNBinsChi2TPC),
210 fhNBinsChi2ITS(c.fhNBinsChi2ITS),
18274103 211 fhNBinsChi2TRD(c.fhNBinsChi2TRD),
c2c45ca4 212 fhNBinsdEdxClusterTPC(c.fhNBinsdEdxClusterTPC),
563113d0 213 fhNBinsCovariance11(c.fhNBinsCovariance11),
214 fhNBinsCovariance22(c.fhNBinsCovariance22),
215 fhNBinsCovariance33(c.fhNBinsCovariance33),
216 fhNBinsCovariance44(c.fhNBinsCovariance44),
217 fhNBinsCovariance55(c.fhNBinsCovariance55),
218 fhBinLimClusterTPC(c.fhBinLimClusterTPC),
219 fhBinLimClusterITS(c.fhBinLimClusterITS),
18274103 220 fhBinLimClusterTRD(c.fhBinLimClusterTRD),
65e7777d 221 fhBinLimFoundClusterTPC(c.fhBinLimFoundClusterTPC),
222 fhBinLimTrackletTRD(c.fhBinLimTrackletTRD),
223 fhBinLimTrackletTRDpid(c.fhBinLimTrackletTRDpid),
563113d0 224 fhBinLimChi2TPC(c.fhBinLimChi2TPC),
225 fhBinLimChi2ITS(c.fhBinLimChi2ITS),
18274103 226 fhBinLimChi2TRD(c.fhBinLimChi2TRD),
c2c45ca4 227 fhBinLimdEdxClusterTPC(c.fhBinLimdEdxClusterTPC),
563113d0 228 fhBinLimCovariance11(c.fhBinLimCovariance11),
229 fhBinLimCovariance22(c.fhBinLimCovariance22),
230 fhBinLimCovariance33(c.fhBinLimCovariance33),
231 fhBinLimCovariance44(c.fhBinLimCovariance44),
232 fhBinLimCovariance55(c.fhBinLimCovariance55)
233{
234 //
235 // copy constructor
236 //
237 ((AliCFTrackQualityCuts &) c).Copy(*this);
238}
239//__________________________________________________________________________________
240AliCFTrackQualityCuts& AliCFTrackQualityCuts::operator=(const AliCFTrackQualityCuts& c)
241{
242 //
243 // Assignment operator
244 //
245 if (this != &c) {
246 AliCFCutBase::operator=(c) ;
247 fMinNClusterTPC = c.fMinNClusterTPC ;
248 fMinNClusterITS = c.fMinNClusterITS ;
18274103 249 fMinNClusterTRD = c.fMinNClusterTRD ;
65e7777d 250 fMinFoundClusterTPC = c.fMinFoundClusterTPC ;
251 fMinNTrackletTRD = c.fMinNTrackletTRD ;
252 fMinNTrackletTRDpid = c.fMinNTrackletTRDpid ;
563113d0 253 fMaxChi2PerClusterTPC = c.fMaxChi2PerClusterTPC ;
254 fMaxChi2PerClusterITS = c.fMaxChi2PerClusterITS ;
65e7777d 255 fMaxChi2PerTrackletTRD = c.fMaxChi2PerTrackletTRD ;
c2c45ca4 256 fMinNdEdxClusterTPC = c.fMinNdEdxClusterTPC;
563113d0 257 fCovariance11Max = c.fCovariance11Max ;
258 fCovariance22Max = c.fCovariance22Max ;
259 fCovariance33Max = c.fCovariance33Max ;
260 fCovariance44Max = c.fCovariance44Max ;
261 fCovariance55Max = c.fCovariance55Max ;
8edd0c2c 262 fStatus = c.fStatus ;
563113d0 263 fhCutStatistics = c.fhCutStatistics ;
264 fhCutCorrelation = c.fhCutCorrelation ;
265 fBitmap = c.fBitmap ;
c2c45ca4 266 fTrackCuts = c.fTrackCuts ;
563113d0 267 fhNBinsClusterTPC = c.fhNBinsClusterTPC ;
268 fhNBinsClusterITS = c.fhNBinsClusterITS ;
18274103 269 fhNBinsClusterTRD = c.fhNBinsClusterTRD ;
65e7777d 270 fhNBinsFoundClusterTPC = c.fhNBinsFoundClusterTPC ;
271 fhNBinsTrackletTRD = c.fhNBinsTrackletTRD ;
272 fhNBinsTrackletTRDpid = c.fhNBinsTrackletTRDpid ;
563113d0 273 fhNBinsChi2TPC = c.fhNBinsChi2TPC ;
274 fhNBinsChi2ITS = c.fhNBinsChi2ITS ;
18274103 275 fhNBinsChi2TRD = c.fhNBinsChi2TRD ;
c2c45ca4 276 fhNBinsdEdxClusterTPC = c.fhNBinsdEdxClusterTPC ;
563113d0 277 fhNBinsCovariance11 = c.fhNBinsCovariance11 ;
278 fhNBinsCovariance22 = c.fhNBinsCovariance22 ;
279 fhNBinsCovariance33 = c.fhNBinsCovariance33 ;
280 fhNBinsCovariance44 = c.fhNBinsCovariance44 ;
281 fhNBinsCovariance55 = c.fhNBinsCovariance55 ;
282 fhBinLimClusterTPC = c.fhBinLimClusterTPC ;
283 fhBinLimClusterITS = c.fhBinLimClusterITS ;
18274103 284 fhBinLimClusterTRD = c.fhBinLimClusterTRD ;
65e7777d 285 fhBinLimFoundClusterTPC = c.fhBinLimFoundClusterTPC ;
286 fhBinLimTrackletTRD = c.fhBinLimTrackletTRD ;
287 fhBinLimTrackletTRDpid = c.fhBinLimTrackletTRDpid ;
563113d0 288 fhBinLimChi2TPC = c.fhBinLimChi2TPC ;
289 fhBinLimChi2ITS = c.fhBinLimChi2ITS ;
18274103 290 fhBinLimChi2TRD = c.fhBinLimChi2TRD ;
c2c45ca4 291 fhBinLimdEdxClusterTPC = c.fhBinLimdEdxClusterTPC ;
563113d0 292 fhBinLimCovariance11 = c.fhBinLimCovariance11 ;
293 fhBinLimCovariance22 = c.fhBinLimCovariance22 ;
294 fhBinLimCovariance33 = c.fhBinLimCovariance33 ;
295 fhBinLimCovariance44 = c.fhBinLimCovariance44 ;
296 fhBinLimCovariance55 = c.fhBinLimCovariance55 ;
6cb5e116 297
563113d0 298 for (Int_t i=0; i<c.kNHist; i++){
299 for (Int_t j=0; j<c.kNStepQA; j++){
300 if(c.fhQA[i][j]) fhQA[i][j] = (TH1F*)c.fhQA[i][j]->Clone();
301 }
302 }
563113d0 303 ((AliCFTrackQualityCuts &) c).Copy(*this);
6cb5e116 304 }
563113d0 305 return *this;
306}
307//__________________________________________________________________________________
308AliCFTrackQualityCuts::~AliCFTrackQualityCuts()
309{
310 //
311 // destructor
312 //
8edd0c2c 313 if (fhCutStatistics) delete fhCutStatistics;
314 if (fhCutCorrelation) delete fhCutCorrelation;
563113d0 315
316 for (Int_t i=0; i<kNHist; i++){
317 for (Int_t j=0; j<kNStepQA; j++){
318 if(fhQA[i][j]) delete fhQA[i][j];
319 }
320 }
6cb5e116 321 if(fBitmap) delete fBitmap;
c2c45ca4 322 if(fTrackCuts) delete fTrackCuts;
563113d0 323 if(fhBinLimClusterTPC) delete fhBinLimClusterTPC;
324 if(fhBinLimClusterITS) delete fhBinLimClusterITS;
18274103 325 if(fhBinLimClusterTRD) delete fhBinLimClusterTRD;
65e7777d 326 if(fhBinLimFoundClusterTPC) delete fhBinLimFoundClusterTPC;
327 if(fhBinLimTrackletTRD) delete fhBinLimTrackletTRD;
328 if(fhBinLimTrackletTRDpid) delete fhBinLimTrackletTRDpid;
563113d0 329 if(fhBinLimChi2TPC) delete fhBinLimChi2TPC;
330 if(fhBinLimChi2ITS) delete fhBinLimChi2ITS;
18274103 331 if(fhBinLimChi2TRD) delete fhBinLimChi2TRD;
c2c45ca4 332 if(fhBinLimdEdxClusterTPC) delete fhBinLimdEdxClusterTPC;
563113d0 333 if(fhBinLimCovariance11) delete fhBinLimCovariance11;
334 if(fhBinLimCovariance22) delete fhBinLimCovariance22;
335 if(fhBinLimCovariance33) delete fhBinLimCovariance33;
336 if(fhBinLimCovariance44) delete fhBinLimCovariance44;
337 if(fhBinLimCovariance55) delete fhBinLimCovariance55;
563113d0 338}
339//__________________________________________________________________________________
340void AliCFTrackQualityCuts::Initialise()
341{
342 //
343 // sets everything to zero
344 //
345 fMinNClusterTPC = 0;
346 fMinNClusterITS = 0;
18274103 347 fMinNClusterTRD = 0;
65e7777d 348 fMinFoundClusterTPC = 0;
349 fMinNTrackletTRD = 0;
350 fMinNTrackletTRDpid = 0;
563113d0 351 fMaxChi2PerClusterTPC = 0;
352 fMaxChi2PerClusterITS = 0;
65e7777d 353 fMaxChi2PerTrackletTRD = 0;
c2c45ca4 354 fMinNdEdxClusterTPC = 0;
563113d0 355 fCovariance11Max = 0;
356 fCovariance22Max = 0;
357 fCovariance33Max = 0;
358 fCovariance44Max = 0;
359 fCovariance55Max = 0;
8edd0c2c 360 fStatus = 0;
563113d0 361
362 SetMinNClusterTPC();
363 SetMinNClusterITS();
18274103 364 SetMinNClusterTRD();
65e7777d 365 SetMinFoundClusterTPC();
366 SetMinNTrackletTRD();
367 SetMinNTrackletTRDpid();
563113d0 368 SetMaxChi2PerClusterTPC();
369 SetMaxChi2PerClusterITS();
65e7777d 370 SetMaxChi2PerTrackletTRD();
c2c45ca4 371 SetMinNdEdxClusterTPC();
563113d0 372 SetMaxCovDiagonalElements();
8edd0c2c 373 SetStatus();
563113d0 374
375 for (Int_t i=0; i<kNHist; i++){
6cb5e116 376 for (Int_t j=0; j<kNStepQA; j++)
563113d0 377 fhQA[i][j] = 0x0;
563113d0 378 }
379 fhCutStatistics = 0;
380 fhCutCorrelation = 0;
6cb5e116 381 fBitmap=new TBits(0);
c2c45ca4 382 fTrackCuts=new AliESDtrackCuts("aliESDtrackCuts","aliESDtrackCuts");
563113d0 383
6cb5e116 384 //set default bining for QA histograms
563113d0 385 SetHistogramBins(kCutClusterTPC,165,-0.5,164.5);
386 SetHistogramBins(kCutClusterITS,8,-0.5,7.5);
65e7777d 387 SetHistogramBins(kCutClusterTRD,120,-0.5,119.5);
388 SetHistogramBins(kCutMinFoundClusterTPC,110,-0.05,1.05);
389 SetHistogramBins(kCutTrackletTRD,7,-0.5,6.5);
390 SetHistogramBins(kCutTrackletTRDpid,7,-0.5,6.5);
6cb5e116 391 SetHistogramBins(kCutChi2TPC,500,0.,10.);
392 SetHistogramBins(kCutChi2ITS,500,0.,10.);
18274103 393 SetHistogramBins(kCutChi2TRD,500,0.,10.);
c2c45ca4 394 SetHistogramBins(kCutdEdxClusterTPC,165,-0.5,164.5);
6cb5e116 395 SetHistogramBins(kCutCovElement11,200,0.,20.);
396 SetHistogramBins(kCutCovElement22,200,0.,20.);
397 SetHistogramBins(kCutCovElement33,100,0.,1.);
398 SetHistogramBins(kCutCovElement44,100,0.,5.);
399 SetHistogramBins(kCutCovElement55,100,0.,5.);
563113d0 400}
401//__________________________________________________________________________________
402void AliCFTrackQualityCuts::Copy(TObject &c) const
403{
404 //
405 // Copy function
406 //
407 AliCFTrackQualityCuts& target = (AliCFTrackQualityCuts &) c;
408
409 target.Initialise();
410
411 if (fhCutStatistics) target.fhCutStatistics = (TH1F*) fhCutStatistics->Clone();
412 if (fhCutCorrelation) target.fhCutCorrelation = (TH2F*) fhCutCorrelation->Clone();
413
414 for (Int_t i=0; i<kNHist; i++){
415 for (Int_t j=0; j<kNStepQA; j++){
416 if(fhQA[i][j]) target.fhQA[i][j] = (TH1F*)fhQA[i][j]->Clone();
417 }
418 }
563113d0 419 TNamed::Copy(c);
420}
421//__________________________________________________________________________________
107a3100 422void AliCFTrackQualityCuts::SelectionBitMap(TObject* obj)
563113d0 423{
424 //
425 // test if the track passes the single cuts
426 // and store the information in a bitmap
427 //
428
429 // bitmap stores the decision of each single cut
430 for(Int_t i=0; i<kNCuts; i++)fBitmap->SetBitNumber(i,kFALSE);
431
8edd0c2c 432 if (!obj) return;
433 if (!obj->InheritsFrom("AliVParticle")) {
434 AliError("object must derived from AliVParticle !");
435 return;
436 }
563113d0 437
8edd0c2c 438 Bool_t isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ;
439 Bool_t isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ;
563113d0 440
8edd0c2c 441 AliESDtrack * esdTrack = 0x0 ;
442 AliAODTrack * aodTrack = 0x0 ;
443 if (isESDTrack) esdTrack = dynamic_cast<AliESDtrack*>(obj);
444 if (isAODTrack) aodTrack = dynamic_cast<AliAODTrack*>(obj);
563113d0 445
c2c45ca4 446 fTrackCuts->SetMinNClustersTPC(fMinNClusterTPC);
447 fTrackCuts->SetMinNClustersITS(fMinNClusterITS);
448 fTrackCuts->SetMaxChi2PerClusterTPC(fMaxChi2PerClusterTPC);
449 fTrackCuts->SetMaxChi2PerClusterITS(fMaxChi2PerClusterITS);
450 fTrackCuts->SetMaxCovDiagonalElements(fCovariance11Max,fCovariance22Max,fCovariance33Max,fCovariance44Max,fCovariance55Max);
c2c45ca4 451
452// // // remove following 5 lines when AliESDtrackCuts is updated
453 Int_t nClustersTPC = 0;
454 Int_t nClustersITS = 0 ;
455 Float_t chi2PerClusterTPC = 0 ;
456 Float_t chi2PerClusterITS = 0 ;
457 Double_t extCov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
458
8edd0c2c 459 // get cut quantities
c2c45ca4 460 Int_t nClustersTRD = 0;
461 Int_t nTrackletsTRD = 0;
462 Float_t chi2PerTrackletTRD = 0;
65e7777d 463 Float_t fractionFoundClustersTPC = 0;
464
8edd0c2c 465 if (isESDTrack) {
65e7777d 466 nClustersTRD = esdTrack->GetTRDncls();
467 nTrackletsTRD = esdTrack->GetTRDntracklets();
65e7777d 468 if (nTrackletsTRD != 0) chi2PerTrackletTRD = esdTrack->GetTRDchi2() / Float_t(nTrackletsTRD);
c2c45ca4 469// // // include following line when AliESDtrackCuts is updated
470// if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = fTrackCuts->GetCutVariable(2) / float(esdTrack->GetTPCNclsF());
471
472// // // remove following 6 lines when AliESDtrackCuts is updated
473 nClustersTPC = esdTrack->GetTPCclusters(0x0);
474 nClustersITS = esdTrack->GetITSclusters(0x0);
475 if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC);
476 if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS);
477 esdTrack->GetExternalCovariance(extCov);
478 if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = float(nClustersTPC) / float(esdTrack->GetTPCNclsF());
8edd0c2c 479 }
563113d0 480
563113d0 481 // fill the bitmap
482 Int_t iCutBit = 0;
483
c2c45ca4 484// // // include following lines when AliESDtrackCuts is updated
485// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(2)); iCutBit++; // nClustersTPC
486// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(3)); iCutBit++; // nClustersITS
487// // // remove following 6 lines when AliESDtrackCuts is updated
488 if (nClustersTPC >= fMinNClusterTPC)
489 fBitmap->SetBitNumber(iCutBit,kTRUE);
490 iCutBit++;
491 if (nClustersITS >= fMinNClusterITS)
492 fBitmap->SetBitNumber(iCutBit,kTRUE);
493 iCutBit++;
494
18274103 495 if (nClustersTRD >= fMinNClusterTRD)
496 fBitmap->SetBitNumber(iCutBit,kTRUE);
497 iCutBit++;
c2c45ca4 498// // // if ((fMinFoundClusterTPC <= 0) || (fTrackCuts->GetCutVariable(2) > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC)))
65e7777d 499 if ((fMinFoundClusterTPC <= 0) || (nClustersTPC > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC)))
500 fBitmap->SetBitNumber(iCutBit,kTRUE);
501 iCutBit++;
502 if (nTrackletsTRD >= fMinNTrackletTRD)
503 fBitmap->SetBitNumber(iCutBit,kTRUE);
504 iCutBit++;
505 if (esdTrack->GetTRDntrackletsPID() >= fMinNTrackletTRDpid)
506 fBitmap->SetBitNumber(iCutBit,kTRUE);
507 iCutBit++;
c2c45ca4 508
509// // // include following lines when AliESDtrackCuts is updated
510// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(4)); iCutBit++; // chi2PerClusterTPC
511// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(5)); iCutBit++; // chi2PerClusterITS
512// // // remove following 6 lines when AliESDtrackCuts is updated
513 if (chi2PerClusterTPC <= fMaxChi2PerClusterTPC)
514 fBitmap->SetBitNumber(iCutBit,kTRUE);
515 iCutBit++;
516 if (chi2PerClusterITS <= fMaxChi2PerClusterITS)
517 fBitmap->SetBitNumber(iCutBit,kTRUE);
518 iCutBit++;
519
65e7777d 520 if (chi2PerTrackletTRD <= fMaxChi2PerTrackletTRD)
18274103 521 fBitmap->SetBitNumber(iCutBit,kTRUE);
522 iCutBit++;
c2c45ca4 523 if (esdTrack->GetTPCsignalN() >= fMinNdEdxClusterTPC)
8edd0c2c 524 fBitmap->SetBitNumber(iCutBit,kTRUE);
563113d0 525 iCutBit++;
c2c45ca4 526
527// // // include following lines when AliESDtrackCuts is updated
528// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(6)); iCutBit++; // extCov[0]
529// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(7)); iCutBit++; // extCov[2]
530// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(8)); iCutBit++; // extCov[5]
531// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(9)); iCutBit++; // extCov[9]
532// fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(10)); iCutBit++; // extCov[14]
533// // // remove following lines when AliESDtrackCuts is updated
534 if (extCov[0] <= fCovariance11Max)
535 fBitmap->SetBitNumber(iCutBit,kTRUE);
536 iCutBit++;
537 if (extCov[2] <= fCovariance22Max)
538 fBitmap->SetBitNumber(iCutBit,kTRUE);
539 iCutBit++;
540 if (extCov[5] <= fCovariance33Max)
541 fBitmap->SetBitNumber(iCutBit,kTRUE);
542 iCutBit++;
543 if (extCov[9] <= fCovariance44Max)
544 fBitmap->SetBitNumber(iCutBit,kTRUE);
545 iCutBit++;
546 if (extCov[14] <= fCovariance55Max)
547 fBitmap->SetBitNumber(iCutBit,kTRUE);
548 iCutBit++;
549
550
8edd0c2c 551 if (isESDTrack) {
552 if ( (esdTrack->GetStatus() & fStatus) == fStatus ) fBitmap->SetBitNumber(iCutBit,kTRUE);
553 }
554 else {
555 if ( (aodTrack->GetStatus() & fStatus) == fStatus ) fBitmap->SetBitNumber(iCutBit,kTRUE);
556 }
563113d0 557
107a3100 558 return;
563113d0 559}
560//__________________________________________________________________________________
561Bool_t AliCFTrackQualityCuts::IsSelected(TObject* obj) {
562 //
563 // loops over decisions of single cuts and returns if the track is accepted
564 //
107a3100 565 SelectionBitMap(obj);
563113d0 566
107a3100 567 if (fIsQAOn) FillHistograms(obj,0);
563113d0 568 Bool_t isSelected = kTRUE;
569
107a3100 570 for (UInt_t icut=0; icut<fBitmap->GetNbits();icut++) {
571 if(!fBitmap->TestBitNumber(icut)) {
572 isSelected = kFALSE;
573 break;
574 }
575 }
576 if (!isSelected) return kFALSE ;
577 if (fIsQAOn) FillHistograms(obj,1);
578 return kTRUE;
563113d0 579}
580//__________________________________________________________________________________
581void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins)
582{
583 //
584 // variable bin size
585 //
586 if(!fIsQAOn) return;
587
8edd0c2c 588 if (index<0 || index>=kNHist) {
589 Error("SetHistogramBins","could not determine histogram from index %d",index);
590 return;
591 }
592
563113d0 593 switch(index){
594 case kCutClusterTPC:
db6722a5 595 fhNBinsClusterTPC=nbins+1;
563113d0 596 fhBinLimClusterTPC=new Double_t[nbins+1];
597 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTPC[i]=bins[i];
598 break;
6cb5e116 599
563113d0 600 case kCutClusterITS:
db6722a5 601 fhNBinsClusterITS=nbins+1;
563113d0 602 fhBinLimClusterITS=new Double_t[nbins+1];
603 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterITS[i]=bins[i];
604 break;
6cb5e116 605
18274103 606 case kCutClusterTRD:
607 fhNBinsClusterTRD=nbins+1;
608 fhBinLimClusterTRD=new Double_t[nbins+1];
609 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTRD[i]=bins[i];
610 break;
611
65e7777d 612 case kCutMinFoundClusterTPC:
613 fhNBinsFoundClusterTPC=nbins+1;
614 fhBinLimFoundClusterTPC=new Double_t[nbins+1];
615 for(Int_t i=0;i<nbins+1;i++)fhBinLimFoundClusterTPC[i]=bins[i];
616 break;
617
618 case kCutTrackletTRD:
619 fhNBinsTrackletTRD=nbins+1;
620 fhBinLimTrackletTRD=new Double_t[nbins+1];
621 for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRD[i]=bins[i];
622 break;
623
624 case kCutTrackletTRDpid:
625 fhNBinsTrackletTRDpid=nbins+1;
626 fhBinLimTrackletTRDpid=new Double_t[nbins+1];
627 for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRDpid[i]=bins[i];
628 break;
629
563113d0 630 case kCutChi2TPC:
db6722a5 631 fhNBinsChi2TPC=nbins+1;
563113d0 632 fhBinLimChi2TPC=new Double_t[nbins+1];
633 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TPC[i]=bins[i];
634 break;
6cb5e116 635
563113d0 636 case kCutChi2ITS:
db6722a5 637 fhNBinsChi2ITS=nbins+1;
563113d0 638 fhBinLimChi2ITS=new Double_t[nbins+1];
639 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2ITS[i]=bins[i];
640 break;
6cb5e116 641
18274103 642 case kCutChi2TRD:
643 fhNBinsChi2TRD=nbins+1;
644 fhBinLimChi2TRD=new Double_t[nbins+1];
645 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TRD[i]=bins[i];
646 break;
647
c2c45ca4 648 case kCutdEdxClusterTPC:
649 fhNBinsdEdxClusterTPC=nbins+1;
650 fhBinLimdEdxClusterTPC=new Double_t[nbins+1];
651 for(Int_t i=0;i<nbins+1;i++)fhBinLimdEdxClusterTPC[i]=bins[i];
652 break;
653
563113d0 654 case kCutCovElement11:
db6722a5 655 fhNBinsCovariance11=nbins+1;
563113d0 656 fhBinLimCovariance11=new Double_t[nbins+1];
657 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance11[i]=bins[i];
658 break;
6cb5e116 659
563113d0 660 case kCutCovElement22:
db6722a5 661 fhNBinsCovariance22=nbins+1;
563113d0 662 fhBinLimCovariance22=new Double_t[nbins+1];
663 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance22[i]=bins[i];
664 break;
6cb5e116 665
563113d0 666 case kCutCovElement33:
db6722a5 667 fhNBinsCovariance33=nbins+1;
563113d0 668 fhBinLimCovariance33=new Double_t[nbins+1];
669 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance33[i]=bins[i];
670 break;
6cb5e116 671
563113d0 672 case kCutCovElement44:
db6722a5 673 fhNBinsCovariance44=nbins+1;
563113d0 674 fhBinLimCovariance44=new Double_t[nbins+1];
675 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance44[i]=bins[i];
676 break;
6cb5e116 677
563113d0 678 case kCutCovElement55:
db6722a5 679 fhNBinsCovariance55=nbins+1;
563113d0 680 fhBinLimCovariance55=new Double_t[nbins+1];
681 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance55[i]=bins[i];
682 break;
683 }
684}
685//__________________________________________________________________________________
686void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax)
687{
688 //
689 // fixed bin size
690 //
8edd0c2c 691 if (index<0 || index>=kNHist) {
692 Error("SetHistogramBins","could not determine histogram from index %d",index);
693 return;
694 }
695
563113d0 696 switch(index){
697 case kCutClusterTPC:
db6722a5 698 fhNBinsClusterTPC=nbins+1;
563113d0 699 fhBinLimClusterTPC=new Double_t[nbins+1];
700 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
701 break;
6cb5e116 702
563113d0 703 case kCutClusterITS:
db6722a5 704 fhNBinsClusterITS=nbins+1;
563113d0 705 fhBinLimClusterITS=new Double_t[nbins+1];
706 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterITS[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
707 break;
6cb5e116 708
18274103 709 case kCutClusterTRD:
710 fhNBinsClusterTRD=nbins+1;
711 fhBinLimClusterTRD=new Double_t[nbins+1];
712 for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
713 break;
714
65e7777d 715 case kCutMinFoundClusterTPC:
716 fhNBinsFoundClusterTPC=nbins+1;
717 fhBinLimFoundClusterTPC=new Double_t[nbins+1];
718 for(Int_t i=0;i<nbins+1;i++)fhBinLimFoundClusterTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
719 break;
720
721 case kCutTrackletTRD:
722 fhNBinsTrackletTRD=nbins+1;
723 fhBinLimTrackletTRD=new Double_t[nbins+1];
724 for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
725 break;
726
727 case kCutTrackletTRDpid:
728 fhNBinsTrackletTRDpid=nbins+1;
729 fhBinLimTrackletTRDpid=new Double_t[nbins+1];
730 for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRDpid[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
731 break;
732
563113d0 733 case kCutChi2TPC:
db6722a5 734 fhNBinsChi2TPC=nbins+1;
563113d0 735 fhBinLimChi2TPC=new Double_t[nbins+1];
736 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
737 break;
6cb5e116 738
563113d0 739 case kCutChi2ITS:
db6722a5 740 fhNBinsChi2ITS=nbins+1;
563113d0 741 fhBinLimChi2ITS=new Double_t[nbins+1];
742 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2ITS[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
743 break;
6cb5e116 744
18274103 745 case kCutChi2TRD:
746 fhNBinsChi2TRD=nbins+1;
747 fhBinLimChi2TRD=new Double_t[nbins+1];
748 for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
749 break;
750
c2c45ca4 751 case kCutdEdxClusterTPC:
752 fhNBinsdEdxClusterTPC=nbins+1;
753 fhBinLimdEdxClusterTPC=new Double_t[nbins+1];
754 for(Int_t i=0;i<nbins+1;i++)fhBinLimdEdxClusterTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
755 break;
756
563113d0 757 case kCutCovElement11:
db6722a5 758 fhNBinsCovariance11=nbins+1;
563113d0 759 fhBinLimCovariance11=new Double_t[nbins+1];
760 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance11[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
761 break;
6cb5e116 762
563113d0 763 case kCutCovElement22:
db6722a5 764 fhNBinsCovariance22=nbins+1;
563113d0 765 fhBinLimCovariance22=new Double_t[nbins+1];
766 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance22[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
767 break;
6cb5e116 768
563113d0 769 case kCutCovElement33:
db6722a5 770 fhNBinsCovariance33=nbins+1;
563113d0 771 fhBinLimCovariance33=new Double_t[nbins+1];
772 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance33[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
773 break;
6cb5e116 774
563113d0 775 case kCutCovElement44:
db6722a5 776 fhNBinsCovariance44=nbins+1;
563113d0 777 fhBinLimCovariance44=new Double_t[nbins+1];
778 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance44[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
779 break;
6cb5e116 780
563113d0 781 case kCutCovElement55:
db6722a5 782 fhNBinsCovariance55=nbins+1;
563113d0 783 fhBinLimCovariance55=new Double_t[nbins+1];
784 for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance55[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
785 break;
786 }
787}
788//__________________________________________________________________________________
789 void AliCFTrackQualityCuts::DefineHistograms() {
790 //
791 // histograms for cut variables, cut statistics and cut correlations
792 //
563113d0 793 Int_t color = 2;
794
795 // book cut statistics and cut correlation histograms
796 fhCutStatistics = new TH1F(Form("%s_cut_statistics",GetName()), Form("%s cut statistics",GetName()), kNCuts,0.5,kNCuts+0.5);
797 fhCutStatistics->SetLineWidth(2);
18274103 798 fhCutStatistics->GetXaxis()->SetBinLabel(1, "nClustersTPC");
799 fhCutStatistics->GetXaxis()->SetBinLabel(2, "nClustersITS");
65e7777d 800 fhCutStatistics->GetXaxis()->SetBinLabel(3, "nClustersTRD");
801 fhCutStatistics->GetXaxis()->SetBinLabel(4, "fractionClustersTPC");
802 fhCutStatistics->GetXaxis()->SetBinLabel(5, "ntrackletsTRD");
803 fhCutStatistics->GetXaxis()->SetBinLabel(6, "ntrackletsTRDpid");
804 fhCutStatistics->GetXaxis()->SetBinLabel(7, "chi2PerClusterTPC");
805 fhCutStatistics->GetXaxis()->SetBinLabel(8, "chi2PerClusterITS");
806 fhCutStatistics->GetXaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
c2c45ca4 807 fhCutStatistics->GetXaxis()->SetBinLabel(10, "ndEdxClusterTPC");
808 fhCutStatistics->GetXaxis()->SetBinLabel(11, "covElement11");
809 fhCutStatistics->GetXaxis()->SetBinLabel(12, "covElement22");
810 fhCutStatistics->GetXaxis()->SetBinLabel(13, "covElement33");
811 fhCutStatistics->GetXaxis()->SetBinLabel(14, "covElement44");
812 fhCutStatistics->GetXaxis()->SetBinLabel(15, "covElement55");
813 fhCutStatistics->GetXaxis()->SetBinLabel(16, "status");
563113d0 814
815 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);
816 fhCutCorrelation->SetLineWidth(2);
18274103 817 fhCutCorrelation->GetXaxis()->SetBinLabel(1, "nClustersTPC");
818 fhCutCorrelation->GetXaxis()->SetBinLabel(2, "nClustersITS");
819 fhCutCorrelation->GetXaxis()->SetBinLabel(3, "nClustersTRD");
65e7777d 820 fhCutCorrelation->GetXaxis()->SetBinLabel(4, "fractionClustersTPC");
821 fhCutCorrelation->GetXaxis()->SetBinLabel(5, "ntrackletsTRD");
822 fhCutCorrelation->GetXaxis()->SetBinLabel(6, "ntrackletsTRDpid");
823 fhCutCorrelation->GetXaxis()->SetBinLabel(7, "chi2PerClusterTPC");
824 fhCutCorrelation->GetXaxis()->SetBinLabel(8, "chi2PerClusterITS");
825 fhCutCorrelation->GetXaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
c2c45ca4 826 fhCutCorrelation->GetXaxis()->SetBinLabel(10, "ndEdxClustersTPC");
827 fhCutCorrelation->GetXaxis()->SetBinLabel(11, "covElement11");
828 fhCutCorrelation->GetXaxis()->SetBinLabel(12, "covElement22");
829 fhCutCorrelation->GetXaxis()->SetBinLabel(13, "covElement33");
830 fhCutCorrelation->GetXaxis()->SetBinLabel(14, "covElement44");
831 fhCutCorrelation->GetXaxis()->SetBinLabel(15, "covElement55");
832 fhCutCorrelation->GetXaxis()->SetBinLabel(16, "status");
18274103 833
834 fhCutCorrelation->GetYaxis()->SetBinLabel(1, "nClustersTPC");
835 fhCutCorrelation->GetYaxis()->SetBinLabel(2, "nClustersITS");
836 fhCutCorrelation->GetYaxis()->SetBinLabel(3, "nClustersTRD");
65e7777d 837 fhCutCorrelation->GetYaxis()->SetBinLabel(4, "fractionClustersTPC");
838 fhCutCorrelation->GetYaxis()->SetBinLabel(5, "ntrackletsTRD");
839 fhCutCorrelation->GetYaxis()->SetBinLabel(6, "ntrackletsTRDpid");
840 fhCutCorrelation->GetYaxis()->SetBinLabel(7, "chi2PerClusterTPC");
841 fhCutCorrelation->GetYaxis()->SetBinLabel(8, "chi2PerClusterITS");
842 fhCutCorrelation->GetYaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
c2c45ca4 843 fhCutCorrelation->GetYaxis()->SetBinLabel(10, "ndEdxClustersTPC");
844 fhCutCorrelation->GetYaxis()->SetBinLabel(11, "covElement11");
845 fhCutCorrelation->GetYaxis()->SetBinLabel(12, "covElement22");
846 fhCutCorrelation->GetYaxis()->SetBinLabel(13, "covElement33");
847 fhCutCorrelation->GetYaxis()->SetBinLabel(14, "covElement44");
848 fhCutCorrelation->GetYaxis()->SetBinLabel(15, "covElement55");
849 fhCutCorrelation->GetYaxis()->SetBinLabel(16, "status");
563113d0 850
851
852 // book QA histograms
853 Char_t str[256];
854 for (Int_t i=0; i<kNStepQA; i++) {
855 if (i==0) sprintf(str," ");
856 else sprintf(str,"_cut");
6cb5e116 857
db6722a5 858 fhQA[kCutClusterTPC][i] = new TH1F(Form("%s_nClustersTPC%s",GetName(),str) ,"",fhNBinsClusterTPC-1,fhBinLimClusterTPC);
859 fhQA[kCutClusterITS][i] = new TH1F(Form("%s_nClustersITS%s",GetName(),str) ,"",fhNBinsClusterITS-1,fhBinLimClusterITS);
18274103 860 fhQA[kCutClusterTRD][i] = new TH1F(Form("%s_nClustersTRD%s",GetName(),str) ,"",fhNBinsClusterTRD-1,fhBinLimClusterTRD);
65e7777d 861 fhQA[kCutMinFoundClusterTPC][i] = new TH1F(Form("%s_fractionClustersTPC%s",GetName(),str) ,"",fhNBinsFoundClusterTPC-1,fhBinLimFoundClusterTPC);
862 fhQA[kCutTrackletTRD][i] = new TH1F(Form("%s_ntrackletsTRD%s",GetName(),str) ,"",fhNBinsTrackletTRD-1,fhBinLimTrackletTRD);
863 fhQA[kCutTrackletTRDpid][i] = new TH1F(Form("%s_ntrackletsTRDpid%s",GetName(),str) ,"",fhNBinsTrackletTRDpid-1,fhBinLimTrackletTRDpid);
db6722a5 864 fhQA[kCutChi2TPC][i] = new TH1F(Form("%s_chi2PerClusterTPC%s",GetName(),str),"",fhNBinsChi2TPC-1,fhBinLimChi2TPC);
865 fhQA[kCutChi2ITS][i] = new TH1F(Form("%s_chi2PerClusterITS%s",GetName(),str),"",fhNBinsChi2ITS-1,fhBinLimChi2ITS);
65e7777d 866 fhQA[kCutChi2TRD][i] = new TH1F(Form("%s_chi2PerTrackletTRD%s",GetName(),str),"",fhNBinsChi2TRD-1,fhBinLimChi2TRD);
c2c45ca4 867 fhQA[kCutdEdxClusterTPC][i] = new TH1F(Form("%s_ndEdxClustersTPC%s",GetName(),str) ,"",fhNBinsdEdxClusterTPC-1,fhBinLimdEdxClusterTPC);
db6722a5 868 fhQA[kCutCovElement11][i] = new TH1F(Form("%s_covMatrixDiagonal11%s",GetName(),str),"",fhNBinsCovariance11-1,fhBinLimCovariance11);
869 fhQA[kCutCovElement22][i] = new TH1F(Form("%s_covMatrixDiagonal22%s",GetName(),str),"",fhNBinsCovariance22-1,fhBinLimCovariance22);
870 fhQA[kCutCovElement33][i] = new TH1F(Form("%s_covMatrixDiagonal33%s",GetName(),str),"",fhNBinsCovariance33-1,fhBinLimCovariance33);
871 fhQA[kCutCovElement44][i] = new TH1F(Form("%s_covMatrixDiagonal44%s",GetName(),str),"",fhNBinsCovariance44-1,fhBinLimCovariance44);
872 fhQA[kCutCovElement55][i] = new TH1F(Form("%s_covMatrixDiagonal55%s",GetName(),str),"",fhNBinsCovariance55-1,fhBinLimCovariance55);
563113d0 873
874 fhQA[kCutClusterTPC][i] ->SetXTitle("n TPC clusters");
875 fhQA[kCutClusterITS][i] ->SetXTitle("n ITS clusters");
18274103 876 fhQA[kCutClusterTRD][i] ->SetXTitle("n TRD clusters");
65e7777d 877 fhQA[kCutMinFoundClusterTPC][i]->SetXTitle("fraction TPC clusters");
878 fhQA[kCutTrackletTRD][i] ->SetXTitle("n tracklets TRD");
879 fhQA[kCutTrackletTRDpid][i]->SetXTitle("n tracklets TRD pid");
563113d0 880 fhQA[kCutChi2TPC][i] ->SetXTitle("#chi^{2} per TPC cluster");
881 fhQA[kCutChi2ITS][i] ->SetXTitle("#chi^{2} per ITS cluster");
65e7777d 882 fhQA[kCutChi2TRD][i] ->SetXTitle("#chi^{2} per TRD tracklet");
c2c45ca4 883 fhQA[kCutdEdxClusterTPC][i] ->SetXTitle("n dEdx TPC clusters");
563113d0 884 fhQA[kCutCovElement11][i] ->SetXTitle("cov 11 : #sigma_{y}^{2} (cm^{2})");
885 fhQA[kCutCovElement22][i] ->SetXTitle("cov 22 : #sigma_{z}^{2} (cm^{2})");
886 fhQA[kCutCovElement33][i] ->SetXTitle("cov 33 : #sigma_{sin(#phi)}^{2}");
887 fhQA[kCutCovElement44][i] ->SetXTitle("cov 44 : #sigma_{tan(#theta_{dip})}^{2}");
6cb5e116 888 fhQA[kCutCovElement55][i] ->SetXTitle("cov 55 : #sigma_{1/p_{T}}^{2} ((c/GeV)^{2})");
563113d0 889 }
890
891 for(Int_t i=0; i<kNHist; i++) fhQA[i][1]->SetLineColor(color);
563113d0 892}
893//__________________________________________________________________________________
894void AliCFTrackQualityCuts::FillHistograms(TObject* obj, Bool_t b)
895{
896 //
897 // fill the QA histograms
898 //
563113d0 899
107a3100 900 if (!obj) return;
8edd0c2c 901 if (!obj->InheritsFrom("AliVParticle")) {
902 AliError("object must derived from AliVParticle !");
903 return;
904 }
905
906 Bool_t isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ;
907 Bool_t isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ;
908
909 AliESDtrack * esdTrack = 0x0 ;
910 AliAODTrack * aodTrack = 0x0 ;
911 if (isESDTrack) esdTrack = dynamic_cast<AliESDtrack*>(obj);
912 if (isAODTrack) aodTrack = dynamic_cast<AliAODTrack*>(obj);
563113d0 913
107a3100 914 // b = 0: fill histograms before cuts
915 // b = 1: fill histograms after cuts
563113d0 916
c2c45ca4 917// // // remove following 5 lines when AliESDtrackCuts is updated
918 Int_t nClustersTPC = 0;
919 Int_t nClustersITS = 0 ;
920 Float_t chi2PerClusterTPC = 0 ;
921 Float_t chi2PerClusterITS = 0 ;
922 Double_t extCov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
923
924 Int_t nClustersTRD = 0 ;
925 Int_t nTrackletsTRD = 0 ;
926 Float_t chi2PerTrackletTRD = 0 ;
65e7777d 927 Float_t fractionFoundClustersTPC = 0;
928
8edd0c2c 929 if (isESDTrack) {
65e7777d 930 nClustersTRD = esdTrack->GetTRDncls();
931 nTrackletsTRD = esdTrack->GetTRDntracklets();
65e7777d 932 if (nTrackletsTRD != 0) chi2PerTrackletTRD = esdTrack->GetTRDchi2() / Float_t(nTrackletsTRD);
c2c45ca4 933
934// // // include following line when AliESDtrackCuts is updated
935// if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = fTrackCuts->GetCutVariable(2) / float(esdTrack->GetTPCNclsF());
936
937// // // remove following 6 lines when AliESDtrackCuts is updated
938 nClustersTPC = esdTrack->GetTPCclusters(0x0);
939 nClustersITS = esdTrack->GetITSclusters(0x0);
940 if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC);
941 if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS);
942 esdTrack->GetExternalCovariance(extCov);
943 if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = float(nClustersTPC) / float(esdTrack->GetTPCNclsF());
944 }
945
946// // // include following lines when AliESDtrackCuts is updated
947// fhQA[kCutClusterTPC][b]->Fill(fTrackCuts->GetCutVariable(2));
948// fhQA[kCutClusterITS][b]->Fill(fTrackCuts->GetCutVariable(3));
949// fhQA[kCutChi2TPC][b]->Fill(fTrackCuts->GetCutVariable(4));
950// fhQA[kCutChi2ITS][b]->Fill(fTrackCuts->GetCutVariable(5));
951// // // remove following 4 lines when AliESDtrackCuts is updated
952 fhQA[kCutClusterTPC][b]->Fill((float)nClustersTPC);
953 fhQA[kCutChi2TPC][b]->Fill(chi2PerClusterTPC);
954 fhQA[kCutClusterITS][b]->Fill((float)nClustersITS);
955 fhQA[kCutChi2ITS][b]->Fill(chi2PerClusterITS);
956
957
18274103 958 fhQA[kCutClusterTRD][b]->Fill((float)nClustersTRD);
65e7777d 959 fhQA[kCutChi2TRD][b]->Fill(chi2PerTrackletTRD);
c2c45ca4 960// if (b==0 || (b==1 && fTrackCuts->GetCutVariable(2)>0)) fhQA[kCutMinFoundClusterTPC][b]->Fill((float)fractionFoundClustersTPC);
65e7777d 961 if (b==0 || (b==1 && nClustersTPC>0)) fhQA[kCutMinFoundClusterTPC][b]->Fill((float)fractionFoundClustersTPC);
962 fhQA[kCutTrackletTRD][b]->Fill((float)nTrackletsTRD);
963 fhQA[kCutTrackletTRDpid][b]->Fill((float)esdTrack->GetTRDntrackletsPID());
c2c45ca4 964 fhQA[kCutdEdxClusterTPC][b]->Fill((float)esdTrack->GetTPCsignalN());
965
966// // // include following lines when AliESDtrackCuts is updated
967// fhQA[kCutCovElement11][b]->Fill(fTrackCuts->GetCutVariable(6));
968// fhQA[kCutCovElement22][b]->Fill(fTrackCuts->GetCutVariable(7));
969// fhQA[kCutCovElement33][b]->Fill(fTrackCuts->GetCutVariable(8));
970// fhQA[kCutCovElement44][b]->Fill(fTrackCuts->GetCutVariable(9));
971// fhQA[kCutCovElement55][b]->Fill(fTrackCuts->GetCutVariable(10));
972// // // remove following 5 lines when AliESDtrackCuts is updated
973 fhQA[kCutCovElement11][b]->Fill(extCov[0]);
974 fhQA[kCutCovElement22][b]->Fill(extCov[2]);
975 fhQA[kCutCovElement33][b]->Fill(extCov[5]);
976 fhQA[kCutCovElement44][b]->Fill(extCov[9]);
977 fhQA[kCutCovElement55][b]->Fill(extCov[14]);
978
6cb5e116 979
563113d0 980 // fill cut statistics and cut correlation histograms with information from the bitmap
981 if (b) return;
982
983 // Get the bitmap of the single cuts
984 if ( !obj ) return;
107a3100 985 SelectionBitMap(obj);
563113d0 986
987 // Number of single cuts in this class
107a3100 988 UInt_t ncuts = fBitmap->GetNbits();
563113d0 989 for(UInt_t bit=0; bit<ncuts;bit++) {
107a3100 990 if (!fBitmap->TestBitNumber(bit)) {
563113d0 991 fhCutStatistics->Fill(bit+1);
992 for (UInt_t bit2=bit; bit2<ncuts;bit2++) {
107a3100 993 if (!fBitmap->TestBitNumber(bit2))
563113d0 994 fhCutCorrelation->Fill(bit+1,bit2+1);
995 }
996 }
997 }
998}
999//__________________________________________________________________________________
1000void AliCFTrackQualityCuts::SaveHistograms(const Char_t* dir) {
1001 //
1002 // saves the histograms in a directory (dir)
1003 //
1004 if(!fIsQAOn) return;
1005
1006 if (!dir)
1007 dir = GetName();
1008
1009 gDirectory->mkdir(dir);
1010 gDirectory->cd(dir);
1011
1012 gDirectory->mkdir("before_cuts");
1013 gDirectory->mkdir("after_cuts");
1014
1015 fhCutStatistics->Write();
1016 fhCutCorrelation->Write();
1017
1018 for (Int_t j=0; j<kNStepQA; j++) {
1019 if (j==0)
1020 gDirectory->cd("before_cuts");
1021 else
1022 gDirectory->cd("after_cuts");
1023
1024 for(Int_t i=0; i<kNHist; i++) fhQA[i][j]->Write();
1025
1026 gDirectory->cd("../");
1027 }
1028 gDirectory->cd("../");
1029}
1030//__________________________________________________________________________________
1031void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale)
1032{
1033 //
1034 // draws some histograms
1035 //
1036 if(!fIsQAOn) return;
1037
1038 // pad margins
1039 Float_t right = 0.03;
1040 Float_t left = 0.175;
1041 Float_t top = 0.03;
1042 Float_t bottom = 0.175;
1043
1044 TCanvas* canvas1 = new TCanvas("Track_QA_Quality_1", "Track QA Quality 1", 800, 500);
1045 canvas1->Divide(2, 1);
1046
1047 canvas1->cd(1);
1048 fhCutStatistics->SetStats(kFALSE);
1049 fhCutStatistics->LabelsOption("v");
1050 gPad->SetLeftMargin(left);
1051 gPad->SetBottomMargin(0.25);
1052 gPad->SetRightMargin(right);
1053 gPad->SetTopMargin(0.1);
1054 fhCutStatistics->Draw();
1055
1056 canvas1->cd(2);
1057 fhCutCorrelation->SetStats(kFALSE);
1058 fhCutCorrelation->LabelsOption("v");
1059 gPad->SetLeftMargin(0.30);
1060 gPad->SetRightMargin(bottom);
1061 gPad->SetTopMargin(0.1);
1062 gPad->SetBottomMargin(0.25);
1063 fhCutCorrelation->Draw("COLZ");
1064
1065 canvas1->SaveAs(Form("%s.eps", canvas1->GetName()));
1066 canvas1->SaveAs(Form("%s.ps", canvas1->GetName()));
1067
1068 // -----
1069
1070 TCanvas* canvas2 = new TCanvas("Track_QA_Quality_2", "Track QA Quality 2", 1200, 800);
8edd0c2c 1071 canvas2->Divide(2, 2);
563113d0 1072
1073 canvas2->cd(1);
1074 gPad->SetRightMargin(right);
1075 gPad->SetLeftMargin(left);
1076 gPad->SetTopMargin(top);
1077 gPad->SetBottomMargin(bottom);
1078 fhQA[kCutClusterTPC][0]->SetStats(kFALSE);
1079 fhQA[kCutClusterTPC][0]->Draw();
1080 fhQA[kCutClusterTPC][1]->Draw("same");
1081
1082 canvas2->cd(2);
1083 gPad->SetRightMargin(right);
1084 gPad->SetLeftMargin(left);
1085 gPad->SetTopMargin(top);
1086 gPad->SetBottomMargin(bottom);
1087 fhQA[kCutChi2TPC][0]->SetStats(kFALSE);
1088 fhQA[kCutChi2TPC][0]->Draw();
1089 fhQA[kCutChi2TPC][1]->Draw("same");
1090
1091 canvas2->cd(3);
1092 gPad->SetRightMargin(right);
1093 gPad->SetLeftMargin(left);
1094 gPad->SetTopMargin(top);
1095 gPad->SetBottomMargin(bottom);
563113d0 1096 fhQA[kCutClusterITS][0]->SetStats(kFALSE);
1097 fhQA[kCutClusterITS][0]->Draw();
1098 fhQA[kCutClusterITS][1]->Draw("same");
1099
8edd0c2c 1100 canvas2->cd(4);
563113d0 1101 gPad->SetRightMargin(right);
1102 gPad->SetLeftMargin(left);
1103 gPad->SetTopMargin(top);
1104 gPad->SetBottomMargin(bottom);
1105 fhQA[kCutChi2ITS][0]->SetStats(kFALSE);
1106 fhQA[kCutChi2ITS][0]->Draw();
1107 fhQA[kCutChi2ITS][1]->Draw("same");
1108
563113d0 1109 canvas2->SaveAs(Form("%s.eps", canvas2->GetName()));
1110 canvas2->SaveAs(Form("%s.ps", canvas2->GetName()));
1111
1112 // -----
1113
1114 TCanvas* canvas3 = new TCanvas("Track_QA_Quality_3", "Track QA Quality 3", 1200, 800);
1115 canvas3->Divide(3, 2);
1116
1117 canvas3->cd(1);
1118 if(drawLogScale) gPad->SetLogy();
1119 gPad->SetRightMargin(right);
1120 gPad->SetLeftMargin(left);
1121 gPad->SetTopMargin(top);
1122 gPad->SetBottomMargin(bottom);
1123 fhQA[kCutCovElement11][0]->SetStats(kFALSE);
1124 fhQA[kCutCovElement11][0]->Draw();
1125 fhQA[kCutCovElement11][1]->Draw("same");
1126
1127 canvas3->cd(2);
1128 if(drawLogScale) gPad->SetLogy();
1129 gPad->SetRightMargin(right);
1130 gPad->SetLeftMargin(left);
1131 gPad->SetTopMargin(top);
1132 gPad->SetBottomMargin(bottom);
1133 fhQA[kCutCovElement22][0]->SetStats(kFALSE);
1134 fhQA[kCutCovElement22][0]->Draw();
1135 fhQA[kCutCovElement22][1]->Draw("same");
1136
1137 canvas3->cd(3);
1138 if(drawLogScale) gPad->SetLogy();
1139 gPad->SetRightMargin(right);
1140 gPad->SetLeftMargin(left);
1141 gPad->SetTopMargin(top);
1142 gPad->SetBottomMargin(bottom);
1143 fhQA[kCutCovElement33][0]->SetStats(kFALSE);
1144 fhQA[kCutCovElement33][0]->Draw();
1145 fhQA[kCutCovElement33][1]->Draw("same");
1146
1147 canvas3->cd(4);
1148 if(drawLogScale) gPad->SetLogy();
1149 gPad->SetRightMargin(right);
1150 gPad->SetLeftMargin(left);
1151 gPad->SetTopMargin(top);
1152 gPad->SetBottomMargin(bottom);
1153 fhQA[kCutCovElement44][0]->SetStats(kFALSE);
1154 fhQA[kCutCovElement44][0]->Draw();
1155 fhQA[kCutCovElement44][1]->Draw("same");
1156
1157 canvas3->cd(5);
1158 if(drawLogScale) gPad->SetLogy();
1159 gPad->SetRightMargin(right);
1160 gPad->SetLeftMargin(left);
1161 gPad->SetTopMargin(top);
1162 gPad->SetBottomMargin(bottom);
1163 fhQA[kCutCovElement55][0]->SetStats(kFALSE);
1164 fhQA[kCutCovElement55][0]->Draw();
1165 fhQA[kCutCovElement55][1]->Draw("same");
1166
1167 canvas3->SaveAs(Form("%s.eps", canvas3->GetName()));
1168 canvas3->SaveAs(Form("%s.ps", canvas3->GetName()));
1169}
1170//__________________________________________________________________________________
107a3100 1171void AliCFTrackQualityCuts::AddQAHistograms(TList *qaList) {
563113d0 1172 //
1173 // saves the histograms in a TList
1174 //
107a3100 1175 DefineHistograms();
563113d0 1176
1177 qaList->Add(fhCutStatistics);
1178 qaList->Add(fhCutCorrelation);
1179
1180 for (Int_t j=0; j<kNStepQA; j++) {
1181 for(Int_t i=0; i<kNHist; i++)
1182 qaList->Add(fhQA[i][j]);
1183 }
1184}