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"
50 #include "AliESDtrackCuts.h"
53 #include "AliPIDResponse.h"
54 #include "AliTPCPIDResponse.h"
55 #include "AliESDpid.h"
57 // magnetic field includes
58 #include "TGeoGlobalMagField.h"
62 #include "AliJetContainer.h"
63 #include "AliParticleContainer.h"
64 #include "AliClusterContainer.h"
69 ClassImp(AliAnalysisTaskEmcalJetHadEPpid)
71 //________________________________________________________________________
72 AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid() :
73 AliAnalysisTaskEmcalJet("correlations",kFALSE),
74 fPhimin(-10), fPhimax(10),
75 fEtamin(-0.9), fEtamax(0.9),
76 fAreacut(0.0), fTrkBias(5), fClusBias(5), fTrkEta(0.9),
77 fJetPtcut(15.0), fJetRad(0.4), fConstituentCut(0.15),
79 fDoEventMixing(0), fMixingTracks(50000), fNMIXtracks(5000), fNMIXevents(5),
80 fTriggerEventType(AliVEvent::kAny), fMixingEventType(AliVEvent::kAny),
81 doPlotGlobalRho(0), doVariableBinning(0), dovarbinTHnSparse(0),
82 makeQAhistos(0), makeBIAShistos(0), makeextraCORRhistos(0), makeoldJEThadhistos(0),
83 allpidAXIS(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
85 doFlavourJetAnalysis(0), fJetFlavTag(-99),
88 fTracksName(""), fTracksNameME(""), fJetsName(""),
90 isPItpc(0), isKtpc(0), isPtpc(0), // pid TPC
91 isPIits(0), isKits(0), isPits(0), // pid ITS
92 isPItof(0), isKtof(0), isPtof(0), // pid TOF
94 fPIDResponse(0x0), fTPCResponse(),
95 fESD(0), fAOD(0), fVevent(0),
96 fHistEventQA(0), fHistEventSelectionQA(0),
97 fHistCentZvertGA(0), fHistCentZvertJE(0), fHistCentZvertMB(0), fHistCentZvertAny(0),
98 fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
99 fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
100 fHistZvtx(0), fHistMult(0),
101 fHistJetPhi(0), fHistTrackPhi(0),
102 fHistLocalRhoJetpt(0),
103 fHistJetHaddPhiIN(0), fHistJetHaddPhiOUT(0), fHistJetHaddPhiMID(0),
104 fHistJetHaddPhiBias(0), fHistJetHaddPhiINBias(0), fHistJetHaddPhiOUTBias(0), fHistJetHaddPhiMIDBias(0),
106 fHistTrackPtallcent(0),
107 fHistJetEtaPhi(0), fHistJetHEtaPhi(0),
108 fHistSEphieta(0), fHistMEphieta(0),
111 fhnPID(0x0), fhnMixedEvents(0x0), fhnJH(0x0), fhnCorr(0x0),
112 fJetsCont(0), fTracksCont(0), fCaloClustersCont(0),
113 fContainerAllJets(0), fContainerPIDJets(1)
115 // Default Constructor
116 for(Int_t ilab=0; ilab<4; ilab++){
117 for(Int_t ipta=0; ipta<7; ipta++){
118 //fHistTrackEtaPhi[ilab][ipta]=0; // keep out for now
119 } // end of pt-associated loop
122 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
123 fHistJetHadbindPhi[itrackpt]=0;
124 fHistJetHadbindPhiIN[itrackpt]=0;
125 fHistJetHadbindPhiMID[itrackpt]=0;
126 fHistJetHadbindPhiOUT[itrackpt]=0;
127 } // end of trackpt bin loop
129 for(Int_t icent = 0; icent<6; ++icent){
130 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
131 for(Int_t ieta = 0; ieta<3; ++ieta){
132 fHistJetH[icent][iptjet][ieta]=0;
133 fHistJetHBias[icent][iptjet][ieta]=0;
134 fHistJetHTT[icent][iptjet][ieta]=0;
136 } // end of pt-jet loop
137 } // end of centrality loop
139 // centrality dependent histo's
140 for (Int_t i = 0;i<6;++i){
142 fHistJetPtBias[i] = 0;
144 fHistAreavsRawPt[i] = 0;
145 fHistJetPtvsTrackPt[i] = 0;
146 fHistRawJetPtvsTrackPt[i] = 0;
152 fHistJetPtcorrGlRho[i] = 0;
153 fHistJetPtvsdEP[i] = 0;
154 fHistJetPtvsdEPBias[i] = 0;
155 fHistRhovsdEP[i] = 0;
156 fHistJetEtaPhiPt[i] = 0;
157 fHistJetEtaPhiPtBias[i] = 0;
158 fHistJetPtArea[i] = 0;
159 fHistJetPtAreaBias[i] = 0;
160 fHistJetPtNcon[i] = 0;
161 fHistJetPtNconBias[i] = 0;
162 fHistJetPtNconCh[i] = 0;
163 fHistJetPtNconBiasCh[i] = 0;
164 fHistJetPtNconEm[i] = 0;
165 fHistJetPtNconBiasEm[i] = 0;
166 fHistJetHaddPhiINcent[i] = 0;
167 fHistJetHaddPhiOUTcent[i] = 0;
168 fHistJetHaddPhiMIDcent[i] = 0;
171 SetMakeGeneralHistograms(kTRUE);
175 //________________________________________________________________________
176 AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid(const char *name) :
177 AliAnalysisTaskEmcalJet(name,kTRUE),
178 fPhimin(-10), fPhimax(10),
179 fEtamin(-0.9), fEtamax(0.9),
180 fAreacut(0.0), fTrkBias(5), fClusBias(5), fTrkEta(0.9),
181 fJetPtcut(15.0), fJetRad(0.4), fConstituentCut(0.15),
183 fDoEventMixing(0), fMixingTracks(50000), fNMIXtracks(5000), fNMIXevents(5),
184 fTriggerEventType(AliVEvent::kAny), fMixingEventType(AliVEvent::kAny),
185 doPlotGlobalRho(0), doVariableBinning(0), dovarbinTHnSparse(0),
186 makeQAhistos(0), makeBIAShistos(0), makeextraCORRhistos(0), makeoldJEThadhistos(0),
187 allpidAXIS(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
189 doFlavourJetAnalysis(0), fJetFlavTag(-99),
192 fTracksName(""), fTracksNameME(""), fJetsName(""),
194 isPItpc(0), isKtpc(0), isPtpc(0), // pid TPC
195 isPIits(0), isKits(0), isPits(0), // pid ITS
196 isPItof(0), isKtof(0), isPtof(0), // pid TOF
198 fPIDResponse(0x0), fTPCResponse(),
199 fESD(0), fAOD(0), fVevent(0),
200 fHistEventQA(0), fHistEventSelectionQA(0),
201 fHistCentZvertGA(0), fHistCentZvertJE(0), fHistCentZvertMB(0), fHistCentZvertAny(0),
202 fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
203 fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
204 fHistZvtx(0), fHistMult(0),
205 fHistJetPhi(0), fHistTrackPhi(0),
206 fHistLocalRhoJetpt(0),
207 fHistJetHaddPhiIN(0), fHistJetHaddPhiOUT(0), fHistJetHaddPhiMID(0),
208 fHistJetHaddPhiBias(0), fHistJetHaddPhiINBias(0), fHistJetHaddPhiOUTBias(0), fHistJetHaddPhiMIDBias(0),
210 fHistTrackPtallcent(0),
211 fHistJetEtaPhi(0), fHistJetHEtaPhi(0),
212 fHistSEphieta(0), fHistMEphieta(0),
215 fhnPID(0x0), fhnMixedEvents(0x0), fhnJH(0x0), fhnCorr(0x0),
216 fJetsCont(0), fTracksCont(0), fCaloClustersCont(0),
217 fContainerAllJets(0), fContainerPIDJets(1)
219 // Default Constructor
220 for(Int_t ilab=0; ilab<4; ilab++){
221 for(Int_t ipta=0; ipta<7; ipta++){
222 //fHistTrackEtaPhi[ilab][ipta]=0; //keep out for now
223 } // end of pt-associated loop
226 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
227 fHistJetHadbindPhi[itrackpt]=0;
228 fHistJetHadbindPhiIN[itrackpt]=0;
229 fHistJetHadbindPhiMID[itrackpt]=0;
230 fHistJetHadbindPhiOUT[itrackpt]=0;
231 } // end of trackpt bin loop
233 for(Int_t icent = 0; icent<6; ++icent){
234 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
235 for(Int_t ieta = 0; ieta<3; ++ieta){
236 fHistJetH[icent][iptjet][ieta]=0;
237 fHistJetHBias[icent][iptjet][ieta]=0;
238 fHistJetHTT[icent][iptjet][ieta]=0;
240 } // end of pt-jet loop
241 } // end of centrality loop
243 // centrality dependent histo's
244 for (Int_t i = 0;i<6;++i){
246 fHistJetPtBias[i] = 0;
248 fHistAreavsRawPt[i] = 0;
249 fHistJetPtvsTrackPt[i] = 0;
250 fHistRawJetPtvsTrackPt[i] = 0;
256 fHistJetPtcorrGlRho[i] = 0;
257 fHistJetPtvsdEP[i] = 0;
258 fHistJetPtvsdEPBias[i] = 0;
259 fHistRhovsdEP[i] = 0;
260 fHistJetEtaPhiPt[i] = 0;
261 fHistJetEtaPhiPtBias[i] = 0;
262 fHistJetPtArea[i] = 0;
263 fHistJetPtAreaBias[i] = 0;
264 fHistJetPtNcon[i] = 0;
265 fHistJetPtNconBias[i] = 0;
266 fHistJetPtNconCh[i] = 0;
267 fHistJetPtNconBiasCh[i] = 0;
268 fHistJetPtNconEm[i] = 0;
269 fHistJetPtNconBiasEm[i] = 0;
270 fHistJetHaddPhiINcent[i] = 0;
271 fHistJetHaddPhiOUTcent[i] = 0;
272 fHistJetHaddPhiMIDcent[i] = 0;
275 SetMakeGeneralHistograms(kTRUE);
279 //_______________________________________________________________________
280 AliAnalysisTaskEmcalJetHadEPpid::~AliAnalysisTaskEmcalJetHadEPpid()
289 //________________________________________________________________________
290 void AliAnalysisTaskEmcalJetHadEPpid::UserCreateOutputObjects()
291 { // This is called ONCE!
292 if (!fCreateHisto) return;
293 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
294 OpenFile(1); // do I need the 1?
296 // char array for naming histograms
300 // strings for titles
304 // create histograms that arn't array
305 fHistNjetvsCent = new TH2F("NjetvsCent", "NjetvsCent", 100, 0.0, 100.0, 100, 0, 100);
306 fHistJetHaddPHI = new TH1F("fHistJetHaddPHI", "Jet-Hadron #Delta#varphi", 128,-0.5*TMath::Pi(),1.5*TMath::Pi());
307 fHistJetHaddPhiIN = new TH1F("fHistJetHaddPhiIN","Jet-Hadron #Delta#varphi IN PLANE", 128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
308 fHistJetHaddPhiOUT = new TH1F("fHistJetHaddPhiOUT","Jet-Hadron #Delta#varphi OUT PLANE",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
309 fHistJetHaddPhiMID = new TH1F("fHistJetHaddPhiMID","Jet-Hadron #Delta#varphi MIDDLE of PLANE",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
310 fHistLocalRhoJetpt = new TH1F("fHistLocalRhoJetpt","Local Rho corrected Jet p_{T}", 50, -50, 200);
312 // Centrality and Zvertex distribution for various triggers - Event Mixing QA
313 fHistCentZvertGA = new TH2F("fHistCentZvertGA", "Centrality - Z-vertex distribution for GA trigger", 20, 0, 100, 10, -10, 10);
314 fOutput->Add(fHistCentZvertGA);
315 fHistCentZvertJE = new TH2F("fHistCentZvertJE", "Centrality - Z-vertex distribution for JE trigger", 20, 0, 100, 10, -10, 10);
316 fOutput->Add(fHistCentZvertJE);
317 fHistCentZvertMB = new TH2F("fHistCentZvertMB", "Centrality - Z-vertex distribution for MB trigger", 20, 0, 100, 10, -10, 10);
318 fOutput->Add(fHistCentZvertMB);
319 fHistCentZvertAny = new TH2F("fHistCentZvertAny", "Centrality - Z-vertex distribution for kAny trigger", 20, 0, 100, 10, -10, 10);
320 fOutput->Add(fHistCentZvertAny);
323 fHistEventQA = new TH1F("fHistEventQA", "Event Counter at checkpoints in code", 20, 0.5, 20.5);
324 SetfHistQAcounterLabels(fHistEventQA);
325 fOutput->Add(fHistEventQA);
327 // Event Selection QA histo
328 fHistEventSelectionQA = new TH1F("fHistEventSelectionQA", "Trigger Selection Counter", 20, 0.5, 20.5);
329 SetfHistEvtSelQALabels(fHistEventSelectionQA);
330 fOutput->Add(fHistEventSelectionQA);
332 // add to output lists
333 fOutput->Add(fHistNjetvsCent);
334 fOutput->Add(fHistJetHaddPHI);
335 fOutput->Add(fHistJetHaddPhiIN);
336 fOutput->Add(fHistJetHaddPhiOUT);
337 fOutput->Add(fHistJetHaddPhiMID);
338 fOutput->Add(fHistLocalRhoJetpt);
340 // create histo's used for general QA
342 fHistTPCdEdX = new TH2F("TPCdEdX", "TPCdEdX", 2000, 0.0, 100.0, 500, 0, 500);
343 fHistITSsignal = new TH2F("ITSsignal", "ITSsignal", 2000, 0.0, 100.0, 500, 0, 500);
344 // fHistTOFsignal = new TH2F("TOFsignal", "TOFsignal", 2000, 0.0, 100.0, 500, 0, 500);
345 fHistCentrality = new TH1F("fHistCentrality","centrality",100,0,100);
346 fHistZvtx = new TH1F("fHistZvertex","z vertex",60,-30,30);
347 fHistJetPhi = new TH1F("fHistJetPhi", "Jet #phi Distribution", 128, -2.0*TMath::Pi(), 2.0*TMath::Pi());
348 fHistTrackPhi = new TH1F("fHistTrackPhi", "Track #phi Distribution", 128, -2.0*TMath::Pi(), 2.0*TMath::Pi());
349 fHistRhovsCent = new TH2F("RhovsCent", "RhovsCent", 100, 0.0, 100.0, 500, 0, 500);
350 fHistTrackPtallcent = new TH1F("fHistTrackPtallcent", "p_{T} distribution", 1000, 0.0, 100.0);
351 fHistJetEtaPhi = new TH2F("fHistJetEtaPhi","Jet #eta-#phi",512,-1.8,1.8,512,-3.2,3.2);
352 fHistJetHEtaPhi = new TH2F("fHistJetHEtaPhi","Jet-Hadron #Delta#eta-#Delta#phi", 72, -1.8, 1.8, 72, -1.6, 4.8);
353 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
354 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
356 // add to output list
357 fOutput->Add(fHistTPCdEdX);
358 fOutput->Add(fHistITSsignal);
359 //fOutput->Add(fHistTOFsignal);
360 fOutput->Add(fHistCentrality);
361 fOutput->Add(fHistZvtx);
362 fOutput->Add(fHistJetPhi);
363 fOutput->Add(fHistTrackPhi);
364 //fOutput->Add(fHistTrackEtaPhi);
365 fOutput->Add(fHistTrackPtallcent);
366 fOutput->Add(fHistJetEtaPhi);
367 fOutput->Add(fHistJetHEtaPhi);
368 fOutput->Add(fHistSEphieta);
369 fOutput->Add(fHistMEphieta);
371 //for(Int_t ipta=0; ipta<7; ++ipta){
372 // for(Int_t ilab=0; ilab<4; ++ilab){
373 // snprintf(name, nchar, "fHistTrackEtaPhi_%i_%i", ilab,ipta);
374 // fHistTrackEtaPhi[ilab][ipta] = new TH2F(name,name,400,-1,1,640,0.0,2.*TMath::Pi());
375 // fOutput->Add(fHistTrackEtaPhi[ilab][ipta]);
376 // } // end of lab loop
377 //} // end of pt-associated loop
379 for (Int_t i = 0;i<6;++i){
380 name1 = TString(Form("EP0_%i",i));
381 title1 = TString(Form("EP VZero cent bin %i",i));
382 fHistEP0[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
383 fOutput->Add(fHistEP0[i]);
385 name1 = TString(Form("EP0A_%i",i));
386 title1 = TString(Form("EP VZero cent bin %i",i));
387 fHistEP0A[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
388 fOutput->Add(fHistEP0A[i]);
390 name1 = TString(Form("EP0C_%i",i));
391 title1 = TString(Form("EP VZero cent bin %i",i));
392 fHistEP0C[i] = new TH1F(name1,title1,144,-TMath::Pi(),TMath::Pi());
393 fOutput->Add(fHistEP0C[i]);
395 name1 = TString(Form("EPAvsC_%i",i));
396 title1 = TString(Form("EP VZero cent bin %i",i));
397 fHistEPAvsC[i] = new TH2F(name1,title1,144,-TMath::Pi(),TMath::Pi(),144,-TMath::Pi(),TMath::Pi());
398 fOutput->Add(fHistEPAvsC[i]);
400 name1 = TString(Form("JetPtvsTrackPt_%i",i));
401 title1 = TString(Form("Jet p_{T} vs Leading Track p_{T} cent bin %i",i));
402 fHistJetPtvsTrackPt[i] = new TH2F(name1,title1,250,-50,200,250,0,50);
403 fOutput->Add(fHistJetPtvsTrackPt[i]);
405 name1 = TString(Form("RawJetPtvsTrackPt_%i",i));
406 title1 = TString(Form("Raw Jet p_{T} vs Leading Track p_{T} cent bin %i",i));
407 fHistRawJetPtvsTrackPt[i] = new TH2F(name1,title1,250,-50,200,250,0,50);
408 fOutput->Add(fHistRawJetPtvsTrackPt[i]);
410 name1 = TString(Form("TrackPt_%i",i));
411 title1 = TString(Form("Track p_{T} cent bin %i",i));
412 fHistTrackPt[i] = new TH1F(name1,title1,1000,0,100); // up to 200?
413 fOutput->Add(fHistTrackPt[i]);
415 name1 = TString(Form("JetPtcorrGLrho_%i",i));
416 title1 = TString(Form("Jet p_{T} corrected with Global #rho cent bin %i",i));
417 fHistJetPtcorrGlRho[i] = new TH1F(name1,title1,300,-100,200); // up to 200?
418 fOutput->Add(fHistJetPtcorrGlRho[i]);
420 name1 = TString(Form("JetPtvsdEP_%i",i));
421 title1 = TString(Form("Jet p_{T} vs #DeltaEP cent bin %i",i));
422 fHistJetPtvsdEP[i] = new TH2F(name1,title1,250,-50,200,288,-2*TMath::Pi(),2*TMath::Pi());
423 fOutput->Add(fHistJetPtvsdEP[i]);
425 name1 = TString(Form("RhovsdEP_%i",i));
426 title1 = TString(Form("#rho vs #DeltaEP cent bin %i",i));
427 fHistRhovsdEP[i] = new TH2F(name1,title1,500,0,500,288,-2*TMath::Pi(),2*TMath::Pi());
428 fOutput->Add(fHistRhovsdEP[i]);
430 name1 = TString(Form("JetEtaPhiPt_%i",i));
431 title1 = TString(Form("Jet #eta-#phi p_{T} cent bin %i",i));
432 fHistJetEtaPhiPt[i] = new TH3F(name1,title1,250,-50,200,100,-1,1,64,-3.2,3.2);
433 fOutput->Add(fHistJetEtaPhiPt[i]);
435 name1 = TString(Form("JetPtArea_%i",i));
436 title1 = TString(Form("Jet p_{T} Area cent bin %i",i));
437 fHistJetPtArea[i] = new TH2F(name1,title1,250,-50,200,100,0,1);
438 fOutput->Add(fHistJetPtArea[i]);
440 snprintf(name, nchar, "fHistAreavsRawPt_%i",i);
441 fHistAreavsRawPt[i] = new TH2F(name,name,100,0,1,200,0,200);
442 fOutput->Add(fHistAreavsRawPt[i]);
443 } // loop over centrality
447 if (makeBIAShistos) {
448 fHistJetHaddPhiBias = new TH1F("fHistJetHaddPhiBias","Jet-Hadron #Delta#varphi with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
449 fHistJetHaddPhiINBias = new TH1F("fHistJetHaddPhiINBias","Jet-Hadron #Delta#varphi IN PLANE with bias", 128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
450 fHistJetHaddPhiOUTBias = new TH1F("fHistJetHaddPhiOUTBias","Jet-Hadron #Delta#varphi OUT PLANE with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
451 fHistJetHaddPhiMIDBias = new TH1F("fHistJetHaddPhiMIDBias","Jet-Hadron #Delta#varphi MIDDLE of PLANE with bias",128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
453 // add to output list
454 fOutput->Add(fHistJetHaddPhiBias);
455 fOutput->Add(fHistJetHaddPhiINBias);
456 fOutput->Add(fHistJetHaddPhiOUTBias);
457 fOutput->Add(fHistJetHaddPhiMIDBias);
459 for (Int_t i = 0;i<6;++i){
460 name1 = TString(Form("JetPtvsdEPBias_%i",i));
461 title1 = TString(Form("Bias Jet p_{T} vs #DeltaEP cent bin %i",i));
462 fHistJetPtvsdEPBias[i] = new TH2F(name1,title1,250,-50,200,288,-2*TMath::Pi(),2*TMath::Pi());
463 fOutput->Add(fHistJetPtvsdEPBias[i]);
465 name1 = TString(Form("JetEtaPhiPtBias_%i",i));
466 title1 = TString(Form("Jet #eta-#phi p_{T} Bias cent bin %i",i));
467 fHistJetEtaPhiPtBias[i] = new TH3F(name1,title1,250,-50,200,100,-1,1,64,-3.2,3.2);
468 fOutput->Add(fHistJetEtaPhiPtBias[i]);
470 name1 = TString(Form("JetPtAreaBias_%i",i));
471 title1 = TString(Form("Jet p_{T} Area Bias cent bin %i",i));
472 fHistJetPtAreaBias[i] = new TH2F(name1,title1,250,-50,200,100,0,1);
473 fOutput->Add(fHistJetPtAreaBias[i]);
474 } // end of centrality loop
477 if (makeoldJEThadhistos) {
478 for(Int_t icent = 0; icent<6; ++icent){
479 snprintf(name, nchar, "fHistJetPtTT_%i",icent);
480 fHistJetPtTT[icent] = new TH1F(name,name,200,0,200);
481 fOutput->Add(fHistJetPtTT[icent]);
483 snprintf(name, nchar, "fHistJetPt_%i",icent);
484 fHistJetPt[icent] = new TH1F(name,name,200,0,200);
485 fOutput->Add(fHistJetPt[icent]);
487 snprintf(name, nchar, "fHistJetPtBias_%i",icent);
488 fHistJetPtBias[icent] = new TH1F(name,name,200,0,200);
489 fOutput->Add(fHistJetPtBias[icent]);
491 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
492 for(Int_t ieta = 0; ieta<3; ++ieta){
493 snprintf(name, nchar, "fHistJetH_%i_%i_%i",icent,iptjet,ieta);
494 fHistJetH[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
495 fOutput->Add(fHistJetH[icent][iptjet][ieta]);
497 snprintf(name, nchar, "fHistJetHBias_%i_%i_%i",icent,iptjet,ieta);
498 fHistJetHBias[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
499 fOutput->Add(fHistJetHBias[icent][iptjet][ieta]);
501 snprintf(name, nchar, "fHistJetHTT_%i_%i_%i",icent,iptjet,ieta);
502 fHistJetHTT[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
503 fOutput->Add(fHistJetHTT[icent][iptjet][ieta]);
505 } // end of pt-jet loop
506 } // end of centrality loop
507 } // make JetHadhisto old
509 if (makeextraCORRhistos) {
510 for(Int_t itrackpt=0; itrackpt<9; itrackpt++){
511 snprintf(name, nchar, "fHistJetHadbindPhi_%i",itrackpt);
512 fHistJetHadbindPhi[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
513 fOutput->Add(fHistJetHadbindPhi[itrackpt]);
515 snprintf(name, nchar, "fHistJetHadbindPhiIN_%i",itrackpt);
516 fHistJetHadbindPhiIN[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
517 fOutput->Add(fHistJetHadbindPhiIN[itrackpt]);
519 snprintf(name, nchar, "fHistJetHadbindPhiMID_%i",itrackpt);
520 fHistJetHadbindPhiMID[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
521 fOutput->Add(fHistJetHadbindPhiMID[itrackpt]);
523 snprintf(name, nchar, "fHistJetHadbindPhiOUT_%i",itrackpt);
524 fHistJetHadbindPhiOUT[itrackpt] = new TH1F(name,name,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
525 fOutput->Add(fHistJetHadbindPhiOUT[itrackpt]);
526 } // end of trackpt bin loop
528 for (Int_t i = 0;i<6;++i){
529 name1 = TString(Form("JetHaddPhiINcent_%i",i));
530 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution IN PLANE cent bin %i",i));
531 fHistJetHaddPhiINcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
532 fOutput->Add(fHistJetHaddPhiINcent[i]);
534 name1 = TString(Form("JetHaddPhiOUTcent_%i",i));
535 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution OUT PLANE cent bin %i",i));
536 fHistJetHaddPhiOUTcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
537 fOutput->Add(fHistJetHaddPhiOUTcent[i]);
539 name1 = TString(Form("JetHaddPhiMIDcent_%i",i));
540 title1 = TString(Form("Jet Hadron #Delta#varphi Distribution MIDDLE of PLANE cent bin %i",i));
541 fHistJetHaddPhiMIDcent[i] = new TH1F(name1,title1,128,-0.5*TMath::Pi(), 1.5*TMath::Pi());
542 fOutput->Add(fHistJetHaddPhiMIDcent[i]);
544 name1 = TString(Form("JetPtNcon_%i",i));
545 title1 = TString(Form("Jet p_{T} Ncon cent bin %i",i));
546 fHistJetPtNcon[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
547 fOutput->Add(fHistJetPtNcon[i]);
549 name1 = TString(Form("JetPtNconBias_%i",i));
550 title1 = TString(Form("Jet p_{T} NconBias cent bin %i",i));
551 fHistJetPtNconBias[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
552 fOutput->Add(fHistJetPtNconBias[i]);
554 name1 = TString(Form("JetPtNconCh_%i",i));
555 title1 = TString(Form("Jet p_{T} NconCh cent bin %i",i));
556 fHistJetPtNconCh[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
557 fOutput->Add(fHistJetPtNconCh[i]);
559 name1 = TString(Form("JetPtNconBiasCh_%i",i));
560 title1 = TString(Form("Jet p_{T} NconBiasCh cent bin %i",i));
561 fHistJetPtNconBiasCh[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
562 fOutput->Add(fHistJetPtNconBiasCh[i]);
564 name1 = TString(Form("JetPtNconEm_%i",i));
565 title1 = TString(Form("Jet p_{T} NconEm cent bin %i",i));
566 fHistJetPtNconEm[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
567 fOutput->Add(fHistJetPtNconEm[i]);
569 name1 = TString(Form("JetPtNconBiasEm_%i",i));
570 title1 = TString(Form("Jet p_{T} NconBiasEm cent bin %i",i));
571 fHistJetPtNconBiasEm[i] = new TH2F(name1,title1,250,-50,200,100,0,2000);
572 fOutput->Add(fHistJetPtNconBiasEm[i]);
573 } // extra Correlations histos switch
576 // variable binned pt for THnSparse's
577 //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};
578 //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};
579 Double_t xlowjetPT[] = {15, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 45, 50, 55, 60, 65, 70, 75, 80, 100, 150, 200, 300};
580 Double_t xlowtrPT[] = {0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.6,0.7,0.8,0.9,1.0,1.2,1.4,1.6,1.8,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.2,4.4,4.6,4.8,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,12.0,14.0,16.0,18.0,20.0,25.0,30.0,40.0,50.0,75.0};
582 // tracks: 51, jets: 26
583 // number of bins you tell histogram should be (# in array - 1) because the last bin
584 // is the right-most edge of the histogram
585 // i.e. this is for PT and there are 57 numbers (bins) thus we have 56 bins in our histo
586 Int_t nbinsjetPT = sizeof(xlowjetPT)/sizeof(Double_t) - 1;
587 Int_t nbinstrPT = sizeof(xlowtrPT)/sizeof(Double_t) - 1;
589 // set up jet-hadron sparse
590 UInt_t bitcoded = 0; // bit coded, see GetDimParams() below
592 UInt_t bitcode = 0; // bit coded, see GetDimParamsPID() below
593 UInt_t bitcodeCorr = 0; // bit coded, see GetDimparamsCorr() below
594 bitcoded = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8; // | 1<<9;
595 //if(fDoEventMixing) {
596 fhnJH = NewTHnSparseF("fhnJH", bitcoded);
598 if(dovarbinTHnSparse){
599 fhnJH->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
600 fhnJH->GetAxis(2)->Set(nbinstrPT, xlowtrPT);
606 bitcodeCorr = 1<<0 | 1<<1 | 1<<2 | 1<<3; // | 1<<4 | 1<<5;
607 fhnCorr = NewTHnSparseFCorr("fhnCorr", bitcodeCorr);
608 if(dovarbinTHnSparse) fhnCorr->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
609 fOutput->Add(fhnCorr);
612 Double_t centralityBins[nCentralityBins+1];
613 for(Int_t ic=0; ic<nCentralityBins+1; ic++){
614 if(ic==nCentralityBins) centralityBins[ic]=500;
615 else centralityBins[ic]=10.0*ic;
619 // set up centrality bins for mixed events
620 // for pp we need mult bins for event mixing. Create binning here, to also make a histogram from it
621 Int_t nCentralityBinspp = 8;
622 //Double_t centralityBinspp[nCentralityBinspp+1];
623 Double_t centralityBinspp[9] = {0.0, 4., 9, 15, 25, 35, 55, 100.0, 500.0};
625 // Setup for Pb-Pb collisions
626 Int_t nCentralityBinsPbPb = 10; //100;
627 Double_t centralityBinsPbPb[nCentralityBinsPbPb+1];
628 for(Int_t ic=0; ic<nCentralityBinsPbPb; ic++){
629 centralityBinsPbPb[ic]=10.0*ic; //1.0*ic;
632 if(fBeam == 0) fHistMult = new TH1F("fHistMult","multiplicity",nCentralityBinspp,centralityBinspp);
633 if(fBeam == 1) fHistMult = new TH1F("fHistMult","multiplicity",nCentralityBinsPbPb,centralityBinsPbPb);
634 //if(AliAnalysisTaskEmcal::GetBeamType() == 0) fHistMult = new TH1F("fHistMult","multiplicity",nCentralityBinspp,centralityBinspp);
635 //if(AliAnalysisTaskEmcal::GetBeamType() == 1) fHistMult = new TH1F("fHistMult","multiplicity",nCentralityBinsPbPb,centralityBinsPbPb);
636 // fOutput->Add(fHistMult);
639 Int_t trackDepth = fMixingTracks;
640 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
641 Int_t nZvtxBins = 5+1+5;
642 Double_t vertexBins[] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10};
643 Double_t* zvtxbin = vertexBins;
644 if(fBeam == 0) fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBinspp, centralityBinspp, nZvtxBins, zvtxbin);
645 if(fBeam == 1) fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBinsPbPb, centralityBinsPbPb, nZvtxBins, zvtxbin);
646 // if(GetBeamType() == 0) fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBinspp, centralityBinspp, nZvtxBins, zvtxbin);
647 // if(GetBeamType() == 1) fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBinsPbPb, centralityBinsPbPb, nZvtxBins, zvtxbin);
649 // set up event mixing sparse
651 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8; // | 1<<9;
652 fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);
654 if(dovarbinTHnSparse){
655 fhnMixedEvents->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
656 fhnMixedEvents->GetAxis(2)->Set(nbinstrPT, xlowtrPT);
659 fOutput->Add(fhnMixedEvents);
660 } // end of do-eventmixing
664 // ****************************** PID *****************************************************
665 // set up PID handler
666 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
667 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
669 AliFatal("Input handler needed");
673 // PID response object
674 fPIDResponse = inputHandler->GetPIDResponse();
676 AliError("PIDResponse object was not created");
679 // *****************************************************************************************
682 fHistPID = new TH1F("fHistPID","PID Counter", 15, 0.5, 15.5);
683 SetfHistPIDcounterLabels(fHistPID);
684 fOutput->Add(fHistPID);
687 bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
688 1<<10 | 1<<11 | 1<<12 | 1<<13 | 1<<14 | 1<<15 | 1<<16 | 1<<17 | 1<<18 | 1<<19 |
690 fhnPID = NewTHnSparseFPID("fhnPID", bitcode);
692 bitcode = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
693 1<<10 | 1<<11 | 1<<12 | 1<<13;
694 fhnPID = NewTHnSparseFPID("fhnPID", bitcode);
697 if(dovarbinTHnSparse){
698 fhnPID->GetAxis(1)->Set(nbinstrPT, xlowtrPT);
699 fhnPID->GetAxis(8)->Set(nbinsjetPT, xlowjetPT);
702 fOutput->Add(fhnPID);
705 // =========== Switch on Sumw2 for all histos ===========
706 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
707 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
712 TH2 *h2 = dynamic_cast<TH2*>(fOutput->At(i));
717 TH3 *h3 = dynamic_cast<TH3*>(fOutput->At(i));
722 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
726 PostData(1, fOutput);
729 //_________________________________________________________________________
730 void AliAnalysisTaskEmcalJetHadEPpid::ExecOnce()
732 AliAnalysisTaskEmcalJet::ExecOnce();
734 if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;
735 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
736 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
739 //_________________________________________________________________________
740 Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
741 { // Main loop called for each event
742 // TEST TEST TEST TEST for OBJECTS!
744 fHistEventQA->Fill(1); // All Events that get entered
746 UInt_t trig = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
747 if(trig == 0) fHistEventSelectionQA->Fill(1);
748 if(trig & AliVEvent::kAny) fHistEventSelectionQA->Fill(2);
749 if(trig & AliVEvent::kAnyINT) fHistEventSelectionQA->Fill(3);
750 if(trig & AliVEvent::kMB) fHistEventSelectionQA->Fill(4);
751 if(trig & AliVEvent::kINT7) fHistEventSelectionQA->Fill(5);
752 if(trig & AliVEvent::kEMC1) fHistEventSelectionQA->Fill(6);
753 if(trig & AliVEvent::kEMC7) fHistEventSelectionQA->Fill(7);
754 if(trig & AliVEvent::kEMC8) fHistEventSelectionQA->Fill(8);
755 if(trig & AliVEvent::kEMCEJE) fHistEventSelectionQA->Fill(9);
756 if(trig & AliVEvent::kEMCEGA) fHistEventSelectionQA->Fill(10);
757 if(trig & AliVEvent::kCentral) fHistEventSelectionQA->Fill(11);
758 if(trig & AliVEvent::kSemiCentral) fHistEventSelectionQA->Fill(12);
759 if(trig & AliVEvent::kINT8) fHistEventSelectionQA->Fill(13);
761 if(trig & (AliVEvent::kEMCEJE | AliVEvent::kMB)) fHistEventSelectionQA->Fill(14);
762 if(trig & (AliVEvent::kEMCEGA | AliVEvent::kMB)) fHistEventSelectionQA->Fill(15);
763 if(trig & (AliVEvent::kAnyINT | AliVEvent::kMB)) fHistEventSelectionQA->Fill(16);
765 if(trig & (AliVEvent::kEMCEJE & AliVEvent::kMB)) fHistEventSelectionQA->Fill(17);
766 if(trig & (AliVEvent::kEMCEGA & AliVEvent::kMB)) fHistEventSelectionQA->Fill(18);
767 if(trig & (AliVEvent::kAnyINT & AliVEvent::kMB)) fHistEventSelectionQA->Fill(19);
769 if(GetBeamType() == 1) {
771 AliError(Form("Couldn't get fLocalRho object, try to get it from Event based on name\n"));
772 fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
773 if(!fLocalRho) return kTRUE;
775 } // check for LocalRho object if PbPb data
778 AliError(Form("No fTracks object!!\n"));
782 AliError(Form("No fJets object!!\n"));
786 fHistEventQA->Fill(2); // events after object check
788 // what kind of event do we have: AOD or ESD?
790 if (dynamic_cast<AliAODEvent*>(InputEvent())) useAOD = kTRUE;
791 else useAOD = kFALSE;
793 // if we have ESD event, set up ESD object
795 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
797 AliError(Form("ERROR: fESD not available\n"));
802 // if we have AOD event, set up AOD object
804 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
806 AliError(Form("ERROR: fAOD not available\n"));
811 fHistEventQA->Fill(3); // events after Aod/esd check
814 Int_t centbin = GetCentBin(fCent);
815 if (makeQAhistos) fHistCentrality->Fill(fCent); // won't be filled in pp collision (Keep this in mind!)
817 // BEAM TYPE enumerator: kNA = -1, kpp = 0, kAA = 1, kpA = 2
818 // for pp analyses we will just use the first centrality bin
819 if(GetBeamType() == 0) if (centbin == -1) centbin = 0;
820 if(GetBeamType() == 1) if (centbin == -1) return kTRUE;
822 // if we are on PbPb data do cut on centrality > 90%, else by default DON'T
823 if (GetBeamType() == 1) {
824 // apply cut to event on Centrality > 90%
825 if(fCent>90) return kTRUE;
828 fHistEventQA->Fill(4); // events after centrality check
830 // get vertex information
831 Double_t fvertex[3]={0,0,0};
832 InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
833 Double_t zVtx=fvertex[2];
834 if (makeQAhistos) fHistZvtx->Fill(zVtx);
837 //Int_t zVbin = GetzVertexBin(zVtx);
840 if(fabs(zVtx)>10.0) return kTRUE;
842 fHistEventQA->Fill(5); // events after zvertex check
844 // create pointer to list of input event
845 TList *list = InputEvent()->GetList();
847 AliError(Form("ERROR: list not attached\n"));
851 fHistEventQA->Fill(6); // events after list check
853 // initialize TClonesArray pointers to jets and tracks
854 TClonesArray *jets = 0;
855 TClonesArray *tracks = 0;
856 TClonesArray *tracksME = 0;
859 tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracks));
861 AliError(Form("Pointer to tracks %s == 0", fTracks->GetName()));
863 } // verify existence of tracks
865 // get ME Tracks object
866 tracksME = dynamic_cast<TClonesArray*>(list->FindObject(fTracksNameME));
868 AliError(Form("Pointer to tracks %s == 0", fTracksNameME.Data()));
870 } // verify existence of tracks
873 jets = dynamic_cast<TClonesArray*>(list->FindObject(fJets));
875 AliError(Form("Pointer to jets %s == 0", fJets->GetName()));
877 } // verify existence of jets
879 fHistEventQA->Fill(7); // events after track/jet pointer check
881 // get number of jets and tracks
882 const Int_t Njets = jets->GetEntries();
883 const Int_t Ntracks = tracks->GetEntries();
884 if(Ntracks<1) return kTRUE;
885 if(Njets<1) return kTRUE;
887 fHistEventQA->Fill(8); // events after #track and jets < 1 check
889 if (makeQAhistos) fHistMult->Fill(Ntracks); // fill multiplicity distribution
891 // initialize track parameters
896 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
898 printf("ERROR: fVEvent not available\n");
902 // fill event mixing QA
903 if(trig & AliVEvent::kEMCEGA) fHistCentZvertGA->Fill(fCent, zVtx);
904 if(trig & AliVEvent::kEMCEJE) fHistCentZvertJE->Fill(fCent, zVtx);
905 if(trig & AliVEvent::kMB) fHistCentZvertMB->Fill(fCent, zVtx);
906 if(trig & AliVEvent::kAny) fHistCentZvertAny->Fill(fCent, zVtx);
908 // loop over tracks - to get hardest track (highest pt)
909 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++){
910 AliVParticle* Vtrack = static_cast<AliVParticle*>(tracks->At(iTracks));
912 printf("ERROR: Could not receive track %d\n", iTracks);
916 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrack);
920 if(TMath::Abs(track->Eta())>0.9) continue;
921 if(track->Pt()<0.15) continue;
925 if(track->Pt()>ptmax){
926 ptmax=track->Pt(); // max pT track
927 iTT=iTracks; // trigger tracks
928 } // check if Pt>maxpt
930 if (makeQAhistos) fHistTrackPhi->Fill(track->Phi());
931 if (makeQAhistos) fHistTrackPt[centbin]->Fill(track->Pt());
932 if (makeQAhistos) fHistTrackPtallcent->Fill(track->Pt());
933 } // end of loop over tracks
935 // get rho from event and fill relative histo's
936 fRho = GetRhoFromEvent(fRhoName);
937 fRhoVal = fRho->GetVal();
940 fHistRhovsdEP[centbin]->Fill(fRhoVal,fEPV0); // Global Rho vs delta Event Plane angle
941 fHistRhovsCent->Fill(fCent,fRhoVal); // Global Rho vs Centrality
942 fHistEP0[centbin]->Fill(fEPV0);
943 fHistEP0A[centbin]->Fill(fEPV0A);
944 fHistEP0C[centbin]->Fill(fEPV0C);
945 fHistEPAvsC[centbin]->Fill(fEPV0A,fEPV0C);
948 // initialize jet parameters
950 Double_t highestjetpt=0.0;
953 Double_t leadhadronPT = 0;
955 // loop over jets in an event - to find highest jet pT and apply some cuts
956 for (Int_t ijet = 0; ijet < Njets; ijet++){
958 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
962 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax)) continue;
963 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax)) continue;
964 if (makeQAhistos) fHistAreavsRawPt[centbin]->Fill(jet->Pt(),jet->Area());
965 if(!AcceptMyJet(jet)) continue;
967 NjetAcc++; // # of accepted jets
969 // if FlavourJetAnalysis, get desired FlavTag and check against Jet
970 if(doFlavourJetAnalysis) { if(!AcceptFlavourJet(jet, fJetFlavTag)) continue;}
972 // use this to get total # of jets passing cuts in events!!!!!!!!
973 if (makeQAhistos) fHistJetPhi->Fill(jet->Phi()); // Jet Phi histogram (filled)
975 // get highest Pt jet in event
976 if(highestjetpt<jet->Pt()){
978 highestjetpt=jet->Pt();
980 } // end of looping over jets
983 fHistNjetvsCent->Fill(fCent,NjetAcc);
985 fHistEventQA->Fill(9); // events after track/jet loop to get highest pt
987 // loop over jets in event and make appropriate cuts
988 for (Int_t ijet = 0; ijet < Njets; ++ijet) {
989 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ijet));
992 if (!(trig & fTriggerEventType)) continue;
994 // (should probably be higher..., but makes a cut on jet pT)
995 if (jet->Pt()<0.1) continue;
996 // do we accept jet? apply jet cuts
997 if (!AcceptMyJet(jet)) continue;
999 // if FlavourJetAnalysis, get desired FlavTag and check against Jet
1000 if(doFlavourJetAnalysis) { if(!AcceptFlavourJet(jet, fJetFlavTag)) continue;}
1002 fHistEventQA->Fill(10); // accepted jets
1004 // check on lead jet
1006 if (ijet==ijethi) leadjet=1;
1008 // check on leading hadron pt
1009 if (ijet==ijethi) leadhadronPT = GetLeadingHadronPt(jet);
1011 // initialize and calculate various parameters: pt, eta, phi, rho, etc...
1012 Double_t jetphi = jet->Phi(); // phi of jet
1013 NJETAcc++; // # accepted jets
1014 Double_t jeteta = jet->Eta(); // ETA of jet
1015 Double_t jetPt = -500;
1016 Double_t jetPtGlobal = -500;
1017 Double_t jetPtLocal = -500; // initialize corr jet pt
1018 if(GetBeamType() == 1) {
1019 fLocalRhoVal = fLocalRho->GetLocalVal(jetphi, fJetRad); //GetJetRadius(0)); // get local rho value
1020 jetPtLocal = jet->Pt()-jet->Area()*fLocalRhoVal; // corrected pT of jet using Rho modulated for V2 and V3
1023 jetPtGlobal = jet->Pt()-jet->Area()*fRhoVal; // corrected pT of jet from rho value
1024 Double_t dEP = -500; // initialize angle between jet and event plane
1025 dEP = RelativeEPJET(jetphi,fEPV0); // angle betweeen jet and event plane
1028 if(makeQAhistos) fHistJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
1029 if(makeQAhistos) fHistRawJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
1030 if(makeQAhistos) fHistJetPtcorrGlRho[centbin]->Fill(jetPtGlobal);
1031 if(makeQAhistos) fHistJetPtvsdEP[centbin]->Fill(jetPt, dEP);
1032 if(makeQAhistos) fHistJetEtaPhiPt[centbin]->Fill(jetPt,jet->Eta(),jet->Phi());
1033 if(makeQAhistos) fHistJetPtArea[centbin]->Fill(jetPt,jet->Area());
1034 if(makeQAhistos) fHistJetEtaPhi->Fill(jet->Eta(),jet->Phi()); // fill jet eta-phi distribution histo
1035 if(makeextraCORRhistos) fHistJetPtNcon[centbin]->Fill(jetPt,jet->GetNumberOfConstituents());
1036 if(makeextraCORRhistos) fHistJetPtNconCh[centbin]->Fill(jetPt,jet->GetNumberOfTracks());
1037 if(makeextraCORRhistos) fHistJetPtNconEm[centbin]->Fill(jetPt,jet->GetNumberOfClusters());
1038 if (makeoldJEThadhistos) fHistJetPt[centbin]->Fill(jet->Pt()); // fill #jets vs pT histo
1039 //fHistDeltaPtvsArea->Fill(jetPt,jet->Area());
1041 // make histo's with BIAS applied
1042 if (jet->MaxTrackPt()>fTrkBias){
1043 if(makeBIAShistos) fHistJetPtvsdEPBias[centbin]->Fill(jetPt, dEP);
1044 if(makeBIAShistos) fHistJetEtaPhiPtBias[centbin]->Fill(jetPt,jet->Eta(),jet->Phi());
1045 if(makeextraCORRhistos) fHistJetPtAreaBias[centbin]->Fill(jetPt,jet->Area());
1046 if(makeextraCORRhistos) fHistJetPtNconBias[centbin]->Fill(jetPt,jet->GetNumberOfConstituents());
1047 if(makeextraCORRhistos) fHistJetPtNconBiasCh[centbin]->Fill(jetPt,jet->GetNumberOfTracks());
1048 if(makeextraCORRhistos) fHistJetPtNconBiasEm[centbin]->Fill(jetPt,jet->GetNumberOfClusters());
1051 //if(leadjet && centbin==0){
1052 // if(makeextraCORRhistos) fHistJetPt[centbin+1]->Fill(jet->Pt());
1054 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
1055 if (makeoldJEThadhistos){
1056 fHistJetPtBias[centbin]->Fill(jet->Pt());
1057 //if(leadjet && centbin==0) fHistJetPtBias[centbin+1]->Fill(jet->Pt());
1059 } // end of MaxTrackPt>ftrkBias or maxclusterPt>fclusBias
1061 // do we have trigger tracks
1063 AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
1064 if(TMath::Abs(jet->Phi()-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
1066 } // end of check on iTT > 0
1069 if (makeoldJEThadhistos) fHistJetPtTT[centbin]->Fill(jet->Pt());
1072 // cut on HIGHEST jet pt in event (15 GeV default)
1073 //if (highestjetpt>fJetPtcut) {
1074 if (jet->Pt() > fJetPtcut) {
1075 fHistEventQA->Fill(11); // jets meeting pt threshold
1077 // does our max track or cluster pass the bias?
1078 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
1079 // set up and fill Jet-Hadron Correction THnSparse
1080 Double_t CorrEntries[4] = {fCent, jet->Pt(), dEP, zVtx};
1081 fhnCorr->Fill(CorrEntries); // fill Sparse Histo with Correction entries
1083 if(GetBeamType() == 1) fHistLocalRhoJetpt->Fill(jetPtLocal);
1086 // loop over all track for an event containing a jet with a pT>fJetPtCut (15)GeV
1087 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
1088 AliVParticle* Vtrackass = static_cast<AliVParticle*>(tracks->At(iTracks));
1090 printf("ERROR: Could not receive track %d\n", iTracks);
1094 AliVTrack *track = dynamic_cast<AliVTrack*>(Vtrackass);
1096 AliError(Form("Couldn't get AliVtrack %d\n", iTracks));
1101 if(TMath::Abs(track->Eta())>fTrkEta) continue;
1102 if (track->Pt()<0.15) continue;
1104 fHistEventQA->Fill(12); // accepted tracks in events from trigger jets
1106 // calculate and get some track parameters
1107 Double_t trCharge = -99;
1108 trCharge = track->Charge();
1109 Double_t tracketa=track->Eta(); // eta of track
1110 Double_t deta=tracketa-jeteta; // dETA between track and jet
1111 //Double_t dR=sqrt(deta*deta+dphijh*dphijh); // difference of R between jet and hadron track
1113 Int_t ieta = -1; // initialize deta bin
1114 Int_t iptjet = -1; // initialize jet pT bin
1115 if (makeoldJEThadhistos) {
1116 ieta=GetEtaBin(deta); // bin of eta
1117 if(ieta<0) continue; // double check we don't have a negative array index
1118 iptjet=GetpTjetBin(jet->Pt()); // bin of jet pt
1119 if(iptjet<0) continue; // double check we don't have a negative array index
1122 // dPHI between jet and hadron
1123 Double_t dphijh = RelativePhi(jet->Phi(), track->Phi()); // angle between jet and hadron
1125 // fill some jet-hadron histo's
1126 if (makeoldJEThadhistos) fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt()); // fill jet-hadron dPHI--track pT distribution
1127 if(makeQAhistos) fHistJetHEtaPhi->Fill(deta,dphijh); // fill jet-hadron eta--phi distribution
1128 fHistJetHaddPHI->Fill(dphijh);
1130 if (makeoldJEThadhistos) fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
1133 // does our max track or cluster pass the bias?
1134 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
1135 // set up and fill Jet-Hadron THnSparse
1136 Double_t triggerEntries[9] = {fCent, jet->Pt(), track->Pt(), deta, dphijh, dEP, zVtx, trCharge, leadjet};
1137 fhnJH->Fill(triggerEntries); // fill Sparse Histo with trigger entries
1140 if(makeQAhistos) fHistSEphieta->Fill(dphijh, deta); // single event distribution
1141 if (makeoldJEThadhistos) fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
1143 if (makeBIAShistos) {
1144 fHistJetHaddPhiBias->Fill(dphijh);
1146 // in plane and out of plane histo's
1147 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
1149 fHistJetHaddPhiINBias->Fill(dphijh);
1150 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
1151 // we are OUT of PLANE
1152 fHistJetHaddPhiOUTBias->Fill(dphijh);
1153 }else if( dEP>(TMath::Pi()/6) && dEP<=(TMath::Pi()/3) ){
1154 // we are in middle of plane
1155 fHistJetHaddPhiMIDBias->Fill(dphijh);
1157 } // BIAS histos switch
1158 } // end of check maxtrackpt>ftrackbias or maxclusterpt>fclustbias
1160 // **************************************************************************************************************
1161 // *********************************** PID **********************************************************************
1162 // **************************************************************************************************************
1164 //if(ptmax < fTrkBias) continue; // force PID to happen when max track pt > 5.0 GeV
1165 if(leadhadronPT < fTrkBias) continue; // force PID to happen when lead hadron pt > 5.0 GeV
1168 // some variables for PID
1170 Double_t dEdx = -999;
1171 Double_t ITSsig = -999;
1172 Double_t TOFsig = -999;
1173 Double_t charge = -999;
1175 // nSigma of particles in TPC, TOF, and ITS
1176 Double_t nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC;
1177 Double_t nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF;
1178 Double_t nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS;
1181 // get parameters of track
1182 charge = track->Charge(); // charge of track
1183 pt = track->Pt(); // pT of track
1186 AliVEvent *vevent=InputEvent();
1187 if (!vevent||!fPIDResponse) return kTRUE; // just return, maybe put at beginning
1189 fHistEventQA->Fill(13); // check for AliVEvent and fPIDresponse objects
1191 ///////////////////////////////////////
1193 // get detector signals
1194 dEdx = track->GetTPCsignal();
1195 ITSsig = track->GetITSsignal();
1196 TOFsig = track->GetTOFsignal();
1199 nSigmaPion_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kPion);
1200 nSigmaKaon_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kKaon);
1201 nSigmaProton_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kProton);
1204 nSigmaPion_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kPion);
1205 nSigmaKaon_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kKaon);
1206 nSigmaProton_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kProton);
1209 nSigmaPion_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kPion);
1210 nSigmaKaon_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kKaon);
1211 nSigmaProton_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kProton);
1213 // fill detector signal histograms
1214 if (makeQAhistos) fHistTPCdEdX->Fill(pt, dEdx);
1215 if (makeQAhistos) fHistITSsignal->Fill(pt, ITSsig);
1216 //if (makeQAhistos) fHistTOFsignal->Fill(pt, TOFsig);
1218 // Tests to PID pions, kaons, and protons, (default is undentified tracks)
1219 Double_t nPIDtpc = 0;
1220 Double_t nPIDits = 0;
1221 Double_t nPIDtof = 0;
1222 Double_t nPID = -99;
1224 // check track has pT < 0.900 GeV - use TPC pid
1225 if (pt<0.900 && dEdx>0) {
1230 if (TMath::Abs(nSigmaPion_TPC)<2 && TMath::Abs(nSigmaKaon_TPC)>2 && TMath::Abs(nSigmaProton_TPC)>2 ){
1234 }else isPItpc = kFALSE;
1237 if (TMath::Abs(nSigmaKaon_TPC)<2 && TMath::Abs(nSigmaPion_TPC)>3 && TMath::Abs(nSigmaProton_TPC)>2 ){
1241 }else isKtpc = kFALSE;
1243 // PROTON check - TPC
1244 if (TMath::Abs(nSigmaProton_TPC)<2 && TMath::Abs(nSigmaPion_TPC)>3 && TMath::Abs(nSigmaKaon_TPC)>2 ){
1248 }else isPtpc = kFALSE;
1249 } // cut on track pT for TPC
1251 // check track has pT < 0.500 GeV - use ITS pid
1252 if (pt<0.500 && ITSsig>0) {
1257 if (TMath::Abs(nSigmaPion_ITS)<2 && TMath::Abs(nSigmaKaon_ITS)>2 && TMath::Abs(nSigmaProton_ITS)>2 ){
1261 }else isPIits = kFALSE;
1264 if (TMath::Abs(nSigmaKaon_ITS)<2 && TMath::Abs(nSigmaPion_ITS)>3 && TMath::Abs(nSigmaProton_ITS)>2 ){
1268 }else isKits = kFALSE;
1270 // PROTON check - ITS
1271 if (TMath::Abs(nSigmaProton_ITS)<2 && TMath::Abs(nSigmaPion_ITS)>3 && TMath::Abs(nSigmaKaon_ITS)>2 ){
1275 }else isPits = kFALSE;
1276 } // cut on track pT for ITS
1278 // check track has 0.900 GeV < pT < 2.500 GeV - use TOF pid
1279 if (pt>0.900 && pt<2.500 && TOFsig>0) {
1284 if (TMath::Abs(nSigmaPion_TOF)<2 && TMath::Abs(nSigmaKaon_TOF)>2 && TMath::Abs(nSigmaProton_TOF)>2 ){
1288 }else isPItof = kFALSE;
1291 if (TMath::Abs(nSigmaKaon_TOF)<2 && TMath::Abs(nSigmaPion_TOF)>3 && TMath::Abs(nSigmaProton_TOF)>2 ){
1295 }else isKtof = kFALSE;
1297 // PROTON check - TOF
1298 if (TMath::Abs(nSigmaProton_TOF)<2 && TMath::Abs(nSigmaPion_TOF)>3 && TMath::Abs(nSigmaKaon_TOF)>2 ){
1302 }else isPtof = kFALSE;
1303 } // cut on track pT for TOF
1305 if (nPID == -99) nPID = 14;
1306 fHistPID->Fill(nPID);
1308 // PID sparse getting filled
1309 if (allpidAXIS) { // FILL ALL axis
1310 Double_t pid_EntriesALL[21] = {fCent,pt,charge,deta,dphijh,leadjet,zVtx,dEP,jetPt,
1311 nSigmaPion_TPC, nSigmaPion_TOF, // pion nSig values in TPC/TOF
1312 nPIDtpc, nPIDits, nPIDtof, // PID label for each detector
1313 nSigmaProton_TPC, nSigmaKaon_TPC, // nSig in TPC
1314 nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS, // nSig in ITS
1315 nSigmaProton_TOF, nSigmaKaon_TOF, // nSig in TOF
1316 }; //array for PID sparse
1317 fhnPID->Fill(pid_EntriesALL);
1319 // PID sparse getting filled
1320 Double_t pid_Entries[14] = {fCent,pt,charge,deta,dphijh,leadjet,zVtx,dEP,jetPt,
1321 nSigmaPion_TPC, nSigmaPion_TOF, // pion nSig values in TPC/TOF
1322 nPIDtpc, nPIDits, nPIDtof // PID label for each detector
1323 }; //array for PID sparse
1324 fhnPID->Fill(pid_Entries); // fill Sparse histo of PID tracks
1325 } // minimal pid sparse filling
1327 } // end of doPID check
1330 Int_t itrackpt = -500; // initialize track pT bin
1331 itrackpt = GetpTtrackBin(track->Pt());
1333 // all tracks: jet hadron correlations in hadron pt bins
1334 if(makeextraCORRhistos) fHistJetHadbindPhi[itrackpt]->Fill(dphijh);
1336 // in plane and out of plane jet-hadron histo's
1337 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
1339 if(makeextraCORRhistos) fHistJetHaddPhiINcent[centbin]->Fill(dphijh);
1340 fHistJetHaddPhiIN->Fill(dphijh);
1341 if(makeextraCORRhistos) fHistJetHadbindPhiIN[itrackpt]->Fill(dphijh);
1342 //fHistJetHaddPhiPtcentbinIN[itrackpt][centbin]->Fill(dphijh);
1343 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
1344 // we are OUT of PLANE
1345 if(makeextraCORRhistos) fHistJetHaddPhiOUTcent[centbin]->Fill(dphijh);
1346 fHistJetHaddPhiOUT->Fill(dphijh);
1347 if(makeextraCORRhistos) fHistJetHadbindPhiOUT[itrackpt]->Fill(dphijh);
1348 //fHistJetHaddPhiPtcentbinOUT[itrackpt][centbin]->Fill(dphijh);
1349 }else if( dEP>(TMath::Pi()/6) && dEP<=(TMath::Pi()/3) ){
1350 // we are in the middle of plane
1351 if(makeextraCORRhistos) fHistJetHaddPhiMIDcent[centbin]->Fill(dphijh);
1352 fHistJetHaddPhiMID->Fill(dphijh);
1353 if(makeextraCORRhistos) fHistJetHadbindPhiMID[itrackpt]->Fill(dphijh);
1355 } // loop over tracks found in event with highest JET pT > 10.0 GeV (change)
1359 fHistEventQA->Fill(14); // events right before event mixing
1361 // ***************************************************************************************************************
1362 // ******************************** Event MIXING *****************************************************************
1363 // ***************************************************************************************************************
1365 // initialize object array of cloned picotracks
1366 TObjArray* tracksClone = 0x0;
1368 // PbPb collisions - create cloned picotracks
1369 //if(GetBeamType() == 1) tracksClone = CloneAndReduceTrackList(tracks); // TEST
1371 //Prepare to do event mixing
1372 if(fDoEventMixing>0){
1375 // 1. First get an event pool corresponding in mult (cent) and
1376 // zvertex to the current event. Once initialized, the pool
1377 // should contain nMix (reduced) events. This routine does not
1378 // pre-scan the chain. The first several events of every chain
1379 // will be skipped until the needed pools are filled to the
1380 // specified depth. If the pool categories are not too rare, this
1381 // should not be a problem. If they are rare, you could lose
1384 // 2. Collect the whole pool's content of tracks into one TObjArray
1385 // (bgTracks), which is effectively a single background super-event.
1387 // 3. The reduced and bgTracks arrays must both be passed into
1388 // FillCorrelations(). Also nMix should be passed in, so a weight
1389 // of 1./nMix can be applied.
1391 // mix jets from triggered events with tracks from MB events
1392 // get the trigger bit, need to change trigger bits between different runs
1393 UInt_t trigger = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1394 // if event was not selected (triggered) for any reseason (should never happen) then return
1395 if (trigger==0) return kTRUE;
1397 // initialize event pools
1398 AliEventPool* pool = 0x0;
1399 AliEventPool* poolpp = 0x0;
1400 Double_t Ntrks = -999;
1402 // pp collisions - get event pool
1403 if(GetBeamType() == 0) {
1404 Ntrks=(Double_t)Ntracks*1.0;
1405 //cout<<"Test.. Ntrks: "<<fPoolMgr->GetEventPool(Ntrks);
1406 poolpp = fPoolMgr->GetEventPool(Ntrks, zVtx); // for pp
1409 // PbPb collisions - get event pool
1410 if(GetBeamType() == 1) pool = fPoolMgr->GetEventPool(fCent, zVtx); // for PbPb? fcent
1412 // if we don't have a pool, return
1413 if (!pool && !poolpp){
1414 if(GetBeamType() == 1) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCent, zVtx));
1415 if(GetBeamType() == 0) AliFatal(Form("No pool found for multiplicity = %f, zVtx = %f", Ntrks, zVtx));
1419 fHistEventQA->Fill(15); // mixed events cases that have pool
1421 // initialize background tracks array
1422 TObjArray* bgTracks;
1424 // next line might not apply for PbPb collisions
1425 // use only jets from EMCal-triggered events (for lhc11a use AliVEvent::kEMC1)
1426 //check for a trigger jet
1427 // fmixingtrack/10 ??
1428 if(GetBeamType() == 1) if(trigger & fTriggerEventType) { //kEMCEJE)) {
1429 if (pool->IsReady() || pool->NTracksInPool() > fNMIXtracks || pool->GetCurrentNEvents() >= fNMIXevents) {
1431 // loop over jets (passing cuts?)
1432 for (Int_t ijet = 0; ijet < Njets; ijet++) {
1434 if (ijet==ijethi) leadjet=1;
1437 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
1440 // (should probably be higher..., but makes a cut on jet pT)
1441 if (jet->Pt()<0.1) continue;
1442 if (!AcceptMyJet(jet)) continue;
1444 fHistEventQA->Fill(16); // event mixing jets
1446 // set cut to do event mixing only if we have a jet meeting our pt threshold (bias applied below)
1447 if (jet->Pt()<fJetPtcut) continue;
1449 // get number of current events in pool
1450 Int_t nMix = pool->GetCurrentNEvents(); // how many particles in pool to mix
1452 // Fill for biased jet triggers only
1453 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)) { // && jet->Pt() > fJetPtcut) {
1454 // Fill mixed-event histos here
1455 for (Int_t jMix=0; jMix<nMix; jMix++) {
1456 fHistEventQA->Fill(17); // event mixing nMix
1458 // get jMix'th event
1459 bgTracks = pool->GetEvent(jMix);
1460 const Int_t Nbgtrks = bgTracks->GetEntries();
1461 for(Int_t ibg=0; ibg<Nbgtrks; ibg++) {
1462 AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
1464 if(TMath::Abs(part->Eta())>0.9) continue;
1465 if(part->Pt()<0.15) continue;
1467 Double_t DEta = part->Eta()-jet->Eta(); // difference in eta
1468 Double_t DPhi = RelativePhi(jet->Phi(),part->Phi()); // difference in phi
1469 Double_t dEP = RelativeEPJET(jet->Phi(),fEPV0); // difference between jet and EP
1470 Double_t mixcharge = part->Charge();
1471 //Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta); // difference in R
1473 // create / fill mixed event sparse
1474 Double_t triggerEntries[10] = {fCent,jet->Pt(),part->Pt(),DEta,DPhi,dEP,zVtx, mixcharge, leadjet}; //array for ME sparse
1475 fhnMixedEvents->Fill(triggerEntries,1./nMix); // fill Sparse histo of mixed events
1477 fHistEventQA->Fill(18); // event mixing - nbgtracks
1478 if(makeextraCORRhistos) fHistMEphieta->Fill(DPhi,DEta, 1./nMix);
1479 } // end of background track loop
1480 } // end of filling mixed-event histo's
1481 } // end of check for biased jet triggers
1482 } // end of jet loop
1483 } // end of check for pool being ready
1484 } // end EMC triggered loop
1486 //=============================================================================================================
1488 // use only jets from EMCal-triggered events (for lhc11a use AliVEvent::kEMC1)
1489 /// if (trigger & AliVEvent::kEMC1) {
1491 if(GetBeamType() == 0) if(trigger & fTriggerEventType) { //kEMC1)) {
1492 if (poolpp->IsReady() || poolpp->NTracksInPool() > fNMIXtracks || poolpp->GetCurrentNEvents() >= fNMIXevents) {
1494 // loop over jets (passing cuts?)
1495 for (Int_t ijet = 0; ijet < Njets; ijet++) {
1497 if (ijet==ijethi) leadjet=1;
1500 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
1503 // (should probably be higher..., but makes a cut on jet pT)
1504 if (jet->Pt()<0.1) continue;
1505 if (!AcceptMyJet(jet)) continue;
1507 fHistEventQA->Fill(16); // event mixing jets
1509 // set cut to do event mixing only if we have a jet meeting our pt threshold (bias applied below)
1510 if (jet->Pt()<fJetPtcut) continue;
1512 // get number of current events in pool
1513 Int_t nMix = poolpp->GetCurrentNEvents(); // how many particles in pool to mix
1515 // Fill for biased jet triggers only
1516 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)) { // && jet->Pt() > fJetPtcut) {
1517 // Fill mixed-event histos here
1518 for (Int_t jMix=0; jMix<nMix; jMix++) {
1519 fHistEventQA->Fill(17); // event mixing nMix
1521 // get jMix'th event
1522 bgTracks = poolpp->GetEvent(jMix);
1523 const Int_t Nbgtrks = bgTracks->GetEntries();
1524 for(Int_t ibg=0; ibg<Nbgtrks; ibg++) {
1525 AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
1527 if(TMath::Abs(part->Eta())>0.9) continue;
1528 if(part->Pt()<0.15) continue;
1530 Double_t DEta = part->Eta()-jet->Eta(); // difference in eta
1531 Double_t DPhi = RelativePhi(jet->Phi(),part->Phi()); // difference in phi
1532 Double_t dEP = RelativeEPJET(jet->Phi(),fEPV0); // difference between jet and EP
1533 Double_t mixcharge = part->Charge();
1534 //Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta); // difference in R
1536 // create / fill mixed event sparse
1537 Double_t triggerEntries[10] = {fCent,jet->Pt(),part->Pt(),DEta,DPhi,dEP,zVtx, mixcharge, leadjet}; //array for ME sparse
1538 fhnMixedEvents->Fill(triggerEntries,1./nMix); // fill Sparse histo of mixed events
1540 fHistEventQA->Fill(18); // event mixing - nbgtracks
1541 if(makeextraCORRhistos) fHistMEphieta->Fill(DPhi,DEta, 1./nMix);
1542 } // end of background track loop
1543 } // end of filling mixed-event histo's
1544 } // end of check for biased jet triggers
1545 } // end of jet loop
1546 } // end of check for pool being ready
1547 } //end EMC triggered loop
1550 // use only tracks from MB events (for lhc11a use AliVEvent::kMB)
1551 /// if (trigger & AliVEvent::kMB) {
1552 //T if (trigger & AliVEvent::kAnyINT){ // test
1553 if(GetBeamType() == 0) {
1555 // use only tracks from MB events (for lhc11a use AliVEvent::kMB)
1556 if(trigger & fMixingEventType) { //kMB) {
1558 // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
1559 tracksClone = CloneAndReduceTrackList(tracks);
1561 // update pool if jet in event or not
1562 poolpp->UpdatePool(tracksClone);
1564 } // check on track from MB events
1568 if(GetBeamType() == 1) {
1570 // use only tracks from MB events
1571 if(trigger & fMixingEventType) { //kMB) {
1573 // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
1574 tracksClone = CloneAndReduceTrackList(tracks);
1576 // update pool if jet in event or not
1577 pool->UpdatePool(tracksClone);
1580 } // PbPb collisions
1581 } // end of event mixing
1583 // print some stats on the event
1585 fHistEventQA->Fill(19); // events making it to end
1588 cout<<"Event #: "<<event<<" Jet Radius: "<<fJetRad<<" Constituent Pt Cut: "<<fConstituentCut<<endl;
1589 cout<<"# of jets: "<<Njets<<" NjetAcc: "<<NjetAcc<<" Highest jet pt: "<<highestjetpt<<" leading hadron pt: "<<leadhadronPT<<endl;
1590 cout<<"# tracks: "<<Ntracks<<" NtrackAcc: "<<NtrackAcc<<" Highest track pt: "<<ptmax<<endl;
1591 cout<<" =============================================== "<<endl;
1594 return kTRUE; // used when the function is of type bool
1597 //________________________________________________________________________
1598 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetCentBin(Double_t cent) const
1599 { // Get centrality bin.
1601 if (cent>=0 && cent<10) centbin = 0;
1602 else if (cent>=10 && cent<20) centbin = 1;
1603 else if (cent>=20 && cent<30) centbin = 2;
1604 else if (cent>=30 && cent<40) centbin = 3;
1605 else if (cent>=40 && cent<50) centbin = 4;
1606 else if (cent>=50 && cent<90) centbin = 5;
1611 //________________________________________________________________________
1612 Double_t AliAnalysisTaskEmcalJetHadEPpid::RelativePhi(Double_t mphi,Double_t vphi) const
1613 { // function to calculate relative PHI
1614 double dphi = mphi-vphi;
1616 // set dphi to operate on adjusted scale
1617 if(dphi<-0.5*TMath::Pi()) dphi+=2.*TMath::Pi();
1618 if(dphi>3./2.*TMath::Pi()) dphi-=2.*TMath::Pi();
1621 if( dphi < -1.*TMath::Pi()/2 || dphi > 3.*TMath::Pi()/2 )
1622 AliWarning(Form("%s: dPHI not in range [-0.5*Pi, 1.5*Pi]!", GetName()));
1624 return dphi; // dphi in [-0.5Pi, 1.5Pi]
1627 //_________________________________________________________________________
1628 Double_t AliAnalysisTaskEmcalJetHadEPpid:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
1629 { // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
1630 Double_t dphi = (EPAng - jetAng);
1632 // ran into trouble with a few dEP<-Pi so trying this...
1633 if( dphi<-1*TMath::Pi() ){
1634 dphi = dphi + 1*TMath::Pi();
1635 } // this assumes we are doing full jets currently
1637 if( (dphi>0) && (dphi<1*TMath::Pi()/2) ){
1638 // Do nothing! we are in quadrant 1
1639 }else if( (dphi>1*TMath::Pi()/2) && (dphi<1*TMath::Pi()) ){
1640 dphi = 1*TMath::Pi() - dphi;
1641 }else if( (dphi<0) && (dphi>-1*TMath::Pi()/2) ){
1643 }else if( (dphi<-1*TMath::Pi()/2) && (dphi>-1*TMath::Pi()) ){
1644 dphi = dphi + 1*TMath::Pi();
1648 if( dphi < 0 || dphi > TMath::Pi()/2 )
1649 AliWarning(Form("%s: dPHI not in range [0, 0.5*Pi]!", GetName()));
1651 return dphi; // dphi in [0, Pi/2]
1654 //Int_t ieta=GetEtaBin(deta);
1655 //________________________________________________________________________
1656 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetEtaBin(Double_t eta) const
1658 // Get eta bin for histos.
1660 if (TMath::Abs(eta)<=0.4) etabin = 0;
1661 else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8) etabin = 1;
1662 else if (TMath::Abs(eta)>=0.8) etabin = 2;
1665 } // end of get-eta-bin
1667 //________________________________________________________________________
1668 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetpTjetBin(Double_t pt) const
1670 // Get jet pt bin for histos.
1672 if (pt>=15 && pt<20) ptbin = 0;
1673 else if (pt>=20 && pt<25) ptbin = 1;
1674 else if (pt>=25 && pt<40) ptbin = 2;
1675 else if (pt>=40 && pt<60) ptbin = 3;
1676 else if (pt>=60) ptbin = 4;
1679 } // end of get-jet-pt-bin
1681 //________________________________________________________________________
1682 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetpTtrackBin(Double_t pt) const
1684 // May need to update bins for future runs... (testing locally)
1686 // Get track pt bin for histos.
1688 if (pt < 0.5) ptbin = 0;
1689 else if (pt>=0.5 && pt<1.0) ptbin = 1;
1690 else if (pt>=1.0 && pt<1.5) ptbin = 2;
1691 else if (pt>=1.5 && pt<2.0) ptbin = 3;
1692 else if (pt>=2.0 && pt<2.5) ptbin = 4;
1693 else if (pt>=2.5 && pt<3.0) ptbin = 5;
1694 else if (pt>=3.0 && pt<4.0) ptbin = 6;
1695 else if (pt>=4.0 && pt<5.0) ptbin = 7;
1696 else if (pt>=5.0) ptbin = 8;
1699 } // end of get-jet-pt-bin
1701 //___________________________________________________________________________
1702 Int_t AliAnalysisTaskEmcalJetHadEPpid::GetzVertexBin(Double_t zVtx) const
1704 // get z-vertex bin for histo.
1706 if (zVtx>=-10 && zVtx<-8) zVbin = 0;
1707 else if (zVtx>=-8 && zVtx<-6) zVbin = 1;
1708 else if (zVtx>=-6 && zVtx<-4) zVbin = 2;
1709 else if (zVtx>=-4 && zVtx<-2) zVbin = 3;
1710 else if (zVtx>=-2 && zVtx<0) zVbin = 4;
1711 else if (zVtx>=0 && zVtx<2) zVbin = 5;
1712 else if (zVtx>=2 && zVtx<4) zVbin = 6;
1713 else if (zVtx>=4 && zVtx<6) zVbin = 7;
1714 else if (zVtx>=6 && zVtx<8) zVbin = 8;
1715 else if (zVtx>=8 && zVtx<10) zVbin = 9;
1719 } // end of get z-vertex bin
1721 //______________________________________________________________________
1722 THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseF(const char* name, UInt_t entries)
1724 // generate new THnSparseF, axes are defined in GetDimParams()
1726 UInt_t tmp = entries;
1729 tmp = tmp &~ -tmp; // clear lowest bit
1732 TString hnTitle(name);
1733 const Int_t dim = count;
1740 while(c<dim && i<32){
1744 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
1745 hnTitle += Form(";%s",label.Data());
1753 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1754 } // end of NewTHnSparseF
1756 void AliAnalysisTaskEmcalJetHadEPpid::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1758 // stores label and binning of axis for THnSparse
1759 const Double_t pi = TMath::Pi();
1764 label = "V0 centrality (%)";
1771 label = "Jet p_{T}";
1778 label = "Track p_{T}";
1779 nbins = 80; //300; // 750 pid
1785 label = "Relative Eta";
1792 label = "Relative Phi";
1799 label = "Relative angle of Jet and Reaction Plane";
1813 label = "track charge";
1820 label = "leading jet";
1826 case 9: // need to update
1827 label = "leading track";
1834 } // end of getting dim-params
1836 //_________________________________________________
1837 // From CF event mixing code PhiCorrelations
1838 TObjArray* AliAnalysisTaskEmcalJetHadEPpid::CloneAndReduceTrackList(TObjArray* tracksME)
1840 // clones a track list by using AliPicoTrack which uses much less memory (used for event mixing)
1841 TObjArray* tracksClone = new TObjArray;
1842 tracksClone->SetOwner(kTRUE);
1844 // ===============================
1846 // cout << "RM Hybrid track : " << i << " " << particle->Pt() << endl;
1848 //cout << "nEntries " << tracks->GetEntriesFast() <<endl;
1849 for (Int_t i=0; i<tracksME->GetEntriesFast(); i++) { // AOD/general case
1850 AliVParticle* particle = (AliVParticle*) tracksME->At(i); // AOD/general case
1851 if(TMath::Abs(particle->Eta())>fTrkEta) continue;
1852 if(particle->Pt()<0.15)continue;
1856 Double_t trackpt=particle->Pt(); // track pT
1859 trklabel=particle->GetLabel();
1860 //cout << "TRACK_LABEL: " << particle->GetLabel()<<endl;
1863 if(trackpt<0.5) hadbin=0;
1864 else if(trackpt<1) hadbin=1;
1865 else if(trackpt<2) hadbin=2;
1866 else if(trackpt<3) hadbin=3;
1867 else if(trackpt<5) hadbin=4;
1868 else if(trackpt<8) hadbin=5;
1869 else if(trackpt<20) hadbin=6;
1873 if(hadbin>-1 && trklabel>-1 && trklabel <3) fHistTrackEtaPhi[trklabel][hadbin]->Fill(particle->Eta(),particle->Phi());
1874 if(hadbin>-1) fHistTrackEtaPhi[3][hadbin]->Fill(particle->Eta(),particle->Phi());
1876 if(hadbin>-1) fHistTrackEtaPhi[hadbin]->Fill(particle->Eta(),particle->Phi()); // TEST
1879 tracksClone->Add(new AliPicoTrack(particle->Pt(), particle->Eta(), particle->Phi(), particle->Charge(), 0, 0, 0, 0));
1880 } // end of looping through tracks
1885 //____________________________________________________________________________________________
1886 THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseFPID(const char* name, UInt_t entries)
1888 // generate new THnSparseF PID, axes are defined in GetDimParams()
1890 UInt_t tmp = entries;
1893 tmp = tmp &~ -tmp; // clear lowest bit
1896 TString hnTitle(name);
1897 const Int_t dim = count;
1904 while(c<dim && i<32){
1908 GetDimParamsPID(i, label, nbins[c], xmin[c], xmax[c]);
1909 hnTitle += Form(";%s",label.Data());
1917 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1918 } // end of NewTHnSparseF PID
1920 //________________________________________________________________________________
1921 void AliAnalysisTaskEmcalJetHadEPpid::GetDimParamsPID(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1923 // stores label and binning of axis for THnSparse
1924 const Double_t pi = TMath::Pi();
1929 label = "V0 centrality (%)";
1936 label = "Track p_{T}";
1937 nbins = 80; //300; // 750
1943 label = "Charge of Track";
1950 label = "Relative Eta of Track and Jet";
1957 label = "Relative Phi of Track and Jet";
1964 label = "leading jet";
1978 label = "Relative angle: Jet and Reaction Plane";
1985 label = "Jet p_{T}";
1992 label = "N-Sigma of pions in TPC";
1999 label = "N-Sigma of pions in TOF";
2006 label = "TPC PID determination";
2013 label = "ITS PID determination";
2020 label = "TOF PID determination";
2027 label = "N-Sigma of protons in TPC";
2034 label = "N-Sigma of kaons in TPC";
2041 label = "N-Sigma of pions in ITS";
2048 label = "N-Sigma of protons in ITS";
2055 label = "N-Sigma of kaons in ITS";
2062 label = "N-Sigma of protons in TOF";
2069 label = "N-Sigma of kaons in TOF";
2076 } // end of get dimension parameters PID
2078 void AliAnalysisTaskEmcalJetHadEPpid::Terminate(Option_t *) {
2079 cout<<"#########################"<<endl;
2080 cout<<"#### DONE RUNNING!!! ####"<<endl;
2081 cout<<"#########################"<<endl;
2082 } // end of terminate
2084 //________________________________________________________________________
2085 Int_t AliAnalysisTaskEmcalJetHadEPpid::AcceptMyJet(AliEmcalJet *jet) {
2086 //applies all jet cuts except pt
2087 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax)) return 0;
2088 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax)) return 0;
2089 if (jet->Area()<fAreacut) return 0;
2090 // prevents 0 area jets from sneaking by when area cut == 0
2091 if (jet->Area()==0) return 0;
2092 //exclude jets with extremely high pt tracks which are likely misreconstructed
2093 if(jet->MaxTrackPt()>100) return 0;
2095 //passed all above cuts
2099 //void AliAnalysisTaskEmcalJetHadEPpid::FillAnalysisSummaryHistogram() const
2100 void AliAnalysisTaskEmcalJetHadEPpid::SetfHistPIDcounterLabels(TH1* h) const
2102 // fill the analysis summary histrogram, saves all relevant analysis settigns
2103 h->GetXaxis()->SetBinLabel(1, "TPC: Unidentified");
2104 h->GetXaxis()->SetBinLabel(2, "TPC: Pion");
2105 h->GetXaxis()->SetBinLabel(3, "TPC: Kaon");
2106 h->GetXaxis()->SetBinLabel(4, "TPC: Proton");
2107 h->GetXaxis()->SetBinLabel(5, "ITS: Unidentified");
2108 h->GetXaxis()->SetBinLabel(6, "ITS: Pion");
2109 h->GetXaxis()->SetBinLabel(7, "ITS: Kaon");
2110 h->GetXaxis()->SetBinLabel(8, "ITS: Proton");
2111 h->GetXaxis()->SetBinLabel(9, "TOF: Unidentified");
2112 h->GetXaxis()->SetBinLabel(10, "TOF: Pion");
2113 h->GetXaxis()->SetBinLabel(11, "TOF: Kaon");
2114 h->GetXaxis()->SetBinLabel(12, "TOF: Proton");
2115 h->GetXaxis()->SetBinLabel(14, "Unidentified tracks");
2117 // set x-axis labels vertically
2118 h->LabelsOption("v");
2121 //void AliAnalysisTaskEmcalJetHadEPpid::FillAnalysisSummaryHistogram() const
2122 void AliAnalysisTaskEmcalJetHadEPpid::SetfHistQAcounterLabels(TH1* h) const
2124 // label bins of the analysis event summary
2125 h->GetXaxis()->SetBinLabel(1, "All events started");
2126 h->GetXaxis()->SetBinLabel(2, "object check");
2127 h->GetXaxis()->SetBinLabel(3, "aod/esd check");
2128 h->GetXaxis()->SetBinLabel(4, "centrality check");
2129 h->GetXaxis()->SetBinLabel(5, "zvertex check");
2130 h->GetXaxis()->SetBinLabel(6, "list check");
2131 h->GetXaxis()->SetBinLabel(7, "track/jet pointer check");
2132 h->GetXaxis()->SetBinLabel(8, "tracks & jets < than 1 check");
2133 h->GetXaxis()->SetBinLabel(9, "after track/jet loop to get highest pt");
2134 h->GetXaxis()->SetBinLabel(10, "accepted jets");
2135 h->GetXaxis()->SetBinLabel(11, "jets meeting pt threshold");
2136 h->GetXaxis()->SetBinLabel(12, "accepted tracks in events w/ trigger jet");
2137 h->GetXaxis()->SetBinLabel(13, "after AliVEvent & fPIDResponse");
2138 h->GetXaxis()->SetBinLabel(14, "events before event mixing");
2139 h->GetXaxis()->SetBinLabel(15, "mixed events w/ pool");
2140 h->GetXaxis()->SetBinLabel(16, "event mixing: jets");
2141 h->GetXaxis()->SetBinLabel(17, "event mixing: nMix");
2142 h->GetXaxis()->SetBinLabel(18, "event mixing: nbackground tracks");
2143 h->GetXaxis()->SetBinLabel(19, "event mixing: THE END");
2145 // set x-axis labels vertically
2146 h->LabelsOption("v");
2149 void AliAnalysisTaskEmcalJetHadEPpid::SetfHistEvtSelQALabels(TH1* h) const
2151 // label bins of the analysis trigger selection summary
2152 h->GetXaxis()->SetBinLabel(1, "no trigger");
2153 h->GetXaxis()->SetBinLabel(2, "kAny");
2154 h->GetXaxis()->SetBinLabel(3, "kAnyINT");
2155 h->GetXaxis()->SetBinLabel(4, "kMB");
2156 h->GetXaxis()->SetBinLabel(5, "kINT7");
2157 h->GetXaxis()->SetBinLabel(6, "kEMC1");
2158 h->GetXaxis()->SetBinLabel(7, "kEMC7");
2159 h->GetXaxis()->SetBinLabel(8, "kEMC8");
2160 h->GetXaxis()->SetBinLabel(9, "kEMCEJE");
2161 h->GetXaxis()->SetBinLabel(10, "kEMCEGA");
2162 h->GetXaxis()->SetBinLabel(11, "kCentral");
2163 h->GetXaxis()->SetBinLabel(12, "kSemiCentral");
2164 h->GetXaxis()->SetBinLabel(13, "kINT8");
2165 h->GetXaxis()->SetBinLabel(14, "kEMCEJE or kMB");
2166 h->GetXaxis()->SetBinLabel(15, "kEMCEGA or kMB");
2167 h->GetXaxis()->SetBinLabel(16, "kAnyINT or kMB");
2168 h->GetXaxis()->SetBinLabel(17, "kEMCEJE & kMB");
2169 h->GetXaxis()->SetBinLabel(18, "kEMCEGA & kMB");
2170 h->GetXaxis()->SetBinLabel(19, "kAnyINT & kMB");
2173 // set x-axis labels vertically
2174 h->LabelsOption("v");
2175 //h->LabelsDeflate("X");
2178 //______________________________________________________________________
2179 THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseFCorr(const char* name, UInt_t entries) {
2180 // generate new THnSparseD, axes are defined in GetDimParamsD()
2182 UInt_t tmp = entries;
2185 tmp = tmp &~ -tmp; // clear lowest bit
2188 TString hnTitle(name);
2189 const Int_t dim = count;
2196 while(c<dim && i<32){
2200 GetDimParamsCorr(i, label, nbins[c], xmin[c], xmax[c]);
2201 hnTitle += Form(";%s",label.Data());
2209 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
2210 } // end of NewTHnSparseF
2212 //______________________________________________________________________________________________
2213 void AliAnalysisTaskEmcalJetHadEPpid::GetDimParamsCorr(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
2215 //stores label and binning of axis for THnSparse
2216 const Double_t pi = TMath::Pi();
2221 label = "V0 centrality (%)";
2228 label = "Jet p_{T}";
2235 label = "Relative angle: Jet and Reaction Plane";
2249 label = "Jet p_{T} corrected with Local Rho";
2256 label = "Jet p_{T} corrected with Global Rho";
2263 } // end of Correction (ME) sparse
2265 //________________________________________________________________________
2266 //Int_t AliAnalysisTaskEmcalJetHadEPpid::AcceptFlavourJet(AliEmcalJet* fljet, Int_t NUM, Int_t NUM2, Int_t NUM3) {
2267 Int_t AliAnalysisTaskEmcalJetHadEPpid::AcceptFlavourJet(AliEmcalJet* fljet, Int_t NUM) {
2268 // Get jet if accepted for given flavour tag
2269 // If jet not accepted return 0
2271 AliError(Form("%s:Jet not found",GetName()));
2275 Int_t flavNUM = -99;//, flavNUM2 = -99, flavNUM3 = -99; FIXME commented out to avoid compiler warning
2281 // from the AliEmcalJet class, the tagging enumerator
2283 kDStar = 1<<0, kD0 = 1<<1,
2284 kSig1 = 1<<2, kSig2 = 1<<3,
2285 kBckgrd1 = 1<<4, kBckgrd2 = 1<<5, kBckgrd3 = 1<<6
2287 // bit 0 = no tag, bit 1 = Dstar, bit 2 = D0 and so forth...
2290 // get flavour of jet (if any)
2292 flav = fljet->GetFlavour();
2294 // cases (for now..)
2295 // 3 = electron rich, 5 = hadron (bkgrd) rich
2296 // if flav < 1, its not tagged, so return kFALSE (0)
2297 if(flav < 1) return 0;
2299 // if flav is not equal to what we want then return kFALSE (0)
2300 //if(flav != flavNUM && flav != flavNUM2 && flav != flavNUM3) return 0;
2301 if(flav != flavNUM) return 0;
2303 // we have the flavour we want, so return kTRUE (1)
2304 //if(flav == flavNUM || flav == flavNUM2 || flav == flavNUM3) return 1;
2305 if(flav == flavNUM) return 1;
2307 // we by default have a flavour tagged jet