-Move cent, z axis into sparse
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliConversionTrackCuts.h
1 #ifndef ALICONVERSIONTRACKCUTS_H
2 #define ALICONVERSIONTRACKCUTS_H
3
4 // Class handling all kinds of selection cuts for Gamma Conversion analysis
5 // Authors: (this code is mostly copied from AliRsnTrackQuality) adapted by Svein Lindal        *
6
7 class TH2F;
8 class AliESDtrackCuts;
9 class TList;
10 #include "AliAODTrack.h"
11 #include "AliESDtrack.h"
12 #include "AliAnalysisCuts.h"
13
14 using namespace std;
15
16 class AliConversionTrackCuts : public AliAnalysisCuts {
17         
18 public:
19   
20   enum CTCuts_t {
21         kPreCut = -1,
22         kCutNcls,
23         kCutNclsFrac,
24         kCutNDF,
25         kCutKinc,
26         kCutDCAZ,
27         kCutDCAXY,
28         kCutTPCRefit,
29         kNCuts
30   };
31
32 //  enum trackVal {
33 //      kPt = 0, 
34 //      kPhi,
35 //      kEta,
36 //      kNVar
37 //  };
38   static const char * fgkCutNames[kNCuts];
39
40   Bool_t IsSelected(TObject * object ); 
41   Bool_t IsSelected(TList * /*list*/) { return kFALSE; }
42   Bool_t AcceptTrack(AliAODTrack * track);
43   Bool_t AcceptTrack(AliESDtrack * track);
44   void FillDCAHist(Float_t dcaz, Float_t dcaxy, AliVTrack * track);
45   AliConversionTrackCuts();
46   AliConversionTrackCuts(TString name, TString title);
47   ~AliConversionTrackCuts();
48
49   void      AddStatusFlag(ULong_t f, Bool_t on)       {if (on) fFlagsOn = fFlagsOn | f; else fFlagsOff = fFlagsOff | f;}
50   void      SetStatusFlags(ULong_t f, Bool_t on)      {if (on) fFlagsOn = f; else fFlagsOff = f;}
51   
52   void      SetDCARPtFormula(const char *formula)     {fDCARptFormula = formula; fDCARfixed = kFALSE;}
53   void      SetDCARmax(Double_t value)                {fDCARmax = value; fDCARptFormula = ""; fDCARfixed = kTRUE;}
54   void      SetDCAZPtFormula(const char *formula)     {fDCAZptFormula = formula; fDCAZfixed = kFALSE;}
55   void      SetDCAZmax(Double_t value)                {fDCAZmax = value; fDCAZptFormula = ""; fDCAZfixed = kTRUE;}
56   void      SetDCAXYmax(Double_t value)                {fDCAXYmax = value*value;}
57   
58   void      SetSPDminNClusters(Int_t value)           {fSPDminNClusters = value;}
59   void      SetITSminNClusters(Int_t value)           {fITSminNClusters = value;}
60   void      SetITSmaxChi2(Double_t value)             {fITSmaxChi2 = value;}
61   
62   void      SetTPCminNClusters(Int_t value)           {fTPCminNClusters = value;}
63   void      SetTPCCFoundClusters(Double_t value)           {fTPCClusOverFindable = value;}
64   void      SetTPCmaxChi2(Double_t value)             {fTPCmaxChi2 = value;}
65   
66   void      SetRejectKinkDaughters(Bool_t yn = kTRUE) {fRejectKinkDaughters = yn;}  
67   void      SetAODTestFilterBit(Int_t value)          {fAODTestFilterBit = value;}
68
69   void      SetRequireTPCRefit(Bool_t require)        { fRequireTPCRefit = require; }
70   void      SetDefaults2010();
71   
72   TList * CreateHistograms();
73   void FillHistograms(Int_t cutIndex, AliVTrack * track, Bool_t passed);
74   virtual void   Print(const Option_t *option = "") const;
75
76 protected :
77
78    ULong_t    fFlagsOn;                // status flags which must be ON (used AliESDtrack ones, connected with '|')
79    ULong_t    fFlagsOff;               // status flags which must be OFF (used AliESDtrack ones, connected with '|')
80    Bool_t     fRejectKinkDaughters;    // switch to kTRUE if daughters of kinks must be rejected
81
82    Bool_t     fDCARfixed;              // flag to switch between fixed and pt-dependent DCA cut
83    TString    fDCARptFormula;          // expression to compute transverse DCA sigma w.r. to pt
84    Double_t   fDCARmax;                // maximum value for transverse DCA
85
86    Bool_t     fDCAZfixed;              // flag to switch between fixed and pt-dependent DCA cut
87    TString    fDCAZptFormula;          // expression to compute longitudinal DCA sigma w.r. to pt
88    Double_t   fDCAZmax;                // maximum value for longitudinal DCA
89
90   Double_t fDCAXYmax;                  // maximum xy value for dca
91
92    Int_t      fSPDminNClusters;        // minimum number of required clusters in SPD
93    Int_t      fITSminNClusters;        // minimum number of required clusters in ITS
94    Double_t   fITSmaxChi2;             // maximum chi2 / number of clusters in ITS
95
96    Int_t      fTPCminNClusters;        // minimum number of required clusters in TPC
97    Double_t   fTPCClusOverFindable;        // minimum number of required clusters in TPC
98    Double_t   fTPCmaxChi2;             // maximum chi2 / number of clusters in TPC
99    Int_t      fAODTestFilterBit;       // test filter bit for AOD tracks
100   Bool_t      fRequireTPCRefit;        // Require TPC refit
101
102   AliESDtrackCuts * fESDCuts;
103
104   TH2F * fhPhi;
105   TH2F * fhPt;
106   TH2F * fhPhiPt;
107   TH2F * fhdcaxyPt;
108   TH2F * fhdcazPt;
109   TH2F * fhdca;
110   TH2F * fhnclpt;
111   TH2F * fhnclsfpt;
112   
113  // TAxis fCutAxis;
114  // TAxisArr fCutVarAxes[kNCuts];
115  // TAxisArr fVarAxes[kNVar];
116
117   TList * fHistograms;
118
119   AliConversionTrackCuts(const AliConversionTrackCuts&); // not implemented
120   AliConversionTrackCuts& operator=(const AliConversionTrackCuts&); // not implemented
121
122   ClassDef(AliConversionTrackCuts,2)
123
124
125 };
126
127
128 //__________________________________________________________________________________________________
129 inline void AliConversionTrackCuts::SetDefaults2010()
130 {
131 //
132 // Default settings for cuts used in 2010
133 //
134
135    SetDCAZmax(3.0);
136    SetDCAXYmax(2.5);
137    SetTPCminNClusters(70);
138    SetTPCmaxChi2(12.0);
139    SetRejectKinkDaughters();
140 }
141
142 #endif