]>
Commit | Line | Data |
---|---|---|
daf66719 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id$ */ | |
17 | ||
18 | // AliFlowTrackCuts: | |
19 | // ESD track cuts for flow framework | |
20 | // | |
21 | // origin: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch) | |
5559ce24 | 22 | // |
23 | // This class gurantees consistency of cut methods, trackparameter | |
24 | // selection (global tracks, TPC only, etc..) and parameter mixing | |
25 | // in the flow framework. Transparently handles different input types: | |
26 | // ESD, MC, AOD. | |
27 | // This class works in 2 steps: first the requested track parameters are | |
28 | // constructed (to be set by SetParamType() ), then cuts are applied. | |
29 | // the constructed track can be requested AFTER checking the cuts by | |
30 | // calling GetTrack(), in this case the cut object stays in control, | |
31 | // caller does not have to delete the track. | |
32 | // Additionally caller can request an AliFlowTrack object to be constructed | |
33 | // according the parameter mixing scenario requested by SetParamMix(). | |
34 | // AliFlowTrack is made using MakeFlowTrack() method, its an 'object factory' | |
35 | // so caller needs to take care of the freshly created object. | |
daf66719 | 36 | |
37 | #include <limits.h> | |
38 | #include <float.h> | |
32b846cd | 39 | #include <TMatrix.h> |
875ee12a | 40 | #include "TMCProcess.h" |
9a0783cc | 41 | #include "TParticle.h" |
1a80f9f6 | 42 | #include "TH2F.h" |
9a0783cc | 43 | #include "AliStack.h" |
499fe731 | 44 | #include "TBrowser.h" |
daf66719 | 45 | #include "AliMCEvent.h" |
9a0783cc | 46 | #include "AliESDEvent.h" |
daf66719 | 47 | #include "AliVParticle.h" |
48 | #include "AliMCParticle.h" | |
49 | #include "AliESDtrack.h" | |
12b2b8bc | 50 | #include "AliMultiplicity.h" |
daf66719 | 51 | #include "AliAODTrack.h" |
52 | #include "AliFlowTrack.h" | |
53 | #include "AliFlowTrackCuts.h" | |
54 | #include "AliLog.h" | |
32b846cd | 55 | #include "AliESDpid.h" |
d148af7e | 56 | #include "AliESDPmdTrack.h" |
22289738 | 57 | #include "AliESDVZERO.h" |
daf66719 | 58 | |
59 | ClassImp(AliFlowTrackCuts) | |
60 | ||
61 | //----------------------------------------------------------------------- | |
62 | AliFlowTrackCuts::AliFlowTrackCuts(): | |
441ea1cf | 63 | AliFlowTrackSimpleCuts(), |
64 | fAliESDtrackCuts(NULL), | |
65 | fQA(NULL), | |
66 | fCutMC(kFALSE), | |
f21bdf48 | 67 | fCutMChasTrackReferences(kFALSE), |
441ea1cf | 68 | fCutMCprocessType(kFALSE), |
69 | fMCprocessType(kPNoProcess), | |
70 | fCutMCPID(kFALSE), | |
71 | fMCPID(0), | |
a14b8f3c | 72 | fIgnoreSignInMCPID(kFALSE), |
441ea1cf | 73 | fCutMCisPrimary(kFALSE), |
74 | fRequireTransportBitForPrimaries(kTRUE), | |
75 | fMCisPrimary(kFALSE), | |
76 | fRequireCharge(kFALSE), | |
77 | fFakesAreOK(kTRUE), | |
78 | fCutSPDtrackletDeltaPhi(kFALSE), | |
79 | fSPDtrackletDeltaPhiMax(FLT_MAX), | |
80 | fSPDtrackletDeltaPhiMin(-FLT_MAX), | |
81 | fIgnoreTPCzRange(kFALSE), | |
82 | fIgnoreTPCzRangeMax(FLT_MAX), | |
83 | fIgnoreTPCzRangeMin(-FLT_MAX), | |
84 | fCutChi2PerClusterTPC(kFALSE), | |
85 | fMaxChi2PerClusterTPC(FLT_MAX), | |
86 | fMinChi2PerClusterTPC(-FLT_MAX), | |
87 | fCutNClustersTPC(kFALSE), | |
88 | fNClustersTPCMax(INT_MAX), | |
89 | fNClustersTPCMin(INT_MIN), | |
42655d16 | 90 | fCutNClustersITS(kFALSE), |
91 | fNClustersITSMax(INT_MAX), | |
92 | fNClustersITSMin(INT_MIN), | |
5ba02b32 | 93 | fUseAODFilterBit(kFALSE), |
94 | fAODFilterBit(0), | |
a63303bd | 95 | fCutDCAToVertexXY(kFALSE), |
96 | fCutDCAToVertexZ(kFALSE), | |
2b1eaa10 | 97 | fCutMinimalTPCdedx(kFALSE), |
98 | fMinimalTPCdedx(0.), | |
1a80f9f6 | 99 | fCutPmdDet(kFALSE), |
100 | fPmdDet(0), | |
101 | fCutPmdAdc(kFALSE), | |
102 | fPmdAdc(0.), | |
103 | fCutPmdNcell(kFALSE), | |
104 | fPmdNcell(0.), | |
441ea1cf | 105 | fParamType(kGlobal), |
106 | fParamMix(kPure), | |
107 | fTrack(NULL), | |
108 | fTrackPhi(0.), | |
109 | fTrackEta(0.), | |
110 | fTrackWeight(0.), | |
111 | fTrackLabel(INT_MIN), | |
112 | fMCevent(NULL), | |
113 | fMCparticle(NULL), | |
114 | fEvent(NULL), | |
115 | fTPCtrack(), | |
aab6527a | 116 | fESDpid(), |
2b1eaa10 | 117 | fPIDsource(kTOFpid), |
441ea1cf | 118 | fTPCpidCuts(NULL), |
119 | fTOFpidCuts(NULL), | |
a14b8f3c | 120 | fParticleID(AliPID::kUnknown), |
499fe731 | 121 | fParticleProbability(.9), |
875ee12a | 122 | fAllowTOFmismatchFlag(kFALSE), |
0b14d0f4 | 123 | fRequireStrictTOFTPCagreement(kFALSE), |
124 | fCutRejectElectronsWithTPCpid(kFALSE) | |
441ea1cf | 125 | { |
126 | //io constructor | |
5104aa35 | 127 | for ( Int_t i=0; i<5; i++ ) { fProbBayes[i]=0.0; } |
422c61c7 | 128 | SetPriors(); //init arrays |
441ea1cf | 129 | } |
130 | ||
131 | //----------------------------------------------------------------------- | |
132 | AliFlowTrackCuts::AliFlowTrackCuts(const char* name): | |
daf66719 | 133 | AliFlowTrackSimpleCuts(), |
1a80f9f6 | 134 | fAliESDtrackCuts(NULL), |
a1c43d26 | 135 | fQA(NULL), |
1ff4bda1 | 136 | fCutMC(kFALSE), |
f21bdf48 | 137 | fCutMChasTrackReferences(kFALSE), |
daf66719 | 138 | fCutMCprocessType(kFALSE), |
139 | fMCprocessType(kPNoProcess), | |
140 | fCutMCPID(kFALSE), | |
141 | fMCPID(0), | |
a14b8f3c | 142 | fIgnoreSignInMCPID(kFALSE), |
daf66719 | 143 | fCutMCisPrimary(kFALSE), |
441ea1cf | 144 | fRequireTransportBitForPrimaries(kTRUE), |
daf66719 | 145 | fMCisPrimary(kFALSE), |
957517fa | 146 | fRequireCharge(kFALSE), |
127a5825 | 147 | fFakesAreOK(kTRUE), |
9a0783cc | 148 | fCutSPDtrackletDeltaPhi(kFALSE), |
149 | fSPDtrackletDeltaPhiMax(FLT_MAX), | |
150 | fSPDtrackletDeltaPhiMin(-FLT_MAX), | |
1ff4bda1 | 151 | fIgnoreTPCzRange(kFALSE), |
152 | fIgnoreTPCzRangeMax(FLT_MAX), | |
153 | fIgnoreTPCzRangeMin(-FLT_MAX), | |
2948ac5a | 154 | fCutChi2PerClusterTPC(kFALSE), |
155 | fMaxChi2PerClusterTPC(FLT_MAX), | |
156 | fMinChi2PerClusterTPC(-FLT_MAX), | |
32b846cd | 157 | fCutNClustersTPC(kFALSE), |
158 | fNClustersTPCMax(INT_MAX), | |
159 | fNClustersTPCMin(INT_MIN), | |
42655d16 | 160 | fCutNClustersITS(kFALSE), |
161 | fNClustersITSMax(INT_MAX), | |
5ba02b32 | 162 | fNClustersITSMin(INT_MIN), |
163 | fUseAODFilterBit(kFALSE), | |
164 | fAODFilterBit(0), | |
a63303bd | 165 | fCutDCAToVertexXY(kFALSE), |
166 | fCutDCAToVertexZ(kFALSE), | |
2b1eaa10 | 167 | fCutMinimalTPCdedx(kFALSE), |
168 | fMinimalTPCdedx(0.), | |
1a80f9f6 | 169 | fCutPmdDet(kFALSE), |
170 | fPmdDet(0), | |
171 | fCutPmdAdc(kFALSE), | |
172 | fPmdAdc(0.), | |
173 | fCutPmdNcell(kFALSE), | |
174 | fPmdNcell(0.), | |
12b2b8bc | 175 | fParamType(kGlobal), |
daf66719 | 176 | fParamMix(kPure), |
daf66719 | 177 | fTrack(NULL), |
12b2b8bc | 178 | fTrackPhi(0.), |
179 | fTrackEta(0.), | |
180 | fTrackWeight(0.), | |
127a5825 | 181 | fTrackLabel(INT_MIN), |
957517fa | 182 | fMCevent(NULL), |
9a0783cc | 183 | fMCparticle(NULL), |
1ff4bda1 | 184 | fEvent(NULL), |
32b846cd | 185 | fTPCtrack(), |
aab6527a | 186 | fESDpid(), |
2b1eaa10 | 187 | fPIDsource(kTOFpid), |
32b846cd | 188 | fTPCpidCuts(NULL), |
189 | fTOFpidCuts(NULL), | |
a14b8f3c | 190 | fParticleID(AliPID::kUnknown), |
499fe731 | 191 | fParticleProbability(.9), |
875ee12a | 192 | fAllowTOFmismatchFlag(kFALSE), |
0b14d0f4 | 193 | fRequireStrictTOFTPCagreement(kFALSE), |
194 | fCutRejectElectronsWithTPCpid(kFALSE) | |
daf66719 | 195 | { |
196 | //constructor | |
441ea1cf | 197 | SetName(name); |
198 | SetTitle("AliFlowTrackCuts"); | |
aab6527a | 199 | fESDpid.GetTPCResponse().SetBetheBlochParameters( 0.0283086, |
200 | 2.63394e+01, | |
201 | 5.04114e-11, | |
202 | 2.12543e+00, | |
203 | 4.88663e+00 ); | |
5104aa35 | 204 | for ( Int_t i=0; i<5; i++ ) { fProbBayes[i]=0.0; } |
422c61c7 | 205 | SetPriors(); //init arrays |
1a80f9f6 | 206 | |
daf66719 | 207 | } |
208 | ||
209 | //----------------------------------------------------------------------- | |
ee242db3 | 210 | AliFlowTrackCuts::AliFlowTrackCuts(const AliFlowTrackCuts& that): |
211 | AliFlowTrackSimpleCuts(that), | |
441ea1cf | 212 | fAliESDtrackCuts(NULL), |
a1c43d26 | 213 | fQA(NULL), |
1ff4bda1 | 214 | fCutMC(that.fCutMC), |
f21bdf48 | 215 | fCutMChasTrackReferences(that.fCutMChasTrackReferences), |
ee242db3 | 216 | fCutMCprocessType(that.fCutMCprocessType), |
217 | fMCprocessType(that.fMCprocessType), | |
218 | fCutMCPID(that.fCutMCPID), | |
219 | fMCPID(that.fMCPID), | |
a14b8f3c | 220 | fIgnoreSignInMCPID(that.fIgnoreSignInMCPID), |
ee242db3 | 221 | fCutMCisPrimary(that.fCutMCisPrimary), |
441ea1cf | 222 | fRequireTransportBitForPrimaries(that.fRequireTransportBitForPrimaries), |
ee242db3 | 223 | fMCisPrimary(that.fMCisPrimary), |
224 | fRequireCharge(that.fRequireCharge), | |
225 | fFakesAreOK(that.fFakesAreOK), | |
226 | fCutSPDtrackletDeltaPhi(that.fCutSPDtrackletDeltaPhi), | |
227 | fSPDtrackletDeltaPhiMax(that.fSPDtrackletDeltaPhiMax), | |
228 | fSPDtrackletDeltaPhiMin(that.fSPDtrackletDeltaPhiMin), | |
1ff4bda1 | 229 | fIgnoreTPCzRange(that.fIgnoreTPCzRange), |
230 | fIgnoreTPCzRangeMax(that.fIgnoreTPCzRangeMax), | |
231 | fIgnoreTPCzRangeMin(that.fIgnoreTPCzRangeMin), | |
2948ac5a | 232 | fCutChi2PerClusterTPC(that.fCutChi2PerClusterTPC), |
233 | fMaxChi2PerClusterTPC(that.fMaxChi2PerClusterTPC), | |
234 | fMinChi2PerClusterTPC(that.fMinChi2PerClusterTPC), | |
32b846cd | 235 | fCutNClustersTPC(that.fCutNClustersTPC), |
236 | fNClustersTPCMax(that.fNClustersTPCMax), | |
237 | fNClustersTPCMin(that.fNClustersTPCMin), | |
42655d16 | 238 | fCutNClustersITS(that.fCutNClustersITS), |
239 | fNClustersITSMax(that.fNClustersITSMax), | |
240 | fNClustersITSMin(that.fNClustersITSMin), | |
5ba02b32 | 241 | fUseAODFilterBit(that.fUseAODFilterBit), |
242 | fAODFilterBit(that.fAODFilterBit), | |
a63303bd | 243 | fCutDCAToVertexXY(that.fCutDCAToVertexXY), |
244 | fCutDCAToVertexZ(that.fCutDCAToVertexZ), | |
2b1eaa10 | 245 | fCutMinimalTPCdedx(that.fCutMinimalTPCdedx), |
246 | fMinimalTPCdedx(that.fMinimalTPCdedx), | |
1a80f9f6 | 247 | fCutPmdDet(that.fCutPmdDet), |
248 | fPmdDet(that.fPmdDet), | |
249 | fCutPmdAdc(that.fCutPmdAdc), | |
250 | fPmdAdc(that.fPmdAdc), | |
251 | fCutPmdNcell(that.fCutPmdNcell), | |
252 | fPmdNcell(that.fPmdNcell), | |
ee242db3 | 253 | fParamType(that.fParamType), |
254 | fParamMix(that.fParamMix), | |
daf66719 | 255 | fTrack(NULL), |
ee242db3 | 256 | fTrackPhi(0.), |
257 | fTrackEta(0.), | |
258 | fTrackWeight(0.), | |
127a5825 | 259 | fTrackLabel(INT_MIN), |
957517fa | 260 | fMCevent(NULL), |
9a0783cc | 261 | fMCparticle(NULL), |
1ff4bda1 | 262 | fEvent(NULL), |
32b846cd | 263 | fTPCtrack(), |
264 | fESDpid(that.fESDpid), | |
265 | fPIDsource(that.fPIDsource), | |
266 | fTPCpidCuts(NULL), | |
267 | fTOFpidCuts(NULL), | |
2b1eaa10 | 268 | fParticleID(that.fParticleID), |
499fe731 | 269 | fParticleProbability(that.fParticleProbability), |
875ee12a | 270 | fAllowTOFmismatchFlag(that.fAllowTOFmismatchFlag), |
0b14d0f4 | 271 | fRequireStrictTOFTPCagreement(that.fRequireStrictTOFTPCagreement), |
272 | fCutRejectElectronsWithTPCpid(that.fCutRejectElectronsWithTPCpid) | |
daf66719 | 273 | { |
274 | //copy constructor | |
32b846cd | 275 | if (that.fTPCpidCuts) fTPCpidCuts = new TMatrixF(*(that.fTPCpidCuts)); |
276 | if (that.fTOFpidCuts) fTOFpidCuts = new TMatrixF(*(that.fTOFpidCuts)); | |
441ea1cf | 277 | if (that.fAliESDtrackCuts) fAliESDtrackCuts = new AliESDtrackCuts(*(that.fAliESDtrackCuts)); |
5104aa35 | 278 | memcpy(fProbBayes,that.fProbBayes,sizeof(fProbBayes)); |
422c61c7 | 279 | SetPriors(); //init arrays |
1a80f9f6 | 280 | if (that.fQA) DefineHistograms(); |
daf66719 | 281 | } |
282 | ||
283 | //----------------------------------------------------------------------- | |
ee242db3 | 284 | AliFlowTrackCuts& AliFlowTrackCuts::operator=(const AliFlowTrackCuts& that) |
daf66719 | 285 | { |
286 | //assignment | |
cdc20344 | 287 | if (this==&that) return *this; |
288 | ||
ee242db3 | 289 | AliFlowTrackSimpleCuts::operator=(that); |
1a80f9f6 | 290 | //the following may seem excessive but if AliESDtrackCuts properly does copy and clone |
291 | //this approach is better memory-fragmentation-wise in some cases | |
292 | if (that.fAliESDtrackCuts && fAliESDtrackCuts) *fAliESDtrackCuts=*(that.fAliESDtrackCuts); | |
293 | if (that.fAliESDtrackCuts && !fAliESDtrackCuts) fAliESDtrackCuts=new AliESDtrackCuts(*(that.fAliESDtrackCuts)); | |
294 | if (!that.fAliESDtrackCuts) delete fAliESDtrackCuts; fAliESDtrackCuts=NULL; | |
295 | //these guys we don't need to copy, just reinit | |
296 | if (that.fQA) {fQA->Delete(); delete fQA; fQA=NULL; DefineHistograms();} | |
1ff4bda1 | 297 | fCutMC=that.fCutMC; |
f21bdf48 | 298 | fCutMChasTrackReferences=that.fCutMChasTrackReferences; |
ee242db3 | 299 | fCutMCprocessType=that.fCutMCprocessType; |
300 | fMCprocessType=that.fMCprocessType; | |
301 | fCutMCPID=that.fCutMCPID; | |
302 | fMCPID=that.fMCPID; | |
a14b8f3c | 303 | fIgnoreSignInMCPID=that.fIgnoreSignInMCPID, |
ee242db3 | 304 | fCutMCisPrimary=that.fCutMCisPrimary; |
441ea1cf | 305 | fRequireTransportBitForPrimaries=that.fRequireTransportBitForPrimaries; |
ee242db3 | 306 | fMCisPrimary=that.fMCisPrimary; |
307 | fRequireCharge=that.fRequireCharge; | |
308 | fFakesAreOK=that.fFakesAreOK; | |
309 | fCutSPDtrackletDeltaPhi=that.fCutSPDtrackletDeltaPhi; | |
310 | fSPDtrackletDeltaPhiMax=that.fSPDtrackletDeltaPhiMax; | |
311 | fSPDtrackletDeltaPhiMin=that.fSPDtrackletDeltaPhiMin; | |
1ff4bda1 | 312 | fIgnoreTPCzRange=that.fIgnoreTPCzRange; |
313 | fIgnoreTPCzRangeMax=that.fIgnoreTPCzRangeMax; | |
314 | fIgnoreTPCzRangeMin=that.fIgnoreTPCzRangeMin; | |
2948ac5a | 315 | fCutChi2PerClusterTPC=that.fCutChi2PerClusterTPC; |
316 | fMaxChi2PerClusterTPC=that.fMaxChi2PerClusterTPC; | |
317 | fMinChi2PerClusterTPC=that.fMinChi2PerClusterTPC; | |
32b846cd | 318 | fCutNClustersTPC=that.fCutNClustersTPC; |
319 | fNClustersTPCMax=that.fNClustersTPCMax; | |
320 | fNClustersTPCMin=that.fNClustersTPCMin; | |
42655d16 | 321 | fCutNClustersITS=that.fCutNClustersITS; |
322 | fNClustersITSMax=that.fNClustersITSMax; | |
323 | fNClustersITSMin=that.fNClustersITSMin; | |
a63303bd | 324 | fUseAODFilterBit=that.fUseAODFilterBit; |
325 | fAODFilterBit=that.fAODFilterBit; | |
326 | fCutDCAToVertexXY=that.fCutDCAToVertexXY; | |
327 | fCutDCAToVertexZ=that.fCutDCAToVertexZ; | |
2b1eaa10 | 328 | fCutMinimalTPCdedx=that.fCutMinimalTPCdedx; |
329 | fMinimalTPCdedx=that.fMinimalTPCdedx; | |
1a80f9f6 | 330 | fCutPmdDet=that.fCutPmdDet; |
331 | fPmdDet=that.fPmdDet; | |
332 | fCutPmdAdc=that.fCutPmdAdc; | |
333 | fPmdAdc=that.fPmdAdc; | |
334 | fCutPmdNcell=that.fCutPmdNcell; | |
335 | fPmdNcell=that.fPmdNcell; | |
336 | ||
ee242db3 | 337 | fParamType=that.fParamType; |
338 | fParamMix=that.fParamMix; | |
daf66719 | 339 | |
daf66719 | 340 | fTrack=NULL; |
1a80f9f6 | 341 | fTrackEta=0.; |
ee242db3 | 342 | fTrackPhi=0.; |
343 | fTrackWeight=0.; | |
127a5825 | 344 | fTrackLabel=INT_MIN; |
957517fa | 345 | fMCevent=NULL; |
daf66719 | 346 | fMCparticle=NULL; |
9a0783cc | 347 | fEvent=NULL; |
daf66719 | 348 | |
32b846cd | 349 | fESDpid = that.fESDpid; |
350 | fPIDsource = that.fPIDsource; | |
351 | ||
cdc20344 | 352 | delete fTPCpidCuts; |
353 | delete fTOFpidCuts; | |
32b846cd | 354 | if (that.fTPCpidCuts) fTPCpidCuts = new TMatrixF(*(that.fTPCpidCuts)); |
355 | if (that.fTOFpidCuts) fTOFpidCuts = new TMatrixF(*(that.fTOFpidCuts)); | |
32b846cd | 356 | |
2b1eaa10 | 357 | fParticleID=that.fParticleID; |
358 | fParticleProbability=that.fParticleProbability; | |
875ee12a | 359 | fAllowTOFmismatchFlag=that.fAllowTOFmismatchFlag; |
360 | fRequireStrictTOFTPCagreement=that.fRequireStrictTOFTPCagreement; | |
0b14d0f4 | 361 | fCutRejectElectronsWithTPCpid=that.fCutRejectElectronsWithTPCpid; |
5104aa35 | 362 | memcpy(fProbBayes,that.fProbBayes,sizeof(fProbBayes)); |
32b846cd | 363 | |
daf66719 | 364 | return *this; |
365 | } | |
366 | ||
367 | //----------------------------------------------------------------------- | |
368 | AliFlowTrackCuts::~AliFlowTrackCuts() | |
369 | { | |
370 | //dtor | |
daf66719 | 371 | delete fAliESDtrackCuts; |
32b846cd | 372 | delete fTPCpidCuts; |
373 | delete fTOFpidCuts; | |
499fe731 | 374 | if (fQA) { fQA->SetOwner(); fQA->Delete(); delete fQA; } |
daf66719 | 375 | } |
376 | ||
aab6527a | 377 | //----------------------------------------------------------------------- |
378 | void AliFlowTrackCuts::SetEvent(AliVEvent* event, AliMCEvent* mcEvent) | |
379 | { | |
380 | //set the event | |
381 | Clear(); | |
382 | fEvent=event; | |
383 | fMCevent=mcEvent; | |
384 | ||
385 | //do the magic for ESD | |
386 | AliESDEvent* myESD = dynamic_cast<AliESDEvent*>(event); | |
387 | if (fCutPID && myESD) | |
388 | { | |
389 | //TODO: maybe call it only for the TOF options? | |
390 | // Added by F. Noferini for TOF PID | |
391 | fESDpid.SetTOFResponse(myESD,AliESDpid::kTOF_T0); | |
392 | fESDpid.MakePID(myESD,kFALSE); | |
393 | // End F. Noferini added part | |
394 | } | |
395 | ||
396 | //TODO: AOD | |
397 | } | |
398 | ||
399 | //----------------------------------------------------------------------- | |
400 | void AliFlowTrackCuts::SetCutMC( Bool_t b ) | |
401 | { | |
402 | //will we be cutting on MC information? | |
403 | fCutMC=b; | |
404 | ||
405 | //if we cut on MC info then also the Bethe Bloch should be the one tuned for MC | |
406 | if (fCutMC) | |
407 | { | |
408 | fESDpid.GetTPCResponse().SetBetheBlochParameters( 2.15898e+00/50., | |
409 | 1.75295e+01, | |
410 | 3.40030e-09, | |
411 | 1.96178e+00, | |
412 | 3.91720e+00); | |
413 | } | |
414 | } | |
415 | ||
daf66719 | 416 | //----------------------------------------------------------------------- |
12b2b8bc | 417 | Bool_t AliFlowTrackCuts::IsSelected(TObject* obj, Int_t id) |
daf66719 | 418 | { |
419 | //check cuts | |
420 | AliVParticle* vparticle = dynamic_cast<AliVParticle*>(obj); | |
421 | if (vparticle) return PassesCuts(vparticle); | |
422 | AliFlowTrackSimple* flowtrack = dynamic_cast<AliFlowTrackSimple*>(obj); | |
423 | if (flowtrack) return PassesCuts(flowtrack); | |
12b2b8bc | 424 | AliMultiplicity* tracklets = dynamic_cast<AliMultiplicity*>(obj); |
425 | if (tracklets) return PassesCuts(tracklets,id); | |
d148af7e | 426 | AliESDPmdTrack* pmdtrack = dynamic_cast<AliESDPmdTrack*>(obj); |
427 | if (pmdtrack) return PassesPMDcuts(pmdtrack); | |
22289738 | 428 | AliESDVZERO* esdvzero = dynamic_cast<AliESDVZERO*>(obj); |
429 | if (esdvzero) return PassesV0cuts(esdvzero,id); | |
daf66719 | 430 | return kFALSE; //default when passed wrong type of object |
431 | } | |
432 | ||
1ff4bda1 | 433 | //----------------------------------------------------------------------- |
434 | Bool_t AliFlowTrackCuts::IsSelectedMCtruth(TObject* obj, Int_t id) | |
435 | { | |
436 | //check cuts | |
437 | AliVParticle* vparticle = dynamic_cast<AliVParticle*>(obj); | |
438 | if (vparticle) | |
439 | { | |
440 | return PassesMCcuts(fMCevent,vparticle->GetLabel()); | |
441 | } | |
442 | AliMultiplicity* tracklets = dynamic_cast<AliMultiplicity*>(obj); | |
443 | if (tracklets) | |
444 | { | |
445 | Int_t label0 = tracklets->GetLabel(id,0); | |
446 | Int_t label1 = tracklets->GetLabel(id,1); | |
447 | Int_t label = (label0==label1)?tracklets->GetLabel(id,1):-666; | |
448 | return PassesMCcuts(fMCevent,label); | |
449 | } | |
450 | return kFALSE; //default when passed wrong type of object | |
451 | } | |
452 | ||
daf66719 | 453 | //----------------------------------------------------------------------- |
1a80f9f6 | 454 | Bool_t AliFlowTrackCuts::PassesCuts(const AliFlowTrackSimple* track) |
daf66719 | 455 | { |
456 | //check cuts on a flowtracksimple | |
5559ce24 | 457 | |
458 | //clean up from last iteration | |
1ff4bda1 | 459 | fTrack = NULL; |
daf66719 | 460 | return AliFlowTrackSimpleCuts::PassesCuts(track); |
461 | } | |
462 | ||
12b2b8bc | 463 | //----------------------------------------------------------------------- |
1a80f9f6 | 464 | Bool_t AliFlowTrackCuts::PassesCuts(const AliMultiplicity* tracklet, Int_t id) |
12b2b8bc | 465 | { |
466 | //check cuts on a tracklets | |
467 | ||
9a0783cc | 468 | //clean up from last iteration, and init label |
1ff4bda1 | 469 | fTrack = NULL; |
12b2b8bc | 470 | fMCparticle=NULL; |
9a0783cc | 471 | fTrackLabel=-1; |
12b2b8bc | 472 | |
473 | fTrackPhi = tracklet->GetPhi(id); | |
474 | fTrackEta = tracklet->GetEta(id); | |
475 | fTrackWeight = 1.0; | |
476 | if (fCutEta) {if ( fTrackEta < fEtaMin || fTrackEta >= fEtaMax ) return kFALSE;} | |
477 | if (fCutPhi) {if ( fTrackPhi < fPhiMin || fTrackPhi >= fPhiMax ) return kFALSE;} | |
478 | ||
479 | //check MC info if available | |
9a0783cc | 480 | //if the 2 clusters have different label track cannot be good |
481 | //and should therefore not pass the mc cuts | |
482 | Int_t label0 = tracklet->GetLabel(id,0); | |
483 | Int_t label1 = tracklet->GetLabel(id,1); | |
d0471ea0 | 484 | //if possible get label and mcparticle |
9a0783cc | 485 | fTrackLabel = (label0==label1)?tracklet->GetLabel(id,1):-1; |
7afa829c | 486 | if (!fFakesAreOK && fTrackLabel<0) return kFALSE; |
d0471ea0 | 487 | if (fTrackLabel>=0 && fMCevent) fMCparticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(fTrackLabel)); |
488 | //check MC cuts | |
1ff4bda1 | 489 | if (fCutMC && !PassesMCcuts()) return kFALSE; |
12b2b8bc | 490 | return kTRUE; |
491 | } | |
492 | ||
493 | //----------------------------------------------------------------------- | |
1ff4bda1 | 494 | Bool_t AliFlowTrackCuts::PassesMCcuts(AliMCEvent* mcEvent, Int_t label) |
12b2b8bc | 495 | { |
496 | //check the MC info | |
1ff4bda1 | 497 | if (!mcEvent) return kFALSE; |
498 | if (label<0) return kFALSE;//otherwise AliCMevent prints a warning before returning NULL | |
499 | AliMCParticle* mcparticle = static_cast<AliMCParticle*>(mcEvent->GetTrack(label)); | |
500 | if (!mcparticle) {AliError("no MC track"); return kFALSE;} | |
12b2b8bc | 501 | |
502 | if (fCutMCisPrimary) | |
503 | { | |
441ea1cf | 504 | if (IsPhysicalPrimary(mcEvent,label,fRequireTransportBitForPrimaries) != fMCisPrimary) return kFALSE; |
12b2b8bc | 505 | } |
506 | if (fCutMCPID) | |
507 | { | |
1ff4bda1 | 508 | Int_t pdgCode = mcparticle->PdgCode(); |
a14b8f3c | 509 | if (fIgnoreSignInMCPID) |
4cbcbead | 510 | { |
511 | if (TMath::Abs(fMCPID) != TMath::Abs(pdgCode)) return kFALSE; | |
512 | } | |
513 | else | |
514 | { | |
515 | if (fMCPID != pdgCode) return kFALSE; | |
516 | } | |
12b2b8bc | 517 | } |
518 | if ( fCutMCprocessType ) | |
519 | { | |
1ff4bda1 | 520 | TParticle* particle = mcparticle->Particle(); |
12b2b8bc | 521 | Int_t processID = particle->GetUniqueID(); |
522 | if (processID != fMCprocessType ) return kFALSE; | |
523 | } | |
f21bdf48 | 524 | if (fCutMChasTrackReferences) |
525 | { | |
526 | if (mcparticle->GetNumberOfTrackReferences()<1) return kFALSE; | |
527 | } | |
12b2b8bc | 528 | return kTRUE; |
529 | } | |
1a80f9f6 | 530 | |
1ff4bda1 | 531 | //----------------------------------------------------------------------- |
532 | Bool_t AliFlowTrackCuts::PassesMCcuts() | |
533 | { | |
1a80f9f6 | 534 | //check MC info |
1ff4bda1 | 535 | if (!fMCevent) return kFALSE; |
536 | if (fTrackLabel<0) return kFALSE;//otherwise AliCMevent prints a warning before returning NULL | |
537 | fMCparticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(fTrackLabel)); | |
538 | return PassesMCcuts(fMCevent,fTrackLabel); | |
539 | } | |
12b2b8bc | 540 | |
daf66719 | 541 | //----------------------------------------------------------------------- |
542 | Bool_t AliFlowTrackCuts::PassesCuts(AliVParticle* vparticle) | |
543 | { | |
544 | //check cuts for an ESD vparticle | |
545 | ||
127a5825 | 546 | //////////////////////////////////////////////////////////////// |
547 | // start by preparing the track parameters to cut on ////////// | |
548 | //////////////////////////////////////////////////////////////// | |
5559ce24 | 549 | //clean up from last iteration |
1ff4bda1 | 550 | fTrack=NULL; |
5559ce24 | 551 | |
957517fa | 552 | //get the label and the mc particle |
127a5825 | 553 | fTrackLabel = (fFakesAreOK)?TMath::Abs(vparticle->GetLabel()):vparticle->GetLabel(); |
554 | if (fMCevent) fMCparticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(fTrackLabel)); | |
daf66719 | 555 | else fMCparticle=NULL; |
556 | ||
957517fa | 557 | Bool_t isMCparticle = kFALSE; //some things are different for MC particles, check! |
daf66719 | 558 | AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*>(vparticle); |
42655d16 | 559 | AliAODTrack* aodTrack = NULL; |
daf66719 | 560 | if (esdTrack) |
7d27a354 | 561 | { |
42655d16 | 562 | //for an ESD track we do some magic sometimes like constructing TPC only parameters |
563 | //or doing some hybrid, handle that here | |
daf66719 | 564 | HandleESDtrack(esdTrack); |
7d27a354 | 565 | } |
daf66719 | 566 | else |
957517fa | 567 | { |
daf66719 | 568 | HandleVParticle(vparticle); |
957517fa | 569 | //now check if produced particle is MC |
570 | isMCparticle = (dynamic_cast<AliMCParticle*>(fTrack))!=NULL; | |
42655d16 | 571 | aodTrack = dynamic_cast<AliAODTrack*>(vparticle); //keep the additional dynamic cast out of the way for ESDs |
957517fa | 572 | } |
127a5825 | 573 | //////////////////////////////////////////////////////////////// |
574 | //////////////////////////////////////////////////////////////// | |
575 | ||
1ff4bda1 | 576 | if (!fTrack) return kFALSE; |
42655d16 | 577 | //because it may be different from global, not needed for aodTrack because we dont do anything funky there |
578 | if (esdTrack) esdTrack = static_cast<AliESDtrack*>(fTrack); | |
2948ac5a | 579 | |
924b02b0 | 580 | Bool_t pass=kTRUE; |
9a0783cc | 581 | //check the common cuts for the current particle fTrack (MC,AOD,ESD) |
32b846cd | 582 | Double_t pt = fTrack->Pt(); |
f21bdf48 | 583 | Double_t p = fTrack->P(); |
7afa829c | 584 | if (!fFakesAreOK) {if (fTrackLabel<0) pass=kFALSE;} |
32b846cd | 585 | if (fCutPt) {if (pt < fPtMin || pt >= fPtMax ) pass=kFALSE;} |
924b02b0 | 586 | if (fCutEta) {if (fTrack->Eta() < fEtaMin || fTrack->Eta() >= fEtaMax ) pass=kFALSE;} |
587 | if (fCutPhi) {if (fTrack->Phi() < fPhiMin || fTrack->Phi() >= fPhiMax ) pass=kFALSE;} | |
588 | if (fRequireCharge) {if (fTrack->Charge() == 0) pass=kFALSE;} | |
589 | if (fCutCharge && !isMCparticle) {if (fTrack->Charge() != fCharge) pass=kFALSE;} | |
957517fa | 590 | if (fCutCharge && isMCparticle) |
591 | { | |
592 | //in case of an MC particle the charge is stored in units of 1/3|e| | |
593 | Int_t charge = TMath::Nint(fTrack->Charge()/3.0); //mc particles have charge in units of 1/3e | |
32b846cd | 594 | if (charge!=fCharge) pass=kFALSE; |
957517fa | 595 | } |
924b02b0 | 596 | //if(fCutPID) {if (fTrack->PID() != fPID) pass=kFALSE;} |
daf66719 | 597 | |
957517fa | 598 | //when additionally MC info is required |
1ff4bda1 | 599 | if (fCutMC && !PassesMCcuts()) pass=kFALSE; |
daf66719 | 600 | |
42655d16 | 601 | //the case of ESD or AOD |
bb6ca457 | 602 | if (esdTrack) { if (!PassesESDcuts(esdTrack)) { pass=kFALSE; } } |
603 | if (aodTrack) { if (!PassesAODcuts(aodTrack)) { pass=kFALSE; } } | |
42655d16 | 604 | |
f21bdf48 | 605 | if (fQA) |
606 | { | |
c3eb0b6c | 607 | if (fMCparticle) |
f21bdf48 | 608 | { |
875ee12a | 609 | TParticle* tparticle=fMCparticle->Particle(); |
610 | Int_t processID = tparticle->GetUniqueID(); | |
611 | //TLorentzVector v; | |
612 | //mcparticle->Particle()->ProductionVertex(v); | |
613 | //Double_t prodvtxX = v.X(); | |
614 | //Double_t prodvtxY = v.Y(); | |
615 | ||
c3eb0b6c | 616 | Float_t pdg = 0; |
617 | Int_t pdgcode = fMCparticle->PdgCode(); | |
618 | switch (TMath::Abs(pdgcode)) | |
619 | { | |
620 | case 11: | |
621 | pdg = AliPID::kElectron + 0.5; break; | |
622 | case 13: | |
623 | pdg = AliPID::kMuon + 0.5; break; | |
624 | case 211: | |
625 | pdg = AliPID::kPion + 0.5; break; | |
626 | case 321: | |
627 | pdg = AliPID::kKaon + 0.5; break; | |
628 | case 2212: | |
629 | pdg = AliPID::kProton + 0.5; break; | |
630 | default: | |
631 | pdg = AliPID::kUnknown + 0.5; break; | |
632 | } | |
633 | pdg = TMath::Sign(pdg,static_cast<Float_t>(pdgcode)); | |
634 | QAbefore(2)->Fill(p,pdg); | |
635 | QAbefore(3)->Fill(p,IsPhysicalPrimary()?0.5:-0.5); | |
875ee12a | 636 | QAbefore(4)->Fill(p,static_cast<Float_t>(processID)); |
c3eb0b6c | 637 | if (pass) QAafter(2)->Fill(p,pdg); |
638 | if (pass) QAafter(3)->Fill(p,IsPhysicalPrimary()?0.5:-0.5); | |
875ee12a | 639 | if (pass) QAafter(4)->Fill(p,static_cast<Float_t>(processID)); |
f21bdf48 | 640 | } |
f21bdf48 | 641 | } |
642 | ||
42655d16 | 643 | //true by default, if we didn't set any cuts |
644 | return pass; | |
645 | } | |
646 | ||
647 | //_______________________________________________________________________ | |
1a80f9f6 | 648 | Bool_t AliFlowTrackCuts::PassesAODcuts(const AliAODTrack* track) |
42655d16 | 649 | { |
1a80f9f6 | 650 | //check cuts for AOD |
42655d16 | 651 | Bool_t pass = kTRUE; |
652 | ||
653 | if (fCutNClustersTPC) | |
1ff4bda1 | 654 | { |
42655d16 | 655 | Int_t ntpccls = track->GetTPCNcls(); |
656 | if (ntpccls < fNClustersTPCMin || ntpccls > fNClustersTPCMax) pass=kFALSE; | |
657 | } | |
658 | ||
659 | if (fCutNClustersITS) | |
660 | { | |
661 | Int_t nitscls = track->GetITSNcls(); | |
662 | if (nitscls < fNClustersITSMin || nitscls > fNClustersITSMax) pass=kFALSE; | |
663 | } | |
5ba02b32 | 664 | |
665 | if (fCutChi2PerClusterTPC) | |
666 | { | |
667 | Double_t chi2tpc = track->Chi2perNDF(); | |
668 | if (chi2tpc < fMinChi2PerClusterTPC || chi2tpc > fMaxChi2PerClusterTPC) pass=kFALSE; | |
669 | } | |
670 | ||
671 | if (GetRequireTPCRefit() && !(track->GetStatus() & AliESDtrack::kTPCrefit) ) pass=kFALSE; | |
672 | if (GetRequireITSRefit() && !(track->GetStatus() & AliESDtrack::kITSrefit) ) pass=kFALSE; | |
673 | ||
674 | if (fUseAODFilterBit && !track->TestFilterBit(fAODFilterBit)) pass=kFALSE; | |
675 | ||
a63303bd | 676 | if (fCutDCAToVertexXY && track->DCA()>GetMaxDCAToVertexXY()) pass=kFALSE; |
42655d16 | 677 | |
678 | return pass; | |
679 | } | |
680 | ||
681 | //_______________________________________________________________________ | |
682 | Bool_t AliFlowTrackCuts::PassesESDcuts(AliESDtrack* track) | |
683 | { | |
1a80f9f6 | 684 | //check cuts on ESD tracks |
42655d16 | 685 | Bool_t pass=kTRUE; |
cd62a2a8 | 686 | Float_t dcaxy=0.0; |
687 | Float_t dcaz=0.0; | |
688 | track->GetImpactParameters(dcaxy,dcaz); | |
499fe731 | 689 | const AliExternalTrackParam* pout = track->GetOuterParam(); |
690 | const AliExternalTrackParam* pin = track->GetInnerParam(); | |
42655d16 | 691 | if (fIgnoreTPCzRange) |
692 | { | |
42655d16 | 693 | if (pin&&pout) |
441ea1cf | 694 | { |
42655d16 | 695 | Double_t zin = pin->GetZ(); |
696 | Double_t zout = pout->GetZ(); | |
697 | if (zin*zout<0) pass=kFALSE; //reject if cross the membrane | |
698 | if (zin < fIgnoreTPCzRangeMin || zin > fIgnoreTPCzRangeMax) pass=kFALSE; | |
699 | if (zout < fIgnoreTPCzRangeMin || zout > fIgnoreTPCzRangeMax) pass=kFALSE; | |
441ea1cf | 700 | } |
42655d16 | 701 | } |
32b846cd | 702 | |
1a80f9f6 | 703 | Int_t ntpccls = ( fParamType==kTPCstandalone )? |
42655d16 | 704 | track->GetTPCNclsIter1():track->GetTPCNcls(); |
705 | if (fCutChi2PerClusterTPC) | |
706 | { | |
1a80f9f6 | 707 | Float_t tpcchi2 = (fParamType==kTPCstandalone)? |
42655d16 | 708 | track->GetTPCchi2Iter1():track->GetTPCchi2(); |
709 | tpcchi2 = (ntpccls>0)?tpcchi2/ntpccls:-FLT_MAX; | |
710 | if (tpcchi2<fMinChi2PerClusterTPC || tpcchi2 >=fMaxChi2PerClusterTPC) | |
711 | pass=kFALSE; | |
712 | } | |
713 | ||
2b1eaa10 | 714 | if (fCutMinimalTPCdedx) |
715 | { | |
716 | if (track->GetTPCsignal() < fMinimalTPCdedx) pass=kFALSE; | |
717 | } | |
718 | ||
42655d16 | 719 | if (fCutNClustersTPC) |
720 | { | |
721 | if (ntpccls < fNClustersTPCMin || ntpccls > fNClustersTPCMax) pass=kFALSE; | |
722 | } | |
723 | ||
724 | Int_t nitscls = track->GetNcls(0); | |
725 | if (fCutNClustersITS) | |
726 | { | |
727 | if (nitscls < fNClustersITSMin || nitscls > fNClustersITSMax) pass=kFALSE; | |
728 | } | |
32b846cd | 729 | |
1a80f9f6 | 730 | //some stuff is still handled by AliESDtrackCuts class - delegate |
731 | if (fAliESDtrackCuts) | |
732 | { | |
733 | if (!fAliESDtrackCuts->IsSelected(track)) pass=kFALSE; | |
734 | } | |
735 | ||
cd62a2a8 | 736 | //PID part with pid QA |
499fe731 | 737 | Double_t beta = GetBeta(track); |
738 | Double_t dedx = Getdedx(track); | |
739 | if (fQA) | |
740 | { | |
741 | if (pass) QAbefore(0)->Fill(track->GetP(),beta); | |
742 | if (pass) QAbefore(1)->Fill(pin->GetP(),dedx); | |
743 | } | |
a14b8f3c | 744 | if (fCutPID && (fParticleID!=AliPID::kUnknown)) //if kUnknown don't cut on PID |
42655d16 | 745 | { |
746 | switch (fPIDsource) | |
32b846cd | 747 | { |
42655d16 | 748 | case kTPCpid: |
749 | if (!PassesTPCpidCut(track)) pass=kFALSE; | |
750 | break; | |
2b1eaa10 | 751 | case kTPCdedx: |
752 | if (!PassesTPCdedxCut(track)) pass=kFALSE; | |
753 | break; | |
42655d16 | 754 | case kTOFpid: |
755 | if (!PassesTOFpidCut(track)) pass=kFALSE; | |
756 | break; | |
2b1eaa10 | 757 | case kTOFbeta: |
758 | if (!PassesTOFbetaCut(track)) pass=kFALSE; | |
1a80f9f6 | 759 | break; |
760 | case kTOFbetaSimple: | |
761 | if (!PassesTOFbetaSimpleCut(track)) pass=kFALSE; | |
cd62a2a8 | 762 | break; |
763 | case kTPCbayesian: | |
764 | if (!PassesTPCbayesianCut(track)) pass=kFALSE; | |
42655d16 | 765 | break; |
766 | // part added by F. Noferini | |
767 | case kTOFbayesian: | |
768 | if (!PassesTOFbayesianCut(track)) pass=kFALSE; | |
769 | break; | |
770 | // end part added by F. Noferini | |
771 | default: | |
772 | printf("AliFlowTrackCuts::PassesCuts() this should never be called!\n"); | |
773 | pass=kFALSE; | |
774 | break; | |
32b846cd | 775 | } |
42655d16 | 776 | } |
0b14d0f4 | 777 | if (fCutRejectElectronsWithTPCpid) |
778 | { | |
779 | //reject electrons using standard TPC pid | |
780 | Double_t pidTPC[AliPID::kSPECIES]; | |
781 | track->GetTPCpid(pidTPC); | |
782 | if (pidTPC[AliPID::kElectron]<fParticleProbability) pass=kFALSE; | |
783 | } | |
499fe731 | 784 | if (fQA) |
785 | { | |
786 | if (pass) QAafter(0)->Fill(track->GetP(),beta); | |
787 | if (pass) QAafter(1)->Fill(pin->GetP(),dedx); | |
788 | } | |
cd62a2a8 | 789 | //end pid part with qa |
790 | if (fQA) | |
791 | { | |
792 | Double_t pt = track->Pt(); | |
793 | QAbefore(5)->Fill(pt,dcaxy); | |
794 | QAbefore(6)->Fill(pt,dcaz); | |
795 | if (pass) QAafter(5)->Fill(pt,dcaxy); | |
796 | if (pass) QAafter(6)->Fill(pt,dcaz); | |
797 | } | |
32b846cd | 798 | |
42655d16 | 799 | return pass; |
daf66719 | 800 | } |
801 | ||
802 | //----------------------------------------------------------------------- | |
803 | void AliFlowTrackCuts::HandleVParticle(AliVParticle* track) | |
804 | { | |
805 | //handle the general case | |
daf66719 | 806 | switch (fParamType) |
807 | { | |
daf66719 | 808 | default: |
daf66719 | 809 | fTrack = track; |
32b846cd | 810 | break; |
daf66719 | 811 | } |
812 | } | |
813 | ||
814 | //----------------------------------------------------------------------- | |
815 | void AliFlowTrackCuts::HandleESDtrack(AliESDtrack* track) | |
816 | { | |
817 | //handle esd track | |
daf66719 | 818 | switch (fParamType) |
819 | { | |
12b2b8bc | 820 | case kGlobal: |
daf66719 | 821 | fTrack = track; |
daf66719 | 822 | break; |
1a80f9f6 | 823 | case kTPCstandalone: |
2b1eaa10 | 824 | if (!track->FillTPCOnlyTrack(fTPCtrack)) |
1ff4bda1 | 825 | { |
826 | fTrack=NULL; | |
827 | fMCparticle=NULL; | |
828 | fTrackLabel=-1; | |
829 | return; | |
830 | } | |
831 | fTrack = &fTPCtrack; | |
957517fa | 832 | //recalculate the label and mc particle, they may differ as TPClabel != global label |
127a5825 | 833 | fTrackLabel = (fFakesAreOK)?TMath::Abs(fTrack->GetLabel()):fTrack->GetLabel(); |
834 | if (fMCevent) fMCparticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(fTrackLabel)); | |
957517fa | 835 | else fMCparticle=NULL; |
daf66719 | 836 | break; |
daf66719 | 837 | default: |
838 | fTrack = track; | |
32b846cd | 839 | break; |
daf66719 | 840 | } |
841 | } | |
842 | ||
a0241c3a | 843 | //----------------------------------------------------------------------- |
844 | Int_t AliFlowTrackCuts::Count(AliVEvent* event) | |
845 | { | |
846 | //calculate the number of track in given event. | |
847 | //if argument is NULL(default) take the event attached | |
848 | //by SetEvent() | |
849 | Int_t multiplicity = 0; | |
850 | if (!event) | |
851 | { | |
852 | for (Int_t i=0; i<GetNumberOfInputObjects(); i++) | |
853 | { | |
854 | if (IsSelected(GetInputObject(i))) multiplicity++; | |
855 | } | |
856 | } | |
857 | else | |
858 | { | |
859 | for (Int_t i=0; i<event->GetNumberOfTracks(); i++) | |
860 | { | |
861 | if (IsSelected(event->GetTrack(i))) multiplicity++; | |
862 | } | |
863 | } | |
864 | return multiplicity; | |
865 | } | |
866 | ||
1a80f9f6 | 867 | //----------------------------------------------------------------------- |
868 | AliFlowTrackCuts* AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts() | |
869 | { | |
870 | AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard vzero flow cuts"); | |
871 | cuts->SetParamType(kV0); | |
872 | cuts->SetEtaRange( -10, +10 ); | |
873 | cuts->SetPhiMin( 0 ); | |
874 | cuts->SetPhiMax( TMath::TwoPi() ); | |
875 | return cuts; | |
876 | } | |
877 | ||
a0241c3a | 878 | //----------------------------------------------------------------------- |
879 | AliFlowTrackCuts* AliFlowTrackCuts::GetStandardGlobalTrackCuts2010() | |
880 | { | |
881 | //get standard cuts | |
1a80f9f6 | 882 | AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard Global tracks"); |
a0241c3a | 883 | cuts->SetParamType(kGlobal); |
884 | cuts->SetPtRange(0.2,5.); | |
885 | cuts->SetEtaRange(-0.8,0.8); | |
886 | cuts->SetMinNClustersTPC(70); | |
887 | cuts->SetMinChi2PerClusterTPC(0.1); | |
888 | cuts->SetMaxChi2PerClusterTPC(4.0); | |
889 | cuts->SetMinNClustersITS(2); | |
890 | cuts->SetRequireITSRefit(kTRUE); | |
891 | cuts->SetRequireTPCRefit(kTRUE); | |
892 | cuts->SetMaxDCAToVertexXY(0.3); | |
893 | cuts->SetMaxDCAToVertexZ(0.3); | |
894 | cuts->SetAcceptKinkDaughters(kFALSE); | |
2b1eaa10 | 895 | cuts->SetMinimalTPCdedx(10.); |
a0241c3a | 896 | |
897 | return cuts; | |
898 | } | |
899 | ||
900 | //----------------------------------------------------------------------- | |
1a80f9f6 | 901 | AliFlowTrackCuts* AliFlowTrackCuts::GetStandardTPCStandaloneTrackCuts2010() |
a0241c3a | 902 | { |
903 | //get standard cuts | |
1a80f9f6 | 904 | AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard TPC standalone 2010"); |
905 | cuts->SetParamType(kTPCstandalone); | |
a0241c3a | 906 | cuts->SetPtRange(0.2,5.); |
907 | cuts->SetEtaRange(-0.8,0.8); | |
908 | cuts->SetMinNClustersTPC(70); | |
909 | cuts->SetMinChi2PerClusterTPC(0.2); | |
910 | cuts->SetMaxChi2PerClusterTPC(4.0); | |
911 | cuts->SetMaxDCAToVertexXY(3.0); | |
912 | cuts->SetMaxDCAToVertexZ(3.0); | |
913 | cuts->SetDCAToVertex2D(kTRUE); | |
914 | cuts->SetAcceptKinkDaughters(kFALSE); | |
2b1eaa10 | 915 | cuts->SetMinimalTPCdedx(10.); |
a0241c3a | 916 | |
917 | return cuts; | |
918 | } | |
919 | ||
daf66719 | 920 | //----------------------------------------------------------------------- |
1a80f9f6 | 921 | AliFlowTrackCuts* AliFlowTrackCuts::GetStandardTPCStandaloneTrackCuts() |
daf66719 | 922 | { |
923 | //get standard cuts | |
1a80f9f6 | 924 | AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard TPC standalone"); |
925 | cuts->SetParamType(kTPCstandalone); | |
a0241c3a | 926 | cuts->SetPtRange(0.2,5.); |
927 | cuts->SetEtaRange(-0.8,0.8); | |
928 | cuts->SetMinNClustersTPC(70); | |
929 | cuts->SetMinChi2PerClusterTPC(0.2); | |
930 | cuts->SetMaxChi2PerClusterTPC(4.0); | |
931 | cuts->SetMaxDCAToVertexXY(3.0); | |
932 | cuts->SetMaxDCAToVertexZ(3.0); | |
933 | cuts->SetDCAToVertex2D(kTRUE); | |
934 | cuts->SetAcceptKinkDaughters(kFALSE); | |
2b1eaa10 | 935 | cuts->SetMinimalTPCdedx(10.); |
a0241c3a | 936 | |
daf66719 | 937 | return cuts; |
938 | } | |
939 | ||
940 | //----------------------------------------------------------------------- | |
941 | AliFlowTrackCuts* AliFlowTrackCuts::GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries) | |
942 | { | |
943 | //get standard cuts | |
441ea1cf | 944 | AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard global track cuts 2009"); |
daf66719 | 945 | delete cuts->fAliESDtrackCuts; |
946 | cuts->fAliESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(selPrimaries); | |
12b2b8bc | 947 | cuts->SetParamType(kGlobal); |
daf66719 | 948 | return cuts; |
949 | } | |
950 | ||
7d27a354 | 951 | //----------------------------------------------------------------------- |
952 | Bool_t AliFlowTrackCuts::FillFlowTrackGeneric(AliFlowTrack* flowtrack) const | |
953 | { | |
954 | //fill a flow track from tracklet,vzero,pmd,... | |
955 | TParticle *tmpTParticle=NULL; | |
956 | AliMCParticle* tmpAliMCParticle=NULL; | |
957 | switch (fParamMix) | |
958 | { | |
959 | case kPure: | |
960 | flowtrack->SetPhi(fTrackPhi); | |
961 | flowtrack->SetEta(fTrackEta); | |
962 | break; | |
963 | case kTrackWithMCkine: | |
964 | if (!fMCparticle) return kFALSE; | |
965 | flowtrack->SetPhi( fMCparticle->Phi() ); | |
966 | flowtrack->SetEta( fMCparticle->Eta() ); | |
967 | flowtrack->SetPt( fMCparticle->Pt() ); | |
968 | break; | |
969 | case kTrackWithMCpt: | |
970 | if (!fMCparticle) return kFALSE; | |
971 | flowtrack->SetPhi(fTrackPhi); | |
972 | flowtrack->SetEta(fTrackEta); | |
973 | flowtrack->SetPt(fMCparticle->Pt()); | |
974 | break; | |
975 | case kTrackWithPtFromFirstMother: | |
976 | if (!fMCparticle) return kFALSE; | |
977 | flowtrack->SetPhi(fTrackPhi); | |
978 | flowtrack->SetEta(fTrackEta); | |
979 | tmpTParticle = fMCparticle->Particle(); | |
980 | tmpAliMCParticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(tmpTParticle->GetFirstMother())); | |
981 | flowtrack->SetPt(tmpAliMCParticle->Pt()); | |
982 | break; | |
983 | default: | |
984 | flowtrack->SetPhi(fTrackPhi); | |
985 | flowtrack->SetEta(fTrackEta); | |
986 | break; | |
987 | } | |
988 | flowtrack->SetSource(AliFlowTrack::kFromTracklet); | |
989 | return kTRUE; | |
990 | } | |
991 | ||
992 | //----------------------------------------------------------------------- | |
993 | Bool_t AliFlowTrackCuts::FillFlowTrackVParticle(AliFlowTrack* flowtrack) const | |
994 | { | |
995 | //fill flow track from AliVParticle (ESD,AOD,MC) | |
996 | if (!fTrack) return kFALSE; | |
997 | TParticle *tmpTParticle=NULL; | |
998 | AliMCParticle* tmpAliMCParticle=NULL; | |
999 | AliExternalTrackParam* externalParams=NULL; | |
1000 | AliESDtrack* esdtrack=NULL; | |
1001 | switch(fParamMix) | |
1002 | { | |
1003 | case kPure: | |
1004 | flowtrack->Set(fTrack); | |
1005 | break; | |
1006 | case kTrackWithMCkine: | |
1007 | flowtrack->Set(fMCparticle); | |
1008 | break; | |
1009 | case kTrackWithMCPID: | |
1010 | flowtrack->Set(fTrack); | |
1011 | //flowtrack->setPID(...) from mc, when implemented | |
1012 | break; | |
1013 | case kTrackWithMCpt: | |
1014 | if (!fMCparticle) return kFALSE; | |
1015 | flowtrack->Set(fTrack); | |
1016 | flowtrack->SetPt(fMCparticle->Pt()); | |
1017 | break; | |
1018 | case kTrackWithPtFromFirstMother: | |
1019 | if (!fMCparticle) return kFALSE; | |
1020 | flowtrack->Set(fTrack); | |
1021 | tmpTParticle = fMCparticle->Particle(); | |
1022 | tmpAliMCParticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(tmpTParticle->GetFirstMother())); | |
1023 | flowtrack->SetPt(tmpAliMCParticle->Pt()); | |
1024 | break; | |
1025 | case kTrackWithTPCInnerParams: | |
1026 | esdtrack = dynamic_cast<AliESDtrack*>(fTrack); | |
1027 | if (!esdtrack) return kFALSE; | |
1028 | externalParams = const_cast<AliExternalTrackParam*>(esdtrack->GetTPCInnerParam()); | |
1029 | if (!externalParams) return kFALSE; | |
1030 | flowtrack->Set(externalParams); | |
1031 | break; | |
1032 | default: | |
1033 | flowtrack->Set(fTrack); | |
1034 | break; | |
1035 | } | |
499fe731 | 1036 | if (fParamType==kMC) |
1037 | { | |
1038 | flowtrack->SetSource(AliFlowTrack::kFromMC); | |
1039 | flowtrack->SetID(fTrack->GetLabel()); | |
1040 | } | |
1041 | else if (dynamic_cast<AliESDtrack*>(fTrack)) | |
1042 | { | |
1043 | flowtrack->SetSource(AliFlowTrack::kFromESD); | |
1044 | flowtrack->SetID(static_cast<AliVTrack*>(fTrack)->GetID()); | |
1045 | } | |
1046 | else if (dynamic_cast<AliAODTrack*>(fTrack)) | |
1047 | { | |
1048 | flowtrack->SetSource(AliFlowTrack::kFromAOD); | |
1049 | flowtrack->SetID(static_cast<AliVTrack*>(fTrack)->GetID()); | |
1050 | } | |
1051 | else if (dynamic_cast<AliMCParticle*>(fTrack)) | |
1052 | { | |
1053 | flowtrack->SetSource(AliFlowTrack::kFromMC); | |
1054 | flowtrack->SetID(static_cast<AliVTrack*>(fTrack)->GetID()); | |
1055 | } | |
7d27a354 | 1056 | return kTRUE; |
1057 | } | |
1058 | ||
1059 | //----------------------------------------------------------------------- | |
1060 | Bool_t AliFlowTrackCuts::FillFlowTrack(AliFlowTrack* track) const | |
1061 | { | |
1062 | //fill a flow track constructed from whatever we applied cuts on | |
1063 | //return true on success | |
1064 | switch (fParamType) | |
1065 | { | |
1066 | case kSPDtracklet: | |
1067 | return FillFlowTrackGeneric(track); | |
1068 | case kPMD: | |
1069 | return FillFlowTrackGeneric(track); | |
1070 | case kV0: | |
1071 | return FillFlowTrackGeneric(track); | |
1072 | default: | |
1073 | return FillFlowTrackVParticle(track); | |
1074 | } | |
1075 | } | |
1076 | ||
daf66719 | 1077 | //----------------------------------------------------------------------- |
d148af7e | 1078 | AliFlowTrack* AliFlowTrackCuts::MakeFlowTrackSPDtracklet() const |
daf66719 | 1079 | { |
d148af7e | 1080 | //make a flow track from tracklet |
daf66719 | 1081 | AliFlowTrack* flowtrack=NULL; |
d0471ea0 | 1082 | TParticle *tmpTParticle=NULL; |
1083 | AliMCParticle* tmpAliMCParticle=NULL; | |
d148af7e | 1084 | switch (fParamMix) |
daf66719 | 1085 | { |
d148af7e | 1086 | case kPure: |
1087 | flowtrack = new AliFlowTrack(); | |
1088 | flowtrack->SetPhi(fTrackPhi); | |
1089 | flowtrack->SetEta(fTrackEta); | |
1090 | break; | |
1091 | case kTrackWithMCkine: | |
1092 | if (!fMCparticle) return NULL; | |
1093 | flowtrack = new AliFlowTrack(); | |
1094 | flowtrack->SetPhi( fMCparticle->Phi() ); | |
1095 | flowtrack->SetEta( fMCparticle->Eta() ); | |
1096 | flowtrack->SetPt( fMCparticle->Pt() ); | |
1097 | break; | |
1098 | case kTrackWithMCpt: | |
1099 | if (!fMCparticle) return NULL; | |
1100 | flowtrack = new AliFlowTrack(); | |
1101 | flowtrack->SetPhi(fTrackPhi); | |
1102 | flowtrack->SetEta(fTrackEta); | |
1103 | flowtrack->SetPt(fMCparticle->Pt()); | |
1104 | break; | |
1105 | case kTrackWithPtFromFirstMother: | |
1106 | if (!fMCparticle) return NULL; | |
1107 | flowtrack = new AliFlowTrack(); | |
1108 | flowtrack->SetPhi(fTrackPhi); | |
1109 | flowtrack->SetEta(fTrackEta); | |
1110 | tmpTParticle = fMCparticle->Particle(); | |
1111 | tmpAliMCParticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(tmpTParticle->GetFirstMother())); | |
1112 | flowtrack->SetPt(tmpAliMCParticle->Pt()); | |
1113 | break; | |
1114 | default: | |
1115 | flowtrack = new AliFlowTrack(); | |
1116 | flowtrack->SetPhi(fTrackPhi); | |
1117 | flowtrack->SetEta(fTrackEta); | |
1118 | break; | |
12b2b8bc | 1119 | } |
d148af7e | 1120 | flowtrack->SetSource(AliFlowTrack::kFromTracklet); |
1121 | return flowtrack; | |
1122 | } | |
1123 | ||
1124 | //----------------------------------------------------------------------- | |
1125 | AliFlowTrack* AliFlowTrackCuts::MakeFlowTrackVParticle() const | |
1126 | { | |
1127 | //make flow track from AliVParticle (ESD,AOD,MC) | |
1128 | if (!fTrack) return NULL; | |
1129 | AliFlowTrack* flowtrack=NULL; | |
1130 | TParticle *tmpTParticle=NULL; | |
1131 | AliMCParticle* tmpAliMCParticle=NULL; | |
d79d61fb | 1132 | AliExternalTrackParam* externalParams=NULL; |
1133 | AliESDtrack* esdtrack=NULL; | |
d148af7e | 1134 | switch(fParamMix) |
12b2b8bc | 1135 | { |
d148af7e | 1136 | case kPure: |
1137 | flowtrack = new AliFlowTrack(fTrack); | |
1138 | break; | |
1139 | case kTrackWithMCkine: | |
1140 | flowtrack = new AliFlowTrack(fMCparticle); | |
1141 | break; | |
1142 | case kTrackWithMCPID: | |
1143 | flowtrack = new AliFlowTrack(fTrack); | |
1144 | //flowtrack->setPID(...) from mc, when implemented | |
1145 | break; | |
1146 | case kTrackWithMCpt: | |
1147 | if (!fMCparticle) return NULL; | |
1148 | flowtrack = new AliFlowTrack(fTrack); | |
1149 | flowtrack->SetPt(fMCparticle->Pt()); | |
1150 | break; | |
1151 | case kTrackWithPtFromFirstMother: | |
1152 | if (!fMCparticle) return NULL; | |
1153 | flowtrack = new AliFlowTrack(fTrack); | |
1154 | tmpTParticle = fMCparticle->Particle(); | |
1155 | tmpAliMCParticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(tmpTParticle->GetFirstMother())); | |
1156 | flowtrack->SetPt(tmpAliMCParticle->Pt()); | |
1157 | break; | |
d79d61fb | 1158 | case kTrackWithTPCInnerParams: |
1159 | esdtrack = dynamic_cast<AliESDtrack*>(fTrack); | |
1160 | if (!esdtrack) return NULL; | |
1161 | externalParams = const_cast<AliExternalTrackParam*>(esdtrack->GetTPCInnerParam()); | |
1162 | if (!externalParams) return NULL; | |
1163 | flowtrack = new AliFlowTrack(externalParams); | |
99cdfc57 | 1164 | break; |
d148af7e | 1165 | default: |
1166 | flowtrack = new AliFlowTrack(fTrack); | |
1167 | break; | |
1168 | } | |
499fe731 | 1169 | if (fParamType==kMC) |
1170 | { | |
1171 | flowtrack->SetSource(AliFlowTrack::kFromMC); | |
1172 | flowtrack->SetID(fTrack->GetLabel()); | |
1173 | } | |
1174 | else if (dynamic_cast<AliESDtrack*>(fTrack)) | |
1175 | { | |
1176 | flowtrack->SetSource(AliFlowTrack::kFromESD); | |
1177 | flowtrack->SetID(static_cast<AliVTrack*>(fTrack)->GetID()); | |
1178 | } | |
1179 | else if (dynamic_cast<AliAODTrack*>(fTrack)) | |
1180 | { | |
1181 | flowtrack->SetSource(AliFlowTrack::kFromAOD); | |
1182 | flowtrack->SetID(static_cast<AliVTrack*>(fTrack)->GetID()); | |
1183 | } | |
1184 | else if (dynamic_cast<AliMCParticle*>(fTrack)) | |
1185 | { | |
1186 | flowtrack->SetSource(AliFlowTrack::kFromMC); | |
1187 | flowtrack->SetID(static_cast<AliVTrack*>(fTrack)->GetID()); | |
1188 | } | |
d148af7e | 1189 | return flowtrack; |
1190 | } | |
1191 | ||
1192 | //----------------------------------------------------------------------- | |
1193 | AliFlowTrack* AliFlowTrackCuts::MakeFlowTrackPMDtrack() const | |
1194 | { | |
1195 | //make a flow track from PMD track | |
1196 | AliFlowTrack* flowtrack=NULL; | |
1197 | TParticle *tmpTParticle=NULL; | |
1198 | AliMCParticle* tmpAliMCParticle=NULL; | |
1199 | switch (fParamMix) | |
1200 | { | |
1201 | case kPure: | |
1202 | flowtrack = new AliFlowTrack(); | |
1203 | flowtrack->SetPhi(fTrackPhi); | |
1204 | flowtrack->SetEta(fTrackEta); | |
1205 | flowtrack->SetWeight(fTrackWeight); | |
1206 | break; | |
1207 | case kTrackWithMCkine: | |
1208 | if (!fMCparticle) return NULL; | |
1209 | flowtrack = new AliFlowTrack(); | |
1210 | flowtrack->SetPhi( fMCparticle->Phi() ); | |
1211 | flowtrack->SetEta( fMCparticle->Eta() ); | |
1212 | flowtrack->SetWeight(fTrackWeight); | |
1213 | flowtrack->SetPt( fMCparticle->Pt() ); | |
1214 | break; | |
1215 | case kTrackWithMCpt: | |
1216 | if (!fMCparticle) return NULL; | |
1217 | flowtrack = new AliFlowTrack(); | |
1218 | flowtrack->SetPhi(fTrackPhi); | |
1219 | flowtrack->SetEta(fTrackEta); | |
1220 | flowtrack->SetWeight(fTrackWeight); | |
1221 | flowtrack->SetPt(fMCparticle->Pt()); | |
1222 | break; | |
1223 | case kTrackWithPtFromFirstMother: | |
1224 | if (!fMCparticle) return NULL; | |
1225 | flowtrack = new AliFlowTrack(); | |
1226 | flowtrack->SetPhi(fTrackPhi); | |
1227 | flowtrack->SetEta(fTrackEta); | |
1228 | flowtrack->SetWeight(fTrackWeight); | |
1229 | tmpTParticle = fMCparticle->Particle(); | |
1230 | tmpAliMCParticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(tmpTParticle->GetFirstMother())); | |
1231 | flowtrack->SetPt(tmpAliMCParticle->Pt()); | |
1232 | break; | |
1233 | default: | |
1234 | flowtrack = new AliFlowTrack(); | |
1235 | flowtrack->SetPhi(fTrackPhi); | |
1236 | flowtrack->SetEta(fTrackEta); | |
1237 | flowtrack->SetWeight(fTrackWeight); | |
1238 | break; | |
daf66719 | 1239 | } |
6e214c87 | 1240 | |
d148af7e | 1241 | flowtrack->SetSource(AliFlowTrack::kFromPMD); |
daf66719 | 1242 | return flowtrack; |
1243 | } | |
127a5825 | 1244 | |
22289738 | 1245 | //----------------------------------------------------------------------- |
1246 | AliFlowTrack* AliFlowTrackCuts::MakeFlowTrackV0() const | |
1247 | { | |
1248 | //make a flow track from V0 | |
1249 | AliFlowTrack* flowtrack=NULL; | |
1250 | TParticle *tmpTParticle=NULL; | |
1251 | AliMCParticle* tmpAliMCParticle=NULL; | |
1252 | switch (fParamMix) | |
1253 | { | |
1254 | case kPure: | |
1255 | flowtrack = new AliFlowTrack(); | |
1256 | flowtrack->SetPhi(fTrackPhi); | |
1257 | flowtrack->SetEta(fTrackEta); | |
1258 | flowtrack->SetWeight(fTrackWeight); | |
1259 | break; | |
1260 | case kTrackWithMCkine: | |
1261 | if (!fMCparticle) return NULL; | |
1262 | flowtrack = new AliFlowTrack(); | |
1263 | flowtrack->SetPhi( fMCparticle->Phi() ); | |
1264 | flowtrack->SetEta( fMCparticle->Eta() ); | |
1265 | flowtrack->SetWeight(fTrackWeight); | |
1266 | flowtrack->SetPt( fMCparticle->Pt() ); | |
1267 | break; | |
1268 | case kTrackWithMCpt: | |
1269 | if (!fMCparticle) return NULL; | |
1270 | flowtrack = new AliFlowTrack(); | |
1271 | flowtrack->SetPhi(fTrackPhi); | |
1272 | flowtrack->SetEta(fTrackEta); | |
1273 | flowtrack->SetWeight(fTrackWeight); | |
1274 | flowtrack->SetPt(fMCparticle->Pt()); | |
1275 | break; | |
1276 | case kTrackWithPtFromFirstMother: | |
1277 | if (!fMCparticle) return NULL; | |
1278 | flowtrack = new AliFlowTrack(); | |
1279 | flowtrack->SetPhi(fTrackPhi); | |
1280 | flowtrack->SetEta(fTrackEta); | |
1281 | flowtrack->SetWeight(fTrackWeight); | |
1282 | tmpTParticle = fMCparticle->Particle(); | |
1283 | tmpAliMCParticle = static_cast<AliMCParticle*>(fMCevent->GetTrack(tmpTParticle->GetFirstMother())); | |
1284 | flowtrack->SetPt(tmpAliMCParticle->Pt()); | |
1285 | break; | |
1286 | default: | |
1287 | flowtrack = new AliFlowTrack(); | |
1288 | flowtrack->SetPhi(fTrackPhi); | |
1289 | flowtrack->SetEta(fTrackEta); | |
1290 | flowtrack->SetWeight(fTrackWeight); | |
1291 | break; | |
1292 | } | |
1293 | ||
1294 | flowtrack->SetSource(AliFlowTrack::kFromV0); | |
1295 | return flowtrack; | |
1296 | } | |
1297 | ||
d148af7e | 1298 | //----------------------------------------------------------------------- |
1299 | AliFlowTrack* AliFlowTrackCuts::MakeFlowTrack() const | |
1300 | { | |
1301 | //get a flow track constructed from whatever we applied cuts on | |
1302 | //caller is resposible for deletion | |
1303 | //if construction fails return NULL | |
22289738 | 1304 | //TODO: for tracklets, PMD and V0 we probably need just one method, |
1305 | //something like MakeFlowTrackGeneric(), wait with this until | |
1306 | //requirements quirks are known. | |
d148af7e | 1307 | switch (fParamType) |
1308 | { | |
1a80f9f6 | 1309 | case kSPDtracklet: |
d148af7e | 1310 | return MakeFlowTrackSPDtracklet(); |
1311 | case kPMD: | |
1312 | return MakeFlowTrackPMDtrack(); | |
22289738 | 1313 | case kV0: |
1314 | return MakeFlowTrackV0(); | |
d148af7e | 1315 | default: |
1316 | return MakeFlowTrackVParticle(); | |
1317 | } | |
1318 | } | |
1319 | ||
127a5825 | 1320 | //----------------------------------------------------------------------- |
1321 | Bool_t AliFlowTrackCuts::IsPhysicalPrimary() const | |
1322 | { | |
1323 | //check if current particle is a physical primary | |
9a0783cc | 1324 | if (!fMCevent) return kFALSE; |
1325 | if (fTrackLabel<0) return kFALSE; | |
441ea1cf | 1326 | return IsPhysicalPrimary(fMCevent, fTrackLabel, fRequireTransportBitForPrimaries); |
9a0783cc | 1327 | } |
1328 | ||
1329 | //----------------------------------------------------------------------- | |
441ea1cf | 1330 | Bool_t AliFlowTrackCuts::IsPhysicalPrimary(AliMCEvent* mcEvent, Int_t label, Bool_t requiretransported) |
9a0783cc | 1331 | { |
1332 | //check if current particle is a physical primary | |
1333 | Bool_t physprim=mcEvent->IsPhysicalPrimary(label); | |
9a0783cc | 1334 | AliMCParticle* track = static_cast<AliMCParticle*>(mcEvent->GetTrack(label)); |
1335 | if (!track) return kFALSE; | |
1336 | TParticle* particle = track->Particle(); | |
1337 | Bool_t transported = particle->TestBit(kTransportBit); | |
441ea1cf | 1338 | //printf("label: %i prim: %s, transp: %s, pass: %s\n",label, (physprim)?"YES":"NO ",(transported)?"YES":"NO ", |
1339 | //(physprim && (transported || !requiretransported))?"YES":"NO" ); | |
1340 | return (physprim && (transported || !requiretransported)); | |
127a5825 | 1341 | } |
12b2b8bc | 1342 | |
924b02b0 | 1343 | //----------------------------------------------------------------------- |
1344 | void AliFlowTrackCuts::DefineHistograms() | |
1345 | { | |
2a745a5f | 1346 | //define qa histograms |
1a80f9f6 | 1347 | if (fQA) return; |
1348 | ||
cd62a2a8 | 1349 | const Int_t kNbinsP=60; |
499fe731 | 1350 | Double_t binsP[kNbinsP+1]; |
1351 | binsP[0]=0.0; | |
6a043318 | 1352 | for(int i=1; i<kNbinsP+1; i++) |
1a80f9f6 | 1353 | { |
499fe731 | 1354 | if(binsP[i-1]+0.05<1.01) |
1355 | binsP[i]=binsP[i-1]+0.05; | |
1a80f9f6 | 1356 | else |
499fe731 | 1357 | binsP[i]=binsP[i-1]+0.1; |
1a80f9f6 | 1358 | } |
1359 | ||
cd62a2a8 | 1360 | const Int_t nBinsDCA=1000; |
1361 | Double_t binsDCA[nBinsDCA+1]; | |
b9cf8f8e | 1362 | for(int i=0; i<nBinsDCA+1; i++) {binsDCA[i]=0.01*i-5.;} |
cd62a2a8 | 1363 | //for(int i=1; i<41; i++) {binsDCA[i+100]=0.1*i+1.0;} |
1364 | ||
499fe731 | 1365 | Bool_t adddirstatus = TH1::AddDirectoryStatus(); |
1366 | TH1::AddDirectory(kFALSE); | |
a14b8f3c | 1367 | fQA=new TList(); fQA->SetOwner(); |
499fe731 | 1368 | fQA->SetName(Form("%s QA",GetName())); |
a14b8f3c | 1369 | TList* before = new TList(); before->SetOwner(); |
499fe731 | 1370 | before->SetName("before"); |
a14b8f3c | 1371 | TList* after = new TList(); after->SetOwner(); |
499fe731 | 1372 | after->SetName("after"); |
1373 | fQA->Add(before); | |
1374 | fQA->Add(after); | |
f21bdf48 | 1375 | before->Add(new TH2F("TOFbeta",";p [GeV/c];#beta",kNbinsP,binsP,1000,0.4,1.1)); //0 |
1376 | after->Add(new TH2F("TOFbeta",";p [GeV/c];#beta",kNbinsP,binsP,1000,0.4,1.1)); //0 | |
1377 | before->Add(new TH2F("TPCdedx",";p [GeV/c];dEdx",kNbinsP,binsP,500,0,500)); //1 | |
1378 | after->Add(new TH2F("TPCdedx",";p [GeV/c];dEdx",kNbinsP,binsP,500,0,500)); //1 | |
1379 | before->Add(new TH2F("MC pid",";p[GeV/c];species",kNbinsP,binsP,10,-5, 5)); //2 | |
1380 | after->Add(new TH2F("MC pid",";p[GeV/c];species",kNbinsP,binsP,10,-5, 5)); //2 | |
1381 | before->Add(new TH2F("MC primary",";p[GeV/c];primary",kNbinsP,binsP,2,-1,1)); //3 | |
1382 | after->Add(new TH2F("MC primary",";p[GeV/c];primary",kNbinsP,binsP,2,-1,1)); //3 | |
875ee12a | 1383 | //production process |
1384 | TH2F* hb = new TH2F("MC production process",";p[GeV/c];",kNbinsP,binsP,kMaxMCProcess, | |
1385 | -0.5, kMaxMCProcess-0.5); | |
1386 | TH2F* ha = new TH2F("MC production process",";p[GeV/c];",kNbinsP,binsP,kMaxMCProcess, | |
1387 | -0.5, kMaxMCProcess-0.5); | |
1388 | TAxis* axis = hb->GetYaxis(); | |
1389 | for (Int_t i=0; i<kMaxMCProcess; i++) | |
1390 | { | |
1391 | axis->SetBinLabel(i+1,TMCProcessName[i]); | |
1392 | } | |
644f1368 | 1393 | axis = ha->GetYaxis(); |
875ee12a | 1394 | for (Int_t i=0; i<kMaxMCProcess; i++) |
1395 | { | |
1396 | axis->SetBinLabel(i+1,TMCProcessName[i]); | |
1397 | } | |
1398 | before->Add(hb); //4 | |
1399 | after->Add(ha); //4 | |
cd62a2a8 | 1400 | //DCA |
1401 | before->Add(new TH2F("DCAxy",";p_{t}[GeV/c];DCAxy[cm]", 100, 0., 10., nBinsDCA, binsDCA));//5 | |
1402 | after->Add(new TH2F("DCAxy",";p_{t}[GeV/c];DCAxy[cm]", 100, 0., 10., nBinsDCA, binsDCA));//5 | |
1403 | before->Add(new TH2F("DCAz",";p_{t}[GeV/c];DCAz[cm]", 100, 0., 10., nBinsDCA, binsDCA));//6 | |
1404 | after->Add(new TH2F("DCAz",";p_{t}[GeV/c];DCAz[cm]", 100, 0., 10., nBinsDCA, binsDCA));//6 | |
1405 | ||
499fe731 | 1406 | TH1::AddDirectory(adddirstatus); |
924b02b0 | 1407 | } |
9a0783cc | 1408 | |
1409 | //----------------------------------------------------------------------- | |
1410 | Int_t AliFlowTrackCuts::GetNumberOfInputObjects() const | |
1411 | { | |
1412 | //get the number of tracks in the input event according source | |
1413 | //selection (ESD tracks, tracklets, MC particles etc.) | |
1414 | AliESDEvent* esd=NULL; | |
1415 | switch (fParamType) | |
1416 | { | |
1a80f9f6 | 1417 | case kSPDtracklet: |
9a0783cc | 1418 | esd = dynamic_cast<AliESDEvent*>(fEvent); |
1419 | if (!esd) return 0; | |
1420 | return esd->GetMultiplicity()->GetNumberOfTracklets(); | |
1421 | case kMC: | |
1422 | if (!fMCevent) return 0; | |
1423 | return fMCevent->GetNumberOfTracks(); | |
d148af7e | 1424 | case kPMD: |
1425 | esd = dynamic_cast<AliESDEvent*>(fEvent); | |
1426 | if (!esd) return 0; | |
1427 | return esd->GetNumberOfPmdTracks(); | |
22289738 | 1428 | case kV0: |
1429 | return fgkNumberOfV0tracks; | |
9a0783cc | 1430 | default: |
1431 | if (!fEvent) return 0; | |
1432 | return fEvent->GetNumberOfTracks(); | |
1433 | } | |
1434 | return 0; | |
1435 | } | |
1436 | ||
1437 | //----------------------------------------------------------------------- | |
1438 | TObject* AliFlowTrackCuts::GetInputObject(Int_t i) | |
1439 | { | |
1440 | //get the input object according the data source selection: | |
1441 | //(esd tracks, traclets, mc particles,etc...) | |
1442 | AliESDEvent* esd=NULL; | |
1443 | switch (fParamType) | |
1444 | { | |
1a80f9f6 | 1445 | case kSPDtracklet: |
9a0783cc | 1446 | esd = dynamic_cast<AliESDEvent*>(fEvent); |
1447 | if (!esd) return NULL; | |
1448 | return const_cast<AliMultiplicity*>(esd->GetMultiplicity()); | |
1449 | case kMC: | |
1450 | if (!fMCevent) return NULL; | |
1451 | return fMCevent->GetTrack(i); | |
d148af7e | 1452 | case kPMD: |
1453 | esd = dynamic_cast<AliESDEvent*>(fEvent); | |
1454 | if (!esd) return NULL; | |
1455 | return esd->GetPmdTrack(i); | |
22289738 | 1456 | case kV0: |
1457 | esd = dynamic_cast<AliESDEvent*>(fEvent); | |
a14b8f3c | 1458 | if (!esd) return NULL; |
22289738 | 1459 | return esd->GetVZEROData(); |
9a0783cc | 1460 | default: |
1461 | if (!fEvent) return NULL; | |
1462 | return fEvent->GetTrack(i); | |
1463 | } | |
1464 | } | |
a1c43d26 | 1465 | |
1466 | //----------------------------------------------------------------------- | |
1467 | void AliFlowTrackCuts::Clear(Option_t*) | |
1468 | { | |
1469 | //clean up | |
1470 | fTrack=NULL; | |
1471 | fMCevent=NULL; | |
1472 | fMCparticle=NULL; | |
22289738 | 1473 | fTrackLabel=-1; |
a1c43d26 | 1474 | fTrackWeight=0.0; |
1475 | fTrackEta=0.0; | |
1476 | fTrackPhi=0.0; | |
1477 | } | |
32b846cd | 1478 | |
1479 | //----------------------------------------------------------------------- | |
1a80f9f6 | 1480 | Bool_t AliFlowTrackCuts::PassesTOFbetaSimpleCut(const AliESDtrack* track ) |
32b846cd | 1481 | { |
1482 | //check if passes PID cut using timing in TOF | |
a14b8f3c | 1483 | Bool_t goodtrack = (track->GetStatus() & AliESDtrack::kTOFpid) && |
b092f828 | 1484 | (track->GetTOFsignal() > 12000) && |
1485 | (track->GetTOFsignal() < 100000) && | |
499fe731 | 1486 | (track->GetIntegratedLength() > 365); |
1487 | ||
875ee12a | 1488 | if (!fAllowTOFmismatchFlag) {if ((track->GetStatus() & AliESDtrack::kTOFmismatch)) return kFALSE;} |
1489 | ||
1490 | Bool_t statusMatchingHard = TPCTOFagree(track); | |
1491 | if (fRequireStrictTOFTPCagreement && (!statusMatchingHard)) | |
1492 | return kFALSE; | |
aab6527a | 1493 | |
1494 | if (!goodtrack) return kFALSE; | |
1495 | ||
a0241c3a | 1496 | const Float_t c = 2.99792457999999984e-02; |
b092f828 | 1497 | Float_t p = track->GetP(); |
1a80f9f6 | 1498 | Float_t l = track->GetIntegratedLength(); |
aab6527a | 1499 | Float_t trackT0 = fESDpid.GetTOFResponse().GetStartTime(p); |
b092f828 | 1500 | Float_t timeTOF = track->GetTOFsignal()- trackT0; |
1a80f9f6 | 1501 | Float_t beta = l/timeTOF/c; |
1502 | Double_t integratedTimes[5] = {-1.0,-1.0,-1.0,-1.0,-1.0}; | |
1503 | track->GetIntegratedTimes(integratedTimes); | |
1504 | Float_t betaHypothesis[5] = {0.0,0.0,0.0,0.0,0.0}; | |
1505 | Float_t s[5] = {0.0,0.0,0.0,0.0,0.0}; | |
1506 | for (Int_t i=0;i<5;i++) | |
1507 | { | |
1508 | betaHypothesis[i] = l/integratedTimes[i]/c; | |
1509 | s[i] = beta-betaHypothesis[i]; | |
1510 | } | |
1511 | ||
1512 | switch (fParticleID) | |
1513 | { | |
1514 | case AliPID::kPion: | |
1515 | return ( (s[2]<0.015) && (s[2]>-0.015) && | |
7288f660 | 1516 | (s[3]>0.025) && |
1517 | (s[4]>0.03) ); | |
1a80f9f6 | 1518 | case AliPID::kKaon: |
1519 | return ( (s[3]<0.015) && (s[3]>-0.015) && | |
7288f660 | 1520 | (s[2]<-0.03) && |
1521 | (s[4]>0.03) ); | |
1a80f9f6 | 1522 | case AliPID::kProton: |
499fe731 | 1523 | return ( (s[4]<0.015) && (s[4]>-0.015) && |
7288f660 | 1524 | (s[3]<-0.025) && |
1525 | (s[2]<-0.025) ); | |
1a80f9f6 | 1526 | default: |
1527 | return kFALSE; | |
1528 | } | |
1529 | return kFALSE; | |
1530 | } | |
1531 | ||
499fe731 | 1532 | //----------------------------------------------------------------------- |
1533 | Float_t AliFlowTrackCuts::GetBeta(const AliESDtrack* track) | |
1534 | { | |
1535 | //get beta | |
1536 | const Float_t c = 2.99792457999999984e-02; | |
1537 | Float_t p = track->GetP(); | |
1538 | Float_t l = track->GetIntegratedLength(); | |
1539 | Float_t trackT0 = fESDpid.GetTOFResponse().GetStartTime(p); | |
1540 | Float_t timeTOF = track->GetTOFsignal()- trackT0; | |
1541 | return l/timeTOF/c; | |
1542 | } | |
1543 | ||
1a80f9f6 | 1544 | //----------------------------------------------------------------------- |
1545 | Bool_t AliFlowTrackCuts::PassesTOFbetaCut(const AliESDtrack* track ) | |
1546 | { | |
9b692328 | 1547 | if (!fTOFpidCuts) |
1548 | { | |
1549 | //printf("no TOFpidCuts\n"); | |
1550 | return kFALSE; | |
1551 | } | |
1552 | ||
1a80f9f6 | 1553 | //check if passes PID cut using timing in TOF |
a14b8f3c | 1554 | Bool_t goodtrack = (track->GetStatus() & AliESDtrack::kTOFpid) && |
1a80f9f6 | 1555 | (track->GetTOFsignal() > 12000) && |
1556 | (track->GetTOFsignal() < 100000) && | |
499fe731 | 1557 | (track->GetIntegratedLength() > 365); |
1558 | ||
875ee12a | 1559 | if (!fAllowTOFmismatchFlag) {if ((track->GetStatus() & AliESDtrack::kTOFmismatch)) return kFALSE;} |
1560 | ||
1561 | Bool_t statusMatchingHard = TPCTOFagree(track); | |
1562 | if (fRequireStrictTOFTPCagreement && (!statusMatchingHard)) | |
1563 | return kFALSE; | |
1a80f9f6 | 1564 | |
1565 | if (!goodtrack) return kFALSE; | |
1566 | ||
499fe731 | 1567 | Float_t beta = GetBeta(track); |
1568 | ||
a0241c3a | 1569 | Double_t integratedTimes[5] = {-1.0,-1.0,-1.0,-1.0,-1.0}; |
1570 | track->GetIntegratedTimes(integratedTimes); | |
1571 | ||
1572 | //construct the pid index because it's not AliPID::EParticleType | |
32b846cd | 1573 | Int_t pid = 0; |
2b1eaa10 | 1574 | switch (fParticleID) |
32b846cd | 1575 | { |
1576 | case AliPID::kPion: | |
1577 | pid=2; | |
1578 | break; | |
1579 | case AliPID::kKaon: | |
1580 | pid=3; | |
1581 | break; | |
1582 | case AliPID::kProton: | |
1583 | pid=4; | |
1584 | break; | |
1585 | default: | |
1586 | return kFALSE; | |
1587 | } | |
a0241c3a | 1588 | |
1589 | //signal to cut on | |
499fe731 | 1590 | const Float_t c = 2.99792457999999984e-02; |
1591 | Float_t l = track->GetIntegratedLength(); | |
1592 | Float_t p = track->GetP(); | |
1a80f9f6 | 1593 | Float_t betahypothesis = l/integratedTimes[pid]/c; |
1594 | Float_t betadiff = beta-betahypothesis; | |
32b846cd | 1595 | |
1596 | Float_t* arr = fTOFpidCuts->GetMatrixArray(); | |
a0241c3a | 1597 | Int_t col = TMath::BinarySearch(fTOFpidCuts->GetNcols(),arr,static_cast<Float_t>(p)); |
32b846cd | 1598 | if (col<0) return kFALSE; |
1599 | Float_t min = (*fTOFpidCuts)(1,col); | |
1600 | Float_t max = (*fTOFpidCuts)(2,col); | |
1601 | ||
1a80f9f6 | 1602 | Bool_t pass = (betadiff>min && betadiff<max); |
1603 | ||
1a80f9f6 | 1604 | return pass; |
32b846cd | 1605 | } |
1606 | ||
2b1eaa10 | 1607 | //----------------------------------------------------------------------- |
7d27a354 | 1608 | Bool_t AliFlowTrackCuts::PassesTOFpidCut(const AliESDtrack* track) const |
2b1eaa10 | 1609 | { |
1610 | //check if passes PID cut using default TOF pid | |
7d27a354 | 1611 | Double_t pidTOF[AliPID::kSPECIES]; |
1612 | track->GetTOFpid(pidTOF); | |
1613 | if (pidTOF[fParticleID]>=fParticleProbability) return kTRUE; | |
2b1eaa10 | 1614 | return kFALSE; |
1615 | } | |
1616 | ||
32b846cd | 1617 | //----------------------------------------------------------------------- |
1a80f9f6 | 1618 | Bool_t AliFlowTrackCuts::PassesTPCpidCut(const AliESDtrack* track) const |
2b1eaa10 | 1619 | { |
1620 | //check if passes PID cut using default TPC pid | |
1621 | Double_t pidTPC[AliPID::kSPECIES]; | |
1622 | track->GetTPCpid(pidTPC); | |
1623 | Double_t probablity = 0.; | |
1624 | switch (fParticleID) | |
1625 | { | |
1626 | case AliPID::kPion: | |
1627 | probablity = pidTPC[AliPID::kPion] + pidTPC[AliPID::kMuon]; | |
1628 | break; | |
1629 | default: | |
1630 | probablity = pidTPC[fParticleID]; | |
1631 | } | |
1632 | if (probablity >= fParticleProbability) return kTRUE; | |
1633 | return kFALSE; | |
1634 | } | |
1635 | ||
499fe731 | 1636 | //----------------------------------------------------------------------- |
1637 | Float_t AliFlowTrackCuts::Getdedx(const AliESDtrack* track) | |
1638 | { | |
1639 | //get TPC dedx | |
1640 | return track->GetTPCsignal(); | |
1641 | } | |
1642 | ||
2b1eaa10 | 1643 | //----------------------------------------------------------------------- |
1a80f9f6 | 1644 | Bool_t AliFlowTrackCuts::PassesTPCdedxCut(const AliESDtrack* track) |
32b846cd | 1645 | { |
1646 | //check if passes PID cut using dedx signal in the TPC | |
32b846cd | 1647 | if (!fTPCpidCuts) |
1648 | { | |
9b692328 | 1649 | //printf("no TPCpidCuts\n"); |
32b846cd | 1650 | return kFALSE; |
1651 | } | |
1652 | ||
3c75bbd5 | 1653 | const AliExternalTrackParam* tpcparam = track->GetInnerParam(); //tpc only params at the inner wall |
1654 | if (!tpcparam) return kFALSE; | |
d79d61fb | 1655 | Double_t p = tpcparam->GetP(); |
1656 | Float_t sigExp = fESDpid.GetTPCResponse().GetExpectedSignal(p, fParticleID); | |
32b846cd | 1657 | Float_t sigTPC = track->GetTPCsignal(); |
1658 | Float_t s = (sigTPC-sigExp)/sigExp; | |
32b846cd | 1659 | |
1660 | Float_t* arr = fTPCpidCuts->GetMatrixArray(); | |
1a80f9f6 | 1661 | Int_t arrSize = fTPCpidCuts->GetNcols(); |
1662 | Int_t col = TMath::BinarySearch( arrSize, arr, static_cast<Float_t>(p)); | |
32b846cd | 1663 | if (col<0) return kFALSE; |
1664 | Float_t min = (*fTPCpidCuts)(1,col); | |
1665 | Float_t max = (*fTPCpidCuts)(2,col); | |
1666 | ||
1667 | //printf("------------TPC pid cut %s\n",(s>min && s<max)?"PASS":"FAIL"); | |
1668 | return (s>min && s<max); | |
1669 | } | |
1670 | ||
1671 | //----------------------------------------------------------------------- | |
1672 | void AliFlowTrackCuts::InitPIDcuts() | |
1673 | { | |
1674 | //init matrices with PID cuts | |
1675 | TMatrixF* t = NULL; | |
1676 | if (!fTPCpidCuts) | |
1677 | { | |
2b1eaa10 | 1678 | if (fParticleID==AliPID::kPion) |
32b846cd | 1679 | { |
d79d61fb | 1680 | t = new TMatrixF(3,15); |
1681 | (*t)(0,0) = 0.20; (*t)(1,0) = -0.4; (*t)(2,0) = 0.0; | |
1682 | (*t)(0,1) = 0.25; (*t)(1,1) = -0.4; (*t)(2,1) = 0.1; | |
1683 | (*t)(0,2) = 0.30; (*t)(1,2) = -0.4; (*t)(2,2) = 0.2; | |
1684 | (*t)(0,3) = 0.35; (*t)(1,3) = -0.4; (*t)(2,3) = 0.2; | |
32b846cd | 1685 | (*t)(0,4) = 0.40; (*t)(1,4) = -0.4; (*t)(2,4) = 0.3; |
1686 | (*t)(0,5) = 0.45; (*t)(1,5) = -0.4; (*t)(2,5) = 0.3; | |
1687 | (*t)(0,6) = 0.50; (*t)(1,6) = -0.4; (*t)(2,6) = 0.25; | |
1688 | (*t)(0,7) = 0.55; (*t)(1,7) = -0.4; (*t)(2,7) = 0.15; | |
1689 | (*t)(0,8) = 0.60; (*t)(1,8) = -0.4; (*t)(2,8) = 0.1; | |
d79d61fb | 1690 | (*t)(0,9) = 0.65; (*t)(1,9) = -0.4; (*t)(2,9) = 0.05; |
1691 | (*t)(0,10) = 0.70; (*t)(1,10) = -0.4; (*t)(2,10) = 0; | |
1692 | (*t)(0,11) = 0.75; (*t)(1,11) = -0.4; (*t)(2,11) = 0; | |
1693 | (*t)(0,12) = 0.80; (*t)(1,12) = -0.4; (*t)(2,12) = -0.05; | |
1694 | (*t)(0,13) = 0.85; (*t)(1,13) = -0.4; (*t)(2,13) = -0.1; | |
1695 | (*t)(0,14) = 0.90; (*t)(1,14) = 0; (*t)(2,14) = 0; | |
32b846cd | 1696 | } |
1697 | else | |
2b1eaa10 | 1698 | if (fParticleID==AliPID::kKaon) |
3ca4688a | 1699 | { |
d79d61fb | 1700 | t = new TMatrixF(3,12); |
1701 | (*t)(0,0) = 0.20; (*t)(1,0) = -0.2; (*t)(2,0) = 0.2; | |
1702 | (*t)(0,1) = 0.25; (*t)(1,1) = -0.2; (*t)(2,1) = 0.2; | |
1703 | (*t)(0,2) = 0.30; (*t)(1,2) = -0.2; (*t)(2,2) = 0.2; | |
1704 | (*t)(0,3) = 0.35; (*t)(1,3) = -0.2; (*t)(2,3) = 0.2; | |
1705 | (*t)(0,4) = 0.40; (*t)(1,4) = -0.1; (*t)(2,4) = 0.2; | |
1706 | (*t)(0,5) = 0.45; (*t)(1,5) = -0.1; (*t)(2,5) = 0.2; | |
1707 | (*t)(0,6) = 0.50; (*t)(1,6) =-0.05; (*t)(2,6) = 0.2; | |
1708 | (*t)(0,7) = 0.55; (*t)(1,7) = -0.1; (*t)(2,7) = 0.1; | |
1709 | (*t)(0,8) = 0.60; (*t)(1,8) =-0.05; (*t)(2,8) = 0.1; | |
1710 | (*t)(0,9) = 0.65; (*t)(1,9) = 0; (*t)(2,9) = 0.15; | |
1711 | (*t)(0,10) = 0.70; (*t)(1,10) = 0.05; (*t)(2,10) = 0.2; | |
1a80f9f6 | 1712 | (*t)(0,11) = 0.75; (*t)(1,11) = 0; (*t)(2,11) = 0; |
3ca4688a | 1713 | } |
1714 | else | |
2b1eaa10 | 1715 | if (fParticleID==AliPID::kProton) |
32b846cd | 1716 | { |
d79d61fb | 1717 | t = new TMatrixF(3,9); |
1718 | (*t)(0,0) = 0.20; (*t)(1,0) = -0.1; (*t)(2,0) = 0.1; | |
1719 | (*t)(0,1) = 0.25; (*t)(1,1) = -0.2; (*t)(2,1) = 0.2; | |
1720 | (*t)(0,2) = 0.80; (*t)(1,2) = -0.1; (*t)(2,2) = 0.2; | |
1721 | (*t)(0,3) = 0.85; (*t)(1,3) =-0.05; (*t)(2,3) = 0.2; | |
1722 | (*t)(0,4) = 0.90; (*t)(1,4) =-0.05; (*t)(2,4) = 0.25; | |
1723 | (*t)(0,5) = 0.95; (*t)(1,5) =-0.05; (*t)(2,5) = 0.25; | |
1724 | (*t)(0,6) = 1.00; (*t)(1,6) = -0.1; (*t)(2,6) = 0.25; | |
1725 | (*t)(0,7) = 1.10; (*t)(1,7) =-0.05; (*t)(2,7) = 0.3; | |
1726 | (*t)(0,8) = 1.20; (*t)(1,8) = 0; (*t)(2,8) = 0; | |
32b846cd | 1727 | } |
d79d61fb | 1728 | delete fTPCpidCuts; |
32b846cd | 1729 | fTPCpidCuts=t; |
1730 | } | |
7d9ab4fb | 1731 | t = NULL; |
32b846cd | 1732 | if (!fTOFpidCuts) |
1733 | { | |
2b1eaa10 | 1734 | if (fParticleID==AliPID::kPion) |
32b846cd | 1735 | { |
a0241c3a | 1736 | //TOF pions, 0.9 purity |
1737 | t = new TMatrixF(3,61); | |
d79d61fb | 1738 | (*t)(0,0) = 0.000; (*t)(1,0) = 0.000; (*t)(2,0) = 0.000; |
1739 | (*t)(0,1) = 0.050; (*t)(1,1) = 0.000; (*t)(2,1) = 0.000; | |
1740 | (*t)(0,2) = 0.100; (*t)(1,2) = 0.000; (*t)(2,2) = 0.000; | |
1741 | (*t)(0,3) = 0.150; (*t)(1,3) = 0.000; (*t)(2,3) = 0.000; | |
1a80f9f6 | 1742 | (*t)(0,4) = 0.200; (*t)(1,4) = -0.030; (*t)(2,4) = 0.030; |
d79d61fb | 1743 | (*t)(0,5) = 0.250; (*t)(1,5) = -0.036; (*t)(2,5) = 0.032; |
1744 | (*t)(0,6) = 0.300; (*t)(1,6) = -0.038; (*t)(2,6) = 0.032; | |
1745 | (*t)(0,7) = 0.350; (*t)(1,7) = -0.034; (*t)(2,7) = 0.032; | |
1746 | (*t)(0,8) = 0.400; (*t)(1,8) = -0.032; (*t)(2,8) = 0.020; | |
1747 | (*t)(0,9) = 0.450; (*t)(1,9) = -0.030; (*t)(2,9) = 0.020; | |
1748 | (*t)(0,10) = 0.500; (*t)(1,10) = -0.030; (*t)(2,10) = 0.020; | |
1749 | (*t)(0,11) = 0.550; (*t)(1,11) = -0.030; (*t)(2,11) = 0.020; | |
1750 | (*t)(0,12) = 0.600; (*t)(1,12) = -0.030; (*t)(2,12) = 0.020; | |
1751 | (*t)(0,13) = 0.650; (*t)(1,13) = -0.030; (*t)(2,13) = 0.020; | |
1752 | (*t)(0,14) = 0.700; (*t)(1,14) = -0.030; (*t)(2,14) = 0.020; | |
1753 | (*t)(0,15) = 0.750; (*t)(1,15) = -0.030; (*t)(2,15) = 0.020; | |
1754 | (*t)(0,16) = 0.800; (*t)(1,16) = -0.030; (*t)(2,16) = 0.020; | |
1755 | (*t)(0,17) = 0.850; (*t)(1,17) = -0.030; (*t)(2,17) = 0.020; | |
1756 | (*t)(0,18) = 0.900; (*t)(1,18) = -0.030; (*t)(2,18) = 0.020; | |
1757 | (*t)(0,19) = 0.950; (*t)(1,19) = -0.028; (*t)(2,19) = 0.028; | |
1758 | (*t)(0,20) = 1.000; (*t)(1,20) = -0.028; (*t)(2,20) = 0.028; | |
1759 | (*t)(0,21) = 1.100; (*t)(1,21) = -0.028; (*t)(2,21) = 0.028; | |
1760 | (*t)(0,22) = 1.200; (*t)(1,22) = -0.026; (*t)(2,22) = 0.028; | |
1761 | (*t)(0,23) = 1.300; (*t)(1,23) = -0.024; (*t)(2,23) = 0.028; | |
1762 | (*t)(0,24) = 1.400; (*t)(1,24) = -0.020; (*t)(2,24) = 0.028; | |
1763 | (*t)(0,25) = 1.500; (*t)(1,25) = -0.018; (*t)(2,25) = 0.028; | |
1764 | (*t)(0,26) = 1.600; (*t)(1,26) = -0.016; (*t)(2,26) = 0.028; | |
1765 | (*t)(0,27) = 1.700; (*t)(1,27) = -0.014; (*t)(2,27) = 0.028; | |
1766 | (*t)(0,28) = 1.800; (*t)(1,28) = -0.012; (*t)(2,28) = 0.026; | |
1767 | (*t)(0,29) = 1.900; (*t)(1,29) = -0.010; (*t)(2,29) = 0.026; | |
1768 | (*t)(0,30) = 2.000; (*t)(1,30) = -0.008; (*t)(2,30) = 0.026; | |
1769 | (*t)(0,31) = 2.100; (*t)(1,31) = -0.008; (*t)(2,31) = 0.024; | |
1770 | (*t)(0,32) = 2.200; (*t)(1,32) = -0.006; (*t)(2,32) = 0.024; | |
1771 | (*t)(0,33) = 2.300; (*t)(1,33) = -0.004; (*t)(2,33) = 0.024; | |
1772 | (*t)(0,34) = 2.400; (*t)(1,34) = -0.004; (*t)(2,34) = 0.024; | |
1773 | (*t)(0,35) = 2.500; (*t)(1,35) = -0.002; (*t)(2,35) = 0.024; | |
1774 | (*t)(0,36) = 2.600; (*t)(1,36) = -0.002; (*t)(2,36) = 0.024; | |
1775 | (*t)(0,37) = 2.700; (*t)(1,37) = 0.000; (*t)(2,37) = 0.024; | |
1776 | (*t)(0,38) = 2.800; (*t)(1,38) = 0.000; (*t)(2,38) = 0.026; | |
1777 | (*t)(0,39) = 2.900; (*t)(1,39) = 0.000; (*t)(2,39) = 0.024; | |
1778 | (*t)(0,40) = 3.000; (*t)(1,40) = 0.002; (*t)(2,40) = 0.026; | |
1779 | (*t)(0,41) = 3.100; (*t)(1,41) = 0.002; (*t)(2,41) = 0.026; | |
1780 | (*t)(0,42) = 3.200; (*t)(1,42) = 0.002; (*t)(2,42) = 0.026; | |
1781 | (*t)(0,43) = 3.300; (*t)(1,43) = 0.002; (*t)(2,43) = 0.026; | |
1782 | (*t)(0,44) = 3.400; (*t)(1,44) = 0.002; (*t)(2,44) = 0.026; | |
1783 | (*t)(0,45) = 3.500; (*t)(1,45) = 0.002; (*t)(2,45) = 0.026; | |
1784 | (*t)(0,46) = 3.600; (*t)(1,46) = 0.002; (*t)(2,46) = 0.026; | |
1785 | (*t)(0,47) = 3.700; (*t)(1,47) = 0.002; (*t)(2,47) = 0.026; | |
1786 | (*t)(0,48) = 3.800; (*t)(1,48) = 0.002; (*t)(2,48) = 0.026; | |
1787 | (*t)(0,49) = 3.900; (*t)(1,49) = 0.004; (*t)(2,49) = 0.024; | |
1788 | (*t)(0,50) = 4.000; (*t)(1,50) = 0.004; (*t)(2,50) = 0.026; | |
1789 | (*t)(0,51) = 4.100; (*t)(1,51) = 0.004; (*t)(2,51) = 0.026; | |
1790 | (*t)(0,52) = 4.200; (*t)(1,52) = 0.004; (*t)(2,52) = 0.024; | |
1791 | (*t)(0,53) = 4.300; (*t)(1,53) = 0.006; (*t)(2,53) = 0.024; | |
1792 | (*t)(0,54) = 4.400; (*t)(1,54) = 0.000; (*t)(2,54) = 0.000; | |
1793 | (*t)(0,55) = 4.500; (*t)(1,55) = 0.000; (*t)(2,55) = 0.000; | |
1794 | (*t)(0,56) = 4.600; (*t)(1,56) = 0.000; (*t)(2,56) = 0.000; | |
1795 | (*t)(0,57) = 4.700; (*t)(1,57) = 0.000; (*t)(2,57) = 0.000; | |
1796 | (*t)(0,58) = 4.800; (*t)(1,58) = 0.000; (*t)(2,58) = 0.000; | |
1797 | (*t)(0,59) = 4.900; (*t)(1,59) = 0.000; (*t)(2,59) = 0.000; | |
1798 | (*t)(0,60) = 5.900; (*t)(1,60) = 0.000; (*t)(2,60) = 0.000; | |
32b846cd | 1799 | } |
1800 | else | |
2b1eaa10 | 1801 | if (fParticleID==AliPID::kProton) |
32b846cd | 1802 | { |
a0241c3a | 1803 | //TOF protons, 0.9 purity |
1804 | t = new TMatrixF(3,61); | |
d79d61fb | 1805 | (*t)(0,0) = 0.000; (*t)(1,0) = 0.000; (*t)(2,0) = 0.000; |
1806 | (*t)(0,1) = 0.050; (*t)(1,1) = 0.000; (*t)(2,1) = 0.000; | |
1807 | (*t)(0,2) = 0.100; (*t)(1,2) = 0.000; (*t)(2,2) = 0.000; | |
1808 | (*t)(0,3) = 0.150; (*t)(1,3) = 0.000; (*t)(2,3) = 0.000; | |
1a80f9f6 | 1809 | (*t)(0,4) = 0.200; (*t)(1,4) = -0.07; (*t)(2,4) = 0.07; |
1810 | (*t)(0,5) = 0.200; (*t)(1,5) = -0.07; (*t)(2,5) = 0.07; | |
1811 | (*t)(0,6) = 0.200; (*t)(1,6) = -0.07; (*t)(2,6) = 0.07; | |
1812 | (*t)(0,7) = 0.200; (*t)(1,7) = -0.07; (*t)(2,7) = 0.07; | |
1813 | (*t)(0,8) = 0.200; (*t)(1,8) = -0.07; (*t)(2,8) = 0.07; | |
1814 | (*t)(0,9) = 0.200; (*t)(1,9) = -0.07; (*t)(2,9) = 0.07; | |
1815 | (*t)(0,10) = 0.200; (*t)(1,10) = -0.07; (*t)(2,10) = 0.07; | |
1816 | (*t)(0,11) = 0.200; (*t)(1,11) = -0.07; (*t)(2,11) = 0.07; | |
1817 | (*t)(0,12) = 0.200; (*t)(1,12) = -0.07; (*t)(2,12) = 0.07; | |
1818 | (*t)(0,13) = 0.200; (*t)(1,13) = -0.07; (*t)(2,13) = 0.07; | |
1819 | (*t)(0,14) = 0.200; (*t)(1,14) = -0.07; (*t)(2,14) = 0.07; | |
1820 | (*t)(0,15) = 0.200; (*t)(1,15) = -0.07; (*t)(2,15) = 0.07; | |
1821 | (*t)(0,16) = 0.200; (*t)(1,16) = -0.07; (*t)(2,16) = 0.07; | |
d79d61fb | 1822 | (*t)(0,17) = 0.850; (*t)(1,17) = -0.070; (*t)(2,17) = 0.070; |
1823 | (*t)(0,18) = 0.900; (*t)(1,18) = -0.072; (*t)(2,18) = 0.072; | |
1824 | (*t)(0,19) = 0.950; (*t)(1,19) = -0.072; (*t)(2,19) = 0.072; | |
1825 | (*t)(0,20) = 1.000; (*t)(1,20) = -0.074; (*t)(2,20) = 0.074; | |
1826 | (*t)(0,21) = 1.100; (*t)(1,21) = -0.032; (*t)(2,21) = 0.032; | |
1827 | (*t)(0,22) = 1.200; (*t)(1,22) = -0.026; (*t)(2,22) = 0.026; | |
1828 | (*t)(0,23) = 1.300; (*t)(1,23) = -0.026; (*t)(2,23) = 0.026; | |
1829 | (*t)(0,24) = 1.400; (*t)(1,24) = -0.024; (*t)(2,24) = 0.024; | |
1830 | (*t)(0,25) = 1.500; (*t)(1,25) = -0.024; (*t)(2,25) = 0.024; | |
1831 | (*t)(0,26) = 1.600; (*t)(1,26) = -0.026; (*t)(2,26) = 0.026; | |
1832 | (*t)(0,27) = 1.700; (*t)(1,27) = -0.026; (*t)(2,27) = 0.026; | |
1833 | (*t)(0,28) = 1.800; (*t)(1,28) = -0.026; (*t)(2,28) = 0.026; | |
1834 | (*t)(0,29) = 1.900; (*t)(1,29) = -0.026; (*t)(2,29) = 0.026; | |
1835 | (*t)(0,30) = 2.000; (*t)(1,30) = -0.026; (*t)(2,30) = 0.026; | |
1836 | (*t)(0,31) = 2.100; (*t)(1,31) = -0.026; (*t)(2,31) = 0.026; | |
1837 | (*t)(0,32) = 2.200; (*t)(1,32) = -0.026; (*t)(2,32) = 0.024; | |
1838 | (*t)(0,33) = 2.300; (*t)(1,33) = -0.028; (*t)(2,33) = 0.022; | |
1839 | (*t)(0,34) = 2.400; (*t)(1,34) = -0.028; (*t)(2,34) = 0.020; | |
1840 | (*t)(0,35) = 2.500; (*t)(1,35) = -0.028; (*t)(2,35) = 0.018; | |
1841 | (*t)(0,36) = 2.600; (*t)(1,36) = -0.028; (*t)(2,36) = 0.016; | |
1842 | (*t)(0,37) = 2.700; (*t)(1,37) = -0.028; (*t)(2,37) = 0.016; | |
1843 | (*t)(0,38) = 2.800; (*t)(1,38) = -0.030; (*t)(2,38) = 0.014; | |
1844 | (*t)(0,39) = 2.900; (*t)(1,39) = -0.030; (*t)(2,39) = 0.012; | |
1845 | (*t)(0,40) = 3.000; (*t)(1,40) = -0.030; (*t)(2,40) = 0.012; | |
1846 | (*t)(0,41) = 3.100; (*t)(1,41) = -0.030; (*t)(2,41) = 0.010; | |
1847 | (*t)(0,42) = 3.200; (*t)(1,42) = -0.030; (*t)(2,42) = 0.010; | |
1848 | (*t)(0,43) = 3.300; (*t)(1,43) = -0.030; (*t)(2,43) = 0.010; | |
1849 | (*t)(0,44) = 3.400; (*t)(1,44) = -0.030; (*t)(2,44) = 0.008; | |
1850 | (*t)(0,45) = 3.500; (*t)(1,45) = -0.030; (*t)(2,45) = 0.008; | |
1851 | (*t)(0,46) = 3.600; (*t)(1,46) = -0.030; (*t)(2,46) = 0.008; | |
1852 | (*t)(0,47) = 3.700; (*t)(1,47) = -0.030; (*t)(2,47) = 0.006; | |
1853 | (*t)(0,48) = 3.800; (*t)(1,48) = -0.030; (*t)(2,48) = 0.006; | |
1854 | (*t)(0,49) = 3.900; (*t)(1,49) = -0.030; (*t)(2,49) = 0.006; | |
1855 | (*t)(0,50) = 4.000; (*t)(1,50) = -0.028; (*t)(2,50) = 0.004; | |
1856 | (*t)(0,51) = 4.100; (*t)(1,51) = -0.030; (*t)(2,51) = 0.004; | |
1857 | (*t)(0,52) = 4.200; (*t)(1,52) = -0.030; (*t)(2,52) = 0.004; | |
1858 | (*t)(0,53) = 4.300; (*t)(1,53) = -0.028; (*t)(2,53) = 0.002; | |
1859 | (*t)(0,54) = 4.400; (*t)(1,54) = -0.030; (*t)(2,54) = 0.002; | |
1860 | (*t)(0,55) = 4.500; (*t)(1,55) = -0.028; (*t)(2,55) = 0.002; | |
1861 | (*t)(0,56) = 4.600; (*t)(1,56) = -0.028; (*t)(2,56) = 0.002; | |
1862 | (*t)(0,57) = 4.700; (*t)(1,57) = -0.028; (*t)(2,57) = 0.000; | |
1863 | (*t)(0,58) = 4.800; (*t)(1,58) = -0.028; (*t)(2,58) = 0.002; | |
1864 | (*t)(0,59) = 4.900; (*t)(1,59) = 0.000; (*t)(2,59) = 0.000; | |
1865 | (*t)(0,60) = 5.900; (*t)(1,60) = 0.000; (*t)(2,60) = 0.000; | |
32b846cd | 1866 | } |
1867 | else | |
2b1eaa10 | 1868 | if (fParticleID==AliPID::kKaon) |
32b846cd | 1869 | { |
a0241c3a | 1870 | //TOF kaons, 0.9 purity |
1871 | t = new TMatrixF(3,61); | |
d79d61fb | 1872 | (*t)(0,0) = 0.000; (*t)(1,0) = 0.000; (*t)(2,0) = 0.000; |
1873 | (*t)(0,1) = 0.050; (*t)(1,1) = 0.000; (*t)(2,1) = 0.000; | |
1874 | (*t)(0,2) = 0.100; (*t)(1,2) = 0.000; (*t)(2,2) = 0.000; | |
1875 | (*t)(0,3) = 0.150; (*t)(1,3) = 0.000; (*t)(2,3) = 0.000; | |
1a80f9f6 | 1876 | (*t)(0,4) = 0.200; (*t)(1,4) = -0.05; (*t)(2,4) = 0.05; |
1877 | (*t)(0,5) = 0.200; (*t)(1,5) = -0.05; (*t)(2,5) = 0.05; | |
1878 | (*t)(0,6) = 0.200; (*t)(1,6) = -0.05; (*t)(2,6) = 0.05; | |
1879 | (*t)(0,7) = 0.200; (*t)(1,7) = -0.05; (*t)(2,7) = 0.05; | |
1880 | (*t)(0,8) = 0.200; (*t)(1,8) = -0.05; (*t)(2,8) = 0.05; | |
1881 | (*t)(0,9) = 0.200; (*t)(1,9) = -0.05; (*t)(2,9) = 0.05; | |
1882 | (*t)(0,10) = 0.200; (*t)(1,10) = -0.05; (*t)(2,10) = 0.05; | |
d79d61fb | 1883 | (*t)(0,11) = 0.550; (*t)(1,11) = -0.026; (*t)(2,11) = 0.026; |
1884 | (*t)(0,12) = 0.600; (*t)(1,12) = -0.026; (*t)(2,12) = 0.026; | |
1885 | (*t)(0,13) = 0.650; (*t)(1,13) = -0.026; (*t)(2,13) = 0.026; | |
1886 | (*t)(0,14) = 0.700; (*t)(1,14) = -0.026; (*t)(2,14) = 0.026; | |
1887 | (*t)(0,15) = 0.750; (*t)(1,15) = -0.026; (*t)(2,15) = 0.026; | |
1888 | (*t)(0,16) = 0.800; (*t)(1,16) = -0.026; (*t)(2,16) = 0.026; | |
1889 | (*t)(0,17) = 0.850; (*t)(1,17) = -0.024; (*t)(2,17) = 0.024; | |
1890 | (*t)(0,18) = 0.900; (*t)(1,18) = -0.024; (*t)(2,18) = 0.024; | |
1891 | (*t)(0,19) = 0.950; (*t)(1,19) = -0.024; (*t)(2,19) = 0.024; | |
1892 | (*t)(0,20) = 1.000; (*t)(1,20) = -0.024; (*t)(2,20) = 0.024; | |
1893 | (*t)(0,21) = 1.100; (*t)(1,21) = -0.024; (*t)(2,21) = 0.024; | |
1894 | (*t)(0,22) = 1.200; (*t)(1,22) = -0.024; (*t)(2,22) = 0.022; | |
1895 | (*t)(0,23) = 1.300; (*t)(1,23) = -0.024; (*t)(2,23) = 0.020; | |
1896 | (*t)(0,24) = 1.400; (*t)(1,24) = -0.026; (*t)(2,24) = 0.016; | |
1897 | (*t)(0,25) = 1.500; (*t)(1,25) = -0.028; (*t)(2,25) = 0.014; | |
1898 | (*t)(0,26) = 1.600; (*t)(1,26) = -0.028; (*t)(2,26) = 0.012; | |
1899 | (*t)(0,27) = 1.700; (*t)(1,27) = -0.028; (*t)(2,27) = 0.010; | |
1900 | (*t)(0,28) = 1.800; (*t)(1,28) = -0.028; (*t)(2,28) = 0.010; | |
1901 | (*t)(0,29) = 1.900; (*t)(1,29) = -0.028; (*t)(2,29) = 0.008; | |
1902 | (*t)(0,30) = 2.000; (*t)(1,30) = -0.028; (*t)(2,30) = 0.006; | |
1903 | (*t)(0,31) = 2.100; (*t)(1,31) = -0.026; (*t)(2,31) = 0.006; | |
1904 | (*t)(0,32) = 2.200; (*t)(1,32) = -0.024; (*t)(2,32) = 0.004; | |
1905 | (*t)(0,33) = 2.300; (*t)(1,33) = -0.020; (*t)(2,33) = 0.002; | |
1906 | (*t)(0,34) = 2.400; (*t)(1,34) = -0.020; (*t)(2,34) = 0.002; | |
1907 | (*t)(0,35) = 2.500; (*t)(1,35) = -0.018; (*t)(2,35) = 0.000; | |
1908 | (*t)(0,36) = 2.600; (*t)(1,36) = -0.016; (*t)(2,36) = 0.000; | |
1909 | (*t)(0,37) = 2.700; (*t)(1,37) = -0.014; (*t)(2,37) = -0.002; | |
1910 | (*t)(0,38) = 2.800; (*t)(1,38) = -0.014; (*t)(2,38) = -0.004; | |
1911 | (*t)(0,39) = 2.900; (*t)(1,39) = -0.012; (*t)(2,39) = -0.004; | |
1912 | (*t)(0,40) = 3.000; (*t)(1,40) = -0.010; (*t)(2,40) = -0.006; | |
1913 | (*t)(0,41) = 3.100; (*t)(1,41) = 0.000; (*t)(2,41) = 0.000; | |
1914 | (*t)(0,42) = 3.200; (*t)(1,42) = 0.000; (*t)(2,42) = 0.000; | |
1915 | (*t)(0,43) = 3.300; (*t)(1,43) = 0.000; (*t)(2,43) = 0.000; | |
1916 | (*t)(0,44) = 3.400; (*t)(1,44) = 0.000; (*t)(2,44) = 0.000; | |
1917 | (*t)(0,45) = 3.500; (*t)(1,45) = 0.000; (*t)(2,45) = 0.000; | |
1918 | (*t)(0,46) = 3.600; (*t)(1,46) = 0.000; (*t)(2,46) = 0.000; | |
1919 | (*t)(0,47) = 3.700; (*t)(1,47) = 0.000; (*t)(2,47) = 0.000; | |
1920 | (*t)(0,48) = 3.800; (*t)(1,48) = 0.000; (*t)(2,48) = 0.000; | |
1921 | (*t)(0,49) = 3.900; (*t)(1,49) = 0.000; (*t)(2,49) = 0.000; | |
1922 | (*t)(0,50) = 4.000; (*t)(1,50) = 0.000; (*t)(2,50) = 0.000; | |
1923 | (*t)(0,51) = 4.100; (*t)(1,51) = 0.000; (*t)(2,51) = 0.000; | |
1924 | (*t)(0,52) = 4.200; (*t)(1,52) = 0.000; (*t)(2,52) = 0.000; | |
1925 | (*t)(0,53) = 4.300; (*t)(1,53) = 0.000; (*t)(2,53) = 0.000; | |
1926 | (*t)(0,54) = 4.400; (*t)(1,54) = 0.000; (*t)(2,54) = 0.000; | |
1927 | (*t)(0,55) = 4.500; (*t)(1,55) = 0.000; (*t)(2,55) = 0.000; | |
1928 | (*t)(0,56) = 4.600; (*t)(1,56) = 0.000; (*t)(2,56) = 0.000; | |
1929 | (*t)(0,57) = 4.700; (*t)(1,57) = 0.000; (*t)(2,57) = 0.000; | |
1930 | (*t)(0,58) = 4.800; (*t)(1,58) = 0.000; (*t)(2,58) = 0.000; | |
1931 | (*t)(0,59) = 4.900; (*t)(1,59) = 0.000; (*t)(2,59) = 0.000; | |
1932 | (*t)(0,60) = 5.900; (*t)(1,60) = 0.000; (*t)(2,60) = 0.000; | |
32b846cd | 1933 | } |
d79d61fb | 1934 | delete fTOFpidCuts; |
32b846cd | 1935 | fTOFpidCuts=t; |
1936 | } | |
1937 | } | |
3abf7ecc | 1938 | |
cd62a2a8 | 1939 | //----------------------------------------------------------------------- |
1940 | Bool_t AliFlowTrackCuts::PassesTPCbayesianCut(const AliESDtrack* track) | |
1941 | { | |
1942 | //cut on TPC bayesian pid | |
1943 | //TODO: maybe join all bayesian methods, make GetESDPdg aware of pid mode selected | |
1944 | //if (! fAllowTOFmismatchFlag) {if (track->GetStatus() & AliESDtrack::kTOFmismatch) return kFALSE;} | |
1945 | ||
1946 | //Bool_t statusMatchingHard = TPCTOFagree(track); | |
1947 | //if (fRequireStrictTOFTPCagreement && (!statusMatchingHard)) | |
1948 | // return kFALSE; | |
1949 | ||
1950 | Int_t pdg = GetESDPdg(track,"bayesianTPC"); | |
1951 | // printf("pdg set to %i\n",pdg); | |
1952 | ||
1953 | Int_t pid = 0; | |
1954 | Float_t prob = 0; | |
1955 | switch (fParticleID) | |
1956 | { | |
1957 | case AliPID::kPion: | |
1958 | pid=211; | |
1959 | prob = fProbBayes[2]; | |
1960 | break; | |
1961 | case AliPID::kKaon: | |
1962 | pid=321; | |
1963 | prob = fProbBayes[3]; | |
1964 | break; | |
1965 | case AliPID::kProton: | |
1966 | pid=2212; | |
1967 | prob = fProbBayes[4]; | |
1968 | break; | |
1969 | case AliPID::kElectron: | |
1970 | pid=-11; | |
1971 | prob = fProbBayes[0]; | |
1972 | break; | |
1973 | default: | |
1974 | return kFALSE; | |
1975 | } | |
1976 | ||
1977 | if(TMath::Abs(pdg) == TMath::Abs(pid) && prob > fParticleProbability) | |
1978 | { | |
1979 | if(!fCutCharge) | |
1980 | return kTRUE; | |
1981 | else if (fCutCharge && fCharge * track->GetSign() > 0) | |
1982 | return kTRUE; | |
1983 | } | |
1984 | return kFALSE; | |
1985 | } | |
1986 | ||
3abf7ecc | 1987 | //----------------------------------------------------------------------- |
1988 | // part added by F. Noferini (some methods) | |
cd62a2a8 | 1989 | Bool_t AliFlowTrackCuts::PassesTOFbayesianCut(const AliESDtrack* track) |
875ee12a | 1990 | { |
1991 | ||
6a043318 | 1992 | Bool_t goodtrack = (track->GetStatus() & AliESDtrack::kTOFpid) && |
875ee12a | 1993 | (track->GetTOFsignal() > 12000) && |
1994 | (track->GetTOFsignal() < 100000) && | |
1995 | (track->GetIntegratedLength() > 365); | |
3abf7ecc | 1996 | |
3abf7ecc | 1997 | if (! goodtrack) |
1998 | return kFALSE; | |
1999 | ||
6a043318 | 2000 | if (! fAllowTOFmismatchFlag) {if (track->GetStatus() & AliESDtrack::kTOFmismatch) return kFALSE;} |
2001 | ||
875ee12a | 2002 | Bool_t statusMatchingHard = TPCTOFagree(track); |
2003 | if (fRequireStrictTOFTPCagreement && (!statusMatchingHard)) | |
2004 | return kFALSE; | |
2005 | ||
3abf7ecc | 2006 | Int_t pdg = GetESDPdg(track,"bayesianALL"); |
2007 | // printf("pdg set to %i\n",pdg); | |
2008 | ||
2009 | Int_t pid = 0; | |
2010 | Float_t prob = 0; | |
2b1eaa10 | 2011 | switch (fParticleID) |
3abf7ecc | 2012 | { |
2013 | case AliPID::kPion: | |
2014 | pid=211; | |
2015 | prob = fProbBayes[2]; | |
2016 | break; | |
2017 | case AliPID::kKaon: | |
2018 | pid=321; | |
2019 | prob = fProbBayes[3]; | |
2020 | break; | |
2021 | case AliPID::kProton: | |
2022 | pid=2212; | |
2023 | prob = fProbBayes[4]; | |
2024 | break; | |
2025 | case AliPID::kElectron: | |
2026 | pid=-11; | |
2027 | prob = fProbBayes[0]; | |
2028 | break; | |
2029 | default: | |
2030 | return kFALSE; | |
2031 | } | |
2032 | ||
2033 | // printf("pt = %f -- all prob = [%4.2f,%4.2f,%4.2f,%4.2f,%4.2f] -- prob = %f\n",track->Pt(),fProbBayes[0],fProbBayes[1],fProbBayes[2],fProbBayes[3],fProbBayes[4],prob); | |
875ee12a | 2034 | if(TMath::Abs(pdg) == TMath::Abs(pid) && prob > fParticleProbability){ |
3abf7ecc | 2035 | if(!fCutCharge) |
2036 | return kTRUE; | |
2037 | else if (fCutCharge && fCharge * track->GetSign() > 0) | |
2038 | return kTRUE; | |
2039 | } | |
2040 | return kFALSE; | |
2041 | } | |
875ee12a | 2042 | |
3abf7ecc | 2043 | //----------------------------------------------------------------------- |
cd62a2a8 | 2044 | Int_t AliFlowTrackCuts::GetESDPdg(const AliESDtrack *track,Option_t *option,Int_t ipart,Float_t cPi,Float_t cKa,Float_t cPr) |
1a80f9f6 | 2045 | { |
2046 | //Get ESD Pdg | |
3abf7ecc | 2047 | Int_t pdg = 0; |
2048 | Int_t pdgvalues[5] = {-11,-13,211,321,2212}; | |
2049 | Float_t mass[5] = {5.10998909999999971e-04,1.05658000000000002e-01,1.39570000000000000e-01,4.93676999999999977e-01,9.38271999999999995e-01}; | |
2050 | ||
2051 | if(strstr(option,"bayesianTOF")){ // Bayesian TOF PID | |
2052 | Double_t c[5]={0.01, 0.01, 0.85, 0.1, 0.05}; | |
2053 | Double_t rcc=0.; | |
2054 | ||
2055 | Float_t pt = track->Pt(); | |
2056 | ||
2057 | Int_t iptesd = 0; | |
1a80f9f6 | 2058 | while(pt > fBinLimitPID[iptesd] && iptesd < fgkPIDptBin-1) iptesd++; |
3abf7ecc | 2059 | |
2060 | if(cPi < 0){ | |
2061 | c[0] = fC[iptesd][0]; | |
2062 | c[1] = fC[iptesd][1]; | |
2063 | c[2] = fC[iptesd][2]; | |
2064 | c[3] = fC[iptesd][3]; | |
2065 | c[4] = fC[iptesd][4]; | |
2066 | } | |
2067 | else{ | |
2068 | c[0] = 0.0; | |
2069 | c[1] = 0.0; | |
2070 | c[2] = cPi; | |
2071 | c[3] = cKa; | |
2072 | c[4] = cPr; | |
2073 | } | |
2074 | ||
2075 | Double_t r1[10]; track->GetTOFpid(r1); | |
2076 | ||
2077 | Int_t i; | |
2078 | for (i=0; i<5; i++) rcc+=(c[i]*r1[i]); | |
2079 | ||
2080 | Double_t w[10]; | |
2081 | for (i=0; i<5; i++){ | |
2082 | w[i]=c[i]*r1[i]/rcc; | |
2083 | fProbBayes[i] = w[i]; | |
2084 | } | |
2085 | if (w[2]>=w[3] && w[2]>=w[4] && w[2]>=w[1] && w[2]>=w[0]) {//pion | |
2086 | pdg = 211*Int_t(track->GetSign()); | |
2087 | } | |
2088 | else if (w[4]>=w[3] && w[4]>=w[1] && w[4]>=w[0]) {//proton | |
2089 | pdg = 2212*Int_t(track->GetSign()); | |
2090 | } | |
2091 | else if (w[3]>=w[1] && w[3]>=w[0]){//kaon | |
2092 | pdg = 321*Int_t(track->GetSign()); | |
2093 | } | |
2094 | else if (w[0]>=w[1]) { //electrons | |
2095 | pdg = -11*Int_t(track->GetSign()); | |
2096 | } | |
2097 | else{ // muon | |
2098 | pdg = -13*Int_t(track->GetSign()); | |
2099 | } | |
2100 | } | |
2101 | ||
2102 | else if(strstr(option,"bayesianTPC")){ // Bayesian TPC PID | |
2103 | Double_t c[5]={0.01, 0.01, 0.85, 0.1, 0.05}; | |
2104 | Double_t rcc=0.; | |
2105 | ||
2106 | Float_t pt = track->Pt(); | |
2107 | ||
2108 | Int_t iptesd = 0; | |
1a80f9f6 | 2109 | while(pt > fBinLimitPID[iptesd] && iptesd < fgkPIDptBin-1) iptesd++; |
3abf7ecc | 2110 | |
2111 | if(cPi < 0){ | |
2112 | c[0] = fC[iptesd][0]; | |
2113 | c[1] = fC[iptesd][1]; | |
2114 | c[2] = fC[iptesd][2]; | |
2115 | c[3] = fC[iptesd][3]; | |
2116 | c[4] = fC[iptesd][4]; | |
2117 | } | |
2118 | else{ | |
2119 | c[0] = 0.0; | |
2120 | c[1] = 0.0; | |
2121 | c[2] = cPi; | |
2122 | c[3] = cKa; | |
2123 | c[4] = cPr; | |
2124 | } | |
2125 | ||
2126 | Double_t r1[10]; track->GetTPCpid(r1); | |
2127 | ||
2128 | Int_t i; | |
2129 | for (i=0; i<5; i++) rcc+=(c[i]*r1[i]); | |
2130 | ||
2131 | Double_t w[10]; | |
2132 | for (i=0; i<5; i++){ | |
2133 | w[i]=c[i]*r1[i]/rcc; | |
2134 | fProbBayes[i] = w[i]; | |
2135 | } | |
2136 | if (w[2]>=w[3] && w[2]>=w[4] && w[2]>=w[1] && w[2]>=w[0]) {//pion | |
2137 | pdg = 211*Int_t(track->GetSign()); | |
2138 | } | |
2139 | else if (w[4]>=w[3] && w[4]>=w[1] && w[4]>=w[0]) {//proton | |
2140 | pdg = 2212*Int_t(track->GetSign()); | |
2141 | } | |
2142 | else if (w[3]>=w[1] && w[3]>=w[0]){//kaon | |
2143 | pdg = 321*Int_t(track->GetSign()); | |
2144 | } | |
2145 | else if (w[0]>=w[1]) { //electrons | |
2146 | pdg = -11*Int_t(track->GetSign()); | |
2147 | } | |
2148 | else{ // muon | |
2149 | pdg = -13*Int_t(track->GetSign()); | |
2150 | } | |
2151 | } | |
2152 | ||
2153 | else if(strstr(option,"bayesianALL")){ | |
2154 | Double_t c[5]={0.01, 0.01, 0.85, 0.1, 0.05}; | |
2155 | Double_t rcc=0.; | |
2156 | ||
2157 | Float_t pt = track->Pt(); | |
2158 | ||
2159 | Int_t iptesd = 0; | |
1a80f9f6 | 2160 | while(pt > fBinLimitPID[iptesd] && iptesd < fgkPIDptBin-1) iptesd++; |
3abf7ecc | 2161 | |
2162 | if(cPi < 0){ | |
2163 | c[0] = fC[iptesd][0]; | |
2164 | c[1] = fC[iptesd][1]; | |
2165 | c[2] = fC[iptesd][2]; | |
2166 | c[3] = fC[iptesd][3]; | |
2167 | c[4] = fC[iptesd][4]; | |
2168 | } | |
2169 | else{ | |
2170 | c[0] = 0.0; | |
2171 | c[1] = 0.0; | |
2172 | c[2] = cPi; | |
2173 | c[3] = cKa; | |
2174 | c[4] = cPr; | |
2175 | } | |
2176 | ||
2177 | Double_t r1[10]; track->GetTOFpid(r1); | |
2178 | Double_t r2[10]; track->GetTPCpid(r2); | |
2179 | ||
875ee12a | 2180 | r1[0] = TMath::Min(r1[2],r1[0]); |
2181 | r1[1] = TMath::Min(r1[2],r1[1]); | |
2182 | ||
3abf7ecc | 2183 | Int_t i; |
2184 | for (i=0; i<5; i++) rcc+=(c[i]*r1[i]*r2[i]); | |
2185 | ||
2186 | ||
2187 | Double_t w[10]; | |
2188 | for (i=0; i<5; i++){ | |
2189 | w[i]=c[i]*r1[i]*r2[i]/rcc; | |
2190 | fProbBayes[i] = w[i]; | |
2191 | } | |
2192 | ||
2193 | if (w[2]>=w[3] && w[2]>=w[4] && w[2]>=w[1] && w[2]>=w[0]) {//pion | |
2194 | pdg = 211*Int_t(track->GetSign()); | |
2195 | } | |
2196 | else if (w[4]>=w[3] && w[4]>=w[1] && w[4]>=w[0]) {//proton | |
2197 | pdg = 2212*Int_t(track->GetSign()); | |
2198 | } | |
2199 | else if (w[3]>=w[1] && w[3]>=w[0]){//kaon | |
2200 | pdg = 321*Int_t(track->GetSign()); | |
2201 | } | |
2202 | else if (w[0]>=w[1]) { //electrons | |
2203 | pdg = -11*Int_t(track->GetSign()); | |
2204 | } | |
2205 | else{ // muon | |
2206 | pdg = -13*Int_t(track->GetSign()); | |
2207 | } | |
2208 | } | |
2209 | ||
2210 | else if(strstr(option,"sigmacutTOF")){ | |
2211 | printf("PID not implemented yet: %s\nNO PID!!!!\n",option); | |
2212 | Float_t p = track->P(); | |
2213 | ||
2214 | // Take expected times | |
2215 | Double_t exptimes[5]; | |
2216 | track->GetIntegratedTimes(exptimes); | |
2217 | ||
2218 | // Take resolution for TOF response | |
aab6527a | 2219 | // like fESDpid.GetTOFResponse().GetExpectedSigma(p, exptimes[ipart], mass[ipart]); |
2220 | Float_t resolution = fESDpid.GetTOFResponse().GetExpectedSigma(p, exptimes[ipart], mass[ipart]); | |
3abf7ecc | 2221 | |
2222 | if(TMath::Abs(exptimes[ipart] - track->GetTOFsignal()) < 3 * resolution){ | |
2223 | pdg = pdgvalues[ipart] * Int_t(track->GetSign()); | |
2224 | } | |
2225 | } | |
2226 | ||
2227 | else{ | |
2228 | printf("Invalid PID option: %s\nNO PID!!!!\n",option); | |
2229 | } | |
2230 | ||
2231 | return pdg; | |
2232 | } | |
875ee12a | 2233 | |
3abf7ecc | 2234 | //----------------------------------------------------------------------- |
875ee12a | 2235 | void AliFlowTrackCuts::SetPriors(Float_t centrCur){ |
2236 | fBinLimitPID[0] = 0.300000; | |
2237 | fBinLimitPID[1] = 0.400000; | |
2238 | fBinLimitPID[2] = 0.500000; | |
2239 | fBinLimitPID[3] = 0.600000; | |
2240 | fBinLimitPID[4] = 0.700000; | |
2241 | fBinLimitPID[5] = 0.800000; | |
2242 | fBinLimitPID[6] = 0.900000; | |
2243 | fBinLimitPID[7] = 1.000000; | |
2244 | fBinLimitPID[8] = 1.200000; | |
2245 | fBinLimitPID[9] = 1.400000; | |
2246 | fBinLimitPID[10] = 1.600000; | |
2247 | fBinLimitPID[11] = 1.800000; | |
2248 | fBinLimitPID[12] = 2.000000; | |
2249 | fBinLimitPID[13] = 2.200000; | |
2250 | fBinLimitPID[14] = 2.400000; | |
2251 | fBinLimitPID[15] = 2.600000; | |
2252 | fBinLimitPID[16] = 2.800000; | |
2253 | fBinLimitPID[17] = 3.000000; | |
2254 | ||
2255 | // 0-10% | |
2256 | if(centrCur < 10){ | |
2257 | fC[0][0] = 0.005; | |
2258 | fC[0][1] = 0.005; | |
2259 | fC[0][2] = 1.0000; | |
2260 | fC[0][3] = 0.0010; | |
2261 | fC[0][4] = 0.0010; | |
2262 | ||
2263 | fC[1][0] = 0.005; | |
2264 | fC[1][1] = 0.005; | |
2265 | fC[1][2] = 1.0000; | |
2266 | fC[1][3] = 0.0168; | |
2267 | fC[1][4] = 0.0122; | |
2268 | ||
2269 | fC[2][0] = 0.005; | |
2270 | fC[2][1] = 0.005; | |
2271 | fC[2][2] = 1.0000; | |
2272 | fC[2][3] = 0.0272; | |
2273 | fC[2][4] = 0.0070; | |
2274 | ||
2275 | fC[3][0] = 0.005; | |
2276 | fC[3][1] = 0.005; | |
2277 | fC[3][2] = 1.0000; | |
2278 | fC[3][3] = 0.0562; | |
2279 | fC[3][4] = 0.0258; | |
2280 | ||
2281 | fC[4][0] = 0.005; | |
2282 | fC[4][1] = 0.005; | |
2283 | fC[4][2] = 1.0000; | |
2284 | fC[4][3] = 0.0861; | |
2285 | fC[4][4] = 0.0496; | |
2286 | ||
2287 | fC[5][0] = 0.005; | |
2288 | fC[5][1] = 0.005; | |
2289 | fC[5][2] = 1.0000; | |
2290 | fC[5][3] = 0.1168; | |
2291 | fC[5][4] = 0.0740; | |
2292 | ||
2293 | fC[6][0] = 0.005; | |
2294 | fC[6][1] = 0.005; | |
2295 | fC[6][2] = 1.0000; | |
2296 | fC[6][3] = 0.1476; | |
2297 | fC[6][4] = 0.0998; | |
2298 | ||
2299 | fC[7][0] = 0.005; | |
2300 | fC[7][1] = 0.005; | |
2301 | fC[7][2] = 1.0000; | |
2302 | fC[7][3] = 0.1810; | |
2303 | fC[7][4] = 0.1296; | |
2304 | ||
2305 | fC[8][0] = 0.005; | |
2306 | fC[8][1] = 0.005; | |
2307 | fC[8][2] = 1.0000; | |
2308 | fC[8][3] = 0.2240; | |
2309 | fC[8][4] = 0.1827; | |
2310 | ||
2311 | fC[9][0] = 0.005; | |
2312 | fC[9][1] = 0.005; | |
2313 | fC[9][2] = 1.0000; | |
2314 | fC[9][3] = 0.2812; | |
2315 | fC[9][4] = 0.2699; | |
2316 | ||
2317 | fC[10][0] = 0.005; | |
2318 | fC[10][1] = 0.005; | |
2319 | fC[10][2] = 1.0000; | |
2320 | fC[10][3] = 0.3328; | |
2321 | fC[10][4] = 0.3714; | |
2322 | ||
2323 | fC[11][0] = 0.005; | |
2324 | fC[11][1] = 0.005; | |
2325 | fC[11][2] = 1.0000; | |
2326 | fC[11][3] = 0.3780; | |
2327 | fC[11][4] = 0.4810; | |
2328 | ||
2329 | fC[12][0] = 0.005; | |
2330 | fC[12][1] = 0.005; | |
2331 | fC[12][2] = 1.0000; | |
2332 | fC[12][3] = 0.4125; | |
2333 | fC[12][4] = 0.5771; | |
2334 | ||
2335 | fC[13][0] = 0.005; | |
2336 | fC[13][1] = 0.005; | |
2337 | fC[13][2] = 1.0000; | |
2338 | fC[13][3] = 0.4486; | |
2339 | fC[13][4] = 0.6799; | |
2340 | ||
2341 | fC[14][0] = 0.005; | |
2342 | fC[14][1] = 0.005; | |
2343 | fC[14][2] = 1.0000; | |
2344 | fC[14][3] = 0.4840; | |
2345 | fC[14][4] = 0.7668; | |
2346 | ||
2347 | fC[15][0] = 0.005; | |
2348 | fC[15][1] = 0.005; | |
2349 | fC[15][2] = 1.0000; | |
2350 | fC[15][3] = 0.4971; | |
2351 | fC[15][4] = 0.8288; | |
2352 | ||
2353 | fC[16][0] = 0.005; | |
2354 | fC[16][1] = 0.005; | |
2355 | fC[16][2] = 1.0000; | |
2356 | fC[16][3] = 0.4956; | |
2357 | fC[16][4] = 0.8653; | |
2358 | ||
2359 | fC[17][0] = 0.005; | |
2360 | fC[17][1] = 0.005; | |
2361 | fC[17][2] = 1.0000; | |
2362 | fC[17][3] = 0.5173; | |
2363 | fC[17][4] = 0.9059; | |
2364 | } | |
2365 | // 10-20% | |
2366 | else if(centrCur < 20){ | |
2367 | fC[0][0] = 0.005; | |
2368 | fC[0][1] = 0.005; | |
2369 | fC[0][2] = 1.0000; | |
2370 | fC[0][3] = 0.0010; | |
2371 | fC[0][4] = 0.0010; | |
2372 | ||
2373 | fC[1][0] = 0.005; | |
2374 | fC[1][1] = 0.005; | |
2375 | fC[1][2] = 1.0000; | |
2376 | fC[1][3] = 0.0132; | |
2377 | fC[1][4] = 0.0088; | |
2378 | ||
2379 | fC[2][0] = 0.005; | |
2380 | fC[2][1] = 0.005; | |
2381 | fC[2][2] = 1.0000; | |
2382 | fC[2][3] = 0.0283; | |
2383 | fC[2][4] = 0.0068; | |
2384 | ||
2385 | fC[3][0] = 0.005; | |
2386 | fC[3][1] = 0.005; | |
2387 | fC[3][2] = 1.0000; | |
2388 | fC[3][3] = 0.0577; | |
2389 | fC[3][4] = 0.0279; | |
2390 | ||
2391 | fC[4][0] = 0.005; | |
2392 | fC[4][1] = 0.005; | |
2393 | fC[4][2] = 1.0000; | |
2394 | fC[4][3] = 0.0884; | |
2395 | fC[4][4] = 0.0534; | |
2396 | ||
2397 | fC[5][0] = 0.005; | |
2398 | fC[5][1] = 0.005; | |
2399 | fC[5][2] = 1.0000; | |
2400 | fC[5][3] = 0.1179; | |
2401 | fC[5][4] = 0.0794; | |
2402 | ||
2403 | fC[6][0] = 0.005; | |
2404 | fC[6][1] = 0.005; | |
2405 | fC[6][2] = 1.0000; | |
2406 | fC[6][3] = 0.1480; | |
2407 | fC[6][4] = 0.1058; | |
2408 | ||
2409 | fC[7][0] = 0.005; | |
2410 | fC[7][1] = 0.005; | |
2411 | fC[7][2] = 1.0000; | |
2412 | fC[7][3] = 0.1807; | |
2413 | fC[7][4] = 0.1366; | |
2414 | ||
2415 | fC[8][0] = 0.005; | |
2416 | fC[8][1] = 0.005; | |
2417 | fC[8][2] = 1.0000; | |
2418 | fC[8][3] = 0.2219; | |
2419 | fC[8][4] = 0.1891; | |
2420 | ||
2421 | fC[9][0] = 0.005; | |
2422 | fC[9][1] = 0.005; | |
2423 | fC[9][2] = 1.0000; | |
2424 | fC[9][3] = 0.2804; | |
2425 | fC[9][4] = 0.2730; | |
2426 | ||
2427 | fC[10][0] = 0.005; | |
2428 | fC[10][1] = 0.005; | |
2429 | fC[10][2] = 1.0000; | |
2430 | fC[10][3] = 0.3283; | |
2431 | fC[10][4] = 0.3660; | |
2432 | ||
2433 | fC[11][0] = 0.005; | |
2434 | fC[11][1] = 0.005; | |
2435 | fC[11][2] = 1.0000; | |
2436 | fC[11][3] = 0.3710; | |
2437 | fC[11][4] = 0.4647; | |
2438 | ||
2439 | fC[12][0] = 0.005; | |
2440 | fC[12][1] = 0.005; | |
2441 | fC[12][2] = 1.0000; | |
2442 | fC[12][3] = 0.4093; | |
2443 | fC[12][4] = 0.5566; | |
2444 | ||
2445 | fC[13][0] = 0.005; | |
2446 | fC[13][1] = 0.005; | |
2447 | fC[13][2] = 1.0000; | |
2448 | fC[13][3] = 0.4302; | |
2449 | fC[13][4] = 0.6410; | |
2450 | ||
2451 | fC[14][0] = 0.005; | |
2452 | fC[14][1] = 0.005; | |
2453 | fC[14][2] = 1.0000; | |
2454 | fC[14][3] = 0.4649; | |
2455 | fC[14][4] = 0.7055; | |
2456 | ||
2457 | fC[15][0] = 0.005; | |
2458 | fC[15][1] = 0.005; | |
2459 | fC[15][2] = 1.0000; | |
2460 | fC[15][3] = 0.4523; | |
2461 | fC[15][4] = 0.7440; | |
2462 | ||
2463 | fC[16][0] = 0.005; | |
2464 | fC[16][1] = 0.005; | |
2465 | fC[16][2] = 1.0000; | |
2466 | fC[16][3] = 0.4591; | |
2467 | fC[16][4] = 0.7799; | |
2468 | ||
2469 | fC[17][0] = 0.005; | |
2470 | fC[17][1] = 0.005; | |
2471 | fC[17][2] = 1.0000; | |
2472 | fC[17][3] = 0.4804; | |
2473 | fC[17][4] = 0.8218; | |
2474 | } | |
2475 | // 20-30% | |
2476 | else if(centrCur < 30){ | |
2477 | fC[0][0] = 0.005; | |
2478 | fC[0][1] = 0.005; | |
2479 | fC[0][2] = 1.0000; | |
2480 | fC[0][3] = 0.0010; | |
2481 | fC[0][4] = 0.0010; | |
2482 | ||
2483 | fC[1][0] = 0.005; | |
2484 | fC[1][1] = 0.005; | |
2485 | fC[1][2] = 1.0000; | |
2486 | fC[1][3] = 0.0102; | |
2487 | fC[1][4] = 0.0064; | |
2488 | ||
2489 | fC[2][0] = 0.005; | |
2490 | fC[2][1] = 0.005; | |
2491 | fC[2][2] = 1.0000; | |
2492 | fC[2][3] = 0.0292; | |
2493 | fC[2][4] = 0.0066; | |
2494 | ||
2495 | fC[3][0] = 0.005; | |
2496 | fC[3][1] = 0.005; | |
2497 | fC[3][2] = 1.0000; | |
2498 | fC[3][3] = 0.0597; | |
2499 | fC[3][4] = 0.0296; | |
2500 | ||
2501 | fC[4][0] = 0.005; | |
2502 | fC[4][1] = 0.005; | |
2503 | fC[4][2] = 1.0000; | |
2504 | fC[4][3] = 0.0900; | |
2505 | fC[4][4] = 0.0589; | |
2506 | ||
2507 | fC[5][0] = 0.005; | |
2508 | fC[5][1] = 0.005; | |
2509 | fC[5][2] = 1.0000; | |
2510 | fC[5][3] = 0.1199; | |
2511 | fC[5][4] = 0.0859; | |
2512 | ||
2513 | fC[6][0] = 0.005; | |
2514 | fC[6][1] = 0.005; | |
2515 | fC[6][2] = 1.0000; | |
2516 | fC[6][3] = 0.1505; | |
2517 | fC[6][4] = 0.1141; | |
2518 | ||
2519 | fC[7][0] = 0.005; | |
2520 | fC[7][1] = 0.005; | |
2521 | fC[7][2] = 1.0000; | |
2522 | fC[7][3] = 0.1805; | |
2523 | fC[7][4] = 0.1454; | |
2524 | ||
2525 | fC[8][0] = 0.005; | |
2526 | fC[8][1] = 0.005; | |
2527 | fC[8][2] = 1.0000; | |
2528 | fC[8][3] = 0.2221; | |
2529 | fC[8][4] = 0.2004; | |
2530 | ||
2531 | fC[9][0] = 0.005; | |
2532 | fC[9][1] = 0.005; | |
2533 | fC[9][2] = 1.0000; | |
2534 | fC[9][3] = 0.2796; | |
2535 | fC[9][4] = 0.2838; | |
2536 | ||
2537 | fC[10][0] = 0.005; | |
2538 | fC[10][1] = 0.005; | |
2539 | fC[10][2] = 1.0000; | |
2540 | fC[10][3] = 0.3271; | |
2541 | fC[10][4] = 0.3682; | |
2542 | ||
2543 | fC[11][0] = 0.005; | |
2544 | fC[11][1] = 0.005; | |
2545 | fC[11][2] = 1.0000; | |
2546 | fC[11][3] = 0.3648; | |
2547 | fC[11][4] = 0.4509; | |
2548 | ||
2549 | fC[12][0] = 0.005; | |
2550 | fC[12][1] = 0.005; | |
2551 | fC[12][2] = 1.0000; | |
2552 | fC[12][3] = 0.3988; | |
2553 | fC[12][4] = 0.5339; | |
2554 | ||
2555 | fC[13][0] = 0.005; | |
2556 | fC[13][1] = 0.005; | |
2557 | fC[13][2] = 1.0000; | |
2558 | fC[13][3] = 0.4315; | |
2559 | fC[13][4] = 0.5995; | |
2560 | ||
2561 | fC[14][0] = 0.005; | |
2562 | fC[14][1] = 0.005; | |
2563 | fC[14][2] = 1.0000; | |
2564 | fC[14][3] = 0.4548; | |
2565 | fC[14][4] = 0.6612; | |
2566 | ||
2567 | fC[15][0] = 0.005; | |
2568 | fC[15][1] = 0.005; | |
2569 | fC[15][2] = 1.0000; | |
2570 | fC[15][3] = 0.4744; | |
2571 | fC[15][4] = 0.7060; | |
2572 | ||
2573 | fC[16][0] = 0.005; | |
2574 | fC[16][1] = 0.005; | |
2575 | fC[16][2] = 1.0000; | |
2576 | fC[16][3] = 0.4899; | |
2577 | fC[16][4] = 0.7388; | |
2578 | ||
2579 | fC[17][0] = 0.005; | |
2580 | fC[17][1] = 0.005; | |
2581 | fC[17][2] = 1.0000; | |
2582 | fC[17][3] = 0.4411; | |
2583 | fC[17][4] = 0.7293; | |
2584 | } | |
2585 | // 30-40% | |
2586 | else if(centrCur < 40){ | |
2587 | fC[0][0] = 0.005; | |
2588 | fC[0][1] = 0.005; | |
2589 | fC[0][2] = 1.0000; | |
2590 | fC[0][3] = 0.0010; | |
2591 | fC[0][4] = 0.0010; | |
2592 | ||
2593 | fC[1][0] = 0.005; | |
2594 | fC[1][1] = 0.005; | |
2595 | fC[1][2] = 1.0000; | |
2596 | fC[1][3] = 0.0102; | |
2597 | fC[1][4] = 0.0048; | |
2598 | ||
2599 | fC[2][0] = 0.005; | |
2600 | fC[2][1] = 0.005; | |
2601 | fC[2][2] = 1.0000; | |
2602 | fC[2][3] = 0.0306; | |
2603 | fC[2][4] = 0.0079; | |
2604 | ||
2605 | fC[3][0] = 0.005; | |
2606 | fC[3][1] = 0.005; | |
2607 | fC[3][2] = 1.0000; | |
2608 | fC[3][3] = 0.0617; | |
2609 | fC[3][4] = 0.0338; | |
2610 | ||
2611 | fC[4][0] = 0.005; | |
2612 | fC[4][1] = 0.005; | |
2613 | fC[4][2] = 1.0000; | |
2614 | fC[4][3] = 0.0920; | |
2615 | fC[4][4] = 0.0652; | |
2616 | ||
2617 | fC[5][0] = 0.005; | |
2618 | fC[5][1] = 0.005; | |
2619 | fC[5][2] = 1.0000; | |
2620 | fC[5][3] = 0.1211; | |
2621 | fC[5][4] = 0.0955; | |
2622 | ||
2623 | fC[6][0] = 0.005; | |
2624 | fC[6][1] = 0.005; | |
2625 | fC[6][2] = 1.0000; | |
2626 | fC[6][3] = 0.1496; | |
2627 | fC[6][4] = 0.1242; | |
2628 | ||
2629 | fC[7][0] = 0.005; | |
2630 | fC[7][1] = 0.005; | |
2631 | fC[7][2] = 1.0000; | |
2632 | fC[7][3] = 0.1807; | |
2633 | fC[7][4] = 0.1576; | |
2634 | ||
2635 | fC[8][0] = 0.005; | |
2636 | fC[8][1] = 0.005; | |
2637 | fC[8][2] = 1.0000; | |
2638 | fC[8][3] = 0.2195; | |
2639 | fC[8][4] = 0.2097; | |
2640 | ||
2641 | fC[9][0] = 0.005; | |
2642 | fC[9][1] = 0.005; | |
2643 | fC[9][2] = 1.0000; | |
2644 | fC[9][3] = 0.2732; | |
2645 | fC[9][4] = 0.2884; | |
2646 | ||
2647 | fC[10][0] = 0.005; | |
2648 | fC[10][1] = 0.005; | |
2649 | fC[10][2] = 1.0000; | |
2650 | fC[10][3] = 0.3204; | |
2651 | fC[10][4] = 0.3679; | |
2652 | ||
2653 | fC[11][0] = 0.005; | |
2654 | fC[11][1] = 0.005; | |
2655 | fC[11][2] = 1.0000; | |
2656 | fC[11][3] = 0.3564; | |
2657 | fC[11][4] = 0.4449; | |
2658 | ||
2659 | fC[12][0] = 0.005; | |
2660 | fC[12][1] = 0.005; | |
2661 | fC[12][2] = 1.0000; | |
2662 | fC[12][3] = 0.3791; | |
2663 | fC[12][4] = 0.5052; | |
2664 | ||
2665 | fC[13][0] = 0.005; | |
2666 | fC[13][1] = 0.005; | |
2667 | fC[13][2] = 1.0000; | |
2668 | fC[13][3] = 0.4062; | |
2669 | fC[13][4] = 0.5647; | |
2670 | ||
2671 | fC[14][0] = 0.005; | |
2672 | fC[14][1] = 0.005; | |
2673 | fC[14][2] = 1.0000; | |
2674 | fC[14][3] = 0.4234; | |
2675 | fC[14][4] = 0.6203; | |
2676 | ||
2677 | fC[15][0] = 0.005; | |
2678 | fC[15][1] = 0.005; | |
2679 | fC[15][2] = 1.0000; | |
2680 | fC[15][3] = 0.4441; | |
2681 | fC[15][4] = 0.6381; | |
2682 | ||
2683 | fC[16][0] = 0.005; | |
2684 | fC[16][1] = 0.005; | |
2685 | fC[16][2] = 1.0000; | |
2686 | fC[16][3] = 0.4629; | |
2687 | fC[16][4] = 0.6496; | |
2688 | ||
2689 | fC[17][0] = 0.005; | |
2690 | fC[17][1] = 0.005; | |
2691 | fC[17][2] = 1.0000; | |
2692 | fC[17][3] = 0.4293; | |
2693 | fC[17][4] = 0.6491; | |
2694 | } | |
2695 | // 40-50% | |
2696 | else if(centrCur < 50){ | |
2697 | fC[0][0] = 0.005; | |
2698 | fC[0][1] = 0.005; | |
2699 | fC[0][2] = 1.0000; | |
2700 | fC[0][3] = 0.0010; | |
2701 | fC[0][4] = 0.0010; | |
2702 | ||
2703 | fC[1][0] = 0.005; | |
2704 | fC[1][1] = 0.005; | |
2705 | fC[1][2] = 1.0000; | |
2706 | fC[1][3] = 0.0093; | |
2707 | fC[1][4] = 0.0057; | |
2708 | ||
2709 | fC[2][0] = 0.005; | |
2710 | fC[2][1] = 0.005; | |
2711 | fC[2][2] = 1.0000; | |
2712 | fC[2][3] = 0.0319; | |
2713 | fC[2][4] = 0.0075; | |
2714 | ||
2715 | fC[3][0] = 0.005; | |
2716 | fC[3][1] = 0.005; | |
2717 | fC[3][2] = 1.0000; | |
2718 | fC[3][3] = 0.0639; | |
2719 | fC[3][4] = 0.0371; | |
2720 | ||
2721 | fC[4][0] = 0.005; | |
2722 | fC[4][1] = 0.005; | |
2723 | fC[4][2] = 1.0000; | |
2724 | fC[4][3] = 0.0939; | |
2725 | fC[4][4] = 0.0725; | |
2726 | ||
2727 | fC[5][0] = 0.005; | |
2728 | fC[5][1] = 0.005; | |
2729 | fC[5][2] = 1.0000; | |
2730 | fC[5][3] = 0.1224; | |
2731 | fC[5][4] = 0.1045; | |
2732 | ||
2733 | fC[6][0] = 0.005; | |
2734 | fC[6][1] = 0.005; | |
2735 | fC[6][2] = 1.0000; | |
2736 | fC[6][3] = 0.1520; | |
2737 | fC[6][4] = 0.1387; | |
2738 | ||
2739 | fC[7][0] = 0.005; | |
2740 | fC[7][1] = 0.005; | |
2741 | fC[7][2] = 1.0000; | |
2742 | fC[7][3] = 0.1783; | |
2743 | fC[7][4] = 0.1711; | |
2744 | ||
2745 | fC[8][0] = 0.005; | |
2746 | fC[8][1] = 0.005; | |
2747 | fC[8][2] = 1.0000; | |
2748 | fC[8][3] = 0.2202; | |
2749 | fC[8][4] = 0.2269; | |
2750 | ||
2751 | fC[9][0] = 0.005; | |
2752 | fC[9][1] = 0.005; | |
2753 | fC[9][2] = 1.0000; | |
2754 | fC[9][3] = 0.2672; | |
2755 | fC[9][4] = 0.2955; | |
2756 | ||
2757 | fC[10][0] = 0.005; | |
2758 | fC[10][1] = 0.005; | |
2759 | fC[10][2] = 1.0000; | |
2760 | fC[10][3] = 0.3191; | |
2761 | fC[10][4] = 0.3676; | |
2762 | ||
2763 | fC[11][0] = 0.005; | |
2764 | fC[11][1] = 0.005; | |
2765 | fC[11][2] = 1.0000; | |
2766 | fC[11][3] = 0.3434; | |
2767 | fC[11][4] = 0.4321; | |
2768 | ||
2769 | fC[12][0] = 0.005; | |
2770 | fC[12][1] = 0.005; | |
2771 | fC[12][2] = 1.0000; | |
2772 | fC[12][3] = 0.3692; | |
2773 | fC[12][4] = 0.4879; | |
2774 | ||
2775 | fC[13][0] = 0.005; | |
2776 | fC[13][1] = 0.005; | |
2777 | fC[13][2] = 1.0000; | |
2778 | fC[13][3] = 0.3993; | |
2779 | fC[13][4] = 0.5377; | |
2780 | ||
2781 | fC[14][0] = 0.005; | |
2782 | fC[14][1] = 0.005; | |
2783 | fC[14][2] = 1.0000; | |
2784 | fC[14][3] = 0.3818; | |
2785 | fC[14][4] = 0.5547; | |
2786 | ||
2787 | fC[15][0] = 0.005; | |
2788 | fC[15][1] = 0.005; | |
2789 | fC[15][2] = 1.0000; | |
2790 | fC[15][3] = 0.4003; | |
2791 | fC[15][4] = 0.5484; | |
2792 | ||
2793 | fC[16][0] = 0.005; | |
2794 | fC[16][1] = 0.005; | |
2795 | fC[16][2] = 1.0000; | |
2796 | fC[16][3] = 0.4281; | |
2797 | fC[16][4] = 0.5383; | |
2798 | ||
2799 | fC[17][0] = 0.005; | |
2800 | fC[17][1] = 0.005; | |
2801 | fC[17][2] = 1.0000; | |
2802 | fC[17][3] = 0.3960; | |
2803 | fC[17][4] = 0.5374; | |
2804 | } | |
2805 | // 50-60% | |
2806 | else if(centrCur < 60){ | |
2807 | fC[0][0] = 0.005; | |
2808 | fC[0][1] = 0.005; | |
2809 | fC[0][2] = 1.0000; | |
2810 | fC[0][3] = 0.0010; | |
2811 | fC[0][4] = 0.0010; | |
2812 | ||
2813 | fC[1][0] = 0.005; | |
2814 | fC[1][1] = 0.005; | |
2815 | fC[1][2] = 1.0000; | |
2816 | fC[1][3] = 0.0076; | |
2817 | fC[1][4] = 0.0032; | |
2818 | ||
2819 | fC[2][0] = 0.005; | |
2820 | fC[2][1] = 0.005; | |
2821 | fC[2][2] = 1.0000; | |
2822 | fC[2][3] = 0.0329; | |
2823 | fC[2][4] = 0.0085; | |
2824 | ||
2825 | fC[3][0] = 0.005; | |
2826 | fC[3][1] = 0.005; | |
2827 | fC[3][2] = 1.0000; | |
2828 | fC[3][3] = 0.0653; | |
2829 | fC[3][4] = 0.0423; | |
2830 | ||
2831 | fC[4][0] = 0.005; | |
2832 | fC[4][1] = 0.005; | |
2833 | fC[4][2] = 1.0000; | |
2834 | fC[4][3] = 0.0923; | |
2835 | fC[4][4] = 0.0813; | |
2836 | ||
2837 | fC[5][0] = 0.005; | |
2838 | fC[5][1] = 0.005; | |
2839 | fC[5][2] = 1.0000; | |
2840 | fC[5][3] = 0.1219; | |
2841 | fC[5][4] = 0.1161; | |
2842 | ||
2843 | fC[6][0] = 0.005; | |
2844 | fC[6][1] = 0.005; | |
2845 | fC[6][2] = 1.0000; | |
2846 | fC[6][3] = 0.1519; | |
2847 | fC[6][4] = 0.1520; | |
2848 | ||
2849 | fC[7][0] = 0.005; | |
2850 | fC[7][1] = 0.005; | |
2851 | fC[7][2] = 1.0000; | |
2852 | fC[7][3] = 0.1763; | |
2853 | fC[7][4] = 0.1858; | |
2854 | ||
2855 | fC[8][0] = 0.005; | |
2856 | fC[8][1] = 0.005; | |
2857 | fC[8][2] = 1.0000; | |
2858 | fC[8][3] = 0.2178; | |
2859 | fC[8][4] = 0.2385; | |
2860 | ||
2861 | fC[9][0] = 0.005; | |
2862 | fC[9][1] = 0.005; | |
2863 | fC[9][2] = 1.0000; | |
2864 | fC[9][3] = 0.2618; | |
2865 | fC[9][4] = 0.3070; | |
2866 | ||
2867 | fC[10][0] = 0.005; | |
2868 | fC[10][1] = 0.005; | |
2869 | fC[10][2] = 1.0000; | |
2870 | fC[10][3] = 0.3067; | |
2871 | fC[10][4] = 0.3625; | |
2872 | ||
2873 | fC[11][0] = 0.005; | |
2874 | fC[11][1] = 0.005; | |
2875 | fC[11][2] = 1.0000; | |
2876 | fC[11][3] = 0.3336; | |
2877 | fC[11][4] = 0.4188; | |
2878 | ||
2879 | fC[12][0] = 0.005; | |
2880 | fC[12][1] = 0.005; | |
2881 | fC[12][2] = 1.0000; | |
2882 | fC[12][3] = 0.3706; | |
2883 | fC[12][4] = 0.4511; | |
2884 | ||
2885 | fC[13][0] = 0.005; | |
2886 | fC[13][1] = 0.005; | |
2887 | fC[13][2] = 1.0000; | |
2888 | fC[13][3] = 0.3765; | |
2889 | fC[13][4] = 0.4729; | |
2890 | ||
2891 | fC[14][0] = 0.005; | |
2892 | fC[14][1] = 0.005; | |
2893 | fC[14][2] = 1.0000; | |
2894 | fC[14][3] = 0.3942; | |
2895 | fC[14][4] = 0.4855; | |
2896 | ||
2897 | fC[15][0] = 0.005; | |
2898 | fC[15][1] = 0.005; | |
2899 | fC[15][2] = 1.0000; | |
2900 | fC[15][3] = 0.4051; | |
2901 | fC[15][4] = 0.4762; | |
2902 | ||
2903 | fC[16][0] = 0.005; | |
2904 | fC[16][1] = 0.005; | |
2905 | fC[16][2] = 1.0000; | |
2906 | fC[16][3] = 0.3843; | |
2907 | fC[16][4] = 0.4763; | |
2908 | ||
2909 | fC[17][0] = 0.005; | |
2910 | fC[17][1] = 0.005; | |
2911 | fC[17][2] = 1.0000; | |
2912 | fC[17][3] = 0.4237; | |
2913 | fC[17][4] = 0.4773; | |
2914 | } | |
2915 | // 60-70% | |
2916 | else if(centrCur < 70){ | |
2917 | fC[0][0] = 0.005; | |
2918 | fC[0][1] = 0.005; | |
2919 | fC[0][2] = 1.0000; | |
2920 | fC[0][3] = 0.0010; | |
2921 | fC[0][4] = 0.0010; | |
2922 | ||
2923 | fC[1][0] = 0.005; | |
2924 | fC[1][1] = 0.005; | |
2925 | fC[1][2] = 1.0000; | |
2926 | fC[1][3] = 0.0071; | |
2927 | fC[1][4] = 0.0012; | |
2928 | ||
2929 | fC[2][0] = 0.005; | |
2930 | fC[2][1] = 0.005; | |
2931 | fC[2][2] = 1.0000; | |
2932 | fC[2][3] = 0.0336; | |
2933 | fC[2][4] = 0.0097; | |
2934 | ||
2935 | fC[3][0] = 0.005; | |
2936 | fC[3][1] = 0.005; | |
2937 | fC[3][2] = 1.0000; | |
2938 | fC[3][3] = 0.0662; | |
2939 | fC[3][4] = 0.0460; | |
2940 | ||
2941 | fC[4][0] = 0.005; | |
2942 | fC[4][1] = 0.005; | |
2943 | fC[4][2] = 1.0000; | |
2944 | fC[4][3] = 0.0954; | |
2945 | fC[4][4] = 0.0902; | |
2946 | ||
2947 | fC[5][0] = 0.005; | |
2948 | fC[5][1] = 0.005; | |
2949 | fC[5][2] = 1.0000; | |
2950 | fC[5][3] = 0.1181; | |
2951 | fC[5][4] = 0.1306; | |
2952 | ||
2953 | fC[6][0] = 0.005; | |
2954 | fC[6][1] = 0.005; | |
2955 | fC[6][2] = 1.0000; | |
2956 | fC[6][3] = 0.1481; | |
2957 | fC[6][4] = 0.1662; | |
2958 | ||
2959 | fC[7][0] = 0.005; | |
2960 | fC[7][1] = 0.005; | |
2961 | fC[7][2] = 1.0000; | |
2962 | fC[7][3] = 0.1765; | |
2963 | fC[7][4] = 0.1963; | |
2964 | ||
2965 | fC[8][0] = 0.005; | |
2966 | fC[8][1] = 0.005; | |
2967 | fC[8][2] = 1.0000; | |
2968 | fC[8][3] = 0.2155; | |
2969 | fC[8][4] = 0.2433; | |
2970 | ||
2971 | fC[9][0] = 0.005; | |
2972 | fC[9][1] = 0.005; | |
2973 | fC[9][2] = 1.0000; | |
2974 | fC[9][3] = 0.2580; | |
2975 | fC[9][4] = 0.3022; | |
2976 | ||
2977 | fC[10][0] = 0.005; | |
2978 | fC[10][1] = 0.005; | |
2979 | fC[10][2] = 1.0000; | |
2980 | fC[10][3] = 0.2872; | |
2981 | fC[10][4] = 0.3481; | |
2982 | ||
2983 | fC[11][0] = 0.005; | |
2984 | fC[11][1] = 0.005; | |
2985 | fC[11][2] = 1.0000; | |
2986 | fC[11][3] = 0.3170; | |
2987 | fC[11][4] = 0.3847; | |
2988 | ||
2989 | fC[12][0] = 0.005; | |
2990 | fC[12][1] = 0.005; | |
2991 | fC[12][2] = 1.0000; | |
2992 | fC[12][3] = 0.3454; | |
2993 | fC[12][4] = 0.4258; | |
2994 | ||
2995 | fC[13][0] = 0.005; | |
2996 | fC[13][1] = 0.005; | |
2997 | fC[13][2] = 1.0000; | |
2998 | fC[13][3] = 0.3580; | |
2999 | fC[13][4] = 0.4299; | |
3000 | ||
3001 | fC[14][0] = 0.005; | |
3002 | fC[14][1] = 0.005; | |
3003 | fC[14][2] = 1.0000; | |
3004 | fC[14][3] = 0.3903; | |
3005 | fC[14][4] = 0.4326; | |
3006 | ||
3007 | fC[15][0] = 0.005; | |
3008 | fC[15][1] = 0.005; | |
3009 | fC[15][2] = 1.0000; | |
3010 | fC[15][3] = 0.3690; | |
3011 | fC[15][4] = 0.4491; | |
3012 | ||
3013 | fC[16][0] = 0.005; | |
3014 | fC[16][1] = 0.005; | |
3015 | fC[16][2] = 1.0000; | |
3016 | fC[16][3] = 0.4716; | |
3017 | fC[16][4] = 0.4298; | |
3018 | ||
3019 | fC[17][0] = 0.005; | |
3020 | fC[17][1] = 0.005; | |
3021 | fC[17][2] = 1.0000; | |
3022 | fC[17][3] = 0.3875; | |
3023 | fC[17][4] = 0.4083; | |
3024 | } | |
3025 | // 70-80% | |
3026 | else if(centrCur < 80){ | |
3027 | fC[0][0] = 0.005; | |
3028 | fC[0][1] = 0.005; | |
3029 | fC[0][2] = 1.0000; | |
3030 | fC[0][3] = 0.0010; | |
3031 | fC[0][4] = 0.0010; | |
3032 | ||
3033 | fC[1][0] = 0.005; | |
3034 | fC[1][1] = 0.005; | |
3035 | fC[1][2] = 1.0000; | |
3036 | fC[1][3] = 0.0075; | |
3037 | fC[1][4] = 0.0007; | |
3038 | ||
3039 | fC[2][0] = 0.005; | |
3040 | fC[2][1] = 0.005; | |
3041 | fC[2][2] = 1.0000; | |
3042 | fC[2][3] = 0.0313; | |
3043 | fC[2][4] = 0.0124; | |
3044 | ||
3045 | fC[3][0] = 0.005; | |
3046 | fC[3][1] = 0.005; | |
3047 | fC[3][2] = 1.0000; | |
3048 | fC[3][3] = 0.0640; | |
3049 | fC[3][4] = 0.0539; | |
3050 | ||
3051 | fC[4][0] = 0.005; | |
3052 | fC[4][1] = 0.005; | |
3053 | fC[4][2] = 1.0000; | |
3054 | fC[4][3] = 0.0923; | |
3055 | fC[4][4] = 0.0992; | |
3056 | ||
3057 | fC[5][0] = 0.005; | |
3058 | fC[5][1] = 0.005; | |
3059 | fC[5][2] = 1.0000; | |
3060 | fC[5][3] = 0.1202; | |
3061 | fC[5][4] = 0.1417; | |
3062 | ||
3063 | fC[6][0] = 0.005; | |
3064 | fC[6][1] = 0.005; | |
3065 | fC[6][2] = 1.0000; | |
3066 | fC[6][3] = 0.1413; | |
3067 | fC[6][4] = 0.1729; | |
3068 | ||
3069 | fC[7][0] = 0.005; | |
3070 | fC[7][1] = 0.005; | |
3071 | fC[7][2] = 1.0000; | |
3072 | fC[7][3] = 0.1705; | |
3073 | fC[7][4] = 0.1999; | |
3074 | ||
3075 | fC[8][0] = 0.005; | |
3076 | fC[8][1] = 0.005; | |
3077 | fC[8][2] = 1.0000; | |
3078 | fC[8][3] = 0.2103; | |
3079 | fC[8][4] = 0.2472; | |
3080 | ||
3081 | fC[9][0] = 0.005; | |
3082 | fC[9][1] = 0.005; | |
3083 | fC[9][2] = 1.0000; | |
3084 | fC[9][3] = 0.2373; | |
3085 | fC[9][4] = 0.2916; | |
3086 | ||
3087 | fC[10][0] = 0.005; | |
3088 | fC[10][1] = 0.005; | |
3089 | fC[10][2] = 1.0000; | |
3090 | fC[10][3] = 0.2824; | |
3091 | fC[10][4] = 0.3323; | |
3092 | ||
3093 | fC[11][0] = 0.005; | |
3094 | fC[11][1] = 0.005; | |
3095 | fC[11][2] = 1.0000; | |
3096 | fC[11][3] = 0.3046; | |
3097 | fC[11][4] = 0.3576; | |
3098 | ||
3099 | fC[12][0] = 0.005; | |
3100 | fC[12][1] = 0.005; | |
3101 | fC[12][2] = 1.0000; | |
3102 | fC[12][3] = 0.3585; | |
3103 | fC[12][4] = 0.4003; | |
3104 | ||
3105 | fC[13][0] = 0.005; | |
3106 | fC[13][1] = 0.005; | |
3107 | fC[13][2] = 1.0000; | |
3108 | fC[13][3] = 0.3461; | |
3109 | fC[13][4] = 0.3982; | |
3110 | ||
3111 | fC[14][0] = 0.005; | |
3112 | fC[14][1] = 0.005; | |
3113 | fC[14][2] = 1.0000; | |
3114 | fC[14][3] = 0.3362; | |
3115 | fC[14][4] = 0.3776; | |
3116 | ||
3117 | fC[15][0] = 0.005; | |
3118 | fC[15][1] = 0.005; | |
3119 | fC[15][2] = 1.0000; | |
3120 | fC[15][3] = 0.3071; | |
3121 | fC[15][4] = 0.3500; | |
3122 | ||
3123 | fC[16][0] = 0.005; | |
3124 | fC[16][1] = 0.005; | |
3125 | fC[16][2] = 1.0000; | |
3126 | fC[16][3] = 0.2914; | |
3127 | fC[16][4] = 0.3937; | |
3128 | ||
3129 | fC[17][0] = 0.005; | |
3130 | fC[17][1] = 0.005; | |
3131 | fC[17][2] = 1.0000; | |
3132 | fC[17][3] = 0.3727; | |
3133 | fC[17][4] = 0.3877; | |
3134 | } | |
3135 | // 80-100% | |
3136 | else{ | |
3137 | fC[0][0] = 0.005; | |
3138 | fC[0][1] = 0.005; | |
3139 | fC[0][2] = 1.0000; | |
3140 | fC[0][3] = 0.0010; | |
3141 | fC[0][4] = 0.0010; | |
3142 | ||
3143 | fC[1][0] = 0.005; | |
3144 | fC[1][1] = 0.005; | |
3145 | fC[1][2] = 1.0000; | |
3146 | fC[1][3] = 0.0060; | |
3147 | fC[1][4] = 0.0035; | |
3148 | ||
3149 | fC[2][0] = 0.005; | |
3150 | fC[2][1] = 0.005; | |
3151 | fC[2][2] = 1.0000; | |
3152 | fC[2][3] = 0.0323; | |
3153 | fC[2][4] = 0.0113; | |
3154 | ||
3155 | fC[3][0] = 0.005; | |
3156 | fC[3][1] = 0.005; | |
3157 | fC[3][2] = 1.0000; | |
3158 | fC[3][3] = 0.0609; | |
3159 | fC[3][4] = 0.0653; | |
3160 | ||
3161 | fC[4][0] = 0.005; | |
3162 | fC[4][1] = 0.005; | |
3163 | fC[4][2] = 1.0000; | |
3164 | fC[4][3] = 0.0922; | |
3165 | fC[4][4] = 0.1076; | |
3166 | ||
3167 | fC[5][0] = 0.005; | |
3168 | fC[5][1] = 0.005; | |
3169 | fC[5][2] = 1.0000; | |
3170 | fC[5][3] = 0.1096; | |
3171 | fC[5][4] = 0.1328; | |
3172 | ||
3173 | fC[6][0] = 0.005; | |
3174 | fC[6][1] = 0.005; | |
3175 | fC[6][2] = 1.0000; | |
3176 | fC[6][3] = 0.1495; | |
3177 | fC[6][4] = 0.1779; | |
3178 | ||
3179 | fC[7][0] = 0.005; | |
3180 | fC[7][1] = 0.005; | |
3181 | fC[7][2] = 1.0000; | |
3182 | fC[7][3] = 0.1519; | |
3183 | fC[7][4] = 0.1989; | |
3184 | ||
3185 | fC[8][0] = 0.005; | |
3186 | fC[8][1] = 0.005; | |
3187 | fC[8][2] = 1.0000; | |
3188 | fC[8][3] = 0.1817; | |
3189 | fC[8][4] = 0.2472; | |
3190 | ||
3191 | fC[9][0] = 0.005; | |
3192 | fC[9][1] = 0.005; | |
3193 | fC[9][2] = 1.0000; | |
3194 | fC[9][3] = 0.2429; | |
3195 | fC[9][4] = 0.2684; | |
3196 | ||
3197 | fC[10][0] = 0.005; | |
3198 | fC[10][1] = 0.005; | |
3199 | fC[10][2] = 1.0000; | |
3200 | fC[10][3] = 0.2760; | |
3201 | fC[10][4] = 0.3098; | |
3202 | ||
3203 | fC[11][0] = 0.005; | |
3204 | fC[11][1] = 0.005; | |
3205 | fC[11][2] = 1.0000; | |
3206 | fC[11][3] = 0.2673; | |
3207 | fC[11][4] = 0.3198; | |
3208 | ||
3209 | fC[12][0] = 0.005; | |
3210 | fC[12][1] = 0.005; | |
3211 | fC[12][2] = 1.0000; | |
3212 | fC[12][3] = 0.3165; | |
3213 | fC[12][4] = 0.3564; | |
3214 | ||
3215 | fC[13][0] = 0.005; | |
3216 | fC[13][1] = 0.005; | |
3217 | fC[13][2] = 1.0000; | |
3218 | fC[13][3] = 0.3526; | |
3219 | fC[13][4] = 0.3011; | |
3220 | ||
3221 | fC[14][0] = 0.005; | |
3222 | fC[14][1] = 0.005; | |
3223 | fC[14][2] = 1.0000; | |
3224 | fC[14][3] = 0.3788; | |
3225 | fC[14][4] = 0.3011; | |
3226 | ||
3227 | fC[15][0] = 0.005; | |
3228 | fC[15][1] = 0.005; | |
3229 | fC[15][2] = 1.0000; | |
3230 | fC[15][3] = 0.3788; | |
3231 | fC[15][4] = 0.3011; | |
3232 | ||
3233 | fC[16][0] = 0.005; | |
3234 | fC[16][1] = 0.005; | |
3235 | fC[16][2] = 1.0000; | |
3236 | fC[16][3] = 0.3788; | |
3237 | fC[16][4] = 0.3011; | |
3238 | ||
3239 | fC[17][0] = 0.005; | |
3240 | fC[17][1] = 0.005; | |
3241 | fC[17][2] = 1.0000; | |
3242 | fC[17][3] = 0.3788; | |
3243 | fC[17][4] = 0.3011; | |
3244 | } | |
3245 | ||
3246 | for(Int_t i=18;i<fgkPIDptBin;i++){ | |
3247 | fBinLimitPID[i] = 3.0 + 0.2 * (i-18); | |
3248 | fC[i][0] = fC[17][0]; | |
3249 | fC[i][1] = fC[17][1]; | |
3250 | fC[i][2] = fC[17][2]; | |
3251 | fC[i][3] = fC[17][3]; | |
3252 | fC[i][4] = fC[17][4]; | |
3253 | } | |
3254 | } | |
3255 | ||
3256 | //---------------------------------------------------------------// | |
3257 | Bool_t AliFlowTrackCuts::TPCTOFagree(const AliESDtrack *track) | |
3258 | { | |
3259 | Bool_t status = kFALSE; | |
3260 | ||
3261 | Float_t mass[5] = {5.10998909999999971e-04,1.05658000000000002e-01,1.39570000000000000e-01,4.93676999999999977e-01,9.38271999999999995e-01}; | |
3262 | ||
3263 | ||
3264 | Double_t exptimes[5]; | |
3265 | track->GetIntegratedTimes(exptimes); | |
3266 | ||
3267 | Float_t dedx = track->GetTPCsignal(); | |
3268 | ||
3269 | Float_t p = track->P(); | |
3270 | Float_t time = track->GetTOFsignal()- fESDpid.GetTOFResponse().GetStartTime(p); | |
3271 | Float_t tl = track->GetIntegratedLength(); | |
3272 | ||
3273 | Float_t betagammares = fESDpid.GetTOFResponse().GetExpectedSigma(p, exptimes[4], mass[4]); | |
3274 | ||
3275 | Float_t betagamma1 = tl/(time-5 *betagammares) * 33.3564095198152043; | |
3276 | ||
3277 | // printf("betagamma1 = %f\n",betagamma1); | |
3278 | ||
3279 | if(betagamma1 < 0.1) betagamma1 = 0.1; | |
3280 | ||
3281 | if(betagamma1 < 0.99999) betagamma1 /= TMath::Sqrt(1-betagamma1*betagamma1); | |
3282 | else betagamma1 = 100; | |
3283 | ||
3284 | Float_t betagamma2 = tl/(time+5 *betagammares) * 33.3564095198152043; | |
3285 | // printf("betagamma2 = %f\n",betagamma2); | |
3286 | ||
3287 | if(betagamma2 < 0.1) betagamma2 = 0.1; | |
3288 | ||
3289 | if(betagamma2 < 0.99999) betagamma2 /= TMath::Sqrt(1-betagamma2*betagamma2); | |
3290 | else betagamma2 = 100; | |
3291 | ||
3292 | ||
3293 | Double_t ptpc[3]; | |
3294 | track->GetInnerPxPyPz(ptpc); | |
3295 | Float_t momtpc=TMath::Sqrt(ptpc[0]*ptpc[0] + ptpc[1]*ptpc[1] + ptpc[2]*ptpc[2]); | |
3296 | ||
3297 | for(Int_t i=0;i < 5;i++){ | |
3298 | Float_t resolutionTOF = fESDpid.GetTOFResponse().GetExpectedSigma(p, exptimes[i], mass[i]); | |
3299 | if(TMath::Abs(exptimes[i] - time) < 5 * resolutionTOF){ | |
3300 | Float_t dedxExp = 0; | |
3301 | if(i==0) dedxExp = fESDpid.GetTPCResponse().GetExpectedSignal(momtpc,AliPID::kElectron); | |
3302 | else if(i==1) dedxExp = fESDpid.GetTPCResponse().GetExpectedSignal(momtpc,AliPID::kMuon); | |
3303 | else if(i==2) dedxExp = fESDpid.GetTPCResponse().GetExpectedSignal(momtpc,AliPID::kPion); | |
3304 | else if(i==3) dedxExp = fESDpid.GetTPCResponse().GetExpectedSignal(momtpc,AliPID::kKaon); | |
3305 | else if(i==4) dedxExp = fESDpid.GetTPCResponse().GetExpectedSignal(momtpc,AliPID::kProton); | |
3306 | ||
3307 | Float_t resolutionTPC = 2; | |
3308 | if(i==0) resolutionTPC = fESDpid.GetTPCResponse().GetExpectedSigma(momtpc,track->GetTPCsignalN(),AliPID::kElectron); | |
3309 | else if(i==1) resolutionTPC = fESDpid.GetTPCResponse().GetExpectedSigma(momtpc,track->GetTPCsignalN(),AliPID::kMuon); | |
3310 | else if(i==2) resolutionTPC = fESDpid.GetTPCResponse().GetExpectedSigma(momtpc,track->GetTPCsignalN(),AliPID::kPion); | |
3311 | else if(i==3) resolutionTPC = fESDpid.GetTPCResponse().GetExpectedSigma(momtpc,track->GetTPCsignalN(),AliPID::kKaon); | |
3312 | else if(i==4) resolutionTPC = fESDpid.GetTPCResponse().GetExpectedSigma(momtpc,track->GetTPCsignalN(),AliPID::kProton); | |
3313 | ||
3314 | if(TMath::Abs(dedx - dedxExp) < 3 * resolutionTPC){ | |
3315 | status = kTRUE; | |
3316 | } | |
3317 | } | |
3318 | } | |
3319 | ||
3320 | Float_t bb1 = fESDpid.GetTPCResponse().Bethe(betagamma1); | |
3321 | Float_t bb2 = fESDpid.GetTPCResponse().Bethe(betagamma2); | |
3322 | Float_t bbM = fESDpid.GetTPCResponse().Bethe((betagamma1+betagamma2)*0.5); | |
3323 | ||
3324 | ||
3325 | // status = kFALSE; | |
3326 | // for nuclei | |
3327 | Float_t resolutionTOFpr = fESDpid.GetTOFResponse().GetExpectedSigma(p, exptimes[4], mass[4]); | |
3328 | Float_t resolutionTPCpr = fESDpid.GetTPCResponse().GetExpectedSigma(momtpc,track->GetTPCsignalN(),AliPID::kProton); | |
3329 | if(TMath::Abs(dedx-bb1) < resolutionTPCpr*3 && exptimes[4] < time-7*resolutionTOFpr){ | |
3330 | status = kTRUE; | |
3331 | } | |
3332 | else if(TMath::Abs(dedx-bb2) < resolutionTPCpr*3 && exptimes[4] < time-7*resolutionTOFpr){ | |
3333 | status = kTRUE; | |
3334 | } | |
3335 | else if(TMath::Abs(dedx-bbM) < resolutionTPCpr*3 && exptimes[4] < time-7*resolutionTOFpr){ | |
3336 | status = kTRUE; | |
3337 | } | |
3338 | ||
3339 | return status; | |
3abf7ecc | 3340 | } |
3341 | // end part added by F. Noferini | |
3342 | //----------------------------------------------------------------------- | |
2b1eaa10 | 3343 | |
2b1eaa10 | 3344 | //----------------------------------------------------------------------- |
3345 | const char* AliFlowTrackCuts::PIDsourceName(PIDsource s) | |
3346 | { | |
3347 | //get the name of the particle id source | |
3348 | switch (s) | |
3349 | { | |
3350 | case kTPCdedx: | |
3351 | return "TPCdedx"; | |
b9cf8f8e | 3352 | case kTPCbayesian: |
3353 | return "TPCbayesian"; | |
2b1eaa10 | 3354 | case kTOFbeta: |
3355 | return "TOFbeta"; | |
3356 | case kTPCpid: | |
3357 | return "TPCpid"; | |
3358 | case kTOFpid: | |
3359 | return "TOFpid"; | |
3360 | case kTOFbayesian: | |
3361 | return "TOFbayesianPID"; | |
1a80f9f6 | 3362 | case kTOFbetaSimple: |
3363 | return "TOFbetaSimple"; | |
2b1eaa10 | 3364 | default: |
3365 | return "NOPID"; | |
3366 | } | |
3367 | } | |
3368 | ||
3369 | //----------------------------------------------------------------------- | |
3370 | const char* AliFlowTrackCuts::GetParamTypeName(trackParameterType type) | |
3371 | { | |
3372 | //return the name of the selected parameter type | |
3373 | switch (type) | |
3374 | { | |
3375 | case kMC: | |
3376 | return "MC"; | |
3377 | case kGlobal: | |
1a80f9f6 | 3378 | return "Global"; |
3379 | case kTPCstandalone: | |
3380 | return "TPCstandalone"; | |
3381 | case kSPDtracklet: | |
3382 | return "SPDtracklets"; | |
d148af7e | 3383 | case kPMD: |
3384 | return "PMD"; | |
22289738 | 3385 | case kV0: |
3386 | return "V0"; | |
2b1eaa10 | 3387 | default: |
3388 | return "unknown"; | |
3389 | } | |
3390 | } | |
3391 | ||
d148af7e | 3392 | //----------------------------------------------------------------------- |
1a80f9f6 | 3393 | Bool_t AliFlowTrackCuts::PassesPMDcuts(AliESDPmdTrack* track ) |
d148af7e | 3394 | { |
3395 | //check PMD specific cuts | |
3396 | //clean up from last iteration, and init label | |
1a80f9f6 | 3397 | Int_t det = track->GetDetector(); |
3398 | //Int_t smn = track->GetSmn(); | |
3399 | Float_t clsX = track->GetClusterX(); | |
3400 | Float_t clsY = track->GetClusterY(); | |
3401 | Float_t clsZ = track->GetClusterZ(); | |
3402 | Float_t ncell = track->GetClusterCells(); | |
3403 | Float_t adc = track->GetClusterADC(); | |
d148af7e | 3404 | |
3405 | fTrack = NULL; | |
3406 | fMCparticle=NULL; | |
3407 | fTrackLabel=-1; | |
3408 | ||
1a80f9f6 | 3409 | fTrackEta = GetPmdEta(clsX,clsY,clsZ); |
3410 | fTrackPhi = GetPmdPhi(clsX,clsY); | |
d148af7e | 3411 | fTrackWeight = 1.0; |
3412 | ||
3413 | Bool_t pass=kTRUE; | |
3414 | if (fCutEta) {if ( fTrackEta < fEtaMin || fTrackEta >= fEtaMax ) pass = kFALSE;} | |
3415 | if (fCutPhi) {if ( fTrackPhi < fPhiMin || fTrackPhi >= fPhiMax ) pass = kFALSE;} | |
1a80f9f6 | 3416 | if (fCutPmdDet) {if(det != fPmdDet) pass = kFALSE;} |
3417 | if (fCutPmdAdc) {if(adc < fPmdAdc) pass = kFALSE;} | |
3418 | if (fCutPmdNcell) {if(ncell < fPmdNcell) pass = kFALSE;} | |
d148af7e | 3419 | |
1a80f9f6 | 3420 | return pass; |
d148af7e | 3421 | } |
22289738 | 3422 | |
3423 | //----------------------------------------------------------------------- | |
3424 | Bool_t AliFlowTrackCuts::PassesV0cuts(AliESDVZERO* vzero, Int_t id) | |
3425 | { | |
3426 | //check V0 cuts | |
3427 | ||
3428 | //clean up from last iter | |
3429 | fTrack = NULL; | |
3430 | fMCparticle=NULL; | |
3431 | fTrackLabel=-1; | |
3432 | ||
1a80f9f6 | 3433 | fTrackPhi = TMath::PiOver4()*(0.5+id%8); |
3434 | if(id<32) | |
3435 | fTrackEta = -3.45+0.5*(id/8); // taken from PPR | |
3436 | else | |
3437 | fTrackEta = +4.8-0.5*((id/8)-4); // taken from PPR | |
3438 | fTrackWeight = vzero->GetMultiplicity(id); // not corrected yet: we should use AliESDUtils | |
22289738 | 3439 | |
3440 | Bool_t pass=kTRUE; | |
3441 | if (fCutEta) {if ( fTrackEta < fEtaMin || fTrackEta >= fEtaMax ) pass = kFALSE;} | |
3442 | if (fCutPhi) {if ( fTrackPhi < fPhiMin || fTrackPhi >= fPhiMax ) pass = kFALSE;} | |
3443 | ||
1a80f9f6 | 3444 | return pass; |
22289738 | 3445 | } |
3446 | ||
1a80f9f6 | 3447 | //----------------------------------------------------------------------------// |
3448 | Double_t AliFlowTrackCuts::GetPmdEta(Float_t xPos, Float_t yPos, Float_t zPos) | |
3449 | { | |
3450 | Float_t rpxpy, theta, eta; | |
3451 | rpxpy = TMath::Sqrt(xPos*xPos + yPos*yPos); | |
3452 | theta = TMath::ATan2(rpxpy,zPos); | |
3453 | eta = -TMath::Log(TMath::Tan(0.5*theta)); | |
3454 | return eta; | |
3455 | } | |
3456 | ||
3457 | //--------------------------------------------------------------------------// | |
3458 | Double_t AliFlowTrackCuts::GetPmdPhi(Float_t xPos, Float_t yPos) | |
3459 | { | |
3460 | Float_t pybypx, phi = 0., phi1; | |
3461 | if(xPos==0) | |
3462 | { | |
3463 | if(yPos>0) phi = 90.; | |
3464 | if(yPos<0) phi = 270.; | |
3465 | } | |
3466 | if(xPos != 0) | |
3467 | { | |
3468 | pybypx = yPos/xPos; | |
3469 | if(pybypx < 0) pybypx = - pybypx; | |
3470 | phi1 = TMath::ATan(pybypx)*180./3.14159; | |
3471 | ||
3472 | if(xPos > 0 && yPos > 0) phi = phi1; // 1st Quadrant | |
3473 | if(xPos < 0 && yPos > 0) phi = 180 - phi1; // 2nd Quadrant | |
3474 | if(xPos < 0 && yPos < 0) phi = 180 + phi1; // 3rd Quadrant | |
3475 | if(xPos > 0 && yPos < 0) phi = 360 - phi1; // 4th Quadrant | |
3476 | ||
3477 | } | |
3478 | phi = phi*3.14159/180.; | |
3479 | return phi; | |
3480 | } | |
499fe731 | 3481 | |
3482 | //---------------------------------------------------------------// | |
3483 | void AliFlowTrackCuts::Browse(TBrowser* b) | |
3484 | { | |
3485 | //some browsing capabilities | |
3486 | if (fQA) b->Add(fQA); | |
3487 | } | |
3488 | ||
1a80f9f6 | 3489 | //---------------------------------------------------------------// |
499fe731 | 3490 | Long64_t AliFlowTrackCuts::Merge(TCollection* list) |
3491 | { | |
3492 | //merge | |
3493 | Int_t number=0; | |
3494 | AliFlowTrackCuts* obj; | |
3495 | if (!list) return 0; | |
3496 | if (list->GetEntries()<1) return 0; | |
3497 | TIter next(list); | |
3498 | while ( (obj = dynamic_cast<AliFlowTrackCuts*>(next())) ) | |
3499 | { | |
3500 | if (obj==this) continue; | |
3501 | TList listwrapper; | |
3502 | listwrapper.Add(obj->GetQA()); | |
3503 | fQA->Merge(&listwrapper); | |
3504 | number++; | |
3505 | } | |
3506 | return number; | |
3507 | } | |
f21bdf48 | 3508 |