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 TPC
25 // - number of clusters in the ITS
26 // - chi2 / cluster in the TPC
27 // - chi2 / cluster in the ITS
28 // - covariance matrix diagonal elements
29 // - track status (cf AliESDtrack.h)
31 // The cut values for these cuts are set with the corresponding set functions.
32 // All cut classes provided by the correction framework are supposed to be
33 // added in the Analysis Framwork's class AliAnalysisFilter and applied by
34 // the filter via a loop.
36 // author: I. Kraus (Ingrid.Kraus@cern.ch)
38 // AliESDtrackCuts writte by Jan Fiete Grosse-Oetringhaus and
39 // AliRsnDaughterCut class written by A. Pulvirenti.
41 #ifndef ALICFTRACKQUALITYCUTS_H
42 #define ALICFTRACKQUALITYCUTS_H
44 #include "AliCFCutBase.h"
51 class AliCFTrackQualityCuts : public AliCFCutBase
54 AliCFTrackQualityCuts() ;
55 AliCFTrackQualityCuts(Char_t* name, Char_t* title) ;
56 AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) ;
57 AliCFTrackQualityCuts& operator=(const AliCFTrackQualityCuts& c) ;
58 ~AliCFTrackQualityCuts();
59 void Copy(TObject &c) const;
61 Bool_t IsSelected(TObject* obj);
62 Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
65 void SetMinNClusterTPC(Int_t cluster=-1) {fMinNClusterTPC = cluster;}
66 void SetMinNClusterITS(Int_t cluster=-1) {fMinNClusterITS = cluster;}
67 void SetMaxChi2PerClusterTPC(Double_t chi=1e99) {fMaxChi2PerClusterTPC = chi;}
68 void SetMaxChi2PerClusterITS(Double_t chi=1e99) {fMaxChi2PerClusterITS = chi;}
69 void SetMaxCovDiagonalElements(Float_t c1=1e99, Float_t c2=1e99, Float_t c3=1e99, Float_t c4=1e99, Float_t c5=1e99)
70 {fCovariance11Max=c1;fCovariance22Max=c2;fCovariance33Max=c3;fCovariance44Max=c4;fCovariance55Max=c5;}
71 void SetStatus(ULong_t status=0) {fStatus = status ;}
74 void DrawHistograms(Bool_t drawLogScale=kTRUE);
75 void SaveHistograms(const Char_t* dir = 0);
76 void AddQAHistograms(TList *qaList);
77 // QA histogram setter
78 // please use indices from the enumeration below
79 void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
80 void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);
82 // indeces/counters for single selections
84 kCutClusterTPC=0, // number of clusters in TPC
85 kCutClusterITS, // number of clusters in ITS
86 kCutChi2TPC, // chi2 per cluster in TPC
87 kCutChi2ITS, // chi2 per cluster in ITS
88 kCutCovElement11, // diagonal element 11 of covariance matrix
89 kCutCovElement22, // diagonal element 22 of covariance matrix
90 kCutCovElement33, // diagonal element 33 of covariance matrix
91 kCutCovElement44, // diagonal element 44 of covariance matrix
92 kCutCovElement55, // diagonal element 55 of covariance matrix
93 kCutStatus, // track status
94 kNCuts=10, // number of single selections
95 kNStepQA=2, // number of QA steps (before/after the cuts)
96 kNHist=9 // number of QA histograms
100 void SelectionBitMap(TObject* obj);
101 void DefineHistograms(); // books histograms and TList
102 void Initialise(); // sets everything to 0
103 void FillHistograms(TObject* obj, Bool_t b);
104 // Fills histograms before and after cuts
105 Double_t fMinNClusterTPC; // min number of clusters in TPC
106 Double_t fMinNClusterITS; // min number of clusters in ITS
107 Double_t fMaxChi2PerClusterTPC; // max chi2 per clusters in TPC
108 Double_t fMaxChi2PerClusterITS; // max chi2 per clusters in ITS
110 Double_t fCovariance11Max ; // max covariance matrix element 11
111 Double_t fCovariance22Max ; // max covariance matrix element 22
112 Double_t fCovariance33Max ; // max covariance matrix element 33
113 Double_t fCovariance44Max ; // max covariance matrix element 44
114 Double_t fCovariance55Max ; // max covariance matrix element 55
116 ULong_t fStatus; // track status
118 TH1F* fhCutStatistics; // Histogram: statistics of what cuts the tracks did not survive
119 TH2F* fhCutCorrelation; // Histogram: 2d statistics plot
121 TH1F* fhQA[kNHist][kNStepQA]; // QA Histograms
122 TBits *fBitmap ; // stores single selection decisions
124 // QA histogram setters
125 Int_t fhNBinsClusterTPC; // number of bins+1: cluster TPC
126 Int_t fhNBinsClusterITS; // number of bins+1: cluster ITS
127 Int_t fhNBinsChi2TPC; // number of bins+1: chi2 per cluster TPC
128 Int_t fhNBinsChi2ITS; // number of bins+1: chi2 per cluster ITS
129 Int_t fhNBinsCovariance11; // number of bins+1: covariance matrix element 11
130 Int_t fhNBinsCovariance22; // number of bins+1: covariance matrix element 22
131 Int_t fhNBinsCovariance33; // number of bins+1: covariance matrix element 33
132 Int_t fhNBinsCovariance44; // number of bins+1: covariance matrix element 44
133 Int_t fhNBinsCovariance55; // number of bins+1: covariance matrix element 55
135 Double_t *fhBinLimClusterTPC; //[fhNBinsClusterTPC] bin limits: cluster TPC
136 Double_t *fhBinLimClusterITS; //[fhNBinsClusterITS] bin limits: cluster ITS
137 Double_t *fhBinLimChi2TPC; //[fhNBinsChi2TPC] bin limits: chi2 per cluster TPC
138 Double_t *fhBinLimChi2ITS; //[fhNBinsChi2ITS] bin limits: chi2 per cluster ITS
139 Double_t *fhBinLimCovariance11;//[fhNBinsCovariance11] bin limits: covariance matrix element 11
140 Double_t *fhBinLimCovariance22;//[fhNBinsCovariance22] bin limits: covariance matrix element 22
141 Double_t *fhBinLimCovariance33;//[fhNBinsCovariance33] bin limits: covariance matrix element 33
142 Double_t *fhBinLimCovariance44;//[fhNBinsCovariance44] bin limits: covariance matrix element 44
143 Double_t *fhBinLimCovariance55;//[fhNBinsCovariance55] bin limits: covariance matrix element 55
145 ClassDef(AliCFTrackQualityCuts,3);