ROOT logo
#ifndef ALIDNDPTEVENTCUTS_H
#define ALIDNDPTEVENTCUTS_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;

#include "AliPWG0Helper.h"
#include "AlidNdPtHelper.h"

class AlidNdPtEventCuts : public AliAnalysisCuts
{
public:
  AlidNdPtEventCuts(const Char_t* name ="AlidNdPtEventCuts", const Char_t *title ="");
  virtual ~AlidNdPtEventCuts(); 
 
  // setters 
  void SetTriggerRequired(const Bool_t bFlag=kTRUE)  {fTriggerRequired=bFlag;}
  void SetRecVertexRequired(const Bool_t bFlag=kTRUE)  {fRecVertexRequired=bFlag;}
  void SetEventProcessType(AliPWG0Helper::MCProcessType type=AliPWG0Helper::kInvalidProcess)  {fEventProcessType=type;}
  void SetNContributorsRange(const Float_t min=0.,const Float_t max=1e99) {fMinNContributors=min; fMaxNContributors=max;}
  void SetMaxR(const Float_t max=1e99) {fMaxR=max;}
  void SetZvRange(const Float_t min=-1e99, const Float_t max=1e99) {fMinZv=min; fMaxZv=max;}

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

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


  void SetRedoTPCVertex(const Bool_t redo = kTRUE) {fRedoTPCVertex = redo;}
  void SetUseBeamSpotConstraint(const Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;}
  void SetEventSelectedRequired(const 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);

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

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

  ClassDef(AlidNdPtEventCuts, 2)
};

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