ROOT logo
#ifndef ALIFILTEREDTREEEVENTCUTS_H
#define ALIFILTEREDTREEEVENTCUTS_H

//------------------------------------------------------------------------------
// Class to keep event selection cuts for dNdPt analysis. 
// 
// Author: J.Otwinowski 01/11/2008 
//------------------------------------------------------------------------------

#include "AliAnalysisCuts.h"

class AliESDEvent;
class AliESDVertex;
class AliMCEvent;
class AliHeader;
class AliGenEventHeader;
class AliStack;

class AliFilteredTreeEventCuts : public AliAnalysisCuts
{
public:
  AliFilteredTreeEventCuts(const Char_t* name ="AliFilteredTreeEventCuts", const Char_t *title ="");
  virtual ~AliFilteredTreeEventCuts(); 

  //TODO: copied from AliPWG0Helper, find a more central place for these
  enum AnalysisMode { kInvalid = -1, kSPD = 0x1, kTPC = 0x2, kTPCITS = 0x4, kFieldOn = 0x8, kSPDOnlyL0 = 0x10, kTPCSPD = 0x20};
  enum MCProcessType { kInvalidProcess = -1, kND = 0x1, kDD = 0x2, kSD = 0x4, kOnePart = 0x8 };
  enum DiffTreatment { kMCFlags = 0, kUA5Cuts = 1, kE710Cuts, kALICEHadronLevel };
  
  // setters 
  void SetTriggerRequired(Bool_t bFlag=kTRUE)  {fTriggerRequired=bFlag;}
  void SetRecVertexRequired(Bool_t bFlag=kTRUE)  {fRecVertexRequired=bFlag;}
  void SetEventProcessType(MCProcessType type=kInvalidProcess)  {fEventProcessType=type;}
  void SetNContributorsRange(Float_t min=0.,Float_t max=1e99) {fMinNContributors=min; fMaxNContributors=max;}
  void SetMaxR(Float_t max=1e99) {fMaxR=max;}
  void SetZvRange(Float_t min=-1e99, Float_t max=1e99) {fMinZv=min; fMaxZv=max;}

  void SetMeanXYZv(Float_t xv=0.0, Float_t yv=0.0, Float_t zv=0.0) {
    fMeanXv = xv; fMeanYv = yv; fMeanZv = zv;
  }

  void SetSigmaMeanXYZv(Float_t sxv=1.0, Float_t syv=1.0, Float_t szv=10.0) {
    fSigmaMeanXv = sxv; fSigmaMeanYv = syv; fSigmaMeanZv = szv;
  }


  void SetRedoTPCVertex(Bool_t redo = kTRUE) {fRedoTPCVertex = redo;}
  void SetUseBeamSpotConstraint(Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;}
  void SetEventSelectedRequired(Bool_t evtSel = kTRUE) {fEventSelectedRequired = evtSel;} 


  // getters 
  Bool_t  IsEventSelectedRequired() const {return fEventSelectedRequired;}
  Bool_t  IsTriggerRequired() const {return fTriggerRequired;}
  Bool_t  IsRecVertexRequired() const {return fRecVertexRequired;}
  Int_t   GetEventProcessType() const {return fEventProcessType;}  
  Float_t GetMinNContributors() const {return fMinNContributors;}
  Float_t GetMaxNContributors() const {return fMaxNContributors;}
  Float_t GetMaxR() const {return fMaxR;}
  Float_t GetMinZv() const {return fMinZv;}
  Float_t GetMaxZv() const {return fMaxZv;}

  Float_t GetMeanXv() const {return fMeanXv;}
  Float_t GetMeanYv() const {return fMeanYv;}
  Float_t GetMeanZv() const {return fMeanZv;}

  Float_t GetSigmaMeanXv() const {return fSigmaMeanXv;}
  Float_t GetSigmaMeanYv() const {return fSigmaMeanYv;}
  Float_t GetSigmaMeanZv() const {return fSigmaMeanZv;}
 
  Bool_t IsRedoTPCVertex() const {return fRedoTPCVertex;}
  Bool_t IsUseBeamSpotConstraint() const {return fUseBeamSpotConstraint;}


  // cuts init function
  void Init();

  // check MC tracks
  Bool_t IsSelected(TObject *) {return kTRUE;}
  Bool_t IsSelected(TList *) {return kTRUE;}

  // accept event
  Bool_t AcceptEvent(AliESDEvent *event=0, AliMCEvent *mcEvent=0, const AliESDVertex *vtx=0);
  Bool_t AcceptMCEvent(AliMCEvent *mcEvent=0);

