ROOT logo
#ifndef ALISPECTRABOTHEVENTCUTS_H
#define ALISPECTRABOTHEVENTCUTS_H

/*  See cxx source for full Copyright notice */

//-------------------------------------------------------------------------
//                      AliSpectraBothEventCuts
//
//
//
//
// Authors: Michele Floris, CERN, Philip Versteeg, UU, Redmer Bertens, UU
//-------------------------------------------------------------------------

class AliVEvent;
class AliSpectraBothTrackCuts;
//class AliSpectraBothHistoManager;

#include "TH1I.h"
#include "TNamed.h"
#include "AliSpectraBothTrackCuts.h"
#include "AliAnalysisUtils.h"	
#include "AliPPVsMultUtils.h"	

class AliSpectraBothEventCuts : public TNamed
{
 public:
  enum {  kProcessedEvents = 0, // all events 
kPhysSelEvents, // phys selected and not pile-up
kAcceptedEvents, // events passing all cuts  
kGoodVtx,// events with good veretx and   
kVtxCentral, 
kVtxNoEvent, 
kQVector,
kTPCasPV,
kZeroCont,
kNVtxCuts};
enum {kDoNotCheckforSDD=0,kwithSDD,kwithoutSDD};	

  // Constructors
 AliSpectraBothEventCuts() : TNamed(), fAOD(0),fAODEvent(AliSpectraBothTrackCuts::kAODobject),fTrackBits(0), fIsMC(0), fCentEstimator(""), fUseCentPatchAOD049(0),fUseSDDPatchforLHC11a(kDoNotCheckforSDD),fTriggerSettings(AliVEvent::kMB),fTrackCuts(0),
fIsSelected(0), fCentralityCutMin(0), fCentralityCutMax(0), fQVectorCutMin(0), fQVectorCutMax(0), fVertexCutMin(0), 
fVertexCutMax(0), fMultiplicityCutMin(0), fMultiplicityCutMax(0), fMaxChi2perNDFforVertex(0),fMinRun(0),fMaxRun(0),fetarangeofmultiplicitycut(0.0),fUseAliPPVsMultUtils(false),
fNMCProcessType(-1),fEventMCProcessType(0),fEventMCProcessTypeIncluded(0),
fHistoCuts(0),fHistoVtxBefSel(0),fHistoVtxAftSel(0),fHistoEtaBefSel(0),fHistoEtaAftSel(0),
fHistoNChAftSel(0),fHistoQVector(0),fHistoEP(0), fHistoVtxAftSelwithoutZvertexCut(0),fHistoVtxalltriggerEventswithMCz(0),fHistoVtxAftSelwithoutZvertexCutusingMCz(0),fHistoRunNumbers(0),fHistoCentrality(0),fHistoMultiplicty(0),fAnalysisUtils(0),fAliPPVsMultUtils(0)

{

}
  AliSpectraBothEventCuts(const char *name);
  virtual ~AliSpectraBothEventCuts();// {}
  
  void SetIsMC(Bool_t isMC = kFALSE)    {fIsMC = isMC; };
  Bool_t GetIsMC()           const           { return fIsMC;};
  void SetCentEstimator(TString cent = "V0M")    {fCentEstimator = cent; };
  TString GetCentFromV0()           const           { return fCentEstimator;};
  
  void SetUseCentPatchAOD049(Bool_t useCentPatchAOD049 = kFALSE)    {fUseCentPatchAOD049 = useCentPatchAOD049; };
  Bool_t GetUseCentPatchAOD049()           const           { return fUseCentPatchAOD049;};
  void 	SetUseSDDPatchforLHC11a(Int_t useSDDPatchforLHC11a) {fUseSDDPatchforLHC11a=useSDDPatchforLHC11a;} ;  
  Int_t GetUseSDDPatchforLHC11a() {return fUseSDDPatchforLHC11a;};   

   void   SetTriggerSettings(UInt_t triggerSettings = AliVEvent::kMB) {fTriggerSettings = triggerSettings;};
   UInt_t   GetTriggerSettings() {return fTriggerSettings;};



