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