ROOT logo
#ifndef ALISPECTRABOTHTRACKCUTS_H
#define ALISPECTRABOTHTRACKCUTS_H

/*  See cxx source for full Copyright notice */

//-------------------------------------------------------------------------
//                      AliSpectraBothTrackCuts
//
//
//
//
// Authors: Michele Floris, CERN, Philip Versteeg, UU, Redmer Bertens, UU
//-------------------------------------------------------------------------

class AliAODEvent;
//class AliSpectraBothHistoManager;
class TH1I;
class TH3F;	
class AliAODMCParticle;
class AliAODTrack;
class  AliESDtrackCuts;
#include "AliSpectraBothHistoManager.h"
#include "TNamed.h"
#include "AliESDtrackCuts.h"
 
using namespace AliSpectraNameSpaceBoth;

class AliSpectraBothTrackCuts : public TNamed
{
 public:
  
  enum { kTrkBit = 0, kTrkCuts, kTrkEta, kTrkDCA, kTrkP, kTrkPt,kTrkPtTOF,kTOFMatching,kTrTOFout,kTrTIME,kTrTOFpid,kAccepted,kNTrkCuts};
  enum {kAODobject=0,kESDobject,kotherobject};
  
 AliSpectraBothTrackCuts() : TNamed(), fIsSelected(0), fTrackBits(0), fMinTPCcls(0), fEtaCutMin(0), fEtaCutMax(0),fDCACut(0) ,fPCut(0), fPtCut(0),fYCutMax(0),fYCutMin(0), fPtCutTOFMatching(0),fAODtrack(0), fHashitinSPD1(0),fusedadditionalcuts(kTRUE),
 fPtCutTOFMatchingPion(-1.0),fPtCutTOFMatchingKaon(-1.0),fPtCutTOFMatchingProton(-1.0),fUseTypeDependedTOFCut(kFALSE),fMakeQAhisto(kFALSE),
fHistoCuts(0), fHistoNSelectedPos(0), fHistoNSelectedNeg(0), fHistoNMatchedPos(0), fHistoNMatchedNeg(0), fHistoEtaPhiHighPt(0), fHistoNclustersITS(0),
fHistoDCAzQA(0),fHistoNclustersQA(0),fHistochi2perNDFQA(0),
fTrack(0),fCuts(0) {}
  
  AliSpectraBothTrackCuts(const char *name);
  virtual  ~AliSpectraBothTrackCuts(); 
  
  Bool_t IsSelected(AliVTrack * track,Bool_t FillHistStat);
  
  void SetTrackType(UInt_t bit);
  Bool_t CheckTrackType();
  Bool_t CheckTrackCuts();
  Bool_t CheckEtaCut();
  Bool_t CheckYCut(BothParticleSpecies_t specie); // not included in standard cuts
  Bool_t CheckDCACut();
  Bool_t CheckPCut();
  Bool_t CheckPtCut();
  Bool_t CheckTOFMatching(Bool_t FillHistStat);
  Bool_t CheckTOFMatchingParticleType(Int_t type);
	
  void PrintCuts() const;
  
   UInt_t GetTrackType()  const    { return fTrackBits;}
   TH1I * GetHistoCuts()      { return fHistoCuts; }
   TH1F * GetHistoNSelectedPos()      { return fHistoNSelectedPos; } 
   TH1F * GetHistoNSelectedNeg()      { return fHistoNSelectedNeg; }
   TH1F * GetHistoNMatchedPos()      { return fHistoNMatchedPos; }
   TH1F * GetHistoNMatchedNeg()      { return fHistoNMatchedNeg; }
   TH2F * GetHistoEtaPhiHighPt()      { return fHistoEtaPhiHighPt; }
   TH1F * GetHistoNclustersITS()  {return fHistoNclustersITS;} 
   TH3F * GetHistoDCAzQA() {return fHistoDCAzQA;}
   TH3F * GetHistoNclustersQA() {return fHistoNclustersQA ;}
   TH3F * GetHistochi2perNDFQA() {return fHistochi2perNDFQA; }
   Bool_t GetUseTypeDependedTOFCut () {return fUseTypeDependedTOFCut;}
   Bool_t GetMakeQAhisto () {return fMakeQAhisto;}

   AliESDtrackCuts* GetTrackCuts(){return fCuts;}
	   		 

