]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Tasks/AliFlowTrackCuts.h
merge with master
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / AliFlowTrackCuts.h
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
24 class TBrowser;
25 class AliVParticle;
26 class AliMCParticle;
27 class AliFlowTrack;
28 class AliMCEvent;
29 class AliInputEventHandler;
30 class AliVEvent;
31 class AliMultiplicity; 
32 class AliAODTracklets;  // XZhang 20120615
33 class AliAODTrack;
34 class AliESDtrack;
35 class AliESDPmdTrack;
36 class AliFlowBayesianPID;
37 class AliESDkink;
38 class AliESDv0;
39 class AliESDVZERO;
40 class AliPIDResponse;
41
42 class AliFlowTrackCuts : public AliFlowTrackSimpleCuts {
43
44  public:
45   AliFlowTrackCuts();
46   AliFlowTrackCuts(const char* name);
47   AliFlowTrackCuts(const AliFlowTrackCuts& someCuts);
48   AliFlowTrackCuts& operator=(const AliFlowTrackCuts& someCuts);
49   virtual ~AliFlowTrackCuts();
50
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
60
61   Int_t Count(AliVEvent* event=NULL);
62
63   enum trackParameterType { kMC, 
64                             kGlobal, 
65                             kTPCstandalone, 
66                             kSPDtracklet,
67                             kPMD,
68                             kV0,    //neutral reconstructed v0 particle
69                             kVZERO, //forward VZERO detector
70                             kMUON,  // XZhang 20120604
71                             kKink,
72                             kAODFilterBit,
73                             kUserA, // reserved for custom cuts
74                             kUserB  // reserved for custom cuts
75                           };
76   enum trackParameterMix  { kPure, 
77                             kTrackWithMCkine, 
78                             kTrackWithMCPID, 
79                             kTrackWithMCpt, 
80                             kTrackWithPtFromFirstMother,
81                             kTrackWithTPCInnerParams,
82                             kTrackWithTPCstandalone
83                           };
84   enum PIDsource {
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
94                    };
95
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)
130
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
136
137   void SetForceTPCstandalone(Bool_t b) {fForceTPCstandalone=b;}
138
139   //Kinks
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;}
147
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;}
155
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;}
188
189   Bool_t GetForceTPCstandalone() const {return fForceTPCstandalone;}
190
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));}  
195
196   //MC stuff
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();}
208
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;}
214
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); 
225   
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="");
234
235   Double_t GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos);
236   Double_t GetPmdPhi(Float_t xPos, Float_t yPos);  
237
238   //PID
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;}
253
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);
279
280   void Browse(TBrowser* b);
281   Long64_t Merge(TCollection* list);
282   
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
298   }
299   Bool_t GetUseVZERORing(Int_t i) const {return fUseVZERORing[i];}
300
301   void SetNumberOfSigmas(Float_t val) {fNsigmaCut2 = val*val;};
302   Float_t GetNumberOfSigmas() const {return TMath::Sqrt(fNsigmaCut2);};
303
304  protected:
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();
318   void InitPIDcuts();
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
328
329   //the cuts
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
369   
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
376
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
386    
387   trackParameterType fParamType;     //parameter type tu cut on
388   trackParameterMix fParamMix;       //parameter mixing
389   
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
403
404   //PID
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
415
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
422   
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
431
432   AliPIDResponse *fPIDResponse;            //! Pid reponse to manage Nsigma cuts
433   Float_t fNsigmaCut2;                     // Number of sigma^2 (cut value) for TPC+TOF nsigma cut
434
435   ClassDef(AliFlowTrackCuts,14)
436 };
437
438 #endif
439
440
441