]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHadEPpid.cxx
changed binning, sparse axis used, removed unused code
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalJetHadEPpid.cxx
CommitLineData
fc392675 1// Jet-Hadron Correlations PID
2// Event plane dependence task.
3//
4// Author: J Mazer
5
6// task head include
7#include "AliAnalysisTaskEmcalJetHadEPpid.h"
8
9// general ROOT includes
10#include <TCanvas.h>
11#include <TChain.h>
12#include <TClonesArray.h>
13#include <TH1F.h>
14#include <TH2F.h>
15#include <TH3F.h>
16#include <THnSparse.h>
17#include <TList.h>
18#include <TLorentzVector.h>
19#include <TParameter.h>
20#include <TParticle.h>
21#include <TTree.h>
22#include <TVector3.h>
23#include <TObjArray.h>
24
25// AliROOT includes
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"
39
40// Localized Rho includes
41#include "AliLocalRhoParameter.h"
42#include "AliAnalysisTaskLocalRho.h"
43
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"
3263f852 50#include "AliESDtrackCuts.h"
fc392675 51
52// PID includes
53#include "AliPIDResponse.h"
54#include "AliTPCPIDResponse.h"
55#include "AliESDpid.h"
56
57// magnetic field includes
58#include "TGeoGlobalMagField.h"
59#include "AliMagF.h"
60
8ee2d316 61// container includes
62#include "AliJetContainer.h"
63#include "AliParticleContainer.h"
64#include "AliClusterContainer.h"
65
5e2539d9 66using std::cout;
67using std::endl;
68
fc392675 69ClassImp(AliAnalysisTaskEmcalJetHadEPpid)
70
71//________________________________________________________________________
72AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid() :
73 AliAnalysisTaskEmcalJet("correlations",kFALSE),
74 fPhimin(-10), fPhimax(10),
75 fEtamin(-0.9), fEtamax(0.9),
f1ce4cc3 76 fAreacut(0.0), fTrkBias(5), fClusBias(5), fTrkEta(0.9),
77 fJetPtcut(15.0), fJetRad(0.4), fConstituentCut(0.15),
3263f852 78 fesdTrackCuts(0),
a409c5ba 79 fDoEventMixing(0), fMixingTracks(50000), fNMIXtracks(5000), fNMIXevents(5),
d60e724e 80 fTriggerEventType(AliVEvent::kAny), fMixingEventType(AliVEvent::kAny),
8ee2d316 81 doPlotGlobalRho(0), doVariableBinning(0), dovarbinTHnSparse(0),
daa728b0 82 makeQAhistos(0), makeBIAShistos(0), makeextraCORRhistos(0), makeoldJEThadhistos(0),
139e13f4 83 allpidAXIS(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
56523939 84 doComments(0),
85 doFlavourJetAnalysis(0), fJetFlavTag(-99),
86 fBeam(kNA),
fc392675 87 fLocalRhoVal(0),
56523939 88 fTracksName(""), fTracksNameME(""), fJetsName(""),
fc392675 89 event(0),
aa5f3717 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
fc392675 93 fPoolMgr(0x0),
94 fPIDResponse(0x0), fTPCResponse(),
d60e724e 95 fESD(0), fAOD(0), fVevent(0),
96 fHistEventQA(0), fHistEventSelectionQA(0),
a409c5ba 97 fHistCentZvertGA(0), fHistCentZvertJE(0), fHistCentZvertMB(0), fHistCentZvertAny(0),
fc392675 98 fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
99 fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
100 fHistZvtx(0), fHistMult(0),
101 fHistJetPhi(0), fHistTrackPhi(0),
d60e724e 102 fHistLocalRhoJetpt(0),
fc392675 103 fHistJetHaddPhiIN(0), fHistJetHaddPhiOUT(0), fHistJetHaddPhiMID(0),
104 fHistJetHaddPhiBias(0), fHistJetHaddPhiINBias(0), fHistJetHaddPhiOUTBias(0), fHistJetHaddPhiMIDBias(0),
105 fHistMEdPHI(0),
106 fHistTrackPtallcent(0),
107 fHistJetEtaPhi(0), fHistJetHEtaPhi(0),
108 fHistSEphieta(0), fHistMEphieta(0),
109 fHistJetHaddPHI(0),
110 fHistPID(0),
daa728b0 111 fhnPID(0x0), fhnMixedEvents(0x0), fhnJH(0x0), fhnCorr(0x0),
8ee2d316 112 fJetsCont(0), fTracksCont(0), fCaloClustersCont(0),
113 fContainerAllJets(0), fContainerPIDJets(1)
fc392675 114{
115 // Default Constructor
116 for(Int_t ilab=0; ilab<4; ilab++){
117 for(Int_t ipta=0; ipta<7; ipta++){
72a4d320 118 //fHistTrackEtaPhi[ilab][ipta]=0; // keep out for now
fc392675 119 } // end of pt-associated loop
120 } // end of lab loop
121
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
128
daa728b0 129 for(Int_t icent = 0; icent<6; ++icent){
fc392675 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;
135 } // end of eta loop
136 } // end of pt-jet loop
137 } // end of centrality loop
138
139 // centrality dependent histo's
140 for (Int_t i = 0;i<6;++i){
daa728b0 141 fHistJetPt[i] = 0;
142 fHistJetPtBias[i] = 0;
143 fHistJetPtTT[i] = 0;
144 fHistAreavsRawPt[i] = 0;
fc392675 145 fHistJetPtvsTrackPt[i] = 0;
146 fHistRawJetPtvsTrackPt[i] = 0;
147 fHistTrackPt[i] = 0;
148 fHistEP0[i] = 0;
149 fHistEP0A[i] = 0;
150 fHistEP0C[i] = 0;
151 fHistEPAvsC[i] = 0;
8ee2d316 152 fHistJetPtcorrGlRho[i] = 0;
fc392675 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;
169 }
170
171 SetMakeGeneralHistograms(kTRUE);
172
fc392675 173}
174
175//________________________________________________________________________
176AliAnalysisTaskEmcalJetHadEPpid::AliAnalysisTaskEmcalJetHadEPpid(const char *name) :
177 AliAnalysisTaskEmcalJet(name,kTRUE),
178 fPhimin(-10), fPhimax(10),
179 fEtamin(-0.9), fEtamax(0.9),
f1ce4cc3 180 fAreacut(0.0), fTrkBias(5), fClusBias(5), fTrkEta(0.9),
181 fJetPtcut(15.0), fJetRad(0.4), fConstituentCut(0.15),
3263f852 182 fesdTrackCuts(0),
a409c5ba 183 fDoEventMixing(0), fMixingTracks(50000), fNMIXtracks(5000), fNMIXevents(5),
d60e724e 184 fTriggerEventType(AliVEvent::kAny), fMixingEventType(AliVEvent::kAny),
8ee2d316 185 doPlotGlobalRho(0), doVariableBinning(0), dovarbinTHnSparse(0),
daa728b0 186 makeQAhistos(0), makeBIAShistos(0), makeextraCORRhistos(0), makeoldJEThadhistos(0),
139e13f4 187 allpidAXIS(0), fcutType("EMCAL"), doPID(0), doPIDtrackBIAS(0),
56523939 188 doComments(0),
189 doFlavourJetAnalysis(0), fJetFlavTag(-99),
190 fBeam(kNA),
fc392675 191 fLocalRhoVal(0),
56523939 192 fTracksName(""), fTracksNameME(""), fJetsName(""),
fc392675 193 event(0),
aa5f3717 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
fc392675 197 fPoolMgr(0x0),
198 fPIDResponse(0x0), fTPCResponse(),
d60e724e 199 fESD(0), fAOD(0), fVevent(0),
200 fHistEventQA(0), fHistEventSelectionQA(0),
a409c5ba 201 fHistCentZvertGA(0), fHistCentZvertJE(0), fHistCentZvertMB(0), fHistCentZvertAny(0),
fc392675 202 fHistTPCdEdX(0), fHistITSsignal(0), //fHistTOFsignal(0),
203 fHistRhovsCent(0), fHistNjetvsCent(0), fHistCentrality(0),
204 fHistZvtx(0), fHistMult(0),
205 fHistJetPhi(0), fHistTrackPhi(0),
d60e724e 206 fHistLocalRhoJetpt(0),
fc392675 207 fHistJetHaddPhiIN(0), fHistJetHaddPhiOUT(0), fHistJetHaddPhiMID(0),
208 fHistJetHaddPhiBias(0), fHistJetHaddPhiINBias(0), fHistJetHaddPhiOUTBias(0), fHistJetHaddPhiMIDBias(0),
209 fHistMEdPHI(0),
210 fHistTrackPtallcent(0),
211 fHistJetEtaPhi(0), fHistJetHEtaPhi(0),
212 fHistSEphieta(0), fHistMEphieta(0),
213 fHistJetHaddPHI(0),
214 fHistPID(0),
daa728b0 215 fhnPID(0x0), fhnMixedEvents(0x0), fhnJH(0x0), fhnCorr(0x0),
8ee2d316 216 fJetsCont(0), fTracksCont(0), fCaloClustersCont(0),
217 fContainerAllJets(0), fContainerPIDJets(1)
fc392675 218{
219 // Default Constructor
220 for(Int_t ilab=0; ilab<4; ilab++){
221 for(Int_t ipta=0; ipta<7; ipta++){
72a4d320 222 //fHistTrackEtaPhi[ilab][ipta]=0; //keep out for now
fc392675 223 } // end of pt-associated loop
224 } // end of lab loop
225
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
fc392675 232
daa728b0 233 for(Int_t icent = 0; icent<6; ++icent){
fc392675 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;
239 } // end of eta loop
240 } // end of pt-jet loop
241 } // end of centrality loop
242
243 // centrality dependent histo's
244 for (Int_t i = 0;i<6;++i){
daa728b0 245 fHistJetPt[i] = 0;
246 fHistJetPtBias[i] = 0;
247 fHistJetPtTT[i] = 0;
248 fHistAreavsRawPt[i] = 0;
fc392675 249 fHistJetPtvsTrackPt[i] = 0;
250 fHistRawJetPtvsTrackPt[i] = 0;
251 fHistTrackPt[i] = 0;
252 fHistEP0[i] = 0;
253 fHistEP0A[i] = 0;
254 fHistEP0C[i] = 0;
255 fHistEPAvsC[i] = 0;
8ee2d316 256 fHistJetPtcorrGlRho[i] = 0;
fc392675 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;
273 }
274
275 SetMakeGeneralHistograms(kTRUE);
276
fc392675 277}
278
279//_______________________________________________________________________
280AliAnalysisTaskEmcalJetHadEPpid::~AliAnalysisTaskEmcalJetHadEPpid()
281{
282 // destructor
283 if (fOutput) {
284 delete fOutput;
285 fOutput = 0;
286 }
287}
288
289//________________________________________________________________________
290void AliAnalysisTaskEmcalJetHadEPpid::UserCreateOutputObjects()
291{ // This is called ONCE!
292 if (!fCreateHisto) return;
293 AliAnalysisTaskEmcalJet::UserCreateOutputObjects();
294 OpenFile(1); // do I need the 1?
295
8ee2d316 296 // char array for naming histograms
297 int nchar = 200;
298 char name[nchar];
299
daa728b0 300 // strings for titles
301 TString name1;
302 TString title1;
303
fc392675 304 // create histograms that arn't array
daa728b0 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());
d60e724e 310 fHistLocalRhoJetpt = new TH1F("fHistLocalRhoJetpt","Local Rho corrected Jet p_{T}", 50, -50, 200);
311
a409c5ba 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);
321
d60e724e 322 // Event QA histo
323 fHistEventQA = new TH1F("fHistEventQA", "Event Counter at checkpoints in code", 20, 0.5, 20.5);
f9b4eee4 324 SetfHistQAcounterLabels(fHistEventQA);
325 fOutput->Add(fHistEventQA);
d60e724e 326
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);
331
daa728b0 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);
d60e724e 338 fOutput->Add(fHistLocalRhoJetpt);
daa728b0 339
340 // create histo's used for general QA
8ee2d316 341 if (makeQAhistos) {
a409c5ba 342 fHistTPCdEdX = new TH2F("TPCdEdX", "TPCdEdX", 2000, 0.0, 100.0, 500, 0, 500);
8ee2d316 343 fHistITSsignal = new TH2F("ITSsignal", "ITSsignal", 2000, 0.0, 100.0, 500, 0, 500);
daa728b0 344 // fHistTOFsignal = new TH2F("TOFsignal", "TOFsignal", 2000, 0.0, 100.0, 500, 0, 500);
8ee2d316 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);
daa728b0 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
8ee2d316 355
356 // add to output list
d60e724e 357 fOutput->Add(fHistTPCdEdX);
8ee2d316 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);
daa728b0 365 fOutput->Add(fHistTrackPtallcent);
366 fOutput->Add(fHistJetEtaPhi);
367 fOutput->Add(fHistJetHEtaPhi);
368 fOutput->Add(fHistSEphieta);
369 fOutput->Add(fHistMEphieta);
8ee2d316 370
72a4d320 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
8ee2d316 378
daa728b0 379 for (Int_t i = 0;i<6;++i){
8ee2d316 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]);
384
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]);
389
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]);
394
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]);
399
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]);
404
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]);
409
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]);
414
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]);
daa728b0 419
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]);
424
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]);
429
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]);
434
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]);
439
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
fc392675 444
daa728b0 445 } // QA histo switch
446
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());
452
453 // add to output list
454 fOutput->Add(fHistJetHaddPhiBias);
455 fOutput->Add(fHistJetHaddPhiINBias);
456 fOutput->Add(fHistJetHaddPhiOUTBias);
457 fOutput->Add(fHistJetHaddPhiMIDBias);
458
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]);
fc392675 464
daa728b0 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]);
fc392675 469
8ee2d316 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]);
daa728b0 474 } // end of centrality loop
475 } // bias histos
476
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]);
482
483 snprintf(name, nchar, "fHistJetPt_%i",icent);
484 fHistJetPt[icent] = new TH1F(name,name,200,0,200);
485 fOutput->Add(fHistJetPt[icent]);
486
487 snprintf(name, nchar, "fHistJetPtBias_%i",icent);
488 fHistJetPtBias[icent] = new TH1F(name,name,200,0,200);
489 fOutput->Add(fHistJetPtBias[icent]);
490
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]);
496
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]);
500
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]);
504 } // end of eta loop
505 } // end of pt-jet loop
506 } // end of centrality loop
507 } // make JetHadhisto old
508
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]);
514
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]);
518
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]);
522
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
527
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]);
533
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]);
538
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]);
8ee2d316 543
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]);
548
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]);
553
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]);
558
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]);
563
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]);
568
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
574 }
3263f852 575
576 // variable binned pt for THnSparse's
e56c3f6e 577 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};
578 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};
3263f852 579
e56c3f6e 580 // tracks: 51, jets: 26
3263f852 581 // number of bins you tell histogram should be (# in array - 1) because the last bin
582 // is the right-most edge of the histogram
583 // i.e. this is for PT and there are 57 numbers (bins) thus we have 56 bins in our histo
584 Int_t nbinsjetPT = sizeof(xlowjetPT)/sizeof(Double_t) - 1;
585 Int_t nbinstrPT = sizeof(xlowtrPT)/sizeof(Double_t) - 1;
8ee2d316 586
fc392675 587 // set up jet-hadron sparse
8ce3d590 588 UInt_t bitcodeMESE = 0; // bit coded, see GetDimParams() below
589 UInt_t bitcodePID = 0; // bit coded, see GetDimParamsPID() below
daa728b0 590 UInt_t bitcodeCorr = 0; // bit coded, see GetDimparamsCorr() below
8ce3d590 591 bitcodeMESE = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6; // | 1<<7 | 1<<8 | 1<<9;
592 if(fDoEventMixing) {
593 fhnJH = NewTHnSparseF("fhnJH", bitcodeMESE);
3263f852 594
595 if(dovarbinTHnSparse){
596 fhnJH->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
597 fhnJH->GetAxis(2)->Set(nbinstrPT, xlowtrPT);
598 }
599
600 fOutput->Add(fhnJH);
8ce3d590 601 }
fc392675 602
f9b4eee4 603 bitcodeCorr = 1<<0 | 1<<1 | 1<<2 | 1<<3; // | 1<<4 | 1<<5;
e56c3f6e 604 fhnCorr = NewTHnSparseFCorr("fhnCorr", bitcodeCorr);
3263f852 605 if(dovarbinTHnSparse) fhnCorr->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
3badfe33 606 fOutput->Add(fhnCorr);
f1ce4cc3 607
3badfe33 608 /*
609 Double_t centralityBins[nCentralityBins+1];
610 for(Int_t ic=0; ic<nCentralityBins+1; ic++){
611 if(ic==nCentralityBins) centralityBins[ic]=500;
612 else centralityBins[ic]=10.0*ic;
613 }
614 */
615
616 // set up centrality bins for mixed events
617 // for pp we need mult bins for event mixing. Create binning here, to also make a histogram from it
56523939 618 Int_t nCentralityBinspp = 8;
3badfe33 619 //Double_t centralityBinspp[nCentralityBinspp+1];
56523939 620 Double_t centralityBinspp[9] = {0.0, 4., 9, 15, 25, 35, 55, 100.0, 500.0};
3badfe33 621
622 // Setup for Pb-Pb collisions
a409c5ba 623 Int_t nCentralityBinsPbPb = 10; //100;
3badfe33 624 Double_t centralityBinsPbPb[nCentralityBinsPbPb+1];
625 for(Int_t ic=0; ic<nCentralityBinsPbPb; ic++){
a409c5ba 626 centralityBinsPbPb[ic]=10.0*ic; //1.0*ic;
fc392675 627 }
628
56523939 629 if(fBeam == 0) fHistMult = new TH1F("fHistMult","multiplicity",nCentralityBinspp,centralityBinspp);
630 if(fBeam == 1) fHistMult = new TH1F("fHistMult","multiplicity",nCentralityBinsPbPb,centralityBinsPbPb);
8ee2d316 631// fOutput->Add(fHistMult);
fc392675 632
633 // Event Mixing
634 Int_t trackDepth = fMixingTracks;
635 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
636 Int_t nZvtxBins = 5+1+5;
637 Double_t vertexBins[] = { -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10};
638 Double_t* zvtxbin = vertexBins;
56523939 639 if(fBeam == 0) fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBinspp, centralityBinspp, nZvtxBins, zvtxbin);
640 if(fBeam == 1) fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBinsPbPb, centralityBinsPbPb, nZvtxBins, zvtxbin);
fc392675 641
642 // set up event mixing sparse
643 if(fDoEventMixing){
8ce3d590 644 bitcodeMESE = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6; // | 1<<7 | 1<<8 | 1<<9;
645 fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", bitcodeMESE);
fc392675 646
8ce3d590 647 // set up some variable binning of the sparse
3263f852 648 if(dovarbinTHnSparse){
649 fhnMixedEvents->GetAxis(1)->Set(nbinsjetPT, xlowjetPT);
650 fhnMixedEvents->GetAxis(2)->Set(nbinstrPT, xlowtrPT);
651 }
fc392675 652
3263f852 653 fOutput->Add(fhnMixedEvents);
654 } // end of do-eventmixing
fc392675 655
656 // set up PID sparse
657 if(doPID){
8ee2d316 658 // ****************************** PID *****************************************************
659 // set up PID handler
660 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
661 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
662 if(!inputHandler) {
663 AliFatal("Input handler needed");
f1ce4cc3 664 return;
8ee2d316 665 }
666
667 // PID response object
668 fPIDResponse = inputHandler->GetPIDResponse();
669 if (!fPIDResponse) {
670 AliError("PIDResponse object was not created");
f1ce4cc3 671 return;
8ee2d316 672 }
673 // *****************************************************************************************
674
675 // PID counter
d60e724e 676 fHistPID = new TH1F("fHistPID","PID Counter", 15, 0.5, 15.5);
8ee2d316 677 SetfHistPIDcounterLabels(fHistPID);
678 fOutput->Add(fHistPID);
679
139e13f4 680 if(allpidAXIS) {
8ce3d590 681 bitcodePID = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
daa728b0 682 1<<10 | 1<<11 | 1<<12 | 1<<13 | 1<<14 | 1<<15 | 1<<16 | 1<<17 | 1<<18 | 1<<19 |
139e13f4 683 1<<20;
8ce3d590 684 fhnPID = NewTHnSparseFPID("fhnPID", bitcodePID);
139e13f4 685 } else {
8ce3d590 686 bitcodePID = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 | 1<<7 | 1<<8 | 1<<9 |
139e13f4 687 1<<10 | 1<<11 | 1<<12 | 1<<13;
8ce3d590 688 fhnPID = NewTHnSparseFPID("fhnPID", bitcodePID);
139e13f4 689 }
8ee2d316 690
8ce3d590 691 // set some variable binning of sparse
8ee2d316 692 if(dovarbinTHnSparse){
139e13f4 693 fhnPID->GetAxis(1)->Set(nbinstrPT, xlowtrPT);
3263f852 694 fhnPID->GetAxis(8)->Set(nbinsjetPT, xlowjetPT);
8ee2d316 695 }
696
fc392675 697 fOutput->Add(fhnPID);
698 } // end of do-PID
699
fc392675 700 // =========== Switch on Sumw2 for all histos ===========
701 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
702 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
703 if (h1){
704 h1->Sumw2();
705 continue;
706 }
707 TH2 *h2 = dynamic_cast<TH2*>(fOutput->At(i));
708 if (h2){
709 h2->Sumw2();
710 continue;
711 }
712 TH3 *h3 = dynamic_cast<TH3*>(fOutput->At(i));
713 if (h3){
714 h3->Sumw2();
715 continue;
716 }
717 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
718 if(hn)hn->Sumw2();
719 }
720
721 PostData(1, fOutput);
722}
723
724//_________________________________________________________________________
725void AliAnalysisTaskEmcalJetHadEPpid::ExecOnce()
726{
727 AliAnalysisTaskEmcalJet::ExecOnce();
8ee2d316 728
729 if (fJetsCont && fJetsCont->GetArray() == 0) fJetsCont = 0;
730 if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
731 if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;
fc392675 732}
733
734//_________________________________________________________________________
735Bool_t AliAnalysisTaskEmcalJetHadEPpid::Run()
736{ // Main loop called for each event
737 // TEST TEST TEST TEST for OBJECTS!
3badfe33 738
f9b4eee4 739 fHistEventQA->Fill(1); // All Events that get entered
740
8ce3d590 741 // check and fill a Event Selection QA histogram for different trigger selections
d60e724e 742 UInt_t trig = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
743 if(trig == 0) fHistEventSelectionQA->Fill(1);
744 if(trig & AliVEvent::kAny) fHistEventSelectionQA->Fill(2);
745 if(trig & AliVEvent::kAnyINT) fHistEventSelectionQA->Fill(3);
746 if(trig & AliVEvent::kMB) fHistEventSelectionQA->Fill(4);
747 if(trig & AliVEvent::kINT7) fHistEventSelectionQA->Fill(5);
748 if(trig & AliVEvent::kEMC1) fHistEventSelectionQA->Fill(6);
749 if(trig & AliVEvent::kEMC7) fHistEventSelectionQA->Fill(7);
750 if(trig & AliVEvent::kEMC8) fHistEventSelectionQA->Fill(8);
751 if(trig & AliVEvent::kEMCEJE) fHistEventSelectionQA->Fill(9);
752 if(trig & AliVEvent::kEMCEGA) fHistEventSelectionQA->Fill(10);
753 if(trig & AliVEvent::kCentral) fHistEventSelectionQA->Fill(11);
754 if(trig & AliVEvent::kSemiCentral) fHistEventSelectionQA->Fill(12);
755 if(trig & AliVEvent::kINT8) fHistEventSelectionQA->Fill(13);
756
757 if(trig & (AliVEvent::kEMCEJE | AliVEvent::kMB)) fHistEventSelectionQA->Fill(14);
758 if(trig & (AliVEvent::kEMCEGA | AliVEvent::kMB)) fHistEventSelectionQA->Fill(15);
759 if(trig & (AliVEvent::kAnyINT | AliVEvent::kMB)) fHistEventSelectionQA->Fill(16);
760
8ce3d590 761 //if(trig & (AliVEvent::kEMCEJE && AliVEvent::kMB)) fHistEventSelectionQA->Fill(17);
762 //if(trig & (AliVEvent::kEMCEGA && AliVEvent::kMB)) fHistEventSelectionQA->Fill(18);
763 //if(trig & (AliVEvent::kAnyINT && AliVEvent::kMB)) fHistEventSelectionQA->Fill(19);
d60e724e 764
8ce3d590 765 // see if we are running on PbPb and try and get LocalRho object
d60e724e 766 if(GetBeamType() == 1) {
767 if(!fLocalRho){
768 AliError(Form("Couldn't get fLocalRho object, try to get it from Event based on name\n"));
769 fLocalRho = GetLocalRhoFromEvent(fLocalRhoName);
770 if(!fLocalRho) return kTRUE;
771 }
772 } // check for LocalRho object if PbPb data
773
fc392675 774 if(!fTracks){
775 AliError(Form("No fTracks object!!\n"));
776 return kTRUE;
777 }
778 if(!fJets){
779 AliError(Form("No fJets object!!\n"));
780 return kTRUE;
781 }
782
f9b4eee4 783 fHistEventQA->Fill(2); // events after object check
784
fc392675 785 // what kind of event do we have: AOD or ESD?
139e13f4 786 Bool_t useAOD;
787 if (dynamic_cast<AliAODEvent*>(InputEvent())) useAOD = kTRUE;
788 else useAOD = kFALSE;
789
fc392675 790 // if we have ESD event, set up ESD object
791 if(!useAOD){
792 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
793 if (!fESD) {
794 AliError(Form("ERROR: fESD not available\n"));
795 return kTRUE;
796 }
797 }
798
799 // if we have AOD event, set up AOD object
800 if(useAOD){
801 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
802 if(!fAOD) {
803 AliError(Form("ERROR: fAOD not available\n"));
804 return kTRUE;
805 }
806 }
807
f9b4eee4 808 fHistEventQA->Fill(3); // events after Aod/esd check
809
fc392675 810 // get centrality
811 Int_t centbin = GetCentBin(fCent);
8ee2d316 812 if (makeQAhistos) fHistCentrality->Fill(fCent); // won't be filled in pp collision (Keep this in mind!)
fc392675 813
3badfe33 814 // if we are on PbPb data do cut on centrality > 90%, else by default DON'T
815 if (GetBeamType() == 1) {
816 // apply cut to event on Centrality > 90%
817 if(fCent>90) return kTRUE;
818 }
8ee2d316 819
8ce3d590 820 // BEAM TYPE enumerator: kNA = -1, kpp = 0, kAA = 1, kpA = 2
821 // for pp analyses we will just use the first centrality bin
822 if(GetBeamType() == 0) if (centbin == -1) centbin = 0;
823 if(GetBeamType() == 1) if (centbin == -1) return kTRUE;
824
f9b4eee4 825 fHistEventQA->Fill(4); // events after centrality check
826
fc392675 827 // get vertex information
828 Double_t fvertex[3]={0,0,0};
829 InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
830 Double_t zVtx=fvertex[2];
8ee2d316 831 if (makeQAhistos) fHistZvtx->Fill(zVtx);
fc392675 832
833 // get z-vertex bin
834 //Int_t zVbin = GetzVertexBin(zVtx);
835
836 // apply zVtx cut
8ee2d316 837 if(fabs(zVtx)>10.0) return kTRUE;
fc392675 838
f9b4eee4 839 fHistEventQA->Fill(5); // events after zvertex check
840
fc392675 841 // create pointer to list of input event
842 TList *list = InputEvent()->GetList();
843 if(!list) {
844 AliError(Form("ERROR: list not attached\n"));
8ee2d316 845 return kTRUE;
fc392675 846 }
847
f9b4eee4 848 fHistEventQA->Fill(6); // events after list check
849
fc392675 850 // initialize TClonesArray pointers to jets and tracks
851 TClonesArray *jets = 0;
852 TClonesArray *tracks = 0;
3badfe33 853 TClonesArray *tracksME = 0;
fc392675 854
855 // get Tracks object
856 tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracks));
857 if (!tracks) {
858 AliError(Form("Pointer to tracks %s == 0", fTracks->GetName()));
859 return kTRUE;
860 } // verify existence of tracks
861
3badfe33 862 // get ME Tracks object
863 tracksME = dynamic_cast<TClonesArray*>(list->FindObject(fTracksNameME));
864 if (!tracksME) {
865 AliError(Form("Pointer to tracks %s == 0", fTracksNameME.Data()));
866 return kTRUE;
867 } // verify existence of tracks
868
fc392675 869 // get Jets object
870 jets = dynamic_cast<TClonesArray*>(list->FindObject(fJets));
871 if(!jets){
872 AliError(Form("Pointer to jets %s == 0", fJets->GetName()));
873 return kTRUE;
874 } // verify existence of jets
875
f9b4eee4 876 fHistEventQA->Fill(7); // events after track/jet pointer check
877
fc392675 878 // get number of jets and tracks
879 const Int_t Njets = jets->GetEntries();
880 const Int_t Ntracks = tracks->GetEntries();
881 if(Ntracks<1) return kTRUE;
882 if(Njets<1) return kTRUE;
883
f9b4eee4 884 fHistEventQA->Fill(8); // events after #track and jets < 1 check
885
8ee2d316 886 if (makeQAhistos) fHistMult->Fill(Ntracks); // fill multiplicity distribution
fc392675 887
888 // initialize track parameters
889 Int_t iTT=-1;
890 Double_t ptmax=-10;
a409c5ba 891 Int_t NtrackAcc = 0;
fc392675 892
3badfe33 893 fVevent = dynamic_cast<AliVEvent*>(InputEvent());
894 if (!fVevent) {
895 printf("ERROR: fVEvent not available\n");
896 return kTRUE;
897 }
898
a409c5ba 899 // fill event mixing QA
900 if(trig & AliVEvent::kEMCEGA) fHistCentZvertGA->Fill(fCent, zVtx);
901 if(trig & AliVEvent::kEMCEJE) fHistCentZvertJE->Fill(fCent, zVtx);
902 if(trig & AliVEvent::kMB) fHistCentZvertMB->Fill(fCent, zVtx);
903 if(trig & AliVEvent::kAny) fHistCentZvertAny->Fill(fCent, zVtx);
3badfe33 904
fc392675 905 // loop over tracks - to get hardest track (highest pt)
8ce3d590 906 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++){
907 AliVTrack *track = dynamic_cast<AliVTrack*>(tracks->At(iTracks));
908 if(!track){
909 AliError(Form("Couldn't get AliVtrack %d\n", iTracks));
e56c3f6e 910 continue;
3263f852 911 }
8ce3d590 912
daa728b0 913 // track cuts
fc392675 914 if(TMath::Abs(track->Eta())>0.9) continue;
915 if(track->Pt()<0.15) continue;
916 //iCount++;
56523939 917 NtrackAcc++;
918
fc392675 919 if(track->Pt()>ptmax){
920 ptmax=track->Pt(); // max pT track
921 iTT=iTracks; // trigger tracks
922 } // check if Pt>maxpt
923
8ee2d316 924 if (makeQAhistos) fHistTrackPhi->Fill(track->Phi());
925 if (makeQAhistos) fHistTrackPt[centbin]->Fill(track->Pt());
daa728b0 926 if (makeQAhistos) fHistTrackPtallcent->Fill(track->Pt());
fc392675 927 } // end of loop over tracks
928
fc392675 929 // get rho from event and fill relative histo's
930 fRho = GetRhoFromEvent(fRhoName);
931 fRhoVal = fRho->GetVal();
fc392675 932
8ee2d316 933 if (makeQAhistos) {
daa728b0 934 fHistRhovsdEP[centbin]->Fill(fRhoVal,fEPV0); // Global Rho vs delta Event Plane angle
8ee2d316 935 fHistRhovsCent->Fill(fCent,fRhoVal); // Global Rho vs Centrality
936 fHistEP0[centbin]->Fill(fEPV0);
937 fHistEP0A[centbin]->Fill(fEPV0A);
938 fHistEP0C[centbin]->Fill(fEPV0C);
939 fHistEPAvsC[centbin]->Fill(fEPV0A,fEPV0C);
940 }
941
fc392675 942 // initialize jet parameters
943 Int_t ijethi=-1;
944 Double_t highestjetpt=0.0;
945 Int_t passedTTcut=0;
946 Int_t NjetAcc = 0;
daa728b0 947 Double_t leadhadronPT = 0;
fc392675 948
949 // loop over jets in an event - to find highest jet pT and apply some cuts
950 for (Int_t ijet = 0; ijet < Njets; ijet++){
951 // get our jets
952 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
953 if (!jet) continue;
954
f1ce4cc3 955 // apply jet cuts
8ee2d316 956 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax)) continue;
957 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax)) continue;
daa728b0 958 if (makeQAhistos) fHistAreavsRawPt[centbin]->Fill(jet->Pt(),jet->Area());
8ee2d316 959 if(!AcceptMyJet(jet)) continue;
fc392675 960
961 NjetAcc++; // # of accepted jets
56523939 962
963 // if FlavourJetAnalysis, get desired FlavTag and check against Jet
964 if(doFlavourJetAnalysis) { if(!AcceptFlavourJet(jet, fJetFlavTag)) continue;}
965
8ee2d316 966 // use this to get total # of jets passing cuts in events!!!!!!!!
967 if (makeQAhistos) fHistJetPhi->Fill(jet->Phi()); // Jet Phi histogram (filled)
fc392675 968
969 // get highest Pt jet in event
970 if(highestjetpt<jet->Pt()){
971 ijethi=ijet;
972 highestjetpt=jet->Pt();
973 }
974 } // end of looping over jets
975
976 // accepted jets
977 fHistNjetvsCent->Fill(fCent,NjetAcc);
978 Int_t NJETAcc = 0;
f9b4eee4 979 fHistEventQA->Fill(9); // events after track/jet loop to get highest pt
980
fc392675 981 // loop over jets in event and make appropriate cuts
982 for (Int_t ijet = 0; ijet < Njets; ++ijet) {
983 AliEmcalJet *jet = static_cast<AliEmcalJet*>(fJets->At(ijet));
8ee2d316 984 if (!jet) continue;
985
8ce3d590 986 // check our jet is in our selected trigger event
d60e724e 987 if (!(trig & fTriggerEventType)) continue;
988
8ee2d316 989 // (should probably be higher..., but makes a cut on jet pT)
990 if (jet->Pt()<0.1) continue;
f1ce4cc3 991 // do we accept jet? apply jet cuts
8ee2d316 992 if (!AcceptMyJet(jet)) continue;
fc392675 993
56523939 994 // if FlavourJetAnalysis, get desired FlavTag and check against Jet
995 if(doFlavourJetAnalysis) { if(!AcceptFlavourJet(jet, fJetFlavTag)) continue;}
996
f9b4eee4 997 fHistEventQA->Fill(10); // accepted jets
998
fc392675 999 // check on lead jet
1000 Double_t leadjet=0;
1001 if (ijet==ijethi) leadjet=1;
1002
daa728b0 1003 // check on leading hadron pt
139e13f4 1004 if (ijet==ijethi) leadhadronPT = GetLeadingHadronPt(jet);
daa728b0 1005
fc392675 1006 // initialize and calculate various parameters: pt, eta, phi, rho, etc...
1007 Double_t jetphi = jet->Phi(); // phi of jet
1008 NJETAcc++; // # accepted jets
fc392675 1009 Double_t jeteta = jet->Eta(); // ETA of jet
aa5f3717 1010 Double_t jetPt = -500;
1011 Double_t jetPtGlobal = -500;
d60e724e 1012 Double_t jetPtLocal = -500; // initialize corr jet pt
1013 if(GetBeamType() == 1) {
1014 fLocalRhoVal = fLocalRho->GetLocalVal(jetphi, fJetRad); //GetJetRadius(0)); // get local rho value
1015 jetPtLocal = jet->Pt()-jet->Area()*fLocalRhoVal; // corrected pT of jet using Rho modulated for V2 and V3
1016 }
8ee2d316 1017 jetPt = jet->Pt();
1018 jetPtGlobal = jet->Pt()-jet->Area()*fRhoVal; // corrected pT of jet from rho value
a8150e70 1019 Double_t dEP = -500; // initialize angle between jet and event plane
fc392675 1020 dEP = RelativeEPJET(jetphi,fEPV0); // angle betweeen jet and event plane
1021
1022 // make histo's
8ee2d316 1023 if(makeQAhistos) fHistJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
1024 if(makeQAhistos) fHistRawJetPtvsTrackPt[centbin]->Fill(jetPt,jet->MaxTrackPt());
1025 if(makeQAhistos) fHistJetPtcorrGlRho[centbin]->Fill(jetPtGlobal);
daa728b0 1026 if(makeQAhistos) fHistJetPtvsdEP[centbin]->Fill(jetPt, dEP);
1027 if(makeQAhistos) fHistJetEtaPhiPt[centbin]->Fill(jetPt,jet->Eta(),jet->Phi());
1028 if(makeQAhistos) fHistJetPtArea[centbin]->Fill(jetPt,jet->Area());
1029 if(makeQAhistos) fHistJetEtaPhi->Fill(jet->Eta(),jet->Phi()); // fill jet eta-phi distribution histo
8ee2d316 1030 if(makeextraCORRhistos) fHistJetPtNcon[centbin]->Fill(jetPt,jet->GetNumberOfConstituents());
1031 if(makeextraCORRhistos) fHistJetPtNconCh[centbin]->Fill(jetPt,jet->GetNumberOfTracks());
1032 if(makeextraCORRhistos) fHistJetPtNconEm[centbin]->Fill(jetPt,jet->GetNumberOfClusters());
daa728b0 1033 if (makeoldJEThadhistos) fHistJetPt[centbin]->Fill(jet->Pt()); // fill #jets vs pT histo
8ee2d316 1034 //fHistDeltaPtvsArea->Fill(jetPt,jet->Area());
fc392675 1035
1036 // make histo's with BIAS applied
1037 if (jet->MaxTrackPt()>fTrkBias){
8ee2d316 1038 if(makeBIAShistos) fHistJetPtvsdEPBias[centbin]->Fill(jetPt, dEP);
1039 if(makeBIAShistos) fHistJetEtaPhiPtBias[centbin]->Fill(jetPt,jet->Eta(),jet->Phi());
1040 if(makeextraCORRhistos) fHistJetPtAreaBias[centbin]->Fill(jetPt,jet->Area());
1041 if(makeextraCORRhistos) fHistJetPtNconBias[centbin]->Fill(jetPt,jet->GetNumberOfConstituents());
1042 if(makeextraCORRhistos) fHistJetPtNconBiasCh[centbin]->Fill(jetPt,jet->GetNumberOfTracks());
1043 if(makeextraCORRhistos) fHistJetPtNconBiasEm[centbin]->Fill(jetPt,jet->GetNumberOfClusters());
fc392675 1044 }
1045
8ee2d316 1046 //if(leadjet && centbin==0){
1047 // if(makeextraCORRhistos) fHistJetPt[centbin+1]->Fill(jet->Pt());
1048 //}
fc392675 1049 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
daa728b0 1050 if (makeoldJEThadhistos){
8ee2d316 1051 fHistJetPtBias[centbin]->Fill(jet->Pt());
1052 //if(leadjet && centbin==0) fHistJetPtBias[centbin+1]->Fill(jet->Pt());
1053 }
fc392675 1054 } // end of MaxTrackPt>ftrkBias or maxclusterPt>fclusBias
1055
1056 // do we have trigger tracks
1057 if(iTT>0){
1058 AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
1059 if(TMath::Abs(jet->Phi()-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
1060 else passedTTcut=0;
1061 } // end of check on iTT > 0
1062
8ee2d316 1063 if(passedTTcut) {
daa728b0 1064 if (makeoldJEThadhistos) fHistJetPtTT[centbin]->Fill(jet->Pt());
8ee2d316 1065 }
fc392675 1066
1067 // cut on HIGHEST jet pt in event (15 GeV default)
139e13f4 1068 //if (highestjetpt>fJetPtcut) {
1069 if (jet->Pt() > fJetPtcut) {
f9b4eee4 1070 fHistEventQA->Fill(11); // jets meeting pt threshold
72a4d320 1071
daa728b0 1072 // does our max track or cluster pass the bias?
1073 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
1074 // set up and fill Jet-Hadron Correction THnSparse
f9b4eee4 1075 Double_t CorrEntries[4] = {fCent, jet->Pt(), dEP, zVtx};
daa728b0 1076 fhnCorr->Fill(CorrEntries); // fill Sparse Histo with Correction entries
d60e724e 1077
1078 if(GetBeamType() == 1) fHistLocalRhoJetpt->Fill(jetPtLocal);
daa728b0 1079 }
1080
fc392675 1081 // loop over all track for an event containing a jet with a pT>fJetPtCut (15)GeV
1082 for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
8ce3d590 1083 AliVTrack *track = dynamic_cast<AliVTrack*>(tracks->At(iTracks));
fc392675 1084 if (!track) {
8ee2d316 1085 AliError(Form("Couldn't get AliVtrack %d\n", iTracks));
fc392675 1086 continue;
1087 }
1088
8ee2d316 1089 // apply track cuts
daa728b0 1090 if(TMath::Abs(track->Eta())>fTrkEta) continue;
1091 if (track->Pt()<0.15) continue;
fc392675 1092
f9b4eee4 1093 fHistEventQA->Fill(12); // accepted tracks in events from trigger jets
1094
fc392675 1095 // calculate and get some track parameters
a8150e70 1096 Double_t trCharge = -99;
1097 trCharge = track->Charge();
fc392675 1098 Double_t tracketa=track->Eta(); // eta of track
1099 Double_t deta=tracketa-jeteta; // dETA between track and jet
daa728b0 1100 //Double_t dR=sqrt(deta*deta+dphijh*dphijh); // difference of R between jet and hadron track
1101
1102 Int_t ieta = -1; // initialize deta bin
1103 Int_t iptjet = -1; // initialize jet pT bin
1104 if (makeoldJEThadhistos) {
1105 ieta=GetEtaBin(deta); // bin of eta
f1ce4cc3 1106 if(ieta<0) continue; // double check we don't have a negative array index
daa728b0 1107 iptjet=GetpTjetBin(jet->Pt()); // bin of jet pt
1108 if(iptjet<0) continue; // double check we don't have a negative array index
f1ce4cc3 1109 }
fc392675 1110
1111 // dPHI between jet and hadron
1112 Double_t dphijh = RelativePhi(jet->Phi(), track->Phi()); // angle between jet and hadron
1113
fc392675 1114 // fill some jet-hadron histo's
daa728b0 1115 if (makeoldJEThadhistos) fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt()); // fill jet-hadron dPHI--track pT distribution
1116 if(makeQAhistos) fHistJetHEtaPhi->Fill(deta,dphijh); // fill jet-hadron eta--phi distribution
8ee2d316 1117 fHistJetHaddPHI->Fill(dphijh);
1118 if(passedTTcut){
daa728b0 1119 if (makeoldJEThadhistos) fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
8ee2d316 1120 }
fc392675 1121
1122 // does our max track or cluster pass the bias?
1123 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
1124 // set up and fill Jet-Hadron THnSparse
daa728b0 1125 Double_t triggerEntries[9] = {fCent, jet->Pt(), track->Pt(), deta, dphijh, dEP, zVtx, trCharge, leadjet};
8ce3d590 1126 if(fDoEventMixing) fhnJH->Fill(triggerEntries); // fill Sparse Histo with trigger entries
d60e724e 1127
fc392675 1128 // fill histo's
daa728b0 1129 if(makeQAhistos) fHistSEphieta->Fill(dphijh, deta); // single event distribution
1130 if (makeoldJEThadhistos) fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
8ee2d316 1131
1132 if (makeBIAShistos) {
1133 fHistJetHaddPhiBias->Fill(dphijh);
fc392675 1134
8ee2d316 1135 // in plane and out of plane histo's
1136 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
1137 // we are IN plane
1138 fHistJetHaddPhiINBias->Fill(dphijh);
1139 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
1140 // we are OUT of PLANE
1141 fHistJetHaddPhiOUTBias->Fill(dphijh);
1142 }else if( dEP>(TMath::Pi()/6) && dEP<=(TMath::Pi()/3) ){
1143 // we are in middle of plane
1144 fHistJetHaddPhiMIDBias->Fill(dphijh);
1145 }
1146 } // BIAS histos switch
fc392675 1147 } // end of check maxtrackpt>ftrackbias or maxclusterpt>fclustbias
1148
daa728b0 1149 // **************************************************************************************************************
1150 // *********************************** PID **********************************************************************
1151 // **************************************************************************************************************
1152 if(doPIDtrackBIAS){
1153 //if(ptmax < fTrkBias) continue; // force PID to happen when max track pt > 5.0 GeV
1154 if(leadhadronPT < fTrkBias) continue; // force PID to happen when lead hadron pt > 5.0 GeV
1155 }
8ee2d316 1156
daa728b0 1157 // some variables for PID
daa728b0 1158 Double_t pt = -999;
1159 Double_t dEdx = -999;
1160 Double_t ITSsig = -999;
1161 Double_t TOFsig = -999;
1162 Double_t charge = -999;
1163
1164 // nSigma of particles in TPC, TOF, and ITS
1165 Double_t nSigmaPion_TPC, nSigmaProton_TPC, nSigmaKaon_TPC;
1166 Double_t nSigmaPion_TOF, nSigmaProton_TOF, nSigmaKaon_TOF;
1167 Double_t nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS;
1168
1169 if(doPID){
1170 // get parameters of track
1171 charge = track->Charge(); // charge of track
daa728b0 1172 pt = track->Pt(); // pT of track
1173
1174 // extra attempt
1175 AliVEvent *vevent=InputEvent();
1176 if (!vevent||!fPIDResponse) return kTRUE; // just return, maybe put at beginning
1177
f9b4eee4 1178 fHistEventQA->Fill(13); // check for AliVEvent and fPIDresponse objects
1179
3badfe33 1180 // get detector signals
1181 dEdx = track->GetTPCsignal();
1182 ITSsig = track->GetITSsignal();
1183 TOFsig = track->GetTOFsignal();
daa728b0 1184
3badfe33 1185 // TPC nSigma's
1186 nSigmaPion_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kPion);
1187 nSigmaKaon_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kKaon);
1188 nSigmaProton_TPC = fPIDResponse->NumberOfSigmasTPC(track,AliPID::kProton);
1189
1190 // TOF nSigma's
1191 nSigmaPion_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kPion);
1192 nSigmaKaon_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kKaon);
1193 nSigmaProton_TOF = fPIDResponse->NumberOfSigmasTOF(track,AliPID::kProton);
1194
1195 // ITS nSigma's
1196 nSigmaPion_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kPion);
1197 nSigmaKaon_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kKaon);
1198 nSigmaProton_ITS = fPIDResponse->NumberOfSigmasITS(track,AliPID::kProton);
e56c3f6e 1199
daa728b0 1200 // fill detector signal histograms
1201 if (makeQAhistos) fHistTPCdEdX->Fill(pt, dEdx);
1202 if (makeQAhistos) fHistITSsignal->Fill(pt, ITSsig);
1203 //if (makeQAhistos) fHistTOFsignal->Fill(pt, TOFsig);
1204
1205 // Tests to PID pions, kaons, and protons, (default is undentified tracks)
1206 Double_t nPIDtpc = 0;
1207 Double_t nPIDits = 0;
1208 Double_t nPIDtof = 0;
1209 Double_t nPID = -99;
1210
1211 // check track has pT < 0.900 GeV - use TPC pid
1212 if (pt<0.900 && dEdx>0) {
1213 nPIDtpc = 4;
d60e724e 1214 nPID = 1;
daa728b0 1215
1216 // PION check - TPC
1217 if (TMath::Abs(nSigmaPion_TPC)<2 && TMath::Abs(nSigmaKaon_TPC)>2 && TMath::Abs(nSigmaProton_TPC)>2 ){
1218 isPItpc = kTRUE;
1219 nPIDtpc = 1;
d60e724e 1220 nPID=2;
daa728b0 1221 }else isPItpc = kFALSE;
1222
1223 // KAON check - TPC
1224 if (TMath::Abs(nSigmaKaon_TPC)<2 && TMath::Abs(nSigmaPion_TPC)>3 && TMath::Abs(nSigmaProton_TPC)>2 ){
1225 isKtpc = kTRUE;
1226 nPIDtpc = 2;
d60e724e 1227 nPID=3;
daa728b0 1228 }else isKtpc = kFALSE;
1229
1230 // PROTON check - TPC
1231 if (TMath::Abs(nSigmaProton_TPC)<2 && TMath::Abs(nSigmaPion_TPC)>3 && TMath::Abs(nSigmaKaon_TPC)>2 ){
1232 isPtpc = kTRUE;
1233 nPIDtpc = 3;
d60e724e 1234 nPID=4;
daa728b0 1235 }else isPtpc = kFALSE;
1236 } // cut on track pT for TPC
1237
1238 // check track has pT < 0.500 GeV - use ITS pid
1239 if (pt<0.500 && ITSsig>0) {
1240 nPIDits = 4;
d60e724e 1241 nPID = 5;
daa728b0 1242
1243 // PION check - ITS
1244 if (TMath::Abs(nSigmaPion_ITS)<2 && TMath::Abs(nSigmaKaon_ITS)>2 && TMath::Abs(nSigmaProton_ITS)>2 ){
1245 isPIits = kTRUE;
1246 nPIDits = 1;
d60e724e 1247 nPID=6;
daa728b0 1248 }else isPIits = kFALSE;
1249
1250 // KAON check - ITS
1251 if (TMath::Abs(nSigmaKaon_ITS)<2 && TMath::Abs(nSigmaPion_ITS)>3 && TMath::Abs(nSigmaProton_ITS)>2 ){
1252 isKits = kTRUE;
1253 nPIDits = 2;
d60e724e 1254 nPID=7;
daa728b0 1255 }else isKits = kFALSE;
1256
1257 // PROTON check - ITS
1258 if (TMath::Abs(nSigmaProton_ITS)<2 && TMath::Abs(nSigmaPion_ITS)>3 && TMath::Abs(nSigmaKaon_ITS)>2 ){
1259 isPits = kTRUE;
1260 nPIDits = 3;
d60e724e 1261 nPID=8;
daa728b0 1262 }else isPits = kFALSE;
1263 } // cut on track pT for ITS
1264
1265 // check track has 0.900 GeV < pT < 2.500 GeV - use TOF pid
1266 if (pt>0.900 && pt<2.500 && TOFsig>0) {
1267 nPIDtof = 4;
d60e724e 1268 nPID = 9;
daa728b0 1269
1270 // PION check - TOF
1271 if (TMath::Abs(nSigmaPion_TOF)<2 && TMath::Abs(nSigmaKaon_TOF)>2 && TMath::Abs(nSigmaProton_TOF)>2 ){
1272 isPItof = kTRUE;
1273 nPIDtof = 1;
d60e724e 1274 nPID=10;
daa728b0 1275 }else isPItof = kFALSE;
1276
1277 // KAON check - TOF
1278 if (TMath::Abs(nSigmaKaon_TOF)<2 && TMath::Abs(nSigmaPion_TOF)>3 && TMath::Abs(nSigmaProton_TOF)>2 ){
1279 isKtof = kTRUE;
1280 nPIDtof = 2;
d60e724e 1281 nPID=11;
daa728b0 1282 }else isKtof = kFALSE;
1283
1284 // PROTON check - TOF
1285 if (TMath::Abs(nSigmaProton_TOF)<2 && TMath::Abs(nSigmaPion_TOF)>3 && TMath::Abs(nSigmaKaon_TOF)>2 ){
1286 isPtof = kTRUE;
1287 nPIDtof = 3;
d60e724e 1288 nPID=12;
daa728b0 1289 }else isPtof = kFALSE;
1290 } // cut on track pT for TOF
1291
d60e724e 1292 if (nPID == -99) nPID = 14;
daa728b0 1293 fHistPID->Fill(nPID);
fc392675 1294
1295 // PID sparse getting filled
139e13f4 1296 if (allpidAXIS) { // FILL ALL axis
1297 Double_t pid_EntriesALL[21] = {fCent,pt,charge,deta,dphijh,leadjet,zVtx,dEP,jetPt,
1298 nSigmaPion_TPC, nSigmaPion_TOF, // pion nSig values in TPC/TOF
1299 nPIDtpc, nPIDits, nPIDtof, // PID label for each detector
1300 nSigmaProton_TPC, nSigmaKaon_TPC, // nSig in TPC
1301 nSigmaPion_ITS, nSigmaProton_ITS, nSigmaKaon_ITS, // nSig in ITS
1302 nSigmaProton_TOF, nSigmaKaon_TOF, // nSig in TOF
1303 }; //array for PID sparse
1304 fhnPID->Fill(pid_EntriesALL);
1305 } else {
1306 // PID sparse getting filled
1307 Double_t pid_Entries[14] = {fCent,pt,charge,deta,dphijh,leadjet,zVtx,dEP,jetPt,
1308 nSigmaPion_TPC, nSigmaPion_TOF, // pion nSig values in TPC/TOF
1309 nPIDtpc, nPIDits, nPIDtof // PID label for each detector
fc392675 1310 }; //array for PID sparse
139e13f4 1311 fhnPID->Fill(pid_Entries); // fill Sparse histo of PID tracks
1312 } // minimal pid sparse filling
1313
daa728b0 1314 } // end of doPID check
fc392675 1315
8ee2d316 1316 // get track pt bin
fc392675 1317 Int_t itrackpt = -500; // initialize track pT bin
1318 itrackpt = GetpTtrackBin(track->Pt());
1319
8ee2d316 1320 // all tracks: jet hadron correlations in hadron pt bins
daa728b0 1321 if(makeextraCORRhistos) fHistJetHadbindPhi[itrackpt]->Fill(dphijh);
fc392675 1322
1323 // in plane and out of plane jet-hadron histo's
1324 if( dEP>0 && dEP<=(TMath::Pi()/6) ){
daa728b0 1325 // we are IN plane
1326 if(makeextraCORRhistos) fHistJetHaddPhiINcent[centbin]->Fill(dphijh);
1327 fHistJetHaddPhiIN->Fill(dphijh);
1328 if(makeextraCORRhistos) fHistJetHadbindPhiIN[itrackpt]->Fill(dphijh);
fc392675 1329 }else if( dEP>(TMath::Pi()/3) && dEP<=(TMath::Pi()/2) ){
daa728b0 1330 // we are OUT of PLANE
1331 if(makeextraCORRhistos) fHistJetHaddPhiOUTcent[centbin]->Fill(dphijh);
1332 fHistJetHaddPhiOUT->Fill(dphijh);
1333 if(makeextraCORRhistos) fHistJetHadbindPhiOUT[itrackpt]->Fill(dphijh);
fc392675 1334 }else if( dEP>(TMath::Pi()/6) && dEP<=(TMath::Pi()/3) ){
daa728b0 1335 // we are in the middle of plane
1336 if(makeextraCORRhistos) fHistJetHaddPhiMIDcent[centbin]->Fill(dphijh);
1337 fHistJetHaddPhiMID->Fill(dphijh);
1338 if(makeextraCORRhistos) fHistJetHadbindPhiMID[itrackpt]->Fill(dphijh);
fc392675 1339 }
1340 } // loop over tracks found in event with highest JET pT > 10.0 GeV (change)
1341 } // jet pt cut
1342 } // jet loop
1343
f9b4eee4 1344 fHistEventQA->Fill(14); // events right before event mixing
1345
fc392675 1346// ***************************************************************************************************************
1347// ******************************** Event MIXING *****************************************************************
3badfe33 1348// ***************************************************************************************************************
1349
1350 // initialize object array of cloned picotracks
1351 TObjArray* tracksClone = 0x0;
1352
1353 // PbPb collisions - create cloned picotracks
d60e724e 1354 //if(GetBeamType() == 1) tracksClone = CloneAndReduceTrackList(tracks); // TEST
fc392675 1355
1356 //Prepare to do event mixing
1357 if(fDoEventMixing>0){
1358 // event mixing
1359
1360 // 1. First get an event pool corresponding in mult (cent) and
1361 // zvertex to the current event. Once initialized, the pool
1362 // should contain nMix (reduced) events. This routine does not
1363 // pre-scan the chain. The first several events of every chain
1364 // will be skipped until the needed pools are filled to the
1365 // specified depth. If the pool categories are not too rare, this
1366 // should not be a problem. If they are rare, you could lose
1367 // statistics.
1368
1369 // 2. Collect the whole pool's content of tracks into one TObjArray
1370 // (bgTracks), which is effectively a single background super-event.
1371
1372 // 3. The reduced and bgTracks arrays must both be passed into
1373 // FillCorrelations(). Also nMix should be passed in, so a weight
1374 // of 1./nMix can be applied.
1375
1376 // mix jets from triggered events with tracks from MB events
3badfe33 1377 // get the trigger bit, need to change trigger bits between different runs
1378 UInt_t trigger = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
d60e724e 1379 // if event was not selected (triggered) for any reseason (should never happen) then return
1380 if (trigger==0) return kTRUE;
fc392675 1381
3badfe33 1382 // initialize event pools
1383 AliEventPool* pool = 0x0;
1384 AliEventPool* poolpp = 0x0;
1385 Double_t Ntrks = -999;
1386
1387 // pp collisions - get event pool
1388 if(GetBeamType() == 0) {
1389 Ntrks=(Double_t)Ntracks*1.0;
1390 //cout<<"Test.. Ntrks: "<<fPoolMgr->GetEventPool(Ntrks);
3badfe33 1391 poolpp = fPoolMgr->GetEventPool(Ntrks, zVtx); // for pp
1392 }
fc392675 1393
3badfe33 1394 // PbPb collisions - get event pool
1395 if(GetBeamType() == 1) pool = fPoolMgr->GetEventPool(fCent, zVtx); // for PbPb? fcent
fc392675 1396
d60e724e 1397 // if we don't have a pool, return
3badfe33 1398 if (!pool && !poolpp){
1399 if(GetBeamType() == 1) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCent, zVtx));
1400 if(GetBeamType() == 0) AliFatal(Form("No pool found for multiplicity = %f, zVtx = %f", Ntrks, zVtx));
fc392675 1401 return kTRUE;
1402 }
1403
f9b4eee4 1404 fHistEventQA->Fill(15); // mixed events cases that have pool
1405
3badfe33 1406 // initialize background tracks array
1407 TObjArray* bgTracks;
1408
1409 // next line might not apply for PbPb collisions
1410 // use only jets from EMCal-triggered events (for lhc11a use AliVEvent::kEMC1)
1411 //check for a trigger jet
1412 // fmixingtrack/10 ??
a409c5ba 1413 if(GetBeamType() == 1) if(trigger & fTriggerEventType) { //kEMCEJE)) {
1414 if (pool->IsReady() || pool->NTracksInPool() > fNMIXtracks || pool->GetCurrentNEvents() >= fNMIXevents) {
3badfe33 1415
1416 // loop over jets (passing cuts?)
1417 for (Int_t ijet = 0; ijet < Njets; ijet++) {
1418 Double_t leadjet=0;
1419 if (ijet==ijethi) leadjet=1;
1420
1421 // get jet object
1422 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
1423 if (!jet) continue;
1424
1425 // (should probably be higher..., but makes a cut on jet pT)
1426 if (jet->Pt()<0.1) continue;
1427 if (!AcceptMyJet(jet)) continue;
1428
1429 fHistEventQA->Fill(16); // event mixing jets
1430
1431 // set cut to do event mixing only if we have a jet meeting our pt threshold (bias applied below)
1432 if (jet->Pt()<fJetPtcut) continue;
1433
1434 // get number of current events in pool
1435 Int_t nMix = pool->GetCurrentNEvents(); // how many particles in pool to mix
1436
1437 // Fill for biased jet triggers only
1438 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)) { // && jet->Pt() > fJetPtcut) {
1439 // Fill mixed-event histos here
1440 for (Int_t jMix=0; jMix<nMix; jMix++) {
1441 fHistEventQA->Fill(17); // event mixing nMix
1442
1443 // get jMix'th event
1444 bgTracks = pool->GetEvent(jMix);
1445 const Int_t Nbgtrks = bgTracks->GetEntries();
1446 for(Int_t ibg=0; ibg<Nbgtrks; ibg++) {
1447 AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
1448 if(!part) continue;
1449 if(TMath::Abs(part->Eta())>0.9) continue;
1450 if(part->Pt()<0.15) continue;
1451
1452 Double_t DEta = part->Eta()-jet->Eta(); // difference in eta
1453 Double_t DPhi = RelativePhi(jet->Phi(),part->Phi()); // difference in phi
1454 Double_t dEP = RelativeEPJET(jet->Phi(),fEPV0); // difference between jet and EP
1455 Double_t mixcharge = part->Charge();
1456 //Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta); // difference in R
1457
1458 // create / fill mixed event sparse
8ce3d590 1459 Double_t triggerEntries[9] = {fCent,jet->Pt(),part->Pt(),DEta,DPhi,dEP,zVtx, mixcharge, leadjet}; //array for ME sparse
d60e724e 1460 fhnMixedEvents->Fill(triggerEntries,1./nMix); // fill Sparse histo of mixed events
3badfe33 1461
d60e724e 1462 fHistEventQA->Fill(18); // event mixing - nbgtracks
3badfe33 1463 if(makeextraCORRhistos) fHistMEphieta->Fill(DPhi,DEta, 1./nMix);
1464 } // end of background track loop
1465 } // end of filling mixed-event histo's
1466 } // end of check for biased jet triggers
1467 } // end of jet loop
d60e724e 1468 } // end of check for pool being ready
1469 } // end EMC triggered loop
3badfe33 1470
1471//=============================================================================================================
1472
fc392675 1473 // use only jets from EMCal-triggered events (for lhc11a use AliVEvent::kEMC1)
1474/// if (trigger & AliVEvent::kEMC1) {
3badfe33 1475 // pp collisions
d60e724e 1476 if(GetBeamType() == 0) if(trigger & fTriggerEventType) { //kEMC1)) {
a409c5ba 1477 if (poolpp->IsReady() || poolpp->NTracksInPool() > fNMIXtracks || poolpp->GetCurrentNEvents() >= fNMIXevents) {
3badfe33 1478
fc392675 1479 // loop over jets (passing cuts?)
1480 for (Int_t ijet = 0; ijet < Njets; ijet++) {
8ee2d316 1481 Double_t leadjet=0;
1482 if (ijet==ijethi) leadjet=1;
fc392675 1483
1484 // get jet object
1485 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
8ee2d316 1486 if (!jet) continue;
fc392675 1487
8ee2d316 1488 // (should probably be higher..., but makes a cut on jet pT)
1489 if (jet->Pt()<0.1) continue;
1490 if (!AcceptMyJet(jet)) continue;
fc392675 1491
f9b4eee4 1492 fHistEventQA->Fill(16); // event mixing jets
1493
3badfe33 1494 // set cut to do event mixing only if we have a jet meeting our pt threshold (bias applied below)
1495 if (jet->Pt()<fJetPtcut) continue;
fc392675 1496
3badfe33 1497 // get number of current events in pool
1498 Int_t nMix = poolpp->GetCurrentNEvents(); // how many particles in pool to mix
e56c3f6e 1499
fc392675 1500 // Fill for biased jet triggers only
e56c3f6e 1501 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)) { // && jet->Pt() > fJetPtcut) {
fc392675 1502 // Fill mixed-event histos here
1503 for (Int_t jMix=0; jMix<nMix; jMix++) {
3badfe33 1504 fHistEventQA->Fill(17); // event mixing nMix
1505
1506 // get jMix'th event
1507 bgTracks = poolpp->GetEvent(jMix);
1508 const Int_t Nbgtrks = bgTracks->GetEntries();
1509 for(Int_t ibg=0; ibg<Nbgtrks; ibg++) {
1510 AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
1511 if(!part) continue;
1512 if(TMath::Abs(part->Eta())>0.9) continue;
1513 if(part->Pt()<0.15) continue;
1514
1515 Double_t DEta = part->Eta()-jet->Eta(); // difference in eta
1516 Double_t DPhi = RelativePhi(jet->Phi(),part->Phi()); // difference in phi
8ce3d590 1517 Double_t dEP = RelativeEPJET(jet->Phi(),fEPV0); // difference between jet and EP
3badfe33 1518 Double_t mixcharge = part->Charge();
8ce3d590 1519 //Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta); // difference in R
d60e724e 1520
3badfe33 1521 // create / fill mixed event sparse
8ce3d590 1522 Double_t triggerEntries[9] = {fCent,jet->Pt(),part->Pt(),DEta,DPhi,dEP,zVtx, mixcharge, leadjet}; //array for ME sparse
3badfe33 1523 fhnMixedEvents->Fill(triggerEntries,1./nMix); // fill Sparse histo of mixed events
d60e724e 1524
1525 fHistEventQA->Fill(18); // event mixing - nbgtracks
3badfe33 1526 if(makeextraCORRhistos) fHistMEphieta->Fill(DPhi,DEta, 1./nMix);
1527 } // end of background track loop
1528 } // end of filling mixed-event histo's
fc392675 1529 } // end of check for biased jet triggers
1530 } // end of jet loop
d60e724e 1531 } // end of check for pool being ready
3badfe33 1532 } //end EMC triggered loop
fc392675 1533
3badfe33 1534 // pp collisions
3badfe33 1535 if(GetBeamType() == 0) {
1536
8ce3d590 1537 // use only tracks from MB events (for lhc11a use AliVEvent::kMB) //kAnyINT as test
d60e724e 1538 if(trigger & fMixingEventType) { //kMB) {
3badfe33 1539
1540 // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
d60e724e 1541 tracksClone = CloneAndReduceTrackList(tracks);
1542
3badfe33 1543 // update pool if jet in event or not
1544 poolpp->UpdatePool(tracksClone);
1545
1546 } // check on track from MB events
1547 }
fc392675 1548
3badfe33 1549 // PbPb collisions
1550 if(GetBeamType() == 1) {
d60e724e 1551
1552 // use only tracks from MB events
1553 if(trigger & fMixingEventType) { //kMB) {
3badfe33 1554
d60e724e 1555 // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
1556 tracksClone = CloneAndReduceTrackList(tracks);
1557
1558 // update pool if jet in event or not
1559 pool->UpdatePool(tracksClone);
1560
1561 } // MB events
1562 } // PbPb collisions
fc392675 1563 } // end of event mixing
1564
1565 // print some stats on the event
1566 event++;
f9b4eee4 1567 fHistEventQA->Fill(19); // events making it to end
1568
f1ce4cc3 1569 if (doComments) {
1570 cout<<"Event #: "<<event<<" Jet Radius: "<<fJetRad<<" Constituent Pt Cut: "<<fConstituentCut<<endl;
56523939 1571 cout<<"# of jets: "<<Njets<<" NjetAcc: "<<NjetAcc<<" Highest jet pt: "<<highestjetpt<<" leading hadron pt: "<<leadhadronPT<<endl;
1572 cout<<"# tracks: "<<Ntracks<<" NtrackAcc: "<<NtrackAcc<<" Highest track pt: "<<ptmax<<endl;
f1ce4cc3 1573 cout<<" =============================================== "<<endl;
1574 }
fc392675 1575
1576 return kTRUE; // used when the function is of type bool
1577} // end of RUN
1578
1579//________________________________________________________________________
1580Int_t AliAnalysisTaskEmcalJetHadEPpid::GetCentBin(Double_t cent) const
1581{ // Get centrality bin.
1582 Int_t centbin = -1;
1583 if (cent>=0 && cent<10) centbin = 0;
1584 else if (cent>=10 && cent<20) centbin = 1;
1585 else if (cent>=20 && cent<30) centbin = 2;
1586 else if (cent>=30 && cent<40) centbin = 3;
1587 else if (cent>=40 && cent<50) centbin = 4;
1588 else if (cent>=50 && cent<90) centbin = 5;
1589
1590 return centbin;
1591}
1592
1593//________________________________________________________________________
a8150e70 1594Double_t AliAnalysisTaskEmcalJetHadEPpid::RelativePhi(Double_t mphi,Double_t vphi) const
fc392675 1595{ // function to calculate relative PHI
1596 double dphi = mphi-vphi;
1597
1598 // set dphi to operate on adjusted scale
1599 if(dphi<-0.5*TMath::Pi()) dphi+=2.*TMath::Pi();
1600 if(dphi>3./2.*TMath::Pi()) dphi-=2.*TMath::Pi();
1601
1602 // test
1603 if( dphi < -1.*TMath::Pi()/2 || dphi > 3.*TMath::Pi()/2 )
1604 AliWarning(Form("%s: dPHI not in range [-0.5*Pi, 1.5*Pi]!", GetName()));
1605
1606 return dphi; // dphi in [-0.5Pi, 1.5Pi]
1607}
1608
fc392675 1609//_________________________________________________________________________
a8150e70 1610Double_t AliAnalysisTaskEmcalJetHadEPpid:: RelativeEPJET(Double_t jetAng, Double_t EPAng) const
fc392675 1611{ // function to calculate angle between jet and EP in the 1st quadrant (0,Pi/2)
1612 Double_t dphi = (EPAng - jetAng);
1613
1614 // ran into trouble with a few dEP<-Pi so trying this...
1615 if( dphi<-1*TMath::Pi() ){
1616 dphi = dphi + 1*TMath::Pi();
1617 } // this assumes we are doing full jets currently
1618
1619 if( (dphi>0) && (dphi<1*TMath::Pi()/2) ){
1620 // Do nothing! we are in quadrant 1
1621 }else if( (dphi>1*TMath::Pi()/2) && (dphi<1*TMath::Pi()) ){
1622 dphi = 1*TMath::Pi() - dphi;
1623 }else if( (dphi<0) && (dphi>-1*TMath::Pi()/2) ){
1624 dphi = fabs(dphi);
1625 }else if( (dphi<-1*TMath::Pi()/2) && (dphi>-1*TMath::Pi()) ){
1626 dphi = dphi + 1*TMath::Pi();
1627 }
1628
1629 // test
1630 if( dphi < 0 || dphi > TMath::Pi()/2 )
1631 AliWarning(Form("%s: dPHI not in range [0, 0.5*Pi]!", GetName()));
1632
1633 return dphi; // dphi in [0, Pi/2]
1634}
1635
1636//Int_t ieta=GetEtaBin(deta);
1637//________________________________________________________________________
1638Int_t AliAnalysisTaskEmcalJetHadEPpid::GetEtaBin(Double_t eta) const
1639{
1640 // Get eta bin for histos.
1641 Int_t etabin = -1;
f1ce4cc3 1642 if (TMath::Abs(eta)<=0.4) etabin = 0;
fc392675 1643 else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8) etabin = 1;
f1ce4cc3 1644 else if (TMath::Abs(eta)>=0.8) etabin = 2;
fc392675 1645
1646 return etabin;
1647} // end of get-eta-bin
1648
1649//________________________________________________________________________
1650Int_t AliAnalysisTaskEmcalJetHadEPpid::GetpTjetBin(Double_t pt) const
1651{
1652 // Get jet pt bin for histos.
1653 Int_t ptbin = -1;
1654 if (pt>=15 && pt<20) ptbin = 0;
1655 else if (pt>=20 && pt<25) ptbin = 1;
1656 else if (pt>=25 && pt<40) ptbin = 2;
1657 else if (pt>=40 && pt<60) ptbin = 3;
f1ce4cc3 1658 else if (pt>=60) ptbin = 4;
fc392675 1659
1660 return ptbin;
1661} // end of get-jet-pt-bin
1662
1663//________________________________________________________________________
1664Int_t AliAnalysisTaskEmcalJetHadEPpid::GetpTtrackBin(Double_t pt) const
1665{
1666 // May need to update bins for future runs... (testing locally)
1667
1668 // Get track pt bin for histos.
1669 Int_t ptbin = -1;
1670 if (pt < 0.5) ptbin = 0;
1671 else if (pt>=0.5 && pt<1.0) ptbin = 1;
1672 else if (pt>=1.0 && pt<1.5) ptbin = 2;
1673 else if (pt>=1.5 && pt<2.0) ptbin = 3;
1674 else if (pt>=2.0 && pt<2.5) ptbin = 4;
1675 else if (pt>=2.5 && pt<3.0) ptbin = 5;
1676 else if (pt>=3.0 && pt<4.0) ptbin = 6;
1677 else if (pt>=4.0 && pt<5.0) ptbin = 7;
1678 else if (pt>=5.0) ptbin = 8;
1679
1680 return ptbin;
1681} // end of get-jet-pt-bin
1682
fc392675 1683//___________________________________________________________________________
1684Int_t AliAnalysisTaskEmcalJetHadEPpid::GetzVertexBin(Double_t zVtx) const
1685{
1686 // get z-vertex bin for histo.
1687 int zVbin= -1;
f1ce4cc3 1688 if (zVtx>=-10 && zVtx<-8) zVbin = 0;
fc392675 1689 else if (zVtx>=-8 && zVtx<-6) zVbin = 1;
1690 else if (zVtx>=-6 && zVtx<-4) zVbin = 2;
1691 else if (zVtx>=-4 && zVtx<-2) zVbin = 3;
1692 else if (zVtx>=-2 && zVtx<0) zVbin = 4;
1693 else if (zVtx>=0 && zVtx<2) zVbin = 5;
1694 else if (zVtx>=2 && zVtx<4) zVbin = 6;
1695 else if (zVtx>=4 && zVtx<6) zVbin = 7;
1696 else if (zVtx>=6 && zVtx<8) zVbin = 8;
1697 else if (zVtx>=8 && zVtx<10) zVbin = 9;
1698 else zVbin = 10;
1699
1700 return zVbin;
1701} // end of get z-vertex bin
1702
1703//______________________________________________________________________
e56c3f6e 1704THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseF(const char* name, UInt_t entries)
fc392675 1705{
e56c3f6e 1706 // generate new THnSparseF, axes are defined in GetDimParams()
fc392675 1707 Int_t count = 0;
1708 UInt_t tmp = entries;
1709 while(tmp!=0){
1710 count++;
1711 tmp = tmp &~ -tmp; // clear lowest bit
1712 }
1713
1714 TString hnTitle(name);
1715 const Int_t dim = count;
1716 Int_t nbins[dim];
1717 Double_t xmin[dim];
1718 Double_t xmax[dim];
1719
1720 Int_t i=0;
1721 Int_t c=0;
1722 while(c<dim && i<32){
1723 if(entries&(1<<i)){
fc392675 1724 TString label("");
1725 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
1726 hnTitle += Form(";%s",label.Data());
1727 c++;
1728 }
1729
1730 i++;
1731 }
1732 hnTitle += ";";
1733
e56c3f6e 1734 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1735} // end of NewTHnSparseF
fc392675 1736
1737void AliAnalysisTaskEmcalJetHadEPpid::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1738{
1739 // stores label and binning of axis for THnSparse
1740 const Double_t pi = TMath::Pi();
1741
1742 switch(iEntry){
1743
1744 case 0:
1745 label = "V0 centrality (%)";
1746 nbins = 10;
1747 xmin = 0.;
1748 xmax = 100.;
1749 break;
1750
1751 case 1:
a8150e70 1752 label = "Jet p_{T}";
e56c3f6e 1753 nbins = 50; // 216
a8150e70 1754 xmin = 0.;
e56c3f6e 1755 xmax = 250.; // 216
fc392675 1756 break;
1757
1758 case 2:
1759 label = "Track p_{T}";
e56c3f6e 1760 nbins = 80; //300; // 750 pid
fc392675 1761 xmin = 0.;
e56c3f6e 1762 xmax = 20.; //75.;
fc392675 1763 break;
1764
1765 case 3:
1766 label = "Relative Eta";
8ce3d590 1767 nbins = 56; // 42
1768 xmin = -1.4;
1769 xmax = 1.4;
fc392675 1770 break;
1771
1772 case 4:
1773 label = "Relative Phi";
daa728b0 1774 nbins = 72;
fc392675 1775 xmin = -0.5*pi;
1776 xmax = 1.5*pi;
1777 break;
1778
1779 case 5:
1780 label = "Relative angle of Jet and Reaction Plane";
8ce3d590 1781 nbins = 3; // (12) 72
e56c3f6e 1782 xmin = 0;
1783 xmax = 0.5*pi;
fc392675 1784 break;
1785
1786 case 6:
1787 label = "z-vertex";
1788 nbins = 10;
1789 xmin = -10;
1790 xmax = 10;
1791 break;
1792
1793 case 7:
1794 label = "track charge";
a8150e70 1795 nbins = 3;
fc392675 1796 xmin = -1.5;
1797 xmax = 1.5;
1798 break;
1799
daa728b0 1800 case 8:
fc392675 1801 label = "leading jet";
1802 nbins = 3;
1803 xmin = -0.5;
1804 xmax = 2.5;
1805 break;
a8150e70 1806
1807 case 9: // need to update
1808 label = "leading track";
1809 nbins = 10;
1810 xmin = 0;
1811 xmax = 50;
1812 break;
1813
fc392675 1814 } // end of switch
1815} // end of getting dim-params
1816
1817//_________________________________________________
1818// From CF event mixing code PhiCorrelations
3badfe33 1819TObjArray* AliAnalysisTaskEmcalJetHadEPpid::CloneAndReduceTrackList(TObjArray* tracksME)
fc392675 1820{
1821 // clones a track list by using AliPicoTrack which uses much less memory (used for event mixing)
1822 TObjArray* tracksClone = new TObjArray;
1823 tracksClone->SetOwner(kTRUE);
1824
3263f852 1825// ===============================
1826
1827// cout << "RM Hybrid track : " << i << " " << particle->Pt() << endl;
fc392675 1828
1829 //cout << "nEntries " << tracks->GetEntriesFast() <<endl;
3badfe33 1830 for (Int_t i=0; i<tracksME->GetEntriesFast(); i++) { // AOD/general case
1831 AliVParticle* particle = (AliVParticle*) tracksME->At(i); // AOD/general case
fc392675 1832 if(TMath::Abs(particle->Eta())>fTrkEta) continue;
1833 if(particle->Pt()<0.15)continue;
1834
8ee2d316 1835/*
1836// DON'T USE
fc392675 1837 Double_t trackpt=particle->Pt(); // track pT
1838
1839 Int_t trklabel=-1;
1840 trklabel=particle->GetLabel();
1841 //cout << "TRACK_LABEL: " << particle->GetLabel()<<endl;
1842
1843 Int_t hadbin=-1;
1844 if(trackpt<0.5) hadbin=0;
1845 else if(trackpt<1) hadbin=1;
1846 else if(trackpt<2) hadbin=2;
1847 else if(trackpt<3) hadbin=3;
1848 else if(trackpt<5) hadbin=4;
1849 else if(trackpt<8) hadbin=5;
1850 else if(trackpt<20) hadbin=6;
8ee2d316 1851// end of DON'T USE
fc392675 1852
1853//feb10 comment out
1854 if(hadbin>-1 && trklabel>-1 && trklabel <3) fHistTrackEtaPhi[trklabel][hadbin]->Fill(particle->Eta(),particle->Phi());
1855 if(hadbin>-1) fHistTrackEtaPhi[3][hadbin]->Fill(particle->Eta(),particle->Phi());
1856
8ee2d316 1857 if(hadbin>-1) fHistTrackEtaPhi[hadbin]->Fill(particle->Eta(),particle->Phi()); // TEST
1858*/
fc392675 1859
1860 tracksClone->Add(new AliPicoTrack(particle->Pt(), particle->Eta(), particle->Phi(), particle->Charge(), 0, 0, 0, 0));
1861 } // end of looping through tracks
1862
1863 return tracksClone;
1864}
1865
1866//____________________________________________________________________________________________
e56c3f6e 1867THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseFPID(const char* name, UInt_t entries)
fc392675 1868{
e56c3f6e 1869 // generate new THnSparseF PID, axes are defined in GetDimParams()
fc392675 1870 Int_t count = 0;
1871 UInt_t tmp = entries;
1872 while(tmp!=0){
1873 count++;
1874 tmp = tmp &~ -tmp; // clear lowest bit
1875 }
1876
1877 TString hnTitle(name);
1878 const Int_t dim = count;
1879 Int_t nbins[dim];
1880 Double_t xmin[dim];
1881 Double_t xmax[dim];
1882
1883 Int_t i=0;
1884 Int_t c=0;
1885 while(c<dim && i<32){
1886 if(entries&(1<<i)){
fc392675 1887 TString label("");
1888 GetDimParamsPID(i, label, nbins[c], xmin[c], xmax[c]);
1889 hnTitle += Form(";%s",label.Data());
1890 c++;
1891 }
1892
1893 i++;
1894 }
1895 hnTitle += ";";
1896
e56c3f6e 1897 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
1898} // end of NewTHnSparseF PID
fc392675 1899
1900//________________________________________________________________________________
1901void AliAnalysisTaskEmcalJetHadEPpid::GetDimParamsPID(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
1902{
1903 // stores label and binning of axis for THnSparse
1904 const Double_t pi = TMath::Pi();
1905
1906 switch(iEntry){
1907
1908 case 0:
1909 label = "V0 centrality (%)";
1910 nbins = 10;
1911 xmin = 0.;
1912 xmax = 100.;
1913 break;
1914
1915 case 1:
fc392675 1916 label = "Track p_{T}";
e56c3f6e 1917 nbins = 80; //300; // 750
fc392675 1918 xmin = 0.;
e56c3f6e 1919 xmax = 20.; //75.;
fc392675 1920 break;
1921
139e13f4 1922 case 2:
fc392675 1923 label = "Charge of Track";
1924 nbins = 3;
1925 xmin = -1.5;
1926 xmax = 1.5;
1927 break;
1928
139e13f4 1929 case 3:
fc392675 1930 label = "Relative Eta of Track and Jet";
8ce3d590 1931 nbins = 56; // 48
1932 xmin = -1.4;
1933 xmax = 1.4;
fc392675 1934 break;
1935
139e13f4 1936 case 4:
fc392675 1937 label = "Relative Phi of Track and Jet";
daa728b0 1938 nbins = 72;
fc392675 1939 xmin = -0.5*pi;
1940 xmax = 1.5*pi;
1941 break;
1942
139e13f4 1943 case 5:
fc392675 1944 label = "leading jet";
1945 nbins = 3;
1946 xmin = -.5;
1947 xmax = 2.5;
1948 break;
1949
139e13f4 1950 case 6:
fc392675 1951 label = "Z-vertex";
1952 nbins = 10;
1953 xmin = -10.;
1954 xmax = 10.;
1955 break;
1956
139e13f4 1957 case 7:
8ee2d316 1958 label = "Relative angle: Jet and Reaction Plane";
8ce3d590 1959 nbins = 3; // (12) 48
fc392675 1960 xmin = 0.;
8ee2d316 1961 xmax = 0.5*pi;
fc392675 1962 break;
1963
139e13f4 1964 case 8:
1965 label = "Jet p_{T}";
e56c3f6e 1966 nbins = 50; // 216
fc392675 1967 xmin = 0.;
e56c3f6e 1968 xmax = 250.; // 216
fc392675 1969 break;
1970
139e13f4 1971 case 9:
fc392675 1972 label = "N-Sigma of pions in TPC";
8ee2d316 1973 nbins = 200;
daa728b0 1974 xmin = -10.0;
1975 xmax = 10.0;
fc392675 1976 break;
1977
139e13f4 1978 case 10:
1979 label = "N-Sigma of pions in TOF";
1980 nbins = 200;
1981 xmin = -10.;
1982 xmax = 10.;
1983 break;
1984
1985 case 11:
1986 label = "TPC PID determination";
1987 nbins = 5;
1988 xmin = 0.;
1989 xmax = 5.;
1990 break;
1991
fc392675 1992 case 12:
139e13f4 1993 label = "ITS PID determination";
1994 nbins = 5;
1995 xmin = 0.;
1996 xmax = 5.;
1997 break;
1998
1999 case 13:
2000 label = "TOF PID determination";
2001 nbins = 5;
2002 xmin = 0.;
2003 xmax = 5.;
2004 break;
2005
2006 case 14:
fc392675 2007 label = "N-Sigma of protons in TPC";
daa728b0 2008 nbins = 200;
2009 xmin = -10.;
2010 xmax = 10.;
fc392675 2011 break;
2012
139e13f4 2013 case 15:
fc392675 2014 label = "N-Sigma of kaons in TPC";
daa728b0 2015 nbins = 200;
2016 xmin = -10.;
2017 xmax = 10.;
fc392675 2018 break;
2019
139e13f4 2020 case 16:
fc392675 2021 label = "N-Sigma of pions in ITS";
8ee2d316 2022 nbins = 200;
daa728b0 2023 xmin = -10.0;
2024 xmax = 10.0;
fc392675 2025 break;
2026
139e13f4 2027 case 17:
fc392675 2028 label = "N-Sigma of protons in ITS";
daa728b0 2029 nbins = 200;
2030 xmin = -10.;
2031 xmax = 10.;
fc392675 2032 break;
2033
139e13f4 2034 case 18:
fc392675 2035 label = "N-Sigma of kaons in ITS";
daa728b0 2036 nbins = 200;
2037 xmin = -10.;
2038 xmax = 10.;
fc392675 2039 break;
2040
139e13f4 2041 case 19:
fc392675 2042 label = "N-Sigma of protons in TOF";
daa728b0 2043 nbins = 200;
2044 xmin = -10.;
2045 xmax = 10.;
fc392675 2046 break;
2047
139e13f4 2048 case 20:
fc392675 2049 label = "N-Sigma of kaons in TOF";
daa728b0 2050 nbins = 200;
2051 xmin = -10.;
2052 xmax = 10.;
fc392675 2053 break;
2054
fc392675 2055 } // end of switch
2056} // end of get dimension parameters PID
2057
8ee2d316 2058void AliAnalysisTaskEmcalJetHadEPpid::Terminate(Option_t *) {
fc392675 2059 cout<<"#########################"<<endl;
2060 cout<<"#### DONE RUNNING!!! ####"<<endl;
2061 cout<<"#########################"<<endl;
fc392675 2062} // end of terminate
2063
8ee2d316 2064//________________________________________________________________________
2065Int_t AliAnalysisTaskEmcalJetHadEPpid::AcceptMyJet(AliEmcalJet *jet) {
2066 //applies all jet cuts except pt
2067 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax)) return 0;
2068 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax)) return 0;
2069 if (jet->Area()<fAreacut) return 0;
2070 // prevents 0 area jets from sneaking by when area cut == 0
2071 if (jet->Area()==0) return 0;
2072 //exclude jets with extremely high pt tracks which are likely misreconstructed
2073 if(jet->MaxTrackPt()>100) return 0;
8ee2d316 2074
2075 //passed all above cuts
2076 return 1;
2077}
fc392675 2078
2079//void AliAnalysisTaskEmcalJetHadEPpid::FillAnalysisSummaryHistogram() const
2080void AliAnalysisTaskEmcalJetHadEPpid::SetfHistPIDcounterLabels(TH1* h) const
2081{
2082 // fill the analysis summary histrogram, saves all relevant analysis settigns
d60e724e 2083 h->GetXaxis()->SetBinLabel(1, "TPC: Unidentified");
2084 h->GetXaxis()->SetBinLabel(2, "TPC: Pion");
2085 h->GetXaxis()->SetBinLabel(3, "TPC: Kaon");
2086 h->GetXaxis()->SetBinLabel(4, "TPC: Proton");
2087 h->GetXaxis()->SetBinLabel(5, "ITS: Unidentified");
2088 h->GetXaxis()->SetBinLabel(6, "ITS: Pion");
2089 h->GetXaxis()->SetBinLabel(7, "ITS: Kaon");
2090 h->GetXaxis()->SetBinLabel(8, "ITS: Proton");
2091 h->GetXaxis()->SetBinLabel(9, "TOF: Unidentified");
2092 h->GetXaxis()->SetBinLabel(10, "TOF: Pion");
2093 h->GetXaxis()->SetBinLabel(11, "TOF: Kaon");
2094 h->GetXaxis()->SetBinLabel(12, "TOF: Proton");
2095 h->GetXaxis()->SetBinLabel(14, "Unidentified tracks");
2096
2097 // set x-axis labels vertically
2098 h->LabelsOption("v");
fc392675 2099}
daa728b0 2100
f9b4eee4 2101//void AliAnalysisTaskEmcalJetHadEPpid::FillAnalysisSummaryHistogram() const
2102void AliAnalysisTaskEmcalJetHadEPpid::SetfHistQAcounterLabels(TH1* h) const
2103{
d60e724e 2104 // label bins of the analysis event summary
f9b4eee4 2105 h->GetXaxis()->SetBinLabel(1, "All events started");
2106 h->GetXaxis()->SetBinLabel(2, "object check");
2107 h->GetXaxis()->SetBinLabel(3, "aod/esd check");
2108 h->GetXaxis()->SetBinLabel(4, "centrality check");
2109 h->GetXaxis()->SetBinLabel(5, "zvertex check");
2110 h->GetXaxis()->SetBinLabel(6, "list check");
2111 h->GetXaxis()->SetBinLabel(7, "track/jet pointer check");
e56c3f6e 2112 h->GetXaxis()->SetBinLabel(8, "tracks & jets < than 1 check");
f9b4eee4 2113 h->GetXaxis()->SetBinLabel(9, "after track/jet loop to get highest pt");
2114 h->GetXaxis()->SetBinLabel(10, "accepted jets");
2115 h->GetXaxis()->SetBinLabel(11, "jets meeting pt threshold");
d60e724e 2116 h->GetXaxis()->SetBinLabel(12, "accepted tracks in events w/ trigger jet");
2117 h->GetXaxis()->SetBinLabel(13, "after AliVEvent & fPIDResponse");
f9b4eee4 2118 h->GetXaxis()->SetBinLabel(14, "events before event mixing");
d60e724e 2119 h->GetXaxis()->SetBinLabel(15, "mixed events w/ pool");
f9b4eee4 2120 h->GetXaxis()->SetBinLabel(16, "event mixing: jets");
2121 h->GetXaxis()->SetBinLabel(17, "event mixing: nMix");
2122 h->GetXaxis()->SetBinLabel(18, "event mixing: nbackground tracks");
2123 h->GetXaxis()->SetBinLabel(19, "event mixing: THE END");
d60e724e 2124
2125 // set x-axis labels vertically
2126 h->LabelsOption("v");
2127}
2128
2129void AliAnalysisTaskEmcalJetHadEPpid::SetfHistEvtSelQALabels(TH1* h) const
2130{
2131 // label bins of the analysis trigger selection summary
2132 h->GetXaxis()->SetBinLabel(1, "no trigger");
2133 h->GetXaxis()->SetBinLabel(2, "kAny");
2134 h->GetXaxis()->SetBinLabel(3, "kAnyINT");
2135 h->GetXaxis()->SetBinLabel(4, "kMB");
2136 h->GetXaxis()->SetBinLabel(5, "kINT7");
2137 h->GetXaxis()->SetBinLabel(6, "kEMC1");
2138 h->GetXaxis()->SetBinLabel(7, "kEMC7");
2139 h->GetXaxis()->SetBinLabel(8, "kEMC8");
2140 h->GetXaxis()->SetBinLabel(9, "kEMCEJE");
2141 h->GetXaxis()->SetBinLabel(10, "kEMCEGA");
2142 h->GetXaxis()->SetBinLabel(11, "kCentral");
2143 h->GetXaxis()->SetBinLabel(12, "kSemiCentral");
2144 h->GetXaxis()->SetBinLabel(13, "kINT8");
2145 h->GetXaxis()->SetBinLabel(14, "kEMCEJE or kMB");
2146 h->GetXaxis()->SetBinLabel(15, "kEMCEGA or kMB");
2147 h->GetXaxis()->SetBinLabel(16, "kAnyINT or kMB");
2148 h->GetXaxis()->SetBinLabel(17, "kEMCEJE & kMB");
2149 h->GetXaxis()->SetBinLabel(18, "kEMCEGA & kMB");
2150 h->GetXaxis()->SetBinLabel(19, "kAnyINT & kMB");
2151
d60e724e 2152 // set x-axis labels vertically
2153 h->LabelsOption("v");
2154 //h->LabelsDeflate("X");
f9b4eee4 2155}
2156
daa728b0 2157//______________________________________________________________________
e56c3f6e 2158THnSparse* AliAnalysisTaskEmcalJetHadEPpid::NewTHnSparseFCorr(const char* name, UInt_t entries) {
daa728b0 2159 // generate new THnSparseD, axes are defined in GetDimParamsD()
2160 Int_t count = 0;
2161 UInt_t tmp = entries;
2162 while(tmp!=0){
2163 count++;
2164 tmp = tmp &~ -tmp; // clear lowest bit
2165 }
2166
2167 TString hnTitle(name);
2168 const Int_t dim = count;
2169 Int_t nbins[dim];
2170 Double_t xmin[dim];
2171 Double_t xmax[dim];
2172
2173 Int_t i=0;
2174 Int_t c=0;
2175 while(c<dim && i<32){
2176 if(entries&(1<<i)){
daa728b0 2177 TString label("");
2178 GetDimParamsCorr(i, label, nbins[c], xmin[c], xmax[c]);
2179 hnTitle += Form(";%s",label.Data());
2180 c++;
2181 }
2182
2183 i++;
2184 }
2185 hnTitle += ";";
2186
e56c3f6e 2187 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
2188} // end of NewTHnSparseF
daa728b0 2189
2190//______________________________________________________________________________________________
2191void AliAnalysisTaskEmcalJetHadEPpid::GetDimParamsCorr(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
2192{
2193 //stores label and binning of axis for THnSparse
2194 const Double_t pi = TMath::Pi();
2195
2196 switch(iEntry){
2197
2198 case 0:
2199 label = "V0 centrality (%)";
2200 nbins = 10;
2201 xmin = 0.;
2202 xmax = 100.;
2203 break;
2204
2205 case 1:
2206 label = "Jet p_{T}";
e56c3f6e 2207 nbins = 50; // 216
daa728b0 2208 xmin = 0.;
e56c3f6e 2209 xmax = 250.; // 216
daa728b0 2210 break;
2211
2212 case 2:
2213 label = "Relative angle: Jet and Reaction Plane";
8ce3d590 2214 nbins = 3; // (12) 48
daa728b0 2215 xmin = 0.;
2216 xmax = 0.5*pi;
2217 break;
2218
f9b4eee4 2219 case 3:
2220 label = "Z-vertex";
2221 nbins = 10;
2222 xmin = -10.;
2223 xmax = 10.;
2224 break;
2225
2226 case 4:
2227 label = "Jet p_{T} corrected with Local Rho";
e56c3f6e 2228 nbins = 50; // 250
f9b4eee4 2229 xmin = -50.;
2230 xmax = 200.;
2231 break;
2232
2233 case 5:
2234 label = "Jet p_{T} corrected with Global Rho";
e56c3f6e 2235 nbins = 50; // 250
f9b4eee4 2236 xmin = -50.;
2237 xmax = 200.;
2238 break;
2239
daa728b0 2240 }// end of switch
2241} // end of Correction (ME) sparse
2242
56523939 2243//________________________________________________________________________
2244//Int_t AliAnalysisTaskEmcalJetHadEPpid::AcceptFlavourJet(AliEmcalJet* fljet, Int_t NUM, Int_t NUM2, Int_t NUM3) {
2245Int_t AliAnalysisTaskEmcalJetHadEPpid::AcceptFlavourJet(AliEmcalJet* fljet, Int_t NUM) {
2246 // Get jet if accepted for given flavour tag
2247 // If jet not accepted return 0
2248 if(!fljet) {
2249 AliError(Form("%s:Jet not found",GetName()));
2250 return 0;
2251 }
2252
fdf5fcfe 2253 Int_t flavNUM = -99;//, flavNUM2 = -99, flavNUM3 = -99; FIXME commented out to avoid compiler warning
56523939 2254 flavNUM = NUM;
2255 //flavNUM2 = NUM2;
2256 //flavNUM3 = NUM3;
daa728b0 2257
56523939 2258/*
2259 // from the AliEmcalJet class, the tagging enumerator
2260 enum EFlavourTag{
2261 kDStar = 1<<0, kD0 = 1<<1,
2262 kSig1 = 1<<2, kSig2 = 1<<3,
2263 kBckgrd1 = 1<<4, kBckgrd2 = 1<<5, kBckgrd3 = 1<<6
2264 };
2265 // bit 0 = no tag, bit 1 = Dstar, bit 2 = D0 and so forth...
2266*/
2267
2268 // get flavour of jet (if any)
2269 Int_t flav = -999;
2270 flav = fljet->GetFlavour();
2271
2272 // cases (for now..)
2273 // 3 = electron rich, 5 = hadron (bkgrd) rich
2274 // if flav < 1, its not tagged, so return kFALSE (0)
2275 if(flav < 1) return 0;
2276
2277 // if flav is not equal to what we want then return kFALSE (0)
2278 //if(flav != flavNUM && flav != flavNUM2 && flav != flavNUM3) return 0;
2279 if(flav != flavNUM) return 0;
2280
2281 // we have the flavour we want, so return kTRUE (1)
2282 //if(flav == flavNUM || flav == flavNUM2 || flav == flavNUM3) return 1;
2283 if(flav == flavNUM) return 1;
2284
2285 // we by default have a flavour tagged jet
2286 return 1;
2287}