1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. */
2 /* See cxx source for full Copyright notice */
5 // AliFlowTrackESDCuts:
6 // A cut class for ESD, AOD and MC particles for the flow framework
7 // author: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch)
9 #ifndef ALIFLOWTRACKCUTS_H
10 #define ALIFLOWTRACKCUTS_H
13 #include "AliFlowTrackSimpleCuts.h"
14 #include "AliESDtrackCuts.h"
15 #include "TMCProcess.h"
16 #include "AliESDtrack.h"
18 #include "AliESDpid.h"
26 class AliMultiplicity;
30 class AliFlowTrackCuts : public AliFlowTrackSimpleCuts {
34 AliFlowTrackCuts(const char* name);
35 AliFlowTrackCuts(const AliFlowTrackCuts& someCuts);
36 AliFlowTrackCuts& operator=(const AliFlowTrackCuts& someCuts);
37 virtual ~AliFlowTrackCuts();
39 static AliFlowTrackCuts* GetStandardTPCOnlyTrackCuts();
40 static AliFlowTrackCuts* GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE);
42 enum trackParameterType { kMC, kGlobal, kESD_TPConly, kESD_SPDtracklet };
43 enum trackParameterMix { kPure, kTrackWithMCkine, kTrackWithMCPID, kTrackWithMCpt, kTrackWithPtFromFirstMother };
44 enum PIDsource {kTPCpid, kTOFpid, kTPCTOFpid, kTOFbayesian};
46 //setters (interface to AliESDtrackCuts)
47 void SetMinNClustersTPC( Int_t a ) {fCutNClustersTPC=kTRUE; fNClustersTPCMin=a;}
48 void SetMinNClustersITS( Int_t a ) {fCutNClustersITS=kTRUE; fNClustersITSMin=a;}
49 void SetClusterRequirementITS( AliESDtrackCuts::Detector det,
50 AliESDtrackCuts::ITSClusterRequirement req = AliESDtrackCuts::kOff )
51 { InitESDcuts(); fAliESDtrackCuts->SetClusterRequirementITS(det,req); }
52 void SetMaxChi2PerClusterTPC( Float_t a ) {fMaxChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
53 void SetMinChi2PerClusterTPC( Float_t a ) {fMinChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
54 void SetMaxChi2PerClusterITS( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxChi2PerClusterITS(a);}
55 void SetRequireTPCRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCRefit(a);}
56 void SetRequireTPCStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCStandAlone(a);}
57 void SetRequireITSRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSRefit(a);}
58 void SetRequireITSStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSStandAlone(a);}
59 void SetAcceptKinkDaughters( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetAcceptKinkDaughters(a);}
60 void SetMaxDCAToVertexZ( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexZ(a);}
61 void SetMaxDCAToVertexXY( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXY(a);}
62 void SetMaxDCAToVertexXYPtDep( const char* a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXYPtDep(a);}
63 void SetRequireSigmaToVertex(Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireSigmaToVertex(a);}
64 void SetMaxNsigmaToVertex(Float_t sigma=1e10) {InitESDcuts(); fAliESDtrackCuts->SetMaxNsigmaToVertex(sigma); }
65 void SetDCAToVertex2D( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetDCAToVertex2D(a);}
66 void SetEtaRange( Float_t r1, Float_t r2 ) { SetEtaMin(r1); SetEtaMax(r2); }
67 void SetPtRange( Float_t r1, Float_t r2 ) { SetPtMin(r1); SetPtMax(r2); }
68 void SetRequireCharge( Bool_t r ) {fRequireCharge=r;}
69 void SetFakesAreOK( Bool_t b ) {fFakesAreOK=b;}
70 void SetSPDtrackletDeltaPhiMax( Double_t m ) {fSPDtrackletDeltaPhiMax=m; fCutSPDtrackletDeltaPhi=kTRUE;}
71 void SetSPDtrackletDeltaPhiMin( Double_t m ) {fSPDtrackletDeltaPhiMin=m; fCutSPDtrackletDeltaPhi=kTRUE;}
72 void SetIgnoreSignInPID( Bool_t b ) {fIgnoreSignInPID=b;}
73 void SetIgnoreTPCzRange( Double_t min, Double_t max )
74 { fIgnoreTPCzRange=kTRUE; fIgnoreTPCzRangeMin=min; fIgnoreTPCzRangeMax=max; }
75 void SetAODfilterBit( UInt_t a ) {fAODFilterBit = a; fUseAODFilterBit = kTRUE;}
78 Int_t GetMinNClustersTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClusterTPC();}
79 Int_t GetMinNClustersITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClustersITS();}
80 AliESDtrackCuts::ITSClusterRequirement GetClusterRequirementITS( AliESDtrackCuts::Detector det ) const
81 {if (!fAliESDtrackCuts) return AliESDtrackCuts::kOff; return fAliESDtrackCuts->GetClusterRequirementITS(det); }
82 Float_t GetMaxChi2PerClusterTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterTPC();}
83 Float_t GetMaxChi2PerClusterITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterITS();}
84 Bool_t GetRequireTPCRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCRefit();}
85 Bool_t GetRequireTPCStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCStandAlone();}
86 Bool_t GetRequireITSRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSRefit();}
87 Bool_t GetRequireITSStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSStandAlone();}
88 Bool_t GetAcceptKinkDaughters() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetAcceptKinkDaughters();}
89 Float_t GetMaxDCAToVertexZ() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexZ();}
90 Float_t GetMaxDCAToVertexXY() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXY();}
91 const char* GetMaxDCAToVertexXYPtDep() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXYPtDep();}
92 Bool_t GetRequireSigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireSigmaToVertex();}
93 Float_t GetMaxNsigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxNsigmaToVertex(); }
94 Bool_t GetDCAToVertex2D() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetDCAToVertex2D();}
95 void GetEtaRange( Float_t& r1, Float_t& r2 ) const { r1=GetEtaMin(); r2=GetEtaMax(); }
96 void GetPtRange( Float_t& r1, Float_t& r2 ) const { r1=GetPtMin(); r2=GetPtMax(); }
97 Bool_t GetRequireCharge() const {return fRequireCharge;}
98 Bool_t GetFakesAreOK() const {return fFakesAreOK;}
99 Double_t GetSPDtrackletDeltaPhiMax() const {return fSPDtrackletDeltaPhiMax;}
100 Double_t GetSPDtrackletDeltaPhiMin() const {return fSPDtrackletDeltaPhiMin;}
101 UInt_t GetAODFilterBit() const {if (!fUseAODFilterBit) return 0; return fAODFilterBit;}
103 void SetQA(const char* dirname);
104 TObjArray* GetQA() const {return fQA;}
107 void SetCutMC( Bool_t b=kTRUE );
108 void SetMCprocessType( TMCProcess t ) { fMCprocessType = t; fCutMCprocessType=kTRUE; SetCutMC();}
109 void SetMCisPrimary( Bool_t b ) { fMCisPrimary=b; fCutMCisPrimary=kTRUE; SetCutMC();}
110 void SetMCPID( Int_t pid ) { fMCPID=pid; fCutMCPID=kTRUE; SetCutMC(); }
111 TMCProcess GetMCprocessType() const { return fMCprocessType; }
112 Bool_t GetMCisPrimary() const {return fMCisPrimary;}
113 Int_t GetMCPID() const {return fMCPID;}
115 void SetParamType(trackParameterType paramType) {fParamType=paramType;}
116 trackParameterType GetParamType() const {return fParamType;}
117 static const char* GetParamTypeName(trackParameterType type);
118 void SetParamMix(trackParameterMix paramMix) {fParamMix=paramMix;}
119 trackParameterMix GetParamMix() const {return fParamMix;}
121 virtual Bool_t IsSelected(TObject* obj, Int_t id=-666);
122 virtual Bool_t IsSelectedMCtruth(TObject* obj, Int_t id=-666);
123 AliVParticle* GetTrack() const {return fTrack;}
124 AliMCParticle* GetMCparticle() const {return fMCparticle;}
125 AliFlowTrack* MakeFlowTrack(int index=0) const;
126 Bool_t IsPhysicalPrimary() const;
127 static Bool_t IsPhysicalPrimary(AliMCEvent* p, Int_t label, Bool_t requiretransported=kTRUE);
129 void SetMCevent(AliMCEvent* mcEvent) {fMCevent=mcEvent;}
130 AliMCEvent* GetMCevent() const {return fMCevent;}
131 void SetEvent(AliVEvent* event, AliMCEvent* mcEvent=NULL);
132 AliVEvent* GetEvent() const {return fEvent;}
133 Int_t GetNumberOfInputObjects() const;
134 TObject* GetInputObject(Int_t i);
135 void Clear(Option_t* option="");
138 void SetPID(AliPID::EParticleType pid, PIDsource s=kTPCTOFpid) {fAliPID=pid; fPIDsource=s; fCutPID=kTRUE; InitPIDcuts();}
139 void SetTPCTOFpidCrossOverPt(Double_t pt) {fTPCTOFpidCrossOverPt=pt;}
140 void SetTPCpidCuts(TMatrixF* mat) {fTPCpidCuts=new TMatrixF(*mat);}
141 void SetTOFpidCuts(TMatrixF* mat) {fTOFpidCuts=new TMatrixF(*mat);}
142 AliESDpid& GetESDpid() {return fESDpid;}
145 Bool_t PassesCuts(AliVParticle* track);
146 Bool_t PassesESDcuts(AliESDtrack* track);
147 Bool_t PassesAODcuts(AliAODTrack* track);
148 Bool_t PassesCuts(AliFlowTrackSimple* track);
149 Bool_t PassesCuts(AliMultiplicity* track, Int_t id);
150 Bool_t PassesMCcuts();
151 Bool_t PassesMCcuts(AliMCEvent* mcevent, Int_t label);
152 Bool_t PassesTPCpidCut(AliESDtrack* track);
153 Bool_t PassesTOFpidCut(AliESDtrack* track);
154 void HandleESDtrack(AliESDtrack* track);
155 void HandleVParticle(AliVParticle* track);
156 void DefineHistograms();
158 void InitESDcuts() {if (!fAliESDtrackCuts) fAliESDtrackCuts=new AliESDtrackCuts();}
159 // part added by F. Noferini
160 Bool_t PassesTOFbayesianCut(AliESDtrack* track);
161 void SetPriors(); // set my favourite priors
162 Int_t GetESDPdg(AliESDtrack *track,Option_t *option="bayesianTOF",Int_t ipart=2,Float_t cPi=-1.0,Float_t cKa=0.0,Float_t cPr=0.0); // 3sigma cut ipart=0(el),1(mu),2(pi),3(K),4(p)
163 // end part added by F. Noferini
166 AliESDtrackCuts* fAliESDtrackCuts; //alianalysis cuts
167 TObjArray* fQA; //qa histograms go here
168 Bool_t fCutMC; //do we cut on MC?
169 Bool_t fCutMCprocessType; //do we cut on mc process type?
170 TMCProcess fMCprocessType; //mc process type
171 Bool_t fCutMCPID; //cut on MC pid?
172 Int_t fMCPID; //MC PID
173 Bool_t fIgnoreSignInPID; //when PID cut is set, pass also the antiparticle
174 Bool_t fCutMCisPrimary; //do we cut on primaryness?
175 Bool_t fRequireTransportBitForPrimaries; //require the transport bit to be set for primaries
176 Bool_t fMCisPrimary; //is MC primary
177 Bool_t fRequireCharge; //is charged?
178 Bool_t fFakesAreOK; //are fakes (negative labels) ok?
179 Bool_t fCutSPDtrackletDeltaPhi; //are we cutting on the trcklet deltaphi?
180 Double_t fSPDtrackletDeltaPhiMax; //maximal deltaphi for tracklets
181 Double_t fSPDtrackletDeltaPhiMin; //minimal deltaphi for tracklets
182 Bool_t fIgnoreTPCzRange; //ignore tracks going close to central membrane
183 Double_t fIgnoreTPCzRangeMax; //max z to ignore
184 Double_t fIgnoreTPCzRangeMin; //min z to ignore
185 Bool_t fCutChi2PerClusterTPC; //cut on tpc chi2
186 Float_t fMaxChi2PerClusterTPC; //max chi2 tpc/cluster
187 Float_t fMinChi2PerClusterTPC; //min chi2 tpc/cluster
188 Bool_t fCutNClustersTPC; //cut on clusters?
189 Int_t fNClustersTPCMax; //max tpc ncls
190 Int_t fNClustersTPCMin; //min tpc clusters
191 Bool_t fCutNClustersITS; //cut on clusters?
192 Int_t fNClustersITSMax; //max tpc ncls
193 Int_t fNClustersITSMin; //min tpc clusters
194 Bool_t fUseAODFilterBit; //use AOD filter bit selection?
195 UInt_t fAODFilterBit; //AOD filter bit to select
197 trackParameterType fParamType; //parameter type tu cut on
198 trackParameterMix fParamMix; //parameter mixing
199 AliVParticle* fTrack; //!the track to apply cuts on
200 Double_t fTrackPhi; //!track phi
201 Double_t fTrackEta; //!track eta
202 Double_t fTrackWeight; //!track weight
203 Int_t fTrackLabel; //!track label, or its absolute value if FakesAreOK
204 AliMCEvent* fMCevent; //!mc event
205 AliMCParticle* fMCparticle; //!mc particle
206 AliVEvent* fEvent; //!placeholder for current event
207 AliESDtrack fTPCtrack; //!placeholder for TPC only track to avoid new/delete on every track
210 AliESDpid fESDpid; //pid obj
211 PIDsource fPIDsource; //pid source
212 TMatrixF* fTPCpidCuts; //tpc pid cuts
213 TMatrixF* fTOFpidCuts; //tof pid cuts
214 Double_t fTPCTOFpidCrossOverPt; //pt cross over for pid, below TPC is taken, above TOF
215 AliPID::EParticleType fAliPID; //alipid
217 // part added by F. Noferini
218 static const Int_t fnPIDptBin = 20; // pT bins for priors
219 Float_t fC[fnPIDptBin][5],fBinLimitPID[fnPIDptBin]; // pt bin limit and priors
220 Float_t fProbBayes[5]; // bayesian probability
221 // end part added by F. Noferini
223 ClassDef(AliFlowTrackCuts,4)