  // Merge output objects (needed by PROOF) 
  virtual Long64_t Merge(TCollection* list);

  //statics copied from AliPWG0Helper
  static MCProcessType GetEventProcessType(AliESDEvent* esd, AliHeader* header, AliStack* stack, DiffTreatment diffTreatment);
  static MCProcessType GetEventProcessType(AliHeader* aHeader, Bool_t adebug = kFALSE);
  static MCProcessType GetPythiaEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);
  static MCProcessType GetDPMjetEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);
  static Bool_t IsHadronLevelSingleDiffractive(AliStack* stack, Float_t cms, Float_t xiMin, Float_t xiMax);
  static Double_t Rapidity(Double_t pt, Double_t pz, Double_t m);
protected:
  static Int_t fgLastProcessType;    // stores the raw value of the last process type extracted
  //
 
private:
  Bool_t fTriggerRequired; // trigger required  
  Bool_t fRecVertexRequired; // reconstructed event vertex required  
  Int_t fEventProcessType;   // select MC event process type (ND, SD, DD)
  Float_t fMinNContributors; // min. number of contributing vertex tracks
  Float_t fMaxNContributors; // max. number of contributing vertex tracks
  Float_t fMaxR;             // max. vertex radii (R = sqrt(Xv^2+Yv^2) 
  Float_t fMinZv;            // min. Zv vertex
  Float_t fMaxZv;            // max. Zv vertex

  // interaction spot constraint
  Float_t fMeanXv; // mean Xv position
  Float_t fMeanYv; // mean Yv position
  Float_t fMeanZv; // mean Zv position

  Float_t fSigmaMeanXv; // sigma mean Xv position 
  Float_t fSigmaMeanYv; // sigma mean Yv position
  Float_t fSigmaMeanZv; // sigma mean Zv position
 
  Bool_t fRedoTPCVertex;         // redo vertex
  Bool_t fUseBeamSpotConstraint; // use beam spot contraints  

  Bool_t fEventSelectedRequired; // event with at least one track (pT>0.5 GeV, |eta|<0.8) required

  AliFilteredTreeEventCuts(const AliFilteredTreeEventCuts&); // not implemented
  AliFilteredTreeEventCuts& operator=(const AliFilteredTreeEventCuts&); // not implemented

  ClassDef(AliFilteredTreeEventCuts, 1)
};

