]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/FLOW/Tasks/AliFlowTrackCuts.h
fix typo in partial derivative which is used to calculate correlated errors
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / 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)
86a97121 8// mods: Redmer A. Bertens (rbertens@cern.ch)
daf66719 9
10#ifndef ALIFLOWTRACKCUTS_H
11#define ALIFLOWTRACKCUTS_H
12
32b846cd 13#include <TMatrix.h>
499fe731 14#include <TList.h>
daf66719 15#include "AliFlowTrackSimpleCuts.h"
cc0afcfc 16#include "AliFlowTrackSimple.h"
daf66719 17#include "AliESDtrackCuts.h"
18#include "TMCProcess.h"
1ff4bda1 19#include "AliESDtrack.h"
2e5052c5 20#include "AliMuonTrackCuts.h" // XZhang 20120604
32b846cd 21#include "AliPID.h"
aab6527a 22#include "AliESDpid.h"
daf66719 23
499fe731 24class TBrowser;
daf66719 25class AliVParticle;
26class AliMCParticle;
27class AliFlowTrack;
28class AliMCEvent;
68e9b988 29class AliInputEventHandler;
daf66719 30class AliVEvent;
12b2b8bc 31class AliMultiplicity;
2e5052c5 32class AliAODTracklets; // XZhang 20120615
42655d16 33class AliAODTrack;
34class AliESDtrack;
d148af7e 35class AliESDPmdTrack;
cc0afcfc 36class AliFlowBayesianPID;
8fa6a5fa
MK
37class AliESDkink;
38class AliESDv0;
39class AliESDVZERO;
daf66719 40
41class AliFlowTrackCuts : public AliFlowTrackSimpleCuts {
42
43 public:
44 AliFlowTrackCuts();
441ea1cf 45 AliFlowTrackCuts(const char* name);
daf66719 46 AliFlowTrackCuts(const AliFlowTrackCuts& someCuts);
47 AliFlowTrackCuts& operator=(const AliFlowTrackCuts& someCuts);
48 virtual ~AliFlowTrackCuts();
49
1a80f9f6 50 static AliFlowTrackCuts* GetStandardTPCStandaloneTrackCuts();
51 static AliFlowTrackCuts* GetStandardTPCStandaloneTrackCuts2010();
a0241c3a 52 static AliFlowTrackCuts* GetStandardGlobalTrackCuts2010();
daf66719 53 static AliFlowTrackCuts* GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE);
1a80f9f6 54 static AliFlowTrackCuts* GetStandardVZEROOnlyTrackCuts();
54dd223b 55 static AliFlowTrackCuts* GetStandardVZEROOnlyTrackCuts2010();
56 static AliFlowTrackCuts* GetStandardVZEROOnlyTrackCuts2011();
84714904 57 static AliFlowTrackCuts* GetStandardMuonTrackCuts(Bool_t isMC=kFALSE, Int_t passN=2); // XZhang 20120604
daf66719 58
a0241c3a 59 Int_t Count(AliVEvent* event=NULL);
60
2b1eaa10 61 enum trackParameterType { kMC,
62 kGlobal,
1a80f9f6 63 kTPCstandalone,
64 kSPDtracklet,
22289738 65 kPMD,
dd294bb6 66 kV0, //neutral reconstructed v0 particle
8fa6a5fa
MK
67 kVZERO, //forward VZERO detector
68 kMUON, // XZhang 20120604
69 kKink
2b1eaa10 70 };
71 enum trackParameterMix { kPure,
72 kTrackWithMCkine,
73 kTrackWithMCPID,
74 kTrackWithMCpt,
d79d61fb 75 kTrackWithPtFromFirstMother,
8fa6a5fa
MK
76 kTrackWithTPCInnerParams,
77 kTrackWithTPCstandalone
2b1eaa10 78 };
79 enum PIDsource {
80 kTPCpid, // default TPC pid (via GetTPCpid)
81 kTOFpid, // default TOF pid (via GetTOFpid)
82 kTOFbayesian, // TOF bayesian pid (F.Noferini)
83 kTOFbeta, // asymmetric cuts of TOF beta signal
1a80f9f6 84 kTPCdedx, // asymmetric cuts of TPC dedx signal
85 kTOFbetaSimple, //simple TOF only cut
8eca5d19 86 kTPCbayesian, //bayesian cutTPC
87 kTPCNuclei // added by Natasha for Nuclei
88 };
daf66719 89
90 //setters (interface to AliESDtrackCuts)
42655d16 91 void SetMinNClustersTPC( Int_t a ) {fCutNClustersTPC=kTRUE; fNClustersTPCMin=a;}
92 void SetMinNClustersITS( Int_t a ) {fCutNClustersITS=kTRUE; fNClustersITSMin=a;}
daf66719 93 void SetClusterRequirementITS( AliESDtrackCuts::Detector det,
94 AliESDtrackCuts::ITSClusterRequirement req = AliESDtrackCuts::kOff )
441ea1cf 95 { InitESDcuts(); fAliESDtrackCuts->SetClusterRequirementITS(det,req); }
2948ac5a 96 void SetMaxChi2PerClusterTPC( Float_t a ) {fMaxChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
97 void SetMinChi2PerClusterTPC( Float_t a ) {fMinChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
441ea1cf 98 void SetMaxChi2PerClusterITS( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxChi2PerClusterITS(a);}
99 void SetRequireTPCRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCRefit(a);}
100 void SetRequireTPCStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCStandAlone(a);}
101 void SetRequireITSRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSRefit(a);}
102 void SetRequireITSStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSStandAlone(a);}
103 void SetAcceptKinkDaughters( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetAcceptKinkDaughters(a);}
a63303bd 104 void SetMaxDCAToVertexZ( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexZ(a);fCutDCAToVertexZ=kTRUE;}
105 void SetMaxDCAToVertexXY( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXY(a);fCutDCAToVertexXY=kTRUE;}
441ea1cf 106 void SetMaxDCAToVertexXYPtDep( const char* a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXYPtDep(a);}
107 void SetRequireSigmaToVertex(Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireSigmaToVertex(a);}
108 void SetMaxNsigmaToVertex(Float_t sigma=1e10) {InitESDcuts(); fAliESDtrackCuts->SetMaxNsigmaToVertex(sigma); }
109 void SetDCAToVertex2D( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetDCAToVertex2D(a);}
daf66719 110 void SetEtaRange( Float_t r1, Float_t r2 ) { SetEtaMin(r1); SetEtaMax(r2); }
111 void SetPtRange( Float_t r1, Float_t r2 ) { SetPtMin(r1); SetPtMax(r2); }
127a5825 112 void SetRequireCharge( Bool_t r ) {fRequireCharge=r;}
113 void SetFakesAreOK( Bool_t b ) {fFakesAreOK=b;}
9a0783cc 114 void SetSPDtrackletDeltaPhiMax( Double_t m ) {fSPDtrackletDeltaPhiMax=m; fCutSPDtrackletDeltaPhi=kTRUE;}
115 void SetSPDtrackletDeltaPhiMin( Double_t m ) {fSPDtrackletDeltaPhiMin=m; fCutSPDtrackletDeltaPhi=kTRUE;}
1ff4bda1 116 void SetIgnoreTPCzRange( Double_t min, Double_t max )
5ba02b32 117 { fIgnoreTPCzRange=kTRUE; fIgnoreTPCzRangeMin=min; fIgnoreTPCzRangeMax=max; }
118 void SetAODfilterBit( UInt_t a ) {fAODFilterBit = a; fUseAODFilterBit = kTRUE;}
2b1eaa10 119 void SetMinimalTPCdedx(Double_t d=10.) {fMinimalTPCdedx=d; fCutMinimalTPCdedx=kTRUE;}
1a80f9f6 120 void SetPmdDetPlane(Int_t pmdDet){fCutPmdDet=kTRUE; fPmdDet = pmdDet; }
121 void SetPmdAdc(Float_t pmdAdc){fCutPmdAdc=kTRUE; fPmdAdc = pmdAdc; }
122 void SetPmdNcell(Float_t pmdNcell) {fCutPmdNcell=kTRUE; fPmdNcell = pmdNcell; }
9126fd0c 123 void SetPriors(Float_t centr = 0); // set my favourite priors for Bayesian PID (requested if Bayesian PID is used)
daf66719 124
84714904 125 AliMuonTrackCuts *GetMuonTrackCuts() { InitMuonCuts(); return fMuonTrackCuts; } // XZhang 20121014
126 void SetStandardMuonTrackCuts() { InitMuonCuts(); fMuonTrackCuts->SetDefaultFilterMask(); return; } // XZhang 20120604
127 void SetIsMuonMC(Bool_t isMC) { InitMuonCuts(); fMuonTrackCuts->SetIsMC(isMC); return; } // XZhang 20120604
128 void SetMuonPassNumber(Int_t passN) { InitMuonCuts(); fMuonTrackCuts->SetPassNumber(passN); return; } // XZhang 20121013
129 void SetRunsMuon(const AliInputEventHandler* eventHandler) { if (fMuonTrackCuts) fMuonTrackCuts->SetRun(eventHandler); } // XZhang 20120604
2e5052c5 130
8fa6a5fa
MK
131 void SetForceTPCstandalone(Bool_t b) {fForceTPCstandalone=b;}
132
133 //Kinks
134 void SetMinKinkAngle(Double_t a) {fMinKinkAngle=a;}
135 void SetMinKinkRadius(Double_t r) {fMinKinkRadius=r;}
136 void SetMaxKinkRAdius(Double_t r) {fMaxKinkRadius=r;}
137 void SetMinKinkQt(Double_t m) {fMinKinkQt=m;}
138 void SetMaxKinkQt(Double_t m) {fMaxKinkQt=m;}
139 void SetMaxKinkInvMassKmu(Double_t m) {fMaxKinkInvMassKmu=m;}
140 void SetMinKinkInvMassKmu(Double_t m) {fMinKinkInvMassKmu=m;}
141
8fa6a5fa
MK
142 Double_t GetMinKinkAngle() const {return fMinKinkAngle;}
143 Double_t GetMinKinkRadius() const {return fMinKinkRadius;}
144 Double_t GetMaxKinkRadius() const {return fMaxKinkRadius;}
145 Double_t GetMinKinkQt() const {return fMinKinkQt;}
146 Double_t GetMaxKinkQt() const {return fMaxKinkQt;}
147 Double_t GetMaxKinkInvMassKmu() const {return fMaxKinkInvMassKmu;}
148 Double_t GetMinKinkInvMassKmu() const {return fMinKinkInvMassKmu;}
149
441ea1cf 150 Int_t GetMinNClustersTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClusterTPC();}
151 Int_t GetMinNClustersITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClustersITS();}
daf66719 152 AliESDtrackCuts::ITSClusterRequirement GetClusterRequirementITS( AliESDtrackCuts::Detector det ) const
441ea1cf 153 {if (!fAliESDtrackCuts) return AliESDtrackCuts::kOff; return fAliESDtrackCuts->GetClusterRequirementITS(det); }
154 Float_t GetMaxChi2PerClusterTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterTPC();}
155 Float_t GetMaxChi2PerClusterITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterITS();}
156 Bool_t GetRequireTPCRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCRefit();}
157 Bool_t GetRequireTPCStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCStandAlone();}
158 Bool_t GetRequireITSRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSRefit();}
159 Bool_t GetRequireITSStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSStandAlone();}
160 Bool_t GetAcceptKinkDaughters() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetAcceptKinkDaughters();}
161 Float_t GetMaxDCAToVertexZ() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexZ();}
162 Float_t GetMaxDCAToVertexXY() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXY();}
163 const char* GetMaxDCAToVertexXYPtDep() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXYPtDep();}
164 Bool_t GetRequireSigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireSigmaToVertex();}
165 Float_t GetMaxNsigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxNsigmaToVertex(); }
166 Bool_t GetDCAToVertex2D() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetDCAToVertex2D();}
daf66719 167 void GetEtaRange( Float_t& r1, Float_t& r2 ) const { r1=GetEtaMin(); r2=GetEtaMax(); }
168 void GetPtRange( Float_t& r1, Float_t& r2 ) const { r1=GetPtMin(); r2=GetPtMax(); }
957517fa 169 Bool_t GetRequireCharge() const {return fRequireCharge;}
9a0783cc 170 Bool_t GetFakesAreOK() const {return fFakesAreOK;}
171 Double_t GetSPDtrackletDeltaPhiMax() const {return fSPDtrackletDeltaPhiMax;}
172 Double_t GetSPDtrackletDeltaPhiMin() const {return fSPDtrackletDeltaPhiMin;}
5ba02b32 173 UInt_t GetAODFilterBit() const {if (!fUseAODFilterBit) return 0; return fAODFilterBit;}
2b1eaa10 174 Double_t GetMinimalTPCdedx() const {return fMinimalTPCdedx;}
1a80f9f6 175 Int_t GetPmdDetPlane()const {return fPmdDet; }
176 Float_t GetPmdAdc()const {return fPmdAdc;}
499fe731 177 Float_t GetPmdNcell() const {return fPmdNcell; }
0d16f553 178 Float_t GetBeta(const AliVTrack* t);
3c67c769 179 Float_t Getdedx(const AliESDtrack* t) const;
8b649d8c 180 Float_t GetBayesianProb() const {return fProbBayes;};
75afd48c 181 AliFlowBayesianPID* GetBayesianResponse() const {return fBayesianResponse;}
62f2ea04 182
8fa6a5fa
MK
183 Bool_t GetForceTPCstandalone() const {return fForceTPCstandalone;}
184
a14b8f3c 185 void SetQA(Bool_t b=kTRUE) {if (b) DefineHistograms();}
499fe731 186 TList* GetQA() const {return fQA;}
187 TH1* QAbefore(Int_t i) {return static_cast<TH1*>(static_cast<TList*>(fQA->At(0))->At(i));}
188 TH1* QAafter(Int_t i) {return static_cast<TH1*>(static_cast<TList*>(fQA->At(1))->At(i));}
924b02b0 189
daf66719 190 //MC stuff
b9cf8f8e 191 void SetIgnoreSignInMCPID( Bool_t b=kTRUE ) {fIgnoreSignInMCPID=b;}
aab6527a 192 void SetCutMC( Bool_t b=kTRUE );
f21bdf48 193 void SetCutMChasTrackReferences(Bool_t b=kTRUE) {fCutMChasTrackReferences=b;}
aab6527a 194 void SetMCprocessType( TMCProcess t ) { fMCprocessType = t; fCutMCprocessType=kTRUE; SetCutMC();}
b9cf8f8e 195 void SetMCisPrimary( Bool_t b=kTRUE ) { fMCisPrimary=b; fCutMCisPrimary=kTRUE; SetCutMC();}
aab6527a 196 void SetMCPID( Int_t pid ) { fMCPID=pid; fCutMCPID=kTRUE; SetCutMC(); }
2ed97fda 197 void SetMCfirstMotherPID( Int_t pid ) { fMCfirstMotherPID=pid; fCutMCfirstMotherPID=kTRUE; SetCutMC(); }
daf66719 198 TMCProcess GetMCprocessType() const { return fMCprocessType; }
daf66719 199 Bool_t GetMCisPrimary() const {return fMCisPrimary;}
1ff4bda1 200 Int_t GetMCPID() const {return fMCPID;}
a14b8f3c 201 void SetRequireTransportBitForPrimaries(Bool_t b) {fRequireTransportBitForPrimaries=b; SetCutMC();}
daf66719 202
203 void SetParamType(trackParameterType paramType) {fParamType=paramType;}
204 trackParameterType GetParamType() const {return fParamType;}
12b2b8bc 205 static const char* GetParamTypeName(trackParameterType type);
daf66719 206 void SetParamMix(trackParameterMix paramMix) {fParamMix=paramMix;}
207 trackParameterMix GetParamMix() const {return fParamMix;}
208
c27333c2 209 virtual Bool_t IsSelected(TObject* obj, Int_t id=-666);
1ff4bda1 210 virtual Bool_t IsSelectedMCtruth(TObject* obj, Int_t id=-666);
127a5825 211 AliVParticle* GetTrack() const {return fTrack;}
212 AliMCParticle* GetMCparticle() const {return fMCparticle;}
8fa6a5fa 213 //AliFlowTrack* MakeFlowTrack() const;
7d27a354 214 Bool_t FillFlowTrack(AliFlowTrack* track) const;
dd294bb6 215 //FillFlowTrackV0(TObjArray* trackCollection, Int_t trackIndex) const
8fa6a5fa 216 AliFlowTrack* FillFlowTrack(TObjArray* trackCollection, Int_t trackIndex) const;
127a5825 217 Bool_t IsPhysicalPrimary() const;
441ea1cf 218 static Bool_t IsPhysicalPrimary(AliMCEvent* p, Int_t label, Bool_t requiretransported=kTRUE);
daf66719 219
220 void SetMCevent(AliMCEvent* mcEvent) {fMCevent=mcEvent;}
221 AliMCEvent* GetMCevent() const {return fMCevent;}
aab6527a 222 void SetEvent(AliVEvent* event, AliMCEvent* mcEvent=NULL);
9a0783cc 223 AliVEvent* GetEvent() const {return fEvent;}
224 Int_t GetNumberOfInputObjects() const;
225 TObject* GetInputObject(Int_t i);
a1c43d26 226 void Clear(Option_t* option="");
8fa6a5fa 227 void ClearTrack(Option_t* option="");
daf66719 228
1a80f9f6 229 Double_t GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos);
230 Double_t GetPmdPhi(Float_t xPos, Float_t yPos);
231
32b846cd 232 //PID
2b1eaa10 233 void SetPID(AliPID::EParticleType pid, PIDsource s=kTOFpid, Double_t prob=0.9)
234 {fParticleID=pid; fPIDsource=s; fParticleProbability=prob; fCutPID=kTRUE; InitPIDcuts();}
3c67c769 235 AliPID::EParticleType GetParticleID() const {return fParticleID;}
236 Bool_t GetCutPID() const {return fCutPID;}
237 void SetTPCpidCuts(const TMatrixF* mat) {fTPCpidCuts=new TMatrixF(*mat);}
238 void SetTOFpidCuts(const TMatrixF* mat) {fTOFpidCuts=new TMatrixF(*mat);}
2b1eaa10 239 static const char* PIDsourceName(PIDsource s);
aab6527a 240 AliESDpid& GetESDpid() {return fESDpid;}
875ee12a 241 void SetAllowTOFmismatchFlag(Bool_t b=kTRUE) {fAllowTOFmismatchFlag=b;}
242 Bool_t GetAllowTOFmismatchFlag() const {return fAllowTOFmismatchFlag;}
243 void SetRequireStrictTOFTPCagreement(Bool_t b=kTRUE) {fRequireStrictTOFTPCagreement=b;}
244 Bool_t GetRequireStrictTOFTPCagreement() const {return fRequireStrictTOFTPCagreement;}
0b14d0f4 245 void SetRejectElectronsWithTPCpid(Bool_t b=kTRUE) {fCutRejectElectronsWithTPCpid=b;}
92b507bb 246 void SetLinearizeVZEROresponse( Bool_t b=kTRUE ) {fLinearizeVZEROresponse=b;}
32b846cd 247
1a80f9f6 248 //these should maybe be protected
cac040c5
MK
249 Bool_t PassesCuts(AliVParticle* track);
250 Bool_t PassesESDcuts(AliESDtrack* track);
60875c3c 251 Bool_t PassesAODcuts(const AliAODTrack* track, Bool_t passFid=kTRUE);
3c67c769 252 Bool_t PassesPMDcuts(const AliESDPmdTrack* track);
c27333c2 253 Bool_t PassesVZEROcuts(Int_t id);
1a80f9f6 254 Bool_t PassesCuts(const AliFlowTrackSimple* track);
255 Bool_t PassesCuts(const AliMultiplicity* track, Int_t id);
2e5052c5 256 Bool_t PassesCuts(const AliAODTracklets* track, Int_t id); // XZhang 20120615
8fa6a5fa
MK
257 Bool_t PassesCuts(const AliESDkink* kink);
258 Bool_t PassesCuts(const AliESDv0* v0);
12b2b8bc 259 Bool_t PassesMCcuts();
1ff4bda1 260 Bool_t PassesMCcuts(AliMCEvent* mcevent, Int_t label);
1a80f9f6 261 Bool_t PassesTPCdedxCut(const AliESDtrack* track);
cd62a2a8 262 Bool_t PassesTPCbayesianCut(const AliESDtrack* track);
1a80f9f6 263 Bool_t PassesTPCpidCut(const AliESDtrack* track) const;
3c67c769 264 Bool_t PassesTOFbetaCut(const AliESDtrack* track);
265 Bool_t PassesTOFbetaSimpleCut(const AliESDtrack* track);
266 Bool_t PassesTOFpidCut(const AliESDtrack* track) const;
267 Bool_t PassesESDpidCut(const AliESDtrack* track);
0d16f553 268 Bool_t PassesAODpidCut(const AliAODTrack* track);
2e5052c5 269 Bool_t PassesMuonCuts(AliVParticle* track); // XZhang 20120604
0d16f553 270 Bool_t PassesTPCbayesianCut(const AliAODTrack* track);
271 Bool_t PassesTOFbayesianCut(const AliAODTrack* track);
272 Bool_t PassesTOFbetaCut(const AliAODTrack* track);
1a80f9f6 273
499fe731 274 void Browse(TBrowser* b);
275 Long64_t Merge(TCollection* list);
86a97121 276
277 //gain equalization and recentering
c27333c2
MK
278 void SetVZEROgainEqualisation(TH1* g) {fVZEROgainEqualization=g;}
279 void SetVZEROApol(Int_t ring, Float_t f) {fVZEROApol[ring]=f;}
280 void SetVZEROCpol(Int_t ring, Float_t f) {fVZEROCpol[ring]=f;}
86a97121 281 // set the flag for recentering (which is done in AliFlowEvent)
282 void SetApplyRecentering(Bool_t r) { fApplyRecentering = r; }
283 Bool_t GetApplyRecentering() const { return fApplyRecentering;}
c27333c2
MK
284 void SetVZEROgainEqualizationPerRing(Bool_t s) {fVZEROgainEqualizationPerRing = s;}
285 Bool_t GetVZEROgainEqualizationPerRing() const {return fVZEROgainEqualizationPerRing;}
86a97121 286 // exclude vzero rings: 0 through 7 can be excluded by calling this setter multiple times
287 // 0 corresponds to segment ID 0 through 7, etc
288 // disabled vzero rings get weight 0
289 void SetUseVZERORing(Int_t i, Bool_t u) {
290 fUseVZERORing[i] = u;
c27333c2 291 fVZEROgainEqualizationPerRing = kTRUE; // must be true for this option
86a97121 292 }
293 Bool_t GetUseVZERORing(Int_t i) const {return fUseVZERORing[i];}
499fe731 294
1a80f9f6 295 protected:
8fa6a5fa
MK
296 //AliFlowTrack* MakeFlowTrackSPDtracklet() const;
297 //AliFlowTrack* MakeFlowTrackPMDtrack() const;
298 //AliFlowTrack* MakeFlowTrackVZERO() const;
299 //AliFlowTrack* MakeFlowTrackVParticle() const;
7d27a354 300 Bool_t FillFlowTrackVParticle(AliFlowTrack* t) const;
301 Bool_t FillFlowTrackGeneric(AliFlowTrack* t) const;
8fa6a5fa 302 AliFlowTrack* FillFlowTrackKink(TObjArray* trackCollection, Int_t trackIndex) const;
c27333c2 303 AliFlowTrack* FillFlowTrackVZERO(TObjArray* trackCollection, Int_t trackIndex) const;
8fa6a5fa
MK
304 AliFlowTrack* FillFlowTrackGeneric(TObjArray* trackCollection, Int_t trackIndex) const;
305 AliFlowTrack* FillFlowTrackVParticle(TObjArray* trackCollection, Int_t trackIndex) const;
daf66719 306 void HandleESDtrack(AliESDtrack* track);
307 void HandleVParticle(AliVParticle* track);
924b02b0 308 void DefineHistograms();
32b846cd 309 void InitPIDcuts();
7288f660 310 void InitESDcuts() {if (!fAliESDtrackCuts) {fAliESDtrackCuts=new AliESDtrackCuts();}}
2e5052c5 311 void InitMuonCuts() { if (!fMuonTrackCuts) fMuonTrackCuts =new AliMuonTrackCuts("StdMuCuts","StdMuCuts"); return; } // XZhang 20120604
3abf7ecc 312 // part added by F. Noferini
cd62a2a8 313 Bool_t PassesTOFbayesianCut(const AliESDtrack* track);
8eca5d19 314 Bool_t PassesNucleiSelection(const AliESDtrack* track); // added by Natasha
0d16f553 315 Bool_t TPCTOFagree(const AliVTrack *track);
3abf7ecc 316 // end part added by F. Noferini
daf66719 317
9a0783cc 318 //the cuts
daf66719 319 AliESDtrackCuts* fAliESDtrackCuts; //alianalysis cuts
2e5052c5 320 AliMuonTrackCuts* fMuonTrackCuts; // muon selection cuts // XZhang 20120604
499fe731 321 TList* fQA; //qa histograms go here
1ff4bda1 322 Bool_t fCutMC; //do we cut on MC?
f21bdf48 323 Bool_t fCutMChasTrackReferences; //did we leave a trace in the detector?
daf66719 324 Bool_t fCutMCprocessType; //do we cut on mc process type?
325 TMCProcess fMCprocessType; //mc process type
326 Bool_t fCutMCPID; //cut on MC pid?
327 Int_t fMCPID; //MC PID
2ed97fda 328 Bool_t fCutMCfirstMotherPID; //cut on PID of first mother?
329 Int_t fMCfirstMotherPID; //PID of the first mother of track
a14b8f3c 330 Bool_t fIgnoreSignInMCPID; //when MC PID cut is set, pass also the antiparticle
daf66719 331 Bool_t fCutMCisPrimary; //do we cut on primaryness?
441ea1cf 332 Bool_t fRequireTransportBitForPrimaries; //require the transport bit to be set for primaries
daf66719 333 Bool_t fMCisPrimary; //is MC primary
127a5825 334 Bool_t fRequireCharge; //is charged?
335 Bool_t fFakesAreOK; //are fakes (negative labels) ok?
9a0783cc 336 Bool_t fCutSPDtrackletDeltaPhi; //are we cutting on the trcklet deltaphi?
337 Double_t fSPDtrackletDeltaPhiMax; //maximal deltaphi for tracklets
338 Double_t fSPDtrackletDeltaPhiMin; //minimal deltaphi for tracklets
1ff4bda1 339 Bool_t fIgnoreTPCzRange; //ignore tracks going close to central membrane
340 Double_t fIgnoreTPCzRangeMax; //max z to ignore
341 Double_t fIgnoreTPCzRangeMin; //min z to ignore
2948ac5a 342 Bool_t fCutChi2PerClusterTPC; //cut on tpc chi2
343 Float_t fMaxChi2PerClusterTPC; //max chi2 tpc/cluster
344 Float_t fMinChi2PerClusterTPC; //min chi2 tpc/cluster
32b846cd 345 Bool_t fCutNClustersTPC; //cut on clusters?
346 Int_t fNClustersTPCMax; //max tpc ncls
347 Int_t fNClustersTPCMin; //min tpc clusters
42655d16 348 Bool_t fCutNClustersITS; //cut on clusters?
349 Int_t fNClustersITSMax; //max tpc ncls
350 Int_t fNClustersITSMin; //min tpc clusters
5ba02b32 351 Bool_t fUseAODFilterBit; //use AOD filter bit selection?
352 UInt_t fAODFilterBit; //AOD filter bit to select
a63303bd 353 Bool_t fCutDCAToVertexXY; //dca xy cut
354 Bool_t fCutDCAToVertexZ; //dca z cut
2b1eaa10 355 Bool_t fCutMinimalTPCdedx; //cut on minimal dedx in TPC to reject noise tracks
356 Double_t fMinimalTPCdedx; //value for minimal TPC dedx
92b507bb 357 Bool_t fLinearizeVZEROresponse; //linearize VZERO response using AliESDUtil
1a80f9f6 358
359 Bool_t fCutPmdDet; //cut on PMD detector plane
360 Int_t fPmdDet; // value of PMD detector plane
361 Bool_t fCutPmdAdc; //cut on cluster ADC
362 Float_t fPmdAdc; //value of cluster ADC
363 Bool_t fCutPmdNcell; //cut on cluster ncell
364 Float_t fPmdNcell; //value of cluster ncell
8fa6a5fa 365
8fa6a5fa
MK
366 Double_t fMinKinkAngle; //max kink angle
367 Double_t fMinKinkRadius; //min kink radius
368 Double_t fMaxKinkRadius; //max kink radius
369 Double_t fMinKinkQt; //min kink qt
370 Double_t fMaxKinkQt; //max kink qt
371 Double_t fMinKinkInvMassKmu; //max kink inv mass
372 Double_t fMaxKinkInvMassKmu; //max kink inv mass
373 Bool_t fForceTPCstandalone; //use TPC parameters when applying cuts on the kink mother
374 Bool_t fRequireKinkDaughters; //well, the name says it all
1a80f9f6 375
daf66719 376 trackParameterType fParamType; //parameter type tu cut on
377 trackParameterMix fParamMix; //parameter mixing
8fa6a5fa
MK
378
379 AliESDkink* fKink; //!placeholder for the current kink
380 AliESDv0* fV0; //!placeholder for the current V0
daf66719 381 AliVParticle* fTrack; //!the track to apply cuts on
8fa6a5fa
MK
382 Double_t fTrackMass; //!mass of the particle
383 Double_t fTrackPt; //!track pt
12b2b8bc 384 Double_t fTrackPhi; //!track phi
385 Double_t fTrackEta; //!track eta
386 Double_t fTrackWeight; //!track weight
127a5825 387 Int_t fTrackLabel; //!track label, or its absolute value if FakesAreOK
957517fa 388 AliMCEvent* fMCevent; //!mc event
daf66719 389 AliMCParticle* fMCparticle; //!mc particle
9a0783cc 390 AliVEvent* fEvent; //!placeholder for current event
1ff4bda1 391 AliESDtrack fTPCtrack; //!placeholder for TPC only track to avoid new/delete on every track
daf66719 392
32b846cd 393 //PID
aab6527a 394 AliESDpid fESDpid; //pid obj
b147dd2f 395 AliFlowBayesianPID *fBayesianResponse; //! Baysian response with all the TOF tuning (using fESDpid)
32b846cd 396 PIDsource fPIDsource; //pid source
397 TMatrixF* fTPCpidCuts; //tpc pid cuts
398 TMatrixF* fTOFpidCuts; //tof pid cuts
2b1eaa10 399 AliPID::EParticleType fParticleID; //alipid
400 Double_t fParticleProbability; //desired prob for a particle type
875ee12a 401 Bool_t fAllowTOFmismatchFlag; //allow TOFmismatch flag=1 in ESD
402 Bool_t fRequireStrictTOFTPCagreement; //require stricter than TOFmismatch flag TOF-TPC agreement
0b14d0f4 403 Bool_t fCutRejectElectronsWithTPCpid; //reject electrons with TPC pid
32b846cd 404
3abf7ecc 405 // part added by F. Noferini
1a80f9f6 406 static const Int_t fgkPIDptBin = 20; // pT bins for priors
407 Float_t fC[fgkPIDptBin][5],fBinLimitPID[fgkPIDptBin]; // pt bin limit and priors
8b649d8c 408 Float_t fProbBayes; // bayesian probability
9126fd0c 409 Float_t fCurrCentr; // current centrality used for set the priors
92b507bb 410 // end part added by F. Noferini
86a97121 411
412 //gain equalization and recentering for vzero
c27333c2 413 TH1* fVZEROgainEqualization; //! equalization histo
86a97121 414 Bool_t fApplyRecentering; // apply recentering of q-sub vectors in AliFlowEvent ?
c27333c2
MK
415 Bool_t fVZEROgainEqualizationPerRing; // per ring vzero gain calibration
416 Float_t fVZEROApol[4]; //! calibration info per ring
417 Float_t fVZEROCpol[4]; //! calibration info per ring
86a97121 418 Bool_t fUseVZERORing[8]; // kTRUE means the ring is included
8fa6a5fa 419 static const Int_t fgkNumberOfVZEROtracks=64; //number of VZERO channels
1a80f9f6 420
86a97121 421 ClassDef(AliFlowTrackCuts,13)
daf66719 422};
423
424#endif
425
9126fd0c 426
2281e7c5 427