]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowTasks/AliFlowTrackCuts.h
TOF recalibration now in tender
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowTasks / 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
9 #ifndef ALIFLOWTRACKCUTS_H
10 #define ALIFLOWTRACKCUTS_H
11
12 #include <TMatrix.h>
13 #include "AliFlowTrackSimpleCuts.h"
14 #include "AliESDtrackCuts.h"
15 #include "TMCProcess.h"
16 #include "AliESDtrack.h"
17 #include "AliPID.h"
18
19 class TObjArray;
20 class AliVParticle;
21 class AliMCParticle;
22 class AliFlowTrack;
23 class AliMCEvent;
24 class AliVEvent;
25 class AliMultiplicity; 
26 class AliESDpid;
27
28 class AliFlowTrackCuts : public AliFlowTrackSimpleCuts {
29
30  public:
31   AliFlowTrackCuts();
32   AliFlowTrackCuts(const char* name);
33   AliFlowTrackCuts(const AliFlowTrackCuts& someCuts);
34   AliFlowTrackCuts& operator=(const AliFlowTrackCuts& someCuts);
35   virtual ~AliFlowTrackCuts();
36
37   static AliFlowTrackCuts* GetStandardTPCOnlyTrackCuts();
38   static AliFlowTrackCuts* GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries=kTRUE);
39
40   enum trackParameterType { kMC, kGlobal, kESD_TPConly, kESD_SPDtracklet };
41   enum trackParameterMix  { kPure, kTrackWithMCkine, kTrackWithMCPID, kTrackWithMCpt, kTrackWithPtFromFirstMother };
42   enum PIDsource {kTPCpid, kTOFpid, kTPCTOFpid, kTOFbayesian};
43
44   //setters (interface to AliESDtrackCuts)
45   void SetMinNClustersTPC( Int_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMinNClustersTPC(a);}
46   void SetMinNClustersITS( Int_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMinNClustersITS(a);}
47   void SetClusterRequirementITS( AliESDtrackCuts::Detector det,
48                                  AliESDtrackCuts::ITSClusterRequirement req = AliESDtrackCuts::kOff )
49                                  { InitESDcuts(); fAliESDtrackCuts->SetClusterRequirementITS(det,req); } 
50   void SetMaxChi2PerClusterTPC( Float_t a ) {fMaxChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
51   void SetMinChi2PerClusterTPC( Float_t a ) {fMinChi2PerClusterTPC=a;fCutChi2PerClusterTPC=kTRUE;}
52   void SetMaxChi2PerClusterITS( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxChi2PerClusterITS(a);}
53   void SetRequireTPCRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCRefit(a);}
54   void SetRequireTPCStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireTPCStandAlone(a);}
55   void SetRequireITSRefit( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSRefit(a);}
56   void SetRequireITSStandAlone( Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireITSStandAlone(a);}
57   void SetAcceptKinkDaughters( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetAcceptKinkDaughters(a);}
58   void SetMaxDCAToVertexZ( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexZ(a);}
59   void SetMaxDCAToVertexXY( Float_t a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXY(a);}
60   void SetMaxDCAToVertexXYPtDep( const char* a ) {InitESDcuts(); fAliESDtrackCuts->SetMaxDCAToVertexXYPtDep(a);}
61   void SetRequireSigmaToVertex(Bool_t a) {InitESDcuts(); fAliESDtrackCuts->SetRequireSigmaToVertex(a);}
62   void SetMaxNsigmaToVertex(Float_t sigma=1e10) {InitESDcuts(); fAliESDtrackCuts->SetMaxNsigmaToVertex(sigma); }
63   void SetDCAToVertex2D( Bool_t a ) {InitESDcuts(); fAliESDtrackCuts->SetDCAToVertex2D(a);}
64   void SetEtaRange( Float_t r1, Float_t r2 ) { SetEtaMin(r1); SetEtaMax(r2); }
65   void SetPtRange( Float_t r1, Float_t r2 ) { SetPtMin(r1); SetPtMax(r2); }
66   void SetRequireCharge( Bool_t r ) {fRequireCharge=r;}
67   void SetFakesAreOK( Bool_t b ) {fFakesAreOK=b;}
68   void SetSPDtrackletDeltaPhiMax( Double_t m ) {fSPDtrackletDeltaPhiMax=m; fCutSPDtrackletDeltaPhi=kTRUE;}
69   void SetSPDtrackletDeltaPhiMin( Double_t m ) {fSPDtrackletDeltaPhiMin=m; fCutSPDtrackletDeltaPhi=kTRUE;}
70   void SetIgnoreSignInPID( Bool_t b ) {fIgnoreSignInPID=b;}
71   void SetIgnoreTPCzRange( Double_t min, Double_t max ) 
72                          { fIgnoreTPCzRange=kTRUE; fIgnoreTPCzRangeMin=min; fIgnoreTPCzRangeMax=max; } 
73
74   Int_t GetMinNClustersTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClusterTPC();}
75   Int_t GetMinNClustersITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMinNClustersITS();}
76   AliESDtrackCuts::ITSClusterRequirement GetClusterRequirementITS( AliESDtrackCuts::Detector det ) const
77                                  {if (!fAliESDtrackCuts) return AliESDtrackCuts::kOff;  return fAliESDtrackCuts->GetClusterRequirementITS(det); } 
78   Float_t GetMaxChi2PerClusterTPC() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterTPC();}
79   Float_t GetMaxChi2PerClusterITS() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxChi2PerClusterITS();}
80   Bool_t GetRequireTPCRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCRefit();}
81   Bool_t GetRequireTPCStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireTPCStandAlone();}
82   Bool_t GetRequireITSRefit() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSRefit();}
83   Bool_t GetRequireITSStandAlone() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireITSStandAlone();}
84   Bool_t GetAcceptKinkDaughters() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetAcceptKinkDaughters();}
85   Float_t GetMaxDCAToVertexZ() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexZ();}
86   Float_t GetMaxDCAToVertexXY() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXY();}
87   const char* GetMaxDCAToVertexXYPtDep() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxDCAToVertexXYPtDep();}
88   Bool_t GetRequireSigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetRequireSigmaToVertex();}
89   Float_t GetMaxNsigmaToVertex() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetMaxNsigmaToVertex(); }
90   Bool_t GetDCAToVertex2D() const {if (!fAliESDtrackCuts) return 0; return fAliESDtrackCuts->GetDCAToVertex2D();}
91   void GetEtaRange( Float_t& r1, Float_t& r2 ) const { r1=GetEtaMin(); r2=GetEtaMax(); }
92   void GetPtRange( Float_t& r1, Float_t& r2 ) const { r1=GetPtMin(); r2=GetPtMax(); }
93   Bool_t GetRequireCharge() const {return fRequireCharge;}
94   Bool_t GetFakesAreOK() const {return fFakesAreOK;}
95   Double_t GetSPDtrackletDeltaPhiMax() const {return fSPDtrackletDeltaPhiMax;}
96   Double_t GetSPDtrackletDeltaPhiMin() const {return fSPDtrackletDeltaPhiMin;}
97
98   void SetQA(const char* dirname);
99   TObjArray* GetQA() const {return fQA;}
100
101   //MC stuff
102   void SetCutMC( Bool_t b=kTRUE ) {fCutMC=b;}
103   void SetMCprocessType( TMCProcess t ) { fMCprocessType = t; fCutMCprocessType=kTRUE; fCutMC=kTRUE;}
104   void SetMCisPrimary( Bool_t b ) { fMCisPrimary=b; fCutMCisPrimary=kTRUE; fCutMC=kTRUE;}
105   void SetMCPID( Int_t pid ) { fMCPID=pid; fCutMCPID=kTRUE; fCutMC=kTRUE; }
106   TMCProcess GetMCprocessType() const { return fMCprocessType; }
107   Bool_t GetMCisPrimary() const {return fMCisPrimary;}
108   Int_t GetMCPID() const {return fMCPID;}
109
110   void SetParamType(trackParameterType paramType) {fParamType=paramType;}
111   trackParameterType GetParamType() const {return fParamType;}
112   static const char* GetParamTypeName(trackParameterType type);
113   void SetParamMix(trackParameterMix paramMix) {fParamMix=paramMix;}
114   trackParameterMix GetParamMix() const {return fParamMix;}
115
116   virtual Bool_t IsSelected(TObject* obj, Int_t id=-666);
117   virtual Bool_t IsSelectedMCtruth(TObject* obj, Int_t id=-666);
118   AliVParticle* GetTrack() const {return fTrack;}
119   AliMCParticle* GetMCparticle() const {return fMCparticle;}
120   AliFlowTrack* MakeFlowTrack(int index=0) const;
121   Bool_t IsPhysicalPrimary() const; 
122   static Bool_t IsPhysicalPrimary(AliMCEvent* p, Int_t label, Bool_t requiretransported=kTRUE); 
123   
124   void SetMCevent(AliMCEvent* mcEvent) {fMCevent=mcEvent;}
125   AliMCEvent* GetMCevent() const {return fMCevent;}
126   void SetEvent(AliVEvent* event, AliMCEvent* mcEvent=NULL) {Clear();fEvent=event;fMCevent=mcEvent;}
127   AliVEvent* GetEvent() const {return fEvent;}
128   Int_t GetNumberOfInputObjects() const;
129   TObject* GetInputObject(Int_t i);
130   void Clear(Option_t* option="");
131
132   //PID
133   void SetPID(AliPID::EParticleType pid, PIDsource s=kTPCTOFpid) {fAliPID=pid; fPIDsource=s; fCutPID=kTRUE; InitPIDcuts();}
134   void SetESDpid(AliESDpid* o) {fESDpid=o;}
135   void SetTPCTOFpidCrossOverPt(Double_t pt) {fTPCTOFpidCrossOverPt=pt;}
136   void SetTPCpidCuts(TMatrixF* mat) {fTPCpidCuts=new TMatrixF(*mat);}
137   void SetTOFpidCuts(TMatrixF* mat) {fTOFpidCuts=new TMatrixF(*mat);}
138
139  protected:
140   Bool_t PassesCuts(AliVParticle* track);
141   Bool_t PassesCuts(AliFlowTrackSimple* track);
142   Bool_t PassesCuts(AliMultiplicity* track, Int_t id);
143   Bool_t PassesMCcuts();
144   Bool_t PassesMCcuts(AliMCEvent* mcevent, Int_t label);
145   Bool_t PassesTPCpidCut(AliESDtrack* track);
146   Bool_t PassesTOFpidCut(AliESDtrack* track);  
147   void HandleESDtrack(AliESDtrack* track);
148   void HandleVParticle(AliVParticle* track);
149   void DefineHistograms();
150   void InitPIDcuts();
151   void InitESDcuts() {if (!fAliESDtrackCuts) fAliESDtrackCuts=new AliESDtrackCuts();}
152   // part added by F. Noferini
153   Bool_t PassesTOFbayesianCut(AliESDtrack* track); 
154   void SetPriors(); // set my favourite priors
155   Int_t GetESDPdg(AliESDtrack *track,Option_t *option="bayesianTOF",Int_t ipart=2,Float_t cPi=-1.0,Float_t cKa=0.0,Float_t cPr=0.0); // 3sigma cut ipart=0(el),1(mu),2(pi),3(K),4(p)
156   // end part added by F. Noferini
157
158   //the cuts
159   AliESDtrackCuts* fAliESDtrackCuts; //alianalysis cuts
160   TObjArray* fQA;                   //qa histograms go here
161   Bool_t fCutMC;                     //do we cut on MC?
162   Bool_t fCutMCprocessType;          //do we cut on mc process type?
163   TMCProcess fMCprocessType;         //mc process type
164   Bool_t fCutMCPID;                  //cut on MC pid?
165   Int_t fMCPID;                      //MC PID
166   Bool_t fIgnoreSignInPID;           //when PID cut is set, pass also the antiparticle
167   Bool_t fCutMCisPrimary;            //do we cut on primaryness?
168   Bool_t fRequireTransportBitForPrimaries; //require the transport bit to be set for primaries
169   Bool_t fMCisPrimary;               //is MC primary
170   Bool_t fRequireCharge;          //is charged?
171   Bool_t fFakesAreOK;             //are fakes (negative labels) ok?
172   Bool_t fCutSPDtrackletDeltaPhi; //are we cutting on the trcklet deltaphi?
173   Double_t fSPDtrackletDeltaPhiMax; //maximal deltaphi for tracklets
174   Double_t fSPDtrackletDeltaPhiMin; //minimal deltaphi for tracklets
175   Bool_t fIgnoreTPCzRange;   //ignore tracks going close to central membrane
176   Double_t fIgnoreTPCzRangeMax; //max z to ignore
177   Double_t fIgnoreTPCzRangeMin; //min z to ignore
178   Bool_t fCutChi2PerClusterTPC; //cut on tpc chi2
179   Float_t fMaxChi2PerClusterTPC; //max chi2 tpc/cluster
180   Float_t fMinChi2PerClusterTPC; //min chi2 tpc/cluster
181   Bool_t fCutNClustersTPC;       //cut on clusters?
182   Int_t fNClustersTPCMax;        //max tpc ncls
183   Int_t fNClustersTPCMin;        //min tpc clusters  
184
185   trackParameterType fParamType;     //parameter type tu cut on
186   trackParameterMix fParamMix;       //parameter mixing
187   AliVParticle* fTrack;              //!the track to apply cuts on
188   Double_t fTrackPhi;                //!track phi
189   Double_t fTrackEta;                //!track eta
190   Double_t fTrackWeight;             //!track weight
191   Int_t fTrackLabel;                 //!track label, or its absolute value if FakesAreOK
192   AliMCEvent* fMCevent;              //!mc event
193   AliMCParticle* fMCparticle;        //!mc particle
194   AliVEvent* fEvent;                 //!placeholder for current event
195   AliESDtrack fTPCtrack;             //!placeholder for TPC only track to avoid new/delete on every track
196
197   //PID
198   AliESDpid* fESDpid; //pid obj
199   PIDsource fPIDsource; //pid source
200   TMatrixF* fTPCpidCuts; //tpc pid cuts
201   TMatrixF* fTOFpidCuts; //tof pid cuts
202   Double_t fTPCTOFpidCrossOverPt; //pt cross over for pid, below TPC is taken, above TOF
203   AliPID::EParticleType fAliPID; //alipid
204
205   // part added by F. Noferini
206   static const Int_t fnPIDptBin = 20; // pT bins for priors
207   Float_t fC[fnPIDptBin][5],fBinLimitPID[fnPIDptBin]; // pt bin limit and priors
208   Float_t fProbBayes[5]; // bayesian probability
209   // end part added by F. Noferini
210
211   ClassDef(AliFlowTrackCuts,4)
212 };
213
214 #endif
215
216