ROOT logo
#ifndef ALIDIELECTRONVARCUTS_H
#define ALIDIELECTRONVARCUTS_H

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

//#############################################################
//#                                                           # 
//#         Class AliDielectronVarCuts                        #
//#         Provide cuts for all variables handled in         #
//#           AliDielectronVarManager                         #
//#                                                           #
//#  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 <Rtypes.h>
#include <TBits.h>

#include <AliAnalysisCuts.h>
#include "AliDielectronVarManager.h"

class THnBase;
class AliDielectronVarCuts : public AliAnalysisCuts {
public:
  // Whether all cut criteria have to be fulfilled of just any
  enum CutType { kAll=0, kAny };

  AliDielectronVarCuts();
  AliDielectronVarCuts(const char* name, const char* title);
  virtual ~AliDielectronVarCuts();
  //TODO: make copy constructor and assignment operator public
  void AddCut(AliDielectronVarManager::ValueTypes type, Double_t min, Double_t max, Bool_t excludeRange=kFALSE);
  void AddCut(AliDielectronVarManager::ValueTypes type, Double_t value, Bool_t excludeRange=kFALSE);
  void AddBitCut(AliDielectronVarManager::ValueTypes type, UInt_t bit, Bool_t excludeRange=kFALSE);
  void AddCut(AliDielectronVarManager::ValueTypes type, Double_t min, THnBase * const max,  Bool_t excludeRange=kFALSE);

  // setters
  void    SetCutOnMCtruth(Bool_t mc=kTRUE) { fCutOnMCtruth=mc; }
  void    SetCutType(CutType type)         { fCutType=type;    }

  // getters
  Bool_t  GetCutOnMCtruth() const { return fCutOnMCtruth; }
  CutType GetCutType()      const { return fCutType;      }

  Int_t GetNCuts() { return fNActiveCuts; }

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

//   virtual Bool_t IsSelected(TObject* track, TObject */*event*/=0);
//   virtual Long64_t Merge(TCollection* /* list */)      { return 0; }

  //
  // Cut information
  //
  virtual UInt_t GetSelectedCutsMask() const { return fSelectedCutsMask; }

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


 private:

  TBits     *fUsedVars;            // list of used variables
  UShort_t  fActiveCuts[AliDielectronVarManager::kNMaxValues];       // list of activated cuts
  UShort_t  fNActiveCuts;                      // number of acive cuts
  UInt_t    fActiveCutsMask;                   // mask of active cuts

  UInt_t   fSelectedCutsMask;                 // Maks of selected cuts, is available after calling IsSelected

  Bool_t   fCutOnMCtruth;                     // whether to cut on the MC truth of the particle

  CutType  fCutType;                          // type of the cut: any, all

  Double_t fCutMin[AliDielectronVarManager::kNMaxValues];           // minimum values for the cuts
  Double_t fCutMax[AliDielectronVarManager::kNMaxValues];           // maximum values for the cuts
  Bool_t fCutExclude[AliDielectronVarManager::kNMaxValues];         // inverse cut logic?
  Bool_t fBitCut[AliDielectronVarManager::kNMaxValues];             // bit cut
  THnBase  *fUpperCut[AliDielectronVarManager::kNMaxValues];        // use object as upper cut

  AliDielectronVarCuts(const AliDielectronVarCuts &c);
  AliDielectronVarCuts &operator=(const AliDielectronVarCuts &c);

  ClassDef(AliDielectronVarCuts,6)         //Cut class providing cuts to all infomation available for the AliVParticle interface
};


//
//Inline functions
//
inline void AliDielectronVarCuts::AddCut(AliDielectronVarManager::ValueTypes type, Double_t value, Bool_t excludeRange)
{
  //
  // Set cut in a small delta around value
  //
  const Double_t kDelta=1e-20;
  AddCut(type,value-kDelta,value+kDelta, excludeRange);
}

#endif

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