]> git.uio.no Git - u/mrichter/AliRoot.git/blob - CORRFW/AliCFTrackIsPrimaryCuts.h
This commit was generated by cvs2svn to compensate for changes in r23278,
[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
44 class TBits;
45 class TH2;
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   void GetBitMap(TObject* obj, TBits *bitmap);
59   Bool_t IsSelected(TObject* obj);
60   void Init();
61   Float_t GetSigmaToVertex(AliESDtrack* esdTrack) const;
62
63   // cut value setter
64   void SetMaxNSigmaToVertex(Double_t sigma=3)   {fNSigmaToVertexMax = sigma;}
65   void SetRequireSigmaToVertex(Bool_t b=kTRUE)  {fRequireSigmaToVertex=b;}
66   void SetAcceptKinkDaughters(Bool_t b=kTRUE)   {fAcceptKinkDaughters=b;}
67
68   // QA histograms
69   void FillHistogramsBeforeCuts(TObject* obj) {return FillHistograms(obj,kFALSE);}
70   void FillHistogramsAfterCuts(TObject* obj)  {return FillHistograms(obj,kTRUE);}
71   void DrawHistograms();
72   void SaveHistograms(const Char_t* dir = 0);
73   void AddQAHistograms(TList *qaList) const;
74   // QA histogram setter
75   // please use indices from the enumeration below
76   void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
77   void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);
78
79   // indeces/counters for single selections
80   enum { 
81     kCutNSigmaToVertex=0,       // tracks's distance to main vertex in units of sigma
82     kCutRequireSigmaToVertex,   // calculation is successful
83     kCutAcceptKinkDaughters,    // do (not) accept secondaries
84     kDcaXY,                     // controll histogram: dca in xy plane
85     kDcaZ,                      // controll histogram: dca along z axis
86     kDcaXYnorm,                 // controll histogram: normalised dca in xy plane
87     kDcaZnorm,                  // controll histogram: normalised dca along z axis
88     kNCuts=3,                   // number of single selections
89     kNStepQA=2,                 // number of QA steps (before/after the cuts)
90     kNHist=7                    // number of QA histograms
91   };
92
93  private:
94   TBits* SelectionBitMap(TObject* obj);
95   void DefineHistograms();              // books histograms and TList
96   void Initialise();                    // sets everything to 0
97   void FillHistograms(TObject* obj, Bool_t b);
98                                         // Fills histograms before and after cuts
99   Double_t fNSigmaToVertexMax;          // max distance to main vertex in units of sigma
100   Bool_t  fRequireSigmaToVertex;        // require calculable distance to main vertex
101
102   TH2F* fhDcaXYvsDcaZ[2];               // Histogram: dca xy vs. z
103   TH2F* fhDcaXYvsDcaZnorm[2];           // Histogram: (dca xy / sigma xy) vs. (dca z / simga z)
104   Bool_t  fAcceptKinkDaughters;         // accepting kink daughters
105
106   TH1F* fhCutStatistics;              // Histogram: statistics of what cuts the tracks did not survive
107   TH2F* fhCutCorrelation;             // Histogram: 2d statistics plot
108
109   TH1F* fhQA[kNHist][kNStepQA];         // QA Histograms
110   TBits *fBitmap ;                              // stores single selection decisions
111
112   // QA histogram setters
113   Int_t fhNBinsNSigma;                  // number of bins: dca in units of sigma
114   Int_t fhNBinsRequireSigma;    // number of bins: require successful calcuation
115   Int_t fhNBinsAcceptKink;              // number of bins: acceptkink daughters
116   Int_t fhNBinsDcaXY;                   // number of bins: dca in transverse plane
117   Int_t fhNBinsDcaZ;                    // number of bins: dca along beam axis
118   Int_t fhNBinsDcaXYnorm;               // number of bins: normalised dca in transverse plane
119   Int_t fhNBinsDcaZnorm;                // number of bins: normalised dca along beam axis
120   
121   Double_t *fhBinLimNSigma;             // bin limits: dca in units of sigma
122   Double_t *fhBinLimRequireSigma;       // bin limits: require successful calcuation
123   Double_t *fhBinLimAcceptKink;         // bin limits: acceptkink daughters
124   Double_t *fhBinLimDcaXY;              // bin limits: dca in transverse plane
125   Double_t *fhBinLimDcaZ;                       // bin limits: dca along beam axis
126   Double_t *fhBinLimDcaXYnorm;  // bin limits: normalised dca in transverse plane
127   Double_t *fhBinLimDcaZnorm;           // bin limits: normalised dca along beam axis
128   
129   ClassDef(AliCFTrackIsPrimaryCuts,1);
130 };
131
132 #endif