ROOT logo
///////////////////////////////////////////////////////////////////////////
//                                                                       //
// AliFemtoMJTrackCut: A basic track cut that used information from     //
// ALICE ESD to accept or reject the track.                             ////////////////////////////////////////////////
#include "AliESDtrackCuts.h"

#ifndef ALIFEMTOMJTRACKCUT_H
#define ALIFEMTOMJTRACKCUT_H

//#ifndef StMaker_H
//#include "StMaker.h"
//#endif

#include "AliESDtrackCuts.h" //for enum with ITS layers
#include "AliFemtoTrackCut.h"


class AliFemtoMJTrackCut : public AliFemtoTrackCut
{
  public:

  enum PIDMethodType {knSigma=0, kContour=1};
  typedef enum PIDMethodType ReadPIDMethodType;

  AliFemtoMJTrackCut();
  virtual ~AliFemtoMJTrackCut();

  virtual bool Pass(const AliFemtoTrack* aTrack);

  virtual AliFemtoString Report();
  virtual TList *ListSettings();
  virtual AliFemtoParticleType Type(){return hbtTrack;}

  void SetPt(const float& lo, const float& hi);
  void SetRapidity(const float& lo, const float& hi);
  void SetEta(const float& lo, const float& hi);
  void SetCharge(const int& ch);
  void SetPidProbElectron(const float& lo, const float& hi);
  void SetPidProbPion(const float& lo, const float& hi);
  void SetPidProbKaon(const float& lo, const float& hi);
  void SetPidProbProton(const float& lo, const float& hi);
  void SetPidProbMuon(const float& lo, const float& hi);
  void SetLabel(const bool& flag);
  void SetStatus(const long& w);
  void SetminTPCclsF(const short& s);
  void SetminTPCncls(const short& s);
  void SetminITScls(const int& s);
  void SetRemoveKinks(const bool& flag);
  void SetRemoveITSFake(const bool& flag);
  void SetMaxITSChiNdof(const float& maxchi);
  void SetMaxTPCChiNdof(const float& maxchi);
  void SetMaxSigmaToVertex(const float& maxsig);
  void SetMaxImpactXY(const float& maximpxy);
  void SetMinImpactXY(const float& minimpxy);
  void SetMaxImpactZ(const float& maximpz);
  void SetMaxImpactXYPtDep(const float& maxoff, const float& maxnrm, const float& maxpow);
  void SetMostProbablePion();
  void SetMostProbableKaon();
  void SetMostProbableProton();
  void SetLeastProbableProton();
  void SetNoMostProbable();
  void SetMostProbable(const int& num);
  void SetPIDMethod(ReadPIDMethodType newMethod);
  void SetNsigmaTPCTOF(Bool_t);
  void SetNsigmaTPConly(Bool_t);
  void SetNsigma(Double_t);
  void SetClusterRequirementITS(AliESDtrackCuts::Detector det, AliESDtrackCuts::ITSClusterRequirement req = AliESDtrackCuts::kOff);

  void SetMomRangeTOFpidIs(const float& minp, const float& maxp);
  void SetMomRangeTPCpidIs(const float& minp, const float& maxp);
  void SetMomRangeITSpidIs(const float& minp, const float& maxp);
  void SetElectronRejection(Bool_t);

 private:   // here are the quantities I want to cut on...

  int               fCharge;             // particle charge
  float             fPt[2];              // bounds for transverse momentum
  float             fRapidity[2];        // bounds for rapidity
  float             fEta[2];             // bounds for pseudorapidity
  float             fPidProbElectron[2]; // bounds for electron probability
  float             fPidProbPion[2];     // bounds for pion probability
  float             fPidProbKaon[2];     // bounds for kaon probability
  float             fPidProbProton[2];   // bounds for proton probability
  float             fPidProbMuon[2];     // bounds for muon probability