  // Methods
  Bool_t IsSelected(AliVEvent * aod,AliSpectraBothTrackCuts     *trackcuts, Bool_t isMC=kFALSE, Double_t mcZ=-100.0, TH1F* managerhisteventcuts=0x0);
  Bool_t CheckVtx();
  Bool_t CheckCentralityCut();
  Bool_t CheckMultiplicityCut();
  Bool_t CheckQVectorCut();
  Bool_t CheckVtxChi2perNDF();
  Bool_t CheckMCProcessType(AliMCEvent* mcevent);	
  void  SetCentralityCutMin(Float_t cut)  { fCentralityCutMin = cut; }
  void  SetCentralityCutMax(Float_t cut)  { fCentralityCutMax = cut; }
  //void  SetQVectorPosCut(Float_t min,Float_t max)  { fQVectorPosCutMin = min; fQVectorPosCutMax = max; }
  //void  SetQVectorNegCut(Float_t min,Float_t max)  { fQVectorNegCutMin = min; fQVectorNegCutMax = max; }
  void  SetQVectorCut(Float_t min,Float_t max)  { fQVectorCutMin = min; fQVectorCutMax = max; }
  void  SetVertexCut(Float_t min,Float_t max)  { fVertexCutMin = min; fVertexCutMax = max; }
  void  SetMultiplicityCut(Int_t min,Int_t max)  { fMultiplicityCutMin = min; fMultiplicityCutMax = max; }
  void SetTrackBits(UInt_t TrackBits) {fTrackBits=TrackBits;}
  void SetMaxChi2perNDFforVertex(Float_t cut) { fMaxChi2perNDFforVertex=cut;}
  void SetRunNumberRange(Int_t min,Int_t max);	
  void SetEtaRangeforMultiplictyCut(Float_t eta) {fetarangeofmultiplicitycut=eta;}
  void  SetAnalysisUtils(AliAnalysisUtils* inAnalysisUtils){fAnalysisUtils=inAnalysisUtils;}
  void SetUseAliPPVsMultUtils(Bool_t flag){fUseAliPPVsMultUtils=flag;} 
  void  SetEventMCProcessTypeIncluded(Bool_t flag) {fEventMCProcessTypeIncluded=flag;}
  void SetNMCProcessType(Int_t flag); 
   void AddMCProcessType(Int_t type,Int_t index);
  UInt_t GetTrackType()  const    { return fTrackBits;}
  TH1I * GetHistoCuts()         {  return fHistoCuts; }
  TH1F * GetHistoVtxBefSel()         {  return fHistoVtxBefSel; }
  TH1F * GetHistoVtxAftSel()         {  return fHistoVtxAftSel; }
  TH1F * GetHistoVtxAftSelwithoutZvertexCut()         {  return fHistoVtxAftSelwithoutZvertexCut; }
  TH1F * GetHistoVtxGenerated()         {  return fHistoVtxalltriggerEventswithMCz; }
  TH1F * GetHistoVtxAftSelwithoutZvertexCutusingMCz()         {  return fHistoVtxAftSelwithoutZvertexCutusingMCz; }

