ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// The class AliCFTrackQualityCuts is designed to select reconstructed tracks
// of high quality and to provide corresponding QA histograms.
// This class inherits from the Analysis' Framework abstract base class
// AliAnalysisCuts and is a part of the Correction Framework.
// This class acts on single, reconstructed tracks, it is applicable on
// ESD and AOD data.
// It mainly consists of a IsSelected function that returns a boolean.
// This function checks whether the considered track passes a set of cuts:
// - number of clusters in the ITS
// - number of clusters in the TPC
// - number of clusters in the TRD
// - ratio of found / finable number of clusters in the TPC
// - number of tracklets in the TRD
// - number TRD tracklets used for pid
// - chi2 / cluster in the ITS
// - chi2 / cluster in the TPC
// - chi2 / tracklet in the TRD
// - number of clusters in the TPC used for dEdx calculation
// - covariance matrix diagonal elements
// - track status (cf AliESDtrack.h)
//
// The cut values for these cuts are set with the corresponding set functions.
// All cut classes provided by the correction framework are supposed to be
// added in the Analysis Framwork's class AliAnalysisFilter and applied by
// the filter via a loop.
//
// author: I. Kraus (Ingrid.Kraus@cern.ch)
// idea taken form
// AliESDtrackCuts writte by Jan Fiete Grosse-Oetringhaus and
// AliRsnDaughterCut class written by A. Pulvirenti.

#ifndef ALICFTRACKQUALITYCUTS_H
#define ALICFTRACKQUALITYCUTS_H

#include "AliCFCutBase.h"

class TH2F;
class TH1F;
class TBits;
class AliESDtrack;
class AliESDtrackCuts;

