adding AliPPVsMultUtils to event cuts
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TestAOD / AliSpectraBothEventCuts.h
1 #ifndef ALISPECTRABOTHEVENTCUTS_H
2 #define ALISPECTRABOTHEVENTCUTS_H
3
4 /*  See cxx source for full Copyright notice */
5
6 //-------------------------------------------------------------------------
7 //                      AliSpectraBothEventCuts
8 //
9 //
10 //
11 //
12 // Authors: Michele Floris, CERN, Philip Versteeg, UU, Redmer Bertens, UU
13 //-------------------------------------------------------------------------
14
15 class AliVEvent;
16 class AliSpectraBothTrackCuts;
17 //class AliSpectraBothHistoManager;
18
19 #include "TH1I.h"
20 #include "TNamed.h"
21 #include "AliSpectraBothTrackCuts.h"
22 #include "AliAnalysisUtils.h"   
23 #include "AliPPVsMultUtils.h"   
24
25 class AliSpectraBothEventCuts : public TNamed
26 {
27  public:
28   enum {  kProcessedEvents = 0, // all events 
29 kPhysSelEvents, // phys selected and not pile-up
30 kAcceptedEvents, // events passing all cuts  
31 kGoodVtx,// events with good veretx and   
32 kVtxCentral, 
33 kVtxNoEvent, 
34 kQVector,
35 kTPCasPV,
36 kZeroCont,
37 kNVtxCuts};
38 enum {kDoNotCheckforSDD=0,kwithSDD,kwithoutSDD};        
39
40   // Constructors
41  AliSpectraBothEventCuts() : TNamed(), fAOD(0),fAODEvent(AliSpectraBothTrackCuts::kAODobject),fTrackBits(0), fIsMC(0), fCentEstimator(""), fUseCentPatchAOD049(0),fUseSDDPatchforLHC11a(kDoNotCheckforSDD),fTriggerSettings(AliVEvent::kMB),fTrackCuts(0),
42 fIsSelected(0), fCentralityCutMin(0), fCentralityCutMax(0), fQVectorCutMin(0), fQVectorCutMax(0), fVertexCutMin(0), 
43 fVertexCutMax(0), fMultiplicityCutMin(0), fMultiplicityCutMax(0), fMaxChi2perNDFforVertex(0),fMinRun(0),fMaxRun(0),fetarangeofmultiplicitycut(0.0),fUseAliPPVsMultUtils(false),
44 fHistoCuts(0),fHistoVtxBefSel(0),fHistoVtxAftSel(0),fHistoEtaBefSel(0),fHistoEtaAftSel(0),
45 fHistoNChAftSel(0),fHistoQVector(0),fHistoEP(0), fHistoVtxAftSelwithoutZvertexCut(0),fHistoVtxalltriggerEventswithMCz(0),fHistoVtxAftSelwithoutZvertexCutusingMCz(0),fHistoRunNumbers(0),fHistoCentrality(0),fHistoMultiplicty(0),fAnalysisUtils(0),fAliPPVsMultUtils(0)
46
47 {}
48   AliSpectraBothEventCuts(const char *name);
49   virtual ~AliSpectraBothEventCuts();// {}
50   
51   void SetIsMC(Bool_t isMC = kFALSE)    {fIsMC = isMC; };
52   Bool_t GetIsMC()           const           { return fIsMC;};
53   void SetCentEstimator(TString cent = "V0M")    {fCentEstimator = cent; };
54   TString GetCentFromV0()           const           { return fCentEstimator;};
55   
56   void SetUseCentPatchAOD049(Bool_t useCentPatchAOD049 = kFALSE)    {fUseCentPatchAOD049 = useCentPatchAOD049; };
57   Bool_t GetUseCentPatchAOD049()           const           { return fUseCentPatchAOD049;};
58   void  SetUseSDDPatchforLHC11a(Int_t useSDDPatchforLHC11a) {fUseSDDPatchforLHC11a=useSDDPatchforLHC11a;} ;  
59   Int_t GetUseSDDPatchforLHC11a() {return fUseSDDPatchforLHC11a;};   
60
61    void   SetTriggerSettings(UInt_t triggerSettings = AliVEvent::kMB) {fTriggerSettings = triggerSettings;};
62    UInt_t   GetTriggerSettings() {return fTriggerSettings;};
63
64
65
66   // Methods
67   Bool_t IsSelected(AliVEvent * aod,AliSpectraBothTrackCuts     *trackcuts, Bool_t isMC=kFALSE, Double_t mcZ=-100.0);
68   Bool_t CheckVtx();
69   Bool_t CheckCentralityCut();
70   Bool_t CheckMultiplicityCut();
71   Bool_t CheckQVectorCut();
72   Bool_t CheckVtxChi2perNDF();
73   void  SetCentralityCutMin(Float_t cut)  { fCentralityCutMin = cut; }
74   void  SetCentralityCutMax(Float_t cut)  { fCentralityCutMax = cut; }
75   //void  SetQVectorPosCut(Float_t min,Float_t max)  { fQVectorPosCutMin = min; fQVectorPosCutMax = max; }
76   //void  SetQVectorNegCut(Float_t min,Float_t max)  { fQVectorNegCutMin = min; fQVectorNegCutMax = max; }
77   void  SetQVectorCut(Float_t min,Float_t max)  { fQVectorCutMin = min; fQVectorCutMax = max; }
78   void  SetVertexCut(Float_t min,Float_t max)  { fVertexCutMin = min; fVertexCutMax = max; }
79   void  SetMultiplicityCut(Int_t min,Int_t max)  { fMultiplicityCutMin = min; fMultiplicityCutMax = max; }
80   void SetTrackBits(UInt_t TrackBits) {fTrackBits=TrackBits;}
81   void SetMaxChi2perNDFforVertex(Float_t cut) { fMaxChi2perNDFforVertex=cut;}
82   void SetRunNumberRange(Int_t min,Int_t max);  
83   void SetEtaRangeforMultiplictyCut(Float_t eta) {fetarangeofmultiplicitycut=eta;}
84   void  SetAnalysisUtils(AliAnalysisUtils* inAnalysisUtils){fAnalysisUtils=inAnalysisUtils;}
85   void SetUseAliPPVsMultUtils(Bool_t flag){fUseAliPPVsMultUtils=flag;} 
86  
87   UInt_t GetTrackType()  const    { return fTrackBits;}
88   TH1I * GetHistoCuts()         {  return fHistoCuts; }
89   TH1F * GetHistoVtxBefSel()         {  return fHistoVtxBefSel; }
90   TH1F * GetHistoVtxAftSel()         {  return fHistoVtxAftSel; }
91   TH1F * GetHistoVtxAftSelwithoutZvertexCut()         {  return fHistoVtxAftSelwithoutZvertexCut; }
92   TH1F * GetHistoVtxGenerated()         {  return fHistoVtxalltriggerEventswithMCz; }
93   TH1F * GetHistoVtxAftSelwithoutZvertexCutusingMCz()         {  return fHistoVtxAftSelwithoutZvertexCutusingMCz; }
94
95   TH1F * GetHistoEtaBefSel()         {  return fHistoEtaBefSel; }
96   TH1F * GetHistoEtaAftSel()         {  return fHistoEtaAftSel; }
97   TH1F * GetHistoNChAftSel()         {  return fHistoNChAftSel; }
98   /* TH1F * GetHistoQVectorPos()         {  return fHistoQVectorPos; } */
99   /* TH1F * GetHistoQVectorNeg()         {  return fHistoQVectorNeg; } */
100   TH1F * GetHistoQVector()         {  return fHistoQVector; }
101   TH1F * GetHistoEP()         {  return fHistoEP; }
102   TH1F * GetHistoRunNumbers()         {  return fHistoRunNumbers; }
103   TH2F * GetHistoCentrality()         { return fHistoCentrality;}
104   TH2F * GetHistoMultiplicty()         { return fHistoMultiplicty; }
105   Float_t  GetCentralityMin()  const {  return fCentralityCutMin; }
106   Float_t  GetCentralityMax()  const {  return fCentralityCutMax; }
107   //Float_t  GetQVectorPosCutMin()  const {  return fQVectorPosCutMin; }
108   //Float_t  GetQVectorPosCutMax()  const {  return fQVectorPosCutMax; }
109   //Float_t  GetQVectorNegCutMin()  const {  return fQVectorNegCutMin; }
110   //Float_t  GetQVectorNegCutMax()  const {  return fQVectorNegCutMax; }
111   Float_t  GetQVectorCutMin()  const {  return fQVectorCutMin; }
112   Float_t  GetQVectorCutMax()  const {  return fQVectorCutMax; }
113   Float_t  GetVertexCutMin()  const {  return fVertexCutMin; }
114   Float_t  GetVertexCutMax()  const {  return fVertexCutMax; }
115   Float_t  GetMultiplicityCutMin()  const {  return fMultiplicityCutMin; }
116   Float_t  GetMultiplicityCutMax()  const {  return fMultiplicityCutMax; }
117   Float_t GetMaxChi2perNDFforVertex() const {return fMaxChi2perNDFforVertex;}
118    AliAnalysisUtils* GetAnalysisUtils() const {return fAnalysisUtils; }
119 Bool_t GetUseAliPPVsMultUtils() const {return fUseAliPPVsMultUtils;} 
120
121   void InitHisto();     
122   void   PrintCuts();
123   Double_t ApplyCentralityPatchAOD049();
124
125   Float_t  NumberOfEvents()     { return fHistoCuts->GetBinContent(kAcceptedEvents+1); }
126   Float_t  NumberOfProcessedEvents()     { return fHistoCuts->GetBinContent(kProcessedEvents+1); }
127   Float_t  NumberOfPhysSelEvents()     { return fHistoCuts->GetBinContent(kPhysSelEvents+1); }
128
129   Long64_t Merge(TCollection* list);
130
131
132  private:
133   
134   AliVEvent     *fAOD;              //! AOD event
135   Int_t                  fAODEvent; // flag what type event is conected use values form AliSpeatraAODTrackCuts  
136   UInt_t           fTrackBits;       // Type of track to be used in the Qvector calculation
137   Bool_t          fIsMC;// true if processing MC
138   TString          fCentEstimator;// name of centrality estimator
139   Bool_t          fUseCentPatchAOD049;// Patch for centrality selection on AOD049
140   Int_t          fUseSDDPatchforLHC11a; // if true will check for ALLNOTRD  in fired trigger class 
141   UInt_t fTriggerSettings;     // triger configuration 
142   AliSpectraBothTrackCuts     *fTrackCuts;             //! track cuts
143   Bool_t          fIsSelected;        // True if cuts are selected
144   Float_t         fCentralityCutMin;     // minimum centrality percentile
145   Float_t         fCentralityCutMax;     // maximum centrality percentile
146   /* Float_t         fQVectorPosCutMin;     // minimum qvecPos */
147   /* Float_t         fQVectorPosCutMax;     // maximum qvecPos */
148   /* Float_t         fQVectorNegCutMin;     // minimum qvecNeg */
149   /* Float_t         fQVectorNegCutMax;     // maximum qvecNeg */
150   Float_t         fQVectorCutMin;     // minimum qvecPos
151   Float_t         fQVectorCutMax;     // maximum qvecPos
152   Float_t         fVertexCutMin;     // minimum vertex position
153   Float_t         fVertexCutMax;     // maximum vertex position
154   Int_t         fMultiplicityCutMin;     // minimum multiplicity position
155   Int_t         fMultiplicityCutMax;     // maximum multiplicity position
156   Float_t         fMaxChi2perNDFforVertex; // maximum value of Chi2perNDF of vertex
157   Int_t           fMinRun;                //minmum run number                    
158   Int_t           fMaxRun;                //maximum run number   
159   Float_t         fetarangeofmultiplicitycut; // eta range fot multipilicty cut 
160   Bool_t          fUseAliPPVsMultUtils;   // use  AliPPVsMultUtils for centrailty                       
161   TH1I            *fHistoCuts;        // Cuts statistics
162   TH1F            *fHistoVtxBefSel;        // Vtx distr before event selection  
163   TH1F            *fHistoVtxAftSel;        // Vtx distr after event selection
164   TH1F            *fHistoEtaBefSel;        // Eta distr before event selection
165   TH1F            *fHistoEtaAftSel;        // Eta distr after event selection
166   TH1F            *fHistoNChAftSel;        // NCh distr after event selection
167   //TH1F            *fHistoQVectorPos;        // QVectorPos
168   //TH1F            *fHistoQVectorNeg;        // QVectorNeg
169   TH1F            *fHistoQVector;        // QVector
170   TH1F            *fHistoEP;        // EP
171   TH1F            *fHistoVtxAftSelwithoutZvertexCut;        // Vtx distr after event selection but without z vertex cut
172   TH1F            *fHistoVtxalltriggerEventswithMCz;        // MC z vertex ditribution of generated events
173   TH1F            *fHistoVtxAftSelwithoutZvertexCutusingMCz;        // Vtx distr after event selection but without z vertex cut
174   TH1F            *fHistoRunNumbers;   // histogram of numbers of events per run
175   TH2F            *fHistoCentrality; // centrality histogram
176   TH2F            *fHistoMultiplicty; // multiplicty histogram
177   AliAnalysisUtils *fAnalysisUtils;// Analysis Utils which have pile-up cut
178   AliPPVsMultUtils  *fAliPPVsMultUtils; //AliPPVsMultUtils class for centrailty
179
180   AliSpectraBothEventCuts(const AliSpectraBothEventCuts&);
181   AliSpectraBothEventCuts& operator=(const AliSpectraBothEventCuts&);
182   
183   ClassDef(AliSpectraBothEventCuts, 11);
184   
185 };
186 #endif
187