new classes for resonance and V0 analysis (from R. Vernet)
[u/mrichter/AliRoot.git] / CORRFW / AliCFTrackQualityCuts.h
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:
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 // - successful TPC refit
29 // - successful ITS refit
30 // - covariance matrix diagonal elements
31 //
32 // The cut values for these cuts are set with the corresponding set functions.
33 // All cut classes provided by the correction framework are supposed to be
34 // added in the Analysis Framwork's class AliAnalysisFilter and applied by
35 // the filter via a loop.
36 //
37 // author: I. Kraus (Ingrid.Kraus@cern.ch)
38 // idea taken form
39 // AliESDtrackCuts writte by Jan Fiete Grosse-Oetringhaus and
40 // AliRsnDaughterCut class written by A. Pulvirenti.
41
42 #ifndef ALICFTRACKQUALITYCUTS_H
43 #define ALICFTRACKQUALITYCUTS_H
44
45 #include "AliCFCutBase.h"
46
47 class TH2F ;
48 class TH1F ;
49 class TBits;
50 class AliESDtrack ;
51
52 class AliCFTrackQualityCuts : public AliCFCutBase
53 {
54  public :
55   AliCFTrackQualityCuts() ;
56   AliCFTrackQualityCuts(Char_t* name, Char_t* title) ;
57   AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) ;
58   AliCFTrackQualityCuts& operator=(const AliCFTrackQualityCuts& c) ;
59   ~AliCFTrackQualityCuts();
60   void Copy(TObject &c) const;
61
62   void GetBitMap(TObject* obj, TBits *bitmap) ;
63   Bool_t IsSelected(TObject* obj);
64   void Init();
65
66   // cut value setter
67   void SetMinNClusterTPC(Int_t cluster=-1)              {fMinNClusterTPC = cluster;}
68   void SetMinNClusterITS(Int_t cluster=-1)              {fMinNClusterITS = cluster;}
69   void SetMaxChi2PerClusterTPC(Double_t chi=1e99)       {fMaxChi2PerClusterTPC = chi;}
70   void SetMaxChi2PerClusterITS(Double_t chi=1e99)       {fMaxChi2PerClusterITS = chi;}
71   void SetRequireTPCRefit(Bool_t b=kFALSE)              {fRequireTPCRefit = b;}
72   void SetRequireITSRefit(Bool_t b=kFALSE)              {fRequireITSRefit = b;}
73   void SetMaxCovDiagonalElements(Float_t c1=1e99, Float_t c2=1e99, Float_t c3=1e99, Float_t c4=1e99, Float_t c5=1e99) 
74 {fCovariance11Max=c1;fCovariance22Max=c2;fCovariance33Max=c3;fCovariance44Max=c4;fCovariance55Max=c5;}
75
76   // QA histograms
77   void FillHistogramsBeforeCuts(TObject* obj) {return FillHistograms(obj,kFALSE);}
78   void FillHistogramsAfterCuts(TObject* obj)  {return FillHistograms(obj,kTRUE);}
79   void DrawHistograms(Bool_t drawLogScale=kTRUE);
80   void SaveHistograms(const Char_t* dir = 0);
81   void AddQAHistograms(TList *qaList) const;
82   // QA histogram setter
83   // please use indices from the enumeration below
84   void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
85   void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);
86
87   // indeces/counters for single selections
88   enum { 
89     kCutClusterTPC=0,   // number of clusters in TPC
90     kCutClusterITS,     // number of clusters in ITS
91     kCutChi2TPC,        // chi2 per cluster in TPC
92     kCutChi2ITS,        // chi2 per cluster in ITS
93     kCutRefitTPC,       // require TPC refit
94     kCutRefitITS,       // require ITS refit
95     kCutCovElement11,   // diagonal element 11 of covariance matrix
96     kCutCovElement22,   // diagonal element 22 of covariance matrix
97     kCutCovElement33,   // diagonal element 33 of covariance matrix
98     kCutCovElement44,   // diagonal element 44 of covariance matrix
99     kCutCovElement55,   // diagonal element 55 of covariance matrix
100     kNCuts=11,          // number of single selections
101     kNStepQA=2,         // number of QA steps (before/after the cuts)
102     kNHist=11           // number of QA histograms
103   };
104
105  private:
106   TBits* SelectionBitMap(TObject* obj);
107   void DefineHistograms();              // books histograms and TList
108   void Initialise();                    // sets everything to 0
109   void FillHistograms(TObject* obj, Bool_t b);
110                                         // Fills histograms before and after cuts
111   Double_t fMinNClusterTPC;             // min number of clusters in TPC
112   Double_t fMinNClusterITS;             // min number of clusters in ITS
113   Double_t fMaxChi2PerClusterTPC;       // max chi2 per clusters in TPC
114   Double_t fMaxChi2PerClusterITS;       // max chi2 per clusters in ITS
115   Bool_t fRequireTPCRefit;              // require TPC refit
116   Bool_t fRequireITSRefit;              // require ITS refit
117
118   Double_t fCovariance11Max ;           // max covariance matrix element 11
119   Double_t fCovariance22Max ;           // max covariance matrix element 22
120   Double_t fCovariance33Max ;           // max covariance matrix element 33
121   Double_t fCovariance44Max ;           // max covariance matrix element 44
122   Double_t fCovariance55Max ;           // max covariance matrix element 55
123
124   TH1F* fhCutStatistics;                // Histogram: statistics of what cuts the tracks did not survive
125   TH2F* fhCutCorrelation;               // Histogram: 2d statistics plot
126
127   TH1F* fhQA[kNHist][kNStepQA];         // QA Histograms
128   TBits *fBitmap ;                      // stores single selection decisions
129
130   // QA histogram setters
131   Int_t fhNBinsClusterTPC;              // number of bins+1: cluster TPC
132   Int_t fhNBinsClusterITS;              // number of bins+1: cluster ITS
133   Int_t fhNBinsChi2TPC;                 // number of bins+1: chi2 per cluster TPC
134   Int_t fhNBinsChi2ITS;                 // number of bins+1: chi2 per cluster ITS
135   Int_t fhNBinsRefitTPC;                // number of bins+1: require refit TPC
136   Int_t fhNBinsRefitITS;                // number of bins+1: require refit ITS  
137   Int_t fhNBinsCovariance11;            // number of bins+1: covariance matrix element 11
138   Int_t fhNBinsCovariance22;            // number of bins+1: covariance matrix element 22
139   Int_t fhNBinsCovariance33;            // number of bins+1: covariance matrix element 33
140   Int_t fhNBinsCovariance44;            // number of bins+1: covariance matrix element 44
141   Int_t fhNBinsCovariance55;            // number of bins+1: covariance matrix element 55
142
143   Double_t *fhBinLimClusterTPC; //[fhNBinsClusterTPC] bin limits: cluster TPC
144   Double_t *fhBinLimClusterITS; //[fhNBinsClusterITS] bin limits: cluster ITS
145   Double_t *fhBinLimChi2TPC;    //[fhNBinsChi2TPC] bin limits: chi2 per cluster TPC
146   Double_t *fhBinLimChi2ITS;    //[fhNBinsChi2ITS] bin limits: chi2 per cluster ITS
147   Double_t *fhBinLimRefitTPC;   //[fhNBinsRefitTPC] bin limits: require refit TPC
148   Double_t *fhBinLimRefitITS;   //[fhNBinsRefitITS] bin limits: require refit ITS
149   Double_t *fhBinLimCovariance11;//[fhNBinsCovariance11] bin limits: covariance matrix element 11
150   Double_t *fhBinLimCovariance22;//[fhNBinsCovariance22] bin limits: covariance matrix element 22
151   Double_t *fhBinLimCovariance33;//[fhNBinsCovariance33] bin limits: covariance matrix element 33
152   Double_t *fhBinLimCovariance44;//[fhNBinsCovariance44] bin limits: covariance matrix element 44
153   Double_t *fhBinLimCovariance55;//[fhNBinsCovariance55] bin limits: covariance matrix element 55
154
155   ClassDef(AliCFTrackQualityCuts,2);
156 };
157
158 #endif