ROOT logo
#ifndef ALIRDHFCUTSD0TOKPI_H
#define ALIRDHFCUTSD0TOKPI_H
/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */ 

//***********************************************************
// Class AliRDHFCutsD0toKpi
// class for cuts on AOD reconstructed D0->Kpi
// Author: A.Dainese, andrea.dainese@pd.infn.it
//***********************************************************

#include "AliRDHFCuts.h"

class AliAODEvent;
class AliAODRecoDecayHF;
class AliAODRecoDecayHF2Prong;

class AliRDHFCutsD0toKpi : public AliRDHFCuts 
{
 public:


  AliRDHFCutsD0toKpi(const char* name="CutsD0toKpi");
  
  virtual ~AliRDHFCutsD0toKpi();

  AliRDHFCutsD0toKpi(const AliRDHFCutsD0toKpi& source);
  AliRDHFCutsD0toKpi& operator=(const AliRDHFCutsD0toKpi& source); 

  using AliRDHFCuts::GetCutVarsForOpt;
  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters){
    return GetCutVarsForOpt(d,vars,nvars,pdgdaughters,0x0);
  }
  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);

  using AliRDHFCuts::IsSelected;
  virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel) 
                         {return IsSelected(obj,selectionLevel,0);}
  virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel,AliAODEvent* aod);

  virtual Int_t IsSelectedCombPID(AliAODRecoDecayHF* d); 
  virtual void CalculateBayesianWeights(AliAODRecoDecayHF* d);

  Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);}
  Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(1,iPtBin)] : 1.e6);}
  Int_t CombineSelectionLevels(Int_t selectionvalTrack,Int_t selectionvalCand,Int_t selectionvalPID)const;
  virtual Bool_t IsInFiducialAcceptance(Double_t pt,Double_t y) const;
  virtual void SetStandardCutsPP2010();
  virtual void SetStandardCutsPP2010vsMult();
  virtual void SetStandardCutsPP2011_276TeV();
  virtual void SetStandardCutsPbPb2010();
  virtual void SetStandardCutsPbPb2011();
  void SetStandardCutsPbPb2010Peripherals();
  virtual Int_t IsSelectedPID(AliAODRecoDecayHF *rd);
  Int_t IsSelectedPIDdefault(AliAODRecoDecayHF *rd);
  Int_t IsSelectedSpecialCuts(AliAODRecoDecayHF *d) const;
  void SetUseSpecialCuts(Bool_t useSpecialCuts) {fUseSpecialCuts=useSpecialCuts;}
  void SetMaximumPtSpecialCuts(Double_t pt) { fPtMaxSpecialCuts=pt; }
  void SetMaximumPforPID(Double_t p){fmaxPtrackForPID=p;}
  Double_t GetMaximumPforPID(){return fmaxPtrackForPID;}
  Double_t GetMaximumPtSpecialCuts() const { return fPtMaxSpecialCuts; }
  void SetLowPt(Bool_t lowpt,Double_t ptlow=2.) {fLowPt=lowpt;fPtLowPID=ptlow;}
  Bool_t GetUseSpecialCuts() const {return fUseSpecialCuts;}
  void SetUseDefaultPID(Bool_t defPID){fDefaultPID=defPID;}
  Bool_t GetIsUsedDefPID(){return fDefaultPID;}
  Double_t GetPtForPIDtight()const {return fPtLowPID;}
  void SetUseKF(Bool_t useKF);
  Bool_t GetIsUsedKF() const {return fUseKF;}
  void SetWeightsPositive(Double_t* weights){
     for (Int_t i = 0; i<AliPID::kSPECIES; i++) {
         fWeightsPositive[i] = weights[i];
     }
}
  Double_t *GetWeightsPositive() const {return fWeightsPositive;}
  void SetWeightsNegative(Double_t* weights){
     for (Int_t i = 0; i<AliPID::kSPECIES; i++) {
         fWeightsNegative[i] = weights[i];
     }
     }
  Double_t *GetWeightsNegative() const {return fWeightsNegative;}
  void SetBayesianStrategy(Int_t strat) {fBayesianStrategy=strat;}
  Int_t GetBayesianStrategy() const {return fBayesianStrategy;}
  
  enum EBayesianStrategy {
     kBayesMomentum,
     kBayesWeight,
     kBayesWeightNoFilter,
     kBayesSimple
  };

  
  enum EBayesianCondition {
     kMaxProb,
     kAbovePrior,
     kThreshold
  };
  
  void SetBayesianCondition(Int_t cond) {fBayesianCondition=cond;}
  Int_t GetBayesianCondition() const {return fBayesianCondition;}
  void SetCombPID(Bool_t CombPID){fCombPID=CombPID;}
  Bool_t GetCombPID() const {return fCombPID;}
  void SetBayesProbThreshold(Double_t thresh){fProbThreshold=thresh;}
  Double_t GetBayesProbThreshold() const {return fProbThreshold;}
  

 protected:
  
  Int_t IsSelectedKF(AliAODRecoDecayHF2Prong* d,AliAODEvent* aod) const;

  Bool_t fUseSpecialCuts;  // flag to switch on/off special cuts
  Bool_t fLowPt;           // flag to switch on/off different pid for low pt D0
  Bool_t fDefaultPID;      // flag to switch on/off the default pid
  
  Bool_t fUseKF;           // flag to switch on/off D0 selection via KF 
  Double_t fPtLowPID;      // transverse momentum below which the strong PID is applied
  Double_t fPtMaxSpecialCuts; // transverse momentum below which the special cuts are applied
  
                              //  if set to zero, used for all pt
  Double_t  fmaxPtrackForPID; // max momentum for applying PID

  Bool_t fCombPID;		//switch for Bayesian
  Int_t fnSpecies;   //number of species (used only for array declaration)
  Double_t* fWeightsPositive; //[fnSpecies] Bayesian weights for positive track
  Double_t* fWeightsNegative; //[fnSpecies] Bayesian weights for negative track

  Double_t fProbThreshold; //Probability threshold for kaon to be accepted in Bayesian method (only applied if fBayesianCondition==kThreshold)
  
  Int_t fBayesianStrategy;    // Switch for which Bayesian PID strategy to use
  Int_t fBayesianCondition;   //Switch for conition applied to kaons

  ClassDef(AliRDHFCutsD0toKpi,11);  // class for cuts on AOD reconstructed D0->Kpi
};

#endif

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