  TH1F * GetHistoEtaBefSel()         {  return fHistoEtaBefSel; }
  TH1F * GetHistoEtaAftSel()         {  return fHistoEtaAftSel; }
  TH1F * GetHistoNChAftSel()         {  return fHistoNChAftSel; }
  /* TH1F * GetHistoQVectorPos()         {  return fHistoQVectorPos; } */
  /* TH1F * GetHistoQVectorNeg()         {  return fHistoQVectorNeg; } */
  TH1F * GetHistoQVector()         {  return fHistoQVector; }
  TH1F * GetHistoEP()         {  return fHistoEP; }
  TH1F * GetHistoRunNumbers()         {  return fHistoRunNumbers; }
  TH2F * GetHistoCentrality()	      {	return fHistoCentrality;}
  TH2F * GetHistoMultiplicty()         { return fHistoMultiplicty; }
  Float_t  GetCentralityMin()  const {  return fCentralityCutMin; }
  Float_t  GetCentralityMax()  const {  return fCentralityCutMax; }
  //Float_t  GetQVectorPosCutMin()  const {  return fQVectorPosCutMin; }
  //Float_t  GetQVectorPosCutMax()  const {  return fQVectorPosCutMax; }
  //Float_t  GetQVectorNegCutMin()  const {  return fQVectorNegCutMin; }
  //Float_t  GetQVectorNegCutMax()  const {  return fQVectorNegCutMax; }
  Float_t  GetQVectorCutMin()  const {  return fQVectorCutMin; }
  Float_t  GetQVectorCutMax()  const {  return fQVectorCutMax; }
  Float_t  GetVertexCutMin()  const {  return fVertexCutMin; }
  Float_t  GetVertexCutMax()  const {  return fVertexCutMax; }
  Float_t  GetMultiplicityCutMin()  const {  return fMultiplicityCutMin; }
  Float_t  GetMultiplicityCutMax()  const {  return fMultiplicityCutMax; }
  Float_t GetMaxChi2perNDFforVertex() const {return fMaxChi2perNDFforVertex;}
   AliAnalysisUtils* GetAnalysisUtils() const {return fAnalysisUtils; }
Bool_t GetUseAliPPVsMultUtils() const {return fUseAliPPVsMultUtils;} 
 Int_t  GetNMCProcessType() const { return fNMCProcessType;}
 Bool_t  GetEventMCProcessTypeIncluded(Bool_t flag) const {return flag;}



  void InitHisto();	
  void   PrintCuts();
  Double_t ApplyCentralityPatchAOD049();

  Float_t  NumberOfEvents()     { return fHistoCuts->GetBinContent(kAcceptedEvents+1); }
  Float_t  NumberOfProcessedEvents()     { return fHistoCuts->GetBinContent(kProcessedEvents+1); }
  Float_t  NumberOfPhysSelEvents()     { return fHistoCuts->GetBinContent(kPhysSelEvents+1); }

  Long64_t Merge(TCollection* list);


 private:
  
