]> git.uio.no Git - u/mrichter/AliRoot.git/blob - CORRFW/AliCFTrackIsPrimaryCuts.h
### files: AliTPCTempMap.h (.cxx)
[u/mrichter/AliRoot.git] / CORRFW / AliCFTrackIsPrimaryCuts.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 AliCFTrackIsPrimaryCut is designed to select reconstructed tracks
17 // with a small impact parameter and tracks which are (not) daughters of kink
18 // decays and to provide corresponding QA histograms.
19 // This class inherits from the Analysis' Framework abstract base class
20 // AliAnalysisCuts and is a part of the Correction Framework.
21 // This class acts on single, reconstructed tracks, it is applicable on
22 // ESD and AOD data.
23 // It mainly consists of a IsSelected function that returns a boolean.
24 // This function checks whether the considered track passes a set of cuts:
25 // - distance to main vertex in units of sigma (resolution)
26 // - require that the dca calculation doesn't fail
27 // - accept or not accept daughter tracks of kink decays
28 //
29 // The cut values for these cuts are set with the corresponding set functions.
30 // All cut classes provided by the correction framework are supposed to be
31 // added in the Analysis Framwork's class AliAnalysisFilter and applied by
32 // the filter via a loop.
33 //
34 // author: I. Kraus (Ingrid.Kraus@cern.ch)
35 // idea taken form
36 // AliESDtrackCuts writte by Jan Fiete Grosse-Oetringhaus and
37 // AliRsnDaughterCut class written by A. Pulvirenti.
38
39 #ifndef ALICFTRACKISPRIMARYCUTS_H
40 #define ALICFTRACKISPRIMARYCUTS_H
41
42 #include "AliCFCutBase.h"
43 #include "AliAODTrack.h"
44 #include <TH2.h>
45 class TBits;
46 class AliESDtrack ;
47
48 class AliCFTrackIsPrimaryCuts : public AliCFCutBase
49 {
50  public :
51   AliCFTrackIsPrimaryCuts() ;
52   AliCFTrackIsPrimaryCuts(Char_t* name, Char_t* title) ;
53   AliCFTrackIsPrimaryCuts(const AliCFTrackIsPrimaryCuts& c) ;
54   AliCFTrackIsPrimaryCuts& operator=(const AliCFTrackIsPrimaryCuts& c) ;
55   ~AliCFTrackIsPrimaryCuts();
56   void Copy(TObject &c) const;
57
58   Bool_t IsSelected(TObject* obj);
59   Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
60   void GetSigmaToVertex(AliESDtrack* esdTrack); // calculates nSigma to PV for an AliESDtrack
61
62   // cut value setter
63   void SetMaxNSigmaToVertex(Double_t sigma=1.e+03)      {fNSigmaToVertexMax = sigma;}
64   void SetRequireSigmaToVertex(Bool_t b=kFALSE) {fRequireSigmaToVertex=b;}
65   void SetAcceptKinkDaughters(Bool_t b=kTRUE)   {fAcceptKinkDaughters=b;}
66   void SetAODType(Char_t type=AliAODTrack::kUndef) {fAODType = type;}
67
68   // QA histograms
69   void DrawHistograms();
70   void SaveHistograms(const Char_t* dir = 0);
71   void AddQAHistograms(TList *qaList);
72   // QA histogram setter
73   // please use indices from the enumeration below
74   void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
75   void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);
76
77   // indeces/counters for single selections
78   enum { 
79     kCutNSigmaToVertex=0,       // tracks's distance to main vertex in units of sigma
80     kCutRequireSigmaToVertex,   // calculation is successful
81     kCutAcceptKinkDaughters,    // do (not) accept secondaries
82     kDcaXY,                     // controll histogram: dca in xy plane
83     kDcaZ,                      // controll histogram: dca along z axis
84     kDcaXYnorm,                 // controll histogram: normalised dca in xy plane
85     kDcaZnorm,                  // controll histogram: normalised dca along z axis
86     kCutAODType,                // cut on AliAODTrack::fType
87     kNCuts=4,                   // number of single selections
88     kNStepQA=2,                 // number of QA steps (before/after the cuts)
89     kNHist=7                    // number of QA histograms
90   };
91
92  private:
93   void SelectionBitMap(TObject* obj);
94   void DefineHistograms();              // books histograms and TList
95   void Initialise();                    // sets everything to 0
96   void FillHistograms(TObject* obj, Bool_t b);
97                                         // Fills histograms before and after cuts
98   Double_t fNSigmaToVertex;             // track distance to main vertex in units of sigma
99   Double_t fNSigmaToVertexMax;          // cut value: max distance to main vertex in units of sigma
100   Bool_t   fRequireSigmaToVertex;       // require calculable distance to main vertex
101   Char_t   fAODType;                    // type of AOD track (undef, primary, secondary, orphan)
102                                         // applicable at AOD level only !
103
104   TH2F* fhDcaXYvsDcaZ[2];               // Histogram: dca xy vs. z
105   TH2F* fhDcaXYvsDcaZnorm[2];           // Histogram: (dca xy / sigma xy) vs. (dca z / simga z)
106   Bool_t  fAcceptKinkDaughters;         // accepting kink daughters
107
108   TH1F* fhCutStatistics;                // Histogram: statistics of what cuts the tracks did not survive
109   TH2F* fhCutCorrelation;               // Histogram: 2d statistics plot
110
111   TH1F* fhQA[kNHist][kNStepQA];         // QA Histograms
112   TBits *fBitmap ;                      // stores single selection decisions
113
114   // QA histogram setters
115   Int_t fhNBinsNSigma;                  // number of bins+1: dca in units of sigma
116   Int_t fhNBinsRequireSigma;            // number of bins+1: require successful calcuation
117   Int_t fhNBinsAcceptKink;              // number of bins+1: acceptkink daughters
118   Int_t fhNBinsDcaXY;                   // number of bins+1: dca in transverse plane
119   Int_t fhNBinsDcaZ;                    // number of bins+1: dca along beam axis
120   Int_t fhNBinsDcaXYnorm;               // number of bins+1: normalised dca in transverse plane
121   Int_t fhNBinsDcaZnorm;                // number of bins+1: normalised dca along beam axis
122
123   Double_t *fhBinLimNSigma; //[fhNBinsNSigma] bin limits: dca in units of sigma
124   Double_t *fhBinLimRequireSigma;//[fhNBinsRequireSigma] bin limits: require successful calcuation
125   Double_t *fhBinLimAcceptKink;//[fhNBinsAcceptKink] bin limits: acceptkink daughters
126   Double_t *fhBinLimDcaXY;//[fhNBinsDcaXY] bin limits: dca in transverse plane
127   Double_t *fhBinLimDcaZ; //[fhNBinsDcaZ] bin limits: dca along beam axis
128   Double_t *fhBinLimDcaXYnorm; //[fhNBinsDcaXYnorm] bin limits: normalised dca in transverse plane
129   Double_t *fhBinLimDcaZnorm;//[fhNBinsDcaZnorm] bin limits: normalised dca along beam axis
130
131   ClassDef(AliCFTrackIsPrimaryCuts,3);
132 };
133
134 #endif