ROOT logo
///////////////////////////////////////////////////////////////////////////
//                                                                       //
// AliFemtoESDTrackCut: A basic track cut that used information from     //
// ALICE ESD to accept or reject the track.                              //  
// Enables the selection on charge, transverse momentum, rapidity,       //
// pid probabilities, number of ITS and TPC clusters                     //
// Author: Marek Chojnacki (WUT), mchojnacki@knf.pw.edu.pl               //
//                                                                       //
///////////////////////////////////////////////////////////////////////////
#include "AliESDtrackCuts.h"

#ifndef ALIFEMTOKKTRACKCUT_H
#define ALIFEMTOKKTRACKCUT_H

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

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


class AliFemtoKKTrackCut : public AliFemtoTrackCut 
{
  public:

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

  AliFemtoKKTrackCut();
  virtual ~AliFemtoKKTrackCut();

  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 SetMaxImpactZ(const float& maximpz);
  void SetMaxImpactXYPtDep(const float& maxoff, const float& maxnrm, const float& maxpow);
  void SetMostProbablePion();
  void SetMostProbableKaon();
  void SetMostProbableProton();
  void SetNoMostProbable(); 
  void SetPIDMethod(ReadPIDMethodType newMethod);
  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);

  //ml
 void SetNsigmaTPCle250(Double_t);
 void SetNsigmaTPC250_400(Double_t);
 void SetNsigmaTPC400_450(Double_t);
 void SetNsigmaTPC450_500(Double_t);
 void SetNsigmaTPCge500(Double_t);

 void SetNsigmaTOF500_800(Double_t);
 void SetNsigmaTOF800_1000(Double_t);
 void SetNsigmaTOFge1000(Double_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 

  //ml
 Double_t fNsigmaTPCle250;
 Double_t fNsigmaTPC250_400;
 Double_t fNsigmaTPC400_450;
 Double_t fNsigmaTPC450_500;
 Double_t fNsigmaTPCge500;

 Double_t fNsigmaTOF500_800;
 Double_t fNsigmaTOF800_1000;
 Double_t fNsigmaTOFge1000;



  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             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

  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_t CheckITSClusterRequirement(AliESDtrackCuts::ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2); //the same as in AliESDtrackCuts


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


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




#endif

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