  AliESDtrackCuts::ITSClusterRequirement fCutClusterRequirementITS[3];  // detailed ITS cluster requirements for (SPD, SDD, SSD) - from AliESDtrackcuts!
  bool              fLabel;              // if true label<0 will not pass throught
  long              fStatus;             // staus flag
  ReadPIDMethodType fPIDMethod;          // which PID mehod to use. 0 - nsgima, 1 - contour
  Bool_t            fNsigmaTPCTOF;       // true if squared nsigma from TPC and TOF, false if separately from TPC and TOF
  Bool_t            fNsigmaTPConly;       // true if nsigma from TPC only
  Double_t            fNsigma;       // number of sigmas - 3 by default

  short             fminTPCclsF;         // min number of findable clusters in the TPC
  short             fminTPCncls;         // min number of clusters in the TPC
  int               fminITScls;          // min number of clusters assigned in the ITS
  float             fMaxITSchiNdof;      // maximum allowed chi2/ndof for ITS clusters
  float             fMaxTPCchiNdof;      // maximum allowed chi2/ndof for TPC clusters
  float             fMaxSigmaToVertex;   // maximum allowed sigma to primary vertex
  long              fNTracksPassed;      // passed tracks count
  long              fNTracksFailed;      // failed tracks count
  bool              fRemoveKinks;        // if true particles with any kink label will not pass
  bool              fRemoveITSFake;      // if true particles with ITS fake flag will not pass
  int               fMostProbable;       // this particle type is required to be most probable

  float             fMaxImpactXY;        // Max XY impact parameter
  float             fMinImpactXY;        // Max XY impact parameter
  float             fMaxImpactZ;         // Max Z impact parameter

  float             fMaxImpactXYPtOff;   // Max XY DCA Pt dependent offset
  float             fMaxImpactXYPtNrm;   // Max XY DCA Pt dependent normalization
  float             fMaxImpactXYPtPow;   // Max XY DCA Pt dependent power

  float             fMinPforTOFpid;  // momentum from which TOF PID is requested
  float             fMaxPforTOFpid;  // momentum till which TOF PID is requested
  float             fMinPforTPCpid;  // momentum from which TPC PID is requested
  float             fMaxPforTPCpid;  // momentum till which TPC PID is requested
  float             fMinPforITSpid;  // momentum from which ITS PID is requested
  float             fMaxPforITSpid;  // momentum till which ITS PID is requested
  bool fElectronRejection;

  float PidFractionElectron(float mom) const;
  float PidFractionPion(float mom) const;
  float PidFractionKaon(float mom) const;
  float PidFractionProton(float mom) const;

  bool IsPionTPCdEdx(float mom, float dEdx);
  bool IsKaonTPCdEdx(float mom, float dEdx);
  bool IsProtonTPCdEdx(float mom, float dEdx);

  bool IsPionTOFTime(float mom, float ttof);
  bool IsKaonTOFTime(float mom, float ttof);
  bool IsProtonTOFTime(float mom, float ttof);

  bool IsKaonTPCdEdxNSigma(float mom, float nsigma);
  bool IsKaonTOFNSigma(float mom, float nsigma);
  bool IsKaonNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
  bool IsPionNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
  bool IsProtonNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
  bool IsElectron(float nsigmaTPCE, float nsigmaTPCPi,float nsigmaTPCK, float nsigmaTPCP);

  Bool_t CheckITSClusterRequirement(AliESDtrackCuts::ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2); //the same as in AliESDtrackCuts


#ifdef __ROOT__
  ClassDef(AliFemtoMJTrackCut, 1)
#endif
    };