#endif // ALIFILTEREDTREEEVENTCUTS_H
 AliFilteredTreeEventCuts.h:1
 AliFilteredTreeEventCuts.h:2
 AliFilteredTreeEventCuts.h:3
 AliFilteredTreeEventCuts.h:4
 AliFilteredTreeEventCuts.h:5
 AliFilteredTreeEventCuts.h:6
 AliFilteredTreeEventCuts.h:7
 AliFilteredTreeEventCuts.h:8
 AliFilteredTreeEventCuts.h:9
 AliFilteredTreeEventCuts.h:10
 AliFilteredTreeEventCuts.h:11
 AliFilteredTreeEventCuts.h:12
 AliFilteredTreeEventCuts.h:13
 AliFilteredTreeEventCuts.h:14
 AliFilteredTreeEventCuts.h:15
 AliFilteredTreeEventCuts.h:16
 AliFilteredTreeEventCuts.h:17
 AliFilteredTreeEventCuts.h:18
 AliFilteredTreeEventCuts.h:19
 AliFilteredTreeEventCuts.h:20
 AliFilteredTreeEventCuts.h:21
 AliFilteredTreeEventCuts.h:22
 AliFilteredTreeEventCuts.h:23
 AliFilteredTreeEventCuts.h:24
 AliFilteredTreeEventCuts.h:25
 AliFilteredTreeEventCuts.h:26
 AliFilteredTreeEventCuts.h:27
 AliFilteredTreeEventCuts.h:28
 AliFilteredTreeEventCuts.h:29
 AliFilteredTreeEventCuts.h:30
 AliFilteredTreeEventCuts.h:31
 AliFilteredTreeEventCuts.h:32
 AliFilteredTreeEventCuts.h:33
 AliFilteredTreeEventCuts.h:34
 AliFilteredTreeEventCuts.h:35
 AliFilteredTreeEventCuts.h:36
 AliFilteredTreeEventCuts.h:37
 AliFilteredTreeEventCuts.h:38
 AliFilteredTreeEventCuts.h:39
 AliFilteredTreeEventCuts.h:40
 AliFilteredTreeEventCuts.h:41
 AliFilteredTreeEventCuts.h:42
 AliFilteredTreeEventCuts.h:43
 AliFilteredTreeEventCuts.h:44
 AliFilteredTreeEventCuts.h:45
 AliFilteredTreeEventCuts.h:46
 AliFilteredTreeEventCuts.h:47
 AliFilteredTreeEventCuts.h:48
 AliFilteredTreeEventCuts.h:49
 AliFilteredTreeEventCuts.h:50
 AliFilteredTreeEventCuts.h:51
 AliFilteredTreeEventCuts.h:52
 AliFilteredTreeEventCuts.h:53
 AliFilteredTreeEventCuts.h:54
 AliFilteredTreeEventCuts.h:55
 AliFilteredTreeEventCuts.h:56
 AliFilteredTreeEventCuts.h:57
 AliFilteredTreeEventCuts.h:58
 AliFilteredTreeEventCuts.h:59
 AliFilteredTreeEventCuts.h:60
 AliFilteredTreeEventCuts.h:61
 AliFilteredTreeEventCuts.h:62
 AliFilteredTreeEventCuts.h:63
 AliFilteredTreeEventCuts.h:64
 AliFilteredTreeEventCuts.h:65
 AliFilteredTreeEventCuts.h:66
 AliFilteredTreeEventCuts.h:67
 AliFilteredTreeEventCuts.h:68
 AliFilteredTreeEventCuts.h:69
 AliFilteredTreeEventCuts.h:70
 AliFilteredTreeEventCuts.h:71
 AliFilteredTreeEventCuts.h:72
 AliFilteredTreeEventCuts.h:73
 AliFilteredTreeEventCuts.h:74
 AliFilteredTreeEventCuts.h:75
 AliFilteredTreeEventCuts.h:76
 AliFilteredTreeEventCuts.h:77
 AliFilteredTreeEventCuts.h:78
 AliFilteredTreeEventCuts.h:79
 AliFilteredTreeEventCuts.h:80
 AliFilteredTreeEventCuts.h:81
 AliFilteredTreeEventCuts.h:82
 AliFilteredTreeEventCuts.h:83
 AliFilteredTreeEventCuts.h:84
 AliFilteredTreeEventCuts.h:85
 AliFilteredTreeEventCuts.h:86
 AliFilteredTreeEventCuts.h:87
 AliFilteredTreeEventCuts.h:88
 AliFilteredTreeEventCuts.h:89
 AliFilteredTreeEventCuts.h:90
 AliFilteredTreeEventCuts.h:91
 AliFilteredTreeEventCuts.h:92
 AliFilteredTreeEventCuts.h:93
 AliFilteredTreeEventCuts.h:94
 AliFilteredTreeEventCuts.h:95
 AliFilteredTreeEventCuts.h:96
 AliFilteredTreeEventCuts.h:97
 AliFilteredTreeEventCuts.h:98
 AliFilteredTreeEventCuts.h:99
 AliFilteredTreeEventCuts.h:100
 AliFilteredTreeEventCuts.h:101
 AliFilteredTreeEventCuts.h:102
 AliFilteredTreeEventCuts.h:103
 AliFilteredTreeEventCuts.h:104
 AliFilteredTreeEventCuts.h:105
 AliFilteredTreeEventCuts.h:106
 AliFilteredTreeEventCuts.h:107
 AliFilteredTreeEventCuts.h:108
 AliFilteredTreeEventCuts.h:109
 AliFilteredTreeEventCuts.h:110
 AliFilteredTreeEventCuts.h:111
 AliFilteredTreeEventCuts.h:112
 AliFilteredTreeEventCuts.h:113
 AliFilteredTreeEventCuts.h:114
 AliFilteredTreeEventCuts.h:115
 AliFilteredTreeEventCuts.h:116
 AliFilteredTreeEventCuts.h:117
 AliFilteredTreeEventCuts.h:118
 AliFilteredTreeEventCuts.h:119
 AliFilteredTreeEventCuts.h:120
 AliFilteredTreeEventCuts.h:121
 AliFilteredTreeEventCuts.h:122
 AliFilteredTreeEventCuts.h:123
 AliFilteredTreeEventCuts.h:124
 AliFilteredTreeEventCuts.h:125
 AliFilteredTreeEventCuts.h:126
 AliFilteredTreeEventCuts.h:127
 AliFilteredTreeEventCuts.h:128
 AliFilteredTreeEventCuts.h:129
 AliFilteredTreeEventCuts.h:130