]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowTasks/AliFlowTrackCuts.h
PID cuts + fixes
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowTasks / AliFlowTrackCuts.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. */
2 /* See cxx source for full Copyright notice */
3 /* $Id$ */
4
5 // AliFlowTrackESDCuts:
6 // A cut class for ESD, AOD and MC particles for the flow framework
7 // author: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch)
8
9 #ifndef ALIFLOWTRACKCUTS_H
10 #define ALIFLOWTRACKCUTS_H
11
12 #include <TMatrix.h>
13 #include "AliFlowTrackSimpleCuts.h"
14 #include "AliESDtrackCuts.h"
15 #include "TMCProcess.h"
16 #include "AliESDtrack.h"
17 #include "AliPID.h"
18
19 class TObjArray;
20 class AliVParticle;
21 class AliMCParticle;
22 class AliFlowTrack;
23 class AliMCEvent;
24 class AliVEvent;
25 class AliMultiplicity; 
26 class AliESDpid;
27
28 class AliFlowTrackCuts : public AliFlowTrackSimpleCuts {
29
30  public:
31   AliFlowTrackCuts();
32   AliFlowTrackCuts(const AliFlowTrackCuts& someCuts);
33   AliFlowTrackCuts& operator=(const AliFlowTrackCuts& someCuts);
34   virtual ~AliFlowTrackCuts();
35
36   static AliFlowTrackCuts* GetStandardTPCOnlyTrackCuts();
37   static AliFlowTrackCuts* GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE);
38
39   enum trackParameterType { kMC, kGlobal, kESD_TPConly, kESD_SPDtracklet };
40   enum trackParameterMix  { kPure, kTrackWithMCkine, kTrackWithMCPID, kTrackWithMCpt, kTrackWithPtFromFirstMother };
41   enum PIDsource {kTPCpid, kTOFpid, kTPCTOFpid};
42
43   //setters (interface to AliESDtrackCuts)
44   void SetMinNClustersTPC( Int_t a ) {fAliESDtrackCuts->SetMinNClustersTPC(a);}
45   void SetMinNClustersITS( Int_t a ) {fAliESDtrackCuts->SetMinNClustersITS(a);}
46   void SetClusterRequirementITS( AliESDtrackCuts::Detector det,
47                                  AliESDtrackCuts::ITSClusterRequirement req = AliESDtrackCuts::kOff )
48                                  { fAliESDtrackCuts->SetClusterRequirementITS(det,req); } 
49   void SetMaxChi2PerClusterTPC( Float_t a ) {fMaxChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
50   void SetMinChi2PerClusterTPC( Float_t a ) {fMinChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
51   void SetMaxChi2PerClusterITS( Float_t a ) {fAliESDtrackCuts->SetMaxChi2PerClusterITS(a);}
52   void SetRequireTPCRefit( Bool_t a ) {fAliESDtrackCuts->SetRequireTPCRefit(a);}
53   void SetRequireTPCStandAlone( Bool_t a) {fAliESDtrackCuts->SetRequireTPCStandAlone(a);}
54   void SetRequireITSRefit( Bool_t a ) {fAliESDtrackCuts->SetRequireITSRefit(a);}
55   void SetRequireITSStandAlone( Bool_t a) {fAliESDtrackCuts->SetRequireITSStandAlone(a);}
56   void SetAcceptKinkDaughters( Bool_t a ) {fAliESDtrackCuts->SetAcceptKinkDaughters(a);}
57   void SetMaxDCAToVertexZ( Float_t a ) {fAliESDtrackCuts->SetMaxDCAToVertexZ(a);}
58   void SetMaxDCAToVertexXY( Float_t a ) {fAliESDtrackCuts->SetMaxDCAToVertexXY(a);}
59   void SetMaxDCAToVertexXYPtDep( const char* a ) {fAliESDtrackCuts->SetMaxDCAToVertexXYPtDep(a);}
60   void SetRequireSigmaToVertex(Bool_t a) {fAliESDtrackCuts->SetRequireSigmaToVertex(a);}
61   void SetMaxNsigmaToVertex(Float_t sigma=1e10) { fAliESDtrackCuts->SetMaxNsigmaToVertex(sigma); }
62   void SetDCAToVertex2D( Bool_t a ) {fAliESDtrackCuts->SetDCAToVertex2D(a);}
63   void SetEtaRange( Float_t r1, Float_t r2 ) { SetEtaMin(r1); SetEtaMax(r2); }
64   void SetPtRange( Float_t r1, Float_t r2 ) { SetPtMin(r1); SetPtMax(r2); }
65   void SetRequireCharge( Bool_t r ) {fRequireCharge=r;}
66   void SetFakesAreOK( Bool_t b ) {fFakesAreOK=b;}
67   void SetSPDtrackletDeltaPhiMax( Double_t m ) {fSPDtrackletDeltaPhiMax=m; fCutSPDtrackletDeltaPhi=kTRUE;}
68   void SetSPDtrackletDeltaPhiMin( Double_t m ) {fSPDtrackletDeltaPhiMin=m; fCutSPDtrackletDeltaPhi=kTRUE;}
69   void SetIgnoreSignInPID( Bool_t b ) {fIgnoreSignInPID=b;}
70   void SetIgnoreTPCzRange( Double_t min, Double_t max ) 
71                          { fIgnoreTPCzRange=kTRUE; fIgnoreTPCzRangeMin=min; fIgnoreTPCzRangeMax=max; } 
72
73   Int_t GetMinNClustersTPC() const {return fAliESDtrackCuts->GetMinNClusterTPC();}
74   Int_t GetMinNClustersITS() const {return fAliESDtrackCuts->GetMinNClustersITS();}
75   AliESDtrackCuts::ITSClusterRequirement GetClusterRequirementITS( AliESDtrackCuts::Detector det ) const
76                                  { return fAliESDtrackCuts->GetClusterRequirementITS(det); } 
77   Float_t GetMaxChi2PerClusterTPC() const {return fAliESDtrackCuts->GetMaxChi2PerClusterTPC();}
78   Float_t GetMaxChi2PerClusterITS() const {return fAliESDtrackCuts->GetMaxChi2PerClusterITS();}
79   Bool_t GetRequireTPCRefit() const {return fAliESDtrackCuts->GetRequireTPCRefit();}
80   Bool_t GetRequireTPCStandAlone() const {return fAliESDtrackCuts->GetRequireTPCStandAlone();}
81   Bool_t GetRequireITSRefit() const {return fAliESDtrackCuts->GetRequireITSRefit();}
82   Bool_t GetRequireITSStandAlone() const {return fAliESDtrackCuts->GetRequireITSStandAlone();}
83   Bool_t GetAcceptKinkDaughters() const {return fAliESDtrackCuts->GetAcceptKinkDaughters();}
84   Float_t GetMaxDCAToVertexZ() const {return fAliESDtrackCuts->GetMaxDCAToVertexZ();}
85   Float_t GetMaxDCAToVertexXY() const {return fAliESDtrackCuts->GetMaxDCAToVertexXY();}
86   const char* GetMaxDCAToVertexXYPtDep() const {return fAliESDtrackCuts->GetMaxDCAToVertexXYPtDep();}
87   Bool_t GetRequireSigmaToVertex() const {return fAliESDtrackCuts->GetRequireSigmaToVertex();}
88   Float_t GetMaxNsigmaToVertex() const {return fAliESDtrackCuts->GetMaxNsigmaToVertex(); }
89   Bool_t GetDCAToVertex2D() const {return fAliESDtrackCuts->GetDCAToVertex2D();}
90   void GetEtaRange( Float_t& r1, Float_t& r2 ) const { r1=GetEtaMin(); r2=GetEtaMax(); }
91   void GetPtRange( Float_t& r1, Float_t& r2 ) const { r1=GetPtMin(); r2=GetPtMax(); }
92   Bool_t GetRequireCharge() const {return fRequireCharge;}
93   Bool_t GetFakesAreOK() const {return fFakesAreOK;}
94   Double_t GetSPDtrackletDeltaPhiMax() const {return fSPDtrackletDeltaPhiMax;}
95   Double_t GetSPDtrackletDeltaPhiMin() const {return fSPDtrackletDeltaPhiMin;}
96
97   void SetQA(const char* dirname);
98   TObjArray* GetQA() const {return fQA;}
99
100   //MC stuff
101   void SetCutMC( Bool_t b=kTRUE ) {fCutMC=b;}
102   void SetMCprocessType( TMCProcess t ) { fMCprocessType = t; fCutMCprocessType=kTRUE; fCutMC=kTRUE;}
103   void SetMCisPrimary( Bool_t b ) { fMCisPrimary=b; fCutMCisPrimary=kTRUE; fCutMC=kTRUE;}
104   void SetMCPID( Int_t pid ) { fMCPID=pid; fCutMCPID=kTRUE; fCutMC=kTRUE; }
105   TMCProcess GetMCprocessType() const { return fMCprocessType; }
106   Bool_t GetMCisPrimary() const {return fMCisPrimary;}
107   Int_t GetMCPID() const {return fMCPID;}
108
109   void SetParamType(trackParameterType paramType) {fParamType=paramType;}
110   trackParameterType GetParamType() const {return fParamType;}
111   static const char* GetParamTypeName(trackParameterType type);
112   void SetParamMix(trackParameterMix paramMix) {fParamMix=paramMix;}
113   trackParameterMix GetParamMix() const {return fParamMix;}
114
115   virtual Bool_t IsSelected(TObject* obj, Int_t id=-666);
116   virtual Bool_t IsSelectedMCtruth(TObject* obj, Int_t id=-666);
117   AliVParticle* GetTrack() const {return fTrack;}
118   AliMCParticle* GetMCparticle() const {return fMCparticle;}
119   AliFlowTrack* MakeFlowTrack() const;
120   Bool_t IsPhysicalPrimary() const; 
121   static Bool_t IsPhysicalPrimary(AliMCEvent* p, Int_t label); 
122   
123   void SetMCevent(AliMCEvent* mcEvent) {fMCevent=mcEvent;}
124   AliMCEvent* GetMCevent() const {return fMCevent;}
125   void SetEvent(AliVEvent* event) {Clear();fEvent=event;}
126   AliVEvent* GetEvent() const {return fEvent;}
127   Int_t GetNumberOfInputObjects() const;
128   TObject* GetInputObject(Int_t i);
129   void Clear(Option_t* option="");
130
131   //PID
132   void SetPID(AliPID::EParticleType pid, PIDsource s=kTPCTOFpid) {fAliPID=pid; fPIDsource=s; fCutPID=kTRUE; InitPIDcuts();}
133   void SetESDpid(AliESDpid* o) {fESDpid=o;}
134   void SetTPCTOFpidCrossOverPt(Double_t pt) {fTPCTOFpidCrossOverPt=pt;}
135   void SetTPCpidCuts(TMatrixF* mat) {fTPCpidCuts=new TMatrixF(*mat);}
136   void SetTOFpidCuts(TMatrixF* mat) {fTOFpidCuts=new TMatrixF(*mat);}
137
138  protected:
139   Bool_t PassesCuts(AliVParticle* track);
140   Bool_t PassesCuts(AliFlowTrackSimple* track);
141   Bool_t PassesCuts(AliMultiplicity* track, Int_t id);
142   Bool_t PassesMCcuts();
143   Bool_t PassesMCcuts(AliMCEvent* mcevent, Int_t label);
144   Bool_t PassesTPCpidCut(AliESDtrack* track);
145   Bool_t PassesTOFpidCut(AliESDtrack* track);  
146   void HandleESDtrack(AliESDtrack* track);
147   void HandleVParticle(AliVParticle* track);
148   void DefineHistograms();
149   void InitPIDcuts();
150
151   //the cuts
152   AliESDtrackCuts* fAliESDtrackCuts; //alianalysis cuts
153   TObjArray* fQA;                   //qa histograms go here
154   Bool_t fCutMC;                     //do we cut on MC?
155   Bool_t fCutMCprocessType;          //do we cut on mc process type?
156   TMCProcess fMCprocessType;         //mc process type
157   Bool_t fCutMCPID;                  //cut on MC pid?
158   Int_t fMCPID;                      //MC PID
159   Bool_t fIgnoreSignInPID;           //when PID cut is set, pass also the antiparticle
160   Bool_t fCutMCisPrimary;            //do we cut on primaryness?
161   Bool_t fMCisPrimary;               //is MC primary
162   Bool_t fRequireCharge;          //is charged?
163   Bool_t fFakesAreOK;             //are fakes (negative labels) ok?
164   Bool_t fCutSPDtrackletDeltaPhi; //are we cutting on the trcklet deltaphi?
165   Double_t fSPDtrackletDeltaPhiMax; //maximal deltaphi for tracklets
166   Double_t fSPDtrackletDeltaPhiMin; //minimal deltaphi for tracklets
167   Bool_t fIgnoreTPCzRange;   //ignore tracks going close to central membrane
168   Double_t fIgnoreTPCzRangeMax; //max z to ignore
169   Double_t fIgnoreTPCzRangeMin; //min z to ignore
170   Bool_t fCutChi2PerClusterTPC; //cut on tpc chi2
171   Float_t fMaxChi2PerClusterTPC; //max chi2 tpc/cluster
172   Float_t fMinChi2PerClusterTPC; //min chi2 tpc/cluster
173   Bool_t fCutNClustersTPC;       //cut on clusters?
174   Int_t fNClustersTPCMax;        //max tpc ncls
175   Int_t fNClustersTPCMin;        //min tpc clusters  
176
177   trackParameterType fParamType;     //parameter type tu cut on
178   trackParameterMix fParamMix;       //parameter mixing
179   AliVParticle* fTrack;              //!the track to apply cuts on
180   Double_t fTrackPhi;                //!track phi
181   Double_t fTrackEta;                //!track eta
182   Double_t fTrackWeight;             //!track weight
183   Int_t fTrackLabel;                 //!track label, or its absolute value if FakesAreOK
184   AliMCEvent* fMCevent;              //!mc event
185   AliMCParticle* fMCparticle;        //!mc particle
186   AliVEvent* fEvent;                 //!placeholder for current event
187   AliESDtrack fTPCtrack;             //!placeholder for TPC only track to avoid new/delete on every track
188
189   //PID
190   AliESDpid* fESDpid; //pid obj
191   PIDsource fPIDsource; //pid source
192   TMatrixF* fTPCpidCuts; //tpc pid cuts
193   TMatrixF* fTOFpidCuts; //tof pid cuts
194   Double_t fTPCTOFpidCrossOverPt; //pt cross over for pid, below TPC is taken, above TOF
195   AliPID::EParticleType fAliPID; //alipid
196
197   ClassDef(AliFlowTrackCuts,4)
198 };
199
200 #endif
201
202