ROOT logo
#ifndef ALIANALYSISUTILS_H
#define ALIANALYSISUTILS_H

////////////////////////////////////////////////////////////////////
//                                                                           //
// Class with functions useful for different analyses                      //
// - vertex selection                                                       //
//    * 2013 pA default cuts                                             //
// - identification of the fist event of the chunk                         //
// - identification pileup events                                           //
//                                                                          //
///////////////////////////////////////////////////////////////////

#include "TObject.h"

class AliVEvent;
class AliVVertex;
class AliPPVsMultUtils;

class AliAnalysisUtils : public TObject {

 public:

  AliAnalysisUtils();
  virtual ~AliAnalysisUtils(){};
  
  Bool_t IsVertexSelected2013pA(AliVEvent *event);
  Bool_t IsFirstEventInChunk(AliVEvent *event);
  
  Bool_t IsPileUpEvent(AliVEvent *event); //to be used in the analysis
  Bool_t IsPileUpMV(AliVEvent *event); //MV pileup selection implemented here
  Bool_t IsPileUpSPD(AliVEvent *event); //this calls IsPileUpFromSPD
  Bool_t IsOutOfBunchPileUp(AliVEvent *event); //out-of-bunch pileup rejection using trigger information
  Bool_t IsSPDClusterVsTrackletBG(AliVEvent *event); // background rejection with cluster-vs-tracklet cut
  
  Double_t GetWDist(const AliVVertex* v0, const AliVVertex* v1);
  
  void SetMinVtxContr(Int_t contr=1) {fMinVtxContr=contr;}
  void SetMaxVtxZ(Float_t z=1e6) {fMaxVtxZ=z;}
  void SetCutOnZVertexSPD(Bool_t iscut=true) { fCutOnZVertexSPD = iscut; }
  
  //general pileup selection settings
  void SetUseMVPlpSelection(Bool_t useMVPlpSelection) { fUseMVPlpSelection = useMVPlpSelection;}
  void SetUseOutOfBunchPileUp(Bool_t useOutOfBunchPileUp) { fUseOutOfBunchPileUp = useOutOfBunchPileUp;}
  
  //Multi Vertex pileup selection
  void SetMinPlpContribMV(Int_t minPlpContribMV) { fMinPlpContribMV = minPlpContribMV;}
  void SetMaxPlpChi2MV(Float_t maxPlpChi2MV) { fMaxPlpChi2MV = maxPlpChi2MV;}
  void SetMinWDistMV(Float_t minWDistMV) { fMinWDistMV = minWDistMV;}
  void SetCheckPlpFromDifferentBCMV(Bool_t checkPlpFromDifferentBCMV) { fCheckPlpFromDifferentBCMV = checkPlpFromDifferentBCMV;}
  //SPD Pileup slection
  void SetMinPlpContribSPD(Int_t minPlpContribSPD) { fMinPlpContribSPD = minPlpContribSPD;}
  void SetMinPlpZdistSPD(Float_t minPlpZdistSPD) { fMinPlpZdistSPD = minPlpZdistSPD;}
  void SetnSigmaPlpZdistSPD(Float_t nSigmaPlpZdistSPD) { fnSigmaPlpZdistSPD = nSigmaPlpZdistSPD;}
  void SetnSigmaPlpDiamXYSPD(Float_t nSigmaPlpDiamXYSPD) { fnSigmaPlpDiamXYSPD = nSigmaPlpDiamXYSPD;}
  void SetnSigmaPlpDiamZSPD(Float_t nSigmaPlpDiamZSPD) { fnSigmaPlpDiamZSPD = nSigmaPlpDiamZSPD;}
  void SetUseSPDCutInMultBins(Bool_t useSPDCutInMultBins) { fUseSPDCutInMultBins = useSPDCutInMultBins;}
  
  // SPD cluster-vs-tracklet cut
  void SetASPDCvsTCut(Float_t a) { fASPDCvsTCut = a; }
  void SetBSPDCvsTCut(Float_t b) { fBSPDCvsTCut = b; }
  
  //multiplicity selection in pp
  Float_t GetMultiplicityPercentile(AliVEvent *event, TString lMethod = "V0M");
    
 private:
  
  Bool_t fisAOD; // flag for AOD:1 or ESD:0
  
  Int_t fMinVtxContr; // minimum vertex contributors
  Float_t fMaxVtxZ;   // maximum |z| of primary vertex
  
  Bool_t fCutOnZVertexSPD; // 0: no cut, 1: |zvtx-SPD - zvtx-TPC|<0.5cm
  
  Bool_t  fUseMVPlpSelection; //switch between SPD and MV pileup
  Bool_t  fUseOutOfBunchPileUp; //BC information from the trigger is used to tag out-of-bunch pileup
  
  Int_t    fMinPlpContribMV; //minimum contributors to the pilup vertices, multi-vertex
  Float_t  fMaxPlpChi2MV; //minimum value of Chi2perNDF of the pileup vertex, multi-vertex
  Float_t  fMinWDistMV; //minimum of the sqrt of weighted distance between the primary and the pilup vertex, multi-vertex
  Bool_t  fCheckPlpFromDifferentBCMV; //pileup from different BC (Bunch Crossings)
  
