]>
Commit | Line | Data |
---|---|---|
a8ad4709 | 1 | #include "AliAnalysisTaskK0sBayes.h" |
2 | ||
3 | // ROOT includes | |
4 | #include <TMath.h> | |
5 | ||
6 | // AliRoot includes | |
7 | #include "AliInputEventHandler.h" | |
8 | #include "AliAODEvent.h" | |
9 | #include "AliAODVertex.h" | |
10 | #include "AliAODTrack.h" | |
11 | #include "AliESDtrack.h" | |
12 | #include "AliCentrality.h" | |
13 | #include "AliVHeader.h" | |
14 | #include "AliAODVZERO.h" | |
15 | #include "TFile.h" | |
16 | #include "AliOADBContainer.h" | |
17 | #include "TH2F.h" | |
18 | #include "TF1.h" | |
19 | #include "AliGenHijingEventHeader.h" | |
20 | #include "AliMCEvent.h" | |
21 | #include "AliAODMCHeader.h" | |
22 | #include "AliAODMCParticle.h" | |
23 | #include "TChain.h" | |
24 | #include "AliESDtrackCuts.h" | |
25 | #include "AliESDVertex.h" | |
26 | #include "AliEventplane.h" | |
27 | #include "AliAnalysisManager.h" | |
28 | #include "TRandom.h" | |
29 | ||
30 | ||
31 | Float_t AliAnalysisTaskK0sBayes::fPtKsMin[AliAnalysisTaskK0sBayes::nPtBin] = {0.,0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4.,5.,6.};// ptmin bin | |
32 | Float_t AliAnalysisTaskK0sBayes::fPtKsMax[AliAnalysisTaskK0sBayes::nPtBin] = {0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4.,5.,6.,10.};// ptmax bin | |
33 | ||
34 | // STL includes | |
35 | //#include <iostream> | |
36 | //using namespace std; | |
37 | ||
38 | ClassImp(AliAnalysisTaskK0sBayes) | |
39 | //_____________________________________________________________________________ | |
40 | AliAnalysisTaskK0sBayes::AliAnalysisTaskK0sBayes(): | |
41 | AliAnalysisTaskSE(), | |
42 | fVtxCut(10.0), // cut on |vertex| < fVtxCut | |
43 | fEtaCut(0.8), // cut on |eta| < fEtaCut | |
44 | fMinPt(0.15), // cut on pt > fMinPt | |
45 | fIsMC(kFALSE), | |
46 | fQAsw(kFALSE), | |
47 | fNcluster(70), | |
48 | fFilterBit(1), | |
49 | fList(new TList()), | |
50 | fList2(new TList()), | |
51 | fList3(new TList()), | |
52 | fCentrality(-1), | |
53 | fPsi(0), | |
54 | fPtKs(0.), | |
55 | fPhiKs(0.), | |
56 | fEtaKs(0.), | |
57 | fMassV0(0.), | |
58 | fPtKp(0.), | |
59 | fPhiKp(0.), | |
60 | fEtaKp(0.), | |
61 | fPtKn(0.), | |
62 | fPhiKn(0.), | |
63 | fEtaKn(0.), | |
64 | fPidKp(0), | |
65 | fPidKn(0), | |
66 | fTOFTPCsignal(0), | |
67 | fCombsignal(0), | |
68 | fCutsDaughter(NULL), | |
69 | fPIDCombined(NULL), | |
70 | fContPid(NULL), | |
71 | fContPid2(NULL), | |
520899fb | 72 | fContUser(NULL), |
73 | fContUser2(NULL), | |
a8ad4709 | 74 | fNK0s(0), |
75 | fNpiPos(0), | |
76 | fNpiNeg(0), | |
77 | fHmismTOF(0), | |
9c668341 | 78 | fHchannelTOFdistr(0), |
520899fb | 79 | fTypeCol(2), |
8c1aafae | 80 | fPIDuserCut(NULL), |
9dd528f5 | 81 | fToEP(kFALSE), |
82 | fSpeciesRef(2) | |
a8ad4709 | 83 | { |
84 | // Default constructor (should not be used) | |
85 | fList->SetName("contKsBayes1"); | |
86 | fList2->SetName("contKsBayes2"); | |
87 | fList3->SetName("contKsBayes3"); | |
88 | ||
89 | fList->SetOwner(kTRUE); | |
90 | fList2->SetOwner(kTRUE); | |
91 | fList3->SetOwner(kTRUE); | |
92 | ||
93 | TFile *fmism = new TFile("$ALICE_ROOT/TOF/data/TOFmismatchDistr.root"); | |
94 | fHmismTOF = (TH1F *) fmism->Get("TOFmismDistr"); | |
95 | ||
96 | TFile *fchDist = new TFile("$ALICE_ROOT/TOF/data/TOFchannelDist.root"); | |
97 | fHchannelTOFdistr = (TH1D *) fchDist->Get("hTOFchanDist"); | |
f4c4ac9e | 98 | |
99 | for(Int_t i=0;i < nCentrBin;i++){ | |
100 | fElTOF[i] = NULL; | |
101 | fElTPC[i] = NULL; | |
102 | fPiTOF[i] = NULL; | |
103 | fPiTPC[i] = NULL; | |
104 | fKaTOF[i] = NULL; | |
105 | fKaTPC[i] = NULL; | |
106 | fPrTOF[i] = NULL; | |
107 | fPrTPC[i] = NULL; | |
108 | } | |
109 | for(Int_t i=0;i < 4;i++){ | |
110 | hMatching[i] = NULL; | |
111 | hTracking[i] = NULL; | |
112 | } | |
113 | for(Int_t i=0;i < 1000;i++){ | |
114 | fPhiK0s[i] = 0.0; | |
115 | fPtK0s[i] = 0.0; | |
116 | fIPiPos[i] = 0; | |
117 | fIPiNeg[i] = 0; | |
118 | fIpiP[i] = 0; | |
119 | fIpiN[i] = 0; | |
120 | fMassKs[i] = 0.0; | |
121 | } | |
a8ad4709 | 122 | } |
123 | ||
124 | //______________________________________________________________________________ | |
125 | AliAnalysisTaskK0sBayes::AliAnalysisTaskK0sBayes(const char *name): | |
126 | AliAnalysisTaskSE(name), | |
127 | fVtxCut(10.0), // cut on |vertex| < fVtxCut | |
128 | fEtaCut(0.8), // cut on |eta| < fEtaCut | |
129 | fMinPt(0.15), // cut on pt > fMinPt | |
130 | fIsMC(kFALSE), | |
131 | fQAsw(kFALSE), | |
132 | fNcluster(70), | |
133 | fFilterBit(1), | |
134 | fList(new TList()), | |
135 | fList2(new TList()), | |
136 | fList3(new TList()), | |
137 | fCentrality(-1), | |
138 | fPsi(0), | |
139 | fPtKs(0.), | |
140 | fPhiKs(0.), | |
141 | fEtaKs(0.), | |
142 | fMassV0(0.), | |
143 | fPtKp(0.), | |
144 | fPhiKp(0.), | |
145 | fEtaKp(0.), | |
146 | fPtKn(0.), | |
147 | fPhiKn(0.), | |
148 | fEtaKn(0.), | |
149 | fPidKp(0), | |
150 | fPidKn(0), | |
151 | fTOFTPCsignal(0), | |
152 | fCombsignal(0), | |
153 | fCutsDaughter(NULL), | |
154 | fPIDCombined(NULL), | |
155 | fContPid(NULL), | |
156 | fContPid2(NULL), | |
520899fb | 157 | fContUser(NULL), |
158 | fContUser2(NULL), | |
a8ad4709 | 159 | fNK0s(0), |
160 | fNpiPos(0), | |
161 | fNpiNeg(0), | |
162 | fHmismTOF(0), | |
9c668341 | 163 | fHchannelTOFdistr(0), |
520899fb | 164 | fTypeCol(2), |
8c1aafae | 165 | fPIDuserCut(NULL), |
9dd528f5 | 166 | fToEP(kFALSE), |
167 | fSpeciesRef(2) | |
a8ad4709 | 168 | { |
169 | ||
170 | DefineOutput(1, TList::Class()); | |
171 | DefineOutput(2, TList::Class()); | |
172 | DefineOutput(3, TList::Class()); | |
173 | DefineOutput(4, TList::Class()); | |
174 | ||
175 | // Output slot #1 writes into a TTree | |
176 | fList->SetName("contKsBayes1"); | |
177 | fList2->SetName("contKsBayes2"); | |
178 | fList3->SetName("contKsBayes3"); | |
179 | ||
180 | fList->SetOwner(kTRUE); | |
181 | fList2->SetOwner(kTRUE); | |
182 | fList3->SetOwner(kTRUE); | |
183 | ||
184 | TFile *fmism = new TFile("$ALICE_ROOT/TOF/data/TOFmismatchDistr.root"); | |
185 | fHmismTOF = (TH1F *) fmism->Get("TOFmismDistr"); | |
186 | ||
187 | TFile *fchDist = new TFile("$ALICE_ROOT/TOF/data/TOFchannelDist.root"); | |
188 | fHchannelTOFdistr = (TH1D *) fchDist->Get("hTOFchanDist"); | |
f4c4ac9e | 189 | |
190 | for(Int_t i=0;i < nCentrBin;i++){ | |
191 | fElTOF[i] = NULL; | |
192 | fElTPC[i] = NULL; | |
193 | fPiTOF[i] = NULL; | |
194 | fPiTPC[i] = NULL; | |
195 | fKaTOF[i] = NULL; | |
196 | fKaTPC[i] = NULL; | |
197 | fPrTOF[i] = NULL; | |
198 | fPrTPC[i] = NULL; | |
199 | } | |
200 | for(Int_t i=0;i < 4;i++){ | |
201 | hMatching[i] = NULL; | |
202 | hTracking[i] = NULL; | |
203 | } | |
204 | for(Int_t i=0;i < 1000;i++){ | |
205 | fPhiK0s[i] = 0.0; | |
206 | fPtK0s[i] = 0.0; | |
207 | fIPiPos[i] = 0; | |
208 | fIPiNeg[i] = 0; | |
209 | fIpiP[i] = 0; | |
210 | fIpiN[i] = 0; | |
211 | fMassKs[i] = 0.0; | |
212 | } | |
a8ad4709 | 213 | } |
214 | //_____________________________________________________________________________ | |
215 | AliAnalysisTaskK0sBayes::~AliAnalysisTaskK0sBayes() | |
216 | { | |
217 | ||
218 | } | |
219 | ||
220 | //______________________________________________________________________________ | |
221 | void AliAnalysisTaskK0sBayes::UserCreateOutputObjects() | |
222 | { | |
223 | ||
224 | fPIDCombined=new AliPIDCombined; | |
225 | fPIDCombined->SetDefaultTPCPriors(); | |
226 | fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF); | |
227 | ||
228 | Float_t invMmin = 0.497-0.005*8; | |
229 | Float_t invMmax = 0.497+0.005*8; | |
230 | ||
231 | const Int_t nBinPid = 14; | |
232 | ||
8c1aafae | 233 | Int_t binPid[nBinPid] = {1/*ptKs*/,1+7*(!fToEP)/*EtaPiP*/,20/*pt+*/,1/*pt-*/,5/*P+*/,1/*P-*/,2/*TOFmatch+*/,1/*TOFmatch-*/,2/*istrue*/,4/*Nsigma+*/,1/*Nsigma-*/,1+4*(fToEP)/*DeltaPhi+*/,1/*DeltaPhi-*/,1+4*(fToEP)/*Psi*/}; |
a8ad4709 | 234 | |
8c1aafae | 235 | Int_t binPid2[nBinPid] = {1/*ptKs*/,1+7*(!fToEP)/*EtaPiN*/,1/*pt+*/,20/*pt-*/,1/*P+*/,5/*P-*/,1/*TOFmatch+*/,2/*TOFmatch-*/,2/*istrue*/,1/*Nsigma+*/,4/*Nsigma-*/,1/*DeltaPhi+*/,1+4*(fToEP)/*DeltaPhi-*/,1+4*(fToEP)/*Psi*/}; |
a8ad4709 | 236 | |
237 | fContPid = new AliPIDperfContainer("contPID",nBinPid,binPid); | |
238 | fContPid->SetTitleX("M_{K^{0}_{s}}"); | |
239 | fContPid->SetTitleY("centrality (%)"); | |
240 | fContPid->SetVarName(0,"p_{T}^{K^{0}_{s}}"); | |
241 | fContPid->SetVarRange(0,0,10); | |
242 | fContPid->SetVarName(1,"#eta^{K^{0}_{s}}"); | |
243 | fContPid->SetVarRange(1,-0.8,0.8); | |
244 | fContPid->SetVarName(2,"p_{T}^{Kp}"); | |
245 | fContPid->SetVarRange(2,0.3,4.3); | |
246 | fContPid->SetVarName(3,"p_{T}^{Kn}"); | |
247 | fContPid->SetVarRange(3,0.3,4.3); | |
248 | fContPid->SetVarName(4,"BayesProb^{Kp}"); | |
249 | fContPid->SetVarRange(4,0,1.); | |
250 | fContPid->SetVarName(5,"BayesProb^{Kn}"); | |
251 | fContPid->SetVarRange(5,0,1.); | |
252 | fContPid->SetVarName(6,"isTOFmatch^{Kp}"); | |
253 | fContPid->SetVarRange(6,-0.5,1.5); | |
254 | fContPid->SetVarName(7,"isTOFmatch^{Kn}"); | |
255 | fContPid->SetVarRange(7,-0.5,1.5); | |
256 | fContPid->SetVarName(8,"isKsTrue^{Kn}"); | |
257 | fContPid->SetVarRange(8,-0.5,1.5); | |
258 | fContPid->SetVarName(9,"N#sigma^{Kp}"); | |
259 | fContPid->SetVarRange(9,1.25,6.25); | |
260 | fContPid->SetVarName(10,"N#sigma^{Kn}"); | |
261 | fContPid->SetVarRange(10,1.25,6.25); | |
262 | fContPid->SetVarName(11,"#Delta#phi^{Kp}"); | |
263 | fContPid->SetVarRange(11,-TMath::Pi(),TMath::Pi()); | |
264 | fContPid->SetVarName(12,"#Delta#phi^{Kn}"); | |
265 | fContPid->SetVarRange(12,-TMath::Pi(),TMath::Pi()); | |
266 | fContPid->SetVarName(13,"#Psi"); | |
267 | fContPid->SetVarRange(13,-TMath::Pi()/2,TMath::Pi()/2); | |
268 | ||
269 | fContPid2 = new AliPIDperfContainer("contPID2",nBinPid,binPid2); | |
270 | fContPid2->SetTitleX("M_{K^{0}_{s}}"); | |
271 | fContPid2->SetTitleY("centrality (%)"); | |
272 | fContPid2->SetVarName(0,"p_{T}^{K^{0}_{s}}"); | |
273 | fContPid2->SetVarRange(0,0,10); | |
274 | fContPid2->SetVarName(1,"#eta^{K^{0}_{s}}"); | |
275 | fContPid2->SetVarRange(1,-0.8,0.8); | |
276 | fContPid2->SetVarName(2,"p_{T}^{Kp}"); | |
277 | fContPid2->SetVarRange(2,0.3,4.3); | |
278 | fContPid2->SetVarName(3,"p_{T}^{Kn}"); | |
279 | fContPid2->SetVarRange(3,0.3,4.3); | |
280 | fContPid2->SetVarName(4,"BayesProb^{Kp}"); | |
281 | fContPid2->SetVarRange(4,0,1.); | |
282 | fContPid2->SetVarName(5,"BayesProb^{Kn}"); | |
283 | fContPid2->SetVarRange(5,0,1.); | |
284 | fContPid2->SetVarName(6,"isTOFmatch^{Kp}"); | |
285 | fContPid2->SetVarRange(6,-0.5,1.5); | |
286 | fContPid2->SetVarName(7,"isTOFmatch^{Kn}"); | |
287 | fContPid2->SetVarRange(7,-0.5,1.5); | |
288 | fContPid2->SetVarName(8,"isKsTrue^{Kn}"); | |
289 | fContPid2->SetVarRange(8,-0.5,1.5); | |
290 | fContPid2->SetVarName(9,"N#sigma^{Kp}"); | |
291 | fContPid2->SetVarRange(9,1.25,6.25); | |
292 | fContPid2->SetVarName(10,"N#sigma^{Kn}"); | |
293 | fContPid2->SetVarRange(10,1.25,6.25); | |
294 | fContPid2->SetVarName(11,"#Delta#phi^{Kp}"); | |
295 | fContPid2->SetVarRange(11,-TMath::Pi(),TMath::Pi()); | |
296 | fContPid2->SetVarName(12,"#Delta#phi^{Kn}"); | |
297 | fContPid2->SetVarRange(12,-TMath::Pi(),TMath::Pi()); | |
298 | fContPid2->SetVarName(13,"#Psi"); | |
299 | fContPid2->SetVarRange(13,-TMath::Pi()/2,TMath::Pi()/2); | |
300 | ||
a8ad4709 | 301 | const Int_t nDETsignal = 100; // mass |
302 | Double_t binDETsignal[nDETsignal+1]; | |
303 | for(Int_t i=0;i<nDETsignal+1;i++){ | |
304 | binDETsignal[i] = invMmin + i*(invMmax - invMmin) / nDETsignal; | |
305 | } | |
306 | const Int_t nDETsignal2 = 10; // centrality | |
307 | Double_t binDETsignal2[nDETsignal2+1]; | |
308 | for(Int_t i=0;i<nDETsignal2+1;i++){ | |
309 | binDETsignal2[i] = i*100./ nDETsignal2; | |
310 | } | |
311 | fContPid->AddSpecies("K0s",nDETsignal,binDETsignal,nDETsignal2,binDETsignal2); | |
312 | fContPid2->AddSpecies("K0s2",nDETsignal,binDETsignal,nDETsignal2,binDETsignal2); | |
313 | ||
314 | fList->Add(fContPid); | |
315 | fList->Add(fContPid2); | |
316 | ||
520899fb | 317 | const Int_t nBinUser = 6; |
318 | Int_t binUser[nBinUser] = {8/*Eta*/,20/*pt*/,2/*istrue*/,4/*whatSelection*/,1/*DeltaPhi*/,1/*Psi*/}; | |
319 | fContUser = new AliPIDperfContainer("contUserPID",nBinUser,binUser); | |
320 | fContUser->SetTitleX("M_{K^{0}_{s}}"); | |
321 | fContUser->SetTitleY("centrality (%)"); | |
322 | fContUser->SetVarName(0,"#eta^{K^{0}_{s}}"); | |
323 | fContUser->SetVarRange(0,-0.8,0.8); | |
324 | fContUser->SetVarName(1,"p_{T}"); | |
325 | fContUser->SetVarRange(1,0.3,4.3); | |
326 | fContUser->SetVarName(2,"isKsTrue^{Kn}"); | |
327 | fContUser->SetVarRange(2,-0.5,1.5); | |
328 | fContUser->SetVarName(3,"whatSelected"); // 0=no, 1=pi, 2=K, 3=p | |
329 | fContUser->SetVarRange(3,-0.5,3.5); | |
330 | fContUser->SetVarName(4,"#Delta#phi"); | |
331 | fContUser->SetVarRange(4,-TMath::Pi(),TMath::Pi()); | |
332 | fContUser->SetVarName(5,"#Psi"); | |
333 | fContUser->SetVarRange(5,-TMath::Pi()/2,TMath::Pi()/2); | |
334 | ||
335 | fContUser2 = new AliPIDperfContainer("contUserPID2",nBinUser,binUser); | |
336 | fContUser2->SetTitleX("M_{K^{0}_{s}}"); | |
337 | fContUser2->SetTitleY("centrality (%)"); | |
338 | fContUser2->SetVarName(0,"#eta^{K^{0}_{s}}"); | |
339 | fContUser2->SetVarRange(0,-0.8,0.8); | |
340 | fContUser2->SetVarName(1,"p_{T}"); | |
341 | fContUser2->SetVarRange(1,0.3,4.3); | |
342 | fContUser2->SetVarName(2,"isKsTrue^{Kn}"); | |
343 | fContUser2->SetVarRange(2,-0.5,1.5); | |
344 | fContUser2->SetVarName(3,"whatSelected"); | |
345 | fContUser2->SetVarRange(3,-0.5,3.5); | |
346 | fContUser2->SetVarName(4,"#Delta#phi"); | |
347 | fContUser2->SetVarRange(4,-TMath::Pi(),TMath::Pi()); | |
348 | fContUser2->SetVarName(5,"#Psi"); | |
349 | fContUser2->SetVarRange(5,-TMath::Pi()/2,TMath::Pi()/2); | |
350 | ||
351 | fContUser->AddSpecies("K0s",nDETsignal,binDETsignal,nDETsignal2,binDETsignal2); | |
352 | fContUser2->AddSpecies("K0s2",nDETsignal,binDETsignal,nDETsignal2,binDETsignal2); | |
353 | ||
354 | fList->Add(fContUser); | |
355 | fList->Add(fContUser2); | |
356 | ||
a8ad4709 | 357 | hMatching[0] = new TH2F("hMatchAll","TOF matched (all);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100); |
358 | hMatching[1] = new TH2F("hMatchPi","TOF matched (#pi);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100); | |
359 | hMatching[2] = new TH2F("hMatchKa","TOF matched (K);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100); | |
360 | hMatching[3] = new TH2F("hMatchPr","TOF matched (p);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100); | |
361 | ||
362 | hTracking[0] = new TH2F("hTrackingAll","TPC tracks (all);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100); | |
363 | hTracking[1] = new TH2F("hTrackingPi","TPC tracks (#pi);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100); | |
364 | hTracking[2] = new TH2F("hTrackingKa","TPC tracks (K);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100); | |
365 | hTracking[3] = new TH2F("hTrackingPr","TPC tracks (p);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100); | |
366 | ||
367 | fList2->Add(hMatching[0]); | |
368 | fList2->Add(hMatching[1]); | |
369 | fList2->Add(hMatching[2]); | |
370 | fList2->Add(hMatching[3]); | |
371 | fList2->Add(hTracking[0]); | |
372 | fList2->Add(hTracking[1]); | |
373 | fList2->Add(hTracking[2]); | |
374 | fList2->Add(hTracking[3]); | |
375 | ||
376 | fTOFTPCsignal = new TH2F("hTOFTPCsignal","TOF-TPC signal for pions (0.8 < p_{T} < 0.9 GeV/#it{c}, cent. = 0-20);N#sigma_{TOF};N#sigma_{TPC}",100,-5,5,100,-5,5); | |
377 | fList2->Add(fTOFTPCsignal); | |
378 | fCombsignal = new TH1F("hCombsignal","Combined signal for pions (0.8 < p_{T} < 0.9 GeV/#it{c}, cent. = 0-20);N#sigma",100,0,5); | |
379 | fList2->Add(fCombsignal); | |
380 | ||
381 | // QA plots | |
382 | char name[100],title[400]; | |
383 | for(Int_t i=0;i < nCentrBin;i++){ | |
384 | snprintf(name,100,"hPiTPCQA_%i",i); | |
385 | snprintf(title,400,"TPC signal for #pi cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%'); | |
386 | fPiTPC[i] = new TH2F(name,title,50,0,4,200,-10,10); | |
387 | fList3->Add(fPiTPC[i]); | |
388 | ||
389 | snprintf(name,100,"hKaTPCQA_%i",i); | |
390 | snprintf(title,400,"TPC signal for K cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%'); | |
391 | fKaTPC[i] = new TH2F(name,title,50,0,4,200,-10,10); | |
392 | fList3->Add(fKaTPC[i]); | |
393 | ||
394 | snprintf(name,100,"hPrTPCQA_%i",i); | |
395 | snprintf(title,400,"TPC signal for p cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%'); | |
396 | fPrTPC[i] = new TH2F(name,title,50,0,4,200,-10,10); | |
397 | fList3->Add(fPrTPC[i]); | |
398 | ||
399 | snprintf(name,100,"hElTPCQA_%i",i); | |
400 | snprintf(title,400,"TPC signal for e cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%'); | |
401 | fElTPC[i] = new TH2F(name,title,50,0,4,200,-10,10); | |
402 | fList3->Add(fElTPC[i]); | |
403 | ||
404 | snprintf(name,100,"hPiTOFQA_%i",i); | |
405 | snprintf(title,400,"TOF signal for #pi cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%'); | |
406 | fPiTOF[i] = new TH2F(name,title,50,0,4,200,-10,10); | |
407 | fList3->Add(fPiTOF[i]); | |
408 | ||
409 | snprintf(name,100,"hKaTOFQA_%i",i); | |
410 | snprintf(title,400,"TOF signal for K cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%'); | |
411 | fKaTOF[i] = new TH2F(name,title,50,0,4,200,-10,10); | |
412 | fList3->Add(fKaTOF[i]); | |
413 | ||
414 | snprintf(name,100,"hPrTOFQA_%i",i); | |
415 | snprintf(title,400,"TOF signal for p cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%'); | |
416 | fPrTOF[i] = new TH2F(name,title,50,0,4,200,-10,10); | |
417 | fList3->Add(fPrTOF[i]); | |
418 | ||
419 | snprintf(name,100,"hElTOFQA_%i",i); | |
420 | snprintf(title,400,"TOF signal for e cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%'); | |
421 | fElTOF[i] = new TH2F(name,title,50,0,4,200,-10,10); | |
422 | fList3->Add(fElTOF[i]); | |
423 | ||
424 | } | |
425 | ||
426 | // Post output data. | |
427 | PostData(1, fList); | |
428 | PostData(2, fList2); | |
429 | PostData(3, fList3); | |
430 | } | |
431 | ||
432 | //______________________________________________________________________________ | |
433 | void AliAnalysisTaskK0sBayes::UserExec(Option_t *) | |
434 | { | |
435 | // Main loop | |
436 | // Called for each event | |
437 | ||
438 | fOutputAOD = dynamic_cast<AliAODEvent*>(InputEvent()); | |
439 | if(!fOutputAOD){ | |
440 | Printf("%s:%d AODEvent not found in Input Manager",(char*)__FILE__,__LINE__); | |
441 | this->Dump(); | |
442 | return; | |
443 | } | |
444 | ||
445 | Float_t zvtx = GetVertex(fOutputAOD); | |
446 | ||
447 | ||
448 | ||
449 | //Get the MC object | |
450 | if(fIsMC){ | |
451 | AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(fOutputAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName())); | |
452 | if (!mcHeader) { | |
453 | AliError("Could not find MC Header in AOD"); | |
454 | return; | |
455 | } | |
456 | } | |
457 | ||
458 | if (TMath::Abs(zvtx) < fVtxCut) { | |
459 | ||
460 | SelectK0s(); | |
461 | ||
462 | //Centrality | |
463 | Float_t v0Centr = -10.; | |
464 | Float_t trkCentr = -10.; | |
465 | AliCentrality *centrality = fOutputAOD->GetCentrality(); | |
466 | if (centrality){ | |
467 | trkCentr = centrality->GetCentralityPercentile("V0M"); | |
468 | v0Centr = centrality->GetCentralityPercentile("TRK"); | |
469 | } | |
470 | ||
cd71f9f4 | 471 | if(!fTypeCol){ |
472 | v0Centr=100./(fOutputAOD->GetNumberOfTracks()/12.+1); | |
473 | trkCentr=v0Centr; | |
474 | } | |
475 | ||
9c668341 | 476 | if((TMath::Abs(v0Centr - trkCentr) < 5.0 || (fTypeCol!=2)) && v0Centr>0){ // consistency cut on centrality selection |
a8ad4709 | 477 | fCentrality = v0Centr; |
478 | Analyze(fOutputAOD); // Do analysis!!!! | |
479 | ||
480 | } | |
481 | } | |
482 | ||
483 | } | |
484 | ||
485 | //________________________________________________________________________ | |
486 | void AliAnalysisTaskK0sBayes::Analyze(AliAODEvent* aodEvent) | |
487 | { | |
488 | ||
489 | Int_t ntrack = aodEvent->GetNumberOfTracks(); | |
490 | ||
491 | fPtKp=0.,fPhiKp=0.,fEtaKp=0.; | |
492 | fPtKn=0.,fPhiKn=0.,fEtaKn=0.; | |
493 | fPidKp=0,fPidKn=0; | |
494 | fMassV0=-1; | |
495 | ||
496 | TLorentzVector ksV; | |
497 | ||
498 | Double_t px,py,pz,E; | |
499 | ||
500 | Float_t invMmin = 0.497-0.005*8; | |
501 | Float_t invMmax = 0.497+0.005*8; | |
502 | ||
503 | Int_t icentr = 8; | |
504 | if(fCentrality < 0) icentr = 8; | |
505 | else if(fCentrality < 10) icentr = 0; | |
506 | else if(fCentrality < 20) icentr = 1; | |
507 | else if(fCentrality < 30) icentr = 2; | |
508 | else if(fCentrality < 40) icentr = 3; | |
509 | else if(fCentrality < 50) icentr = 4; | |
510 | else if(fCentrality < 60) icentr = 5; | |
511 | else if(fCentrality < 70) icentr = 6; | |
512 | else if(fCentrality < 80) icentr = 7; | |
513 | ||
514 | Float_t addMismatchForMC = 0.005; | |
faa6d35f | 515 | if(fCentrality < 50) addMismatchForMC += 0.005; |
a8ad4709 | 516 | if(fCentrality < 20) addMismatchForMC += 0.02; |
517 | ||
faa6d35f | 518 | if(fTypeCol == 0 || fTypeCol == 1) addMismatchForMC = 0.005; |
9c668341 | 519 | |
a8ad4709 | 520 | fPsi = 0; |
521 | /* Compute TPC EP */ | |
522 | Double_t Qx2 = 0, Qy2 = 0; | |
523 | Double_t Qx3 = 0, Qy3 = 0; | |
524 | for(Int_t iT = 0; iT < ntrack; iT++) { | |
525 | AliAODTrack* aodTrack = aodEvent->GetTrack(iT); | |
526 | ||
527 | if (!aodTrack){ | |
528 | continue; | |
529 | } | |
530 | ||
531 | Bool_t trkFlag = aodTrack->TestFilterBit(fFilterBit); | |
532 | ||
533 | if ((TMath::Abs(aodTrack->Eta()) > 0.8) || (aodTrack->Pt() < 0.2) || (aodTrack->GetTPCNcls() < fNcluster) || !trkFlag) | |
534 | continue; | |
535 | ||
536 | Double_t b[2] = {-99., -99.}; | |
537 | Double_t bCov[3] = {-99., -99., -99.}; | |
538 | if (!aodTrack->PropagateToDCA(aodEvent->GetPrimaryVertex(), aodEvent->GetMagneticField(), 100., b, bCov)) | |
539 | continue; | |
540 | ||
541 | if ((TMath::Abs(b[0]) > 3.0) || (TMath::Abs(b[1]) > 2.4)) | |
542 | continue; | |
543 | ||
544 | Qx2 += TMath::Cos(2*aodTrack->Phi()); | |
545 | Qy2 += TMath::Sin(2*aodTrack->Phi()); | |
546 | Qx3 += TMath::Cos(3*aodTrack->Phi()); | |
547 | Qy3 += TMath::Sin(3*aodTrack->Phi()); | |
548 | ||
549 | } | |
550 | ||
551 | fPsi = TMath::ATan2(Qy2, Qx2)/2.; | |
552 | ||
553 | AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); | |
554 | AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); | |
555 | AliPIDResponse *PIDResponse=inputHandler->GetPIDResponse(); | |
556 | ||
55022e85 | 557 | PIDResponse->SetTOFResponse(aodEvent,AliPIDResponse::kTOF_T0); |
558 | ||
a8ad4709 | 559 | fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF); |
560 | ||
f4c4ac9e | 561 | Double_t probP[10] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; |
562 | Double_t probN[10] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; | |
a8ad4709 | 563 | Double_t nSigmaTPC,nSigmaTOF=6,nSigmaTPC2,nSigmaTOF2=6,nSigmaComb,nSigmaComb2; |
9dd528f5 | 564 | Double_t nSigmaTPCRef,nSigmaTOFRef=6,nSigmaTPC2Ref,nSigmaTOF2Ref=6,nSigmaCombRef,nSigmaComb2Ref; |
a8ad4709 | 565 | |
566 | ||
567 | AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName())); | |
568 | TClonesArray *mcArray = NULL; | |
569 | if (mcHeader) | |
570 | mcArray = (TClonesArray*)aodEvent->GetList()->FindObject(AliAODMCParticle::StdBranchName()); | |
571 | ||
572 | Int_t nmc = 0; | |
573 | if(mcArray) | |
574 | nmc = mcArray->GetEntries(); | |
575 | ||
576 | for(Int_t i=0;i < ntrack;i++){ // loop on tracks | |
577 | AliAODTrack* track = aodEvent->GetTrack(i); | |
578 | ||
579 | AliAODMCParticle *mcp = NULL; | |
580 | Int_t pdg = 0; | |
581 | ||
582 | if (!track){ | |
583 | continue; | |
584 | } | |
585 | ||
586 | Int_t tofMatch = (track->GetStatus() & AliVTrack::kTOFout) && (track->GetStatus() & AliVTrack::kTIME); | |
587 | ||
588 | Int_t label = -1; | |
589 | if(mcArray){ | |
590 | label = track->GetLabel(); | |
591 | if(label != -1 && label < nmc){ | |
592 | label = TMath::Abs(label); | |
593 | mcp = (AliAODMCParticle*)mcArray->At(label); | |
594 | pdg = TMath::Abs(mcp->GetPdgCode()); | |
595 | } | |
596 | else | |
597 | label = -1; | |
598 | } | |
599 | else{ | |
600 | /*UInt_t detUsed =*/ fPIDCombined->ComputeProbabilities(track, PIDResponse, probP); | |
601 | } | |
602 | ||
603 | if(track->TestFilterBit(fFilterBit) && TMath::Abs(track->Eta()) < 0.8 && track->Charge() > 0){ | |
604 | hTracking[0]->Fill(track->Pt(),fCentrality); | |
605 | if(pdg == 211) | |
606 | hTracking[1]->Fill(track->Pt(),fCentrality); | |
607 | else if(pdg == 321) | |
608 | hTracking[2]->Fill(track->Pt(),fCentrality); | |
609 | else if(pdg == 2212) | |
610 | hTracking[3]->Fill(track->Pt(),fCentrality); | |
611 | else if(! mcp){ // Fill matching histo with the prob | |
612 | hTracking[1]->Fill(track->Pt(),fCentrality,probP[2]); | |
613 | hTracking[2]->Fill(track->Pt(),fCentrality,probP[3]); | |
614 | hTracking[3]->Fill(track->Pt(),fCentrality,probP[4]); | |
615 | } | |
616 | } | |
617 | ||
618 | if(!tofMatch) continue; | |
619 | ||
620 | if(track->TestFilterBit(fFilterBit) && TMath::Abs(track->Eta()) < 0.8 && track->Charge() > 0){ | |
621 | hMatching[0]->Fill(track->Pt(),fCentrality); | |
622 | if(pdg == 211) | |
623 | hMatching[1]->Fill(track->Pt(),fCentrality); | |
624 | else if(pdg == 321) | |
625 | hMatching[2]->Fill(track->Pt(),fCentrality); | |
626 | else if(pdg == 2212) | |
627 | hMatching[3]->Fill(track->Pt(),fCentrality); | |
628 | else if(! mcp){ // Fill matching histo with the prob | |
629 | hMatching[1]->Fill(track->Pt(),fCentrality,probP[2]); | |
630 | hMatching[2]->Fill(track->Pt(),fCentrality,probP[3]); | |
631 | hMatching[3]->Fill(track->Pt(),fCentrality,probP[4]); | |
632 | } | |
633 | } | |
634 | } | |
635 | ||
007df888 | 636 | // Int_t pdg1 = -1; |
637 | // Int_t pdg2 = -1; | |
a8ad4709 | 638 | |
639 | ||
640 | // start analysis K0s | |
641 | for(Int_t i=0;i < ntrack;i++){ // loop on positive tracks | |
642 | AliAODTrack* KpTrack = aodEvent->GetTrack(i); | |
643 | ||
644 | if (!KpTrack){ | |
645 | continue; | |
646 | } | |
647 | ||
648 | if(!(KpTrack->Charge() > 0 && KpTrack->Pt() > 0.3 && TMath::Abs(KpTrack->Eta()) < 0.8)) continue; | |
649 | ||
650 | nSigmaComb=5; | |
9dd528f5 | 651 | nSigmaCombRef=5; |
e34b28fe | 652 | nSigmaTOF = 5; |
9dd528f5 | 653 | nSigmaTOFRef = 5; |
a8ad4709 | 654 | fPtKp=KpTrack->Pt(),fPhiKp=KpTrack->Phi(),fEtaKp=KpTrack->Eta(); |
655 | fPidKp=0; | |
656 | ||
657 | UInt_t detUsedP = fPIDCombined->ComputeProbabilities(KpTrack, PIDResponse, probP); | |
658 | ||
659 | Double_t oldpP[10]; | |
660 | fPIDCombined->GetPriors(KpTrack, oldpP, PIDResponse, detUsedP); | |
661 | ||
a8ad4709 | 662 | nSigmaTPC = PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kPion); |
9dd528f5 | 663 | nSigmaTPCRef = PIDResponse->NumberOfSigmasTPC(KpTrack,(AliPID::EParticleType) fSpeciesRef); |
a8ad4709 | 664 | |
665 | if(! (TMath::Abs(nSigmaTPC) < 5)) continue; | |
666 | ||
667 | Int_t tofMatch1 = (KpTrack->GetStatus() & AliVTrack::kTOFout) && (KpTrack->GetStatus() & AliVTrack::kTIME); | |
668 | ||
9c668341 | 669 | /* |
a8ad4709 | 670 | if(mcArray){ |
671 | Int_t labelK = TMath::Abs(KpTrack->GetLabel()); | |
672 | AliAODMCParticle *mcp1 = (AliAODMCParticle*)mcArray->At(labelK); | |
9c668341 | 673 | pdg1 = TMath::Abs(mcp1->GetPdgCode()); |
a8ad4709 | 674 | } |
9c668341 | 675 | */ |
a8ad4709 | 676 | |
677 | fPidKp = Int_t(probP[2]*100); | |
678 | ||
679 | if(tofMatch1){ | |
680 | if(!IsChannelValid(TMath::Abs(KpTrack->Eta()))){ | |
681 | // remove this tof hit | |
682 | fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC); | |
683 | detUsedP = fPIDCombined->ComputeProbabilities(KpTrack, PIDResponse, probP); | |
684 | fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF); | |
685 | fPidKp = Int_t(probP[4]*100); | |
686 | tofMatch1=0; | |
687 | } | |
688 | else{ | |
689 | if(probP[2] > probP[3] && probP[2] > probP[4] && probP[2] > probP[0]) fPidKp += 128; // max prob | |
690 | ||
691 | nSigmaTOF = PIDResponse->NumberOfSigmasTOF(KpTrack,AliPID::kProton); | |
cd71f9f4 | 692 | if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kProton))<1) fPrTOF[icentr]->Fill(fPtKp,nSigmaTOF); |
693 | if(TMath::Abs(nSigmaTOF)<1) fPrTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kProton)); | |
a8ad4709 | 694 | nSigmaTOF = PIDResponse->NumberOfSigmasTOF(KpTrack,AliPID::kElectron); |
cd71f9f4 | 695 | if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kElectron))<1) fElTOF[icentr]->Fill(fPtKp,nSigmaTOF); |
696 | if(TMath::Abs(nSigmaTOF)<1) fElTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kElectron)); | |
a8ad4709 | 697 | nSigmaTOF = PIDResponse->NumberOfSigmasTOF(KpTrack,AliPID::kKaon); |
cd71f9f4 | 698 | if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kKaon))<1) fKaTOF[icentr]->Fill(fPtKp,nSigmaTOF); |
699 | if(TMath::Abs(nSigmaTOF)<1) fKaTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kKaon)); | |
a8ad4709 | 700 | nSigmaTOF = PIDResponse->NumberOfSigmasTOF(KpTrack,AliPID::kPion); |
cd71f9f4 | 701 | if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kPion))<1) fPiTOF[icentr]->Fill(fPtKp,nSigmaTOF); |
702 | if(TMath::Abs(nSigmaTOF)<1) fPiTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kPion)); | |
9dd528f5 | 703 | nSigmaTOFRef = PIDResponse->NumberOfSigmasTOF(KpTrack,(AliPID::EParticleType) fSpeciesRef); |
704 | ||
a8ad4709 | 705 | if(fIsMC){ |
706 | Float_t mismAdd = addMismatchForMC; | |
707 | if(KpTrack->Pt() < 1) mismAdd = addMismatchForMC/KpTrack->Pt(); | |
708 | ||
709 | if(gRandom->Rndm() < mismAdd){ | |
710 | Float_t etaAbs = TMath::Abs(KpTrack->Eta()); | |
711 | Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs); | |
712 | channel = channel % 8736; | |
713 | Float_t distIP = fHchannelTOFdistr->GetBinContent(channel); | |
714 | ||
715 | // generate random time | |
a16898fb | 716 | Float_t timeRandom = fHmismTOF->GetRandom() + distIP*3.35655419905265973e+01; |
fc9b31a7 | 717 | Double_t times[AliPID::kSPECIESC]; |
718 | KpTrack->GetIntegratedTimes(times,AliPID::kSPECIESC); | |
9dd528f5 | 719 | nSigmaTOF = TMath::Abs(timeRandom - times[2])/PIDResponse->GetTOFResponse().GetExpectedSigma(KpTrack->P(), times[2], AliPID::kPion); |
720 | nSigmaTOFRef = TMath::Abs(timeRandom - times[fSpeciesRef])/PIDResponse->GetTOFResponse().GetExpectedSigma(KpTrack->P(), times[fSpeciesRef], fSpeciesRef); | |
a8ad4709 | 721 | } |
722 | } | |
723 | ||
724 | if(fCentrality < 20 && KpTrack->Pt() < 0.9 && KpTrack->Pt() > 0.8)fTOFTPCsignal->Fill(nSigmaTOF,nSigmaTPC); | |
63d1d548 | 725 | nSigmaTOF = TMath::Abs(nSigmaTOF); |
a8ad4709 | 726 | |
727 | if(nSigmaTOF < 2) fPidKp += 256; | |
728 | else if(nSigmaTOF < 3) fPidKp += 512; | |
729 | } | |
730 | } | |
731 | ||
732 | if(tofMatch1){ | |
733 | nSigmaComb = TMath::Sqrt(nSigmaTOF*nSigmaTOF + nSigmaTPC*nSigmaTPC); | |
9dd528f5 | 734 | nSigmaCombRef = TMath::Sqrt(nSigmaTOFRef*nSigmaTOFRef + nSigmaTPCRef*nSigmaTPCRef); |
a8ad4709 | 735 | if(nSigmaTOF < 5 && fCentrality < 20 && KpTrack->Pt() < 0.9 && KpTrack->Pt() > 0.8){ |
736 | fCombsignal->Fill(nSigmaComb); | |
737 | } | |
738 | } else { | |
739 | nSigmaComb = TMath::Abs(nSigmaTPC); | |
9dd528f5 | 740 | nSigmaCombRef = TMath::Abs(nSigmaTPCRef); |
a8ad4709 | 741 | } |
742 | ||
743 | // use sigmaTOF instead of sigmaComb | |
d82096df | 744 | nSigmaTOFRef = TMath::Abs(nSigmaTOFRef); |
745 | ||
9dd528f5 | 746 | if(tofMatch1){ |
747 | nSigmaComb = nSigmaTOF; | |
748 | nSigmaCombRef = nSigmaTOFRef; | |
749 | } | |
a8ad4709 | 750 | |
751 | if(nSigmaComb < 2) nSigmaComb = 2; | |
752 | else if(nSigmaComb < 3) nSigmaComb = 3; | |
753 | else if(nSigmaComb < 5) nSigmaComb = 4.99; | |
754 | else nSigmaComb = 6; | |
755 | ||
9dd528f5 | 756 | if(nSigmaCombRef < 2) nSigmaCombRef = 2; |
757 | else if(nSigmaCombRef < 3) nSigmaCombRef = 3; | |
758 | else if(nSigmaCombRef < 5) nSigmaCombRef = 4.99; | |
759 | else nSigmaCombRef = 6; | |
760 | ||
a8ad4709 | 761 | Int_t iks=-1; |
762 | for(Int_t k=0;k < fNK0s;k++){ // find the K0s which contains the positive track | |
763 | if(i == fIpiP[k]) iks = k; | |
764 | } | |
765 | ||
766 | if(fPtKp > 4.299) fPtKp = 4.299; | |
767 | ||
768 | if(iks > -1 && fIpiN[iks] > -1){ | |
769 | //for(Int_t j=0;j < ntrack;j++){ // loop on negative tracks | |
770 | Int_t j = fIpiN[iks]; | |
771 | AliAODTrack* KnTrack = aodEvent->GetTrack(j); | |
772 | ||
773 | if (!KnTrack){ | |
774 | continue; | |
775 | } | |
776 | ||
777 | if(!(KnTrack->Charge() < 0 && KnTrack->Pt() > 0.3 && TMath::Abs(KnTrack->Eta()) < 0.8)) continue; | |
778 | ||
779 | fPtKn=KnTrack->Pt(),fPhiKn=KnTrack->Phi(),fEtaKn=KnTrack->Eta(); | |
780 | fPidKn=0; | |
781 | ||
782 | UInt_t detUsedN = fPIDCombined->ComputeProbabilities(KnTrack, PIDResponse, probN); | |
783 | Double_t oldpN[10]; | |
784 | fPIDCombined->GetPriors(KnTrack, oldpN, PIDResponse, detUsedN); | |
785 | ||
786 | nSigmaTPC2 = PIDResponse->NumberOfSigmasTPC(KnTrack,AliPID::kPion); | |
9dd528f5 | 787 | nSigmaTPC2Ref = PIDResponse->NumberOfSigmasTPC(KnTrack,(AliPID::EParticleType) fSpeciesRef); |
a8ad4709 | 788 | |
789 | if(! (TMath::Abs(nSigmaTPC2) < 5)) continue; | |
790 | ||
791 | nSigmaComb2=5; | |
e34b28fe | 792 | nSigmaTOF2=5; |
9dd528f5 | 793 | nSigmaComb2Ref=5; |
794 | nSigmaTOF2Ref=5; | |
a8ad4709 | 795 | |
796 | Int_t tofMatch2 = (KnTrack->GetStatus() & AliVTrack::kTOFout) && (KnTrack->GetStatus() & AliVTrack::kTIME); | |
9c668341 | 797 | /* |
a8ad4709 | 798 | if(mcArray){ |
799 | Int_t labelK = TMath::Abs(KnTrack->GetLabel()); | |
800 | AliAODMCParticle *mcp2 = (AliAODMCParticle*)mcArray->At(labelK); | |
9c668341 | 801 | pdg2 = TMath::Abs(mcp2->GetPdgCode()); |
802 | } | |
803 | */ | |
a8ad4709 | 804 | |
805 | fPidKn = Int_t(probN[2]*100); | |
806 | ||
807 | if(tofMatch2){ | |
808 | if(!IsChannelValid(TMath::Abs(KnTrack->Eta()))){ | |
809 | // remove this tof hit | |
810 | fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC); | |
811 | detUsedP = fPIDCombined->ComputeProbabilities(KnTrack, PIDResponse, probN); | |
812 | fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF); | |
813 | fPidKn = Int_t(probN[4]*100); | |
814 | tofMatch2=0; | |
815 | } | |
816 | else{ | |
817 | if(probN[2] > probN[3] && probN[2] > probN[4] && probN[2] > probN[0]) fPidKn += 128; // max prob | |
818 | ||
9dd528f5 | 819 | nSigmaTOF2 = PIDResponse->NumberOfSigmasTOF(KnTrack,AliPID::kPion); |
a8ad4709 | 820 | nSigmaTOF2 = TMath::Abs(nSigmaTOF2); |
9dd528f5 | 821 | nSigmaTOF2Ref = PIDResponse->NumberOfSigmasTOF(KnTrack,(AliPID::EParticleType) fSpeciesRef); |
822 | nSigmaTOF2Ref = TMath::Abs(nSigmaTOF2Ref); | |
a8ad4709 | 823 | |
824 | if(fIsMC){ | |
825 | Float_t mismAdd = addMismatchForMC; | |
826 | if(KnTrack->Pt() < 1) mismAdd = addMismatchForMC/KnTrack->Pt(); | |
827 | ||
828 | if(gRandom->Rndm() < mismAdd){ | |
829 | Float_t etaAbs = TMath::Abs(KnTrack->Eta()); | |
830 | Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs); | |
831 | channel = channel % 8736; | |
832 | Float_t distIP = fHchannelTOFdistr->GetBinContent(channel); | |
833 | ||
834 | // generate random time | |
835 | Float_t timeRandom = fHmismTOF->GetRandom() + distIP*3.35655419905265973e+00; | |
fc9b31a7 | 836 | Double_t times[AliPID::kSPECIESC]; |
837 | KnTrack->GetIntegratedTimes(times,AliPID::kSPECIESC); | |
9dd528f5 | 838 | nSigmaTOF2 = TMath::Abs(timeRandom - times[2])/PIDResponse->GetTOFResponse().GetExpectedSigma(KnTrack->P(), times[2], AliPID::kPion); |
839 | nSigmaTOF2Ref = TMath::Abs(timeRandom - times[fSpeciesRef])/PIDResponse->GetTOFResponse().GetExpectedSigma(KnTrack->P(), times[fSpeciesRef], fSpeciesRef); | |
a8ad4709 | 840 | } |
841 | } | |
842 | ||
843 | if(fCentrality < 20 && KnTrack->Pt() < 1.2 && KnTrack->Pt() > 1) fTOFTPCsignal->Fill(nSigmaTOF2,nSigmaTPC2); | |
844 | ||
845 | if(nSigmaTOF2 < 2) fPidKn += 256; | |
846 | else if(nSigmaTOF2 < 3) fPidKn += 512; | |
847 | } | |
848 | } | |
849 | ||
850 | px = KpTrack->Px() + KnTrack->Px(); | |
851 | py = KpTrack->Py() + KnTrack->Py(); | |
852 | pz = KpTrack->Pz() + KnTrack->Pz(); | |
853 | E = TMath::Sqrt(KpTrack->P()*KpTrack->P() + 1.39e-01*1.39e-01); | |
854 | E += TMath::Sqrt(KnTrack->P()*KnTrack->P()+ 1.39e-01*1.39e-01); | |
855 | ||
856 | ksV.SetPxPyPzE(px,py,pz,E); | |
857 | fMassV0 = fMassKs[iks]; | |
858 | ||
859 | if(fMassV0 < invMmin || fMassV0 > invMmax) continue; | |
860 | ||
861 | ||
862 | fPtKs = ksV.Pt(); | |
863 | fEtaKs = ksV.Eta(); | |
864 | fPhiKs = ksV.Phi(); | |
865 | ||
866 | if(tofMatch2){ | |
867 | nSigmaComb2 = TMath::Sqrt(nSigmaTOF2*nSigmaTOF2+ nSigmaTPC2*nSigmaTPC2); | |
9dd528f5 | 868 | nSigmaComb2Ref = TMath::Sqrt(nSigmaTOF2Ref*nSigmaTOF2Ref+ nSigmaTPC2Ref*nSigmaTPC2Ref); |
a8ad4709 | 869 | if(nSigmaTOF2 < 5 && fCentrality < 20 && KnTrack->Pt() < 1.2 && KnTrack->Pt() > 1){ |
870 | fCombsignal->Fill(nSigmaComb2); | |
871 | } | |
872 | } else { | |
873 | nSigmaComb2 = TMath::Abs(nSigmaTPC2); | |
9dd528f5 | 874 | nSigmaComb2Ref = TMath::Abs(nSigmaTPC2Ref); |
a8ad4709 | 875 | } |
876 | ||
877 | // use sigmaTOF instead of sigmaComb | |
9dd528f5 | 878 | if(tofMatch2){ |
879 | nSigmaComb2 = nSigmaTOF2; | |
880 | nSigmaComb2Ref = nSigmaTOF2Ref; | |
881 | } | |
a8ad4709 | 882 | |
883 | if(nSigmaComb2 < 2) nSigmaComb2 = 2; | |
884 | else if(nSigmaComb2 < 3) nSigmaComb2 = 3; | |
885 | else if(nSigmaComb2 < 5) nSigmaComb2 = 4.99; | |
886 | else nSigmaComb2 = 6; | |
9dd528f5 | 887 | if(nSigmaComb2Ref < 2) nSigmaComb2Ref = 2; |
888 | else if(nSigmaComb2Ref < 3) nSigmaComb2Ref = 3; | |
889 | else if(nSigmaComb2Ref < 5) nSigmaComb2Ref = 4.99; | |
890 | else nSigmaComb2Ref = 6; | |
a8ad4709 | 891 | |
892 | Bool_t isTrue = kFALSE; | |
893 | ||
894 | if(mcArray){ | |
895 | Int_t labelP = TMath::Abs(KpTrack->GetLabel()); | |
896 | Int_t labelN = TMath::Abs(KnTrack->GetLabel()); | |
897 | ||
898 | if(labelP > -1 && labelN > -1){ | |
899 | AliAODMCParticle *partP = (AliAODMCParticle*)mcArray->At(labelP); | |
900 | AliAODMCParticle *partN = (AliAODMCParticle*)mcArray->At(labelN); | |
901 | ||
902 | Int_t mP = partP->GetMother(); | |
903 | Int_t mN = partN->GetMother(); | |
904 | if(mP == mN && mP > -1){ | |
905 | AliAODMCParticle *partM = (AliAODMCParticle*)mcArray->At(mP); | |
906 | Int_t pdgM = partM->GetPdgCode(); | |
907 | if(pdgM == 310) isTrue = kTRUE; | |
908 | } | |
909 | } | |
910 | ||
911 | } | |
912 | ||
913 | Double_t deltaphi1 = KpTrack->Phi() - fPsi; | |
914 | Double_t deltaphi2 = KnTrack->Phi() - fPsi; | |
915 | ||
f8f53ae0 | 916 | if(gRandom->Rndm() < 0.5){ |
917 | deltaphi1 += TMath::Pi(); | |
918 | deltaphi2 += TMath::Pi(); | |
919 | } | |
920 | ||
a8ad4709 | 921 | while(deltaphi1 > TMath::Pi()) deltaphi1 -= TMath::Pi()*2; |
922 | while(deltaphi1 < -TMath::Pi()) deltaphi1 += TMath::Pi()*2; | |
923 | while(deltaphi2 > TMath::Pi()) deltaphi2 -= TMath::Pi()*2; | |
924 | while(deltaphi2 < -TMath::Pi()) deltaphi2 += TMath::Pi()*2; | |
925 | ||
926 | if(fPtKn > 4.299) fPtKn = 4.299; | |
927 | ||
2942f542 | 928 | Float_t xTOfill[] = {static_cast<Float_t>(fPtKs),static_cast<Float_t>(KpTrack->Eta()),static_cast<Float_t>(fPtKp),static_cast<Float_t>(fPtKn),static_cast<Float_t>(probP[2]),static_cast<Float_t>(probN[2]),static_cast<Float_t>(tofMatch1),static_cast<Float_t>(tofMatch2),static_cast<Float_t>(isTrue),static_cast<Float_t>(nSigmaComb),static_cast<Float_t>(nSigmaComb2),static_cast<Float_t>(deltaphi1),static_cast<Float_t>(deltaphi2),static_cast<Float_t>(fPsi)}; |
929 | Float_t xTOfill2[] = {static_cast<Float_t>(fPtKs),static_cast<Float_t>(KpTrack->Eta()),static_cast<Float_t>(fPtKp),static_cast<Float_t>(fPtKn),static_cast<Float_t>(probP[2]),static_cast<Float_t>(probN[2]),static_cast<Float_t>(tofMatch1),static_cast<Float_t>(tofMatch2),static_cast<Float_t>(isTrue),static_cast<Float_t>(nSigmaComb),static_cast<Float_t>(nSigmaComb2),static_cast<Float_t>(deltaphi1),static_cast<Float_t>(deltaphi2),static_cast<Float_t>(fPsi)}; | |
a8ad4709 | 930 | |
a8ad4709 | 931 | Int_t ipt = 0; |
932 | while(fPtKsMin[ipt] < fPtKs && ipt < nPtBin){ | |
933 | ipt++; | |
934 | } | |
935 | ipt--; | |
936 | if(ipt < 0) ipt = 0; // just to be sure | |
937 | ||
938 | if(TMath::Abs(fEtaKs) < 0.8 && fPtKp > 0.3 && fPtKn > 0.3){ | |
9dd528f5 | 939 | if(fSpeciesRef != 2){ |
940 | xTOfill[4] = probP[fSpeciesRef]; | |
941 | xTOfill2[5] = probN[fSpeciesRef]; | |
942 | ||
943 | xTOfill[9] = nSigmaCombRef; | |
944 | xTOfill2[10] = nSigmaComb2Ref; | |
945 | ||
946 | } | |
947 | ||
a8ad4709 | 948 | fContPid->Fill(0,fMassV0,fCentrality,xTOfill); |
949 | xTOfill[1] = KnTrack->Eta(); | |
9dd528f5 | 950 | fContPid2->Fill(0,fMassV0,fCentrality,xTOfill2); |
520899fb | 951 | |
952 | if(fPIDuserCut){ | |
2942f542 | 953 | Float_t xUser[] = {static_cast<Float_t>(KpTrack->Eta()),static_cast<Float_t>(fPtKp),static_cast<Float_t>(isTrue),0,static_cast<Float_t>(deltaphi1),static_cast<Float_t>(fPsi)}; |
954 | Float_t xUser2[] = {static_cast<Float_t>(KnTrack->Eta()),static_cast<Float_t>(fPtKn),static_cast<Float_t>(isTrue),0,static_cast<Float_t>(deltaphi2),static_cast<Float_t>(fPsi)}; | |
520899fb | 955 | |
956 | if(fPIDuserCut->IsSelected(KpTrack,AliPID::kPion)){ // to be filled for positive | |
957 | xUser[3] = 1; | |
958 | } else if(fPIDuserCut->IsSelected(KpTrack,AliPID::kKaon)){ | |
959 | xUser[3] = 2; | |
960 | } else if(fPIDuserCut->IsSelected(KpTrack,AliPID::kProton)){ | |
961 | xUser[3] = 3; | |
962 | } | |
963 | if(fPIDuserCut->IsSelected(KnTrack,AliPID::kPion)){ // to be filled for negative | |
964 | xUser2[3] = 1; | |
965 | } else if(fPIDuserCut->IsSelected(KnTrack,AliPID::kKaon)){ | |
966 | xUser2[3] = 2; | |
967 | } else if(fPIDuserCut->IsSelected(KnTrack,AliPID::kProton)){ | |
968 | xUser2[3] = 3; | |
969 | } | |
970 | fContUser->Fill(0,fMassV0,fCentrality,xUser); | |
971 | fContUser2->Fill(0,fMassV0,fCentrality,xUser2); | |
972 | } | |
973 | ||
a8ad4709 | 974 | } |
975 | ||
976 | ||
977 | } | |
978 | } // end analysi K0s | |
979 | } | |
980 | ||
981 | //_____________________________________________________________________________ | |
982 | Float_t AliAnalysisTaskK0sBayes::GetVertex(AliAODEvent* aod) const | |
983 | { | |
984 | ||
985 | Float_t zvtx = -999; | |
986 | ||
987 | const AliAODVertex* vtxAOD = aod->GetPrimaryVertex(); | |
988 | if (!vtxAOD) | |
989 | return zvtx; | |
990 | if(vtxAOD->GetNContributors()>0) | |
991 | zvtx = vtxAOD->GetZ(); | |
992 | ||
993 | return zvtx; | |
994 | } | |
995 | //_____________________________________________________________________________ | |
996 | void AliAnalysisTaskK0sBayes::Terminate(Option_t *) | |
997 | { | |
998 | // Terminate loop | |
999 | Printf("Terminate()"); | |
1000 | } | |
1001 | //======================================================================= | |
1002 | void AliAnalysisTaskK0sBayes::SelectK0s(){ | |
1003 | fNK0s=0; | |
1004 | fNpiPos=0; | |
1005 | fNpiNeg=0; | |
1006 | ||
1007 | Int_t nV0s = fOutputAOD->GetNumberOfV0s(); | |
1008 | AliAODv0 *myV0; | |
1009 | Double_t dMASS=0.0; | |
1010 | for (Int_t i=0; i!=nV0s; ++i) { | |
1011 | myV0 = (AliAODv0*) fOutputAOD->GetV0(i); | |
1012 | if(!myV0) continue; | |
1013 | if(myV0->Pt()<0.1 || TMath::Abs(myV0->Eta()) > 0.8) continue; // skipping low momentum | |
1014 | Int_t pass = PassesAODCuts(myV0,fOutputAOD,0); // check for K0s | |
1015 | if(pass) { | |
1016 | dMASS = myV0->MassK0Short(); | |
f4c4ac9e | 1017 | Float_t massLambda = myV0->MassLambda(); |
1018 | Float_t massAntiLambda = myV0->MassAntiLambda(); | |
1019 | ||
1020 | if(TMath::Abs(dMASS-0.497)/0.005 < 8 && TMath::Abs(massLambda-1.115)/0.005 > 8 && TMath::Abs(massAntiLambda-1.115)/0.005 > 8){ | |
a8ad4709 | 1021 | AliAODTrack *iT=(AliAODTrack*) myV0->GetDaughter(0); // positive |
1022 | AliAODTrack *jT=(AliAODTrack*) myV0->GetDaughter(1); // negative | |
1023 | if(iT->Charge()<0){ | |
1024 | iT=(AliAODTrack*) myV0->GetDaughter(1); // positive | |
1025 | jT=(AliAODTrack*) myV0->GetDaughter(0); // negative | |
1026 | } | |
1027 | fPhiK0s[fNK0s] = myV0->Phi(); | |
1028 | fPtK0s[fNK0s] = myV0->Pt(); | |
1029 | fIpiP[fNK0s] = FindDaugheterIndex(iT); | |
1030 | fIpiN[fNK0s] = FindDaugheterIndex(jT); | |
1031 | fMassKs[fNK0s] = dMASS; | |
1032 | if(fIpiP[fNK0s] > -1 && fIpiN[fNK0s] > -1) | |
1033 | fNK0s++; | |
1034 | } | |
1035 | } | |
1036 | } | |
1037 | ||
1038 | /* My V0 code | |
1039 | // fill pion stacks | |
1040 | Int_t nAODTracks = fOutputAOD->GetNumberOfTracks(); | |
1041 | for(Int_t iT = 0; iT < nAODTracks; iT++) { // loop on the tracks | |
1042 | AliAODTrack* aodTrack = fOutputAOD->GetTrack(iT); | |
1043 | ||
1044 | if (!aodTrack){ | |
1045 | continue; | |
1046 | } | |
1047 | ||
1048 | Bool_t trkFlag = aodTrack->TestFilterBit(fFilterBit); | |
1049 | ||
1050 | if ((TMath::Abs(aodTrack->Eta()) > fEtaCut) || (aodTrack->Pt() < fMinPt) || (aodTrack->GetTPCNcls() < fNcluster) || !trkFlag){ | |
1051 | continue; | |
1052 | } | |
1053 | ||
1054 | Double_t b[2] = {-99., -99.}; | |
1055 | Double_t bCov[3] = {-99., -99., -99.}; | |
1056 | if (!aodTrack->PropagateToDCA(fOutputAOD->GetPrimaryVertex(), fOutputAOD->GetMagneticField(), 100., b, bCov)) | |
1057 | continue; | |
1058 | ||
1059 | if(TMath::Abs(b[0]) < 0.3/aodTrack->Pt()) continue; | |
1060 | ||
1061 | ||
1062 | Int_t charge = aodTrack->Charge(); | |
1063 | if(charge > 0){ | |
1064 | fIPiPos[fNpiPos] = iT; | |
1065 | fNpiPos++; | |
1066 | } | |
1067 | else{ | |
1068 | fIPiNeg[fNpiNeg] = iT; | |
1069 | fNpiNeg++; | |
1070 | } | |
1071 | } | |
1072 | ||
1073 | for(Int_t i=0;i < fNpiPos;i++){ | |
1074 | AliAODTrack *pip = fOutputAOD->GetTrack(fIPiPos[i]); | |
1075 | AliESDtrack pipE(pip); | |
1076 | ||
1077 | for(Int_t j=0;j < fNpiNeg;j++){ | |
1078 | AliAODTrack *pin = fOutputAOD->GetTrack(fIPiNeg[j]); | |
1079 | AliESDtrack pinE(pin); | |
1080 | ||
1081 | Double_t xn, xp, mindist=pinE.GetDCA(&pipE,fOutputAOD->GetMagneticField(),xn,xp); | |
1082 | ||
1083 | Double_t pPos[3]; | |
1084 | Double_t pNeg[3]; | |
1085 | pipE.GetPxPyPzAt(xp,fOutputAOD->GetMagneticField(),pPos); | |
1086 | pinE.GetPxPyPzAt(xn,fOutputAOD->GetMagneticField(),pNeg); | |
1087 | ||
1088 | Float_t length = (xp+xn)*0.5; | |
1089 | ||
1090 | Float_t pxs = pPos[0] + pNeg[0]; | |
1091 | Float_t pys = pPos[1] + pNeg[1]; | |
1092 | Float_t pzs = pPos[2] + pNeg[2]; | |
1093 | Float_t es = TMath::Sqrt(pPos[0]*pPos[0] + pPos[1]*pPos[1] + pPos[2]*pPos[2] + 0.13957*0.13957) + TMath::Sqrt(pNeg[0]*pNeg[0] + pNeg[1]*pNeg[1] + pNeg[2]*pNeg[2] + 0.13957*0.13957); | |
1094 | ||
1095 | Float_t pt = TMath::Sqrt(pxs*pxs + pys*pys); | |
1096 | Float_t phi = TMath::ATan2(pys,pxs); | |
1097 | Float_t mass = TMath::Sqrt(es*es - pt*pt - pzs*pzs); | |
1098 | ||
1099 | // if(length > 1) printf("length = %f - distance = %f - mass= %f\n",length,mindist,mass); | |
1100 | ||
1101 | if(mindist < 0.4&& length > 0.7 && length < 25){ | |
1102 | Float_t esL = TMath::Sqrt(pPos[0]*pPos[0] + pPos[1]*pPos[1] + pPos[2]*pPos[2] + 0.938*0.938) + TMath::Sqrt(pNeg[0]*pNeg[0] + pNeg[1]*pNeg[1] + pNeg[2]*pNeg[2] + 0.13957*0.13957); | |
1103 | Float_t esAL = TMath::Sqrt(pPos[0]*pPos[0] + pPos[1]*pPos[1] + pPos[2]*pPos[2] + 0.13957*0.13957) + TMath::Sqrt(pNeg[0]*pNeg[0] + pNeg[1]*pNeg[1] + pNeg[2]*pNeg[2] + 0.938*0.938); | |
1104 | ||
1105 | Float_t massaL = TMath::Sqrt(esL*esL - pt*pt - pzs*pzs); | |
1106 | Float_t massaAL = TMath::Sqrt(esAL*esAL - pt*pt - pzs*pzs); | |
1107 | ||
1108 | if(TMath::Abs(mass-0.497)/0.005 < 8 && massaL > 1.15 && massaAL > 1.15){ | |
1109 | fPhiK0s[fNK0s] = phi; | |
1110 | fPtK0s[fNK0s] = pt; | |
1111 | fIpiP[fNK0s] =fIPiPos[i] ; | |
1112 | fIpiN[fNK0s] = fIPiNeg[j]; | |
1113 | fMassKs[fNK0s] = mass; | |
1114 | fNK0s++; | |
1115 | } | |
1116 | } | |
1117 | } | |
1118 | } | |
1119 | */ | |
1120 | } | |
1121 | ||
1122 | //======================================================================= | |
1123 | Int_t AliAnalysisTaskK0sBayes::PassesAODCuts(AliAODv0 *myV0, AliAODEvent *tAOD,Int_t specie) | |
1124 | { | |
1125 | if (myV0->GetOnFlyStatus() ) return 0; | |
1126 | ||
1127 | //the following is needed in order to evualuate track-quality | |
1128 | AliAODTrack *iT, *jT; | |
1129 | AliAODVertex *vV0s = myV0->GetSecondaryVtx(); | |
1130 | Double_t pos[3],cov[6]; | |
1131 | vV0s->GetXYZ(pos); | |
1132 | vV0s->GetCovarianceMatrix(cov); | |
1133 | const AliESDVertex vESD(pos,cov,100.,100); | |
1134 | ||
1135 | // TESTING CHARGE | |
1136 | int iPos, iNeg; | |
1137 | iT=(AliAODTrack*) myV0->GetDaughter(0); | |
1138 | if(iT->Charge()>0) { | |
1139 | iPos = 0; iNeg = 1; | |
1140 | } else { | |
1141 | iPos = 1; iNeg = 0; | |
1142 | } | |
1143 | // END OF TEST | |
1144 | ||
1145 | iT=(AliAODTrack*) myV0->GetDaughter(iPos); // positive | |
1146 | ||
1147 | jT=(AliAODTrack*) myV0->GetDaughter(iNeg); // negative | |
1148 | ||
1149 | Bool_t trkFlag = iT->TestFilterBit(fFilterBit); | |
1150 | if(!trkFlag) return 0; | |
1151 | Bool_t trkFlag2 = jT->TestFilterBit(fFilterBit); | |
1152 | if(!trkFlag2) return 0; | |
1153 | ||
1154 | Double_t pvertex[3]; | |
1155 | pvertex[0]=tAOD->GetPrimaryVertex()->GetX(); | |
1156 | pvertex[1]=tAOD->GetPrimaryVertex()->GetY(); | |
1157 | pvertex[2]=tAOD->GetPrimaryVertex()->GetZ(); | |
1158 | ||
1159 | Double_t dDL=myV0->DecayLengthV0( pvertex ); | |
1160 | if(dDL < 0.5 || dDL > 25) return 0; | |
1161 | ||
1162 | Double_t dDCA=myV0->DcaV0Daughters(); | |
1163 | if(dDCA >0.5) return 0; | |
1164 | ||
1165 | Double_t dCTP=myV0->CosPointingAngle( pvertex ); | |
1166 | if(dCTP < -1) return 0; | |
1167 | ||
1168 | // AliESDtrack ieT( iT ); | |
1169 | // Double_t dD0P=ieT.GetD(pvertex[0],pvertex[1],tAOD->GetMagneticField()); | |
1170 | // if(TMath::Abs(dD0P) < 0]) return 0; | |
1171 | ||
1172 | // AliESDtrack jeT( jT ); | |
1173 | // Double_t dD0M=jeT.GetD(pvertex[0],pvertex[1],tAOD->GetMagneticField()); | |
1174 | // if(TMath::Abs(dD0M) < 0) return 0; | |
1175 | ||
1176 | // Double_t dD0D0=dD0P*dD0M; | |
1177 | // if(dD0D0>0) return 0; | |
1178 | ||
1179 | // Double_t dETA=myV0->Eta(); | |
1180 | // if(dETA <-0.8) return 0; | |
1181 | // if(dETA >0.8) return 0; | |
1182 | ||
1183 | // Double_t dQT=myV0->PtArmV0(); | |
1184 | // if(specie==0) if(dQT<???) return 0; | |
1185 | ||
1186 | Double_t dALPHA=myV0->AlphaV0(); // AlphaV0 -> AODRecoDecat::Alpha -> return 1.-2./(1.+QlProng(0)/QlProng(1)); | |
1187 | if(myV0->ChargeProng(iPos)<0) dALPHA = -dALPHA; // protects for a change in convention | |
1188 | ||
1189 | if(specie==1 && dALPHA<0) return 2; // antilambda | |
1190 | return 1; // K0s or lambda | |
1191 | } | |
1192 | //------------------------------------------------------------------------- | |
1193 | Int_t AliAnalysisTaskK0sBayes::FindDaugheterIndex(AliAODTrack *trk){ | |
1194 | Int_t ntrack = fOutputAOD->GetNumberOfTracks(); | |
1195 | ||
1196 | for(Int_t i=0;i < ntrack;i++){ // loop on tracks | |
1197 | AliAODTrack* track = fOutputAOD->GetTrack(i); | |
1198 | if(track == trk) return i; | |
1199 | } | |
1200 | ||
1201 | printf("Daughter for %p not found\n",trk); | |
1202 | return -1; | |
1203 | } | |
1204 | //------------------------------------------------------------------------- | |
1205 | Int_t AliAnalysisTaskK0sBayes::IsChannelValid(Float_t etaAbs){ | |
1206 | if(!fIsMC) return 1; // used only on MC | |
1207 | ||
9c668341 | 1208 | if(fTypeCol == 2){ // LHC10h or LHC11h because of TOF matching window at 3 cm |
a8ad4709 | 1209 | Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs); |
1210 | ||
1211 | if(!(channel%20)) return 0; // 5% additional loss in MC | |
1212 | } | |
1213 | ||
1214 | return 1; | |
1215 | } |