ROOT logo
#ifndef ALICFEVENTRECCUTS_H
#define ALICFEVENTRECCUTS_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:S.Arcelli Silvia.Arcelli@cern.ch


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

  void SetNTracksCut(Int_t xMin=-1, Int_t xMax=1000000) {fNTracksMin=xMin; fNTracksMax=xMax;} // cut values setter

  void SetRequireVtxCuts(Bool_t vtx=kFALSE) {fRequireVtxCuts=vtx;} // cut values setter
  void SetVertexXCut(Double_t xMin=-1.e99, Double_t xMax=1.e99) { fVtxXMin=xMin; fVtxXMax=xMax;} // cut values setter
  void SetVertexYCut(Double_t yMin=-1.e99, Double_t yMax=1.e99) { fVtxYMin=yMin; fVtxYMax=yMax;} // cut values setter
  void SetVertexZCut(Double_t zMin=-1.e99, Double_t zMax=1.e99) { fVtxZMin=zMin; fVtxZMax=zMax;} // cut values setter

  void SetVertexXResCut(Double_t xMax=1.e99) {fVtxXResMax=xMax;} // cut values setter
  void SetVertexYResCut(Double_t yMax=1.e99){fVtxYResMax=yMax;} // cut values setter
  void SetVertexZResCut(Double_t zMax=1.e99){fVtxZResMax=zMax;} // cut values setter

  void SetVertexNContributors(Int_t min, Int_t max) {fVtxNCtrbMin=min; fVtxNCtrbMax=max;}
  void SetUseTPCVertex() {fVtxTPC=kTRUE ; fVtxSPD=kFALSE;} //default is vertex from tracks
  void SetUseSPDVertex() {fVtxTPC=kFALSE; fVtxSPD=kTRUE ;} //default is vertex from tracks

  Int_t    GetNTracksMin() const {return fNTracksMin;} // cut values getter
  Int_t    GetNTracksMax() const {return fNTracksMax;} // cut values getter
  Bool_t   GetRequireVtxCuts() const {return fRequireVtxCuts;} // cut value getter
  Double_t GetVertexXMax() const {return fVtxXMax;} // cut values getter
  Double_t GetVertexYMax() const {return fVtxYMax;} // cut values getter
  Double_t GetVertexZMax() const {return fVtxZMax;} // cut values getter
  Double_t GetVertexXMin() const {return fVtxXMin;} // cut values getter
  Double_t GetVertexYMin() const {return fVtxYMin;} // cut values getter
  Double_t GetVertexZMin() const {return fVtxZMin;} // cut values getter
  Double_t GetVertexXResMax() const {return fVtxXResMax;} // cut values getter
  Double_t GetVertexYResMax() const {return fVtxYResMax;} // cut values getter
  Double_t GetVertexZResMax() const {return fVtxZResMax;} // 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{kNTracks=0,
       kVtxPosX,
       kVtxPosY,
       kVtxPosZ,
       kVtxResX,
       kVtxResY,
       kVtxResZ,
       kVtxNCtrb,
       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);

  Int_t fNTracksMin; //minimum number of esd tracks
  Int_t fNTracksMax; //maximum number of esd tracks
  Bool_t fRequireVtxCuts ; //The type of trigger to be checked
  Double_t fVtxXMax ; //X vertex position, maximum value
  Double_t fVtxYMax ; //Y vertex position, maximum value 
  Double_t fVtxZMax ; //Z vertex position, maximum value
  Double_t fVtxXMin ; //X vertex position, minimum value
  Double_t fVtxYMin ; //Y vertex position, minimum value
  Double_t fVtxZMin ; //Z vertex position, minimum value
  Double_t fVtxXResMax ;//Maximum value of sigma_vtx in X
  Double_t fVtxYResMax ;//Maximum value of sigma_vtx in X
  Double_t fVtxZResMax ;//Maximum value of sigma_vtx in X
  Int_t    fVtxNCtrbMin; //Min number of contributors to vertex
  Int_t    fVtxNCtrbMax; //Max number of contributors to vertex
  Bool_t   fVtxTPC;  //Flag for use of TPC vertex
  Bool_t   fVtxSPD;  //Flag for use of SPD vertex

  TBits *fBitMap ; //cut mask

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

  ClassDef(AliCFEventRecCuts,3);
};

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