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