]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowTasks/AliFlowTrackCuts.h
coverty fixes
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowTasks / AliFlowTrackCuts.h
CommitLineData
daf66719 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
32b846cd 12#include <TMatrix.h>
499fe731 13#include <TList.h>
daf66719 14#include "AliFlowTrackSimpleCuts.h"
15#include "AliESDtrackCuts.h"
16#include "TMCProcess.h"
1ff4bda1 17#include "AliESDtrack.h"
32b846cd 18#include "AliPID.h"
aab6527a 19#include "AliESDpid.h"
daf66719 20
499fe731 21class TBrowser;
daf66719 22class AliVParticle;
23class AliMCParticle;
24class AliFlowTrack;
25class AliMCEvent;
26class AliVEvent;
12b2b8bc 27class AliMultiplicity;
42655d16 28class AliAODTrack;
29class AliESDtrack;
d148af7e 30class AliESDPmdTrack;
22289738 31class AliESDVZERO;
daf66719 32
33class AliFlowTrackCuts : public AliFlowTrackSimpleCuts {
34
35 public:
36 AliFlowTrackCuts();
441ea1cf 37 AliFlowTrackCuts(const char* name);
daf66719 38 AliFlowTrackCuts(const AliFlowTrackCuts& someCuts);
39 AliFlowTrackCuts& operator=(const AliFlowTrackCuts& someCuts);
40 virtual ~AliFlowTrackCuts();
41
1a80f9f6 42 static AliFlowTrackCuts* GetStandardTPCStandaloneTrackCuts();
43 static AliFlowTrackCuts* GetStandardTPCStandaloneTrackCuts2010();
a0241c3a 44 static AliFlowTrackCuts* GetStandardGlobalTrackCuts2010();
daf66719 45 static AliFlowTrackCuts* GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE);
1a80f9f6 46 static AliFlowTrackCuts* GetStandardVZEROOnlyTrackCuts();
daf66719 47
a0241c3a 48 Int_t Count(AliVEvent* event=NULL);
49
2b1eaa10 50 enum trackParameterType { kMC,
51 kGlobal,
1a80f9f6 52 kTPCstandalone,
53 kSPDtracklet,
22289738 54 kPMD,
55 kV0
2b1eaa10 56 };
57 enum trackParameterMix { kPure,
58 kTrackWithMCkine,
59 kTrackWithMCPID,
60 kTrackWithMCpt,
d79d61fb 61 kTrackWithPtFromFirstMother,
62 kTrackWithTPCInnerParams
2b1eaa10 63 };
64 enum PIDsource {
65 kTPCpid, // default TPC pid (via GetTPCpid)
66 kTOFpid, // default TOF pid (via GetTOFpid)
67 kTOFbayesian, // TOF bayesian pid (F.Noferini)
68 kTOFbeta, // asymmetric cuts of TOF beta signal
1a80f9f6 69 kTPCdedx, // asymmetric cuts of TPC dedx signal
70 kTOFbetaSimple, //simple TOF only cut
2b1eaa10 71 };
daf66719 72
73 //setters (interface to AliESDtrackCuts)
42655d16 74 void SetMinNClustersTPC( Int_t a ) {fCutNClustersTPC=kTRUE; fNClustersTPCMin=a;}
75 void SetMinNClustersITS( Int_t a ) {fCutNClustersITS=kTRUE; fNClustersITSMin=a;}
daf66719 76 void SetClusterRequirementITS( AliESDtrackCuts::Detector det,
77 AliESDtrackCuts::ITSClusterRequirement req = AliESDtrackCuts::kOff )
441ea1cf 78 { InitESDcuts(); fAliESDtrackCuts->SetClusterRequirementITS(det,req); }
2948ac5a 79 void SetMaxChi2PerClusterTPC( Float_t a ) {fMaxChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
80 void SetMinChi2PerClusterTPC( Float_t a ) {fMinChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
441ea1cf 81 void SetMaxChi2PerClusterITS( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxChi2PerClusterITS(a);}
82 void SetRequireTPCRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCRefit(a);}
83 void SetRequireTPCStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCStandAlone(a);}
84 void SetRequireITSRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSRefit(a);}
85 void SetRequireITSStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSStandAlone(a);}
86 void SetAcceptKinkDaughters( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetAcceptKinkDaughters(a);}
a63303bd 87 void SetMaxDCAToVertexZ( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexZ(a);fCutDCAToVertexZ=kTRUE;}
88 void SetMaxDCAToVertexXY( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXY(a);fCutDCAToVertexXY=kTRUE;}
441ea1cf 89 void SetMaxDCAToVertexXYPtDep( const char* a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXYPtDep(a);}
90 void SetRequireSigmaToVertex(Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireSigmaToVertex(a);}
91 void SetMaxNsigmaToVertex(Float_t sigma=1e10) {InitESDcuts(); fAliESDtrackCuts->SetMaxNsigmaToVertex(sigma); }
92 void SetDCAToVertex2D( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetDCAToVertex2D(a);}
daf66719 93 void SetEtaRange( Float_t r1, Float_t r2 ) { SetEtaMin(r1); SetEtaMax(r2); }
94 void SetPtRange( Float_t r1, Float_t r2 ) { SetPtMin(r1); SetPtMax(r2); }
127a5825 95 void SetRequireCharge( Bool_t r ) {fRequireCharge=r;}
96 void SetFakesAreOK( Bool_t b ) {fFakesAreOK=b;}
9a0783cc 97 void SetSPDtrackletDeltaPhiMax( Double_t m ) {fSPDtrackletDeltaPhiMax=m; fCutSPDtrackletDeltaPhi=kTRUE;}
98 void SetSPDtrackletDeltaPhiMin( Double_t m ) {fSPDtrackletDeltaPhiMin=m; fCutSPDtrackletDeltaPhi=kTRUE;}
1ff4bda1 99 void SetIgnoreTPCzRange( Double_t min, Double_t max )
5ba02b32 100 { fIgnoreTPCzRange=kTRUE; fIgnoreTPCzRangeMin=min; fIgnoreTPCzRangeMax=max; }
101 void SetAODfilterBit( UInt_t a ) {fAODFilterBit = a; fUseAODFilterBit = kTRUE;}
2b1eaa10 102 void SetMinimalTPCdedx(Double_t d=10.) {fMinimalTPCdedx=d; fCutMinimalTPCdedx=kTRUE;}
1a80f9f6 103 void SetPmdDetPlane(Int_t pmdDet){fCutPmdDet=kTRUE; fPmdDet = pmdDet; }
104 void SetPmdAdc(Float_t pmdAdc){fCutPmdAdc=kTRUE; fPmdAdc = pmdAdc; }
105 void SetPmdNcell(Float_t pmdNcell) {fCutPmdNcell=kTRUE; fPmdNcell = pmdNcell; }
daf66719 106
441ea1cf 107 Int_t GetMinNClustersTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClusterTPC();}
108 Int_t GetMinNClustersITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClustersITS();}
daf66719 109 AliESDtrackCuts::ITSClusterRequirement GetClusterRequirementITS( AliESDtrackCuts::Detector det ) const
441ea1cf 110 {if (!fAliESDtrackCuts) return AliESDtrackCuts::kOff; return fAliESDtrackCuts->GetClusterRequirementITS(det); }
111 Float_t GetMaxChi2PerClusterTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterTPC();}
112 Float_t GetMaxChi2PerClusterITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterITS();}
113 Bool_t GetRequireTPCRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCRefit();}
114 Bool_t GetRequireTPCStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCStandAlone();}
115 Bool_t GetRequireITSRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSRefit();}
116 Bool_t GetRequireITSStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSStandAlone();}
117 Bool_t GetAcceptKinkDaughters() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetAcceptKinkDaughters();}
118 Float_t GetMaxDCAToVertexZ() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexZ();}
119 Float_t GetMaxDCAToVertexXY() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXY();}
120 const char* GetMaxDCAToVertexXYPtDep() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXYPtDep();}
121 Bool_t GetRequireSigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireSigmaToVertex();}
122 Float_t GetMaxNsigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxNsigmaToVertex(); }
123 Bool_t GetDCAToVertex2D() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetDCAToVertex2D();}
daf66719 124 void GetEtaRange( Float_t& r1, Float_t& r2 ) const { r1=GetEtaMin(); r2=GetEtaMax(); }
125 void GetPtRange( Float_t& r1, Float_t& r2 ) const { r1=GetPtMin(); r2=GetPtMax(); }
957517fa 126 Bool_t GetRequireCharge() const {return fRequireCharge;}
9a0783cc 127 Bool_t GetFakesAreOK() const {return fFakesAreOK;}
128 Double_t GetSPDtrackletDeltaPhiMax() const {return fSPDtrackletDeltaPhiMax;}
129 Double_t GetSPDtrackletDeltaPhiMin() const {return fSPDtrackletDeltaPhiMin;}
5ba02b32 130 UInt_t GetAODFilterBit() const {if (!fUseAODFilterBit) return 0; return fAODFilterBit;}
2b1eaa10 131 Double_t GetMinimalTPCdedx() const {return fMinimalTPCdedx;}
1a80f9f6 132 Int_t GetPmdDetPlane()const {return fPmdDet; }
133 Float_t GetPmdAdc()const {return fPmdAdc;}
499fe731 134 Float_t GetPmdNcell() const {return fPmdNcell; }
135 Float_t GetBeta(const AliESDtrack* t);
136 Float_t Getdedx(const AliESDtrack* t);
5ba02b32 137
a14b8f3c 138 void SetQA(Bool_t b=kTRUE) {if (b) DefineHistograms();}
499fe731 139 TList* GetQA() const {return fQA;}
140 TH1* QAbefore(Int_t i) {return static_cast<TH1*>(static_cast<TList*>(fQA->At(0))->At(i));}
141 TH1* QAafter(Int_t i) {return static_cast<TH1*>(static_cast<TList*>(fQA->At(1))->At(i));}
924b02b0 142
daf66719 143 //MC stuff
a14b8f3c 144 void SetIgnoreSignInMCPID( Bool_t b ) {fIgnoreSignInMCPID=b;}
aab6527a 145 void SetCutMC( Bool_t b=kTRUE );
146 void SetMCprocessType( TMCProcess t ) { fMCprocessType = t; fCutMCprocessType=kTRUE; SetCutMC();}
147 void SetMCisPrimary( Bool_t b ) { fMCisPrimary=b; fCutMCisPrimary=kTRUE; SetCutMC();}
148 void SetMCPID( Int_t pid ) { fMCPID=pid; fCutMCPID=kTRUE; SetCutMC(); }
daf66719 149 TMCProcess GetMCprocessType() const { return fMCprocessType; }
daf66719 150 Bool_t GetMCisPrimary() const {return fMCisPrimary;}
1ff4bda1 151 Int_t GetMCPID() const {return fMCPID;}
a14b8f3c 152 void SetRequireTransportBitForPrimaries(Bool_t b) {fRequireTransportBitForPrimaries=b; SetCutMC();}
daf66719 153
154 void SetParamType(trackParameterType paramType) {fParamType=paramType;}
155 trackParameterType GetParamType() const {return fParamType;}
12b2b8bc 156 static const char* GetParamTypeName(trackParameterType type);
daf66719 157 void SetParamMix(trackParameterMix paramMix) {fParamMix=paramMix;}
158 trackParameterMix GetParamMix() const {return fParamMix;}
159
9a0783cc 160 virtual Bool_t IsSelected(TObject* obj, Int_t id=-666);
1ff4bda1 161 virtual Bool_t IsSelectedMCtruth(TObject* obj, Int_t id=-666);
127a5825 162 AliVParticle* GetTrack() const {return fTrack;}
163 AliMCParticle* GetMCparticle() const {return fMCparticle;}
41dc4195 164 AliFlowTrack* MakeFlowTrack() const;
7d27a354 165 Bool_t FillFlowTrack(AliFlowTrack* track) const;
127a5825 166 Bool_t IsPhysicalPrimary() const;
441ea1cf 167 static Bool_t IsPhysicalPrimary(AliMCEvent* p, Int_t label, Bool_t requiretransported=kTRUE);
daf66719 168
169 void SetMCevent(AliMCEvent* mcEvent) {fMCevent=mcEvent;}
170 AliMCEvent* GetMCevent() const {return fMCevent;}
aab6527a 171 void SetEvent(AliVEvent* event, AliMCEvent* mcEvent=NULL);
9a0783cc 172 AliVEvent* GetEvent() const {return fEvent;}
173 Int_t GetNumberOfInputObjects() const;
174 TObject* GetInputObject(Int_t i);
a1c43d26 175 void Clear(Option_t* option="");
daf66719 176
1a80f9f6 177 Double_t GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos);
178 Double_t GetPmdPhi(Float_t xPos, Float_t yPos);
179
32b846cd 180 //PID
2b1eaa10 181 void SetPID(AliPID::EParticleType pid, PIDsource s=kTOFpid, Double_t prob=0.9)
182 {fParticleID=pid; fPIDsource=s; fParticleProbability=prob; fCutPID=kTRUE; InitPIDcuts();}
32b846cd 183 void SetTPCpidCuts(TMatrixF* mat) {fTPCpidCuts=new TMatrixF(*mat);}
184 void SetTOFpidCuts(TMatrixF* mat) {fTOFpidCuts=new TMatrixF(*mat);}
2b1eaa10 185 static const char* PIDsourceName(PIDsource s);
aab6527a 186 AliESDpid& GetESDpid() {return fESDpid;}
499fe731 187 void SetAllowTOFmismatch(Bool_t b=kTRUE) {fAllowTOFmismatch=b;}
188 Bool_t GetAllowTOFmismatch() const {return fAllowTOFmismatch;}
32b846cd 189
1a80f9f6 190 //these should maybe be protected
daf66719 191 Bool_t PassesCuts(AliVParticle* track);
42655d16 192 Bool_t PassesESDcuts(AliESDtrack* track);
1a80f9f6 193 Bool_t PassesAODcuts(const AliAODTrack* track);
d148af7e 194 Bool_t PassesPMDcuts(AliESDPmdTrack* track);
22289738 195 Bool_t PassesV0cuts(AliESDVZERO* track, Int_t id);
1a80f9f6 196 Bool_t PassesCuts(const AliFlowTrackSimple* track);
197 Bool_t PassesCuts(const AliMultiplicity* track, Int_t id);
12b2b8bc 198 Bool_t PassesMCcuts();
1ff4bda1 199 Bool_t PassesMCcuts(AliMCEvent* mcevent, Int_t label);
1a80f9f6 200 Bool_t PassesTPCdedxCut(const AliESDtrack* track);
201 Bool_t PassesTPCpidCut(const AliESDtrack* track) const;
202 Bool_t PassesTOFbetaCut(const AliESDtrack* track);
203 Bool_t PassesTOFbetaSimpleCut(const AliESDtrack* track);
204 Bool_t PassesTOFpidCut(const AliESDtrack* track) const;
205
499fe731 206 void Browse(TBrowser* b);
207 Long64_t Merge(TCollection* list);
208
1a80f9f6 209 protected:
d148af7e 210 AliFlowTrack* MakeFlowTrackSPDtracklet() const;
211 AliFlowTrack* MakeFlowTrackPMDtrack() const;
22289738 212 AliFlowTrack* MakeFlowTrackV0() const;
d148af7e 213 AliFlowTrack* MakeFlowTrackVParticle() const;
7d27a354 214 Bool_t FillFlowTrackVParticle(AliFlowTrack* t) const;
215 Bool_t FillFlowTrackGeneric(AliFlowTrack* t) const;
daf66719 216 void HandleESDtrack(AliESDtrack* track);
217 void HandleVParticle(AliVParticle* track);
924b02b0 218 void DefineHistograms();
32b846cd 219 void InitPIDcuts();
7288f660 220 void InitESDcuts() {if (!fAliESDtrackCuts) {fAliESDtrackCuts=new AliESDtrackCuts();}}
3abf7ecc 221 // part added by F. Noferini
222 Bool_t PassesTOFbayesianCut(AliESDtrack* track);
223 void SetPriors(); // set my favourite priors
224 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)
225 // end part added by F. Noferini
daf66719 226
9a0783cc 227 //the cuts
daf66719 228 AliESDtrackCuts* fAliESDtrackCuts; //alianalysis cuts
499fe731 229 TList* fQA; //qa histograms go here
1ff4bda1 230 Bool_t fCutMC; //do we cut on MC?
daf66719 231 Bool_t fCutMCprocessType; //do we cut on mc process type?
232 TMCProcess fMCprocessType; //mc process type
233 Bool_t fCutMCPID; //cut on MC pid?
234 Int_t fMCPID; //MC PID
a14b8f3c 235 Bool_t fIgnoreSignInMCPID; //when MC PID cut is set, pass also the antiparticle
daf66719 236 Bool_t fCutMCisPrimary; //do we cut on primaryness?
441ea1cf 237 Bool_t fRequireTransportBitForPrimaries; //require the transport bit to be set for primaries
daf66719 238 Bool_t fMCisPrimary; //is MC primary
127a5825 239 Bool_t fRequireCharge; //is charged?
240 Bool_t fFakesAreOK; //are fakes (negative labels) ok?
9a0783cc 241 Bool_t fCutSPDtrackletDeltaPhi; //are we cutting on the trcklet deltaphi?
242 Double_t fSPDtrackletDeltaPhiMax; //maximal deltaphi for tracklets
243 Double_t fSPDtrackletDeltaPhiMin; //minimal deltaphi for tracklets
1ff4bda1 244 Bool_t fIgnoreTPCzRange; //ignore tracks going close to central membrane
245 Double_t fIgnoreTPCzRangeMax; //max z to ignore
246 Double_t fIgnoreTPCzRangeMin; //min z to ignore
2948ac5a 247 Bool_t fCutChi2PerClusterTPC; //cut on tpc chi2
248 Float_t fMaxChi2PerClusterTPC; //max chi2 tpc/cluster
249 Float_t fMinChi2PerClusterTPC; //min chi2 tpc/cluster
32b846cd 250 Bool_t fCutNClustersTPC; //cut on clusters?
251 Int_t fNClustersTPCMax; //max tpc ncls
252 Int_t fNClustersTPCMin; //min tpc clusters
42655d16 253 Bool_t fCutNClustersITS; //cut on clusters?
254 Int_t fNClustersITSMax; //max tpc ncls
255 Int_t fNClustersITSMin; //min tpc clusters
5ba02b32 256 Bool_t fUseAODFilterBit; //use AOD filter bit selection?
257 UInt_t fAODFilterBit; //AOD filter bit to select
a63303bd 258 Bool_t fCutDCAToVertexXY; //dca xy cut
259 Bool_t fCutDCAToVertexZ; //dca z cut
2b1eaa10 260 Bool_t fCutMinimalTPCdedx; //cut on minimal dedx in TPC to reject noise tracks
261 Double_t fMinimalTPCdedx; //value for minimal TPC dedx
1a80f9f6 262
263 Bool_t fCutPmdDet; //cut on PMD detector plane
264 Int_t fPmdDet; // value of PMD detector plane
265 Bool_t fCutPmdAdc; //cut on cluster ADC
266 Float_t fPmdAdc; //value of cluster ADC
267 Bool_t fCutPmdNcell; //cut on cluster ncell
268 Float_t fPmdNcell; //value of cluster ncell
269
daf66719 270 trackParameterType fParamType; //parameter type tu cut on
271 trackParameterMix fParamMix; //parameter mixing
daf66719 272 AliVParticle* fTrack; //!the track to apply cuts on
12b2b8bc 273 Double_t fTrackPhi; //!track phi
274 Double_t fTrackEta; //!track eta
275 Double_t fTrackWeight; //!track weight
127a5825 276 Int_t fTrackLabel; //!track label, or its absolute value if FakesAreOK
957517fa 277 AliMCEvent* fMCevent; //!mc event
daf66719 278 AliMCParticle* fMCparticle; //!mc particle
9a0783cc 279 AliVEvent* fEvent; //!placeholder for current event
1ff4bda1 280 AliESDtrack fTPCtrack; //!placeholder for TPC only track to avoid new/delete on every track
daf66719 281
32b846cd 282 //PID
aab6527a 283 AliESDpid fESDpid; //pid obj
32b846cd 284 PIDsource fPIDsource; //pid source
285 TMatrixF* fTPCpidCuts; //tpc pid cuts
286 TMatrixF* fTOFpidCuts; //tof pid cuts
2b1eaa10 287 AliPID::EParticleType fParticleID; //alipid
288 Double_t fParticleProbability; //desired prob for a particle type
499fe731 289 Bool_t fAllowTOFmismatch; //allow TPC mismatch
32b846cd 290
3abf7ecc 291 // part added by F. Noferini
1a80f9f6 292 static const Int_t fgkPIDptBin = 20; // pT bins for priors
293 Float_t fC[fgkPIDptBin][5],fBinLimitPID[fgkPIDptBin]; // pt bin limit and priors
3abf7ecc 294 Float_t fProbBayes[5]; // bayesian probability
295 // end part added by F. Noferini
296
1a80f9f6 297 static const Int_t fgkNumberOfV0tracks=64; //number of V0 channels
298
499fe731 299 ClassDef(AliFlowTrackCuts,7)
daf66719 300};
301
302#endif
303