ROOT logo
#ifndef ALIESDPIDCUTS_H
#define ALIESDPIDCUTS_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */
//
// Class for PID cuts
// Cuts the track based on numbers of sigmas in the detectors TPC and TOF
// The sigma cuts can be applied symmetrically or assymetrically
//

#ifndef ALIANALYSISCUTS_H
#include "AliAnalysisCuts.h"
#endif

#ifndef ALIPID_H
#include "AliPID.h"
#endif

class TCollection;
class TH1F;
class TH1I;
class TH2I;
class TList;
class AliESDtrack;
class AliESDEvent;
class AliESDpid;

class AliESDpidCuts : public AliAnalysisCuts{
  enum{
    kHasHistograms = BIT(17)
  };
  public: 
    AliESDpidCuts(const Char_t *name = "AliESDpidCuts", const Char_t *title = "");
    AliESDpidCuts(const AliESDpidCuts &ref);  // Copy constructor
    AliESDpidCuts &operator=(const AliESDpidCuts &ref);
    virtual ~AliESDpidCuts();

    virtual void Init();
    virtual void Copy(TObject &c) const;
    virtual Long64_t Merge(TCollection *coll);

    Bool_t HasHistograms() const { return TestBit(kHasHistograms); }
    void DefineHistograms(Color_t color = kRed);
    void DrawHistograms();
    void SaveHistograms(const Char_t *location = NULL);
    virtual Bool_t IsSelected(TObject *);
    virtual Bool_t IsSelected(TList * /*lst*/) {return kTRUE; }
    virtual Bool_t AcceptTrack(const AliESDtrack *track, const AliESDEvent *event);

    void SetPIDResponse(AliPIDResponse * pidresponse) { fPIDresponse = pidresponse; }
    AliPIDResponse *GetPIDresponse() { return fPIDresponse; };
    
    void SetTPCclusterRatioCut(Float_t clr) { fCutTPCclusterRatio = clr; }
    inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma);
    inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma);
    inline void SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t nSigma);
    inline void SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma);
    void SetMinMomentumTOF(Float_t mom) { fMinMomentumTOF = mom; }
  
  protected:
    static const Int_t kNcuts;                      // Number of Cuts
    AliPIDResponse *fPIDresponse;                   //! PID helper (n-sigma-cut)
    Char_t  fTPCsigmaCutRequired;                   // Sigma cut Requirement for TPC and Particle Species
    Char_t  fTOFsigmaCutRequired;                   // Sigma cut Requirement for TOF and Particle Species
    Float_t fCutTPCnSigma[AliPID::kSPECIES * 2];    // Species dependent cut on the distance to the TPC dE/dx line
    Float_t fCutTOFnSigma[AliPID::kSPECIES * 2];    // Species dependent cut on the distance to the TOF calculated time of flight line
    Float_t fCutTPCclusterRatio;                    // Cut on Ratio of found clusters with repect to findable clusters in the TPC
    Float_t fMinMomentumTOF;                        // Apply TOF PID only above a certain momentum

    //------------------------------------------
    // QA histograms
    TH1I *fHcutStatistics;                       // Cut Statistics
    TH2I *fHcutCorrelation;                      // Cut Correlation
    TH1F *fHclusterRatio[2];                     // TPC cluster Ratio
    TH1F *fHnSigmaTPC[AliPID::kSPECIES][2];      // TPC n-sigma cut
    TH1F *fHnSigmaTOF[AliPID::kSPECIES][2];      // TOF n-sigma cut
    //------------------------------------------
    
    ClassDef(AliESDpidCuts, 3)
};

//_____________________________________________________________________
void AliESDpidCuts::SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma){ 
  //
  // symmetric sigma cut for TPC PID
  //
  fCutTPCnSigma[itype * 2]      = -nSigma;
  fCutTPCnSigma[itype * 2 + 1]  = nSigma; 
  fTPCsigmaCutRequired |= 1 << static_cast<Int_t >(itype);
}    

//_____________________________________________________________________
void AliESDpidCuts::SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma){
  //
  // assymetric sigma cut for TPC PID
  //
  fCutTPCnSigma[itype * 2]      = negSigma;
  fCutTPCnSigma[itype * 2 + 1]  = posSigma;
  fTPCsigmaCutRequired |= 1 << static_cast<Int_t >(itype);
} 

//_____________________________________________________________________
void AliESDpidCuts::SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t nSigma){ 
  //
  // symmetric sigma cut for TOF PID
  //
  fCutTOFnSigma[itype * 2]      = -nSigma;
  fCutTOFnSigma[itype * 2 + 1]  = nSigma; 
  fTOFsigmaCutRequired |= 1 << static_cast<Int_t >(itype);
}    