class AliCFTrackQualityCuts : public AliCFCutBase
{
 public :
  AliCFTrackQualityCuts() ;
  AliCFTrackQualityCuts(Char_t* name, Char_t* title) ;
  AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) ;
  AliCFTrackQualityCuts& operator=(const AliCFTrackQualityCuts& c) ;
  ~AliCFTrackQualityCuts();
  void Copy(TObject &c) const;

  Bool_t IsSelected(TObject* obj);
  Bool_t IsSelected(TList* /*list*/) {return kTRUE;}

  // cut value setter
  void SetMinNClusterTPC(Int_t cluster=-1)		{fMinNClusterTPC = cluster;}
  void SetMinNClusterITS(Int_t cluster=-1)		{fMinNClusterITS = cluster;}
  void SetMinNClusterTRD(Int_t cluster=-1)		{fMinNClusterTRD = cluster;}
  void SetMinFoundClusterTPC(Double_t fraction=-1)	{fMinFoundClusterTPC = fraction;}
  void SetMinNTrackletTRD(Int_t tracklet=-1)		{fMinNTrackletTRD = tracklet;}
  void SetMinNTrackletTRDpid(Int_t tracklet=-1)		{fMinNTrackletTRDpid = tracklet;}
  void SetMaxChi2PerClusterTPC(Double_t chi=1.e+09)	{fMaxChi2PerClusterTPC = chi;}
  void SetMaxChi2PerClusterITS(Double_t chi=1.e+09)	{fMaxChi2PerClusterITS = chi;}
  void SetMaxChi2PerTrackletTRD(Double_t chi=1.e+09)	{fMaxChi2PerTrackletTRD = chi;}
  void SetMinNdEdxClusterTPC(UShort_t cluster=0)	{fMinNdEdxClusterTPC = cluster;}
  void SetMaxCovDiagonalElements(Float_t c1=1.e+09, Float_t c2=1.e+09, Float_t c3=1.e+09, Float_t c4=1.e+09, Float_t c5=1.e+09) 
{fCovariance11Max=c1;fCovariance22Max=c2;fCovariance33Max=c3;fCovariance44Max=c4;fCovariance55Max=c5;}
  void SetStatus(ULong_t status=0) {fStatus = status ;}

  // QA histograms
  void DrawHistograms(Bool_t drawLogScale=kTRUE);
  void SaveHistograms(const Char_t* dir = 0);
  void AddQAHistograms(TList *qaList);
  // QA histogram setter
  // please use indices from the enumeration below
  void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
  void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);

  // indeces/counters for single selections
  enum { 
    kCutClusterTPC=0,	// number of clusters in TPC
    kCutClusterITS,	// number of clusters in ITS
    kCutClusterTRD,	// number of clusters in TRD
    kCutMinFoundClusterTPC,	// ratio found / findable number of clusters in TPC
    kCutTrackletTRD,	// number of tracklets in TRD
    kCutTrackletTRDpid,	// tracklets for TRD pid
    kCutChi2TPC,	// chi2 per cluster in TPC
    kCutChi2ITS,	// chi2 per cluster in ITS
    kCutChi2TRD,	// chi2 per cluster in TRD
    kCutdEdxClusterTPC,	// number of points used for dEdx
    kCutCovElement11,	// diagonal element 11 of covariance matrix
    kCutCovElement22,	// diagonal element 22 of covariance matrix
    kCutCovElement33,	// diagonal element 33 of covariance matrix
    kCutCovElement44,	// diagonal element 44 of covariance matrix
    kCutCovElement55,	// diagonal element 55 of covariance matrix
    kCutStatus,         // track status
    kNCuts,		// number of single selections
    kNStepQA=2,		// number of QA steps (before/after the cuts)
    kNHist=15		// number of QA histograms
  };

 private:
  void SelectionBitMap(TObject* obj);
  void DefineHistograms(); 		// books histograms and TList
  void Initialise();			// sets everything to 0
  void FillHistograms(TObject* obj, Bool_t b);
					// Fills histograms before and after cuts
  Int_t fMinNClusterTPC;		// min number of clusters in TPC
  Int_t fMinNClusterITS;		// min number of clusters in ITS
  Double_t fMinNClusterTRD;		// min number of clusters in TRD
  Double_t fMinFoundClusterTPC;		// min ratio found / findable number of clusters in TPC
  Double_t fMinNTrackletTRD;		// min number of tracklets in TRD
  Double_t fMinNTrackletTRDpid;		// min number of tracklets for TRD pid
  Double_t fMaxChi2PerClusterTPC;	// max chi2 per clusters in TPC
  Double_t fMaxChi2PerClusterITS;	// max chi2 per clusters in ITS
  Double_t fMaxChi2PerTrackletTRD;	// max chi2 per clusters in TRD
  UShort_t fMinNdEdxClusterTPC;		// number of points used for dEdx
  Double_t fCovariance11Max ;		// max covariance matrix element 11
  Double_t fCovariance22Max ;		// max covariance matrix element 22
  Double_t fCovariance33Max ;		// max covariance matrix element 33
  Double_t fCovariance44Max ;		// max covariance matrix element 44
  Double_t fCovariance55Max ;		// max covariance matrix element 55

  ULong_t fStatus;    // track status

  TH1F* fhCutStatistics;		// Histogram: statistics of what cuts the tracks did not survive
  TH2F* fhCutCorrelation;		// Histogram: 2d statistics plot

  TH1F* fhQA[kNHist][kNStepQA];		// QA Histograms
  TBits *fBitmap ; 			// stores single selection decisions
  AliESDtrackCuts *fTrackCuts;		// use some functionality from this class

  // QA histogram setters
  Int_t fhNBinsClusterTPC;		// number of bins+1: cluster TPC
  Int_t fhNBinsClusterITS;		// number of bins+1: cluster ITS
  Int_t fhNBinsClusterTRD;		// number of bins+1: cluster TRD
  Int_t fhNBinsFoundClusterTPC;		// number of bins+1: ratio found / findable number of clusters in TPC
  Int_t fhNBinsTrackletTRD;		// number of bins+1: number of tracklets in TRD
  Int_t fhNBinsTrackletTRDpid;		// number of bins+1: number of tracklets for TRD pid
  Int_t fhNBinsChi2TPC;			// number of bins+1: chi2 per cluster TPC
  Int_t fhNBinsChi2ITS;			// number of bins+1: chi2 per cluster ITS
  Int_t fhNBinsChi2TRD;			// number of bins+1: chi2 per cluster TRD
  Int_t fhNBinsdEdxClusterTPC;		// number of bins+1: cluster TPC used for dEdx
  Int_t fhNBinsCovariance11;		// number of bins+1: covariance matrix element 11
  Int_t fhNBinsCovariance22;		// number of bins+1: covariance matrix element 22
  Int_t fhNBinsCovariance33;		// number of bins+1: covariance matrix element 33
  Int_t fhNBinsCovariance44;		// number of bins+1: covariance matrix element 44
  Int_t fhNBinsCovariance55;		// number of bins+1: covariance matrix element 55

  Double_t *fhBinLimClusterTPC;	//[fhNBinsClusterTPC] bin limits: cluster TPC
  Double_t *fhBinLimClusterITS;	//[fhNBinsClusterITS] bin limits: cluster ITS
  Double_t *fhBinLimClusterTRD;	//[fhNBinsClusterTRD] bin limits: cluster TRD
  Double_t *fhBinLimFoundClusterTPC;//[fhNBinsFoundClusterTPC] bin limits: ratio found / findable number of clusters in TPC
  Double_t *fhBinLimTrackletTRD;    //[fhNBinsTrackletTRD] bin limits: number of tracklets in TRD
  Double_t *fhBinLimTrackletTRDpid; //[fhNBinsTrackletTRDpid] bin limits: number of tracklets for TRD pid
  Double_t *fhBinLimChi2TPC;	//[fhNBinsChi2TPC] bin limits: chi2 per cluster TPC
  Double_t *fhBinLimChi2ITS;	//[fhNBinsChi2ITS] bin limits: chi2 per cluster ITS
  Double_t *fhBinLimChi2TRD;	//[fhNBinsChi2TRD] bin limits: chi2 per cluster TRD
  Double_t *fhBinLimdEdxClusterTPC;	//[fhNBinsdEdxClusterTPC] bin limits: cluster TPC used for dEdx
  Double_t *fhBinLimCovariance11;//[fhNBinsCovariance11] bin limits: covariance matrix element 11
  Double_t *fhBinLimCovariance22;//[fhNBinsCovariance22] bin limits: covariance matrix element 22
  Double_t *fhBinLimCovariance33;//[fhNBinsCovariance33] bin limits: covariance matrix element 33
  Double_t *fhBinLimCovariance44;//[fhNBinsCovariance44] bin limits: covariance matrix element 44
  Double_t *fhBinLimCovariance55;//[fhNBinsCovariance55] bin limits: covariance matrix element 55

  ClassDef(AliCFTrackQualityCuts,4);
};