   void SetEta(Float_t etamin,Float_t etamax)   { fEtaCutMin = etamin;fEtaCutMax = etamax; }
   void SetDCA(Float_t dca)   { fDCACut = dca; }
   void SetP(Float_t p)       { fPCut = p; }
   void SetPt(Float_t pt)     { fPtCut = pt; }
   void SetY(Float_t ymax,Float_t ymin) { fYCutMax = ymax;fYCutMin=ymin;}
   void SetPtTOFMatching(Float_t pt)     { fPtCutTOFMatching = pt; fUseTypeDependedTOFCut=kFALSE;}
   void SetTrackBits(UInt_t TrackBits) {fTrackBits=TrackBits;}
   void SetMinTPCcls(UInt_t MinTPCcls) {fMinTPCcls=MinTPCcls;}
   void SetHashitinSPD1 (Bool_t value) {fHashitinSPD1=value;}	
   void SetUsedAdditionalCuts (Bool_t value) {fusedadditionalcuts=value;}
   void SetPtTOFMatchingPartDepended(Float_t pion,Float_t kaon,Float_t proton);
   void  SetMakeQAhisto(Bool_t flag){fMakeQAhisto=flag;}
     Float_t GetEtaMin()       const    { return fEtaCutMin; }
   Float_t GetEtaMax()       const    { return fEtaCutMax; }
   Float_t GetYMax()         const    { return fYCutMax; }
   Float_t GetYMin()         const    { return fYCutMin; }
   Float_t GetY()         const    { return 0.5*(fYCutMax-fYCutMin); }
   Float_t GetDCA()       const    { return fDCACut; }
   Float_t GetP()         const    { return fPCut; }
   Float_t GetPt()        const    { return fPtCut; }
   Float_t GetPtTOFMatching()        const    { return fPtCutTOFMatching; } 
   Float_t GetPtTOFMatchingPion()        const    { return fPtCutTOFMatchingPion; } 
   Float_t GetPtTOFMatchingKaon()        const    { return fPtCutTOFMatchingKaon; } 
   Float_t GetPtTOFMatchingProton()        const    { return fPtCutTOFMatchingProton; } 

   Long64_t Merge(TCollection* list);
   void SetAliESDtrackCuts(AliESDtrackCuts*  cuts ){fCuts=cuts;}
   void InitHisto();	 
 private:
   
   Bool_t           fIsSelected;      // True if cuts are selected
   UInt_t           fTrackBits;       // Type of track to be used
   UInt_t           fMinTPCcls;       // min number of clusters in the TPC
   Float_t          fEtaCutMin;          // Allowed absolute maximum value of Eta
   Float_t          fEtaCutMax;          // Allowed absolute maximum value of Eta
   Float_t          fDCACut;          // Maximum value of DCA
   Float_t          fPCut;            // Maximum value of P
   Float_t          fPtCut;           // Maximum value of Pt
   Float_t          fYCutMax;           // Maximum value of Y 
   Float_t          fYCutMin;           // Minimum value of Y
   Float_t          fPtCutTOFMatching;           // TOF Matching
   Int_t 	     fAODtrack; // 0 ESD track connected , 1 AOD track conected , else nothing
   Bool_t 	    fHashitinSPD1; // Check if SPD1 has a hit 	
   Bool_t          fusedadditionalcuts;          //If set to true the TPCrefit, ITSrefit, SPDany and Ncluster cut is check 	
   Float_t          fPtCutTOFMatchingPion; // TOF Matching cut for pions
   Float_t          fPtCutTOFMatchingKaon; // TOF Matching cut for kaons
   Float_t          fPtCutTOFMatchingProton;  	// TOF Matching cut for protons	
   Bool_t           fUseTypeDependedTOFCut;   // if yes use particle depened tof cut 
   Bool_t 	    fMakeQAhisto;    //if true QA histo are made 		
   TH1I             *fHistoCuts;       // Cuts statistics
   TH1F             *fHistoNSelectedPos;       // Selected positive tracks
   TH1F             *fHistoNSelectedNeg;       // Selected negative tracks
   TH1F             *fHistoNMatchedPos;       // Matched positive tracks
   TH1F             *fHistoNMatchedNeg;       // Matched negative tracks
   TH2F             *fHistoEtaPhiHighPt;       // EtaPhi distr at high pt (>1.5 GeV/c)
   TH1F            *fHistoNclustersITS;      // Number of clusters in ITS 
   TH3F 	   *fHistoDCAzQA;    //QA histo for DCZ monitoring histo
   TH3F 	   *fHistoNclustersQA;    //QA histo for N clusters QA monitoring histo
   TH3F 	   *fHistochi2perNDFQA;    //QA histo for  chi2/ndf 
		    				 
 		
   AliVTrack      *fTrack;           //! Track pointer
   AliESDtrackCuts *fCuts;      //! cuts  
   static const char * kBinLabel[]; // labels of stat histo

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