ROOT logo
#ifndef ALIDIELECTRONTRACKCUTS_H
#define ALIDIELECTRONTRACKCUTS_H

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

//#############################################################
//#                                                           # 
//#         Class AliDielectronTrackCuts                     #
//#                                                           #
//#  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 Tü / Jens.Wiechula@cern.ch      #
//#                                                           #
//#############################################################

#include <AliPID.h>
#include <AliAnalysisCuts.h>

class AliDielectronTrackCuts : public AliAnalysisCuts {
public:
  enum ITSClusterRequirement { kOff = 0, kNone, kAny, kFirst, kOnlyFirst, kSecond, kOnlySecond, kBoth };
  enum Detector { kSPD = 0, kSDD, kSSD };
  enum ITScluster { kSPD0=0x0001, kSPD1=0x0002,
                    kSDD0=0x0004, kSDD1=0x0008,
                    kSSD0=0x0010, kSSD1=0x0020};
  enum ITSclusterCutType { kOneOf=0, kAtLeast, kExact };
  enum EFilterBit  { kSwitchOff=0, kTPCqual=1, kITSonly=2, kTPCqualSPDany=4, kTPCqualSPDanyPIDele=8, kTPConly=128 };

  AliDielectronTrackCuts();
  AliDielectronTrackCuts(const char*name, const char* title);

  virtual ~AliDielectronTrackCuts();

  void SetV0DaughterCut(AliPID::EParticleType type, Bool_t negate=kFALSE);
  void SetClusterRequirementITS(Detector det, ITSClusterRequirement req = kOff) { fCutClusterRequirementITS[det] = req; }
  
  void SetRequireITSRefit(Bool_t req) { fRequireITSRefit=req; }
  void SetRequireTPCRefit(Bool_t req) { fRequireTPCRefit=req; }

  void SetTPCNclFRobust(Int_t cut) { fTPCNclRobustCut=cut; }
  void SetMinNCrossedRowsOverFindable(Double_t CrossedOverFindable) { fTPCcrossedOverFindable = CrossedOverFindable; }
  
  Int_t GetV0DaughterCut() const { return fV0DaughterCut; }
  ITSClusterRequirement GetClusterRequirementITS(Detector det) const { return fCutClusterRequirementITS[det]; }

  void SetITSclusterCut(ITSclusterCutType type, UChar_t map) { fITSclusterBitMap=map; fITSclusterCutType=type; }


  void SetAODFilterBit(EFilterBit type) { fAODFilterBit = type; }
  void SetMaxWaivedITSNcls(Int_t max) { fWaiveITSNcls = max; }

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

private:

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

  Int_t fV0DaughterCut;                                // Bit for V0 daughter selection
  Bool_t fNegateV0DauterCut;                           // If to negate the V0 daughter cut
  ITSClusterRequirement fCutClusterRequirementITS[3];  // detailed ITS cluster requirements for (SPD, SDD, SSD)

  UChar_t fITSclusterBitMap;                           // map of requested ITS clusters
  ITSclusterCutType fITSclusterCutType;                // logic of requested ITS clusters
  
  Bool_t fRequireITSRefit;                             // require ITS refit
  Bool_t fRequireTPCRefit;                             // require TPC refit

  Int_t fTPCNclRobustCut;                              // TPC Ncl cut, Robust, corresponds to 'crossed Rows' in ESDTrackCuts
  Double_t fTPCcrossedOverFindable;			           // TPC Crossed Rows / Findable Clusters Cut, analogous to ESDTrackCuts

  Int_t fAODFilterBit;                                 // Filter bit for AOD analysis
  Int_t fWaiveITSNcls;                                 // max number of waived ITS clusters after first hit 

  Bool_t CheckITSClusterRequirement(ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2) const;
  Bool_t CheckITSClusterCut(UChar_t itsBits) const;

  ClassDef(AliDielectronTrackCuts,3)         // Dielectron TrackCuts
};



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