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"
61 #include "AliJetContainer.h"
62 #include "AliParticleContainer.h"
63 #include "AliClusterContainer.h"
65 ClassImp(AliAnalysisTaskEmcalJetHadEPpid)
67 //________________________________________________________________________
68 AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid() :
69 AliAnalysisTaskEmcalJet("correlations",kFALSE),
70 fPhimin(-10), fPhimax(10),
71 fEtamin(-0.9), fEtamax(0.9),
72 fAreacut(0.0), fTrkBias(5), fClusBias(5), fTrkEta(0.9),
73 fJetPtcut(15.0), fJetRad(0.4), fConstituentCut(0.15),
74 fDoEventMixing(0), fMixingTracks(50000),
75 doPlotGlobalRho(0), doVariableBinning(0), dovarbinTHnSparse(0),
76 makeQAhistos(0), makeBIAShistos(0), makeextraCORRhistos(0),
77 useAOD(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
80 fTracksName(""), fJetsName(""),
82 isPItpc(0), isKtpc(0), isPtpc(0), nPIDtpc(0) , // pid TPC
83 isPIits(0), isKits(0), isPits(0), nPIDits(0) , // pid ITS
84 isPItof(0), isKtof(0), isPtof(0), nPIDtof(0) , // pid TOF
86 fPIDResponse(0x0), fTPCResponse(),
88 fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
89 fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
90 fHistZvtx(0), fHistMult(0),
91 fHistJetPhi(0), fHistTrackPhi(0),
92 fHistJetHaddPhiIN(0), fHistJetHaddPhiOUT(0), fHistJetHaddPhiMID(0),
93 fHistJetHaddPhiBias(0), fHistJetHaddPhiINBias(0), fHistJetHaddPhiOUTBias(0), fHistJetHaddPhiMIDBias(0),
95 fHistTrackPtallcent(0),
96 fHistJetEtaPhi(0), fHistJetHEtaPhi(0),
97 fHistSEphieta(0), fHistMEphieta(0),
100 fhnPID(0x0), fhnMixedEvents(0x0), fhnJH(0x0),
101 fJetsCont(0), fTracksCont(0), fCaloClustersCont(0),
102 fContainerAllJets(0), fContainerPIDJets(1)
104 // Default Constructor
105 for(Int_t ilab=0; ilab<4; ilab++){
106 for(Int_t ipta=0; ipta<7; ipta++){
107 fHistTrackEtaPhi[ilab][ipta]=0;
108 } // end of pt-associated loop
111 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
112 fHistJetHadbindPhi[itrackpt]=0;
113 fHistJetHadbindPhiIN[itrackpt]=0;
114 fHistJetHadbindPhiMID[itrackpt]=0;
115 fHistJetHadbindPhiOUT[itrackpt]=0;
116 } // end of trackpt bin loop
118 for(Int_t icent = 0; icent<2; ++icent){
120 fHistJetPtBias[icent]=0;
121 fHistJetPtTT[icent]=0;
122 fHistAreavsRawPt[icent]=0;
124 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
125 for(Int_t ieta = 0; ieta<3; ++ieta){
126 fHistJetH[icent][iptjet][ieta]=0;
127 fHistJetHBias[icent][iptjet][ieta]=0;
128 fHistJetHTT[icent][iptjet][ieta]=0;
130 } // end of pt-jet loop
131 } // end of centrality loop
133 // centrality dependent histo's
134 for (Int_t i = 0;i<6;++i){
135 fHistJetPtvsTrackPt[i] = 0;
136 fHistRawJetPtvsTrackPt[i] = 0;
142 fHistJetPtcorrGlRho[i] = 0;
143 fHistJetPtvsdEP[i] = 0;
144 fHistJetPtvsdEPBias[i] = 0;
145 fHistRhovsdEP[i] = 0;
146 fHistJetEtaPhiPt[i] = 0;
147 fHistJetEtaPhiPtBias[i] = 0;
148 fHistJetPtArea[i] = 0;
149 fHistJetPtAreaBias[i] = 0;
150 fHistJetPtNcon[i] = 0;
151 fHistJetPtNconBias[i] = 0;
152 fHistJetPtNconCh[i] = 0;
153 fHistJetPtNconBiasCh[i] = 0;
154 fHistJetPtNconEm[i] = 0;
155 fHistJetPtNconBiasEm[i] = 0;
156 fHistJetHaddPhiINcent[i] = 0;
157 fHistJetHaddPhiOUTcent[i] = 0;
158 fHistJetHaddPhiMIDcent[i] = 0;
161 SetMakeGeneralHistograms(kTRUE);
163 // define input and output slots here
164 DefineInput(0, TChain::Class());
165 DefineOutput(1, TList::Class());
168 //________________________________________________________________________
169 AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid(const char *name) :
170 AliAnalysisTaskEmcalJet(name,kTRUE),
171 fPhimin(-10), fPhimax(10),
172 fEtamin(-0.9), fEtamax(0.9),
173 fAreacut(0.0), fTrkBias(5), fClusBias(5), fTrkEta(0.9),
174 fJetPtcut(15.0), fJetRad(0.4), fConstituentCut(0.15),
175 fDoEventMixing(0), fMixingTracks(50000),
176 doPlotGlobalRho(0), doVariableBinning(0), dovarbinTHnSparse(0),
177 makeQAhistos(0), makeBIAShistos(0), makeextraCORRhistos(0),
178 useAOD(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
181 fTracksName(""), fJetsName(""),
183 isPItpc(0), isKtpc(0), isPtpc(0), nPIDtpc(0), // pid TPC
184 isPIits(0), isKits(0), isPits(0), nPIDits(0), // pid ITS
185 isPItof(0), isKtof(0), isPtof(0), nPIDtof(0), // pid TOF
187 fPIDResponse(0x0), fTPCResponse(),
189 fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
190 fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
191 fHistZvtx(0), fHistMult(0),
192 fHistJetPhi(0), fHistTrackPhi(0),
193 fHistJetHaddPhiIN(0), fHistJetHaddPhiOUT(0), fHistJetHaddPhiMID(0),
194 fHistJetHaddPhiBias(0), fHistJetHaddPhiINBias(0), fHistJetHaddPhiOUTBias(0), fHistJetHaddPhiMIDBias(0),
196 fHistTrackPtallcent(0),
197 fHistJetEtaPhi(0), fHistJetHEtaPhi(0),
198 fHistSEphieta(0), fHistMEphieta(0),
201 fhnPID(0x0), fhnMixedEvents(0x0), fhnJH(0x0),
202 fJetsCont(0), fTracksCont(0), fCaloClustersCont(0),
203 fContainerAllJets(0), fContainerPIDJets(1)
205 // Default Constructor
206 for(Int_t ilab=0; ilab<4; ilab++){
207 for(Int_t ipta=0; ipta<7; ipta++){
208 fHistTrackEtaPhi[ilab][ipta]=0;
209 } // end of pt-associated loop
212 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
213 fHistJetHadbindPhi[itrackpt]=0;
214 fHistJetHadbindPhiIN[itrackpt]=0;
215 fHistJetHadbindPhiMID[itrackpt]=0;
216 fHistJetHadbindPhiOUT[itrackpt]=0;
217 } // end of trackpt bin loop
219 for(Int_t icent = 0; icent<2; ++icent){
221 fHistJetPtBias[icent]=0;
222 fHistJetPtTT[icent]=0;
223 fHistAreavsRawPt[icent]=0;
225 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
226 for(Int_t ieta = 0; ieta<3; ++ieta){
227 fHistJetH[icent][iptjet][ieta]=0;
228 fHistJetHBias[icent][iptjet][ieta]=0;
229 fHistJetHTT[icent][iptjet][ieta]=0;
231 } // end of pt-jet loop
232 } // end of centrality loop
234 // centrality dependent histo's
235 for (Int_t i = 0;i<6;++i){
236 fHistJetPtvsTrackPt[i] = 0;
237 fHistRawJetPtvsTrackPt[i] = 0;
243 fHistJetPtcorrGlRho[i] = 0;
244 fHistJetPtvsdEP[i] = 0;
245 fHistJetPtvsdEPBias[i] = 0;
246 fHistRhovsdEP[i] = 0;
247 fHistJetEtaPhiPt[i] = 0;
248 fHistJetEtaPhiPtBias[i] = 0;
249 fHistJetPtArea[i] = 0;
250 fHistJetPtAreaBias[i] = 0;
251 fHistJetPtNcon[i] = 0;
252 fHistJetPtNconBias[i] = 0;
253 fHistJetPtNconCh[i] = 0;
254 fHistJetPtNconBiasCh[i] = 0;
255 fHistJetPtNconEm[i] = 0;
256 fHistJetPtNconBiasEm[i] = 0;
257 fHistJetHaddPhiINcent[i] = 0;
258 fHistJetHaddPhiOUTcent[i] = 0;
259 fHistJetHaddPhiMIDcent[i] = 0;
262 SetMakeGeneralHistograms(kTRUE);
264 // define input and output slots here
265 DefineInput(0, TChain::Class());
266 DefineOutput(1, TList::Class());
269 //_______________________________________________________________________
270 AliAnalysisTaskEmcalJetHadEPpid::~AliAnalysisTaskEmcalJetHadEPpid()
279 //________________________________________________________________________
280 void AliAnalysisTaskEmcalJetHadEPpid::UserCreateOutputObjects()
281 { // This is called ONCE!
282 if (!fCreateHisto) return;
283 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
284 OpenFile(1); // do I need the 1?
286 // char array for naming histograms
290 // create histograms that arn't array
292 fHistTPCdEdX = new TH2F("TPCdEdX", "TPCdEdX", 2000, 0.0, 100.0, 500, 0, 500);
293 fHistITSsignal = new TH2F("ITSsignal", "ITSsignal", 2000, 0.0, 100.0, 500, 0, 500);
294 // fHistTOFsignal = new TH2F("TOFsignal", "TOFsignal", 2000, 0.0, 100.0, 500, 0, 500);
295 fHistCentrality = new TH1F("fHistCentrality","centrality",100,0,100);
296 fHistZvtx = new TH1F("fHistZvertex","z vertex",60,-30,30);
297 fHistJetPhi = new TH1F("fHistJetPhi", "Jet #phi Distribution", 128, -2.0*TMath::Pi(), 2.0*TMath::Pi());
298 fHistTrackPhi = new TH1F("fHistTrackPhi", "Track #phi Distribution", 128, -2.0*TMath::Pi(), 2.0*TMath::Pi());
299 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 100, 0.0, 100.0, 500, 0, 500);
301 // add to output list
302 fOutput->Add(fHistTPCdEdX);
303 fOutput->Add(fHistITSsignal);
304 //fOutput->Add(fHistTOFsignal);
305 fOutput->Add(fHistCentrality);
306 fOutput->Add(fHistZvtx);
307 fOutput->Add(fHistJetPhi);
308 fOutput->Add(fHistTrackPhi);
309 //fOutput->Add(fHistTrackEtaPhi);
311 for(Int_t ipta=0; ipta<7; ++ipta){
312 for(Int_t ilab=0; ilab<4; ++ilab){
313 snprintf(name, nchar, "fHistTrackEtaPhi_%i_%i", ilab,ipta);
314 fHistTrackEtaPhi[ilab][ipta] = new TH2F(name,name,400,-1,1,640,0.0,2.*TMath::Pi());
315 fOutput->Add(fHistTrackEtaPhi[ilab][ipta]);
317 } // end of pt-associated loop
321 if (makeBIAShistos) {
322 fHistJetHaddPhiBias = new TH1F("fHistJetHaddPhiBias","Jet-Hadron #Delta#varphi with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
323 fHistJetHaddPhiINBias = new TH1F("fHistJetHaddPhiINBias","Jet-Hadron #Delta#varphi IN PLANE with bias", 128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
324 fHistJetHaddPhiOUTBias = new TH1F("fHistJetHaddPhiOUTBias","Jet-Hadron #Delta#varphi OUT PLANE with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
325 fHistJetHaddPhiMIDBias = new TH1F("fHistJetHaddPhiMIDBias","Jet-Hadron #Delta#varphi MIDDLE of PLANE with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
327 // add to output list
328 fOutput->Add(fHistJetHaddPhiBias);
329 fOutput->Add(fHistJetHaddPhiINBias);
330 fOutput->Add(fHistJetHaddPhiOUTBias);
331 fOutput->Add(fHistJetHaddPhiMIDBias);
334 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 100, 0.0, 100.0, 100, 0, 100);
335 fHistTrackPtallcent = new TH1F("fHistTrackPtallcent", "p_{T} distribution", 1000, 0.0, 100.0);
336 fHistJetEtaPhi = new TH2F("fHistJetEtaPhi","Jet #eta-#phi",512,-1.8,1.8,512,-3.2,3.2);
337 fHistJetHEtaPhi = new TH2F("fHistJetHEtaPhi","Jet-Hadron #Delta#eta-#Delta#phi",512,-1.8,1.8,256,-1.6,4.8);
338 fHistSEphieta = new TH2F("fHistSEphieta", "Single Event #phi-#eta distribution", 64,-0.5*TMath::Pi(), 1.5*TMath::Pi(), 64,-1.8,1.8); // was 64 bins
339 fHistMEphieta = new TH2F("fHistMEphieta", "Mixed Event #phi-#eta distribution", 64, -0.5*TMath::Pi(), 1.5*TMath::Pi(), 64,-1.8,1.8); // was 64 bins
340 fHistJetHaddPHI = new TH1F("fHistJetHaddPHI", "Jet-Hadron #Delta#varphi", 128,-0.5*TMath::Pi(),1.5*TMath::Pi());
341 fHistJetHaddPhiIN = new TH1F("fHistJetHaddPhiIN","Jet-Hadron #Delta#varphi IN PLANE", 128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
342 fHistJetHaddPhiOUT = new TH1F("fHistJetHaddPhiOUT","Jet-Hadron #Delta#varphi OUT PLANE",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
343 fHistJetHaddPhiMID = new TH1F("fHistJetHaddPhiMID","Jet-Hadron #Delta#varphi MIDDLE of PLANE",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
345 // add to output lists
346 fOutput->Add(fHistNjetvsCent);
347 fOutput->Add(fHistTrackPtallcent);
348 fOutput->Add(fHistJetEtaPhi);
349 fOutput->Add(fHistJetHEtaPhi);
350 fOutput->Add(fHistJetHaddPhiIN);
351 fOutput->Add(fHistJetHaddPhiOUT);
352 fOutput->Add(fHistJetHaddPhiMID);
353 fOutput->Add(fHistSEphieta);
354 fOutput->Add(fHistMEphieta);
355 fOutput->Add(fHistJetHaddPHI);
357 // jet hadron (binned) correlations in dPHI
358 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
359 snprintf(name, nchar, "fHistJetHadbindPhi_%i",itrackpt);
360 fHistJetHadbindPhi[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
361 fOutput->Add(fHistJetHadbindPhi[itrackpt]);
363 snprintf(name, nchar, "fHistJetHadbindPhiIN_%i",itrackpt);
364 fHistJetHadbindPhiIN[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
365 fOutput->Add(fHistJetHadbindPhiIN[itrackpt]);
367 snprintf(name, nchar, "fHistJetHadbindPhiMID_%i",itrackpt);
368 fHistJetHadbindPhiMID[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
369 fOutput->Add(fHistJetHadbindPhiMID[itrackpt]);
371 snprintf(name, nchar, "fHistJetHadbindPhiOUT_%i",itrackpt);
372 fHistJetHadbindPhiOUT[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
373 fOutput->Add(fHistJetHadbindPhiOUT[itrackpt]);
374 } // end of trackpt bin loop
376 if (makeextraCORRhistos) {
377 for(Int_t icent = 0; icent<2; ++icent){
378 snprintf(name, nchar, "fHistJetPt_%i",icent);
379 fHistJetPt[icent] = new TH1F(name,name,200,0,200);
380 fOutput->Add(fHistJetPt[icent]);
382 snprintf(name, nchar, "fHistJetPtBias_%i",icent);
383 fHistJetPtBias[icent] = new TH1F(name,name,200,0,200);
384 fOutput->Add(fHistJetPtBias[icent]);
386 snprintf(name, nchar, "fHistJetPtTT_%i",icent);
387 fHistJetPtTT[icent] = new TH1F(name,name,200,0,200);
388 fOutput->Add(fHistJetPtTT[icent]);
390 snprintf(name, nchar, "fHistAreavsRawPt_%i",icent);
391 fHistAreavsRawPt[icent] = new TH2F(name,name,100,0,1,200,0,200);
392 fOutput->Add(fHistAreavsRawPt[icent]);
394 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
395 for(Int_t ieta = 0; ieta<3; ++ieta){
396 snprintf(name, nchar, "fHistJetH_%i_%i_%i",icent,iptjet,ieta);
397 fHistJetH[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
398 fOutput->Add(fHistJetH[icent][iptjet][ieta]);
400 snprintf(name, nchar, "fHistJetHBias_%i_%i_%i",icent,iptjet,ieta);
401 fHistJetHBias[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
402 fOutput->Add(fHistJetHBias[icent][iptjet][ieta]);
404 snprintf(name, nchar, "fHistJetHTT_%i_%i_%i",icent,iptjet,ieta);
405 fHistJetHTT[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
406 fOutput->Add(fHistJetHTT[icent][iptjet][ieta]);
408 } // end of pt-jet loop
409 } // end of centrality loop
410 } // make JetHadhisto old
412 // strings for titles
416 for (Int_t i = 0;i<6;++i){
418 name1 = TString(Form("EP0_%i",i));
419 title1 = TString(Form("EP VZero cent bin %i",i));
420 fHistEP0[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
421 fOutput->Add(fHistEP0[i]);
423 name1 = TString(Form("EP0A_%i",i));
424 title1 = TString(Form("EP VZero cent bin %i",i));
425 fHistEP0A[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
426 fOutput->Add(fHistEP0A[i]);
428 name1 = TString(Form("EP0C_%i",i));
429 title1 = TString(Form("EP VZero cent bin %i",i));
430 fHistEP0C[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
431 fOutput->Add(fHistEP0C[i]);
433 name1 = TString(Form("EPAvsC_%i",i));
434 title1 = TString(Form("EP VZero cent bin %i",i));
435 fHistEPAvsC[i] = new TH2F(name1,title1,144,-TMath::Pi(),TMath::Pi(),144,-TMath::Pi(),TMath::Pi());
436 fOutput->Add(fHistEPAvsC[i]);
438 name1 = TString(Form("JetPtvsTrackPt_%i",i));
439 title1 = TString(Form("Jet p_{T} vs Leading Track p_{T} cent bin %i",i));
440 fHistJetPtvsTrackPt[i] = new TH2F(name1,title1,250,-50,200,250,0,50);
441 fOutput->Add(fHistJetPtvsTrackPt[i]);
443 name1 = TString(Form("RawJetPtvsTrackPt_%i",i));
444 title1 = TString(Form("Raw Jet p_{T} vs Leading Track p_{T} cent bin %i",i));
445 fHistRawJetPtvsTrackPt[i] = new TH2F(name1,title1,250,-50,200,250,0,50);
446 fOutput->Add(fHistRawJetPtvsTrackPt[i]);
448 name1 = TString(Form("TrackPt_%i",i));
449 title1 = TString(Form("Track p_{T} cent bin %i",i));
450 fHistTrackPt[i] = new TH1F(name1,title1,1000,0,100); // up to 200?
451 fOutput->Add(fHistTrackPt[i]);
453 name1 = TString(Form("JetPtcorrGLrho_%i",i));
454 title1 = TString(Form("Jet p_{T} corrected with Global #rho cent bin %i",i));
455 fHistJetPtcorrGlRho[i] = new TH1F(name1,title1,300,-100,200); // up to 200?
456 fOutput->Add(fHistJetPtcorrGlRho[i]);
459 name1 = TString(Form("JetPtvsdEP_%i",i));
460 title1 = TString(Form("Jet p_{T} vs #DeltaEP cent bin %i",i));
461 fHistJetPtvsdEP[i] = new TH2F(name1,title1,250,-50,200,288,-2*TMath::Pi(),2*TMath::Pi());
462 fOutput->Add(fHistJetPtvsdEP[i]);
464 name1 = TString(Form("JetPtvsdEPBias_%i",i));
465 title1 = TString(Form("Bias Jet p_{T} vs #DeltaEP cent bin %i",i));
466 fHistJetPtvsdEPBias[i] = new TH2F(name1,title1,250,-50,200,288,-2*TMath::Pi(),2*TMath::Pi());
467 fOutput->Add(fHistJetPtvsdEPBias[i]);
469 name1 = TString(Form("RhovsdEP_%i",i));
470 title1 = TString(Form("#rho vs #DeltaEP cent bin %i",i));
471 fHistRhovsdEP[i] = new TH2F(name1,title1,500,0,500,288,-2*TMath::Pi(),2*TMath::Pi());
472 fOutput->Add(fHistRhovsdEP[i]);
474 name1 = TString(Form("JetEtaPhiPt_%i",i));
475 title1 = TString(Form("Jet #eta-#phi p_{T} cent bin %i",i));
476 fHistJetEtaPhiPt[i] = new TH3F(name1,title1,250,-50,200,100,-1,1,64,-3.2,3.2);
477 fOutput->Add(fHistJetEtaPhiPt[i]);
479 name1 = TString(Form("JetEtaPhiPtBias_%i",i));
480 title1 = TString(Form("Jet #eta-#phi p_{T} Bias cent bin %i",i));
481 fHistJetEtaPhiPtBias[i] = new TH3F(name1,title1,250,-50,200,100,-1,1,64,-3.2,3.2);
482 fOutput->Add(fHistJetEtaPhiPtBias[i]);
484 name1 = TString(Form("JetPtArea_%i",i));
485 title1 = TString(Form("Jet p_{T} Area cent bin %i",i));
486 fHistJetPtArea[i] = new TH2F(name1,title1,250,-50,200,100,0,1);
487 fOutput->Add(fHistJetPtArea[i]);
489 name1 = TString(Form("JetHaddPhiINcent_%i",i));
490 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution IN PLANE cent bin %i",i));
491 fHistJetHaddPhiINcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
492 fOutput->Add(fHistJetHaddPhiINcent[i]);
494 name1 = TString(Form("JetHaddPhiOUTcent_%i",i));
495 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution OUT PLANE cent bin %i",i));
496 fHistJetHaddPhiOUTcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
497 fOutput->Add(fHistJetHaddPhiOUTcent[i]);
499 name1 = TString(Form("JetHaddPhiMIDcent_%i",i));
500 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution MIDDLE of PLANE cent bin %i",i));
501 fHistJetHaddPhiMIDcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
502 fOutput->Add(fHistJetHaddPhiMIDcent[i]);
504 if (makeextraCORRhistos) {
505 name1 = TString(Form("JetPtAreaBias_%i",i));
506 title1 = TString(Form("Jet p_{T} Area Bias cent bin %i",i));
507 fHistJetPtAreaBias[i] = new TH2F(name1,title1,250,-50,200,100,0,1);
508 fOutput->Add(fHistJetPtAreaBias[i]);
510 name1 = TString(Form("JetPtNcon_%i",i));
511 title1 = TString(Form("Jet p_{T} Ncon cent bin %i",i));
512 fHistJetPtNcon[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
513 fOutput->Add(fHistJetPtNcon[i]);
515 name1 = TString(Form("JetPtNconBias_%i",i));
516 title1 = TString(Form("Jet p_{T} NconBias cent bin %i",i));
517 fHistJetPtNconBias[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
518 fOutput->Add(fHistJetPtNconBias[i]);
520 name1 = TString(Form("JetPtNconCh_%i",i));
521 title1 = TString(Form("Jet p_{T} NconCh cent bin %i",i));
522 fHistJetPtNconCh[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
523 fOutput->Add(fHistJetPtNconCh[i]);
525 name1 = TString(Form("JetPtNconBiasCh_%i",i));
526 title1 = TString(Form("Jet p_{T} NconBiasCh cent bin %i",i));
527 fHistJetPtNconBiasCh[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
528 fOutput->Add(fHistJetPtNconBiasCh[i]);
530 name1 = TString(Form("JetPtNconEm_%i",i));
531 title1 = TString(Form("Jet p_{T} NconEm cent bin %i",i));
532 fHistJetPtNconEm[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
533 fOutput->Add(fHistJetPtNconEm[i]);
535 name1 = TString(Form("JetPtNconBiasEm_%i",i));
536 title1 = TString(Form("Jet p_{T} NconBiasEm cent bin %i",i));
537 fHistJetPtNconBiasEm[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
538 fOutput->Add(fHistJetPtNconBiasEm[i]);
539 } // extra Correlations histos switch
542 // set up jet-hadron sparse
543 UInt_t bitcoded = 0; // bit coded, see GetDimParams() below
545 UInt_t bitcode = 0; // bit coded, see GetDimParamsPID() below
546 bitcoded = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9;
547 if(makeextraCORRhistos) fhnJH = NewTHnSparseF("fhnJH", bitcoded);
548 if(makeextraCORRhistos) fOutput->Add(fhnJH);
551 // for pp we need mult bins for event mixing. Create binning here, to also make a histogram from it
552 Int_t nCentralityBins = 8;
553 Double_t centralityBins[9] = {0.0, 4., 9, 15, 25, 35, 55, 100.0,500.0};
554 Double_t centralityBins[nCentralityBins+1];
555 for(Int_t ic=0; ic<nCentralityBins+1; ic++){
556 if(ic==nCentralityBins) centralityBins[ic]=500;
557 else centralityBins[ic]=10.0*ic;
561 // setup for Pb-Pb collisions
562 Int_t nCentralityBins = 100;
563 Double_t centralityBins[nCentralityBins+1];
564 for(Int_t ic=0; ic<nCentralityBins; ic++){
565 centralityBins[ic]=1.0*ic;
568 fHistMult = new TH1F("fHistMult","multiplicity",nCentralityBins,centralityBins);
569 // fOutput->Add(fHistMult);
572 Int_t trackDepth = fMixingTracks;
573 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
574 Int_t nZvtxBins = 5+1+5;
575 Double_t vertexBins[] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10};
576 Double_t* zvtxbin = vertexBins;
577 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centralityBins, nZvtxBins, zvtxbin);
579 // set up event mixing sparse
581 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<9;
582 fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);
583 fhnMixedEvents->Sumw2();
584 fOutput->Add(fhnMixedEvents);
585 } // end of do-eventmixing
587 // variable binned pt
588 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};
589 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};
591 // number of bins you tell histogram should be (# in array - 1) because the last bin
592 // is the right-most edge of the histogram
593 // i.e. this is for PT and there are 57 numbers (bins) thus we have 56 bins in our histo
594 Int_t nbinsjetPT = sizeof(xlowjetPT)/sizeof(Double_t) - 1;
595 Int_t nbinstrPT = sizeof(xlowtrPT)/sizeof(Double_t) - 1;
599 // ****************************** PID *****************************************************
600 // set up PID handler
601 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
602 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
604 AliFatal("Input handler needed");
608 // PID response object
609 fPIDResponse = inputHandler->GetPIDResponse();
611 AliError("PIDResponse object was not created");
614 // *****************************************************************************************
617 fHistPID = new TH1F("fHistPID","PID Counter",12, -0.5, 11.5);
618 SetfHistPIDcounterLabels(fHistPID);
619 fOutput->Add(fHistPID);
621 bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
622 1<<10 | 1<<11 | 1<<14 | 1<<17 | // | 1<<12 | 1<<13 | 1<<14 | 1<<15 | 1<<16 | 1<<17 | 1<<18 | 1<<19 |
623 1<<20 | 1<<21 | 1<<22;
624 fhnPID = NewTHnSparseFPID("fhnPID", bitcode);
626 if(dovarbinTHnSparse){
627 fhnPID->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
628 fhnPID->GetAxis(2)->Set(nbinstrPT, xlowtrPT);
632 fOutput->Add(fhnPID);
635 // =========== Switch on Sumw2 for all histos ===========
636 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
637 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
642 TH2 *h2 = dynamic_cast<TH2*>(fOutput->At(i));
647 TH3 *h3 = dynamic_cast<TH3*>(fOutput->At(i));
652 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
656 PostData(1, fOutput);
659 //_________________________________________________________________________
660 void AliAnalysisTaskEmcalJetHadEPpid::ExecOnce()
662 AliAnalysisTaskEmcalJet::ExecOnce();
664 if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;
665 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
666 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
669 //_________________________________________________________________________
670 Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
671 { // Main loop called for each event
672 // TEST TEST TEST TEST for OBJECTS!
674 AliError(Form("Couldn't get fLocalRho object, try to get it from Event based on name\n"));
675 fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
676 if(!fLocalRho) return kTRUE;
679 AliError(Form("No fTracks object!!\n"));
683 AliError(Form("No fJets object!!\n"));
687 // what kind of event do we have: AOD or ESD?
688 // if we have ESD event, set up ESD object
690 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
692 AliError(Form("ERROR: fESD not available\n"));
697 // if we have AOD event, set up AOD object
699 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
701 AliError(Form("ERROR: fAOD not available\n"));
707 Int_t centbin = GetCentBin(fCent);
708 if (makeQAhistos) fHistCentrality->Fill(fCent); // won't be filled in pp collision (Keep this in mind!)
710 // for pp analyses we will just use the first centrality bin
711 if (centbin == -1) centbin = 0;
713 // apply cut to event on Centrality > 90%
714 if(fCent>90) return kTRUE;
716 // get vertex information
717 Double_t fvertex[3]={0,0,0};
718 InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
719 Double_t zVtx=fvertex[2];
720 if (makeQAhistos) fHistZvtx->Fill(zVtx);
723 //Int_t zVbin = GetzVertexBin(zVtx);
726 if(fabs(zVtx)>10.0) return kTRUE;
728 // create pointer to list of input event
729 TList *list = InputEvent()->GetList();
731 AliError(Form("ERROR: list not attached\n"));
735 // initialize TClonesArray pointers to jets and tracks
736 TClonesArray *jets = 0;
737 TClonesArray *tracks = 0;
740 tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracks));
742 AliError(Form("Pointer to tracks %s == 0", fTracks->GetName()));
744 } // verify existence of tracks
747 jets = dynamic_cast<TClonesArray*>(list->FindObject(fJets));
749 AliError(Form("Pointer to jets %s == 0", fJets->GetName()));
751 } // verify existence of jets
753 // get number of jets and tracks
754 const Int_t Njets = jets->GetEntries();
755 const Int_t Ntracks = tracks->GetEntries();
756 if(Ntracks<1) return kTRUE;
757 if(Njets<1) return kTRUE;
759 if (makeQAhistos) fHistMult->Fill(Ntracks); // fill multiplicity distribution
761 // initialize track parameters
765 // loop over tracks - to get hardest track (highest pt)
766 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++){
767 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
769 AliError(Form("Couldn't get VTrack track %d\n", iTracks));
771 } // verify existence of tracks
773 if(TMath::Abs(track->Eta())>0.9) continue;
774 if(track->Pt()<0.15) continue;
776 if(track->Pt()>ptmax){
777 ptmax=track->Pt(); // max pT track
778 iTT=iTracks; // trigger tracks
779 } // check if Pt>maxpt
781 if (makeQAhistos) fHistTrackPhi->Fill(track->Phi());
782 if (makeQAhistos) fHistTrackPt[centbin]->Fill(track->Pt());
783 fHistTrackPtallcent->Fill(track->Pt());
784 } // end of loop over tracks
786 // get rho from event and fill relative histo's
787 fRho = GetRhoFromEvent(fRhoName);
788 fRhoVal = fRho->GetVal();
789 fHistRhovsdEP[centbin]->Fill(fRhoVal,fEPV0); // Global Rho vs delta Event Plane angle
792 fHistRhovsCent->Fill(fCent,fRhoVal); // Global Rho vs Centrality
793 fHistEP0[centbin]->Fill(fEPV0);
794 fHistEP0A[centbin]->Fill(fEPV0A);
795 fHistEP0C[centbin]->Fill(fEPV0C);
796 fHistEPAvsC[centbin]->Fill(fEPV0A,fEPV0C);
799 // initialize jet parameters
801 Double_t highestjetpt=0.0;
805 // loop over jets in an event - to find highest jet pT and apply some cuts
806 for (Int_t ijet = 0; ijet < Njets; ijet++){
808 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
812 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax)) continue;
813 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax)) continue;
814 if (makeextraCORRhistos) fHistAreavsRawPt[centbin]->Fill(jet->Pt(),jet->Area());
815 if(!AcceptMyJet(jet)) continue;
817 NjetAcc++; // # of accepted jets
819 // use this to get total # of jets passing cuts in events!!!!!!!!
820 if (makeQAhistos) fHistJetPhi->Fill(jet->Phi()); // Jet Phi histogram (filled)
822 // get highest Pt jet in event
823 if(highestjetpt<jet->Pt()){
825 highestjetpt=jet->Pt();
827 } // end of looping over jets
830 fHistNjetvsCent->Fill(fCent,NjetAcc);
833 // loop over jets in event and make appropriate cuts
834 for (Int_t ijet = 0; ijet < Njets; ++ijet) {
835 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ijet));
838 // (should probably be higher..., but makes a cut on jet pT)
839 if (jet->Pt()<0.1) continue;
840 // do we accept jet? apply jet cuts
841 if (!AcceptMyJet(jet)) continue;
845 if (ijet==ijethi) leadjet=1;
847 // initialize and calculate various parameters: pt, eta, phi, rho, etc...
848 Double_t jetphi = jet->Phi(); // phi of jet
849 NJETAcc++; // # accepted jets
850 fLocalRhoVal = fLocalRho->GetLocalVal(jetphi, GetJetRadius(0)); //fmyJetRadius); // get local rho value
851 Double_t jeteta = jet->Eta(); // ETA of jet
852 // Double_t jetptraw = jet->Pt(); // raw pT of jet
853 Double_t jetPt, jetPtGlobal, jetPtLocal = -500; // initialize corr jet pt
855 jetPtGlobal = jet->Pt()-jet->Area()*fRhoVal; // corrected pT of jet from rho value
856 jetPtLocal = jet->Pt()-jet->Area()*fLocalRhoVal; // corrected pT of jet using Rho modulated for V2 and V3
857 Float_t dEP = -500; // initialize angle between jet and event plane
858 //Int_t ieta = -500; // initialize jet eta bin
859 //ieta = GetEtaBin(jeteta); // bin of eta
860 dEP = RelativeEPJET(jetphi,fEPV0); // angle betweeen jet and event plane
863 if(makeQAhistos) fHistJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
864 if(makeQAhistos) fHistRawJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
865 if(makeQAhistos) fHistJetPtcorrGlRho[centbin]->Fill(jetPtGlobal);
866 fHistJetPtvsdEP[centbin]->Fill(jetPt, dEP);
867 fHistJetEtaPhiPt[centbin]->Fill(jetPt,jet->Eta(),jet->Phi());
868 fHistJetPtArea[centbin]->Fill(jetPt,jet->Area());
869 if(makeextraCORRhistos) fHistJetPtNcon[centbin]->Fill(jetPt,jet->GetNumberOfConstituents());
870 if(makeextraCORRhistos) fHistJetPtNconCh[centbin]->Fill(jetPt,jet->GetNumberOfTracks());
871 if(makeextraCORRhistos) fHistJetPtNconEm[centbin]->Fill(jetPt,jet->GetNumberOfClusters());
872 if(makeextraCORRhistos) fHistJetPt[centbin]->Fill(jet->Pt()); // fill #jets vs pT histo
873 fHistJetEtaPhi->Fill(jet->Eta(),jet->Phi()); // fill jet eta-phi distribution histo
874 //fHistDeltaPtvsArea->Fill(jetPt,jet->Area());
876 // make histo's with BIAS applied
877 if (jet->MaxTrackPt()>fTrkBias){
878 if(makeBIAShistos) fHistJetPtvsdEPBias[centbin]->Fill(jetPt, dEP);
879 if(makeBIAShistos) fHistJetEtaPhiPtBias[centbin]->Fill(jetPt,jet->Eta(),jet->Phi());
880 if(makeextraCORRhistos) fHistJetPtAreaBias[centbin]->Fill(jetPt,jet->Area());
881 if(makeextraCORRhistos) fHistJetPtNconBias[centbin]->Fill(jetPt,jet->GetNumberOfConstituents());
882 if(makeextraCORRhistos) fHistJetPtNconBiasCh[centbin]->Fill(jetPt,jet->GetNumberOfTracks());
883 if(makeextraCORRhistos) fHistJetPtNconBiasEm[centbin]->Fill(jetPt,jet->GetNumberOfClusters());
886 //if(leadjet && centbin==0){
887 // if(makeextraCORRhistos) fHistJetPt[centbin+1]->Fill(jet->Pt());
889 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
890 if(makeextraCORRhistos){
891 fHistJetPtBias[centbin]->Fill(jet->Pt());
892 //if(leadjet && centbin==0) fHistJetPtBias[centbin+1]->Fill(jet->Pt());
894 } // end of MaxTrackPt>ftrkBias or maxclusterPt>fclusBias
896 // do we have trigger tracks
898 AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
899 if(TMath::Abs(jet->Phi()-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
901 } // end of check on iTT > 0
904 if(makeextraCORRhistos) fHistJetPtTT[centbin]->Fill(jet->Pt());
907 // cut on HIGHEST jet pt in event (15 GeV default)
908 if (highestjetpt>fJetPtcut) {
909 // loop over all track for an event containing a jet with a pT>fJetPtCut (15)GeV
910 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
911 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
913 AliError(Form("Couldn't get AliVtrack %d\n", iTracks));
918 if(TMath::Abs(track->Eta())>fTrkEta)
920 //fHistTrackPt->Fill(track->Pt()); // fill track pT histogram
921 if (track->Pt()<0.15) // make sure track pT > 0.15 GeV
924 // calculate and get some track parameters
925 Double_t tracketa=track->Eta(); // eta of track
926 Double_t deta=tracketa-jeteta; // dETA between track and jet
928 if (makeextraCORRhistos) {
929 ieta=GetEtaBin(deta); // bin of eta
930 if(ieta<0) continue; // double check we don't have a negative array index
933 // dPHI between jet and hadron
934 Double_t dphijh = RelativePhi(jet->Phi(), track->Phi()); // angle between jet and hadron
937 Int_t iptjet = -1; // initialize jet pT bin
938 // iptjet=GetpTjetBin(jetPt); // bin of jet pT
939 iptjet=GetpTjetBin(jet->Pt()); // bin of jet pt
940 if(iptjet<0) continue; // double check we don't have a negative array index
941 Double_t dR=sqrt(deta*deta+dphijh*dphijh); // difference of R between jet and hadron track
943 // fill some jet-hadron histo's
944 if(makeextraCORRhistos) fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt()); // fill jet-hadron dPHI--track pT distribution
945 fHistJetHEtaPhi->Fill(deta,dphijh); // fill jet-hadron eta--phi distribution
946 fHistJetHaddPHI->Fill(dphijh);
948 if(makeextraCORRhistos) fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
951 // does our max track or cluster pass the bias?
952 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
953 // set up and fill Jet-Hadron THnSparse
954 Double_t triggerEntries[9] = {fCent,jetPtLocal,track->Pt(),dR,deta,dphijh,0,leadjet,zVtx};
955 if(makeextraCORRhistos) fhnJH->Fill(triggerEntries); // fill Sparse Histo with trigger entries
958 fHistSEphieta->Fill(dphijh, deta); // single event distribution
959 if (makeextraCORRhistos) fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
961 if (makeBIAShistos) {
962 fHistJetHaddPhiBias->Fill(dphijh);
964 // in plane and out of plane histo's
965 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
967 fHistJetHaddPhiINBias->Fill(dphijh);
968 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
969 // we are OUT of PLANE
970 fHistJetHaddPhiOUTBias->Fill(dphijh);
971 }else if( dEP>(TMath::Pi()/6) && dEP<=(TMath::Pi()/3) ){
972 // we are in middle of plane
973 fHistJetHaddPhiMIDBias->Fill(dphijh);
975 } // BIAS histos switch
976 } // end of check maxtrackpt>ftrackbias or maxclusterpt>fclustbias
978 // **************************************************************************************************************
979 // *********************************** PID **********************************************************************
980 // **************************************************************************************************************
982 if(ptmax < fTrkBias) continue; // force PID to happen when max track pt > 5.0 GeV
985 // some variables for PID
986 Double_t eta, pt, dEdx, ITSsig, TOFsig, charge = -99.;
988 // nSigma of particles in TPC, TOF, and ITS
989 Double_t nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC = -99.;
990 Double_t nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF = -99.;
991 Double_t nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS = -99.;
994 // get parameters of track
995 charge = track->Charge(); // charge of track
996 eta = track->Eta(); // ETA of track
997 pt = track->Pt(); // pT of track
1000 AliVEvent *vevent=InputEvent();
1001 if (!vevent||!fPIDResponse) return kTRUE; // just return, maybe put at beginning
1003 // get PID parameters, first check if AOD/ESD
1005 AliESDtrack *trackESD = fESD->GetTrack(iTracks);
1007 // get detector signals
1008 dEdx = trackESD->GetTPCsignal();
1009 ITSsig = trackESD->GetITSsignal();
1010 TOFsig = trackESD->GetTOFsignal();
1013 nSigmaPion_TPC = fPIDResponse->NumberOfSigmasTPC(trackESD,AliPID::kPion);
1014 nSigmaKaon_TPC = fPIDResponse->NumberOfSigmasTPC(trackESD,AliPID::kKaon);
1015 nSigmaProton_TPC = fPIDResponse->NumberOfSigmasTPC(trackESD,AliPID::kProton);
1018 nSigmaPion_TOF = fPIDResponse->NumberOfSigmasTOF(trackESD,AliPID::kPion);
1019 nSigmaKaon_TOF = fPIDResponse->NumberOfSigmasTOF(trackESD,AliPID::kKaon);
1020 nSigmaProton_TOF = fPIDResponse->NumberOfSigmasTOF(trackESD,AliPID::kProton);
1023 nSigmaPion_ITS = fPIDResponse->NumberOfSigmasITS(trackESD,AliPID::kPion);
1024 nSigmaKaon_ITS = fPIDResponse->NumberOfSigmasITS(trackESD,AliPID::kKaon);
1025 nSigmaProton_ITS = fPIDResponse->NumberOfSigmasITS(trackESD,AliPID::kProton);
1029 AliAODTrack *trackAOD = fAOD->GetTrack(iTracks);
1031 // get detector signals
1032 dEdx = trackAOD->GetTPCsignal();
1033 ITSsig = trackAOD->GetITSsignal();
1034 TOFsig = trackAOD->GetTOFsignal();
1037 nSigmaPion_TPC = fPIDResponse->NumberOfSigmasTPC(trackAOD,AliPID::kPion);
1038 nSigmaKaon_TPC = fPIDResponse->NumberOfSigmasTPC(trackAOD,AliPID::kKaon);
1039 nSigmaProton_TPC = fPIDResponse->NumberOfSigmasTPC(trackAOD,AliPID::kProton);
1042 nSigmaPion_TOF = fPIDResponse->NumberOfSigmasTOF(trackAOD,AliPID::kPion);
1043 nSigmaKaon_TOF = fPIDResponse->NumberOfSigmasTOF(trackAOD,AliPID::kKaon);
1044 nSigmaProton_TOF = fPIDResponse->NumberOfSigmasTOF(trackAOD,AliPID::kProton);
1047 nSigmaPion_ITS = fPIDResponse->NumberOfSigmasITS(trackAOD,AliPID::kPion);
1048 nSigmaKaon_ITS = fPIDResponse->NumberOfSigmasITS(trackAOD,AliPID::kKaon);
1049 nSigmaProton_ITS = fPIDResponse->NumberOfSigmasITS(trackAOD,AliPID::kProton);
1052 // fill detector signal histograms
1053 if (makeQAhistos) fHistTPCdEdX->Fill(pt, dEdx);
1054 if (makeQAhistos) fHistITSsignal->Fill(pt, ITSsig);
1055 // if (makeQAhistos) fHistTOFsignal->Fill(pt, TOFsig);
1057 // Tests to PID pions, kaons, and protons, (default is undentified tracks)
1058 //Double_t nPIDtpc, nPIDits, nPIDtof = 0;
1059 Double_t nPID = -99;
1061 // check track has pT < 0.900 GeV - use TPC pid
1062 if (pt<0.900 && dEdx>0) {
1066 if (TMath::Abs(nSigmaPion_TPC)<2 && TMath::Abs(nSigmaKaon_TPC)>2 && TMath::Abs(nSigmaProton_TPC)>2 ){
1070 }else isPItpc = kFALSE;
1073 if (TMath::Abs(nSigmaKaon_TPC)<2 && TMath::Abs(nSigmaPion_TPC)>3 && TMath::Abs(nSigmaProton_TPC)>2 ){
1077 }else isKtpc = kFALSE;
1079 // PROTON check - TPC
1080 if (TMath::Abs(nSigmaProton_TPC)<2 && TMath::Abs(nSigmaPion_TPC)>3 && TMath::Abs(nSigmaKaon_TPC)>2 ){
1084 }else isPtpc = kFALSE;
1085 } // cut on track pT for TPC
1087 // check track has pT < 0.500 GeV - use ITS pid
1088 if (pt<0.500 && ITSsig>0) {
1092 if (TMath::Abs(nSigmaPion_ITS)<2 && TMath::Abs(nSigmaKaon_ITS)>2 && TMath::Abs(nSigmaProton_ITS)>2 ){
1096 }else isPIits = kFALSE;
1099 if (TMath::Abs(nSigmaKaon_ITS)<2 && TMath::Abs(nSigmaPion_ITS)>3 && TMath::Abs(nSigmaProton_ITS)>2 ){
1103 }else isKits = kFALSE;
1105 // PROTON check - ITS
1106 if (TMath::Abs(nSigmaProton_ITS)<2 && TMath::Abs(nSigmaPion_ITS)>3 && TMath::Abs(nSigmaKaon_ITS)>2 ){
1110 }else isPits = kFALSE;
1111 } // cut on track pT for ITS
1113 // check track has 0.900 GeV < pT < 2.500 GeV - use TOF pid
1114 if (pt>0.900 && pt<2.500 && TOFsig>0) {
1118 if (TMath::Abs(nSigmaPion_TOF)<2 && TMath::Abs(nSigmaKaon_TOF)>2 && TMath::Abs(nSigmaProton_TOF)>2 ){
1122 }else isPItof = kFALSE;
1125 if (TMath::Abs(nSigmaKaon_TOF)<2 && TMath::Abs(nSigmaPion_TOF)>3 && TMath::Abs(nSigmaProton_TOF)>2 ){
1129 }else isKtof = kFALSE;
1131 // PROTON check - TOF
1132 if (TMath::Abs(nSigmaProton_TOF)<2 && TMath::Abs(nSigmaPion_TOF)>3 && TMath::Abs(nSigmaKaon_TOF)>2 ){
1136 }else isPtof = kFALSE;
1137 } // cut on track pT for TOF
1139 if (nPIDtpc == 4) nPID = -0.5;
1140 if (nPIDits == 4) nPID = 3.5;
1141 if (nPIDtof == 4) nPID = 7.5;
1142 fHistPID->Fill(nPID);
1144 // PID sparse getting filled
1145 Double_t nontrig_tracks_Entries[23] = {fCent,jetPtLocal,pt,charge,eta,deta,dphijh,leadjet,zVtx,//EovP,fClsE,
1147 nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC, //nSig in TPC
1148 nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS, //nSig in ITS
1149 nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF, //nSig in TOF
1150 nPIDtpc, nPIDits, nPIDtof //PID label for each detector
1151 }; //array for PID sparse
1152 fhnPID->Fill(nontrig_tracks_Entries); // fill Sparse histo of PID tracks
1153 } // end of doPID check
1156 Int_t itrackpt = -500; // initialize track pT bin
1157 itrackpt = GetpTtrackBin(track->Pt());
1159 // all tracks: jet hadron correlations in hadron pt bins
1160 fHistJetHadbindPhi[itrackpt]->Fill(dphijh);
1162 // in plane and out of plane jet-hadron histo's
1163 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
1165 fHistJetHaddPhiINcent[centbin]->Fill(dphijh);
1166 fHistJetHaddPhiIN->Fill(dphijh);
1167 fHistJetHadbindPhiIN[itrackpt]->Fill(dphijh);
1168 //fHistJetHaddPhiPtcentbinIN[itrackpt][centbin]->Fill(dphijh);
1169 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
1170 // we are OUT of PLANE
1171 fHistJetHaddPhiOUTcent[centbin]->Fill(dphijh);
1172 fHistJetHaddPhiOUT->Fill(dphijh);
1173 fHistJetHadbindPhiOUT[itrackpt]->Fill(dphijh);
1174 //fHistJetHaddPhiPtcentbinOUT[itrackpt][centbin]->Fill(dphijh);
1175 }else if( dEP>(TMath::Pi()/6) && dEP<=(TMath::Pi()/3) ){
1176 // we are in the middle of plane
1177 fHistJetHaddPhiMIDcent[centbin]->Fill(dphijh);
1178 fHistJetHaddPhiMID->Fill(dphijh);
1179 fHistJetHadbindPhiMID[itrackpt]->Fill(dphijh);
1181 } // loop over tracks found in event with highest JET pT > 10.0 GeV (change)
1185 // ***************************************************************************************************************
1186 // ******************************** Event MIXING *****************************************************************
1187 TObjArray* tracksClone = CloneAndReduceTrackList(tracks); // TEST
1189 //Prepare to do event mixing
1190 if(fDoEventMixing>0){
1193 // 1. First get an event pool corresponding in mult (cent) and
1194 // zvertex to the current event. Once initialized, the pool
1195 // should contain nMix (reduced) events. This routine does not
1196 // pre-scan the chain. The first several events of every chain
1197 // will be skipped until the needed pools are filled to the
1198 // specified depth. If the pool categories are not too rare, this
1199 // should not be a problem. If they are rare, you could lose
1202 // 2. Collect the whole pool's content of tracks into one TObjArray
1203 // (bgTracks), which is effectively a single background super-event.
1205 // 3. The reduced and bgTracks arrays must both be passed into
1206 // FillCorrelations(). Also nMix should be passed in, so a weight
1207 // of 1./nMix can be applied.
1209 // mix jets from triggered events with tracks from MB events
1210 // get the trigger bit
1211 // need to change trigger bits between different runs
1212 //T UInt_t trigger = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1213 //T if (trigger==0) return kTRUE; // return
1215 //Double_t Ntrks=(Double_t)Ntracks*1.0;
1216 //cout<<"Test.. Ntrks: "<<fPoolMgr->GetEventPool(Ntrks);
1218 AliEventPool* pool = fPoolMgr->GetEventPool(fCent, zVtx); // for PbPb? fcent
1219 //AliEventPool* pool = fPoolMgr->GetEventPool(Ntrks, zVtx); // for pp
1222 AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCent, zVtx));
1223 //AliFatal(Form("No pool found for multiplicity = %f, zVtx = %f", Ntrks, zVtx));
1227 // use only jets from EMCal-triggered events (for lhc11a use AliVEvent::kEMC1)
1228 /// if (trigger & AliVEvent::kEMC1) {
1229 //T if (trigger & AliVEvent::kEMCEJE) { // TEST
1230 //check for a trigger jet
1231 // fmixingtrack/10 ??
1232 if (pool->IsReady() || pool->NTracksInPool() > fMixingTracks / 100 /*100*/ || pool->GetCurrentNEvents() >= 5) {
1233 // loop over jets (passing cuts?)
1234 for (Int_t ijet = 0; ijet < Njets; ijet++) {
1236 if (ijet==ijethi) leadjet=1;
1239 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
1242 // (should probably be higher..., but makes a cut on jet pT)
1243 if (jet->Pt()<0.1) continue;
1244 if (!AcceptMyJet(jet)) continue;
1246 Int_t nMix = pool->GetCurrentNEvents(); // how many particles in pool to mix
1248 // Fill for biased jet triggers only
1249 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)) {
1250 // Fill mixed-event histos here
1251 for (Int_t jMix=0; jMix<nMix; jMix++) {
1252 TObjArray* bgTracks = pool->GetEvent(jMix);
1253 const Int_t Nbgtrks = bgTracks->GetEntries();
1254 for(Int_t ibg=0; ibg<Nbgtrks; ibg++) {
1255 AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
1257 if(TMath::Abs(part->Eta())>0.9) continue;
1258 if(part->Pt()<0.15) continue;
1260 Double_t DEta = part->Eta()-jet->Eta(); // difference in eta
1261 Double_t DPhi = RelativePhi(jet->Phi(),part->Phi()); // difference in phi
1262 Float_t dEP = RelativeEPJET(jet->Phi(),fEPV0); // difference between jet and EP
1263 Double_t mixcharge = part->Charge();
1265 //Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta); // difference in R
1266 //T if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
1267 //T if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
1269 Double_t triggerEntries[10] = {fCent,jet->Pt(),part->Pt(),DEta,DPhi,dEP,zVtx, mixcharge,0,leadjet}; //array for ME sparse
1270 fhnMixedEvents->Fill(triggerEntries,1./nMix); // fill Sparse histo of mixed events
1271 fHistMEphieta->Fill(DPhi,DEta, 1./nMix);
1273 } // end of background track loop
1274 } // end of filling mixed-event histo's
1275 } // end of check for biased jet triggers
1276 } // end of jet loop
1277 } // end of check for triggered jet
1278 // } //end EMC triggered loop
1280 // use only tracks from MB events (for lhc11a use AliVEvent::kMB)
1281 /// if (trigger & AliVEvent::kMB) {
1282 //T if (trigger & AliVEvent::kAnyINT){ // test
1283 // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
1284 //T TObjArray* tracksClone = CloneAndReduceTrackList(tracks);
1286 // update pool if jet in event or not
1287 pool->UpdatePool(tracksClone);
1288 /// } // check on track from MB events
1289 } // end of event mixing
1291 // print some stats on the event
1295 cout<<"Event #: "<<event<<" Jet Radius: "<<fJetRad<<" Constituent Pt Cut: "<<fConstituentCut<<endl;
1296 cout<<"# of jets: "<<Njets<<" Highest jet pt: "<<highestjetpt<<endl;
1297 cout<<"# tracks: "<<Ntracks<<" Highest track pt: "<<ptmax<<endl;
1298 cout<<" =============================================== "<<endl;
1301 return kTRUE; // used when the function is of type bool
1304 //________________________________________________________________________
1305 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetCentBin(Double_t cent) const
1306 { // Get centrality bin.
1308 if (cent>=0 && cent<10) centbin = 0;
1309 else if (cent>=10 && cent<20) centbin = 1;
1310 else if (cent>=20 && cent<30) centbin = 2;
1311 else if (cent>=30 && cent<40) centbin = 3;
1312 else if (cent>=40 && cent<50) centbin = 4;
1313 else if (cent>=50 && cent<90) centbin = 5;
1318 //________________________________________________________________________
1319 Float_t AliAnalysisTaskEmcalJetHadEPpid::RelativePhi(Double_t mphi,Double_t vphi) const
1320 { // function to calculate relative PHI
1321 double dphi = mphi-vphi;
1323 // set dphi to operate on adjusted scale
1324 if(dphi<-0.5*TMath::Pi()) dphi+=2.*TMath::Pi();
1325 if(dphi>3./2.*TMath::Pi()) dphi-=2.*TMath::Pi();
1328 if( dphi < -1.*TMath::Pi()/2 || dphi > 3.*TMath::Pi()/2 )
1329 AliWarning(Form("%s: dPHI not in range [-0.5*Pi, 1.5*Pi]!", GetName()));
1331 return dphi; // dphi in [-0.5Pi, 1.5Pi]
1336 //_________________________________________________________________________
1337 Float_t AliAnalysisTaskEmcalJetHadEPpid:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
1338 { // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
1339 Double_t dphi = (EPAng - jetAng);
1341 // ran into trouble with a few dEP<-Pi so trying this...
1342 if( dphi<-1*TMath::Pi() ){
1343 dphi = dphi + 1*TMath::Pi();
1344 } // this assumes we are doing full jets currently
1346 if( (dphi>0) && (dphi<1*TMath::Pi()/2) ){
1347 // Do nothing! we are in quadrant 1
1348 }else if( (dphi>1*TMath::Pi()/2) && (dphi<1*TMath::Pi()) ){
1349 dphi = 1*TMath::Pi() - dphi;
1350 }else if( (dphi<0) && (dphi>-1*TMath::Pi()/2) ){
1352 }else if( (dphi<-1*TMath::Pi()/2) && (dphi>-1*TMath::Pi()) ){
1353 dphi = dphi + 1*TMath::Pi();
1357 if( dphi < 0 || dphi > TMath::Pi()/2 )
1358 AliWarning(Form("%s: dPHI not in range [0, 0.5*Pi]!", GetName()));
1360 return dphi; // dphi in [0, Pi/2]
1363 //Int_t ieta=GetEtaBin(deta);
1364 //________________________________________________________________________
1365 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetEtaBin(Double_t eta) const
1367 // Get eta bin for histos.
1369 if (TMath::Abs(eta)<=0.4) etabin = 0;
1370 else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8) etabin = 1;
1371 else if (TMath::Abs(eta)>=0.8) etabin = 2;
1374 } // end of get-eta-bin
1376 //________________________________________________________________________
1377 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetpTjetBin(Double_t pt) const
1379 // Get jet pt bin for histos.
1381 if (pt>=15 && pt<20) ptbin = 0;
1382 else if (pt>=20 && pt<25) ptbin = 1;
1383 else if (pt>=25 && pt<40) ptbin = 2;
1384 else if (pt>=40 && pt<60) ptbin = 3;
1385 else if (pt>=60) ptbin = 4;
1388 } // end of get-jet-pt-bin
1390 //________________________________________________________________________
1391 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetpTtrackBin(Double_t pt) const
1393 // May need to update bins for future runs... (testing locally)
1395 // Get track pt bin for histos.
1397 if (pt < 0.5) ptbin = 0;
1398 else if (pt>=0.5 && pt<1.0) ptbin = 1;
1399 else if (pt>=1.0 && pt<1.5) ptbin = 2;
1400 else if (pt>=1.5 && pt<2.0) ptbin = 3;
1401 else if (pt>=2.0 && pt<2.5) ptbin = 4;
1402 else if (pt>=2.5 && pt<3.0) ptbin = 5;
1403 else if (pt>=3.0 && pt<4.0) ptbin = 6;
1404 else if (pt>=4.0 && pt<5.0) ptbin = 7;
1405 else if (pt>=5.0) ptbin = 8;
1408 } // end of get-jet-pt-bin
1411 //___________________________________________________________________________
1412 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetzVertexBin(Double_t zVtx) const
1414 // get z-vertex bin for histo.
1416 if (zVtx>=-10 && zVtx<-8) zVbin = 0;
1417 else if (zVtx>=-8 && zVtx<-6) zVbin = 1;
1418 else if (zVtx>=-6 && zVtx<-4) zVbin = 2;
1419 else if (zVtx>=-4 && zVtx<-2) zVbin = 3;
1420 else if (zVtx>=-2 && zVtx<0) zVbin = 4;
1421 else if (zVtx>=0 && zVtx<2) zVbin = 5;
1422 else if (zVtx>=2 && zVtx<4) zVbin = 6;
1423 else if (zVtx>=4 && zVtx<6) zVbin = 7;
1424 else if (zVtx>=6 && zVtx<8) zVbin = 8;
1425 else if (zVtx>=8 && zVtx<10) zVbin = 9;
1429 } // end of get z-vertex bin
1431 //______________________________________________________________________
1432 THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseF(const char* name, UInt_t entries)
1434 // generate new THnSparseF, axes are defined in GetDimParams()
1436 UInt_t tmp = entries;
1439 tmp = tmp &~ -tmp; // clear lowest bit
1442 TString hnTitle(name);
1443 const Int_t dim = count;
1450 while(c<dim && i<32){
1454 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
1455 hnTitle += Form(";%s",label.Data());
1463 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1464 } // end of NewTHnSparseF
1466 void AliAnalysisTaskEmcalJetHadEPpid::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1468 // stores label and binning of axis for THnSparse
1469 const Double_t pi = TMath::Pi();
1474 label = "V0 centrality (%)";
1481 label = "Corrected Jet p_{T}";
1488 label = "Track p_{T}";
1495 label = "Relative Eta";
1502 label = "Relative Phi";
1509 label = "Relative angle of Jet and Reaction Plane";
1523 label = "track charge";
1529 case 8: // need to update
1530 label = "leading track";
1536 case 9: // need to update
1537 label = "leading jet";
1543 } // end of getting dim-params
1545 //_________________________________________________
1546 // From CF event mixing code PhiCorrelations
1547 TObjArray* AliAnalysisTaskEmcalJetHadEPpid::CloneAndReduceTrackList(TObjArray* tracks)
1549 // clones a track list by using AliPicoTrack which uses much less memory (used for event mixing)
1550 TObjArray* tracksClone = new TObjArray;
1551 tracksClone->SetOwner(kTRUE);
1554 Int_t nTrax = fESD->GetNumberOfTracks();
1555 //cout << "nTrax " << nTrax <<endl;
1557 for (Int_t i = 0; i < nTrax; ++i)
1559 AliESDtrack* esdtrack = fESD->GetTrack(i);
1562 AliError(Form("Couldn't get ESD track %d\n", i));
1566 AliESDtrack *particle = GetAcceptTrack(esdtrack);
1567 if(!particle) continue;
1569 cout << "RM Hybrid track : " << i << " " << particle->Pt() << endl;
1572 //cout << "nEntries " << tracks->GetEntriesFast() <<endl;
1573 for (Int_t i=0; i<tracks->GetEntriesFast(); i++) {
1574 AliVParticle* particle = (AliVParticle*) tracks->At(i);
1575 if(TMath::Abs(particle->Eta())>fTrkEta) continue;
1576 if(particle->Pt()<0.15)continue;
1580 Double_t trackpt=particle->Pt(); // track pT
1583 trklabel=particle->GetLabel();
1584 //cout << "TRACK_LABEL: " << particle->GetLabel()<<endl;
1587 if(trackpt<0.5) hadbin=0;
1588 else if(trackpt<1) hadbin=1;
1589 else if(trackpt<2) hadbin=2;
1590 else if(trackpt<3) hadbin=3;
1591 else if(trackpt<5) hadbin=4;
1592 else if(trackpt<8) hadbin=5;
1593 else if(trackpt<20) hadbin=6;
1597 if(hadbin>-1 && trklabel>-1 && trklabel <3) fHistTrackEtaPhi[trklabel][hadbin]->Fill(particle->Eta(),particle->Phi());
1598 if(hadbin>-1) fHistTrackEtaPhi[3][hadbin]->Fill(particle->Eta(),particle->Phi());
1600 if(hadbin>-1) fHistTrackEtaPhi[hadbin]->Fill(particle->Eta(),particle->Phi()); // TEST
1603 tracksClone->Add(new AliPicoTrack(particle->Pt(), particle->Eta(), particle->Phi(), particle->Charge(), 0, 0, 0, 0));
1604 } // end of looping through tracks
1609 //____________________________________________________________________________________________
1610 THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseFPID(const char* name, UInt_t entries)
1612 // generate new THnSparseF PID, axes are defined in GetDimParams()
1614 UInt_t tmp = entries;
1617 tmp = tmp &~ -tmp; // clear lowest bit
1620 TString hnTitle(name);
1621 const Int_t dim = count;
1628 while(c<dim && i<32){
1632 GetDimParamsPID(i, label, nbins[c], xmin[c], xmax[c]);
1633 hnTitle += Form(";%s",label.Data());
1641 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1642 } // end of NewTHnSparseF PID
1644 //________________________________________________________________________________
1645 void AliAnalysisTaskEmcalJetHadEPpid::GetDimParamsPID(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1647 // stores label and binning of axis for THnSparse
1648 const Double_t pi = TMath::Pi();
1653 label = "V0 centrality (%)";
1660 label = "Corrected Jet p_{T}";
1667 label = "Track p_{T}";
1674 label = "Charge of Track";
1681 label = "Track Eta";
1688 label = "Relative Eta of Track and Jet";
1695 label = "Relative Phi of Track and Jet";
1702 label = "leading jet";
1716 label = "Relative angle: Jet and Reaction Plane";
1722 case 10: // don't need
1726 xmax = 100.; //250.;
1730 label = "N-Sigma of pions in TPC";
1737 label = "N-Sigma of protons in TPC";
1744 label = "N-Sigma of kaons in TPC";
1751 label = "N-Sigma of pions in ITS";
1753 xmin = -10.0; //-5.;
1758 label = "N-Sigma of protons in ITS";
1765 label = "N-Sigma of kaons in ITS";
1772 label = "N-Sigma of pions in TOF";
1779 label = "N-Sigma of protons in TOF";
1786 label = "N-Sigma of kaons in TOF";
1793 label = "TPC PID determination";
1800 label = "ITS PID determination";
1807 label = "TOF PID determination";
1814 } // end of get dimension parameters PID
1816 void AliAnalysisTaskEmcalJetHadEPpid::Terminate(Option_t *) {
1817 cout<<"#########################"<<endl;
1818 cout<<"#### DONE RUNNING!!! ####"<<endl;
1819 cout<<"#########################"<<endl;
1820 } // end of terminate
1822 //________________________________________________________________________
1823 Int_t AliAnalysisTaskEmcalJetHadEPpid::AcceptMyJet(AliEmcalJet *jet) {
1824 //applies all jet cuts except pt
1825 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax)) return 0;
1826 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax)) return 0;
1827 if (jet->Area()<fAreacut) return 0;
1828 // prevents 0 area jets from sneaking by when area cut == 0
1829 if (jet->Area()==0) return 0;
1830 //exclude jets with extremely high pt tracks which are likely misreconstructed
1831 if(jet->MaxTrackPt()>100) return 0;
1832 //prevents 0 area jets from sneaking by when area cut == 0
1833 if (jet->Area()==0) return 0;
1834 //exclude jets with extremely high pt tracks which are likely misreconstructed
1835 if(jet->MaxTrackPt()>100) return 0;
1837 //passed all above cuts
1841 //void AliAnalysisTaskEmcalJetHadEPpid::FillAnalysisSummaryHistogram() const
1842 void AliAnalysisTaskEmcalJetHadEPpid::SetfHistPIDcounterLabels(TH1* h) const
1844 // fill the analysis summary histrogram, saves all relevant analysis settigns
1845 h->GetXaxis()->SetBinLabel(1, "TPC: Unidentified"); // -0.5
1846 h->GetXaxis()->SetBinLabel(2, "TPC: Pion"); // 0.5
1847 h->GetXaxis()->SetBinLabel(3, "TPC: Kaon"); // 1.5
1848 h->GetXaxis()->SetBinLabel(4, "TPC: Proton"); // 2.5
1849 h->GetXaxis()->SetBinLabel(5, "ITS: Unidentified"); // 3.5
1850 h->GetXaxis()->SetBinLabel(6, "ITS: Pion"); // 4.5
1851 h->GetXaxis()->SetBinLabel(7, "ITS: Kaon"); // 5.5
1852 h->GetXaxis()->SetBinLabel(8, "ITS: Proton"); // 6.5
1853 h->GetXaxis()->SetBinLabel(9, "TOF: Unidentified"); // 7.5
1854 h->GetXaxis()->SetBinLabel(10, "TOF: Pion"); // 8.5
1855 h->GetXaxis()->SetBinLabel(11, "TOF: Kaon"); // 9.5
1856 h->GetXaxis()->SetBinLabel(12, "TOF: Proton"); // 10.5