ROOT logo
#ifndef ALIHFEEXTRAEVENTCUTS_H
#define ALIHFEEXTRAEVENTCUTS_H
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
// Cut on the Event at reconstructed level: for the moment 
// just the requirements on the number of charged tracks and on 
// the vertex position and resolution are implemented
// The argument of IsSelected member function (passed object) is cast into 
// an AliESDEvent. In the future may be modified to use AliVEvent interface
// and include more cut variables.
// The class derives from AliCFCutBase
// Author:R.Bailhache


#include "AliCFCutBase.h"
class TH1F;
class TBits;
class AliVVertex;
class AliVEvent;
class AliAnalysisUtils;
//_____________________________________________________________________________
class AliHFEextraEventCuts: public AliCFCutBase 
{
 public :
  AliHFEextraEventCuts() ;
  AliHFEextraEventCuts(Char_t* name, Char_t* title) ;
  AliHFEextraEventCuts(const AliHFEextraEventCuts& c) ;
  AliHFEextraEventCuts& operator=(const AliHFEextraEventCuts& c) ;
  ~AliHFEextraEventCuts();
  Bool_t IsSelected(TObject* obj);
  Bool_t IsSelected(TList* /*list*/) {return kTRUE;}

  void SetRequireVtxCuts(Bool_t vtx=kFALSE) {fRequireVtxCuts=vtx;} // cut values setter
  void SetVertexZCut(Double_t zMin=-1.e99, Double_t zMax=1.e99) { fVtxZMin=zMin; fVtxZMax=zMax;} // cut values setter

  void SetVertexNContributors(Int_t min) {fVtxNCtrbMin=min;}
  void SetUseMixedVertex() {fVtxMixed=kTRUE; fVtxSPD=kFALSE;} //default is vertex from tracks
  void SetUseSPDVertex() {fVtxSPD=kTRUE; fVtxMixed=kFALSE;} //default is vertex from tracks
  void SetCheckCorrelationSPDVtx() {fCheckCorrelationSPDVtx=kTRUE;} // check the correlation between z of different vertices
  void SetCheckSPDResolution() {fVtxResolution = kTRUE;} // check resolution on the SPD vertex
  void SetpAPileupCut() { fPApileupCut = kTRUE; } 
 
  Bool_t   GetRequireVtxCuts() const {return fRequireVtxCuts;} // cut value getter
  Double_t GetVertexZMax() const {return fVtxZMax;} // cut values getter
  Double_t GetVertexZMin() const {return fVtxZMin;} // cut values getter
  
  // QA histogram setter
  // please use indices from the enumeration below
  void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
  void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);
  enum{kVtxPosZ,
       kVtxNCtrb,
       kCorrelation,
       kResolution,
       kpApileup,
       kNCuts,
       kNStepQA=2
  };
  
 protected:
  void SelectionBitMap(TObject* obj);
  void AddQAHistograms(TList *qaList) ;
  void DefineHistograms(); 		// books histograms 
  void Initialise();			// sets everything to 0
  void FillHistograms(TObject* obj, Bool_t b);
  const AliVVertex *GetPrimaryVertexSPD(const AliVEvent * const inputEvent);
  const AliVVertex *GetPrimaryVertexTracks(const AliVEvent *const inputEvent);

  AliAnalysisUtils *fAnalysisUtils;     // Analysis Utils for pA pileup cut
  Bool_t fRequireVtxCuts ;              // The type of trigger to be checked
  Double_t fVtxZMax ;                   // Z vertex position, maximum value
  Double_t fVtxZMin ;                   // Z vertex position, minimum value
  Int_t    fVtxNCtrbMin;                // Min number of contributors to vertex
  Bool_t   fVtxMixed;                   // Flag for use of mixed vertex (primary vertex with track, if not SPD vertex)
  Bool_t   fVtxSPD;                     // Flag for use of SPD vertex 
  Bool_t   fCheckCorrelationSPDVtx;     // Check the correlation SPD, track vertex
  Bool_t   fVtxResolution;              // Check vertex resolution cut
  Bool_t   fPApileupCut;                // Apply pA-pileup cut
 
  TBits *fBitMap ; //cut mask

  TH1F* fhQA[kNCuts][kNStepQA];		// QA Histograms

  ClassDef(AliHFEextraEventCuts,3);
};

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