]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/Correlations/DPhi/TriggerPID/AliAnalysisTaskPIDCORR.cxx
coverity fix (warning: variable 'dphistarmin' set but not used)
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / TriggerPID / AliAnalysisTaskPIDCORR.cxx
CommitLineData
7cbcecc6 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//Modified.....
17
18#include "AliAnalysisTaskPIDCORR.h"
19
20#include "Riostream.h"
21#include "TChain.h"
22#include "TTree.h"
23#include "TH1F.h"
24#include "TH2F.h"
25#include "TCanvas.h"
26#include "TList.h"
27
28#include "AliAODEvent.h"
29#include "AliAODTrack.h"
30#include "AliPIDResponse.h"
31#include "AliPID.h"
32#include "AliAODInputHandler.h"
33#include "AliVEvent.h"
34#include "AliVParticle.h"
35
36#include "AliAODMCHeader.h"
37#include "AliAODMCParticle.h"
38#include "AliMCEventHandler.h"
39#include "AliMCEvent.h"
40#include "TParticle.h"
41#include <TDatabasePDG.h>
42#include <TParticlePDG.h>
43
44#include "AliAnalysisManager.h"
45#include "AliAnalysisTaskSE.h"
46
47#include "AliEventPoolManager.h"
48
49
50ClassImp(AliAnalysisTaskPIDCORR)
51ClassImp(AliPIDCorrParticle)
52
53//________________________________________________________________________
54AliAnalysisTaskPIDCORR::AliAnalysisTaskPIDCORR() // All data members should be initialised here
55:AliAnalysisTaskSE(),
56 fAOD(0),
57 fAODVertex(0),
58 fPIDResponse(0),
59 fOutputList(0),
60 fHistPt(0),
61 fHistdEdx(0),
62 fTriggerPhiAll(0),
63 fTriggerPhiPion(0),
64 fTriggerPhiKaonProton(0),
65 fTriggerEtaAll(0),
66 fTriggerEtaPion(0),
67 fTriggerEtaKaonProton(0),
68 fAssoPhi(0),
69 fAssoEta(0),
70 fGlobalTracks(0),
71 fArrayMC(0),
72 fPoolMgr(0),
73 EffEtaTrigPr(1),
74 EffEtaTrigPi(1),
75 EffEtaTrigAll(1)
76
77{
78
79
80
81
82 for(int i=0;i<10;i++)
83 {
84 fDihadronCorrelation[i]=NULL;
85 fDihadronCorrelationPion[i]=NULL;
86 fDihadronCorrelationProtonKaon[i]=NULL;
87 fHistNSigmaTPCPion[i]=NULL;
88 fMixedEvent[i]=NULL;
89 fMixedPion[i]=NULL;
90 fMixedProtonKaon[i]=NULL;
91 }
92
93 for(int j=0;j<3;j++)
94 {
95 fHistNSAll[j]=NULL;
96 fHistNSPion[j]=NULL;
97 fHistNSProton[j]=NULL;
98 fHistASAll[j]=NULL;
99 fHistASPion[j]=NULL;
100 fHistASProton[j]=NULL;
101 fHistBgAll[j]=NULL;
102 fHistBgPion[j]=NULL;
103 fHistBgProton[j]=NULL;
104 fHistBulkAll[j]=NULL;
105 fHistBulkPion[j]=NULL;
106 fHistBulkProton[j]=NULL;
107
108
109 }
110
111
112}
113
114//________________________________________________________________________
115AliAnalysisTaskPIDCORR::AliAnalysisTaskPIDCORR(const char *name) // All data members should be initialised here
116 :AliAnalysisTaskSE(name),
117 fAOD(0),
118 fAODVertex(0),
119 fPIDResponse(0),
120 fOutputList(0),
121 fHistPt(0),
122 fHistdEdx(0),
123 fTriggerPhiAll(0),
124 fTriggerPhiPion(0),
125 fTriggerPhiKaonProton(0),
126 fTriggerEtaAll(0),
127 fTriggerEtaPion(0),
128 fTriggerEtaKaonProton(0),
129 fAssoPhi(0),
130 fAssoEta(0),
131 fGlobalTracks(0),
132 fArrayMC(0),
133 fPoolMgr(0),
134 EffEtaTrigPr(1),
135 EffEtaTrigPi(1),
136 EffEtaTrigAll(1)
137
138{
139
140
141
142 for(int i=0;i<10;i++)
143 {
144 fDihadronCorrelation[i]=NULL;
145 fDihadronCorrelationPion[i]=NULL;
146 fDihadronCorrelationProtonKaon[i]=NULL;
147 fHistNSigmaTPCPion[i]=NULL;
148 fMixedEvent[i]=NULL;
149 fMixedPion[i]=NULL;
150 fMixedProtonKaon[i]=NULL;
151 }
152
153 for(int j=0;j<3;j++)
154 {
155 fHistNSAll[j]=NULL;
156 fHistNSPion[j]=NULL;
157 fHistNSProton[j]=NULL;
158 fHistASAll[j]=NULL;
159 fHistASPion[j]=NULL;
160 fHistASProton[j]=NULL;
161 fHistBgAll[j]=NULL;
162 fHistBgPion[j]=NULL;
163 fHistBgProton[j]=NULL;
164 fHistBulkAll[j]=NULL;
165 fHistBulkPion[j]=NULL;
166 fHistBulkProton[j]=NULL;
167
168
169 }
170
171
172 // The last in the above list should not have a comma after it
173
174 // Constructor
175 // Define input and output slots here (never in the dummy constructor)
176 // Input slot #0 works with a TChain - it is connected to the default input container
177 // Output slot #1 writes into a TH1 container
178
179 DefineOutput(1, TList::Class()); // for output list
180}
181
182//________________________________________________________________________
183AliAnalysisTaskPIDCORR::~AliAnalysisTaskPIDCORR()
184{
185 // Destructor. Clean-up the output list, but not the histograms that are put inside
186 // (the list is owner and will clean-up these histograms). Protect in PROOF case.
187 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
188 delete fOutputList;
189 }
190
191}
192
193//________________________________________________________________________
194void AliAnalysisTaskPIDCORR::UserCreateOutputObjects()
195{
196 // Create histograms
197 // Called once (on the worker node)
198
199 AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
200 AliInputEventHandler *inputHandler = (AliInputEventHandler*)man->GetInputEventHandler();
201 fPIDResponse = inputHandler->GetPIDResponse();
202
203 fOutputList = new TList();
204 fOutputList->SetOwner(); // IMPORTANT!
205
206
207
208
209
210
211 fHistPt = new TH1F("fHistPt", "P_{T} distribution", 15, 0.1, 3.1);
212 fHistdEdx = new TH2F("fHistdEdx","TPC signal distribution",1000,0.,50.,1000,0,500);
213
214
215 TString HistName;
216
217 for(int i=0;i<10;i++)
218 {
219 HistName="fDihadronCorrelation";HistName+=i;
220 fDihadronCorrelation[i]= new TH2F(HistName.Data(),"#delta#eta-#delta#phi correlation",36,-TMath::Pi()/2,3.*TMath::Pi()/2,32,-1.6,1.6);
221 fDihadronCorrelation[i]->Sumw2();
222 fOutputList->Add(fDihadronCorrelation[i]);
223
224 HistName="fDihadronCorrelationPion";HistName+=i;
225 fDihadronCorrelationPion[i]= new TH2F(HistName.Data(),"#delta#eta-#delta#phi correlation",36,-TMath::Pi()/2,3.*TMath::Pi()/2,32,-1.6,1.6);
226 fDihadronCorrelationPion[i]->Sumw2();
227 fOutputList->Add(fDihadronCorrelationPion[i]);
228
229 HistName="fDihadronCorrelationProtonKaon";HistName+=i;
230 fDihadronCorrelationProtonKaon[i]= new TH2F(HistName.Data(),"#delta#eta-#delta#phi correlation",36,-TMath::Pi()/2,3.*TMath::Pi()/2,32,-1.6,1.6);
231 fDihadronCorrelationProtonKaon[i]->Sumw2();
232 fOutputList->Add(fDihadronCorrelationProtonKaon[i]);
233
234 HistName="fMixedEvent";HistName+=i;
235 fMixedEvent[i]= new TH2F(HistName.Data(),"#delta#eta-#delta#phi correlation",36,-TMath::Pi()/2,3.*TMath::Pi()/2,32,-1.6,1.6);
236 fMixedEvent[i]->Sumw2();
237 fOutputList->Add(fMixedEvent[i]);
238
239 HistName="fMixedPion";HistName+=i;
240 fMixedPion[i]= new TH2F(HistName.Data(),"#delta#eta-#delta#phi correlation",36,-TMath::Pi()/2,3.*TMath::Pi()/2,32,-1.6,1.6);
241 fMixedPion[i]->Sumw2();
242 fOutputList->Add(fMixedPion[i]);
243
244 HistName="fMixedProtonKaon";HistName+=i;
245 fMixedProtonKaon[i]= new TH2F(HistName.Data(),"#delta#eta-#delta#phi correlation",36,-TMath::Pi()/2,3.*TMath::Pi()/2,32,-1.6,1.6);
246 fMixedProtonKaon[i]->Sumw2();
247 fOutputList->Add(fMixedProtonKaon[i]);
248
249 HistName="fHistNSigmaTPCPion";HistName+=i;
250 fHistNSigmaTPCPion[i]= new TH1F(HistName.Data(),"NSigma distribution for all particles",200,-10,10);
251 fHistNSigmaTPCPion[i]->Sumw2();
252 fOutputList->Add(fHistNSigmaTPCPion[i]);
253 }
254
255 for(Int_t l=0;l<3;l++)
256 {
257 HistName="fHistNSPtSpectraAll";HistName+=l;
258 fHistNSAll[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
259 fHistNSAll[l]->Sumw2();
260 fOutputList->Add(fHistNSAll[l]);
261
262 HistName="fHistNSPtSpectraPion";HistName+=l;
263 fHistNSPion[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
264 fHistNSPion[l]->Sumw2();
265 fOutputList->Add(fHistNSPion[l]);
266
267 HistName="fHistNSPtSpectraProton";HistName+=l;
268 fHistNSProton[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
269 fHistNSProton[l]->Sumw2();
270 fOutputList->Add(fHistNSProton[l]);
271
272 HistName="fHistASPtSpectraAll";HistName+=l;
273 fHistASAll[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
274 fHistASAll[l]->Sumw2();
275 fOutputList->Add(fHistASAll[l]);
276
277 HistName="fHistASPtSpectraPion";HistName+=l;
278 fHistASPion[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
279 fHistASPion[l]->Sumw2();
280 fOutputList->Add(fHistASPion[l]);
281
282 HistName="fHistASPtSpectraProton";HistName+=l;
283 fHistASProton[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
284 fHistASProton[l]->Sumw2();
285 fOutputList->Add(fHistASProton[l]);
286
287 HistName="fHistBgPtSpectraAll";HistName+=l;
288 fHistBgAll[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
289 fHistBgAll[l]->Sumw2();
290 fOutputList->Add(fHistBgAll[l]);
291
292 HistName="fHistBgPtSpectraPion";HistName+=l;
293 fHistBgPion[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
294 fHistBgPion[l]->Sumw2();
295 fOutputList->Add(fHistBgPion[l]);
296
297 HistName="fHistBgPtSpectraProton";HistName+=l;
298 fHistBgProton[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
299 fHistBgProton[l]->Sumw2();
300 fOutputList->Add(fHistBgProton[l]);
301
302
303
304 HistName="fHistBulkPtSpectraAll";HistName+=l;
305 fHistBulkAll[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
306 fHistBulkAll[l]->Sumw2();
307 fOutputList->Add(fHistBulkAll[l]);
308
309 HistName="fHistBulkPtSpectraPion";HistName+=l;
310 fHistBulkPion[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
311 fHistBulkPion[l]->Sumw2();
312 fOutputList->Add(fHistBulkPion[l]);
313
314 HistName="fHistBulkPtSpectraProton";HistName+=l;
315 fHistBulkProton[l]= new TH1F(HistName.Data(),"Pt_spectra of Associated",15,0.5,3.5);
316 fHistBulkProton[l]->Sumw2();
317 fOutputList->Add(fHistBulkProton[l]);
318
319 }
320
321 fTriggerPhiAll = new TH1F("fTriggerPhiAll","Phi distribution of All trigger particles",340,0.0,2*TMath::Pi());
322 fTriggerPhiPion = new TH1F("fTriggerPhiPion","Phi distribution of Pion trigger particles",340,0.0,2*TMath::Pi());
323 fTriggerPhiKaonProton = new TH1F("fTriggerPhiKaonProton","Phi distribution of Kaon & Proton trigger particles",340,0.0,2*TMath::Pi());
324
325 fTriggerEtaAll = new TH1F("fTriggerEtaAll","Eta distribution of All trigger particles",16,-0.8,0.8);
326 fTriggerEtaPion = new TH1F("fTriggerEtaPion","Eta distribution of Pion trigger particles",16,-0.8,0.8);
327 fTriggerEtaKaonProton = new TH1F("fTriggerEtaKaonProton","Eta distribution of Kaon & Proton trigger particles",16,-0.8,0.8);
328
329 fAssoPhi = new TH1F("fAssoPhi","Phi distribution of Associated particles",340,0.0,2*TMath::Pi());
330 fAssoEta = new TH1F("fAssoEta","Eta distribution of Associated particles",16,-0.8,0.8);
331
332
333
334 fOutputList->Add(fTriggerPhiAll);
335 fOutputList->Add(fTriggerPhiPion);
336 fOutputList->Add(fTriggerPhiKaonProton);
337 fOutputList->Add(fTriggerEtaAll);
338 fOutputList->Add(fTriggerEtaPion);
339 fOutputList->Add(fTriggerEtaKaonProton);
340 fOutputList->Add(fAssoPhi);
341 fOutputList->Add(fAssoEta);
342 fOutputList->Add(fHistPt);
343 fOutputList->Add(fHistdEdx);
344
345
346
347
348
349
350
351
352//Mixing
353DefineEventPool();
354
355
356 PostData(1, fOutputList); // Post data for ALL output slots >0 here, to get at least an empty histogram
357}
358
359//________________________________________________________________________
360Bool_t AliAnalysisTaskPIDCORR :: SelectEvent(AliAODVertex* vertex)
361
362{
363
364 //
365 // Event Selection.
366 //
367
368
369 Double_t primVtx[3];
370 vertex->GetXYZ(primVtx);
371 if (TMath::Sqrt(primVtx[0]*primVtx[0] + primVtx[1]*primVtx[1])>1. || TMath::Abs(primVtx[2])>10.) {
372
373 return kFALSE;
374 }
375
376 return kTRUE;
377
378}
379//_______________________________________________________________________
380Int_t AliAnalysisTaskPIDCORR::ClassifyTrack(AliAODTrack* track)
381{
382//Int_t Classification=999;
383Double_t pt = track->Pt();
384Double_t eta = track->Eta();
385//Double_t phi = track->Phi();
386
387if (!(track->TestFilterMask(1<<7))) {
388
389 return 0;
390 }
391
392if(pt< 0.2)
393 {
394 return 0;
395}
396
397if (TMath::Abs(eta)>=0.8) {
398
399 return 0;
400 }
401
402//DCA cut
403
404/*if(PtDependentCut)
405{
406
407
408}*/
409
410if(track->Charge()==0) return 0;
411
412AliAODTrack *globaltrack=GetGlobalTrack(track->GetID());
413if(!globaltrack) return 0;
414
415
416Float_t dxy, dz;
417
418dxy = track->DCA();
419dz = track->ZAtDCA();
420//cout<<dxy<<" "<<dz<<endl;
421if(TMath ::Abs(dxy) >2.4 || TMath ::Abs(dz)>3.2) return 0;
422
423Double_t chi2ndf = track->Chi2perNDF();
424if(chi2ndf>4.0) return 0;
425
426Double_t nclus = track->GetTPCClusterInfo(2,1);
427if(nclus<80) return 0;
428
429//select primary:
33ff586d 430if(track->GetType() != AliAODTrack::kPrimary) return 0;
7cbcecc6 431
432return 1;
433}
434//________________________________________________________________
435void AliAnalysisTaskPIDCORR::FillGlobalTracksArray() {
436
437
438
439 if (!fAOD) {
440 //if (fVerbose>0) cout << "AliAnalysisTaskDiHadronPID::FillGlobalTracksArray -> ERROR: fAODEvent not set." << endl;
441 return;
442 }
443
444
445
446 fGlobalTracks = new TObjArray();
447 AliAODTrack* track = 0x0;
448
449 for (Int_t iTrack = 0; iTrack < fAOD->GetNumberOfTracks(); iTrack++) {
450
451 track = fAOD->GetTrack(iTrack);
452
453 // I.e., if it does NOT pass the filtermask.
454 if (!(track->TestFilterMask(1<<7))) {
455 if (track->GetID()>-1) fGlobalTracks->AddAtAndExpand(track,track->GetID());
456 //cout<<"Track ID: "<<track->GetID()<<" Partner ID: "<<(-track->GetID()-1)<<endl;
457 }
458
459 }
460 }
461//_______________________________________________________________________
462
463AliAODTrack* AliAnalysisTaskPIDCORR::GetGlobalTrack(Int_t trackID) {
464
465
466
467 AliAODTrack* partner = 0x0;
468
469 partner = (AliAODTrack*)(fGlobalTracks->At(-trackID-1));
470
471
472 return partner;
473
474}
475
476
477//________________________________________________________________________
478void AliAnalysisTaskPIDCORR::UserExec(Option_t *)
479{
480 // Main loop
481 // Called for each event
482
483 // Post output data.
484
485 AliVEvent *event = InputEvent();
486 if (!event) { return; }
487
488
489 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
490 if (!fAOD) {
491 // printf("ERROR: fAOD not available\n");
492 return;
493 }
494
495
496
497
498Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
499 if(!isSelected) return;
500
501fAODVertex = fAOD->GetPrimaryVertex();
502 if (!fAODVertex) {
503 //if (fVerbose>0) cout << "AliAnalysisTaskDiHadronPID::UserExec -> ERROR: No AliAODVertex pointer could be created." << endl;
504 return;
505 }
506
507//select vertex
508if(!SelectEvent(fAODVertex)) return;
509
510/*fHistVx->Fill(fAODVertex->GetX());
511fHistVy->Fill(fAODVertex->GetY());
512fHistVz->Fill(fAODVertex->GetZ());*/
513
514
515//Float_t bSign = (fAOD->GetMagneticField() > 0) ? 1 : -1;
516
517/*fArrayMC = (TClonesArray*)fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
518 if (!fArrayMC) {
519 // AliFatal("Error: MC particles branch not found!\n");
520return;
521 }
522*/
523/*AliAODMCHeader *mcHdr=NULL;
524 mcHdr=(AliAODMCHeader*)fAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName());
525 if(!mcHdr) {
526 //printf("MC header branch not found!\n");
527 return;
528 }
529*/
530// Fill the TObjArray which holds Global tracks.
531 FillGlobalTracksArray();
532
533// Create object arrays for associateds.
534 TObjArray *associateds = new TObjArray();
535
536
537Int_t TriggerIndx=-99999;
538Double_t TriggerPtMin=4.00;
539Double_t TriggerPtMax=8.00;
540Double_t TriggerPhi=1e-10;
541Double_t TriggerEta=1e-10;
542Double_t TriggerPt=TriggerPtMin;
543
544
545
546
547
548 // Track loop to fill a pT spectrum
549 for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++)
550 {
551 AliAODTrack* track = fAOD->GetTrack(iTracks);
552 if (!track) {
553 //printf("ERROR: Could not receive track %d\n", iTracks);
554 continue;
555 }
556
557 Int_t tracktype=ClassifyTrack(track);
558
559 if(tracktype==0) continue;
560
561 if(tracktype==1)
562 {
563
564 AliAODTrack *globaltrack=GetGlobalTrack(track->GetID());
565 Double_t pT=globaltrack->Pt();
566 Double_t Eta=globaltrack->Eta();
567
568
569 Double_t dEdx=globaltrack->GetTPCsignal();
570 if(dEdx==0) continue;
571
572
573 fHistdEdx->Fill(globaltrack->P(),dEdx);
574 fHistPt->Fill(pT);
575
576
577 if(pT>TriggerPtMin && pT<=TriggerPtMax)
578 {
579 TriggerPt=pT;
580 TriggerPhi=globaltrack->Phi();
581 TriggerEta=globaltrack->Eta();
582 TriggerIndx=track->GetID();
583 TriggerPtMin=TriggerPt;
584 }
585
586 if(pT>0.2 && TMath::Abs(Eta)<0.8)
587 associateds->AddLast(globaltrack);
588
589
590 }
591
592
593 } //track loop
594
595
596 Bool_t IsPion=kFALSE;
597 Bool_t IsKaonProton=kFALSE;
598 //cout<<"***************************************************************************"<<TriggerEta<<endl;
599 if(TMath::Abs(TriggerEta)>0.8) return;
600
601 if(TriggerIndx!=-99999)
602 {
603
604 //Float_t bSign = (fAOD->GetMagneticField() > 0) ? 1 : -1;
605
606 AliAODTrack *currentAssociateds=0x0;
607
608 AliAODTrack *TriggerTrck=GetGlobalTrack(TriggerIndx);
609
610 if(!TriggerTrck) return;
611
612
613
614
615
616
617
618 Int_t TrgrPtBin=GetTriggerPtBin(TriggerTrck);
619
620 if(TrgrPtBin> 7) return;
621
622 Bool_t CheckTrackPIDqa=GetTrackStatus(TriggerTrck);
623 if(!CheckTrackPIDqa) return;
624
625 Double_t nSigma_TPC=(fPIDResponse->NumberOfSigmasTPC(TriggerTrck, (AliPID ::EParticleType)2));
626
627
628 fHistNSigmaTPCPion[TrgrPtBin]->Fill(nSigma_TPC);
629 //if(nSigma_TPC >= 4.0 || nSigma_TPC< -7.5) return;
630 if(nSigma_TPC > 0.0 && nSigma_TPC< 4.0) IsPion=kTRUE;
631 if(nSigma_TPC > -6.0 && nSigma_TPC< -3.0) IsKaonProton=kTRUE;
632 //cout<<"NSigma_TPC********************************************************************************"<<nSigma_TPC<<" "<<TriggerTrck->GetTPCsignalN()<<endl;
633
634 EffEtaTrigAll=GetEtaCorrectionFactorTrigAll(TriggerEta) ;
635 fTriggerPhiAll->Fill(TriggerPhi);
636 fTriggerEtaAll->Fill(TriggerEta,1./(EffEtaTrigAll));
637 if(IsPion)
638 {
639 EffEtaTrigPi=GetEtaCorrectionFactorTrigPion(TriggerEta) ;
640 fTriggerPhiPion->Fill(TriggerPhi);
641 fTriggerEtaPion->Fill(TriggerEta,1./(EffEtaTrigPi));
642 }
643 if(IsKaonProton)
644 {
645 EffEtaTrigPr=GetEtaCorrectionFactorTrigProton(TriggerEta) ;//Eff value of triggers
646 fTriggerPhiKaonProton->Fill(TriggerPhi);
647 fTriggerEtaKaonProton->Fill(TriggerEta,1./(EffEtaTrigPr));
648
649 //cout<<"PROTON TRIGGER***************************************************************"<<" "<<EffEtaTrigP<<endl;
650 }
651
652
653
654 for(Int_t iasso=0;iasso<associateds->GetEntriesFast();iasso++ )
655 {
656 currentAssociateds = (AliAODTrack*)(associateds->At(iasso));
657 Double_t assoPt=currentAssociateds->Pt();
658
659 Int_t AssoPtBin=(Int_t)(2*assoPt);
660
661 if(assoPt<4.0)
662 {
663 //Bool_t TwoTrackEff=TwoTrackEfficiency(TriggerTrck,currentAssociateds,0.02,bSign);
664
665 //if(!TwoTrackEff) continue;
666
667//Identify Associated**********************************************************************
668
669IdentifyAssociated(TriggerEta,TriggerPhi,IsPion,IsKaonProton,currentAssociateds);
670
671//Identify Associated***********************************************************************
672
673 fAssoPhi->Fill(currentAssociateds->Phi());
674 fAssoEta->Fill(currentAssociateds->Eta());
675
676 Double_t delphi= PhiRange(TriggerPhi - currentAssociateds->Phi());
677 Double_t deleta=TriggerEta - currentAssociateds->Eta();
678
679 Float_t EffEtaAsso=GetEtaCorrectionFactorAsso(currentAssociateds->Eta());//Eff value of associateds
680
681 Float_t WeightSAll=(1./(EffEtaAsso*EffEtaTrigAll));
682 fDihadronCorrelation[AssoPtBin]->Fill(delphi,deleta,WeightSAll);
683 if(IsPion)
684 {
685 Float_t WeightSPi=(1./(EffEtaAsso*EffEtaTrigPi));
686 fDihadronCorrelationPion[AssoPtBin]->Fill(delphi,deleta,WeightSPi);
687
688 }
689 if(IsKaonProton)
690 {
691
692 Float_t WeightSPr=(1./(EffEtaAsso*EffEtaTrigPr));
693 //cout<<WeightS<<endl;
694 fDihadronCorrelationProtonKaon[AssoPtBin]->Fill(delphi,deleta,WeightSPr);//Applied Efficiency Correction
695 }
696
697 }
698
699 }
700
701 }
702
703//Mixing starts here----------------------------------------------------------------------------------------------------------------
704
705 Double_t multiplicity=fAOD->GetNumberOfTracks();
706 Double_t MultipORcent=multiplicity;
707 AliAODVertex *vtx =fAOD->GetPrimaryVertex();
708 Double_t zvertex =vtx->GetZ();
709 Double_t poolmin=0;
710 Double_t poolmax=150;
711 if(TMath:: Abs(zvertex)>=10 || MultipORcent>poolmax || MultipORcent<poolmin) return ;
712 AliEventPool* pool =NULL;
713 pool=fPoolMgr->GetEventPool(MultipORcent, zvertex);
714 if(pool==NULL)
715 {
716 //AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipORcent, zvertex));
717 return;
718 }
719 if (pool->IsReady() || pool->NTracksInPool() > 50000/ 10 || pool->GetCurrentNEvents() >=5)
720 {
721 const Int_t nMix = pool->GetCurrentNEvents();
722
723 for (Int_t jMix=0; jMix<nMix; jMix++)
724 {
725 TObjArray* bgTracks = NULL;
726 bgTracks=pool->GetEvent(jMix);
727 if(!bgTracks) continue;
728 for(Int_t itrack=0;itrack<bgTracks->GetEntriesFast();++itrack)
729 {
730 AliPIDCorrParticle *PIDCorrParticle =NULL;
731 PIDCorrParticle=(AliPIDCorrParticle*)(bgTracks->At(itrack));
732 Double_t assoPt=PIDCorrParticle->Pt();
733 Int_t Ptbinbg=(Int_t)(assoPt*2);
734 if(assoPt<4.0)
735 {
736
737 Float_t EffEtaAssoMixed=GetEtaCorrectionFactorAsso(PIDCorrParticle->Eta());
738
739 Double_t mixedDelPhi=PhiRange(TriggerPhi-PIDCorrParticle->Phi());
740 Double_t mixedDelEta=TriggerEta-PIDCorrParticle->Eta();
741
742
743 if(TriggerIndx!=-99999)
744 {
745 Float_t WeightMAll=(1./(EffEtaAssoMixed*EffEtaTrigAll));
746 fMixedEvent[Ptbinbg]->Fill(mixedDelPhi,mixedDelEta,WeightMAll);
747 if(IsPion)
748 {
749 Float_t WeightMPi=(1./(EffEtaAssoMixed*EffEtaTrigPi));
750 fMixedPion[Ptbinbg]->Fill(mixedDelPhi,mixedDelEta,WeightMPi);
751
752 }
753 if(IsKaonProton)
754 {
755 Float_t WeightMPr=(1./(EffEtaAssoMixed*EffEtaTrigPr));
756 //cout<<WeightM<<endl;
757 fMixedProtonKaon[Ptbinbg]->Fill(mixedDelPhi,mixedDelEta,WeightMPr);
758 }
759 }
760 }
761 }
762 }
763 }
764
765
766
767 //Update pool
768 TObjArray* objArray = NULL;
769 objArray = (TObjArray*)AcceptTracksforMixing(fAOD);
770 if(!objArray) return;
771 if(objArray->GetEntriesFast()>0) {
772 pool->UpdatePool(objArray);
773 }
774
775
776
777 PostData(1, fOutputList);
778}
779//_______________________________________________________________________________________
780
781Double_t AliAnalysisTaskPIDCORR::PhiRange(Double_t DPhi)
782
783{
784 //
785 // Puts the argument in the range [-pi/2,3 pi/2].
786 //
787
788 if (DPhi < -TMath::Pi()/2) DPhi += 2*TMath::Pi();
789 if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi();
790
791 return DPhi;
792
793}
794
795//________________________________________________________________________
796Int_t AliAnalysisTaskPIDCORR:: GetTriggerPtBin(AliAODTrack *track)
797{
798Int_t Bin;
799Double_t Pt_Max=track->Pt();
800if(Pt_Max<4.0) Bin=999;
801if(Pt_Max>=4.0 && Pt_Max<4.5) Bin=0;
802if(Pt_Max>=4.5 && Pt_Max<5.0) Bin=1;
803if(Pt_Max>=5.0 && Pt_Max<5.5) Bin=2;
804if(Pt_Max>=5.5 && Pt_Max<6.0) Bin=3;
805if(Pt_Max>=6.0 && Pt_Max<6.5) Bin=4;
806if(Pt_Max>=6.5 && Pt_Max<7.0) Bin=5;
807if(Pt_Max>=7.0 && Pt_Max<7.5) Bin=6;
808if(Pt_Max>=7.5 && Pt_Max<8.0) Bin=7;
809if(Pt_Max>=8.0) Bin=999;
810return Bin;
811
812
813}
814
815//______________________________________________________________________
816Bool_t AliAnalysisTaskPIDCORR :: GetTrackStatus(AliAODTrack *track)
817{
818 if ((track->GetStatus() & AliAODTrack::kTPCin ) == 0) return kFALSE;
819 if ((track->GetStatus() & AliAODTrack::kTPCrefit) == 0) return kFALSE;
820 if ((track->GetStatus() & AliAODTrack::kITSrefit) == 0) return kFALSE;
821 return kTRUE;
822}
823//______________________________________________________________________
824
825void AliAnalysisTaskPIDCORR ::DefineEventPool()
826{
827const Int_t MaxNofEvents=1000;
828const Int_t MinNofTracks=50000;
829const Int_t NofCentBins=3;
830Double_t CentralityBins[NofCentBins+1]={2,20,50,150};
831const Int_t NofVrtxBins=10;
832Double_t ZvrtxBins[NofVrtxBins+1]={-10,-8,-6,-4,-2,0,2,4,6,8,10};
833
834
835fPoolMgr = new AliEventPoolManager(MaxNofEvents,MinNofTracks,NofCentBins,CentralityBins,NofVrtxBins,ZvrtxBins);
836}
837//_______________________________________________________________________
838TObjArray *AliAnalysisTaskPIDCORR::AcceptTracksforMixing(AliAODEvent *inputEvent)
839{
840 Int_t nTracks = inputEvent->GetNumberOfTracks();
841
842
843
844 TObjArray* tracksClone = new TObjArray;
845 tracksClone->SetOwner(kTRUE);
846
847 for (Int_t iTrack=0; iTrack<nTracks; ++iTrack)
848{
849 AliAODTrack* track = inputEvent->GetTrack(iTrack);
850
851 Int_t trackclass=ClassifyTrack(track);
852 if (trackclass==1)
853 {
854 //AliAODTrack *globaltrack=GetGlobalTrack(track->GetID());
855 //Double_t MpT=globaltrack->Pt();
856 //Double_t MEta=globaltrack->Eta();
857 //if(MpT>0.2 && TMath::Abs(MEta)<=0.8)
858 tracksClone->Add(new AliPIDCorrParticle(track->Eta(), track->Phi(), track->Pt(),track->Charge()));
859 }
860}
861
862return tracksClone;
863}
864//_________________________________________________________________________________________________________________________
865
866
867Bool_t AliAnalysisTaskPIDCORR::TwoTrackEfficiency(AliAODTrack *trig,AliAODTrack *asso,Float_t ftwoTrackEfficiencyCutValue,Float_t bSign)
868{
869 if(!trig || !asso) return kFALSE;
870 //if (twoTrackEfficiencyCut)
871 //{
872 // the variables & cuthave been developed by the HBT group
873 // see e.g. https://indico.cern.ch/materialDisplay.py?contribId=36&sessionId=6&materialId=slides&confId=142700
874
875 Float_t phi1 = trig->Phi();
876 Float_t pt1 = trig->Pt();
877 Float_t charge1 = trig->Charge();
878 Float_t eta1=trig->Eta();
879
880 Float_t phi2 = asso->Phi();
881 Float_t pt2 = asso->Pt();
882 Float_t charge2 = asso->Charge();
883 Float_t eta2=asso->Eta();
884
885 Float_t deta=eta1-eta2;
886 // optimization
887 if (TMath::Abs(deta) < ftwoTrackEfficiencyCutValue * 2.5 * 3)
888 {
889 // check first boundaries to see if is worth to loop and find the minimum
890 Float_t dphistar1 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 0.8, bSign);
891 Float_t dphistar2 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 2.5, bSign);
892
893 const Float_t kLimit = ftwoTrackEfficiencyCutValue * 3;
894
895 Float_t dphistarminabs = 1e5;
857be196 896 //Float_t dphistarmin = 1e5;
7cbcecc6 897 if (TMath::Abs(dphistar1) < kLimit || TMath::Abs(dphistar2) < kLimit || dphistar1 * dphistar2 < 0)
898 {
899 for (Double_t rad=0.8; rad<2.51; rad+=0.01)
900 {
901 Float_t dphistar = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, rad, bSign);
902
903 Float_t dphistarabs = TMath::Abs(dphistar);
904
905 if (dphistarabs < dphistarminabs)
906 {
857be196 907 //dphistarmin = dphistar;
7cbcecc6 908 dphistarminabs = dphistarabs;
909 }
910 }
911
912 //fTwoTrackDistancePt[0]->Fill(deta, dphistarmin, TMath::Abs(pt1 - pt2));
913
914 if (dphistarminabs < ftwoTrackEfficiencyCutValue && TMath::Abs(deta) < ftwoTrackEfficiencyCutValue)
915 {
916// Printf("Removed track pair %d %d with %f %f %f %f %f %f %f %f %f", i, j, deta, dphistarminabs, phi1, pt1, charge1, phi2, pt2, charge2, bSign);
917 return kFALSE;
918 }
919
920 //fTwoTrackDistancePt[1]->Fill(deta, dphistarmin, TMath::Abs(pt1 - pt2));
921 }
922 }
923 //}
924 return kTRUE;
925}
926//_________________________________________________________________________________________________________________________________________
927
928Bool_t AliAnalysisTaskPIDCORR::TwoTrackEfficiencyBg(AliAODTrack *trig,AliPIDCorrParticle *asso,Float_t ftwoTrackEfficiencyCutValue,Float_t bSign)
929{
930 if(!trig || !asso) return kFALSE;
931 //if (twoTrackEfficiencyCut)
932 //{
933 // the variables & cuthave been developed by the HBT group
934 // see e.g. https://indico.cern.ch/materialDisplay.py?contribId=36&sessionId=6&materialId=slides&confId=142700
935
936 Float_t phi1 = trig->Phi();
937 Float_t pt1 = trig->Pt();
938 Float_t charge1 = trig->Charge();
939 Float_t eta1=trig->Eta();
940
941 Float_t phi2 = asso->Phi();
942 Float_t pt2 = asso->Pt();
943 Float_t charge2 = asso->Charge();
944 Float_t eta2=asso->Eta();
945
946 Float_t deta=eta1-eta2;
947 // optimization
948 if (TMath::Abs(deta) < ftwoTrackEfficiencyCutValue * 2.5 * 3)
949 {
950 // check first boundaries to see if is worth to loop and find the minimum
951 Float_t dphistar1 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 0.8, bSign);
952 Float_t dphistar2 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 2.5, bSign);
953
954 const Float_t kLimit = ftwoTrackEfficiencyCutValue * 3;
955
956 Float_t dphistarminabs = 1e5;
857be196 957 //Float_t dphistarmin = 1e5;
7cbcecc6 958 if (TMath::Abs(dphistar1) < kLimit || TMath::Abs(dphistar2) < kLimit || dphistar1 * dphistar2 < 0)
959 {
960 for (Double_t rad=0.8; rad<2.51; rad+=0.01)
961 {
962 Float_t dphistar = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, rad, bSign);
963
964 Float_t dphistarabs = TMath::Abs(dphistar);
965
966 if (dphistarabs < dphistarminabs)
967 {
857be196 968 //dphistarmin = dphistar;
7cbcecc6 969 dphistarminabs = dphistarabs;
970 }
971 }
972
973 //fTwoTrackDistancePt[0]->Fill(deta, dphistarmin, TMath::Abs(pt1 - pt2));
974
975 if (dphistarminabs < ftwoTrackEfficiencyCutValue && TMath::Abs(deta) < ftwoTrackEfficiencyCutValue)
976 {
977// Printf("Removed track pair %d %d with %f %f %f %f %f %f %f %f %f", i, j, deta, dphistarminabs, phi1, pt1, charge1, phi2, pt2, charge2, bSign);
978 return kFALSE;
979 }
980
981 //fTwoTrackDistancePt[1]->Fill(deta, dphistarmin, TMath::Abs(pt1 - pt2));
982 }
983 }
984 //}
985 return kTRUE;
986}
987
988//__________________________________________________________________________________________________________________________________________
989
990Float_t AliAnalysisTaskPIDCORR::GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign)
991{
992 //
993 // calculates dphistar
994 //
995
996 Float_t dphistar = phi1 - phi2 - charge1 * bSign * TMath::ASin(0.075 * radius / pt1) + charge2 * bSign * TMath::ASin(0.075 * radius / pt2);
997
998 static const Double_t kPi = TMath::Pi();
999
1000 // circularity
1001// if (dphistar > 2 * kPi)
1002// dphistar -= 2 * kPi;
1003// if (dphistar < -2 * kPi)
1004// dphistar += 2 * kPi;
1005
1006 if (dphistar > kPi)
1007 dphistar = kPi * 2 - dphistar;
1008 if (dphistar < -kPi)
1009 dphistar = -kPi * 2 - dphistar;
1010 if (dphistar > kPi) // might look funny but is needed
1011 dphistar = kPi * 2 - dphistar;
1012
1013 return dphistar;
1014}
1015//_______________________________________________________________________
1016Float_t AliAnalysisTaskPIDCORR::GetEtaCorrectionFactorAsso(Double_t Eta)
1017{
1018
1019
1020Int_t Etabin=(16/1.6)*(-0.8-Eta);
1021Int_t BIN=TMath::Abs(Etabin);
1022
1023Float_t eff[16]={0.773274,0.783099,0.774943,0.769163,0.759582,0.74767,0.732028,0.724823,0.756575,0.780094,0.788648,0.79306,0.796114,0.801123,0.799477,0.779948};
1024
1025return eff[BIN];
1026
1027
1028
1029}
1030//____________________________________________________________________________________
1031Float_t AliAnalysisTaskPIDCORR::GetEtaCorrectionFactorTrigAll(Double_t Eta)
1032{
1033
1034
1035Int_t Etabin=(16/1.6)*(-0.8-Eta);
1036Int_t BIN=TMath::Abs(Etabin);
1037
1038
1039
1040Float_t EffAll[16]={0.705833,0.715773,0.72209,0.718895,0.703701,0.691354,0.679242,0.65723,0.698546,0.72464,0.730565,0.732914,0.733499,0.746637,0.738133,0.720495};
1041
1042return EffAll[BIN];
1043
1044}
1045
1046//_____________________________________________________________________________________________
1047Float_t AliAnalysisTaskPIDCORR::GetEtaCorrectionFactorTrigPion(Double_t Eta)
1048{
1049
1050
1051Int_t Etabin=(16/1.6)*(-0.8-Eta);
1052Int_t BIN=TMath::Abs(Etabin);
1053
1054
1055Float_t EffPion[16]={0.36819,0.369563,0.378747,0.378856,0.361426,0.372088,0.355179,0.344626,0.376348,0.387998,0.381553,0.373258,0.397368,0.380326,0.381536,0.369155};
1056
1057return EffPion[BIN];
1058
1059
1060}
1061
1062//______________________________________________________________________________________________________
1063Float_t AliAnalysisTaskPIDCORR::GetEtaCorrectionFactorTrigProton(Double_t Eta)
1064{
1065
1066
1067Int_t Etabin=(16/1.6)*(-0.8-Eta);
1068Int_t BIN=TMath::Abs(Etabin);
1069
1070Float_t EffProton[16]={0.698916,0.708791,0.686047,0.663609,0.621142,0.57571,0.556255,0.518182,0.54031,0.58828,0.62885,0.675739,0.686916,0.707395,0.714397,0.693769};
1071return EffProton[BIN];
1072
1073
1074
1075
1076}
1077//_______________________________________________________________________
1078Bool_t AliAnalysisTaskPIDCORR::CheckTOF(AliVTrack * trk)
1079{
1080 //in addition to KTOFout and kTIME we look at the pt
1081 if(trk->Pt()<0.6)return kFALSE;
1082
1083//check if the particle has TOF Matching
1084 UInt_t status;
1085 status=trk->GetStatus();
1086 if((status&AliVTrack::kTOFout)==0 || (status&AliVTrack::kTIME)==0)return kFALSE;
1087 else return kTRUE;
1088
1089
1090
1091}
1092//________________________________________________________________________
1093void AliAnalysisTaskPIDCORR::IdentifyAssociated(Double_t Eta_trig,Double_t Phi_trig,Bool_t PION,Bool_t PROTON,AliAODTrack *TRK)
1094{
1095Bool_t HasTOFPID=CheckTOF(TRK);
1096//Bool_t HasTPCPID=GetTrackStatus(TRK);
1097
1098if(HasTOFPID)
1099{
1100Double_t Eta_asso=TRK->Eta();
1101Double_t Phi_asso=TRK->Phi();
1102
1103Int_t Ptype=GetTOFPID(TRK);
1104if(Ptype>2) return;
1105
1106//cout<<"TOFPID"<<HasTOFPID<<" "<<"ParticleType"<<Ptype<<endl;
1107//Int_t Ptype=GetTPCTOFPID(TRK);
1108
1109if(TMath::Abs(Eta_trig-Eta_asso)<=0.5)
1110 {
1111
1112 if(TMath::Abs(Phi_trig-Phi_asso)<=0.5)
1113 {
1114 fHistNSAll[Ptype]->Fill(TRK->Pt());
1115 if(PION)
1116 fHistNSPion[Ptype]->Fill(TRK->Pt());
1117 if(PROTON)
1118 fHistNSProton[Ptype]->Fill(TRK->Pt());
1119 }
1120
1121 if((Phi_trig-Phi_asso)>=TMath::Pi()-0.5 && (Phi_trig-Phi_asso)<=TMath::Pi()+0.5)
1122 {
1123 fHistASAll[Ptype]->Fill(TRK->Pt());
1124 if(PION)
1125 fHistASPion[Ptype]->Fill(TRK->Pt());
1126 if(PROTON)
1127 fHistASProton[Ptype]->Fill(TRK->Pt());
1128 }
1129
1130 if((Phi_trig-Phi_asso)>=0.5*TMath::Pi()-0.4 && (Phi_trig-Phi_asso)<=0.5*TMath::Pi()+0.2)
1131 {
1132 fHistBgAll[Ptype]->Fill(TRK->Pt());
1133 if(PION)
1134 fHistBgPion[Ptype]->Fill(TRK->Pt());
1135 if(PROTON)
1136 fHistBgProton[Ptype]->Fill(TRK->Pt());
1137 }
1138
1139
1140 }
1141
1142if(TMath::Abs(Eta_trig-Eta_asso)>=1.0)
1143 {
1144 fHistBulkAll[Ptype]->Fill(TRK->Pt());
1145 if(PION)
1146 fHistBulkPion[Ptype]->Fill(TRK->Pt());
1147 if(PROTON)
1148 fHistBulkProton[Ptype]->Fill(TRK->Pt());
1149 }
1150
1151
1152
1153
1154
1155}
1156
1157
1158}
1159
1160//_______________________________________________________________________
1161Int_t AliAnalysisTaskPIDCORR::GetTOFPID(AliAODTrack *track)
1162{
1163
1164Double_t nsigmaTOFkProton=999.,nsigmaTOFkKaon=999.,nsigmaTOFkPion=999.;
1165
1166 nsigmaTOFkProton = fPIDResponse->NumberOfSigmasTOF(track, AliPID::kProton);
1167 nsigmaTOFkKaon = fPIDResponse->NumberOfSigmasTOF(track, AliPID::kKaon);
1168 nsigmaTOFkPion = fPIDResponse->NumberOfSigmasTOF(track, AliPID::kPion);
1169
1170//cout<<nsigmaTOFkProton<<" "<<nsigmaTOFkKaon<<" "<< nsigmaTOFkPion<<endl;
1171
1172 if(TMath::Abs(nsigmaTOFkPion)<= 2.0) return 0;
1173 if(TMath::Abs(nsigmaTOFkKaon)<= 2.0) return 1;
1174 if(TMath::Abs(nsigmaTOFkProton)<= 2.0) return 2;
1175else return 999;
1176
1177
1178}
1179//_______________________________________________________________________
1180Int_t AliAnalysisTaskPIDCORR::GetTPCTOFPID(AliAODTrack *track)
1181{
1182
1183//___TPC
1184 Double_t nsigmaTPCkProton = fPIDResponse->NumberOfSigmasTPC(track, AliPID::kProton);
1185 Double_t nsigmaTPCkKaon = fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon);
1186 Double_t nsigmaTPCkPion = fPIDResponse->NumberOfSigmasTPC(track, AliPID::kPion);
1187//___TOF
1188
1189Double_t nsigmaTOFkProton=999.,nsigmaTOFkKaon=999.,nsigmaTOFkPion=999.;
1190
1191 nsigmaTOFkProton = fPIDResponse->NumberOfSigmasTOF(track, AliPID::kProton);
1192 nsigmaTOFkKaon = fPIDResponse->NumberOfSigmasTOF(track, AliPID::kKaon);
1193 nsigmaTOFkPion = fPIDResponse->NumberOfSigmasTOF(track, AliPID::kPion);
1194
1195//__TPCTOF
1196
1197 Double_t nsigmaTPCTOFkProton=999.,nsigmaTPCTOFkKaon=999.,nsigmaTPCTOFkPion=999.;
1198 nsigmaTPCTOFkProton = TMath::Sqrt((nsigmaTPCkProton*nsigmaTPCkProton+nsigmaTOFkProton*nsigmaTOFkProton));
1199 nsigmaTPCTOFkKaon = TMath::Sqrt((nsigmaTPCkKaon*nsigmaTPCkKaon+nsigmaTOFkKaon*nsigmaTOFkKaon));
1200 nsigmaTPCTOFkPion = TMath::Sqrt((nsigmaTPCkPion*nsigmaTPCkPion+nsigmaTOFkPion*nsigmaTOFkPion));
1201
1202 if(TMath::Abs(nsigmaTPCTOFkPion)<= 3.0) return 0;
1203 if(TMath::Abs(nsigmaTPCTOFkKaon)<= 3.0) return 1;
1204 if(TMath::Abs(nsigmaTPCTOFkProton)<= 3.0) return 2;
1205
1206 return -1;
1207}
1208
1209
1210
1211//________________________________________________________________________
1212void AliAnalysisTaskPIDCORR::Terminate(Option_t *)
1213{
1214 // Draw result to screen, or perform fitting, normalizations
1215 // Called once at the end of the query
1216 fOutputList = dynamic_cast<TList*> (GetOutputData(1));
1217 if(!fOutputList) { Printf("ERROR: could not retrieve TList fOutput"); return; }
1218
1219
1220}
1221
1222