]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGPP/pid/AliAnalysisTaskPhiBayes.cxx
For backward compatibility changed the method AliVTrack::GetIntegratedTimes(double...
[u/mrichter/AliRoot.git] / PWGPP / pid / AliAnalysisTaskPhiBayes.cxx
CommitLineData
a8ad4709 1#include "AliAnalysisTaskPhiBayes.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
31Float_t AliAnalysisTaskPhiBayes::fPtPhiMin[AliAnalysisTaskPhiBayes::nPtBin] = {0.,0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4.,5.,6.};// ptmin bin
32Float_t AliAnalysisTaskPhiBayes::fPtPhiMax[AliAnalysisTaskPhiBayes::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
38ClassImp(AliAnalysisTaskPhiBayes)
39//_____________________________________________________________________________
40AliAnalysisTaskPhiBayes::AliAnalysisTaskPhiBayes():
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 fPtPhi(0.),
55 fPhiPhi(0.),
56 fEtaPhi(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 fHmismTOF(0),
9c668341 75 fHchannelTOFdistr(0),
520899fb 76 fTypeCol(2),
8c1aafae 77 fPIDuserCut(NULL),
bc629e38 78 fToEP(kFALSE),
79 fSpeciesRef(3)
a8ad4709 80{
81 // Default constructor (should not be used)
82 fList->SetName("contPhiBayes1");
83 fList2->SetName("contPhiBayes2");
84 fList3->SetName("contPhiBayes3");
85
86 fList->SetOwner(kTRUE);
87 fList2->SetOwner(kTRUE);
88 fList3->SetOwner(kTRUE);
89
90 TFile *fmism = new TFile("$ALICE_ROOT/TOF/data/TOFmismatchDistr.root");
91 fHmismTOF = (TH1F *) fmism->Get("TOFmismDistr");
92
93 TFile *fchDist = new TFile("$ALICE_ROOT/TOF/data/TOFchannelDist.root");
94 fHchannelTOFdistr = (TH1D *) fchDist->Get("hTOFchanDist");
f4c4ac9e 95
96 for(Int_t i=0;i < nCentrBin;i++){
97 fElTOF[i] = NULL;
98 fElTPC[i] = NULL;
99 fPiTOF[i] = NULL;
100 fPiTPC[i] = NULL;
101 fKaTOF[i] = NULL;
102 fKaTPC[i] = NULL;
103 fPrTOF[i] = NULL;
104 fPrTPC[i] = NULL;
105 }
106 for(Int_t i=0;i < 4;i++){
107 hMatching[i] = NULL;
108 hTracking[i] = NULL;
109 }
a8ad4709 110}
111
112//______________________________________________________________________________
113AliAnalysisTaskPhiBayes::AliAnalysisTaskPhiBayes(const char *name):
114 AliAnalysisTaskSE(name),
115 fVtxCut(10.0), // cut on |vertex| < fVtxCut
116 fEtaCut(0.8), // cut on |eta| < fEtaCut
117 fMinPt(0.15), // cut on pt > fMinPt
118 fIsMC(kFALSE),
119 fQAsw(kFALSE),
120 fNcluster(70),
121 fFilterBit(1),
122 fList(new TList()),
123 fList2(new TList()),
124 fList3(new TList()),
125 fCentrality(-1),
126 fPsi(0),
127 fPtPhi(0.),
128 fPhiPhi(0.),
129 fEtaPhi(0.),
130 fMassV0(0.),
131 fPtKp(0.),
132 fPhiKp(0.),
133 fEtaKp(0.),
134 fPtKn(0.),
135 fPhiKn(0.),
136 fEtaKn(0.),
137 fPidKp(0),
138 fPidKn(0),
139 fTOFTPCsignal(0),
140 fCombsignal(0),
141 fCutsDaughter(NULL),
142 fPIDCombined(NULL),
143 fContPid(NULL),
144 fContPid2(NULL),
520899fb 145 fContUser(NULL),
146 fContUser2(NULL),
a8ad4709 147 fHmismTOF(0),
9c668341 148 fHchannelTOFdistr(0),
520899fb 149 fTypeCol(2),
8c1aafae 150 fPIDuserCut(NULL),
bc629e38 151 fToEP(kFALSE),
152 fSpeciesRef(3)
a8ad4709 153{
154
155 DefineOutput(1, TList::Class());
156 DefineOutput(2, TList::Class());
157 DefineOutput(3, TList::Class());
158 DefineOutput(4, TList::Class());
159
160 // Output slot #1 writes into a TTree
161 fList->SetName("contPhiBayes1");
162 fList2->SetName("contPhiBayes2");
163 fList3->SetName("contPhiBayes3");
164
165 fList->SetOwner(kTRUE);
166 fList2->SetOwner(kTRUE);
167 fList3->SetOwner(kTRUE);
168
169 TFile *fmism = new TFile("$ALICE_ROOT/TOF/data/TOFmismatchDistr.root");
170 fHmismTOF = (TH1F *) fmism->Get("TOFmismDistr");
171
172 TFile *fchDist = new TFile("$ALICE_ROOT/TOF/data/TOFchannelDist.root");
173 fHchannelTOFdistr = (TH1D *) fchDist->Get("hTOFchanDist");
f4c4ac9e 174
175 for(Int_t i=0;i < nCentrBin;i++){
176 fElTOF[i] = NULL;
177 fElTPC[i] = NULL;
178 fPiTOF[i] = NULL;
179 fPiTPC[i] = NULL;
180 fKaTOF[i] = NULL;
181 fKaTPC[i] = NULL;
182 fPrTOF[i] = NULL;
183 fPrTPC[i] = NULL;
184 }
185 for(Int_t i=0;i < 4;i++){
186 hMatching[i] = NULL;
187 hTracking[i] = NULL;
188 }
a8ad4709 189}
190//_____________________________________________________________________________
191AliAnalysisTaskPhiBayes::~AliAnalysisTaskPhiBayes()
192{
193
194}
195
196//______________________________________________________________________________
197void AliAnalysisTaskPhiBayes::UserCreateOutputObjects()
198{
199
200 fPIDCombined=new AliPIDCombined;
201 fPIDCombined->SetDefaultTPCPriors();
202 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF);
203
204 Float_t invMmin = 0.985;
205 Float_t invMmax = 1.045;
206
207 const Int_t nBinPid = 14;
208
8c1aafae 209 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 210
8c1aafae 211 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 212
213 fContPid = new AliPIDperfContainer("contPID",nBinPid,binPid);
214 fContPid->SetTitleX("M_{#phi}");
215 fContPid->SetTitleY("centrality (%)");
216 fContPid->SetVarName(0,"p_{T}^#phi}");
217 fContPid->SetVarRange(0,0,10);
218 fContPid->SetVarName(1,"#eta^{#phi}");
219 fContPid->SetVarRange(1,-0.8,0.8);
220 fContPid->SetVarName(2,"p_{T}^{Kp}");
221 fContPid->SetVarRange(2,0.3,4.3);
222 fContPid->SetVarName(3,"p_{T}^{Kn}");
223 fContPid->SetVarRange(3,0.3,4.3);
224 fContPid->SetVarName(4,"BayesProb^{Kp}");
225 fContPid->SetVarRange(4,0,1.);
226 fContPid->SetVarName(5,"BayesProb^{Kn}");
227 fContPid->SetVarRange(5,0,1.);
228 fContPid->SetVarName(6,"isTOFmatch^{Kp}");
229 fContPid->SetVarRange(6,-0.5,1.5);
230 fContPid->SetVarName(7,"isTOFmatch^{Kn}");
231 fContPid->SetVarRange(7,-0.5,1.5);
232 fContPid->SetVarName(8,"isPhiTrue^{Kn}");
233 fContPid->SetVarRange(8,-0.5,1.5);
234 fContPid->SetVarName(9,"N#sigma^{Kp}");
235 fContPid->SetVarRange(9,1.25,6.25);
236 fContPid->SetVarName(10,"N#sigma^{Kn}");
237 fContPid->SetVarRange(10,1.25,6.25);
238 fContPid->SetVarName(11,"#Delta#phi^{Kp}");
239 fContPid->SetVarRange(11,-TMath::Pi(),TMath::Pi());
240 fContPid->SetVarName(12,"#Delta#phi^{Kn}");
241 fContPid->SetVarRange(12,-TMath::Pi(),TMath::Pi());
242 fContPid->SetVarName(13,"#Psi");
243 fContPid->SetVarRange(13,-TMath::Pi()/2,TMath::Pi()/2);
244
245 fContPid2 = new AliPIDperfContainer("contPID2",nBinPid,binPid2);
246 fContPid2->SetTitleX("M_{#phi}");
247 fContPid2->SetTitleY("centrality (%)");
248 fContPid2->SetVarName(0,"p_{T}^{#phi}");
249 fContPid2->SetVarRange(0,0,10);
250 fContPid2->SetVarName(1,"#eta^{#phi}");
251 fContPid2->SetVarRange(1,-0.8,0.8);
252 fContPid2->SetVarName(2,"p_{T}^{Kp}");
253 fContPid2->SetVarRange(2,0.3,4.3);
254 fContPid2->SetVarName(3,"p_{T}^{Kn}");
255 fContPid2->SetVarRange(3,0.3,4.3);
256 fContPid2->SetVarName(4,"BayesProb^{Kp}");
257 fContPid2->SetVarRange(4,0,1.);
258 fContPid2->SetVarName(5,"BayesProb^{Kn}");
259 fContPid2->SetVarRange(5,0,1.);
260 fContPid2->SetVarName(6,"isTOFmatch^{Kp}");
261 fContPid2->SetVarRange(6,-0.5,1.5);
262 fContPid2->SetVarName(7,"isTOFmatch^{Kn}");
263 fContPid2->SetVarRange(7,-0.5,1.5);
264 fContPid2->SetVarName(8,"isPhiTrue^{Kn}");
265 fContPid2->SetVarRange(8,-0.5,1.5);
266 fContPid2->SetVarName(9,"N#sigma^{Kp}");
267 fContPid2->SetVarRange(9,1.25,6.25);
268 fContPid2->SetVarName(10,"N#sigma^{Kn}");
269 fContPid2->SetVarRange(10,1.25,6.25);
270 fContPid2->SetVarName(11,"#Delta#phi^{Kp}");
271 fContPid2->SetVarRange(11,-TMath::Pi(),TMath::Pi());
272 fContPid2->SetVarName(12,"#Delta#phi^{Kn}");
273 fContPid2->SetVarRange(12,-TMath::Pi(),TMath::Pi());
274 fContPid2->SetVarName(13,"#Psi");
275 fContPid2->SetVarRange(13,-TMath::Pi()/2,TMath::Pi()/2);
276
277
278
279 const Int_t nDETsignal = 100; // mass
280 Double_t binDETsignal[nDETsignal+1];
281 for(Int_t i=0;i<nDETsignal+1;i++){
282 binDETsignal[i] = invMmin + i*(invMmax - invMmin) / nDETsignal;
283 }
284 const Int_t nDETsignal2 = 10; // centrality
285 Double_t binDETsignal2[nDETsignal2+1];
286 for(Int_t i=0;i<nDETsignal2+1;i++){
287 binDETsignal2[i] = i*100./ nDETsignal2;
288 }
289 fContPid->AddSpecies("phi",nDETsignal,binDETsignal,nDETsignal2,binDETsignal2);
290 fContPid2->AddSpecies("phi2",nDETsignal,binDETsignal,nDETsignal2,binDETsignal2);
291
292 fList->Add(fContPid);
293 fList->Add(fContPid2);
294
520899fb 295 const Int_t nBinUser = 6;
296 Int_t binUser[nBinUser] = {8/*Eta*/,20/*pt*/,2/*istrue*/,4/*whatSelection*/,1/*DeltaPhi*/,1/*Psi*/};
297 fContUser = new AliPIDperfContainer("contUserPID",nBinUser,binUser);
298 fContUser->SetTitleX("M_{#phi}");
299 fContUser->SetTitleY("centrality (%)");
300 fContUser->SetVarName(0,"#eta^{K^{0}_{s}}");
301 fContUser->SetVarRange(0,-0.8,0.8);
302 fContUser->SetVarName(1,"p_{T}");
303 fContUser->SetVarRange(1,0.3,4.3);
304 fContUser->SetVarName(2,"isKsTrue^{Kn}");
305 fContUser->SetVarRange(2,-0.5,1.5);
306 fContUser->SetVarName(3,"whatSelected"); // 0=no, 1=pi, 2=K, 3=p
307 fContUser->SetVarRange(3,-0.5,3.5);
308 fContUser->SetVarName(4,"#Delta#phi");
309 fContUser->SetVarRange(4,-TMath::Pi(),TMath::Pi());
310 fContUser->SetVarName(5,"#Psi");
311 fContUser->SetVarRange(5,-TMath::Pi()/2,TMath::Pi()/2);
312
313 fContUser2 = new AliPIDperfContainer("contUserPID2",nBinUser,binUser);
314 fContUser2->SetTitleX("M_{#phi}");
315 fContUser2->SetTitleY("centrality (%)");
316 fContUser2->SetVarName(0,"#eta^{K^{0}_{s}}");
317 fContUser2->SetVarRange(0,-0.8,0.8);
318 fContUser2->SetVarName(1,"p_{T}");
319 fContUser2->SetVarRange(1,0.3,4.3);
320 fContUser2->SetVarName(2,"isKsTrue^{Kn}");
321 fContUser2->SetVarRange(2,-0.5,1.5);
322 fContUser2->SetVarName(3,"whatSelected");
323 fContUser2->SetVarRange(3,-0.5,3.5);
324 fContUser2->SetVarName(4,"#Delta#phi");
325 fContUser2->SetVarRange(4,-TMath::Pi(),TMath::Pi());
326 fContUser2->SetVarName(5,"#Psi");
327 fContUser2->SetVarRange(5,-TMath::Pi()/2,TMath::Pi()/2);
328
329 fContUser->AddSpecies("Phi",nDETsignal,binDETsignal,nDETsignal2,binDETsignal2);
330 fContUser2->AddSpecies("Phi2",nDETsignal,binDETsignal,nDETsignal2,binDETsignal2);
331
332 fList->Add(fContUser);
333 fList->Add(fContUser2);
334
a8ad4709 335 hMatching[0] = new TH2F("hMatchAll","TOF matched (all);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100);
336 hMatching[1] = new TH2F("hMatchPi","TOF matched (#pi);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100);
337 hMatching[2] = new TH2F("hMatchKa","TOF matched (K);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100);
338 hMatching[3] = new TH2F("hMatchPr","TOF matched (p);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100);
339
340 hTracking[0] = new TH2F("hTrackingAll","TPC tracks (all);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100);
341 hTracking[1] = new TH2F("hTrackingPi","TPC tracks (#pi);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100);
342 hTracking[2] = new TH2F("hTrackingKa","TPC tracks (K);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100);
343 hTracking[3] = new TH2F("hTrackingPr","TPC tracks (p);p_{T} (GeV/#it{c});centrality (%)",50,0,10,nDETsignal2,0,100);
344
345 fList2->Add(hMatching[0]);
346 fList2->Add(hMatching[1]);
347 fList2->Add(hMatching[2]);
348 fList2->Add(hMatching[3]);
349 fList2->Add(hTracking[0]);
350 fList2->Add(hTracking[1]);
351 fList2->Add(hTracking[2]);
352 fList2->Add(hTracking[3]);
353
354 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);
355 fList2->Add(fTOFTPCsignal);
356 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);
357 fList2->Add(fCombsignal);
358
359 // QA plots
360 char name[100],title[400];
361 for(Int_t i=0;i < nCentrBin;i++){
362 snprintf(name,100,"hPiTPCQA_%i",i);
363 snprintf(title,400,"TPC signal for #pi cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%');
364 fPiTPC[i] = new TH2F(name,title,50,0,4,200,-10,10);
365 fList3->Add(fPiTPC[i]);
366
367 snprintf(name,100,"hKaTPCQA_%i",i);
368 snprintf(title,400,"TPC signal for K cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%');
369 fKaTPC[i] = new TH2F(name,title,50,0,4,200,-10,10);
370 fList3->Add(fKaTPC[i]);
371
372 snprintf(name,100,"hPrTPCQA_%i",i);
373 snprintf(title,400,"TPC signal for p cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%');
374 fPrTPC[i] = new TH2F(name,title,50,0,4,200,-10,10);
375 fList3->Add(fPrTPC[i]);
376
377 snprintf(name,100,"hElTPCQA_%i",i);
378 snprintf(title,400,"TPC signal for e cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%');
379 fElTPC[i] = new TH2F(name,title,50,0,4,200,-10,10);
380 fList3->Add(fElTPC[i]);
381
382 snprintf(name,100,"hPiTOFQA_%i",i);
383 snprintf(title,400,"TOF signal for #pi cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%');
384 fPiTOF[i] = new TH2F(name,title,50,0,4,200,-10,10);
385 fList3->Add(fPiTOF[i]);
386
387 snprintf(name,100,"hKaTOFQA_%i",i);
388 snprintf(title,400,"TOF signal for K cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%');
389 fKaTOF[i] = new TH2F(name,title,50,0,4,200,-10,10);
390 fList3->Add(fKaTOF[i]);
391
392 snprintf(name,100,"hPrTOFQA_%i",i);
393 snprintf(title,400,"TOF signal for p cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%');
394 fPrTOF[i] = new TH2F(name,title,50,0,4,200,-10,10);
395 fList3->Add(fPrTOF[i]);
396
397 snprintf(name,100,"hElTOFQA_%i",i);
398 snprintf(title,400,"TOF signal for e cent=%i-%i%c;p_{T} (GeV/#it{c});N#sigma",i*10,(i+1)*10,'%');
399 fElTOF[i] = new TH2F(name,title,50,0,4,200,-10,10);
400 fList3->Add(fElTOF[i]);
401
402 }
403
404 // Post output data.
405 PostData(1, fList);
406 PostData(2, fList2);
407 PostData(3, fList3);
408}
409
410//______________________________________________________________________________
411void AliAnalysisTaskPhiBayes::UserExec(Option_t *)
412{
413 // Main loop
414 // Called for each event
415
416 fOutputAOD = dynamic_cast<AliAODEvent*>(InputEvent());
417 if(!fOutputAOD){
418 Printf("%s:%d AODEvent not found in Input Manager",(char*)__FILE__,__LINE__);
419 this->Dump();
420 return;
421 }
422
423 Float_t zvtx = GetVertex(fOutputAOD);
424
425
426
427 //Get the MC object
428 if(fIsMC){
429 AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(fOutputAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
430 if (!mcHeader) {
431 AliError("Could not find MC Header in AOD");
432 return;
433 }
434 }
435
436 if (TMath::Abs(zvtx) < fVtxCut) {
437
438 //Centrality
439 Float_t v0Centr = -10.;
440 Float_t trkCentr = -10.;
441 AliCentrality *centrality = fOutputAOD->GetCentrality();
442 if (centrality){
443 trkCentr = centrality->GetCentralityPercentile("V0M");
444 v0Centr = centrality->GetCentralityPercentile("TRK");
445 }
446
cd71f9f4 447 if(!fTypeCol){
448 v0Centr=100./(fOutputAOD->GetNumberOfTracks()/12.+1);
449 trkCentr=v0Centr;
450 }
451
9c668341 452 if((TMath::Abs(v0Centr - trkCentr) < 5.0 || (fTypeCol!=2)) && v0Centr>0){ // consistency cut on centrality selection
a8ad4709 453 fCentrality = v0Centr;
454 Analyze(fOutputAOD); // Do analysis!!!!
455
456 }
457 }
458
459}
460
461//________________________________________________________________________
462void AliAnalysisTaskPhiBayes::Analyze(AliAODEvent* aodEvent)
463{
464 Int_t ntrack = aodEvent->GetNumberOfTracks();
465
466 fPtKp=0.,fPhiKp=0.,fEtaKp=0.;
467 fPtKn=0.,fPhiKn=0.,fEtaKn=0.;
468 fPidKp=0,fPidKn=0;
469 fMassV0=-1;
470
471 TLorentzVector phiV;
472
473 Double_t px,py,pz,E;
474
475 Float_t invMmin = 0.985;
476 Float_t invMmax = 1.045;
477
478 Int_t icentr = 8;
479 if(fCentrality < 0) icentr = 8;
480 else if(fCentrality < 10) icentr = 0;
481 else if(fCentrality < 20) icentr = 1;
482 else if(fCentrality < 30) icentr = 2;
483 else if(fCentrality < 40) icentr = 3;
484 else if(fCentrality < 50) icentr = 4;
485 else if(fCentrality < 60) icentr = 5;
486 else if(fCentrality < 70) icentr = 6;
487 else if(fCentrality < 80) icentr = 7;
488
489 Float_t addMismatchForMC = 0.005;
faa6d35f 490 if(fCentrality < 50) addMismatchForMC += 0.005;
a8ad4709 491 if(fCentrality < 20) addMismatchForMC += 0.02;
492
faa6d35f 493 if(fTypeCol == 0 || fTypeCol == 1) addMismatchForMC = 0.005;
9c668341 494
a8ad4709 495 fPsi = 0;
496 /* Compute TPC EP */
497 Double_t Qx2 = 0, Qy2 = 0;
498 Double_t Qx3 = 0, Qy3 = 0;
499 for(Int_t iT = 0; iT < ntrack; iT++) {
500 AliAODTrack* aodTrack = aodEvent->GetTrack(iT);
501
502 if (!aodTrack){
503 continue;
504 }
505
506 Bool_t trkFlag = aodTrack->TestFilterBit(fFilterBit);
507
508 if ((TMath::Abs(aodTrack->Eta()) > 0.8) || (aodTrack->Pt() < 0.2) || (aodTrack->GetTPCNcls() < fNcluster) || !trkFlag)
509 continue;
510
511 Double_t b[2] = {-99., -99.};
512 Double_t bCov[3] = {-99., -99., -99.};
513 if (!aodTrack->PropagateToDCA(aodEvent->GetPrimaryVertex(), aodEvent->GetMagneticField(), 100., b, bCov))
514 continue;
515
516 if ((TMath::Abs(b[0]) > 3.0) || (TMath::Abs(b[1]) > 2.4))
517 continue;
518
519 Qx2 += TMath::Cos(2*aodTrack->Phi());
520 Qy2 += TMath::Sin(2*aodTrack->Phi());
521 Qx3 += TMath::Cos(3*aodTrack->Phi());
522 Qy3 += TMath::Sin(3*aodTrack->Phi());
523
524 }
525
526 fPsi = TMath::ATan2(Qy2, Qx2)/2.;
527
528 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
529 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
530 AliPIDResponse *PIDResponse=inputHandler->GetPIDResponse();
531
cd71f9f4 532// PIDResponse->GetTOFResponse().SetTrackParameter(0,0.);
533// PIDResponse->GetTOFResponse().SetTrackParameter(1,0.);
534// PIDResponse->GetTOFResponse().SetTrackParameter(2,0.018);
535// PIDResponse->GetTOFResponse().SetTrackParameter(3,50.0);
a8ad4709 536
537 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
538
f4c4ac9e 539 Double_t probP[10] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
540 Double_t probN[10] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
a8ad4709 541 Double_t nSigmaTPC,nSigmaTOF=6,nSigmaTPC2,nSigmaTOF2=6,nSigmaComb,nSigmaComb2;
bc629e38 542 Double_t nSigmaTPCRef,nSigmaTOFRef=6,nSigmaTPC2Ref,nSigmaTOF2Ref=6,nSigmaCombRef,nSigmaComb2Ref;
a8ad4709 543
544 AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
545 TClonesArray *mcArray = NULL;
546 if (mcHeader)
547 mcArray = (TClonesArray*)aodEvent->GetList()->FindObject(AliAODMCParticle::StdBranchName());
548
549 Int_t nmc = 0;
550 if(mcArray)
551 nmc = mcArray->GetEntries();
552
553 for(Int_t i=0;i < ntrack;i++){ // loop on tracks
554 AliAODTrack* track = aodEvent->GetTrack(i);
555
556 AliAODMCParticle *mcp = NULL;
557 Int_t pdg = 0;
558
559 if (!track){
560 continue;
561 }
562
563 Int_t tofMatch = (track->GetStatus() & AliVTrack::kTOFout) && (track->GetStatus() & AliVTrack::kTIME);
564
565 Int_t label = -1;
566 if(mcArray){
567 label = track->GetLabel();
568 if(label != -1 && label < nmc){
569 label = TMath::Abs(label);
570 mcp = (AliAODMCParticle*)mcArray->At(label);
571 pdg = TMath::Abs(mcp->GetPdgCode());
572 }
573 else
574 label = -1;
575 }
576 else{
577 /*UInt_t detUsed =*/ fPIDCombined->ComputeProbabilities(track, PIDResponse, probP);
578 }
579
580 if(track->TestFilterBit(fFilterBit) && TMath::Abs(track->Eta()) < 0.8 && track->Charge() > 0){
581 hTracking[0]->Fill(track->Pt(),fCentrality);
582 if(pdg == 211)
583 hTracking[1]->Fill(track->Pt(),fCentrality);
584 else if(pdg == 321)
585 hTracking[2]->Fill(track->Pt(),fCentrality);
586 else if(pdg == 2212)
587 hTracking[3]->Fill(track->Pt(),fCentrality);
588 else if(! mcp){ // Fill matching histo with the prob
589 hTracking[1]->Fill(track->Pt(),fCentrality,probP[2]);
590 hTracking[2]->Fill(track->Pt(),fCentrality,probP[3]);
591 hTracking[3]->Fill(track->Pt(),fCentrality,probP[4]);
592 }
593 }
594
595 if(!tofMatch) continue;
596
597 if(track->TestFilterBit(fFilterBit) && TMath::Abs(track->Eta()) < 0.8 && track->Charge() > 0){
598 hMatching[0]->Fill(track->Pt(),fCentrality);
599 if(pdg == 211)
600 hMatching[1]->Fill(track->Pt(),fCentrality);
601 else if(pdg == 321)
602 hMatching[2]->Fill(track->Pt(),fCentrality);
603 else if(pdg == 2212)
604 hMatching[3]->Fill(track->Pt(),fCentrality);
605 else if(! mcp){ // Fill matching histo with the prob
606 hMatching[1]->Fill(track->Pt(),fCentrality,probP[2]);
607 hMatching[2]->Fill(track->Pt(),fCentrality,probP[3]);
608 hMatching[3]->Fill(track->Pt(),fCentrality,probP[4]);
609 }
610 }
611 }
612
007df888 613// Int_t pdg1 = -1;
614// Int_t pdg2 = -1;
a8ad4709 615
616
617 // start analysis phi
618 for(Int_t i=0;i < ntrack;i++){ // loop on positive tracks
619 AliAODTrack* KpTrack = aodEvent->GetTrack(i);
620
621 if (!KpTrack){
622 continue;
623 }
624
625 if(!(KpTrack->Charge() > 0 && KpTrack->Pt() > 0.3 && TMath::Abs(KpTrack->Eta()) < 0.8)) continue;
626
e34b28fe 627 nSigmaTOF=5;
bc629e38 628 nSigmaTOFRef=5;
a8ad4709 629 nSigmaComb=5;
bc629e38 630 nSigmaCombRef=5;
631
a8ad4709 632 fPtKp=KpTrack->Pt(),fPhiKp=KpTrack->Phi(),fEtaKp=KpTrack->Eta();
633 fPidKp=0;
634
635 UInt_t detUsedP = fPIDCombined->ComputeProbabilities(KpTrack, PIDResponse, probP);
636
637 Double_t oldpP[10];
638 fPIDCombined->GetPriors(KpTrack, oldpP, PIDResponse, detUsedP);
639
a8ad4709 640 nSigmaTPC = PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kKaon);
bc629e38 641 nSigmaTPCRef = PIDResponse->NumberOfSigmasTPC(KpTrack,(AliPID::EParticleType) fSpeciesRef);
a8ad4709 642
643 if(! (TMath::Abs(nSigmaTPC) < 5)) continue;
644
645 Int_t tofMatch1 = (KpTrack->GetStatus() & AliVTrack::kTOFout) && (KpTrack->GetStatus() & AliVTrack::kTIME);
9c668341 646 /*
a8ad4709 647 if(mcArray){
648 Int_t labelK = TMath::Abs(KpTrack->GetLabel());
649 AliAODMCParticle *mcp1 = (AliAODMCParticle*)mcArray->At(labelK);
9c668341 650 pdg1 = TMath::Abs(mcp1->GetPdgCode());
a8ad4709 651 }
9c668341 652 */
a8ad4709 653
654 fPidKp = Int_t(probP[3]*100);
655
656 if(tofMatch1){
657 if(!IsChannelValid(TMath::Abs(KpTrack->Eta()))){
658 // remove this tof hit
659 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
660 detUsedP = fPIDCombined->ComputeProbabilities(KpTrack, PIDResponse, probP);
661 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
662 fPidKp = Int_t(probP[4]*100);
663 tofMatch1=0;
664 }
665 else{
666 if(probP[3] > probP[2] && probP[3] > probP[4] && probP[3] > probP[0]) fPidKp += 128; // max prob
667
668 nSigmaTOF = PIDResponse->NumberOfSigmasTOF(KpTrack,AliPID::kProton);
cd71f9f4 669 if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kProton))<1) fPrTOF[icentr]->Fill(fPtKp,nSigmaTOF);
670 if(TMath::Abs(nSigmaTOF)<1) fPrTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kProton));
a8ad4709 671 nSigmaTOF = PIDResponse->NumberOfSigmasTOF(KpTrack,AliPID::kElectron);
cd71f9f4 672 if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kElectron))<1) fElTOF[icentr]->Fill(fPtKp,nSigmaTOF);
673 if(TMath::Abs(nSigmaTOF)<1) fElTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kElectron));
a8ad4709 674 nSigmaTOF = PIDResponse->NumberOfSigmasTOF(KpTrack,AliPID::kPion);
cd71f9f4 675 if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kPion))<1) fPiTOF[icentr]->Fill(fPtKp,nSigmaTOF);
676 if(TMath::Abs(nSigmaTOF)<1) fPiTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kPion));
a8ad4709 677 nSigmaTOF = PIDResponse->NumberOfSigmasTOF(KpTrack,AliPID::kKaon);
cd71f9f4 678 if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kKaon))<1) fKaTOF[icentr]->Fill(fPtKp,nSigmaTOF);
679 if(TMath::Abs(nSigmaTOF)<1) fKaTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kKaon));
680
bc629e38 681 nSigmaTOFRef = PIDResponse->NumberOfSigmasTOF(KpTrack,(AliPID::EParticleType) fSpeciesRef);
682
a8ad4709 683 if(fIsMC){
684 Float_t mismAdd = addMismatchForMC;
685 if(KpTrack->Pt() < 1) mismAdd = addMismatchForMC/KpTrack->Pt();
686
687 if(gRandom->Rndm() < mismAdd){
688 Float_t etaAbs = TMath::Abs(KpTrack->Eta());
689 Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs);
690 channel = channel % 8736;
691 Float_t distIP = fHchannelTOFdistr->GetBinContent(channel);
692
693 // generate random time
a16898fb 694 Float_t timeRandom = fHmismTOF->GetRandom() + distIP*3.35655419905265973e+01;
fc9b31a7 695 Double_t times[AliPID::kSPECIESC];
696 KpTrack->GetIntegratedTimes(times,AliPID::kSPECIESC);
a8ad4709 697 nSigmaTOF = TMath::Abs(timeRandom - times[3])/PIDResponse->GetTOFResponse().GetExpectedSigma(KpTrack->P(), times[3], AliPID::kKaon);
bc629e38 698 nSigmaTOFRef = TMath::Abs(timeRandom - times[fSpeciesRef])/PIDResponse->GetTOFResponse().GetExpectedSigma(KpTrack->P(), times[fSpeciesRef], (AliPID::EParticleType) fSpeciesRef);
a8ad4709 699 }
700 }
701
702 if(fCentrality < 20 && KpTrack->Pt() < 0.9 && KpTrack->Pt() > 0.8)fTOFTPCsignal->Fill(nSigmaTOF,nSigmaTPC);
63d1d548 703 nSigmaTOF = TMath::Abs(nSigmaTOF);
a8ad4709 704
705 if(nSigmaTOF < 2) fPidKp += 256;
706 else if(nSigmaTOF < 3) fPidKp += 512;
707 }
708 }
709
710 if(tofMatch1){
711 nSigmaComb = TMath::Sqrt(nSigmaTOF*nSigmaTOF + nSigmaTPC*nSigmaTPC);
bc629e38 712 nSigmaCombRef = TMath::Sqrt(nSigmaTOFRef*nSigmaTOFRef + nSigmaTPCRef*nSigmaTPCRef);
a8ad4709 713 if(nSigmaTOF < 5 && fCentrality < 20 && KpTrack->Pt() < 0.9 && KpTrack->Pt() > 0.8){
714 fCombsignal->Fill(nSigmaComb);
715 }
716 } else {
717 nSigmaComb = TMath::Abs(nSigmaTPC);
bc629e38 718 nSigmaCombRef = TMath::Abs(nSigmaTPCRef);
a8ad4709 719 }
720
721 // use sigmaTOF instead of sigmaComb
bc629e38 722 if(tofMatch1){
723 nSigmaComb = nSigmaTOF;
724 nSigmaCombRef = nSigmaTOFRef;
725 }
a8ad4709 726
727 if(nSigmaComb < 2) nSigmaComb = 2;
728 else if(nSigmaComb < 3) nSigmaComb = 3;
729 else if(nSigmaComb < 5) nSigmaComb = 4.99;
730 else nSigmaComb = 6;
731
bc629e38 732 if(nSigmaCombRef < 2) nSigmaCombRef = 2;
733 else if(nSigmaCombRef < 3) nSigmaCombRef = 3;
734 else if(nSigmaCombRef < 5) nSigmaCombRef = 4.99;
735 else nSigmaCombRef = 6;
736
a8ad4709 737 if(fPtKp > 4.299) fPtKp = 4.299;
738
739 for(Int_t j=0;j < ntrack;j++){ // loop on negative tracks
740 AliAODTrack* KnTrack = aodEvent->GetTrack(j);
741
742 if (!KnTrack){
743 continue;
744 }
745
746 if(!(KnTrack->Charge() < 0 && KnTrack->Pt() > 0.3 && TMath::Abs(KnTrack->Eta()) < 0.8)) continue;
747
748 px = KpTrack->Px() + KnTrack->Px();
749 py = KpTrack->Py() + KnTrack->Py();
750 pz = KpTrack->Pz() + KnTrack->Pz();
751 E = TMath::Sqrt(KpTrack->P()*KpTrack->P() + 4.93676999999999977e-01*4.93676999999999977e-01);
752 E += TMath::Sqrt(KnTrack->P()*KnTrack->P()+ 4.93676999999999977e-01*4.93676999999999977e-01);
753
754 phiV.SetPxPyPzE(px,py,pz,E);
755 fMassV0 = phiV.M();
756
757 if(fMassV0 < invMmin || fMassV0 > invMmax) continue;
758
759 fPtKn=KnTrack->Pt(),fPhiKn=KnTrack->Phi(),fEtaKn=KnTrack->Eta();
760 fPidKn=0;
761
762 UInt_t detUsedN = fPIDCombined->ComputeProbabilities(KnTrack, PIDResponse, probN);
763 Double_t oldpN[10];
764 fPIDCombined->GetPriors(KnTrack, oldpN, PIDResponse, detUsedN);
765
766 nSigmaTPC2 = PIDResponse->NumberOfSigmasTPC(KnTrack,AliPID::kKaon);
bc629e38 767 nSigmaTPC2Ref = PIDResponse->NumberOfSigmasTPC(KnTrack,(AliPID::EParticleType) fSpeciesRef);
a8ad4709 768
769 if(! (TMath::Abs(nSigmaTPC2) < 5)) continue;
770
e34b28fe 771 nSigmaTOF2=5;
bc629e38 772 nSigmaTOF2Ref=5;
a8ad4709 773 nSigmaComb2=5;
bc629e38 774 nSigmaComb2Ref=5;
a8ad4709 775
776 Int_t tofMatch2 = (KnTrack->GetStatus() & AliVTrack::kTOFout) && (KnTrack->GetStatus() & AliVTrack::kTIME);
9c668341 777 /*
a8ad4709 778 if(mcArray){
779 Int_t labelK = TMath::Abs(KnTrack->GetLabel());
780 AliAODMCParticle *mcp2 = (AliAODMCParticle*)mcArray->At(labelK);
9c668341 781 pdg2 = TMath::Abs(mcp2->GetPdgCode());
782 }
783 */
a8ad4709 784
785 fPidKn = Int_t(probN[3]*100);
786
787 if(tofMatch2){
788 if(!IsChannelValid(TMath::Abs(KnTrack->Eta()))){
789 // remove this tof hit
790 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
791 detUsedP = fPIDCombined->ComputeProbabilities(KnTrack, PIDResponse, probN);
792 fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
793 fPidKn = Int_t(probN[4]*100);
794 tofMatch2=0;
795 }
796 else{
797 if(probN[3] > probN[2] && probN[3] > probN[4] && probN[3] > probN[0]) fPidKn += 128; // max prob
798
799 nSigmaTOF2 = PIDResponse->NumberOfSigmasTOF(KnTrack,AliPID::kKaon);
bc629e38 800 nSigmaTOF2Ref = PIDResponse->NumberOfSigmasTOF(KnTrack,(AliPID::EParticleType) fSpeciesRef);
a8ad4709 801
802 nSigmaTOF2 = TMath::Abs(nSigmaTOF2);
bc629e38 803 nSigmaTOF2Ref = TMath::Abs(nSigmaTOF2Ref);
a8ad4709 804
805 if(fIsMC){
806 Float_t mismAdd = addMismatchForMC;
807 if(KnTrack->Pt() < 1) mismAdd = addMismatchForMC/KnTrack->Pt();
808
809 if(gRandom->Rndm() < mismAdd){
810 Float_t etaAbs = TMath::Abs(KnTrack->Eta());
811 Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs);
812 channel = channel % 8736;
813 Float_t distIP = fHchannelTOFdistr->GetBinContent(channel);
814
815 // generate random time
816 Float_t timeRandom = fHmismTOF->GetRandom() + distIP*3.35655419905265973e+00;
fc9b31a7 817 Double_t times[AliPID::kSPECIESC];
818 KnTrack->GetIntegratedTimes(times,AliPID::kSPECIESC);
e34b28fe 819 nSigmaTOF2 = TMath::Abs(timeRandom - times[3])/PIDResponse->GetTOFResponse().GetExpectedSigma(KnTrack->P(), times[3], AliPID::kKaon);
bc629e38 820 nSigmaTOF2Ref = TMath::Abs(timeRandom - times[fSpeciesRef])/PIDResponse->GetTOFResponse().GetExpectedSigma(KnTrack->P(), times[fSpeciesRef], (AliPID::EParticleType) fSpeciesRef);
a8ad4709 821 }
822 }
823
824 if(fCentrality < 20 && KnTrack->Pt() < 1.2 && KnTrack->Pt() > 1) fTOFTPCsignal->Fill(nSigmaTOF2,nSigmaTPC2);
825
826 if(nSigmaTOF2 < 2) fPidKn += 256;
827 else if(nSigmaTOF2 < 3) fPidKn += 512;
828 }
829 }
830
831 fPtPhi = phiV.Pt();
832 fEtaPhi = phiV.Eta();
833 fPhiPhi = phiV.Phi();
834
835 if(tofMatch2){
836 nSigmaComb2 = TMath::Sqrt(nSigmaTOF2*nSigmaTOF2+ nSigmaTPC2*nSigmaTPC2);
bc629e38 837 nSigmaComb2Ref = TMath::Sqrt(nSigmaTOF2Ref*nSigmaTOF2Ref+ nSigmaTPC2Ref*nSigmaTPC2Ref);
a8ad4709 838 if(nSigmaTOF2 < 5 && fCentrality < 20 && KnTrack->Pt() < 1.2 && KnTrack->Pt() > 1){
839 fCombsignal->Fill(nSigmaComb2);
840 }
841 } else {
842 nSigmaComb2 = TMath::Abs(nSigmaTPC2);
bc629e38 843 nSigmaComb2Ref = TMath::Abs(nSigmaTPC2Ref);
a8ad4709 844 }
845
846 // use sigmaTOF instead of sigmaComb
bc629e38 847 if(tofMatch2){
848 nSigmaComb2 = nSigmaTOF2;
849 nSigmaComb2Ref = nSigmaTOF2Ref;
850 }
a8ad4709 851
852 if(nSigmaComb2 < 2) nSigmaComb2 = 2;
853 else if(nSigmaComb2 < 3) nSigmaComb2 = 3;
854 else if(nSigmaComb2 < 5) nSigmaComb2 = 4.99;
855 else nSigmaComb2 = 6;
856
bc629e38 857 if(nSigmaComb2Ref < 2) nSigmaComb2Ref = 2;
858 else if(nSigmaComb2Ref < 3) nSigmaComb2Ref = 3;
859 else if(nSigmaComb2Ref < 5) nSigmaComb2Ref = 4.99;
860 else nSigmaComb2Ref = 6;
861
a8ad4709 862 Bool_t isTrue = kFALSE;
863
864 if(mcArray){
865 Int_t labelP = TMath::Abs(KpTrack->GetLabel());
866 Int_t labelN = TMath::Abs(KnTrack->GetLabel());
867
868 if(labelP > -1 && labelN > -1){
869 AliAODMCParticle *partP = (AliAODMCParticle*)mcArray->At(labelP);
870 AliAODMCParticle *partN = (AliAODMCParticle*)mcArray->At(labelN);
871
872 Int_t mP = partP->GetMother();
873 Int_t mN = partN->GetMother();
874 if(mP == mN && mP > -1){
875 AliAODMCParticle *partM = (AliAODMCParticle*)mcArray->At(mP);
876 Int_t pdgM = partM->GetPdgCode();
877 if(pdgM == 333) isTrue = kTRUE;
878 }
879 }
880
881 }
882
883 Double_t deltaphi1 = KpTrack->Phi() - fPsi;
884 Double_t deltaphi2 = KnTrack->Phi() - fPsi;
885
f8f53ae0 886 if(gRandom->Rndm() < 0.5){
887 deltaphi1 += TMath::Pi();
888 deltaphi2 += TMath::Pi();
889 }
890
a8ad4709 891 while(deltaphi1 > TMath::Pi()) deltaphi1 -= TMath::Pi()*2;
892 while(deltaphi1 < -TMath::Pi()) deltaphi1 += TMath::Pi()*2;
893 while(deltaphi2 > TMath::Pi()) deltaphi2 -= TMath::Pi()*2;
894 while(deltaphi2 < -TMath::Pi()) deltaphi2 += TMath::Pi()*2;
895
896 if(fPtKn > 4.299) fPtKn = 4.299;
897
898 Float_t xTOfill[] = {fPtPhi,KpTrack->Eta(),fPtKp,fPtKn,(fPidKp%128)*0.01,(fPidKn%128)*0.01,tofMatch1,tofMatch2,isTrue,nSigmaComb,nSigmaComb2,deltaphi1,deltaphi2,fPsi};
bc629e38 899 Float_t xTOfill2[] = {fPtPhi,KpTrack->Eta(),fPtKp,fPtKn,(fPidKp%128)*0.01,(fPidKn%128)*0.01,tofMatch1,tofMatch2,isTrue,nSigmaComb,nSigmaComb2,deltaphi1,deltaphi2,fPsi};
a8ad4709 900
a8ad4709 901 Int_t ipt = 0;
902 while(fPtPhiMin[ipt] < fPtPhi && ipt < nPtBin){
903 ipt++;
904 }
905 ipt--;
906 if(ipt < 0) ipt = 0; // just to be sure
907
908 if(TMath::Abs(fEtaPhi) < 0.8 && fPtKp > 0.3 && fPtKn > 0.3){
bc629e38 909 if(fSpeciesRef != 3){
910 xTOfill[4] = probP[fSpeciesRef];
911 xTOfill2[5] = probN[fSpeciesRef];
912
913 xTOfill[9] = nSigmaCombRef;
914 xTOfill2[10] = nSigmaComb2Ref;
915 }
916
917
a8ad4709 918 if((fPidKn%128) > 80) fContPid->Fill(0,fMassV0,fCentrality,xTOfill); // use tagging on negative track
919 xTOfill[1] = KnTrack->Eta();
bc629e38 920 if((fPidKp%128) > 80) fContPid2->Fill(0,fMassV0,fCentrality,xTOfill2);// use tagging on positive track
a8ad4709 921
520899fb 922 if(fPIDuserCut){
923 Float_t xUser[] = {KpTrack->Eta(),fPtKp,isTrue,0,deltaphi1,fPsi};
924 Float_t xUser2[] = {KnTrack->Eta(),fPtKn,isTrue,0,deltaphi2,fPsi};
925
926 if(fPIDuserCut->IsSelected(KpTrack,AliPID::kPion)){ // to be filled for positive
927 xUser[3] = 1;
928 } else if(fPIDuserCut->IsSelected(KpTrack,AliPID::kKaon)){
929 xUser[3] = 2;
930 } else if(fPIDuserCut->IsSelected(KpTrack,AliPID::kProton)){
931 xUser[3] = 3;
932 }
933 if(fPIDuserCut->IsSelected(KnTrack,AliPID::kPion)){ // to be filled for negative
934 xUser2[3] = 1;
935 } else if(fPIDuserCut->IsSelected(KnTrack,AliPID::kKaon)){
936 xUser2[3] = 2;
937 } else if(fPIDuserCut->IsSelected(KnTrack,AliPID::kProton)){
938 xUser2[3] = 3;
939 }
940 if((fPidKn%128) > 80) fContUser->Fill(0,fMassV0,fCentrality,xUser);
941 if((fPidKp%128) > 80) fContUser2->Fill(0,fMassV0,fCentrality,xUser2);
942 }
943
a8ad4709 944 }
a8ad4709 945 }
946 } // end analysi phi
947
948}
949
950//_____________________________________________________________________________
951Float_t AliAnalysisTaskPhiBayes::GetVertex(AliAODEvent* aod) const
952{
953
954 Float_t zvtx = -999;
955
956 const AliAODVertex* vtxAOD = aod->GetPrimaryVertex();
957 if (!vtxAOD)
958 return zvtx;
959 if(vtxAOD->GetNContributors()>0)
960 zvtx = vtxAOD->GetZ();
961
962 return zvtx;
963}
964//_____________________________________________________________________________
965void AliAnalysisTaskPhiBayes::Terminate(Option_t *)
966{
967 // Terminate loop
968 Printf("Terminate()");
969}
970//-------------------------------------------------------------------------
971Int_t AliAnalysisTaskPhiBayes::IsChannelValid(Float_t etaAbs){
972 if(!fIsMC) return 1; // used only on MC
973
9c668341 974 if(fTypeCol == 2){ // LHC10h or LHC11h because of TOF matching window at 3 cm
a8ad4709 975 Int_t channel = Int_t(4334.09 - 4758.36 * etaAbs -1989.71 * etaAbs*etaAbs + 1957.62*etaAbs*etaAbs*etaAbs);
976
977 if(!(channel%20)) return 0; // 5% additional loss in MC
978 }
979
980 return 1;
981}