1 // Jet-Hadron Correlations PID
2 // Event plane dependence task.
7 #include "AliAnalysisTaskEmcalJetHadEPpid.h"
9 // general ROOT includes
12 #include <TClonesArray.h>
16 #include <THnSparse.h>
18 #include <TLorentzVector.h>
19 #include <TParameter.h>
20 #include <TParticle.h>
23 #include <TObjArray.h>
26 #include "AliAODEvent.h"
27 #include "AliESDEvent.h"
28 #include "AliAnalysisManager.h"
29 #include "AliAnalysisTask.h"
30 #include "AliCentrality.h"
31 #include "AliEmcalJet.h"
32 #include "AliAODJet.h"
33 #include "AliVCluster.h"
34 #include "AliVTrack.h"
35 #include <AliVEvent.h>
36 #include <AliVParticle.h>
37 #include "AliRhoParameter.h"
38 #include "AliEmcalParticle.h"
40 // Localized Rho includes
41 #include "AliLocalRhoParameter.h"
42 #include "AliAnalysisTaskLocalRho.h"
44 // event handler (and pico's) includes
45 #include <AliInputEventHandler.h>
46 #include <AliVEventHandler.h>
47 #include "AliESDInputHandler.h"
48 #include "AliPicoTrack.h"
49 #include "AliEventPoolManager.h"
52 #include "AliPIDResponse.h"
53 #include "AliTPCPIDResponse.h"
54 #include "AliESDpid.h"
56 // magnetic field includes
57 #include "TGeoGlobalMagField.h"
60 ClassImp(AliAnalysisTaskEmcalJetHadEPpid)
62 //________________________________________________________________________
63 AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid() :
64 AliAnalysisTaskEmcalJet("correlations",kFALSE),
65 fPhimin(-10), fPhimax(10),
66 fEtamin(-0.9), fEtamax(0.9),
67 fAreacut(0.0), fTrkBias(5), fClusBias(5), fTrkEta(0.9), fJetPtcut(15.0),
68 fDoEventMixing(0), fMixingTracks(50000),
69 doPlotGlobalRho(kFALSE), doVariableBinning(kFALSE),
70 dovarbinTHnSparse(kFALSE), useAOD(kTRUE), doPID(kTRUE),
72 fTracksName(""), fJetsName(""),
74 isPItpc(0), isKtpc(0), isPtpc(0), nPIDtpc(0) , // pid TPC
75 isPIits(0), isKits(0), isPits(0), nPIDits(0) , // pid ITS
76 isPItof(0), isKtof(0), isPtof(0), nPIDtof(0) , // pid TOF
78 fPIDResponse(0x0), fTPCResponse(),
80 fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
81 fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
82 fHistZvtx(0), fHistMult(0),
83 fHistJetPhi(0), fHistTrackPhi(0),
84 fHistJetHaddPhiIN(0), fHistJetHaddPhiOUT(0), fHistJetHaddPhiMID(0),
85 fHistJetHaddPhiBias(0), fHistJetHaddPhiINBias(0), fHistJetHaddPhiOUTBias(0), fHistJetHaddPhiMIDBias(0),
87 fHistTrackPtallcent(0),
88 fHistJetEtaPhi(0), fHistJetHEtaPhi(0),
89 fHistSEphieta(0), fHistMEphieta(0),
92 fhnPID(0x0), fhnMixedEvents(0x0), fhnJH(0x0)
94 // Default Constructor
95 for(Int_t ilab=0; ilab<4; ilab++){
96 for(Int_t ipta=0; ipta<7; ipta++){
97 fHistTrackEtaPhi[ilab][ipta]=0;
98 } // end of pt-associated loop
101 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
102 fHistJetHadbindPhi[itrackpt]=0;
103 fHistJetHadbindPhiIN[itrackpt]=0;
104 fHistJetHadbindPhiMID[itrackpt]=0;
105 fHistJetHadbindPhiOUT[itrackpt]=0;
106 } // end of trackpt bin loop
108 for(Int_t icent = 0; icent<2; ++icent){
110 fHistJetPtBias[icent]=0;
111 fHistJetPtTT[icent]=0;
112 fHistAreavsRawPt[icent]=0;
114 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
115 for(Int_t ieta = 0; ieta<3; ++ieta){
116 fHistJetH[icent][iptjet][ieta]=0;
117 fHistJetHBias[icent][iptjet][ieta]=0;
118 fHistJetHTT[icent][iptjet][ieta]=0;
120 } // end of pt-jet loop
121 } // end of centrality loop
123 // centrality dependent histo's
124 for (Int_t i = 0;i<6;++i){
125 fHistJetPtvsTrackPt[i] = 0;
126 fHistRawJetPtvsTrackPt[i] = 0;
132 fHistJetPtvsdEP[i] = 0;
133 fHistJetPtvsdEPBias[i] = 0;
134 fHistRhovsdEP[i] = 0;
135 fHistJetEtaPhiPt[i] = 0;
136 fHistJetEtaPhiPtBias[i] = 0;
137 fHistJetPtArea[i] = 0;
138 fHistJetPtAreaBias[i] = 0;
139 fHistJetPtNcon[i] = 0;
140 fHistJetPtNconBias[i] = 0;
141 fHistJetPtNconCh[i] = 0;
142 fHistJetPtNconBiasCh[i] = 0;
143 fHistJetPtNconEm[i] = 0;
144 fHistJetPtNconBiasEm[i] = 0;
145 fHistJetHaddPhiINcent[i] = 0;
146 fHistJetHaddPhiOUTcent[i] = 0;
147 fHistJetHaddPhiMIDcent[i] = 0;
150 SetMakeGeneralHistograms(kTRUE);
152 // define input and output slots here
153 DefineInput(0, TChain::Class());
154 DefineOutput(1, TList::Class());
157 //________________________________________________________________________
158 AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid(const char *name) :
159 AliAnalysisTaskEmcalJet(name,kTRUE),
160 fPhimin(-10), fPhimax(10),
161 fEtamin(-0.9), fEtamax(0.9),
162 fAreacut(0.0), fTrkBias(5), fClusBias(5), fTrkEta(0.9), fJetPtcut(15.0),
163 fDoEventMixing(0), fMixingTracks(50000),
164 doPlotGlobalRho(kFALSE), doVariableBinning(kFALSE),
165 dovarbinTHnSparse(kFALSE), useAOD(kTRUE), doPID(kTRUE),
167 fTracksName(""), fJetsName(""),
169 isPItpc(0), isKtpc(0), isPtpc(0), nPIDtpc(0), // pid TPC
170 isPIits(0), isKits(0), isPits(0), nPIDits(0), // pid ITS
171 isPItof(0), isKtof(0), isPtof(0), nPIDtof(0), // pid TOF
173 fPIDResponse(0x0), fTPCResponse(),
175 fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
176 fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
177 fHistZvtx(0), fHistMult(0),
178 fHistJetPhi(0), fHistTrackPhi(0),
179 fHistJetHaddPhiIN(0), fHistJetHaddPhiOUT(0), fHistJetHaddPhiMID(0),
180 fHistJetHaddPhiBias(0), fHistJetHaddPhiINBias(0), fHistJetHaddPhiOUTBias(0), fHistJetHaddPhiMIDBias(0),
182 fHistTrackPtallcent(0),
183 fHistJetEtaPhi(0), fHistJetHEtaPhi(0),
184 fHistSEphieta(0), fHistMEphieta(0),
187 fhnPID(0x0), fhnMixedEvents(0x0), fhnJH(0x0)
189 // Default Constructor
190 for(Int_t ilab=0; ilab<4; ilab++){
191 for(Int_t ipta=0; ipta<7; ipta++){
192 fHistTrackEtaPhi[ilab][ipta]=0;
193 } // end of pt-associated loop
196 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
197 fHistJetHadbindPhi[itrackpt]=0;
198 fHistJetHadbindPhiIN[itrackpt]=0;
199 fHistJetHadbindPhiMID[itrackpt]=0;
200 fHistJetHadbindPhiOUT[itrackpt]=0;
201 } // end of trackpt bin loop
203 for(Int_t icent = 0; icent<2; ++icent){
205 fHistJetPtBias[icent]=0;
206 fHistJetPtTT[icent]=0;
207 fHistAreavsRawPt[icent]=0;
209 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
210 for(Int_t ieta = 0; ieta<3; ++ieta){
211 fHistJetH[icent][iptjet][ieta]=0;
212 fHistJetHBias[icent][iptjet][ieta]=0;
213 fHistJetHTT[icent][iptjet][ieta]=0;
215 } // end of pt-jet loop
216 } // end of centrality loop
218 // centrality dependent histo's
219 for (Int_t i = 0;i<6;++i){
220 fHistJetPtvsTrackPt[i] = 0;
221 fHistRawJetPtvsTrackPt[i] = 0;
227 fHistJetPtvsdEP[i] = 0;
228 fHistJetPtvsdEPBias[i] = 0;
229 fHistRhovsdEP[i] = 0;
230 fHistJetEtaPhiPt[i] = 0;
231 fHistJetEtaPhiPtBias[i] = 0;
232 fHistJetPtArea[i] = 0;
233 fHistJetPtAreaBias[i] = 0;
234 fHistJetPtNcon[i] = 0;
235 fHistJetPtNconBias[i] = 0;
236 fHistJetPtNconCh[i] = 0;
237 fHistJetPtNconBiasCh[i] = 0;
238 fHistJetPtNconEm[i] = 0;
239 fHistJetPtNconBiasEm[i] = 0;
240 fHistJetHaddPhiINcent[i] = 0;
241 fHistJetHaddPhiOUTcent[i] = 0;
242 fHistJetHaddPhiMIDcent[i] = 0;
245 SetMakeGeneralHistograms(kTRUE);
247 // define input and output slots here
248 DefineInput(0, TChain::Class());
249 DefineOutput(1, TList::Class());
252 //_______________________________________________________________________
253 AliAnalysisTaskEmcalJetHadEPpid::~AliAnalysisTaskEmcalJetHadEPpid()
262 //________________________________________________________________________
263 void AliAnalysisTaskEmcalJetHadEPpid::UserCreateOutputObjects()
264 { // This is called ONCE!
265 if (!fCreateHisto) return;
266 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
267 OpenFile(1); // do I need the 1?
269 // create histograms that arn't array
270 fHistTPCdEdX = new TH2F("TPCdEdX", "TPCdEdX", 2000, 0.0, 100.0, 500, 0, 500);
271 fHistITSsignal = new TH2F("ITSsignal", "ITSsignal", 2000, 0.0, 100.0, 500, 0, 500);
272 // fHistTOFsignal = new TH2F("TOFsignal", "TOFsignal", 2000, 0.0, 100.0, 500, 0, 500);
273 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 100, 0.0, 100.0, 500, 0, 500);
274 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 100, 0.0, 100.0, 100, 0, 100);
275 fHistTrackPtallcent = new TH1F("fHistTrackPtallcent", "p_{T} distribution", 1000, 0.0, 100.0);
276 fHistCentrality = new TH1F("fHistCentrality","centrality",100,0,100);
277 fHistZvtx = new TH1F("fHistZvertex","z vertex",60,-30,30);
278 fHistJetEtaPhi = new TH2F("fHistJetEtaPhi","Jet #eta-#phi",900,-1.8,1.8,640,-3.2,3.2);
279 fHistJetHEtaPhi = new TH2F("fHistJetHEtaPhi","Jet-Hadron #Delta#eta-#Delta#phi",900,-1.8,1.8,640,-1.6,4.8);
280 fHistSEphieta = new TH2F("fHistSEphieta", "Single Event #phi-#eta distribution", 64,-0.5*TMath::Pi(), 1.5*TMath::Pi(), 32,-1.8,1.8); // was 64 bins
281 fHistMEphieta = new TH2F("fHistMEphieta", "Mixed Event #phi-#eta distribution", 64, -0.5*TMath::Pi(), 1.5*TMath::Pi(), 32,-1.8,1.8); // was 64 bins
282 fHistJetHaddPHI = new TH1F("fHistJetHaddPHI", "Jet-Hadron #Delta#varphi", 128,-0.5*TMath::Pi(),1.5*TMath::Pi());
283 fHistJetPhi = new TH1F("fHistJetPhi", "Jet #phi Distribution", 128, -2.0*TMath::Pi(), 2.0*TMath::Pi());
284 fHistTrackPhi = new TH1F("fHistTrackPhi", "Track #phi Distribution", 128, -2.0*TMath::Pi(), 2.0*TMath::Pi());
285 fHistJetHaddPhiIN = new TH1F("fHistJetHaddPhiIN","Jet-Hadron #Delta#varphi IN PLANE", 128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
286 fHistJetHaddPhiOUT = new TH1F("fHistJetHaddPhiOUT","Jet-Hadron #Delta#varphi OUT PLANE",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
287 fHistJetHaddPhiMID = new TH1F("fHistJetHaddPhiMID","Jet-Hadron #Delta#varphi MIDDLE of PLANE",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
288 fHistJetHaddPhiBias = new TH1F("fHistJetHaddPhiBias","Jet-Hadron #Delta#varphi with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
289 fHistJetHaddPhiINBias = new TH1F("fHistJetHaddPhiINBias","Jet-Hadron #Delta#varphi IN PLANE with bias", 128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
290 fHistJetHaddPhiOUTBias = new TH1F("fHistJetHaddPhiOUTBias","Jet-Hadron #Delta#varphi OUT PLANE with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
291 fHistJetHaddPhiMIDBias = new TH1F("fHistJetHaddPhiMIDBias","Jet-Hadron #Delta#varphi MIDDLE of PLANE with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
293 fHistPID = new TH1F("fHistPID","PID Counter",12, -0.5, 11.5);
294 SetfHistPIDcounterLabels(fHistPID);
295 fOutput->Add(fHistPID);
299 for(Int_t ipta=0; ipta<7; ++ipta){
300 for(Int_t ilab=0; ilab<4; ++ilab){
301 snprintf(name,200, "fHistTrackEtaPhi_%i_%i", ilab,ipta);
302 fHistTrackEtaPhi[ilab][ipta] = new TH2F(name,name,400,-1,1,640,0.0,2.*TMath::Pi());
303 /// fOutput->Add(fHistTrackEtaPhi[ilab][ipta]);
305 } // end of pt-associated loop
308 // jet hadron (binned) correlations in dPHI
309 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
310 snprintf(name,200,"fHistJetHadbindPhi_%i",itrackpt);
311 fHistJetHadbindPhi[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
312 fOutput->Add(fHistJetHadbindPhi[itrackpt]);
314 snprintf(name,200,"fHistJetHadbindPhiIN_%i",itrackpt);
315 fHistJetHadbindPhiIN[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
316 fOutput->Add(fHistJetHadbindPhiIN[itrackpt]);
318 snprintf(name,200,"fHistJetHadbindPhiMID_%i",itrackpt);
319 fHistJetHadbindPhiMID[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
320 fOutput->Add(fHistJetHadbindPhiMID[itrackpt]);
322 snprintf(name,200,"fHistJetHadbindPhiOUT_%i",itrackpt);
323 fHistJetHadbindPhiOUT[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
324 fOutput->Add(fHistJetHadbindPhiOUT[itrackpt]);
325 } // end of trackpt bin loop
327 for(Int_t icent = 0; icent<2; ++icent){
328 snprintf(name,200,"fHistJetPt_%i",icent);
329 fHistJetPt[icent] = new TH1F(name,name,200,0,200);
330 fOutput->Add(fHistJetPt[icent]);
332 snprintf(name,200,"fHistJetPtBias_%i",icent);
333 fHistJetPtBias[icent] = new TH1F(name,name,200,0,200);
334 fOutput->Add(fHistJetPtBias[icent]);
336 snprintf(name,200,"fHistJetPtTT_%i",icent);
337 fHistJetPtTT[icent] = new TH1F(name,name,200,0,200);
338 fOutput->Add(fHistJetPtTT[icent]);
340 snprintf(name,200,"fHistAreavsRawPt_%i",icent);
341 fHistAreavsRawPt[icent] = new TH2F(name,name,100,0,1,200,0,200);
342 //fOutput->Add(fHistAreavsRawPt[icent]);
344 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
345 for(Int_t ieta = 0; ieta<3; ++ieta){
346 snprintf(name,200,"fHistJetH_%i_%i_%i",icent,iptjet,ieta);
347 fHistJetH[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
348 fOutput->Add(fHistJetH[icent][iptjet][ieta]);
350 snprintf(name,200,"fHistJetHBias_%i_%i_%i",icent,iptjet,ieta);
351 fHistJetHBias[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
352 fOutput->Add(fHistJetHBias[icent][iptjet][ieta]);
354 snprintf(name,200,"fHistJetHTT_%i_%i_%i",icent,iptjet,ieta);
355 fHistJetHTT[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
356 fOutput->Add(fHistJetHTT[icent][iptjet][ieta]);
358 } // end of pt-jet loop
359 } // end of centrality loop
361 // strings for titles
365 for (Int_t i = 0;i<6;++i){
366 name1 = TString(Form("JetPtvsTrackPt_%i",i));
367 title1 = TString(Form("Jet p_{T} vs Leading Track p_{T} cent bin %i",i));
368 fHistJetPtvsTrackPt[i] = new TH2F(name1,title1,250,-50,200,250,0,50);
369 fOutput->Add(fHistJetPtvsTrackPt[i]);
371 name1 = TString(Form("RawJetPtvsTrackPt_%i",i));
372 title1 = TString(Form("Raw Jet p_{T} vs Leading Track p_{T} cent bin %i",i));
373 fHistRawJetPtvsTrackPt[i] = new TH2F(name1,title1,250,-50,200,250,0,50);
374 fOutput->Add(fHistRawJetPtvsTrackPt[i]);
376 name1 = TString(Form("TrackPt_%i",i));
377 title1 = TString(Form("Track p_{T} cent bin %i",i));
378 fHistTrackPt[i] = new TH1F(name1,title1,1000,0,100); // up to 200?
379 fOutput->Add(fHistTrackPt[i]);
381 name1 = TString(Form("EP0_%i",i));
382 title1 = TString(Form("EP VZero cent bin %i",i));
383 fHistEP0[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
384 fOutput->Add(fHistEP0[i]);
387 name1 = TString(Form("EP0A_%i",i));
388 title1 = TString(Form("EP VZero cent bin %i",i));
389 fHistEP0A[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
390 fOutput->Add(fHistEP0A[i]);
392 name1 = TString(Form("EP0C_%i",i));
393 title1 = TString(Form("EP VZero cent bin %i",i));
394 fHistEP0C[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
395 fOutput->Add(fHistEP0C[i]);
397 name1 = TString(Form("EPAvsC_%i",i));
398 title1 = TString(Form("EP VZero cent bin %i",i));
399 fHistEPAvsC[i] = new TH2F(name1,title1,144,-TMath::Pi(),TMath::Pi(),144,-TMath::Pi(),TMath::Pi());
400 fOutput->Add(fHistEPAvsC[i]);
403 name1 = TString(Form("JetPtvsdEP_%i",i));
404 title1 = TString(Form("Jet p_{T} vs #DeltaEP cent bin %i",i));
405 fHistJetPtvsdEP[i] = new TH2F(name1,title1,250,-50,200,288,-2*TMath::Pi(),2*TMath::Pi());
406 fOutput->Add(fHistJetPtvsdEP[i]);
408 name1 = TString(Form("JetPtvsdEPBias_%i",i));
409 title1 = TString(Form("Bias Jet p_{T} vs #DeltaEP cent bin %i",i));
410 fHistJetPtvsdEPBias[i] = new TH2F(name1,title1,250,-50,200,288,-2*TMath::Pi(),2*TMath::Pi());
411 fOutput->Add(fHistJetPtvsdEPBias[i]);
413 name1 = TString(Form("RhovsdEP_%i",i));
414 title1 = TString(Form("#rho vs #DeltaEP cent bin %i",i));
415 fHistRhovsdEP[i] = new TH2F(name1,title1,500,0,500,288,-2*TMath::Pi(),2*TMath::Pi());
416 fOutput->Add(fHistRhovsdEP[i]);
418 name1 = TString(Form("JetEtaPhiPt_%i",i));
419 title1 = TString(Form("Jet #eta-#phi p_{T} cent bin %i",i));
420 fHistJetEtaPhiPt[i] = new TH3F(name1,title1,250,-50,200,100,-1,1,64,-3.2,3.2);
421 fOutput->Add(fHistJetEtaPhiPt[i]);
423 name1 = TString(Form("JetEtaPhiPtBias_%i",i));
424 title1 = TString(Form("Jet #eta-#phi p_{T} Bias cent bin %i",i));
425 fHistJetEtaPhiPtBias[i] = new TH3F(name1,title1,250,-50,200,100,-1,1,64,-3.2,3.2);
426 fOutput->Add(fHistJetEtaPhiPtBias[i]);
428 name1 = TString(Form("JetPtArea_%i",i));
429 title1 = TString(Form("Jet p_{T} Area cent bin %i",i));
430 fHistJetPtArea[i] = new TH2F(name1,title1,250,-50,200,100,0,1);
431 fOutput->Add(fHistJetPtArea[i]);
433 name1 = TString(Form("JetPtAreaBias_%i",i));
434 title1 = TString(Form("Jet p_{T} Area Bias cent bin %i",i));
435 fHistJetPtAreaBias[i] = new TH2F(name1,title1,250,-50,200,100,0,1);
436 fOutput->Add(fHistJetPtAreaBias[i]);
438 name1 = TString(Form("JetPtNcon_%i",i));
439 title1 = TString(Form("Jet p_{T} Ncon cent bin %i",i));
440 fHistJetPtNcon[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
441 //fOutput->Add(fHistJetPtNcon[i]);
443 name1 = TString(Form("JetPtNconBias_%i",i));
444 title1 = TString(Form("Jet p_{T} NconBias cent bin %i",i));
445 fHistJetPtNconBias[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
446 fOutput->Add(fHistJetPtNconBias[i]);
448 name1 = TString(Form("JetPtNconCh_%i",i));
449 title1 = TString(Form("Jet p_{T} NconCh cent bin %i",i));
450 fHistJetPtNconCh[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
451 //fOutput->Add(fHistJetPtNconCh[i]);
453 name1 = TString(Form("JetPtNconBiasCh_%i",i));
454 title1 = TString(Form("Jet p_{T} NconBiasCh cent bin %i",i));
455 fHistJetPtNconBiasCh[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
456 //fOutput->Add(fHistJetPtNconBiasCh[i]);
458 name1 = TString(Form("JetPtNconEm_%i",i));
459 title1 = TString(Form("Jet p_{T} NconEm cent bin %i",i));
460 fHistJetPtNconEm[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
461 //fOutput->Add(fHistJetPtNconEm[i]);
463 name1 = TString(Form("JetPtNconBiasEm_%i",i));
464 title1 = TString(Form("Jet p_{T} NconBiasEm cent bin %i",i));
465 fHistJetPtNconBiasEm[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
466 //fOutput->Add(fHistJetPtNconBiasEm[i]);
468 name1 = TString(Form("JetHaddPhiINcent_%i",i));
469 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution IN PLANE cent bin %i",i));
470 fHistJetHaddPhiINcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
471 fOutput->Add(fHistJetHaddPhiINcent[i]);
473 name1 = TString(Form("JetHaddPhiOUTcent_%i",i));
474 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution OUT PLANE cent bin %i",i));
475 fHistJetHaddPhiOUTcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
476 fOutput->Add(fHistJetHaddPhiOUTcent[i]);
478 name1 = TString(Form("JetHaddPhiMIDcent_%i",i));
479 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution MIDDLE of PLANE cent bin %i",i));
480 fHistJetHaddPhiMIDcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
481 fOutput->Add(fHistJetHaddPhiMIDcent[i]);
484 // add histo's to output list
485 fOutput->Add(fHistTPCdEdX);
486 fOutput->Add(fHistITSsignal);
487 // fOutput->Add(fHistTOFsignal);
488 fOutput->Add(fHistRhovsCent);
489 fOutput->Add(fHistNjetvsCent);
490 fOutput->Add(fHistTrackPtallcent);
491 fOutput->Add(fHistJetEtaPhi);
492 //fOutput->Add(fHistTrackEtaPhi);
493 fOutput->Add(fHistJetHEtaPhi);
494 fOutput->Add(fHistCentrality);
495 fOutput->Add(fHistZvtx);
496 fOutput->Add(fHistJetPhi);
497 fOutput->Add(fHistTrackPhi);
498 fOutput->Add(fHistJetHaddPhiIN);
499 fOutput->Add(fHistJetHaddPhiOUT);
500 fOutput->Add(fHistJetHaddPhiMID);
501 fOutput->Add(fHistJetHaddPhiBias);
502 fOutput->Add(fHistJetHaddPhiINBias);
503 fOutput->Add(fHistJetHaddPhiOUTBias);
504 fOutput->Add(fHistJetHaddPhiMIDBias);
505 fOutput->Add(fHistSEphieta);
506 fOutput->Add(fHistMEphieta);
507 fOutput->Add(fHistJetHaddPHI);
509 // set up jet-hadron sparse
510 UInt_t bitcoded = 0; // bit coded, see GetDimParams() below
512 UInt_t bitcode = 0; // bit coded, see GetDimParamsPID() below
513 bitcoded = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9;
514 fhnJH = NewTHnSparseF("fhnJH", bitcoded);
516 /// fOutput->Add(fhnJH);
518 // ****************************** PID *****************************************************
519 // set up PID handler
520 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
521 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
523 AliError("Input handler needed");
527 // PID response object
528 fPIDResponse = inputHandler->GetPIDResponse();
530 AliError("PIDResponse object was not created");
534 // ****************************************************************************************
536 // for pp we need mult bins for event mixing. Create binning here, to also make a histogram from it
537 Int_t nCentralityBins = 8;
538 Double_t centralityBins[9] = {0.0, 4., 9, 15, 25, 35, 55, 100.0,500.0};
539 Double_t centralityBins[nCentralityBins+1];
540 for(Int_t ic=0; ic<nCentralityBins+1; ic++){
541 if(ic==nCentralityBins) centralityBins[ic]=500;
542 else centralityBins[ic]=10.0*ic;
545 // setup for Pb-Pb collisions
546 Int_t nCentralityBins = 100;
547 Double_t centralityBins[nCentralityBins];
548 for(Int_t ic=0; ic<nCentralityBins; ic++){
549 centralityBins[ic]=1.0*ic;
552 fHistMult = new TH1F("fHistMult","multiplicity",nCentralityBins,centralityBins);
553 fOutput->Add(fHistMult);
556 Int_t trackDepth = fMixingTracks;
557 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
558 Int_t nZvtxBins = 5+1+5;
559 Double_t vertexBins[] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10};
560 Double_t* zvtxbin = vertexBins;
561 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centralityBins, nZvtxBins, zvtxbin);
563 // set up event mixing sparse
565 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7;
566 fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);
567 fhnMixedEvents->Sumw2();
568 fOutput->Add(fhnMixedEvents);
569 } // end of do-eventmixing
571 Double_t xlowjetPT[] = {-50,-45,-40,-35,-30,-25,-20,-18,-16,-14,-12,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,35,40,45,50,60,70,80,90,100,120,140,160,180,200,250,300,350,400};
572 Double_t xlowtrPT[] = {0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.25,2.50,2.75,3.0,3.25,3.5,3.75,4.0,4.25,4.50,4.75,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,22.0,24.0,26.0,28.0,30.0,35.0,40.0,45.0,50.0,60.0,70.0,80.0,90.0,100.0};
574 // number of bins you tell histogram should be (# in array - 1) because the last bin
575 // is the right-most edge of the histogram
576 // i.e. this is for PT and there are 57 numbers (bins) thus we have 56 bins in our histo
577 Int_t nbinsjetPT = sizeof(xlowjetPT)/sizeof(Double_t) - 1;
578 Int_t nbinstrPT = sizeof(xlowtrPT)/sizeof(Double_t) - 1;
582 bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
583 1<<10 | 1<<11 | 1<<12 | 1<<13 | 1<<14 | 1<<15 | 1<<16 | 1<<17 | 1<<18 | 1<<19 |
584 1<<20 | 1<<21 | 1<<22;
585 fhnPID = NewTHnSparseFPID("fhnPID", bitcode);
587 fOutput->Add(fhnPID);
590 if(dovarbinTHnSparse){
591 fhnPID->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
592 fhnPID->GetAxis(2)->Set(nbinstrPT, xlowtrPT);
595 // =========== Switch on Sumw2 for all histos ===========
596 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
597 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
602 TH2 *h2 = dynamic_cast<TH2*>(fOutput->At(i));
607 TH3 *h3 = dynamic_cast<TH3*>(fOutput->At(i));
612 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
616 PostData(1, fOutput);
619 //_________________________________________________________________________
620 void AliAnalysisTaskEmcalJetHadEPpid::ExecOnce()
622 AliAnalysisTaskEmcalJet::ExecOnce();
625 //_________________________________________________________________________
626 Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
627 { // Main loop called for each event
628 // TEST TEST TEST TEST for OBJECTS!
630 AliError(Form("Couldn't get fLocalRho object, try to get it from Event based on name\n"));
631 fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
634 AliError(Form("No fTracks object!!\n"));
638 AliError(Form("No fJets object!!\n"));
642 // what kind of event do we have: AOD or ESD?
643 if (dynamic_cast<AliAODEvent*>(InputEvent())) useAOD = kTRUE;
644 else useAOD = kFALSE;
646 // if we have ESD event, set up ESD object
648 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
650 AliError(Form("ERROR: fESD not available\n"));
655 // if we have AOD event, set up AOD object
657 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
659 AliError(Form("ERROR: fAOD not available\n"));
665 Int_t centbin = GetCentBin(fCent);
666 fHistCentrality->Fill(fCent); // won't be filled in pp collision (Keep this in mind!)
668 // for pp analyses we will just use the first centrality bin
669 if (centbin == -1) centbin = 0;
671 // get vertex information
672 Double_t fvertex[3]={0,0,0};
673 InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
674 Double_t zVtx=fvertex[2];
675 fHistZvtx->Fill(zVtx);
678 //Int_t zVbin = GetzVertexBin(zVtx);
684 // apply cut to event on Centrality > 90%
685 if(fCent>90) return kTRUE;
687 // create pointer to list of input event
688 TList *list = InputEvent()->GetList();
690 AliError(Form("ERROR: list not attached\n"));
694 // initialize TClonesArray pointers to jets and tracks
695 TClonesArray *jets = 0;
696 TClonesArray *tracks = 0;
699 tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracks));
701 AliError(Form("Pointer to tracks %s == 0", fTracks->GetName()));
703 } // verify existence of tracks
706 jets = dynamic_cast<TClonesArray*>(list->FindObject(fJets));
708 AliError(Form("Pointer to jets %s == 0", fJets->GetName()));
710 } // verify existence of jets
712 // get number of jets and tracks
713 const Int_t Njets = jets->GetEntries();
714 const Int_t Ntracks = tracks->GetEntries();
715 if(Ntracks<1) return kTRUE;
716 if(Njets<1) return kTRUE;
718 fHistMult->Fill(Ntracks); // fill multiplicity distribution
720 // initialize track parameters
724 // loop over tracks - to get hardest track (highest pt)
725 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++){
726 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
728 AliError(Form("Couldn't get VTrack track %d\n", iTracks));
730 } // verify existence of tracks
732 if(TMath::Abs(track->Eta())>0.9) continue;
733 if(track->Pt()<0.15) continue;
735 if(track->Pt()>ptmax){
736 ptmax=track->Pt(); // max pT track
737 iTT=iTracks; // trigger tracks
738 } // check if Pt>maxpt
740 fHistTrackPhi->Fill(track->Phi());
741 fHistTrackPtallcent->Fill(track->Pt());
742 } // end of loop over tracks
744 // find tracks for event (alternative), and loop over
745 for (int i = 0;i<Ntracks;i++){
746 AliVParticle *track = static_cast<AliVParticle*>(fTracks->At(i));
747 if (!track) continue;
749 if(TMath::Abs(track->Eta())>0.9) continue;
750 if(track->Pt()<0.15) continue;
752 fHistTrackPt[centbin]->Fill(track->Pt());
755 // event plane histograms filled
756 fHistEP0[centbin]->Fill(fEPV0);
757 //fHistEP0A[centbin]->Fill(fEPV0A);
758 //fHistEP0C[centbin]->Fill(fEPV0C);
759 //fHistEPAvsC[centbin]->Fill(fEPV0A,fEPV0C);
761 // get rho from event and fill relative histo's
762 fRho = GetRhoFromEvent(fRhoName);
763 fRhoVal = fRho->GetVal();
764 fHistRhovsCent->Fill(fCent,fRhoVal); // Global Rho vs Centrality
765 fHistRhovsdEP[centbin]->Fill(fRhoVal,fEPV0); // Global Rho vs delta Event Plane angle
767 // initialize jet parameters
769 Double_t highestjetpt=0.0;
773 // loop over jets in an event - to find highest jet pT and apply some cuts
774 for (Int_t ijet = 0; ijet < Njets; ijet++){
776 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
780 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax))
782 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax))
784 fHistAreavsRawPt[centbin]->Fill(jet->Pt(),jet->Area());
785 if (jet->Area()<fAreacut)
787 //prevents 0 area jets from sneaking by when area cut == 0
790 //exclude jets with extremely high pt tracks which are likely misreconstructed
791 if(jet->MaxTrackPt()>100)
796 NjetAcc++; // # of accepted jets
797 fHistJetPhi->Fill(jet->Phi()); // Jet Phi histogram (filled)
799 // get highest Pt jet in event
800 if(highestjetpt<jet->Pt()){
802 highestjetpt=jet->Pt();
804 } // end of looping over jets
807 fHistNjetvsCent->Fill(fCent,NjetAcc);
810 // loop over jets in event and make appropriate cuts
811 for (Int_t ijet = 0; ijet < Njets; ++ijet) {
812 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ijet));
813 if (!jet) // see if we have a jet
815 if(!AcceptJet(jet)) // do we accept this jet?
818 // Double_t leadjet=0;
819 // if (ijet==ijethi) leadjet=1;
822 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax))
824 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax))
826 if (jet->Area()==0) // make sure jet has an area
828 if (jet->Pt()<0.1) // (should probably be higher..., but makes a cut on jet pT)
830 if (jet->MaxTrackPt()>100) // elminates fake tracks
832 if (!AcceptJet(jet)) // sees if jet is accepted
834 // jets.push_back(jet);
838 if (ijet==ijethi) leadjet=1;
840 // initialize and calculate various parameters: pt, eta, phi, rho, etc...
841 Double_t jetphi = jet->Phi(); // phi of jet
842 NJETAcc++; // # accepted jets
843 fLocalRhoVal = fLocalRho->GetLocalVal(jetphi, GetJetRadius(0)); //fmyJetRadius); // get local rho value
844 Double_t jeteta = jet->Eta(); // ETA of jet
845 // Double_t jetptraw = jet->Pt(); // raw pT of jet
846 Double_t jetPt = -500; // initialize corr jet pt
847 // jetPt = jet->Pt();
848 // jetPt = jet->Pt()-jet->Area()*fRhoVal; // corrected pT of jet from rho value
849 jetPt = jet->Pt()-jet->Area()*fLocalRhoVal; // corrected pT of jet using Rho modulated for V2 and V3
850 Float_t dEP = -500; // initialize angle between jet and event plane
851 //Int_t ieta = -500; // initialize jet eta bin
852 //ieta = GetEtaBin(jeteta); // bin of eta
853 dEP = RelativeEPJET(jetphi,fEPV0); // angle betweeen jet and event plane
856 fHistJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
857 fHistRawJetPtvsTrackPt[centbin]->Fill(jet->Pt(),jet->MaxTrackPt());
858 // fHistJetPtvsdEP[centbin]->Fill(jetPt,RelativePhi((fEPV0+TMath::Pi()),jet->Phi()));
859 fHistJetPtvsdEP[centbin]->Fill(jetPt, dEP);
860 fHistJetEtaPhiPt[centbin]->Fill(jetPt,jet->Eta(),jet->Phi());
861 fHistJetPtArea[centbin]->Fill(jetPt,jet->Area());
862 fHistJetPtNcon[centbin]->Fill(jetPt,jet->GetNumberOfConstituents());
863 fHistJetPtNconCh[centbin]->Fill(jetPt,jet->GetNumberOfTracks());
864 fHistJetPtNconEm[centbin]->Fill(jetPt,jet->GetNumberOfClusters());
866 // make histo's with BIAS applied
867 if (jet->MaxTrackPt()>fTrkBias){
868 fHistJetPtvsdEPBias[centbin]->Fill(jetPt, dEP);
869 fHistJetEtaPhiPtBias[centbin]->Fill(jetPt,jet->Eta(),jet->Phi());
870 fHistJetPtAreaBias[centbin]->Fill(jetPt,jet->Area());
871 fHistJetPtNconBias[centbin]->Fill(jetPt,jet->GetNumberOfConstituents());
872 fHistJetPtNconBiasCh[centbin]->Fill(jetPt,jet->GetNumberOfTracks());
873 fHistJetPtNconBiasEm[centbin]->Fill(jetPt,jet->GetNumberOfClusters());
877 fHistJetPt[centbin]->Fill(jet->Pt()); // fill #jets vs pT histo
878 fHistJetEtaPhi->Fill(jet->Eta(),jet->Phi()); // fill jet eta-phi distribution histo
879 //fHistDeltaPtvsArea->Fill(jetPt,jet->Area());
881 if(leadjet && centbin==0) fHistJetPt[centbin+1]->Fill(jet->Pt());
882 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
883 fHistJetPtBias[centbin]->Fill(jet->Pt());
884 if(leadjet && centbin==0) fHistJetPtBias[centbin+1]->Fill(jet->Pt());
885 } // end of MaxTrackPt>ftrkBias or maxclusterPt>fclusBias
887 // do we have trigger tracks
889 AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
890 if(TMath::Abs(jet->Phi()-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
892 } // end of check on iTT > 0
894 if(passedTTcut) fHistJetPtTT[centbin]->Fill(jet->Pt());
896 // cut on HIGHEST jet pt in event (15 GeV default)
897 if (highestjetpt>fJetPtcut) {
899 // loop over all track for an event containing a jet with a pT>fJetPtCut (15)GeV
900 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
901 //AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
902 // check on even type to get object for PID info
903 //char eventtype[10];
905 AliVTrack *track = fAOD->GetTrack(iTracks);
906 if(!track) track = fESD->GetTrack(iTracks);
907 // AliAODTrack* track = fAOD->GetTrack(iTracks);
908 // //sprintf(eventtype,"fAOD");
909 // if(!track) AliESDtrack* track = fESD->GetTrack(iTracks);
910 // //sprintf(eventtype,"fESD");
913 AliError(Form("Couldn't get AliESDtrack %d\n", iTracks));
917 // AliESDtrack *track = GetAcceptTrack(esdtrack);
918 // if(!track) continue;
921 if(TMath::Abs(track->Eta())>fTrkEta)
923 //fHistTrackPt->Fill(track->Pt()); // fill track pT histogram
924 if (track->Pt()<0.15) // make sure track pT > 0.15 GeV
927 // calculate and get some track parameters
928 track->GetTPCsignal(); // get the TPC signal of the track
929 Double_t tracketa=track->Eta(); // eta of track
930 Double_t deta=tracketa-jeteta; // dETA between track and jet
931 Int_t ieta=GetEtaBin(deta); // bin of eta
934 // dPHI between jet and hadron
935 Double_t dphijh = RelativePhi(jet->Phi(), track->Phi()); // angle between jet and hadron
938 //Int_t iptjet=-1; // initialize jet pT bin
939 // iptjet=GetpTjetBin(jetPt); // bin of jet pT
940 Int_t iptjet=GetpTjetBin(jet->Pt());
941 if(iptjet<0) continue;
942 Double_t dR=sqrt(deta*deta+dphijh*dphijh); // difference of R between jet and hadron track
944 // fill some jet-hadron histo's
945 fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt()); // fill jet-hadron dPHI--track pT distribution
946 fHistJetHEtaPhi->Fill(deta,dphijh); // fill jet-hadron eta--phi distribution
947 fHistJetHaddPHI->Fill(dphijh);
949 // does our max track or cluster pass the bias?
950 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
951 // set up and fill Jet-Hadron THnSparse
952 Double_t triggerEntries[9] = {fCent,jetPt,track->Pt(),dR,deta,dphijh,0,leadjet,zVtx};
953 fhnJH->Fill(triggerEntries); // fill Sparse Histo with trigger entries
956 fHistSEphieta->Fill(dphijh, deta);
957 fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
958 fHistJetHaddPhiBias->Fill(dphijh);
960 // in plane and out of plane histo's
961 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
963 fHistJetHaddPhiINBias->Fill(dphijh);
964 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
965 // we are OUT of PLANE
966 fHistJetHaddPhiOUTBias->Fill(dphijh);
967 }else if( dEP>(TMath::Pi()/6) && dEP<=(TMath::Pi()/3) ){
968 // we are in middle of plane
969 fHistJetHaddPhiMIDBias->Fill(dphijh);
971 } // end of check maxtrackpt>ftrackbias or maxclusterpt>fclustbias
973 if(passedTTcut) fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
975 // **************************************************************************************************************
976 // *********************************** PID **********************************************************************
977 // **************************************************************************************************************
979 // data information for pid
980 Double_t eta, pt, EovP, fClsE = -1.;
985 // nSigma of particles in TPC, TOF, and ITS
986 Double_t nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC = -1.;
987 Double_t nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF = -1.;
988 Double_t nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS = -1.;
991 Double_t dEdx, ITSsig, TOFsig = -1.;
992 Double_t charge = -99;
993 //Double_t mom=track->GetTPCmomentum();
995 // get parameters of track
996 charge = track->Charge(); // charge of track
997 eta = track->Eta(); // ETA of track
998 pt = track->Pt(); // pT of track
1001 AliVEvent *vevent=InputEvent();
1002 if (!vevent||!fPIDResponse) return kTRUE; // just return, maybe put at beginning
1004 // get impact parameters and detector signals
1005 dEdx = track->GetTPCsignal();
1006 ITSsig = track->GetITSsignal();
1007 TOFsig = track->GetTOFsignal();
1009 // fill detector signal histograms
1010 fHistTPCdEdX->Fill(pt, dEdx);
1011 fHistITSsignal->Fill(pt, ITSsig);
1012 // fHistTOFsignal->Fill(pt, TOFsig);
1015 nSigmaPion_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kPion);
1016 nSigmaKaon_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kKaon);
1017 nSigmaProton_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kProton);
1020 nSigmaPion_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kPion);
1021 nSigmaKaon_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kKaon);
1022 nSigmaProton_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kProton);
1025 nSigmaPion_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kPion);
1026 nSigmaKaon_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kKaon);
1027 nSigmaProton_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kProton);
1029 // Tests to PID pions, kaons, and protons, (default is undentified tracks)
1030 //Double_t nPIDtpc, nPIDits, nPIDtof = 0;
1031 Double_t nPID = -10;
1033 // check track has pT < 0.900 GeV - use TPC pid
1034 if (pt<0.900 && dEdx>0) {
1038 if (TMath::Abs(nSigmaPion_TPC)<2 && TMath::Abs(nSigmaKaon_TPC)>2 && TMath::Abs(nSigmaProton_TPC)>2 ){
1042 }else isPItpc = kFALSE;
1045 if (TMath::Abs(nSigmaKaon_TPC)<2 && TMath::Abs(nSigmaPion_TPC)>3 && TMath::Abs(nSigmaProton_TPC)>2 ){
1049 }else isKtpc = kFALSE;
1051 // PROTON check - TPC
1052 if (TMath::Abs(nSigmaProton_TPC)<2 && TMath::Abs(nSigmaPion_TPC)>3 && TMath::Abs(nSigmaKaon_TPC)>2 ){
1056 }else isPtpc = kFALSE;
1057 } // cut on track pT for TPC
1059 // check track has pT < 0.500 GeV - use ITS pid
1060 if (pt<0.500 && ITSsig>0) {
1064 if (TMath::Abs(nSigmaPion_ITS)<2 && TMath::Abs(nSigmaKaon_ITS)>2 && TMath::Abs(nSigmaProton_ITS)>2 ){
1068 }else isPIits = kFALSE;
1071 if (TMath::Abs(nSigmaKaon_ITS)<2 && TMath::Abs(nSigmaPion_ITS)>3 && TMath::Abs(nSigmaProton_ITS)>2 ){
1075 }else isKits = kFALSE;
1077 // PROTON check - ITS
1078 if (TMath::Abs(nSigmaProton_ITS)<2 && TMath::Abs(nSigmaPion_ITS)>3 && TMath::Abs(nSigmaKaon_ITS)>2 ){
1082 }else isPits = kFALSE;
1083 } // cut on track pT for ITS
1085 // check track has 0.900 GeV < pT < 2.500 GeV - use TOF pid
1086 if (pt>0.900 && pt<2.500 && TOFsig>0) {
1090 if (TMath::Abs(nSigmaPion_TOF)<2 && TMath::Abs(nSigmaKaon_TOF)>2 && TMath::Abs(nSigmaProton_TOF)>2 ){
1094 }else isPItof = kFALSE;
1097 if (TMath::Abs(nSigmaKaon_TOF)<2 && TMath::Abs(nSigmaPion_TOF)>3 && TMath::Abs(nSigmaProton_TOF)>2 ){
1101 }else isKtof = kFALSE;
1103 // PROTON check - TOF
1104 if (TMath::Abs(nSigmaProton_TOF)<2 && TMath::Abs(nSigmaPion_TOF)>3 && TMath::Abs(nSigmaKaon_TOF)>2 ){
1108 }else isPtof = kFALSE;
1109 } // cut on track pT for TOF
1111 if (nPIDtpc == 0) nPID = -0.5;
1112 if (nPIDits == 0) nPID = 3.5;
1113 if (nPIDtof == 0) nPID = 7.5;
1114 fHistPID->Fill(nPID);
1116 // PID sparse getting filled
1117 Double_t nontrig_tracks_Entries[23] = {fCent,jetPt,pt,charge,eta,deta,dphijh,leadjet,zVtx,EovP,fClsE,
1118 nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC, //nSig in TPC
1119 nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS, //nSig in ITS
1120 nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF, //nSig in TOF
1121 nPIDtpc, nPIDits, nPIDtof //PID label for each detector
1122 }; //array for PID sparse
1123 fhnPID->Fill(nontrig_tracks_Entries); // fill Sparse histo of PID tracks
1124 } // end of doPID check
1127 Int_t itrackpt = -500; // initialize track pT bin
1128 itrackpt = GetpTtrackBin(track->Pt());
1130 // all tracks: jet hadron correlations in hadron pt bins
1131 fHistJetHadbindPhi[itrackpt]->Fill(dphijh);
1133 // in plane and out of plane jet-hadron histo's
1134 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
1136 fHistJetHaddPhiINcent[centbin]->Fill(dphijh);
1137 fHistJetHaddPhiIN->Fill(dphijh);
1138 fHistJetHadbindPhiIN[itrackpt]->Fill(dphijh);
1139 //fHistJetHaddPhiPtcentbinIN[itrackpt][centbin]->Fill(dphijh);
1140 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
1141 // we are OUT of PLANE
1142 fHistJetHaddPhiOUTcent[centbin]->Fill(dphijh);
1143 fHistJetHaddPhiOUT->Fill(dphijh);
1144 fHistJetHadbindPhiOUT[itrackpt]->Fill(dphijh);
1145 //fHistJetHaddPhiPtcentbinOUT[itrackpt][centbin]->Fill(dphijh);
1146 }else if( dEP>(TMath::Pi()/6) && dEP<=(TMath::Pi()/3) ){
1147 // we are in the middle of plane
1148 fHistJetHaddPhiMIDcent[centbin]->Fill(dphijh);
1149 fHistJetHaddPhiMID->Fill(dphijh);
1150 fHistJetHadbindPhiMID[itrackpt]->Fill(dphijh);
1152 } // loop over tracks found in event with highest JET pT > 10.0 GeV (change)
1156 // ***************************************************************************************************************
1157 // ******************************** Event MIXING *****************************************************************
1158 // TObjArray* tracksClone = CloneAndReduceTrackList(tracks); // TEST
1160 //Prepare to do event mixing
1161 if(fDoEventMixing>0){
1164 // 1. First get an event pool corresponding in mult (cent) and
1165 // zvertex to the current event. Once initialized, the pool
1166 // should contain nMix (reduced) events. This routine does not
1167 // pre-scan the chain. The first several events of every chain
1168 // will be skipped until the needed pools are filled to the
1169 // specified depth. If the pool categories are not too rare, this
1170 // should not be a problem. If they are rare, you could lose
1173 // 2. Collect the whole pool's content of tracks into one TObjArray
1174 // (bgTracks), which is effectively a single background super-event.
1176 // 3. The reduced and bgTracks arrays must both be passed into
1177 // FillCorrelations(). Also nMix should be passed in, so a weight
1178 // of 1./nMix can be applied.
1180 // mix jets from triggered events with tracks from MB events
1181 // get the trigger bit
1182 // need to change trigger bits between different runs
1183 UInt_t trigger = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1184 if (trigger==0) return kTRUE; // return
1186 //Double_t Ntrks=(Double_t)Ntracks*1.0;
1187 //cout<<"Test.. Ntrks: "<<fPoolMgr->GetEventPool(Ntrks);
1189 AliEventPool* pool = fPoolMgr->GetEventPool(fCent, zVtx); // for PbPb? fcent
1190 //AliEventPool* pool = fPoolMgr->GetEventPool(Ntrks, zVtx); // for pp
1193 AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCent, zVtx));
1194 //AliFatal(Form("No pool found for multiplicity = %f, zVtx = %f", Ntrks, zVtx));
1198 // use only jets from EMCal-triggered events (for lhc11a use AliVEvent::kEMC1)
1199 /// if (trigger & AliVEvent::kEMC1) {
1200 if (trigger & AliVEvent::kEMCEJE) { // TEST
1201 //check for a trigger jet
1202 // fmixingtrack/10 ??
1203 if (pool->IsReady() || pool->NTracksInPool() > fMixingTracks / 10 /*100*/ || pool->GetCurrentNEvents() >= 5) {
1204 // loop over jets (passing cuts?)
1205 for (Int_t ijet = 0; ijet < Njets; ijet++) {
1206 //Double_t leadjet=0;
1207 //if (ijet==ijethi) leadjet=1;
1210 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
1211 if(!AcceptJet(jet)) continue;
1214 Double_t jetphi = jet->Phi(); // phi of jet
1215 Double_t jetPt = jet->Pt(); // pT of jet
1217 Int_t nMix = pool->GetCurrentNEvents(); // how many particles in pool to mix
1219 // Fill for biased jet triggers only
1220 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)) {
1221 // Fill mixed-event histos here
1222 for (Int_t jMix=0; jMix<nMix; jMix++) {
1223 TObjArray* bgTracks = pool->GetEvent(jMix);
1224 const Int_t Nbgtrks = bgTracks->GetEntries();
1225 for(Int_t ibg=0; ibg<Nbgtrks; ibg++) {
1226 AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
1229 //Double_t DPhi = jetphi - part->Phi();
1230 Double_t DEta = part->Eta()-jet->Eta(); // difference in eta
1231 Double_t DPhi = RelativePhi(jet->Phi(),part->Phi()); // difference in phi
1232 Float_t dEP = RelativeEPJET(jetphi,fEPV0);
1233 Double_t charge = part->Charge();
1235 //Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta); // difference in R
1236 if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
1237 if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
1239 Double_t triggerEntries[8] = {fCent,jetPt,part->Pt(),DEta,DPhi,dEP,zVtx, charge}; //array for ME sparse
1240 fhnMixedEvents->Fill(triggerEntries,1./nMix); // fill Sparse histo of mixed events
1242 // *********************
1243 //create phi distribution from mixed events
1244 //fHistMEdPHI->Fill(DPhi);
1245 fHistMEphieta->Fill(DPhi,DEta, 1./nMix);
1247 } // end of background track loop
1248 } // end of filling mixed-event histo's
1249 } // end of check for biased jet triggers
1250 } // end of jet loop
1251 } // end of check for triggered jet
1252 } //end EMC triggered loop
1254 // use only tracks from MB events (for lhc11a use AliVEvent::kMB)
1255 /// if (trigger & AliVEvent::kMB) {
1256 if (trigger & AliVEvent::kAnyINT){ // test
1257 // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
1258 TObjArray* tracksClone = CloneAndReduceTrackList(tracks);
1260 // update pool if jet in event or not
1261 pool->UpdatePool(tracksClone);
1262 } // check on track from MB events
1263 } // end of event mixing
1265 // print some stats on the event
1268 //cout<<"Event #: "<<event<<endl;
1269 //cout<<"# of jets: "<<Njets<<" Highest jet pt: "<<highestjetpt<<endl;
1270 //cout<<"# tracks: "<<Ntracks<<" Highest track pt: "<<ptmax<<endl;
1271 //cout<<" =============================================== "<<endl;
1273 return kTRUE; // used when the function is of type bool
1276 //________________________________________________________________________
1277 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetCentBin(Double_t cent) const
1278 { // Get centrality bin.
1280 if (cent>=0 && cent<10) centbin = 0;
1281 else if (cent>=10 && cent<20) centbin = 1;
1282 else if (cent>=20 && cent<30) centbin = 2;
1283 else if (cent>=30 && cent<40) centbin = 3;
1284 else if (cent>=40 && cent<50) centbin = 4;
1285 else if (cent>=50 && cent<90) centbin = 5;
1290 //________________________________________________________________________
1291 Float_t AliAnalysisTaskEmcalJetHadEPpid::RelativePhi(Double_t mphi,Double_t vphi) const
1292 { // function to calculate relative PHI
1293 double dphi = mphi-vphi;
1295 // set dphi to operate on adjusted scale
1296 if(dphi<-0.5*TMath::Pi()) dphi+=2.*TMath::Pi();
1297 if(dphi>3./2.*TMath::Pi()) dphi-=2.*TMath::Pi();
1300 if( dphi < -1.*TMath::Pi()/2 || dphi > 3.*TMath::Pi()/2 )
1301 AliWarning(Form("%s: dPHI not in range [-0.5*Pi, 1.5*Pi]!", GetName()));
1303 return dphi; // dphi in [-0.5Pi, 1.5Pi]
1308 //_________________________________________________________________________
1309 Float_t AliAnalysisTaskEmcalJetHadEPpid:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
1310 { // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
1311 Double_t dphi = (EPAng - jetAng);
1313 // ran into trouble with a few dEP<-Pi so trying this...
1314 if( dphi<-1*TMath::Pi() ){
1315 dphi = dphi + 1*TMath::Pi();
1316 } // this assumes we are doing full jets currently
1318 if( (dphi>0) && (dphi<1*TMath::Pi()/2) ){
1319 // Do nothing! we are in quadrant 1
1320 }else if( (dphi>1*TMath::Pi()/2) && (dphi<1*TMath::Pi()) ){
1321 dphi = 1*TMath::Pi() - dphi;
1322 }else if( (dphi<0) && (dphi>-1*TMath::Pi()/2) ){
1324 }else if( (dphi<-1*TMath::Pi()/2) && (dphi>-1*TMath::Pi()) ){
1325 dphi = dphi + 1*TMath::Pi();
1329 if( dphi < 0 || dphi > TMath::Pi()/2 )
1330 AliWarning(Form("%s: dPHI not in range [0, 0.5*Pi]!", GetName()));
1332 return dphi; // dphi in [0, Pi/2]
1335 //Int_t ieta=GetEtaBin(deta);
1336 //________________________________________________________________________
1337 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetEtaBin(Double_t eta) const
1339 // Get eta bin for histos.
1341 if (TMath::Abs(eta)<=0.4) etabin = 0;
1342 else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8) etabin = 1;
1343 else if (TMath::Abs(eta)>=0.8) etabin = 2;
1346 } // end of get-eta-bin
1348 //________________________________________________________________________
1349 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetpTjetBin(Double_t pt) const
1351 // Get jet pt bin for histos.
1353 if (pt>=15 && pt<20) ptbin = 0;
1354 else if (pt>=20 && pt<25) ptbin = 1;
1355 else if (pt>=25 && pt<40) ptbin = 2;
1356 else if (pt>=40 && pt<60) ptbin = 3;
1357 else if (pt>=60) ptbin = 4;
1360 } // end of get-jet-pt-bin
1362 //________________________________________________________________________
1363 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetpTtrackBin(Double_t pt) const
1365 // May need to update bins for future runs... (testing locally)
1367 // Get track pt bin for histos.
1369 if (pt < 0.5) ptbin = 0;
1370 else if (pt>=0.5 && pt<1.0) ptbin = 1;
1371 else if (pt>=1.0 && pt<1.5) ptbin = 2;
1372 else if (pt>=1.5 && pt<2.0) ptbin = 3;
1373 else if (pt>=2.0 && pt<2.5) ptbin = 4;
1374 else if (pt>=2.5 && pt<3.0) ptbin = 5;
1375 else if (pt>=3.0 && pt<4.0) ptbin = 6;
1376 else if (pt>=4.0 && pt<5.0) ptbin = 7;
1377 else if (pt>=5.0) ptbin = 8;
1380 } // end of get-jet-pt-bin
1383 //___________________________________________________________________________
1384 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetzVertexBin(Double_t zVtx) const
1386 // get z-vertex bin for histo.
1388 if (zVtx>=-10 && zVtx<-8) zVbin = 0;
1389 else if (zVtx>=-8 && zVtx<-6) zVbin = 1;
1390 else if (zVtx>=-6 && zVtx<-4) zVbin = 2;
1391 else if (zVtx>=-4 && zVtx<-2) zVbin = 3;
1392 else if (zVtx>=-2 && zVtx<0) zVbin = 4;
1393 else if (zVtx>=0 && zVtx<2) zVbin = 5;
1394 else if (zVtx>=2 && zVtx<4) zVbin = 6;
1395 else if (zVtx>=4 && zVtx<6) zVbin = 7;
1396 else if (zVtx>=6 && zVtx<8) zVbin = 8;
1397 else if (zVtx>=8 && zVtx<10) zVbin = 9;
1401 } // end of get z-vertex bin
1403 //______________________________________________________________________
1404 THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseF(const char* name, UInt_t entries)
1406 // generate new THnSparseF, axes are defined in GetDimParams()
1408 UInt_t tmp = entries;
1411 tmp = tmp &~ -tmp; // clear lowest bit
1414 TString hnTitle(name);
1415 const Int_t dim = count;
1422 while(c<dim && i<32){
1426 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
1427 hnTitle += Form(";%s",label.Data());
1435 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1436 } // end of NewTHnSparseF
1438 void AliAnalysisTaskEmcalJetHadEPpid::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1440 // stores label and binning of axis for THnSparse
1441 const Double_t pi = TMath::Pi();
1446 label = "V0 centrality (%)";
1453 label = "Corrected Jet p_{T}";
1460 label = "Track p_{T}";
1467 label = "Relative Eta";
1474 label = "Relative Phi";
1481 label = "Relative angle of Jet and Reaction Plane";
1495 label = "track charge";
1501 case 8: // need to update
1502 label = "leading track";
1508 case 9: // need to update
1509 label = "leading jet";
1515 } // end of getting dim-params
1517 //_________________________________________________
1518 // From CF event mixing code PhiCorrelations
1519 TObjArray* AliAnalysisTaskEmcalJetHadEPpid::CloneAndReduceTrackList(TObjArray* tracks)
1521 // clones a track list by using AliPicoTrack which uses much less memory (used for event mixing)
1522 TObjArray* tracksClone = new TObjArray;
1523 tracksClone->SetOwner(kTRUE);
1526 Int_t nTrax = fESD->GetNumberOfTracks();
1527 //cout << "nTrax " << nTrax <<endl;
1529 for (Int_t i = 0; i < nTrax; ++i)
1531 AliESDtrack* esdtrack = fESD->GetTrack(i);
1534 AliError(Form("Couldn't get ESD track %d\n", i));
1538 AliESDtrack *particle = GetAcceptTrack(esdtrack);
1539 if(!particle) continue;
1541 cout << "RM Hybrid track : " << i << " " << particle->Pt() << endl;
1544 //cout << "nEntries " << tracks->GetEntriesFast() <<endl;
1545 for (Int_t i=0; i<tracks->GetEntriesFast(); i++)
1547 AliVParticle* particle = (AliVParticle*) tracks->At(i);
1548 if(TMath::Abs(particle->Eta())>fTrkEta) continue;
1549 if(particle->Pt()<0.15)continue;
1551 Double_t trackpt=particle->Pt(); // track pT
1554 trklabel=particle->GetLabel();
1555 //cout << "TRACK_LABEL: " << particle->GetLabel()<<endl;
1558 if(trackpt<0.5) hadbin=0;
1559 else if(trackpt<1) hadbin=1;
1560 else if(trackpt<2) hadbin=2;
1561 else if(trackpt<3) hadbin=3;
1562 else if(trackpt<5) hadbin=4;
1563 else if(trackpt<8) hadbin=5;
1564 else if(trackpt<20) hadbin=6;
1567 if(hadbin>-1 && trklabel>-1 && trklabel <3) fHistTrackEtaPhi[trklabel][hadbin]->Fill(particle->Eta(),particle->Phi());
1568 if(hadbin>-1) fHistTrackEtaPhi[3][hadbin]->Fill(particle->Eta(),particle->Phi());
1570 //if(hadbin>-1) fHistTrackEtaPhi[hadbin]->Fill(particle->Eta(),particle->Phi()); // TEST
1572 tracksClone->Add(new AliPicoTrack(particle->Pt(), particle->Eta(), particle->Phi(), particle->Charge(), 0, 0, 0, 0));
1573 } // end of looping through tracks
1578 //____________________________________________________________________________________________
1579 THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseFPID(const char* name, UInt_t entries)
1581 // generate new THnSparseF PID, axes are defined in GetDimParams()
1583 UInt_t tmp = entries;
1586 tmp = tmp &~ -tmp; // clear lowest bit
1589 TString hnTitle(name);
1590 const Int_t dim = count;
1597 while(c<dim && i<32){
1601 GetDimParamsPID(i, label, nbins[c], xmin[c], xmax[c]);
1602 hnTitle += Form(";%s",label.Data());
1610 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1611 } // end of NewTHnSparseF PID
1613 //________________________________________________________________________________
1614 void AliAnalysisTaskEmcalJetHadEPpid::GetDimParamsPID(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1616 // stores label and binning of axis for THnSparse
1617 const Double_t pi = TMath::Pi();
1622 label = "V0 centrality (%)";
1629 label = "Corrected Jet p_{T}";
1636 label = "Track p_{T}";
1643 label = "Charge of Track";
1650 label = "Track Eta";
1657 label = "Relative Eta of Track and Jet";
1664 label = "Relative Phi of Track and Jet";
1671 label = "leading jet";
1684 case 9: // don't need
1685 label = "E/p of track";
1691 case 10: // don't need
1692 label = "Cluster Energy";
1699 label = "N-Sigma of pions in TPC";
1706 label = "N-Sigma of protons in TPC";
1713 label = "N-Sigma of kaons in TPC";
1720 label = "N-Sigma of pions in ITS";
1727 label = "N-Sigma of protons in ITS";
1734 label = "N-Sigma of kaons in ITS";
1741 label = "N-Sigma of pions in TOF";
1748 label = "N-Sigma of protons in TOF";
1755 label = "N-Sigma of kaons in TOF";
1762 label = "TPC PID determination";
1769 label = "ITS PID determination";
1776 label = "TOF PID determination";
1783 } // end of get dimension parameters PID
1785 void AliAnalysisTaskEmcalJetHadEPpid::Terminate(Option_t *)
1787 cout<<"#########################"<<endl;
1788 cout<<"#### DONE RUNNING!!! ####"<<endl;
1789 cout<<"#########################"<<endl;
1791 } // end of terminate
1794 //void AliAnalysisTaskEmcalJetHadEPpid::FillAnalysisSummaryHistogram() const
1795 void AliAnalysisTaskEmcalJetHadEPpid::SetfHistPIDcounterLabels(TH1* h) const
1797 // fill the analysis summary histrogram, saves all relevant analysis settigns
1798 h->GetXaxis()->SetBinLabel(1, "TPC: Unidentified"); // -0.5
1799 h->GetXaxis()->SetBinLabel(2, "TPC: Pion"); // 0.5
1800 h->GetXaxis()->SetBinLabel(3, "TPC: Kaon"); // 1.5
1801 h->GetXaxis()->SetBinLabel(4, "TPC: Proton"); // 2.5
1802 h->GetXaxis()->SetBinLabel(5, "ITS: Unidentified"); // 3.5
1803 h->GetXaxis()->SetBinLabel(6, "ITS: Pion"); // 4.5
1804 h->GetXaxis()->SetBinLabel(7, "ITS: Kaon"); // 5.5
1805 h->GetXaxis()->SetBinLabel(8, "ITS: Proton"); // 6.5
1806 h->GetXaxis()->SetBinLabel(9, "TOF: Unidentified"); // 7.5
1807 h->GetXaxis()->SetBinLabel(10, "TOF: Pion"); // 8.5
1808 h->GetXaxis()->SetBinLabel(11, "TOF: Kaon"); // 9.5
1809 h->GetXaxis()->SetBinLabel(12, "TOF: Proton"); // 10.5