  AliVEvent     *fAOD;              //! AOD event
  Int_t 		 fAODEvent; // flag what type event is conected use values form AliSpeatraAODTrackCuts	
  UInt_t           fTrackBits;       // Type of track to be used in the Qvector calculation
  Bool_t          fIsMC;// true if processing MC
  TString          fCentEstimator;// name of centrality estimator
  Bool_t          fUseCentPatchAOD049;// Patch for centrality selection on AOD049
  Int_t          fUseSDDPatchforLHC11a; // if true will check for ALLNOTRD  in fired trigger class 
  UInt_t fTriggerSettings;     // triger configuration 
  AliSpectraBothTrackCuts     *fTrackCuts;             //! track cuts
  Bool_t          fIsSelected;        // True if cuts are selected
  Float_t         fCentralityCutMin;     // minimum centrality percentile
  Float_t         fCentralityCutMax;     // maximum centrality percentile
  /* Float_t         fQVectorPosCutMin;     // minimum qvecPos */
  /* Float_t         fQVectorPosCutMax;     // maximum qvecPos */
  /* Float_t         fQVectorNegCutMin;     // minimum qvecNeg */
  /* Float_t         fQVectorNegCutMax;     // maximum qvecNeg */
  Float_t         fQVectorCutMin;     // minimum qvecPos
  Float_t         fQVectorCutMax;     // maximum qvecPos
  Float_t         fVertexCutMin;     // minimum vertex position
  Float_t         fVertexCutMax;     // maximum vertex position
  Int_t         fMultiplicityCutMin;     // minimum multiplicity position
  Int_t         fMultiplicityCutMax;     // maximum multiplicity position
  Float_t	  fMaxChi2perNDFforVertex; // maximum value of Chi2perNDF of vertex
  Int_t           fMinRun;                //minmum run number 			 
  Int_t 	  fMaxRun;		  //maximum run number 	 
  Float_t         fetarangeofmultiplicitycut; // eta range fot multipilicty cut 
  Bool_t 	  fUseAliPPVsMultUtils;   // use  AliPPVsMultUtils for centrailty 
  Int_t           fNMCProcessType;  // to include or exlude 
  Int_t 	  *fEventMCProcessType;   //[fNMCProcessType] process typ cut 				  
  Bool_t 	  fEventMCProcessTypeIncluded; // if false those process are excluded if true they are included  
  TH1I            *fHistoCuts;        // Cuts statistics
  TH1F            *fHistoVtxBefSel;        // Vtx distr before event selection 	
  TH1F            *fHistoVtxAftSel;        // Vtx distr after event selection
  TH1F            *fHistoEtaBefSel;        // Eta distr before event selection
  TH1F            *fHistoEtaAftSel;        // Eta distr after event selection
  TH1F            *fHistoNChAftSel;        // NCh distr after event selection
  //TH1F            *fHistoQVectorPos;        // QVectorPos
  //TH1F            *fHistoQVectorNeg;        // QVectorNeg
  TH1F            *fHistoQVector;        // QVector
  TH1F            *fHistoEP;        // EP
  TH1F 		  *fHistoVtxAftSelwithoutZvertexCut;        // Vtx distr after event selection but without z vertex cut
  TH1F 		  *fHistoVtxalltriggerEventswithMCz;        // MC z vertex ditribution of generated events
  TH1F 		  *fHistoVtxAftSelwithoutZvertexCutusingMCz;        // Vtx distr after event selection but without z vertex cut
  TH1F            *fHistoRunNumbers;   // histogram of numbers of events per run
  TH2F 		  *fHistoCentrality; // centrality histogram
  TH2F 		  *fHistoMultiplicty; // multiplicty histogram
  AliAnalysisUtils *fAnalysisUtils;// Analysis Utils which have pile-up cut
  AliPPVsMultUtils  *fAliPPVsMultUtils; //AliPPVsMultUtils class for centrailty

  AliSpectraBothEventCuts(const AliSpectraBothEventCuts&);
  AliSpectraBothEventCuts& operator=(const AliSpectraBothEventCuts&);
  