#endif
 AliCFTrackQualityCuts.h:1
 AliCFTrackQualityCuts.h:2
 AliCFTrackQualityCuts.h:3
 AliCFTrackQualityCuts.h:4
 AliCFTrackQualityCuts.h:5
 AliCFTrackQualityCuts.h:6
 AliCFTrackQualityCuts.h:7
 AliCFTrackQualityCuts.h:8
 AliCFTrackQualityCuts.h:9
 AliCFTrackQualityCuts.h:10
 AliCFTrackQualityCuts.h:11
 AliCFTrackQualityCuts.h:12
 AliCFTrackQualityCuts.h:13
 AliCFTrackQualityCuts.h:14
 AliCFTrackQualityCuts.h:15
 AliCFTrackQualityCuts.h:16
 AliCFTrackQualityCuts.h:17
 AliCFTrackQualityCuts.h:18
 AliCFTrackQualityCuts.h:19
 AliCFTrackQualityCuts.h:20
 AliCFTrackQualityCuts.h:21
 AliCFTrackQualityCuts.h:22
 AliCFTrackQualityCuts.h:23
 AliCFTrackQualityCuts.h:24
 AliCFTrackQualityCuts.h:25
 AliCFTrackQualityCuts.h:26
 AliCFTrackQualityCuts.h:27
 AliCFTrackQualityCuts.h:28
 AliCFTrackQualityCuts.h:29
 AliCFTrackQualityCuts.h:30
 AliCFTrackQualityCuts.h:31
 AliCFTrackQualityCuts.h:32
 AliCFTrackQualityCuts.h:33
 AliCFTrackQualityCuts.h:34
 AliCFTrackQualityCuts.h:35
 AliCFTrackQualityCuts.h:36
 AliCFTrackQualityCuts.h:37
 AliCFTrackQualityCuts.h:38
 AliCFTrackQualityCuts.h:39
 AliCFTrackQualityCuts.h:40
 AliCFTrackQualityCuts.h:41
 AliCFTrackQualityCuts.h:42
 AliCFTrackQualityCuts.h:43
 AliCFTrackQualityCuts.h:44
 AliCFTrackQualityCuts.h:45
 AliCFTrackQualityCuts.h:46
 AliCFTrackQualityCuts.h:47
 AliCFTrackQualityCuts.h:48
 AliCFTrackQualityCuts.h:49
 AliCFTrackQualityCuts.h:50
 AliCFTrackQualityCuts.h:51
 AliCFTrackQualityCuts.h:52
 AliCFTrackQualityCuts.h:53
 AliCFTrackQualityCuts.h:54
 AliCFTrackQualityCuts.h:55
 AliCFTrackQualityCuts.h:56
 AliCFTrackQualityCuts.h:57
 AliCFTrackQualityCuts.h:58
 AliCFTrackQualityCuts.h:59
 AliCFTrackQualityCuts.h:60
 AliCFTrackQualityCuts.h:61
 AliCFTrackQualityCuts.h:62
 AliCFTrackQualityCuts.h:63
 AliCFTrackQualityCuts.h:64
 AliCFTrackQualityCuts.h:65
 AliCFTrackQualityCuts.h:66
 AliCFTrackQualityCuts.h:67
 AliCFTrackQualityCuts.h:68
 AliCFTrackQualityCuts.h:69
 AliCFTrackQualityCuts.h:70
 AliCFTrackQualityCuts.h:71
 AliCFTrackQualityCuts.h:72
 AliCFTrackQualityCuts.h:73
 AliCFTrackQualityCuts.h:74
 AliCFTrackQualityCuts.h:75
 AliCFTrackQualityCuts.h:76
 AliCFTrackQualityCuts.h:77
 AliCFTrackQualityCuts.h:78
 AliCFTrackQualityCuts.h:79
 AliCFTrackQualityCuts.h:80
 AliCFTrackQualityCuts.h:81
 AliCFTrackQualityCuts.h:82
 AliCFTrackQualityCuts.h:83
 AliCFTrackQualityCuts.h:84
 AliCFTrackQualityCuts.h:85
 AliCFTrackQualityCuts.h:86
 AliCFTrackQualityCuts.h:87
 AliCFTrackQualityCuts.h:88
 AliCFTrackQualityCuts.h:89
 AliCFTrackQualityCuts.h:90
 AliCFTrackQualityCuts.h:91
 AliCFTrackQualityCuts.h:92
 AliCFTrackQualityCuts.h:93
 AliCFTrackQualityCuts.h:94
 AliCFTrackQualityCuts.h:95
 AliCFTrackQualityCuts.h:96
 AliCFTrackQualityCuts.h:97
 AliCFTrackQualityCuts.h:98
 AliCFTrackQualityCuts.h:99
 AliCFTrackQualityCuts.h:100
 AliCFTrackQualityCuts.h:101
 AliCFTrackQualityCuts.h:102
 AliCFTrackQualityCuts.h:103
 AliCFTrackQualityCuts.h:104
 AliCFTrackQualityCuts.h:105
 AliCFTrackQualityCuts.h:106
 AliCFTrackQualityCuts.h:107
 AliCFTrackQualityCuts.h:108
 AliCFTrackQualityCuts.h:109
 AliCFTrackQualityCuts.h:110
 AliCFTrackQualityCuts.h:111
 AliCFTrackQualityCuts.h:112
 AliCFTrackQualityCuts.h:113
 AliCFTrackQualityCuts.h:114
 AliCFTrackQualityCuts.h:115
 AliCFTrackQualityCuts.h:116
 AliCFTrackQualityCuts.h:117
 AliCFTrackQualityCuts.h:118
 AliCFTrackQualityCuts.h:119
 AliCFTrackQualityCuts.h:120
 AliCFTrackQualityCuts.h:121
 AliCFTrackQualityCuts.h:122
 AliCFTrackQualityCuts.h:123
 AliCFTrackQualityCuts.h:124
 AliCFTrackQualityCuts.h:125
 AliCFTrackQualityCuts.h:126
 AliCFTrackQualityCuts.h:127
 AliCFTrackQualityCuts.h:128
 AliCFTrackQualityCuts.h:129
 AliCFTrackQualityCuts.h:130
 AliCFTrackQualityCuts.h:131
 AliCFTrackQualityCuts.h:132
 AliCFTrackQualityCuts.h:133
 AliCFTrackQualityCuts.h:134
 AliCFTrackQualityCuts.h:135
 AliCFTrackQualityCuts.h:136
 AliCFTrackQualityCuts.h:137
 AliCFTrackQualityCuts.h:138
 AliCFTrackQualityCuts.h:139
 AliCFTrackQualityCuts.h:140
 AliCFTrackQualityCuts.h:141
 AliCFTrackQualityCuts.h:142
 AliCFTrackQualityCuts.h:143
 AliCFTrackQualityCuts.h:144
 AliCFTrackQualityCuts.h:145
 AliCFTrackQualityCuts.h:146
 AliCFTrackQualityCuts.h:147
 AliCFTrackQualityCuts.h:148
 AliCFTrackQualityCuts.h:149
 AliCFTrackQualityCuts.h:150
 AliCFTrackQualityCuts.h:151
 AliCFTrackQualityCuts.h:152
 AliCFTrackQualityCuts.h:153
 AliCFTrackQualityCuts.h:154
 AliCFTrackQualityCuts.h:155
 AliCFTrackQualityCuts.h:156
 AliCFTrackQualityCuts.h:157
 AliCFTrackQualityCuts.h:158
 AliCFTrackQualityCuts.h:159
 AliCFTrackQualityCuts.h:160
 AliCFTrackQualityCuts.h:161
 AliCFTrackQualityCuts.h:162
 AliCFTrackQualityCuts.h:163
 AliCFTrackQualityCuts.h:164
 AliCFTrackQualityCuts.h:165
 AliCFTrackQualityCuts.h:166
 AliCFTrackQualityCuts.h:167
 AliCFTrackQualityCuts.h:168
 AliCFTrackQualityCuts.h:169
 AliCFTrackQualityCuts.h:170
 AliCFTrackQualityCuts.h:171
 AliCFTrackQualityCuts.h:172
 AliCFTrackQualityCuts.h:173
 AliCFTrackQualityCuts.h:174
 AliCFTrackQualityCuts.h:175
 AliCFTrackQualityCuts.h:176
 AliCFTrackQualityCuts.h:177
 AliCFTrackQualityCuts.h:178
 AliCFTrackQualityCuts.h:179
 AliCFTrackQualityCuts.h:180
 AliCFTrackQualityCuts.h:181
 AliCFTrackQualityCuts.h:182
 AliCFTrackQualityCuts.h:183
 AliCFTrackQualityCuts.h:184
 AliCFTrackQualityCuts.h:185