inline void AliFemtoMJTrackCut::SetPt(const float& lo, const float& hi){fPt[0]=lo; fPt[1]=hi;}
inline void AliFemtoMJTrackCut::SetRapidity(const float& lo,const float& hi){fRapidity[0]=lo; fRapidity[1]=hi;}
inline void AliFemtoMJTrackCut::SetEta(const float& lo,const float& hi){fEta[0]=lo; fEta[1]=hi;}
inline void AliFemtoMJTrackCut::SetCharge(const int& ch){fCharge = ch;}
inline void AliFemtoMJTrackCut::SetPidProbElectron(const float& lo,const float& hi){fPidProbElectron[0]=lo; fPidProbElectron[1]=hi;}
inline void AliFemtoMJTrackCut::SetPidProbPion(const float& lo,const float& hi){fPidProbPion[0]=lo; fPidProbPion[1]=hi;}
inline void AliFemtoMJTrackCut::SetPidProbKaon(const float& lo,const float& hi){fPidProbKaon[0]=lo; fPidProbKaon[1]=hi;}
inline void AliFemtoMJTrackCut::SetPidProbProton
(const float& lo,const float& hi){fPidProbProton[0]=lo; fPidProbProton[1]=hi;}
inline void AliFemtoMJTrackCut::SetPidProbMuon(const float& lo,const float& hi){fPidProbMuon[0]=lo; fPidProbMuon[1]=hi;}
inline void AliFemtoMJTrackCut::SetLabel(const bool& flag){fLabel=flag;}
inline void AliFemtoMJTrackCut::SetStatus(const long& status){fStatus=status;}
inline void AliFemtoMJTrackCut::SetminTPCclsF(const short& minTPCclsF){fminTPCclsF=minTPCclsF;}
inline void AliFemtoMJTrackCut::SetminTPCncls(const short& s){fminTPCncls=s;}
inline void AliFemtoMJTrackCut::SetminITScls(const int& minITScls){fminITScls=minITScls;}
inline void AliFemtoMJTrackCut::SetMostProbablePion() { fMostProbable = 2; }
inline void AliFemtoMJTrackCut::SetMostProbableKaon() { fMostProbable = 3; }
inline void AliFemtoMJTrackCut::SetMostProbableProton() { fMostProbable = 4; }
inline void AliFemtoMJTrackCut::SetLeastProbableProton() { fMostProbable = 5; }
inline void AliFemtoMJTrackCut::SetNoMostProbable() { fMostProbable = 0; }
inline void AliFemtoMJTrackCut::SetMostProbable(const int& num) {  fMostProbable =  num; }
inline void AliFemtoMJTrackCut::SetMaxITSChiNdof(const float& maxchi) { fMaxITSchiNdof = maxchi; }
inline void AliFemtoMJTrackCut::SetMaxTPCChiNdof(const float& maxchi) { fMaxTPCchiNdof = maxchi; }
inline void AliFemtoMJTrackCut::SetMaxSigmaToVertex(const float& maxsig) { fMaxSigmaToVertex = maxsig; }
inline void AliFemtoMJTrackCut::SetMaxImpactXY(const float& maximpxy) { fMaxImpactXY = maximpxy; }
inline void AliFemtoMJTrackCut::SetMinImpactXY(const float& minimpxy) { fMinImpactXY = minimpxy; }
inline void AliFemtoMJTrackCut::SetMaxImpactXYPtDep(const float& maxoff, const float& maxnrm, const float& maxpow) { fMaxImpactXYPtOff = maxoff; fMaxImpactXYPtNrm = maxnrm; fMaxImpactXYPtPow = maxpow; }
inline void AliFemtoMJTrackCut::SetMaxImpactZ(const float& maximpz) { fMaxImpactZ = maximpz; }
inline void AliFemtoMJTrackCut::SetElectronRejection(Bool_t setE) { fElectronRejection = setE; }

