AliPhysics  f9b5d69 (f9b5d69)
AliFlowTrackCuts.h
Go to the documentation of this file.
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 // mods: Redmer A. Bertens (rbertens@cern.ch)
9 
10 #ifndef ALIFLOWTRACKCUTS_H
11 #define ALIFLOWTRACKCUTS_H
12 
13 #include <TMatrix.h>
14 #include <TList.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
21 #include "AliPID.h"
22 #include "AliESDpid.h"
23 #include "TF2.h"
24 
25 
26 class TBrowser;
27 class TArrayD;
28 class AliVParticle;
29 class AliMCParticle;
30 class AliFlowTrack;
31 class AliMCEvent;
32 class AliVEventHandler;
33 class AliVEvent;
34 class AliMultiplicity;
35 class AliAODTracklets; // XZhang 20120615
36 class AliAODTrack;
37 class AliESDtrack;
38 class AliESDPmdTrack;
39 class AliFlowBayesianPID;
40 class AliESDkink;
41 class AliESDv0;
42 class AliESDVZERO;
43 class AliPIDResponse;
44 class AliNanoAODTrack;
45 
47 
48  public:
50  AliFlowTrackCuts(const char* name);
51  AliFlowTrackCuts(const AliFlowTrackCuts& someCuts);
53  virtual ~AliFlowTrackCuts();
54 
59  static AliFlowTrackCuts* GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE);
63  // beta test, don't use for results
65  // end of beta test
66  static AliFlowTrackCuts* GetStandardMuonTrackCuts(Bool_t isMC=kFALSE, Int_t passN=2); // XZhang 20120604
67 
68  Int_t Count(AliVEvent* event=NULL);
69 
75  kV0, //neutral reconstructed v0 particle
76  kVZERO, //forward VZERO detector
77  kMUON, // XZhang 20120604
80  kUserA, // reserved for custom cuts
81  kUserB, // reserved for custom cuts
82  kBetaVZERO, // temporary enum for beta testing of new vzero calibration
83  kDeltaVZERO, // temporary enum for beta testing of new vzero calibration
84  kKappaVZERO, // permanent enum for beta testing of new vzero calibration,
85  kHotfixHI // fix for HI runs
86  };
94  };
95  enum PIDsource {
96  kTPCpid, // default TPC pid (via GetTPCpid)
97  kTOFpid, // default TOF pid (via GetTOFpid)
98  kTOFbayesian, // TOF bayesian pid (F.Noferini)
99  kTOFbeta, // asymmetric cuts of TOF beta signal
100  kTPCdedx, // asymmetric cuts of TPC dedx signal
101  kTOFbetaSimple, //simple TOF only cut
102  kTPCbayesian, //bayesian cutTPC
103  kTPCNuclei, // added by Natasha for Nuclei
104  kTPCTOFNsigma, // simple cut on combined tpc tof nsigma
105  kTPCTOFNsigmaPurity, // purity>0.8 cut on combined tpc tof nsigma
107  };
108 
109  //setters (interface to AliESDtrackCuts)
110  Int_t MaxSharedITSClusterCuts(AliESDtrack* track);
111  Double_t MaxChi2perITSClusterCuts(AliESDtrack* track);
112 
119  void SetClusterRequirementITS( AliESDtrackCuts::Detector det,
120  AliESDtrackCuts::ITSClusterRequirement req = AliESDtrackCuts::kOff )
121  { InitESDcuts(); fAliESDtrackCuts->SetClusterRequirementITS(det,req); }
131  void SetMaxChi2PerClusterITS( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxChi2PerClusterITS(a);}
132  void SetRequireTPCRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCRefit(a);}
133  void SetRequireTPCStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCStandAlone(a);}
134  void SetRequireITSRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSRefit(a);}
135  void SetRequireITSStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSStandAlone(a);}
136  void SetAcceptKinkDaughters( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetAcceptKinkDaughters(a);}
137  void SetMaxDCAToVertexZ( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexZ(a);fCutDCAToVertexZ=kTRUE;}
138  void SetMaxDCAToVertexXY( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXY(a);fCutDCAToVertexXY=kTRUE;}
139  void SetMaxDCAToVertexXYPtDep( const char* a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXYPtDep(a);}
143  void SetRequireSigmaToVertex(Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireSigmaToVertex(a);}
144  void SetMaxNsigmaToVertex(Float_t sigma=1e10) {InitESDcuts(); fAliESDtrackCuts->SetMaxNsigmaToVertex(sigma); }
145  void SetDCAToVertex2D( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetDCAToVertex2D(a);}
146  void SetEtaRange( Float_t r1, Float_t r2 ) { SetEtaMin(r1); SetEtaMax(r2); }
147  void SetPtRange( Float_t r1, Float_t r2 ) { SetPtMin(r1); SetPtMax(r2); }
156  void SetPmdDetPlane(Int_t pmdDet){fCutPmdDet=kTRUE; fPmdDet = pmdDet; }
157  void SetPmdAdc(Float_t pmdAdc){fCutPmdAdc=kTRUE; fPmdAdc = pmdAdc; }
158  void SetPmdNcell(Float_t pmdNcell) {fCutPmdNcell=kTRUE; fPmdNcell = pmdNcell; }
159  void SetPriors(Float_t centr = 0); // set my favourite priors for Bayesian PID (requested if Bayesian PID is used)
160 
161  AliMuonTrackCuts *GetMuonTrackCuts() { InitMuonCuts(); return fMuonTrackCuts; } // XZhang 20121014
162  void SetStandardMuonTrackCuts() { InitMuonCuts(); fMuonTrackCuts->SetDefaultFilterMask(); return; } // XZhang 20120604
163  void SetIsMuonMC(Bool_t isMC) { InitMuonCuts(); fMuonTrackCuts->SetIsMC(isMC); return; } // XZhang 20120604
164  void SetMuonPassNumber(Int_t passN) { InitMuonCuts(); fMuonTrackCuts->SetPassNumber(passN); return; } // XZhang 20121013
165  void SetRunsMuon(const AliVEventHandler* eventHandler) { if (fMuonTrackCuts) fMuonTrackCuts->SetRun(eventHandler); } // XZhang 20120604
166 
168 
169  //Kinks
177 
181  Double_t GetMinKinkQt() const {return fMinKinkQt;}
182  Double_t GetMaxKinkQt() const {return fMaxKinkQt;}
185 
186  Int_t GetMinNClustersTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClusterTPC();}
187  Int_t GetMinNClustersITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClustersITS();}
188  AliESDtrackCuts::ITSClusterRequirement GetClusterRequirementITS( AliESDtrackCuts::Detector det ) const
189  {if (!fAliESDtrackCuts) return AliESDtrackCuts::kOff; return fAliESDtrackCuts->GetClusterRequirementITS(det); }
190  Float_t GetMaxChi2PerClusterTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterTPC();}
191  Float_t GetMaxChi2PerClusterITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterITS();}
192  Bool_t GetRequireTPCRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCRefit();}
193  Bool_t GetRequireTPCStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCStandAlone();}
194  Bool_t GetRequireITSRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSRefit();}
195  Bool_t GetRequireITSStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSStandAlone();}
196  Bool_t GetAcceptKinkDaughters() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetAcceptKinkDaughters();}
197  Float_t GetMaxDCAToVertexZ() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexZ();}
198  Float_t GetMaxDCAToVertexXY() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXY();}
199  const char* GetMaxDCAToVertexXYPtDep() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXYPtDep();}
200  Bool_t GetRequireSigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireSigmaToVertex();}
201  Float_t GetMaxNsigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxNsigmaToVertex(); }
202  Bool_t GetDCAToVertex2D() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetDCAToVertex2D();}
203  void GetEtaRange( Float_t& r1, Float_t& r2 ) const { r1=GetEtaMin(); r2=GetEtaMax(); }
204  void GetPtRange( Float_t& r1, Float_t& r2 ) const { r1=GetPtMin(); r2=GetPtMax(); }
206  Bool_t GetFakesAreOK() const {return fFakesAreOK;}
209  UInt_t GetAODFilterBit() const {if (!fUseAODFilterBit) return 0; return fAODFilterBit;}
211  Int_t GetPmdDetPlane()const {return fPmdDet; }
212  Float_t GetPmdAdc()const {return fPmdAdc;}
213  Float_t GetPmdNcell() const {return fPmdNcell; }
214  Float_t GetBeta(const AliVTrack* t, Bool_t QAmode = kFALSE);
215  Float_t Getdedx(const AliESDtrack* t) const;
216  Float_t GetBayesianProb() const {return fProbBayes;};
218 
220 
221  void SetQA(Bool_t b=kTRUE) {if (b) DefineHistograms();}
222  TList* GetQA() const {return fQA;}
223  TH1* QAbefore(Int_t i) {return static_cast<TH1*>(static_cast<TList*>(fQA->At(0))->At(i));}
224  TH1* QAafter(Int_t i) {return static_cast<TH1*>(static_cast<TList*>(fQA->At(1))->At(i));}
225 
226  //MC stuff
228  void SetCutMC( Bool_t b=kTRUE );
230  void SetMCprocessType( TMCProcess t ) { fMCprocessType = t; fCutMCprocessType=kTRUE; SetCutMC();}
232  void SetMCPID( Int_t pid ) { fMCPID=pid; fCutMCPID=kTRUE; SetCutMC(); }
234  TMCProcess GetMCprocessType() const { return fMCprocessType; }
236  Int_t GetMCPID() const {return fMCPID;}
238 
239  void SetParamType(trackParameterType paramType) {fParamType=paramType;}
241  static const char* GetParamTypeName(trackParameterType type);
242  void SetParamMix(trackParameterMix paramMix) {fParamMix=paramMix;}
244 
245  virtual Bool_t IsSelected(TObject* obj, Int_t id=-666);
246  virtual Bool_t IsSelectedMCtruth(TObject* obj, Int_t id=-666);
247  AliVParticle* GetTrack() const {return fTrack;}
248  AliMCParticle* GetMCparticle() const {return fMCparticle;}
249  //AliFlowTrack* MakeFlowTrack() const;
250  Bool_t FillFlowTrack(AliFlowTrack* track) const;
251  //FillFlowTrackV0(TObjArray* trackCollection, Int_t trackIndex) const
252  AliFlowTrack* FillFlowTrack(TObjArray* trackCollection, Int_t trackIndex) const;
253  Bool_t IsPhysicalPrimary() const;
254  static Bool_t IsPhysicalPrimary(AliMCEvent* p, Int_t label, Bool_t requiretransported=kTRUE);
255 
256  void SetMCevent(AliMCEvent* mcEvent) {fMCevent=mcEvent;}
257  AliMCEvent* GetMCevent() const {return fMCevent;}
258  void SetEvent(AliVEvent* event, AliMCEvent* mcEvent=NULL);
259  AliVEvent* GetEvent() const {return fEvent;}
262  void Clear(Option_t* option="");
263  void ClearTrack(Option_t* option="");
264 
265  Double_t GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos);
266  Double_t GetPmdPhi(Float_t xPos, Float_t yPos);
267 
268  //PID
269  void SetPID(AliPID::EParticleType pid, PIDsource s=kTOFpid, Double_t prob=0.9)
271  AliPID::EParticleType GetParticleID() const {return fParticleID;}
272  Bool_t GetCutPID() const {return fCutPID;}
273  void SetTPCpidCuts(const TMatrixF* mat) {fTPCpidCuts=new TMatrixF(*mat);}
274  void SetTOFpidCuts(const TMatrixF* mat) {fTOFpidCuts=new TMatrixF(*mat);}
275  static const char* PIDsourceName(PIDsource s);
276  AliESDpid& GetESDpid() {return fESDpid;}
283 
284  //these should maybe be protected
285  Bool_t PassesCuts(AliVParticle* track);
286  Bool_t PassesESDcuts(AliESDtrack* track);
287  Bool_t PassesNanoAODcuts(const AliNanoAODTrack* track, Bool_t passFid);
288  Bool_t PassesAODcuts(const AliAODTrack* track, Bool_t passFid=kTRUE);
289  Bool_t PassesPMDcuts(const AliESDPmdTrack* track);
291  Bool_t PassesCuts(const AliFlowTrackSimple* track);
292  Bool_t PassesCuts(const AliMultiplicity* track, Int_t id);
293  Bool_t PassesCuts(const AliAODTracklets* track, Int_t id); // XZhang 20120615
294  Bool_t PassesCuts(const AliESDkink* kink);
295  Bool_t PassesCuts(const AliESDv0* v0);
297  Bool_t PassesMCcuts(AliMCEvent* mcevent, Int_t label);
298  Bool_t PassesTPCdedxCut(const AliESDtrack* track);
299  Bool_t PassesTPCbayesianCut(const AliESDtrack* track);
300  Bool_t PassesTPCpidCut(const AliESDtrack* track) const;
301  Bool_t PassesTOFbetaCut(const AliESDtrack* track);
302  Bool_t PassesTOFbetaSimpleCut(const AliESDtrack* track);
303  Bool_t PassesTOFpidCut(const AliESDtrack* track) const;
304  Bool_t PassesESDpidCut(const AliESDtrack* track);
305  Bool_t PassesAODpidCut(const AliAODTrack* track);
306  Bool_t PassesMuonCuts(AliVParticle* track); // XZhang 20120604
307  Bool_t PassesTPCbayesianCut(const AliAODTrack* track);
308  Bool_t PassesTOFbayesianCut(const AliAODTrack* track);
309  Bool_t PassesTOFbetaCut(const AliAODTrack* track);
310  Int_t GetITStype(const AliAODTrack* track) const;
311 
312  void Browse(TBrowser* b);
313  Long64_t Merge(TCollection* list);
314 
315  void SetTPCTOFNsigmaPIDPurityFunctions(Float_t purityLevel);
317 
318  void SetPtTOFPIDoff(Double_t pt) {fPtTOFPIDoff = pt;} // added by B.Hohlweger
320 
321  //gain equalization and recentering
324  void SetVZEROApol(Int_t ring, Float_t f) {fVZEROApol[ring]=f;}
325  void SetVZEROCpol(Int_t ring, Float_t f) {fVZEROCpol[ring]=f;}
326  // set the flag for recentering (which is done in AliFlowEvent)
331  void SetDivSigma(Bool_t r) { fDivSigma = r; }
332  Bool_t GetDivSigma() const { return fDivSigma;}
333  // exclude vzero rings: 0 through 7 can be excluded by calling this setter multiple times
334  // 0 corresponds to segment ID 0 through 7, etc
335  // disabled vzero rings get weight 0
337  fUseVZERORing[i] = u;
338  fVZEROgainEqualizationPerRing = kTRUE; // must be true for this option
339  }
341  void SetChi2A(TArrayD* Chi2A) {fChi2A = Chi2A;} // chi vs cent for vzero A ep_2
342  void SetChi3A(TArrayD* Chi3A) {fChi3A = Chi3A;}
343  void SetChi2C(TArrayD* Chi2C) {fChi2C = Chi2C;}
344  void SetChi3C(TArrayD* Chi3C) {fChi3C = Chi3C;}
345 
346  TArrayD* GetChi2A() {return fChi2A;} // chi vs cent for vzero A ep_2
347  TArrayD* GetChi3A() {return fChi3A;}
348  TArrayD* GetChi2C() {return fChi2C;}
349  TArrayD* GetChi3C() {return fChi3C;}
350 
351  void SetNumberOfSigmas(Float_t val) {fNsigmaCut2 = val*val;};
352  Float_t GetNumberOfSigmas() const {return TMath::Sqrt(fNsigmaCut2);};
353 
354  void SetRun(Int_t const run) {this->fRun = run;};
355  Int_t GetRun() const {return this->fRun;};
356 
357  protected:
358  //AliFlowTrack* MakeFlowTrackSPDtracklet() const;
359  //AliFlowTrack* MakeFlowTrackPMDtrack() const;
360  //AliFlowTrack* MakeFlowTrackVZERO() const;
361  //AliFlowTrack* MakeFlowTrackVParticle() const;
364  AliFlowTrack* FillFlowTrackKink(TObjArray* trackCollection, Int_t trackIndex) const;
365  AliFlowTrack* FillFlowTrackVZERO(TObjArray* trackCollection, Int_t trackIndex) const;
366  AliFlowTrack* FillFlowTrackGeneric(TObjArray* trackCollection, Int_t trackIndex) const;
367  AliFlowTrack* FillFlowTrackVParticle(TObjArray* trackCollection, Int_t trackIndex) const;
368  void HandleESDtrack(AliESDtrack* track);
369  void HandleVParticle(AliVParticle* track);
370  void DefineHistograms();
371  void InitPIDcuts();
372  void InitESDcuts() {if (!fAliESDtrackCuts) {fAliESDtrackCuts=new AliESDtrackCuts();}}
373  void InitMuonCuts() { if (!fMuonTrackCuts) fMuonTrackCuts =new AliMuonTrackCuts("StdMuCuts","StdMuCuts"); return; } // XZhang 20120604
374  // part added by F. Noferini
375  Bool_t PassesTOFbayesianCut(const AliESDtrack* track);
376  Bool_t PassesNucleiSelection(const AliESDtrack* track); // added by Natasha
377  Bool_t PassesTPCTOFNsigmaCut(const AliAODTrack* track);
378  Bool_t PassesTPCTOFNsigmaCut(const AliESDtrack* track);
379  Bool_t PassesTPCTOFNsigmaPurityCut(const AliAODTrack* track);
380  Bool_t TPCTOFagree(const AliVTrack *track);
381  // end part added by F. Noferini
382  Bool_t PassesTPCTPCTOFNsigmaCut(const AliAODTrack* track); // added by B. Hohlweger
383 
384  //the cuts
385  AliESDtrackCuts* fAliESDtrackCuts; //alianalysis cuts
386  AliMuonTrackCuts* fMuonTrackCuts; // muon selection cuts // XZhang 20120604
387  TList* fQA; //qa histograms go here
388  Bool_t fCutMC; //do we cut on MC?
389  Bool_t fCutMChasTrackReferences; //did we leave a trace in the detector?
390  Bool_t fCutMCprocessType; //do we cut on mc process type?
391  TMCProcess fMCprocessType; //mc process type
392  Bool_t fCutMCPID; //cut on MC pid?
393  Int_t fMCPID; //MC PID
394  Bool_t fCutMCfirstMotherPID; //cut on PID of first mother?
395  Int_t fMCfirstMotherPID; //PID of the first mother of track
396  Bool_t fIgnoreSignInMCPID; //when MC PID cut is set, pass also the antiparticle
397  Bool_t fCutMCisPrimary; //do we cut on primaryness?
398  Bool_t fRequireTransportBitForPrimaries; //require the transport bit to be set for primaries
399  Bool_t fMCisPrimary; //is MC primary
400  Bool_t fRequireCharge; //is charged?
401  Bool_t fFakesAreOK; //are fakes (negative labels) ok?
402  Bool_t fCutSPDtrackletDeltaPhi; //are we cutting on the trcklet deltaphi?
403  Double_t fSPDtrackletDeltaPhiMax; //maximal deltaphi for tracklets
404  Double_t fSPDtrackletDeltaPhiMin; //minimal deltaphi for tracklets
405  Bool_t fIgnoreTPCzRange; //ignore tracks going close to central membrane
406  Double_t fIgnoreTPCzRangeMax; //max z to ignore
407  Double_t fIgnoreTPCzRangeMin; //min z to ignore
408  Bool_t fCutChi2PerClusterTPC; //cut on tpc chi2
409  Float_t fMaxChi2PerClusterTPC; //max chi2 tpc/cluster
410  Float_t fMinChi2PerClusterTPC; //min chi2 tpc/cluster
411  Bool_t fCutFracSharedTPCCluster; //cut on fraction of shared TPC clusters
412  Float_t fMaxFracSharedTPCCluster; //max fraction of shared TPC clusters
413  Bool_t fCutFracSharedITSCluster; //cut on fraction of shared ITS clusters
414  Float_t fMaxFracSharedITSCluster; //max fraction of shared ITS clusters
415  Bool_t fCutCrossedTPCRows; //cut on number crossed TPC rows
416  Int_t fMinNCrossedRows; //minimum number of crossed rows
417  Float_t fMinCrossedRowsOverFindableClusters; //min. number of crossed rows / findable clusters
418  Bool_t fCutGoldenChi2; //cut on golden chi2 (Chi2TPCConstrainedVsGlobal)
419  Float_t fMaxGoldenChi2; //max golden chi2 (Chi2TPCConstrainedVsGlobal)
420  Bool_t fRequireTOFSignal; //require TOF signal
421  Bool_t fCutNClustersTPC; //cut on clusters?
422  Int_t fNClustersTPCMax; //max tpc ncls
423  Int_t fNClustersTPCMin; //min tpc clusters
424  Bool_t fCutNClustersITS; //cut on clusters?
425  Int_t fNClustersITSMax; //max tpc ncls
426  Int_t fNClustersITSMin; //min tpc clusters
427  Bool_t fCutChi2PerClusterITS; //cut on chi2 per ITS cluster
428  Bool_t fCutITSClusterGlobal; //cut on ITS clusters: either any hit on SPD or no hit on SPD and hit on first layer SDD (like global tracks)
429  Float_t fMaxChi2PerClusterITS; //max chi2 per ITS cluster
430  Bool_t fUseAODFilterBit; //use AOD filter bit selection?
431  UInt_t fAODFilterBit; //AOD filter bit to select
432  Bool_t fCutDCAToVertexXY; //dca xy cut
434  Bool_t fCutDCAToVertexXYPtDepAOD; //dca xy cut pt dep (AOD only)
435  Bool_t fCutDCAToVertexXYAOD; //dca xy cut (AOD only)
436  Float_t fMaxDCAxyAOD; //max dca xy (AOD only)
437  Bool_t fCutDCAToVertexZAOD; //dca z cut (AOD only)
438  Float_t fMaxDCAzAOD; //max dca z (AOD only)
439  Bool_t fCutMinimalTPCdedx; //cut on minimal dedx in TPC to reject noise tracks
440  Double_t fMinimalTPCdedx; //value for minimal TPC dedx
441  Bool_t fCutTPCSecbound; // cut tracks entering TPC close to TPC sector boundaries
442  Double_t fCutTPCSecboundMinpt; // minimum pT for previous cut
443  Bool_t fCutTPCSecboundVar; // cut tracks entering TPC close to TPC sector boundaries
444  TF1* fPhiCutLow;
445  TF1* fPhiCutHigh;
446  Bool_t fLinearizeVZEROresponse; //linearize VZERO response using AliESDUtil
447 
448  Int_t fCentralityPercentileMin; //centrality min
449  Int_t fCentralityPercentileMax; //centrality max
450  Float_t fPurityLevel; //Purity cut percentage
451 
452  Bool_t fCutPmdDet; //cut on PMD detector plane
453  Int_t fPmdDet; // value of PMD detector plane
454  Bool_t fCutPmdAdc; //cut on cluster ADC
455  Float_t fPmdAdc; //value of cluster ADC
456  Bool_t fCutPmdNcell; //cut on cluster ncell
457  Float_t fPmdNcell; //value of cluster ncell
458 
459  Double_t fMinKinkAngle; //max kink angle
460  Double_t fMinKinkRadius; //min kink radius
461  Double_t fMaxKinkRadius; //max kink radius
462  Double_t fMinKinkQt; //min kink qt
463  Double_t fMaxKinkQt; //max kink qt
464  Double_t fMinKinkInvMassKmu; //max kink inv mass
465  Double_t fMaxKinkInvMassKmu; //max kink inv mass
466  Bool_t fForceTPCstandalone; //use TPC parameters when applying cuts on the kink mother
467  Bool_t fRequireKinkDaughters; //well, the name says it all
468 
469  trackParameterType fParamType; //parameter type tu cut on
470  trackParameterMix fParamMix; //parameter mixing
471 
472  AliESDkink* fKink;
473  AliESDv0* fV0;
474  AliVParticle* fTrack;
481  AliMCEvent* fMCevent;
482  AliMCParticle* fMCparticle;
483  AliVEvent* fEvent;
484  AliESDtrack fTPCtrack;
485 
486  //PID
487  AliESDpid fESDpid; //pid obj
489  PIDsource fPIDsource; //pid source
490  TMatrixF* fTPCpidCuts; //tpc pid cuts
491  TMatrixF* fTOFpidCuts; //tof pid cuts
492  AliPID::EParticleType fParticleID; //alipid
493  Double_t fParticleProbability; //desired prob for a particle type
494  Bool_t fAllowTOFmismatchFlag; //allow TOFmismatch flag=1 in ESD
495  Bool_t fRequireStrictTOFTPCagreement; //require stricter than TOFmismatch flag TOF-TPC agreement
496  Bool_t fCutRejectElectronsWithTPCpid; //reject electrons with TPC pid
497 
498  // part added by F. Noferini
499  static const Int_t fgkPIDptBin = 20; // pT bins for priors
500  Float_t fC[fgkPIDptBin][5],fBinLimitPID[fgkPIDptBin]; // pt bin limit and priors
501  Float_t fProbBayes; // bayesian probability
502  Float_t fCurrCentr; // current centrality used for set the priors
503  // end part added by F. Noferini
505 
506  //gain equalization and recentering for vzero
509  Bool_t fApplyRecentering; // apply recentering of q-sub vectors in AliFlowEvent ?
510  Bool_t fVZEROgainEqualizationPerRing; // per ring vzero gain calibration
511  Bool_t fDivSigma; // divide by st.dev. after recentering
514  Bool_t fUseVZERORing[8]; // kTRUE means the ring is included
515  static const Int_t fgkNumberOfVZEROtracks=64; //number of VZERO channels
516  TArrayD* fChi2A; // chi vs cent for vzero A ep_2
517  TArrayD* fChi2C; // chi vs cent for vzero C ep_2
518  TArrayD* fChi3A; // chi vs cent for vzero A ep_3
519  TArrayD* fChi3C; // chi vs cent for vzero C ep_3
520 
521  AliPIDResponse *fPIDResponse;
522  Float_t fNsigmaCut2; // Number of sigma^2 (cut value) for TPC+TOF nsigma cut
523 
524  //TPC TOF nsigma Purity based cut functions
526  TDirectory *fPurityFunctionsList;
527 
528  TF2 *fPurityFunction[180]; //TF2 purity functions
529 
530  Bool_t fCutITSclusterShared; // cut fMaxITSClusterShared
531  Int_t fMaxITSclusterShared; // fMaxITSclusterShared
532  Bool_t fCutITSChi2; // cut fMaxITSChi2
533  Double_t fMaxITSChi2; // fMaxITSChi2
534  Int_t fRun; // run number
535 
536  ClassDef(AliFlowTrackCuts,21)
537 };
538 
539 #endif
540 
541 
542 
Double_t fTrackPt
mass of the particle
void GetPtRange(Float_t &r1, Float_t &r2) const
void SetRequireTPCStandAlone(Bool_t a)
Bool_t PassesESDcuts(AliESDtrack *track)
Double_t fIgnoreTPCzRangeMax
Bool_t fCutFracSharedITSCluster
void SetMaxNsigmaToVertex(Float_t sigma=1e10)
static AliFlowTrackCuts * GetStandardVZEROOnlyTrackCuts2011()
void SetChi3C(TArrayD *Chi3C)
Double_t GetMinKinkRadius() const
void SetMaxFracSharedITSCluster(Float_t a)
void SetCutGoldenChi2(Double_t m)
void SetDCAToVertex2D(Bool_t a)
AliESDtrackCuts::ITSClusterRequirement GetClusterRequirementITS(AliESDtrackCuts::Detector det) const
void SetStandardMuonTrackCuts()
double Double_t
Definition: External.C:58
AliPID::EParticleType fParticleID
void SetMaxChi2PerClusterTPC(Float_t a)
Float_t fMaxFracSharedTPCCluster
void SetMaxDCAToVertexZ(Float_t a)
virtual Bool_t IsSelectedMCtruth(TObject *obj, Int_t id=-666)
void SetRequireCharge(Bool_t r)
void SetRun(Int_t const run)
TObject * GetInputObject(Int_t i)
TFile * fPurityFunctionsFile
void SetApplyRecentering(Bool_t r)
void SetAllowTOFmismatchFlag(Bool_t b=kTRUE)
void SetMCisPrimary(Bool_t b=kTRUE)
AliESDkink * fKink
Bool_t GetRequireSigmaToVertex() const
Float_t GetBayesianProb() const
void SetPmdDetPlane(Int_t pmdDet)
void SetPID(AliPID::EParticleType pid, PIDsource s=kTOFpid, Double_t prob=0.9)
void SetIsMuonMC(Bool_t isMC)
long long Long64_t
Definition: External.C:43
void SetMaxDCAToVertexXYPtDepAOD(Bool_t a)
static AliFlowTrackCuts * GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE)
void SetMaxKinkInvMassKmu(Double_t m)
void SetChi3A(TArrayD *Chi3A)
void SetMaxDCAToVertexXYPtDep(const char *a)
static AliFlowTrackCuts * GetStandardGlobalTrackCuts2010()
Double_t GetMinimalTPCdedx() const
Float_t fMaxFracSharedITSCluster
Int_t GetITStype(const AliAODTrack *track) const
Double_t GetMaxKinkQt() const
void SetMaxKinkQt(Double_t m)
Double_t MaxChi2perITSClusterCuts(AliESDtrack *track)
Bool_t FillFlowTrackVParticle(AliFlowTrack *t) const
Bool_t GetRequireITSRefit() const
AliMuonTrackCuts * fMuonTrackCuts
Int_t GetRun() const
Bool_t PassesPMDcuts(const AliESDPmdTrack *track)
Float_t fMinChi2PerClusterTPC
Bool_t GetRequireTPCStandAlone() const
static const Int_t fgkNumberOfVZEROtracks
void SetDivSigma(Bool_t r)
static AliFlowTrackCuts * GetAODTrackCutsForFilterBit(UInt_t bit=1, TString suffix="")
void SetCutCrossedTPCRows(Int_t a, Float_t b)
Bool_t PassesNucleiSelection(const AliESDtrack *track)
TArrayD * GetChi2A()
void SetMaxChi2perITSCluster(Double_t b)
Bool_t GetRequireITSStandAlone() const
AliPID::EParticleType GetParticleID() const
void SetChi2A(TArrayD *Chi2A)
Float_t GetMaxChi2PerClusterITS() const
Int_t Count(AliVEvent *event=NULL)
Double_t GetPtTOFPIDoff()
virtual Bool_t IsSelected(TObject *obj, Int_t id=-666)
void SetParamType(trackParameterType paramType)
void SetMaxDCAToVertexXY(Float_t a)
static AliFlowTrackCuts * GetStandardVZEROOnlyTrackCuts2010()
Float_t GetNumberOfSigmas() const
AliESDpid fESDpid
placeholder for TPC only track to avoid new/delete on every track
Int_t fTrackLabel
track weight
Double_t GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos)
void SetEtaMax(Double_t max)
void SetVZEROgainEqualisationCen(TH2 *g)
TArrayD * GetChi2C()
void HandleESDtrack(AliESDtrack *track)
TDirectory * fPurityFunctionsList
purity functions file
Double_t fTrackPhi
track pt
void Clear(Option_t *option="")
AliESDv0 * fV0
placeholder for the current kink
AliESDtrackCuts * fAliESDtrackCuts
trackParameterType GetParamType() const
void SetFakesAreOK(Bool_t b)
void SetRequireTOFSignal(Bool_t a)
void SetAODfilterBit(UInt_t a)
void SetRunsMuon(const AliVEventHandler *eventHandler)
Float_t fMaxChi2PerClusterITS
Float_t GetBeta(const AliVTrack *t, Bool_t QAmode=kFALSE)
Double_t fSPDtrackletDeltaPhiMax
Bool_t PassesAODcuts(const AliAODTrack *track, Bool_t passFid=kTRUE)
Float_t fMaxChi2PerClusterTPC
void SetRequireTPCRefit(Bool_t a)
void SetMCprocessType(TMCProcess t)
Bool_t PassesTOFbayesianCut(const AliAODTrack *track)
Double_t GetMinKinkInvMassKmu() const
void SetMinNClustersITS(Int_t a)
AliFlowBayesianPID * fBayesianResponse
Bool_t GetVZEROgainEqualizationPerRing() const
Bool_t PassesTOFpidCut(const AliESDtrack *track) const
TList * GetQA() const
static const char * GetParamTypeName(trackParameterType type)
Bool_t fRequireStrictTOFTPCagreement
void SetClusterRequirementITS(AliESDtrackCuts::Detector det, AliESDtrackCuts::ITSClusterRequirement req=AliESDtrackCuts::kOff)
Double_t GetMinKinkAngle() const
Bool_t TPCTOFagree(const AliVTrack *track)
void HandleVParticle(AliVParticle *track)
void SetSPDtrackletDeltaPhiMax(Double_t m)
Long64_t Merge(TCollection *list)
static AliFlowTrackCuts * GetStandardMuonTrackCuts(Bool_t isMC=kFALSE, Int_t passN=2)
void SetCutTPCSecboundVar(Bool_t a)
Double_t * sigma
Int_t GetMinNClustersITS() const
Bool_t GetApplyRecentering() const
Bool_t PassesTPCpidCut(const AliESDtrack *track) const
Int_t GetNumberOfInputObjects() const
Bool_t fRequireTransportBitForPrimaries
void SetPtRange(Float_t r1, Float_t r2)
void SetVZEROgainEqualizationPerRing(Bool_t s)
void SetMinKinkRadius(Double_t r)
Bool_t PassesTPCbayesianCut(const AliESDtrack *track)
Bool_t fVZEROgainEqualizationPerRing
Bool_t PassesCuts(AliVParticle *track)
void SetRequireSigmaToVertex(Bool_t a)
const char * GetMaxDCAToVertexXYPtDep() const
void SetMaxDCAToVertexZAOD(Float_t a)
void SetMinimalTPCdedx(Double_t d=10.)
int Int_t
Definition: External.C:63
AliMuonTrackCuts * GetMuonTrackCuts()
static AliFlowTrackCuts * GetStandardTPCStandaloneTrackCuts()
TH1 * QAafter(Int_t i)
void SetCutMChasTrackReferences(Bool_t b=kTRUE)
AliMCParticle * GetMCparticle() const
void SetIgnoreTPCzRange(Double_t min, Double_t max)
unsigned int UInt_t
Definition: External.C:33
Float_t Getdedx(const AliESDtrack *t) const
Float_t GetMaxChi2PerClusterTPC() const
AliMCEvent * GetMCevent() const
Bool_t FillFlowTrack(AliFlowTrack *track) const
Double_t fMinKinkInvMassKmu
float Float_t
Definition: External.C:68
AliVEvent * fEvent
mc particle
void SetRequireITSRefit(Bool_t a)
void SetRejectElectronsWithTPCpid(Bool_t b=kTRUE)
void SetMaxDCAToVertexXYAOD(Float_t a)
TMCProcess GetMCprocessType() const
TH1 * QAbefore(Int_t i)
AliFlowTrack * FillFlowTrackVZERO(TObjArray *trackCollection, Int_t trackIndex) const
Bool_t PassesMuonCuts(AliVParticle *track)
void SetMinKinkAngle(Double_t a)
static AliFlowTrackCuts * GetStandardTPCStandaloneTrackCuts2010()
Bool_t GetForceTPCstandalone() const
Bool_t fUseVZERORing[8]
calibration info per ring
Float_t fNsigmaCut2
Pid reponse to manage Nsigma cuts.
Bool_t fCutFracSharedTPCCluster
Float_t fVZEROCpol[4]
calibration info per ring
trackParameterMix fParamMix
void SetVZEROCpol(Int_t ring, Float_t f)
static const Int_t fgkPIDptBin
Bool_t PassesESDpidCut(const AliESDtrack *track)
TArrayD * GetChi3A()
TMCProcess fMCprocessType
Bool_t GetDivSigma() const
Float_t fMinCrossedRowsOverFindableClusters
PIDsource fPIDsource
Baysian response with all the TOF tuning (using fESDpid)
trackParameterMix GetParamMix() const
Double_t GetSPDtrackletDeltaPhiMax() const
void SetVZEROgainEqualisation(TH1 *g)
Bool_t GetMCisPrimary() const
Bool_t PassesNanoAODcuts(const AliNanoAODTrack *track, Bool_t passFid)
void SetTPCpidCuts(const TMatrixF *mat)
TMatrixF * fTPCpidCuts
void SetEtaMin(Double_t min)
const Double_t ptmin
Double_t GetMaxKinkInvMassKmu() const
Bool_t IsPhysicalPrimary() const
Bool_t fLinearizeVZEROresponse
Double_t fTrackWeight
track eta
void SetIgnoreSignInMCPID(Bool_t b=kTRUE)
Double_t GetSPDtrackletDeltaPhiMin() const
Int_t GetMCPID() const
AliVEvent * GetEvent() const
Int_t GetPmdDetPlane() const
Bool_t GetRequireTPCRefit() const
Bool_t PassesTPCTOFNsigmaCut(const AliAODTrack *track)
void SetMCfirstMotherPID(Int_t pid)
AliPIDResponse * fPIDResponse
Bool_t GetDCAToVertex2D() const
Bool_t PassesTOFbetaSimpleCut(const AliESDtrack *track)
AliMCEvent * fMCevent
track label, or its absolute value if FakesAreOK
void SetMuonPassNumber(Int_t passN)
Bool_t PassesAODpidCut(const AliAODTrack *track)
UInt_t GetAODFilterBit() const
Bool_t PassesTPCdedxCut(const AliESDtrack *track)
AliFlowTrack * FillFlowTrackKink(TObjArray *trackCollection, Int_t trackIndex) const
void SetMinKinkQt(Double_t m)
trackParameterType fParamType
AliFlowBayesianPID * GetBayesianResponse() const
Double_t centMax
Double_t fCutTPCSecboundMinpt
static const char * PIDsourceName(PIDsource s)
void SetParamMix(trackParameterMix paramMix)
Bool_t GetCutPID() const
void SetMCevent(AliMCEvent *mcEvent)
Bool_t GetUseVZERORing(Int_t i) const
void SetAcceptKinkDaughters(Bool_t a)
void SetCutTPCSecbound(Bool_t a, Double_t ptmin=0.2)
Bool_t PassesTOFbetaCut(const AliESDtrack *track)
Double_t fParticleProbability
Bool_t isMC
void SetCentralityPercentile(Int_t centMin, Int_t centMax)
Bool_t PassesVZEROcuts(Int_t id)
void SetMaxKinkRAdius(Double_t r)
Bool_t fCutRejectElectronsWithTPCpid
Double_t GetMaxKinkRadius() const
void SetEvent(AliVEvent *event, AliMCEvent *mcEvent=NULL)
void SetQA(Bool_t b=kTRUE)
void SetMaxFracSharedTPCCluster(Float_t a)
TArrayD * GetChi3C()
Float_t GetMaxDCAToVertexXY() const
Bool_t fCutMChasTrackReferences
void SetPmdAdc(Float_t pmdAdc)
Float_t GetMaxDCAToVertexZ() const
Definition: External.C:220
AliMCParticle * fMCparticle
mc event
TH2 * fVZEROgainEqualizationCen
equalization histo
void SetCutChi2PerClusterITS(Float_t a)
void SetPmdNcell(Float_t pmdNcell)
void SetMinNClustersTPC(Int_t a)
void SetNumberOfSigmas(Float_t val)
Int_t GetMinNClustersTPC() const
TF2 * fPurityFunction[180]
purity functions list
Float_t fC[fgkPIDptBin][5]
Bool_t GetRequireCharge() const
Double_t GetPmdPhi(Float_t xPos, Float_t yPos)
AliESDtrack fTPCtrack
placeholder for current event
AliESDpid & GetESDpid()
Float_t GetMaxNsigmaToVertex() const
void SetRequireStrictTOFTPCagreement(Bool_t b=kTRUE)
void SetForceTPCstandalone(Bool_t b)
void SetMaxChi2PerClusterITS(Float_t a)
Bool_t fCutSPDtrackletDeltaPhi
void SetMinChi2PerClusterTPC(Float_t a)
void SetRequireTransportBitForPrimaries(Bool_t b)
const char Option_t
Definition: External.C:48
AliFlowTrackCuts & operator=(const AliFlowTrackCuts &someCuts)
void SetPtTOFPIDoff(Double_t pt)
Double_t fTrackEta
track phi
Bool_t GetAcceptKinkDaughters() const
void SetCutITSClusterGlobal(Bool_t a)
Double_t fSPDtrackletDeltaPhiMin
void SetCutMC(Bool_t b=kTRUE)
bool Bool_t
Definition: External.C:53
Bool_t PassesTPCTOFNsigmaPurityCut(const AliAODTrack *track)
Double_t GetMinKinkQt() const
void SetUseVZERORing(Int_t i, Bool_t u)
void SetPriors(Float_t centr=0)
Bool_t FillFlowTrackGeneric(AliFlowTrack *t) const
AliVParticle * GetTrack() const
TMatrixF * fTOFpidCuts
Bool_t GetFakesAreOK() const
Bool_t fCutDCAToVertexXYPtDepAOD
void SetRequireITSStandAlone(Bool_t a)
Int_t MaxSharedITSClusterCuts(AliESDtrack *track)
Bool_t GetAllowTOFmismatchFlag() const
void SetChi2C(TArrayD *Chi2C)
Bool_t PassesTPCTPCTOFNsigmaCut(const AliAODTrack *track)
Float_t fBinLimitPID[fgkPIDptBin]
Double_t fIgnoreTPCzRangeMin
static AliFlowTrackCuts * GetBetaVZEROOnlyTrackCuts()
void SetSPDtrackletDeltaPhiMin(Double_t m)
void GetEtaRange(Float_t &r1, Float_t &r2) const
Definition: External.C:196
Double_t fMaxKinkInvMassKmu
void SetMaxSharedITSCluster(Int_t b)
static AliFlowTrackCuts * GetStandardVZEROOnlyTrackCuts()
void SetTOFpidCuts(const TMatrixF *mat)
void Browse(TBrowser *b)
void ClearTrack(Option_t *option="")
void SetMinKinkInvMassKmu(Double_t m)
Float_t GetPmdNcell() const
Bool_t GetRequireStrictTOFTPCagreement() const
void SetLinearizeVZEROresponse(Bool_t b=kTRUE)
void SetVZEROApol(Int_t ring, Float_t f)
Float_t GetPmdAdc() const
Double_t centMin
void SetMCPID(Int_t pid)
Bool_t fApplyRecentering
equalization histo per centrality bin
void SetEtaRange(Float_t r1, Float_t r2)
Double_t fTrackMass
the track to apply cuts on
void SetTPCTOFNsigmaPIDPurityFunctions(Float_t purityLevel)
AliVParticle * fTrack
placeholder for the current V0