//_____________________________________________________________________
void AliESDpidCuts::SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma){
  //
  // assymetric sigma cut for TOF PID
  //
  fCutTOFnSigma[itype * 2]      = negSigma;
  fCutTOFnSigma[itype * 2 + 1]  = posSigma;
  fTOFsigmaCutRequired |= 1 << static_cast<Int_t >(itype);
}
#endif
 AliESDpidCuts.h:1
 AliESDpidCuts.h:2
 AliESDpidCuts.h:3
 AliESDpidCuts.h:4
 AliESDpidCuts.h:5
 AliESDpidCuts.h:6
 AliESDpidCuts.h:7
 AliESDpidCuts.h:8
 AliESDpidCuts.h:9
 AliESDpidCuts.h:10
 AliESDpidCuts.h:11
 AliESDpidCuts.h:12
 AliESDpidCuts.h:13
 AliESDpidCuts.h:14
 AliESDpidCuts.h:15
 AliESDpidCuts.h:16
 AliESDpidCuts.h:17
 AliESDpidCuts.h:18
 AliESDpidCuts.h:19
 AliESDpidCuts.h:20
 AliESDpidCuts.h:21
 AliESDpidCuts.h:22
 AliESDpidCuts.h:23
 AliESDpidCuts.h:24
 AliESDpidCuts.h:25
 AliESDpidCuts.h:26
 AliESDpidCuts.h:27
 AliESDpidCuts.h:28
 AliESDpidCuts.h:29
 AliESDpidCuts.h:30
 AliESDpidCuts.h:31
 AliESDpidCuts.h:32
 AliESDpidCuts.h:33
 AliESDpidCuts.h:34
 AliESDpidCuts.h:35
 AliESDpidCuts.h:36
 AliESDpidCuts.h:37
 AliESDpidCuts.h:38
 AliESDpidCuts.h:39
 AliESDpidCuts.h:40
 AliESDpidCuts.h:41
 AliESDpidCuts.h:42
 AliESDpidCuts.h:43
 AliESDpidCuts.h:44
 AliESDpidCuts.h:45
 AliESDpidCuts.h:46
 AliESDpidCuts.h:47
 AliESDpidCuts.h:48
 AliESDpidCuts.h:49
 AliESDpidCuts.h:50
 AliESDpidCuts.h:51
 AliESDpidCuts.h:52
 AliESDpidCuts.h:53
 AliESDpidCuts.h:54
 AliESDpidCuts.h:55
 AliESDpidCuts.h:56
 AliESDpidCuts.h:57
 AliESDpidCuts.h:58
 AliESDpidCuts.h:59
 AliESDpidCuts.h:60
 AliESDpidCuts.h:61
 AliESDpidCuts.h:62
 AliESDpidCuts.h:63
 AliESDpidCuts.h:64
 AliESDpidCuts.h:65
 AliESDpidCuts.h:66
 AliESDpidCuts.h:67
 AliESDpidCuts.h:68
 AliESDpidCuts.h:69
 AliESDpidCuts.h:70
 AliESDpidCuts.h:71
 AliESDpidCuts.h:72
 AliESDpidCuts.h:73
 AliESDpidCuts.h:74
 AliESDpidCuts.h:75
 AliESDpidCuts.h:76
 AliESDpidCuts.h:77
 AliESDpidCuts.h:78
 AliESDpidCuts.h:79
 AliESDpidCuts.h:80
 AliESDpidCuts.h:81
 AliESDpidCuts.h:82
 AliESDpidCuts.h:83
 AliESDpidCuts.h:84
 AliESDpidCuts.h:85
 AliESDpidCuts.h:86
 AliESDpidCuts.h:87
 AliESDpidCuts.h:88
 AliESDpidCuts.h:89
 AliESDpidCuts.h:90
 AliESDpidCuts.h:91
 AliESDpidCuts.h:92
 AliESDpidCuts.h:93
 AliESDpidCuts.h:94
 AliESDpidCuts.h:95
 AliESDpidCuts.h:96
 AliESDpidCuts.h:97
 AliESDpidCuts.h:98
 AliESDpidCuts.h:99
 AliESDpidCuts.h:100
 AliESDpidCuts.h:101
 AliESDpidCuts.h:102
 AliESDpidCuts.h:103
 AliESDpidCuts.h:104
 AliESDpidCuts.h:105
 AliESDpidCuts.h:106
 AliESDpidCuts.h:107
 AliESDpidCuts.h:108
 AliESDpidCuts.h:109
 AliESDpidCuts.h:110
 AliESDpidCuts.h:111
 AliESDpidCuts.h:112
 AliESDpidCuts.h:113
 AliESDpidCuts.h:114
 AliESDpidCuts.h:115
 AliESDpidCuts.h:116
 AliESDpidCuts.h:117
 AliESDpidCuts.h:118
 AliESDpidCuts.h:119
 AliESDpidCuts.h:120
 AliESDpidCuts.h:121