  Int_t    fMinPlpContribSPD; //minimum contributors to the pilup vertices, SPD
  Float_t  fMinPlpZdistSPD;  //minimum distance for the SPD pileup vertex
  Float_t  fnSigmaPlpZdistSPD;  //cut on Z for SPD pileup
  Float_t  fnSigmaPlpDiamXYSPD;  //cut on nsigma diamond XY for SPD pileup
  Float_t  fnSigmaPlpDiamZSPD;  //cut on nsigma diamond Z for SPD pileup
  Bool_t  fUseSPDCutInMultBins;  //use IsPileupFromSPDInMultBins instead of IsPileupFromSPD
  
  Float_t fASPDCvsTCut; // constant for the linear cut in SPD clusters vs tracklets
  Float_t fBSPDCvsTCut; // slope for the linear cut in SPD  clusters vs tracklets
  
  AliPPVsMultUtils *fPPVsMultUtils; //! multiplicity selection in pp

  AliAnalysisUtils(const AliAnalysisUtils& obj); // copy constructor
  AliAnalysisUtils& operator=(const AliAnalysisUtils& other); // assignment
    
  ClassDef(AliAnalysisUtils,3) // base helper class
};
#endif
 
 AliAnalysisUtils.h:1
 AliAnalysisUtils.h:2
 AliAnalysisUtils.h:3
 AliAnalysisUtils.h:4
 AliAnalysisUtils.h:5
 AliAnalysisUtils.h:6
 AliAnalysisUtils.h:7
 AliAnalysisUtils.h:8
 AliAnalysisUtils.h:9
 AliAnalysisUtils.h:10
 AliAnalysisUtils.h:11
 AliAnalysisUtils.h:12
 AliAnalysisUtils.h:13
 AliAnalysisUtils.h:14
 AliAnalysisUtils.h:15
 AliAnalysisUtils.h:16
 AliAnalysisUtils.h:17
 AliAnalysisUtils.h:18
 AliAnalysisUtils.h:19
 AliAnalysisUtils.h:20
 AliAnalysisUtils.h:21
 AliAnalysisUtils.h:22
 AliAnalysisUtils.h:23
 AliAnalysisUtils.h:24
 AliAnalysisUtils.h:25
 AliAnalysisUtils.h:26
 AliAnalysisUtils.h:27
 AliAnalysisUtils.h:28
 AliAnalysisUtils.h:29
 AliAnalysisUtils.h:30
 AliAnalysisUtils.h:31
 AliAnalysisUtils.h:32
 AliAnalysisUtils.h:33
 AliAnalysisUtils.h:34
 AliAnalysisUtils.h:35
 AliAnalysisUtils.h:36
 AliAnalysisUtils.h:37
 AliAnalysisUtils.h:38
 AliAnalysisUtils.h:39
 AliAnalysisUtils.h:40
 AliAnalysisUtils.h:41
 AliAnalysisUtils.h:42
 AliAnalysisUtils.h:43
 AliAnalysisUtils.h:44
 AliAnalysisUtils.h:45
 AliAnalysisUtils.h:46
 AliAnalysisUtils.h:47
 AliAnalysisUtils.h:48
 AliAnalysisUtils.h:49
 AliAnalysisUtils.h:50
 AliAnalysisUtils.h:51
 AliAnalysisUtils.h:52
 AliAnalysisUtils.h:53
 AliAnalysisUtils.h:54
 AliAnalysisUtils.h:55
 AliAnalysisUtils.h:56
 AliAnalysisUtils.h:57
 AliAnalysisUtils.h:58
 AliAnalysisUtils.h:59
 AliAnalysisUtils.h:60
 AliAnalysisUtils.h:61
 AliAnalysisUtils.h:62
 AliAnalysisUtils.h:63
 AliAnalysisUtils.h:64
 AliAnalysisUtils.h:65
 AliAnalysisUtils.h:66
 AliAnalysisUtils.h:67
 AliAnalysisUtils.h:68
 AliAnalysisUtils.h:69
 AliAnalysisUtils.h:70
 AliAnalysisUtils.h:71
 AliAnalysisUtils.h:72
 AliAnalysisUtils.h:73
 AliAnalysisUtils.h:74
 AliAnalysisUtils.h:75
 AliAnalysisUtils.h:76
 AliAnalysisUtils.h:77
 AliAnalysisUtils.h:78
 AliAnalysisUtils.h:79
 AliAnalysisUtils.h:80
 AliAnalysisUtils.h:81
 AliAnalysisUtils.h:82
 AliAnalysisUtils.h:83
 AliAnalysisUtils.h:84
 AliAnalysisUtils.h:85
 AliAnalysisUtils.h:86
 AliAnalysisUtils.h:87
 AliAnalysisUtils.h:88
 AliAnalysisUtils.h:89
 AliAnalysisUtils.h:90
 AliAnalysisUtils.h:91
 AliAnalysisUtils.h:92
 AliAnalysisUtils.h:93
 AliAnalysisUtils.h:94
 AliAnalysisUtils.h:95
 AliAnalysisUtils.h:96
 AliAnalysisUtils.h:97
 AliAnalysisUtils.h:98
 AliAnalysisUtils.h:99
 AliAnalysisUtils.h:100
 AliAnalysisUtils.h:101