ROOT logo
#ifndef ALIDIELECTRONEVENTCUTS_H
#define ALIDIELECTRONEVENTCUTS_H

/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//#############################################################
//#                                                           # 
//#         Class AliDielectronEventCuts                     #
//#                                                           #
//#  Authors:                                                 #
//#   Anton     Andronic, GSI / A.Andronic@gsi.de             #
//#   Ionut C.  Arsene,   GSI / I.C.Arsene@gsi.de             #
//#   Julian    Book,     Uni Ffm / Julian.Book@cern.ch       #
//#   Frederick Kramer,   Uni Ffm, / Frederick.Kramer@cern.ch #
//#   Magnus    Mager,    CERN / Magnus.Mager@cern.ch         #
//#   WooJin J. Park,     GSI / W.J.Park@gsi.de               #
//#   Jens      Wiechula, Uni HD / Jens.Wiechula@cern.ch      #
//#                                                           #
//#############################################################

#include <TF1.h>
#include <TVectorD.h>
#include <TBits.h>

#include <AliAnalysisUtils.h>
#include <AliAnalysisCuts.h>

class AliTriggerAnalysis;
class AliESDVertex;
class AliAODVertex;


class AliDielectronEventCuts : public AliAnalysisCuts {
public:
  enum EVtxType { kVtxTracks=0, kVtxSPD, kVtxTPC, kVtxAny, kVtxTracksOrSPD };
  
  AliDielectronEventCuts();
  AliDielectronEventCuts(const char*name, const char* title);

  virtual ~AliDielectronEventCuts();

  void SetRunRejection(const TVectorD * vec)    { fRun.Use(vec->GetNrows(),vec->GetMatrixArray()); }
  void SetVertexType(EVtxType type)             { fVtxType=type;                }
  void SetVertexZ(Double_t zmin, Double_t zmax) { fVtxZmin=zmin; fVtxZmax=zmax; }
  void SetRequireVertex(Bool_t req=kTRUE)       { fRequireVtx=req;              }
  void SetRequireV0and(UChar_t type=1)          { fRequireV0and=type;           }
  void SetMinVtxContributors(Int_t min=1)       { fMinVtxContributors=min;      }
  void SetCutOnMultipicityITSTPC(Bool_t mult=kTRUE) { fMultITSTPC=mult;         }
  void SetCentralityRange(Double_t min, Double_t max) { fCentMin=min; fCentMax=max; }
  void SetCutOnV0MultipicityNTrks(TF1* parMean, TF1* parSigma, Double_t cutSigma=3.) { fparMean=parMean; fparSigma=parSigma; fcutSigma=cutSigma; }
  void SetCutOnNVtxContributorsGloablTPC(TF1* parMin, TF1* parMax) { fparMinVtxContributors=parMin; fparMaxVtxContributors=parMax; }
  void SetRequire2013vertexandevent(Bool_t req13 = kTRUE) {fRequire13sel = req13; }
  void SetMinCorrCutFunction(TF1 *fun, UInt_t varx, UInt_t vary=0);
  void SetMaxCorrCutFunction(TF1 *fun, UInt_t varx, UInt_t vary=0);

  //
  //Analysis cuts interface
  //
  virtual Bool_t IsSelected(TObject* event);
  Bool_t IsSelectedESD(TObject* event);
  Bool_t IsSelectedAOD(TObject* event);
  virtual Bool_t IsSelected(TList*   /* list */ ) {return kFALSE;}

  void Print(const Option_t* option = "") const;

private:
  static const char* fgkVtxNames[AliDielectronEventCuts::kVtxTracksOrSPD+1];  //vertex names

  TBits     *fUsedVars;             // list of used variables
  TVectorD fRun;                    // run rejection vector
  Double_t fVtxZmin;                // minimum z vertex position
  Double_t fVtxZmax;                // maximum z vertex position
  Bool_t   fRequireVtx;             // require a vertex
  Int_t    fMinVtxContributors;     // min number of vertex contributors
  Bool_t   fMultITSTPC;             // if to cut on the ITS TPC multiplicity correlation (Pb-Pb)
  Double_t fCentMin;                // minimum multiplity percentile
  Double_t fCentMax;                // maximum multiplity percentile
  EVtxType fVtxType;                // vertex type
  Bool_t fRequire13sel;             //bit to select event and vertex selection proposed for 2013 in 
                                    //https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PAVertexSelectionStudies
  AliAnalysisUtils fUtils;          //data member to use utility class for event and vertex selection in 2013
  

  UChar_t fRequireV0and;             // use V0and triggered events only

  AliTriggerAnalysis *fTriggerAnalysis; //! trigger analysis class
  const AliESDVertex *fkVertex;         //! current vertex
  const AliAODVertex *fkVertexAOD;      //! current vertex AOD

  TH1* fCorrCutMin[5];       //parametrization of lower limit correlation cut
  TH1* fCorrCutMax[5];       //parametrization of upper limit correlation cut

  TF1*     fparMean;                // parametrization of the mean values
  TF1*     fparSigma;               // parametrization of the sigmas
  Double_t fcutSigma;               // number of absolut sigmas inclusion
  TF1*     fparMinVtxContributors;  // parametrization of #vtx contributors global vs TPC (lower limit) 
  TF1*     fparMaxVtxContributors;  // parametrization of #vtx contributors global vs TPC (upper limit) 
  AliDielectronEventCuts(const AliDielectronEventCuts &c);
  AliDielectronEventCuts &operator=(const AliDielectronEventCuts &c);

  
  ClassDef(AliDielectronEventCuts,4)         // Dielectron EventCuts
};


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