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