  ClassDef(AliSpectraBothEventCuts, 13);
  
};
#endif

 AliSpectraBothEventCuts.h:1
 AliSpectraBothEventCuts.h:2
 AliSpectraBothEventCuts.h:3
 AliSpectraBothEventCuts.h:4
 AliSpectraBothEventCuts.h:5
 AliSpectraBothEventCuts.h:6
 AliSpectraBothEventCuts.h:7
 AliSpectraBothEventCuts.h:8
 AliSpectraBothEventCuts.h:9
 AliSpectraBothEventCuts.h:10
 AliSpectraBothEventCuts.h:11
 AliSpectraBothEventCuts.h:12
 AliSpectraBothEventCuts.h:13
 AliSpectraBothEventCuts.h:14
 AliSpectraBothEventCuts.h:15
 AliSpectraBothEventCuts.h:16
 AliSpectraBothEventCuts.h:17
 AliSpectraBothEventCuts.h:18
 AliSpectraBothEventCuts.h:19
 AliSpectraBothEventCuts.h:20
 AliSpectraBothEventCuts.h:21
 AliSpectraBothEventCuts.h:22
 AliSpectraBothEventCuts.h:23
 AliSpectraBothEventCuts.h:24
 AliSpectraBothEventCuts.h:25
 AliSpectraBothEventCuts.h:26
 AliSpectraBothEventCuts.h:27
 AliSpectraBothEventCuts.h:28
 AliSpectraBothEventCuts.h:29
 AliSpectraBothEventCuts.h:30
 AliSpectraBothEventCuts.h:31
 AliSpectraBothEventCuts.h:32
 AliSpectraBothEventCuts.h:33
 AliSpectraBothEventCuts.h:34
 AliSpectraBothEventCuts.h:35
 AliSpectraBothEventCuts.h:36
 AliSpectraBothEventCuts.h:37
 AliSpectraBothEventCuts.h:38
 AliSpectraBothEventCuts.h:39
 AliSpectraBothEventCuts.h:40
 AliSpectraBothEventCuts.h:41
 AliSpectraBothEventCuts.h:42
 AliSpectraBothEventCuts.h:43
 AliSpectraBothEventCuts.h:44
 AliSpectraBothEventCuts.h:45
 AliSpectraBothEventCuts.h:46
 AliSpectraBothEventCuts.h:47
 AliSpectraBothEventCuts.h:48
 AliSpectraBothEventCuts.h:49
 AliSpectraBothEventCuts.h:50
 AliSpectraBothEventCuts.h:51
 AliSpectraBothEventCuts.h:52
 AliSpectraBothEventCuts.h:53
 AliSpectraBothEventCuts.h:54
 AliSpectraBothEventCuts.h:55
 AliSpectraBothEventCuts.h:56
 AliSpectraBothEventCuts.h:57
 AliSpectraBothEventCuts.h:58
 AliSpectraBothEventCuts.h:59
 AliSpectraBothEventCuts.h:60
 AliSpectraBothEventCuts.h:61
 AliSpectraBothEventCuts.h:62
 AliSpectraBothEventCuts.h:63
 AliSpectraBothEventCuts.h:64
 AliSpectraBothEventCuts.h:65
 AliSpectraBothEventCuts.h:66
 AliSpectraBothEventCuts.h:67
 AliSpectraBothEventCuts.h:68
 AliSpectraBothEventCuts.h:69
 AliSpectraBothEventCuts.h:70
 AliSpectraBothEventCuts.h:71
 AliSpectraBothEventCuts.h:72
 AliSpectraBothEventCuts.h:73
 AliSpectraBothEventCuts.h:74
 AliSpectraBothEventCuts.h:75
 AliSpectraBothEventCuts.h:76
 AliSpectraBothEventCuts.h:77
 AliSpectraBothEventCuts.h:78
 AliSpectraBothEventCuts.h:79
 AliSpectraBothEventCuts.h:80
 AliSpectraBothEventCuts.h:81
 AliSpectraBothEventCuts.h:82
 AliSpectraBothEventCuts.h:83
 AliSpectraBothEventCuts.h:84
 AliSpectraBothEventCuts.h:85
 AliSpectraBothEventCuts.h:86
 AliSpectraBothEventCuts.h:87
 AliSpectraBothEventCuts.h:88
 AliSpectraBothEventCuts.h:89
 AliSpectraBothEventCuts.h:90
 AliSpectraBothEventCuts.h:91
 AliSpectraBothEventCuts.h:92
 AliSpectraBothEventCuts.h:93
 AliSpectraBothEventCuts.h:94
 AliSpectraBothEventCuts.h:95
 AliSpectraBothEventCuts.h:96
 AliSpectraBothEventCuts.h:97
 AliSpectraBothEventCuts.h:98
 AliSpectraBothEventCuts.h:99
 AliSpectraBothEventCuts.h:100
 AliSpectraBothEventCuts.h:101
 AliSpectraBothEventCuts.h:102
 AliSpectraBothEventCuts.h:103
 AliSpectraBothEventCuts.h:104
 AliSpectraBothEventCuts.h:105
 AliSpectraBothEventCuts.h:106
 AliSpectraBothEventCuts.h:107
 AliSpectraBothEventCuts.h:108
 AliSpectraBothEventCuts.h:109
 AliSpectraBothEventCuts.h:110
 AliSpectraBothEventCuts.h:111
 AliSpectraBothEventCuts.h:112
 AliSpectraBothEventCuts.h:113
 AliSpectraBothEventCuts.h:114
 AliSpectraBothEventCuts.h:115
 AliSpectraBothEventCuts.h:116
 AliSpectraBothEventCuts.h:117
 AliSpectraBothEventCuts.h:118
 AliSpectraBothEventCuts.h:119
 AliSpectraBothEventCuts.h:120
 AliSpectraBothEventCuts.h:121
 AliSpectraBothEventCuts.h:122
 AliSpectraBothEventCuts.h:123
 AliSpectraBothEventCuts.h:124
 AliSpectraBothEventCuts.h:125
 AliSpectraBothEventCuts.h:126
 AliSpectraBothEventCuts.h:127
 AliSpectraBothEventCuts.h:128
 AliSpectraBothEventCuts.h:129
 AliSpectraBothEventCuts.h:130
 AliSpectraBothEventCuts.h:131
 AliSpectraBothEventCuts.h:132
 AliSpectraBothEventCuts.h:133
 AliSpectraBothEventCuts.h:134
 AliSpectraBothEventCuts.h:135
 AliSpectraBothEventCuts.h:136
 AliSpectraBothEventCuts.h:137
 AliSpectraBothEventCuts.h:138
 AliSpectraBothEventCuts.h:139
 AliSpectraBothEventCuts.h:140
 AliSpectraBothEventCuts.h:141
 AliSpectraBothEventCuts.h:142
 AliSpectraBothEventCuts.h:143
 AliSpectraBothEventCuts.h:144
 AliSpectraBothEventCuts.h:145
 AliSpectraBothEventCuts.h:146
 AliSpectraBothEventCuts.h:147
 AliSpectraBothEventCuts.h:148
 AliSpectraBothEventCuts.h:149
 AliSpectraBothEventCuts.h:150
 AliSpectraBothEventCuts.h:151
 AliSpectraBothEventCuts.h:152
 AliSpectraBothEventCuts.h:153
 AliSpectraBothEventCuts.h:154
 AliSpectraBothEventCuts.h:155
 AliSpectraBothEventCuts.h:156
 AliSpectraBothEventCuts.h:157
 AliSpectraBothEventCuts.h:158
 AliSpectraBothEventCuts.h:159
 AliSpectraBothEventCuts.h:160
 AliSpectraBothEventCuts.h:161
 AliSpectraBothEventCuts.h:162
 AliSpectraBothEventCuts.h:163
 AliSpectraBothEventCuts.h:164
 AliSpectraBothEventCuts.h:165
 AliSpectraBothEventCuts.h:166
 AliSpectraBothEventCuts.h:167
 AliSpectraBothEventCuts.h:168
 AliSpectraBothEventCuts.h:169
 AliSpectraBothEventCuts.h:170
 AliSpectraBothEventCuts.h:171
 AliSpectraBothEventCuts.h:172
 AliSpectraBothEventCuts.h:173
 AliSpectraBothEventCuts.h:174
 AliSpectraBothEventCuts.h:175
 AliSpectraBothEventCuts.h:176
 AliSpectraBothEventCuts.h:177
 AliSpectraBothEventCuts.h:178
 AliSpectraBothEventCuts.h:179
 AliSpectraBothEventCuts.h:180
 AliSpectraBothEventCuts.h:181
 AliSpectraBothEventCuts.h:182
 AliSpectraBothEventCuts.h:183
 AliSpectraBothEventCuts.h:184
 AliSpectraBothEventCuts.h:185
 AliSpectraBothEventCuts.h:186
 AliSpectraBothEventCuts.h:187
 AliSpectraBothEventCuts.h:188
 AliSpectraBothEventCuts.h:189
 AliSpectraBothEventCuts.h:190
 AliSpectraBothEventCuts.h:191
 AliSpectraBothEventCuts.h:192
 AliSpectraBothEventCuts.h:193
 AliSpectraBothEventCuts.h:194
 AliSpectraBothEventCuts.h:195
 AliSpectraBothEventCuts.h:196
 AliSpectraBothEventCuts.h:197
 AliSpectraBothEventCuts.h:198
 AliSpectraBothEventCuts.h:199
 AliSpectraBothEventCuts.h:200