#endif
 AliFemtoMJTrackCut.h:1
 AliFemtoMJTrackCut.h:2
 AliFemtoMJTrackCut.h:3
 AliFemtoMJTrackCut.h:4
 AliFemtoMJTrackCut.h:5
 AliFemtoMJTrackCut.h:6
 AliFemtoMJTrackCut.h:7
 AliFemtoMJTrackCut.h:8
 AliFemtoMJTrackCut.h:9
 AliFemtoMJTrackCut.h:10
 AliFemtoMJTrackCut.h:11
 AliFemtoMJTrackCut.h:12
 AliFemtoMJTrackCut.h:13
 AliFemtoMJTrackCut.h:14
 AliFemtoMJTrackCut.h:15
 AliFemtoMJTrackCut.h:16
 AliFemtoMJTrackCut.h:17
 AliFemtoMJTrackCut.h:18
 AliFemtoMJTrackCut.h:19
 AliFemtoMJTrackCut.h:20
 AliFemtoMJTrackCut.h:21
 AliFemtoMJTrackCut.h:22
 AliFemtoMJTrackCut.h:23
 AliFemtoMJTrackCut.h:24
 AliFemtoMJTrackCut.h:25
 AliFemtoMJTrackCut.h:26
 AliFemtoMJTrackCut.h:27
 AliFemtoMJTrackCut.h:28
 AliFemtoMJTrackCut.h:29
 AliFemtoMJTrackCut.h:30
 AliFemtoMJTrackCut.h:31
 AliFemtoMJTrackCut.h:32
 AliFemtoMJTrackCut.h:33
 AliFemtoMJTrackCut.h:34
 AliFemtoMJTrackCut.h:35
 AliFemtoMJTrackCut.h:36
 AliFemtoMJTrackCut.h:37
 AliFemtoMJTrackCut.h:38
 AliFemtoMJTrackCut.h:39
 AliFemtoMJTrackCut.h:40
 AliFemtoMJTrackCut.h:41
 AliFemtoMJTrackCut.h:42
 AliFemtoMJTrackCut.h:43
 AliFemtoMJTrackCut.h:44
 AliFemtoMJTrackCut.h:45
 AliFemtoMJTrackCut.h:46
 AliFemtoMJTrackCut.h:47
 AliFemtoMJTrackCut.h:48
 AliFemtoMJTrackCut.h:49
 AliFemtoMJTrackCut.h:50
 AliFemtoMJTrackCut.h:51
 AliFemtoMJTrackCut.h:52
 AliFemtoMJTrackCut.h:53
 AliFemtoMJTrackCut.h:54
 AliFemtoMJTrackCut.h:55
 AliFemtoMJTrackCut.h:56
 AliFemtoMJTrackCut.h:57
 AliFemtoMJTrackCut.h:58
 AliFemtoMJTrackCut.h:59
 AliFemtoMJTrackCut.h:60
 AliFemtoMJTrackCut.h:61
 AliFemtoMJTrackCut.h:62
 AliFemtoMJTrackCut.h:63
 AliFemtoMJTrackCut.h:64
 AliFemtoMJTrackCut.h:65
 AliFemtoMJTrackCut.h:66
 AliFemtoMJTrackCut.h:67
 AliFemtoMJTrackCut.h:68
 AliFemtoMJTrackCut.h:69
 AliFemtoMJTrackCut.h:70
 AliFemtoMJTrackCut.h:71
 AliFemtoMJTrackCut.h:72
 AliFemtoMJTrackCut.h:73
 AliFemtoMJTrackCut.h:74
 AliFemtoMJTrackCut.h:75
 AliFemtoMJTrackCut.h:76
 AliFemtoMJTrackCut.h:77
 AliFemtoMJTrackCut.h:78
 AliFemtoMJTrackCut.h:79
 AliFemtoMJTrackCut.h:80
 AliFemtoMJTrackCut.h:81
 AliFemtoMJTrackCut.h:82
 AliFemtoMJTrackCut.h:83
 AliFemtoMJTrackCut.h:84
 AliFemtoMJTrackCut.h:85
 AliFemtoMJTrackCut.h:86
 AliFemtoMJTrackCut.h:87
 AliFemtoMJTrackCut.h:88
 AliFemtoMJTrackCut.h:89
 AliFemtoMJTrackCut.h:90
 AliFemtoMJTrackCut.h:91
 AliFemtoMJTrackCut.h:92
 AliFemtoMJTrackCut.h:93
 AliFemtoMJTrackCut.h:94
 AliFemtoMJTrackCut.h:95
 AliFemtoMJTrackCut.h:96
 AliFemtoMJTrackCut.h:97
 AliFemtoMJTrackCut.h:98
 AliFemtoMJTrackCut.h:99
 AliFemtoMJTrackCut.h:100
 AliFemtoMJTrackCut.h:101
 AliFemtoMJTrackCut.h:102
 AliFemtoMJTrackCut.h:103
 AliFemtoMJTrackCut.h:104
 AliFemtoMJTrackCut.h:105
 AliFemtoMJTrackCut.h:106
 AliFemtoMJTrackCut.h:107
 AliFemtoMJTrackCut.h:108
 AliFemtoMJTrackCut.h:109
 AliFemtoMJTrackCut.h:110
 AliFemtoMJTrackCut.h:111
 AliFemtoMJTrackCut.h:112
 AliFemtoMJTrackCut.h:113
 AliFemtoMJTrackCut.h:114
 AliFemtoMJTrackCut.h:115
 AliFemtoMJTrackCut.h:116
 AliFemtoMJTrackCut.h:117
 AliFemtoMJTrackCut.h:118
 AliFemtoMJTrackCut.h:119
 AliFemtoMJTrackCut.h:120
 AliFemtoMJTrackCut.h:121
 AliFemtoMJTrackCut.h:122
 AliFemtoMJTrackCut.h:123
 AliFemtoMJTrackCut.h:124
 AliFemtoMJTrackCut.h:125
 AliFemtoMJTrackCut.h:126
 AliFemtoMJTrackCut.h:127
 AliFemtoMJTrackCut.h:128
 AliFemtoMJTrackCut.h:129
 AliFemtoMJTrackCut.h:130
 AliFemtoMJTrackCut.h:131
 AliFemtoMJTrackCut.h:132
 AliFemtoMJTrackCut.h:133
 AliFemtoMJTrackCut.h:134
 AliFemtoMJTrackCut.h:135
 AliFemtoMJTrackCut.h:136
 AliFemtoMJTrackCut.h:137
 AliFemtoMJTrackCut.h:138
 AliFemtoMJTrackCut.h:139
 AliFemtoMJTrackCut.h:140
 AliFemtoMJTrackCut.h:141
 AliFemtoMJTrackCut.h:142
 AliFemtoMJTrackCut.h:143
 AliFemtoMJTrackCut.h:144
 AliFemtoMJTrackCut.h:145
 AliFemtoMJTrackCut.h:146
 AliFemtoMJTrackCut.h:147
 AliFemtoMJTrackCut.h:148
 AliFemtoMJTrackCut.h:149
 AliFemtoMJTrackCut.h:150
 AliFemtoMJTrackCut.h:151
 AliFemtoMJTrackCut.h:152
 AliFemtoMJTrackCut.h:153
 AliFemtoMJTrackCut.h:154
 AliFemtoMJTrackCut.h:155
 AliFemtoMJTrackCut.h:156
 AliFemtoMJTrackCut.h:157
 AliFemtoMJTrackCut.h:158
 AliFemtoMJTrackCut.h:159
 AliFemtoMJTrackCut.h:160
 AliFemtoMJTrackCut.h:161
 AliFemtoMJTrackCut.h:162
 AliFemtoMJTrackCut.h:163
 AliFemtoMJTrackCut.h:164
 AliFemtoMJTrackCut.h:165
 AliFemtoMJTrackCut.h:166
 AliFemtoMJTrackCut.h:167
 AliFemtoMJTrackCut.h:168
 AliFemtoMJTrackCut.h:169
 AliFemtoMJTrackCut.h:170
 AliFemtoMJTrackCut.h:171
 AliFemtoMJTrackCut.h:172
 AliFemtoMJTrackCut.h:173
 AliFemtoMJTrackCut.h:174
 AliFemtoMJTrackCut.h:175
 AliFemtoMJTrackCut.h:176
 AliFemtoMJTrackCut.h:177
 AliFemtoMJTrackCut.h:178
 AliFemtoMJTrackCut.h:179
 AliFemtoMJTrackCut.h:180
 AliFemtoMJTrackCut.h:181