]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalJetHMEC.cxx
correcting all inclusive trigger for jetpt qa
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalJetHMEC.cxx
CommitLineData
7f71d351 1// $Id$
5b38fc6d 2
1af24178 3//////////
4//Measure Jet-hadron correlations
5//Does event Mixing using AliEventPoolManager
6/////////
7
5b38fc6d 8#include "AliAnalysisTaskEmcalJetHMEC.h"
9
1101e468 10#include "TChain.h"
11#include "TTree.h"
12#include "TList.h"
13#include "TH1F.h"
14#include "TH2F.h"
15#include "THnSparse.h"
16#include "TCanvas.h"
17#include <TClonesArray.h>
18#include <TParticle.h>
19#include "AliVTrack.h"
20#include "TParameter.h"
21
22#include "AliAODEvent.h"
23#include "AliAnalysisTask.h"
24#include "AliAnalysisManager.h"
25
26#include "AliESDEvent.h"
27#include "AliESDInputHandler.h"
28#include "AliESDCaloCluster.h"
29#include "AliESDVertex.h"
30#include "AliCentrality.h"
31#include "AliAODJet.h"
32#include "AliEmcalJet.h"
33#include "AliESDtrackCuts.h"
1101e468 34
5b38fc6d 35#include "TVector3.h"
36#include "AliPicoTrack.h"
55f64c2f 37#include "AliEventPoolManager.h"
5b38fc6d 38
1101e468 39ClassImp(AliAnalysisTaskEmcalJetHMEC)
40
41//________________________________________________________________________
42AliAnalysisTaskEmcalJetHMEC::AliAnalysisTaskEmcalJetHMEC() :
43 AliAnalysisTaskSE(),
44 fTracksName("tracks"),
45 fJetsName("jets"),
46 fPhimin(-10),
47 fPhimax(10),
48 fEtamin(-0.9),
49 fEtamax(0.9),
50 fAreacut(0.0),
965c985f 51 fTrkBias(5),
52 fClusBias(5),
22d3f9c2 53 fTrkEta(0.9),
fab37389 54 fDoEventMixing(0),
55 fMixingTracks(50000),
1101e468 56 fESD(0),
55f64c2f 57 fPoolMgr(0x0),
58 fOutputList(0),
1101e468 59 fHistTrackPt(0),
60 fHistCentrality(0),
61 fHistJetEtaPhi(0),
fab37389 62 fHistJetHEtaPhi(0),
22d3f9c2 63 fhnMixedEvents(0x0),
64 fhnJH(0x0)
1101e468 65{
66 // Default Constructor
67
22d3f9c2 68 for(Int_t ipta=0; ipta<7; ipta++){
69 fHistTrackEtaPhi[ipta]=0;
70 }
71
72
1101e468 73 for(Int_t icent = 0; icent<6; ++icent){
74 fHistJetPt[icent]=0;
81941f29 75 fHistJetPtBias[icent]=0;
41f87d59 76 fHistLeadJetPt[icent]=0;
77 fHistLeadJetPtBias[icent]=0;
81941f29 78 fHistJetPtTT[icent]=0;
55f64c2f 79 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
1101e468 80 for(Int_t ieta = 0; ieta<3; ++ieta){
81 fHistJetH[icent][iptjet][ieta]=0;
82 fHistJetHBias[icent][iptjet][ieta]=0;
81941f29 83 fHistJetHTT[icent][iptjet][ieta]=0;
84
1101e468 85 }
86 }
87 }
88
89}
90//________________________________________________________________________
91AliAnalysisTaskEmcalJetHMEC::AliAnalysisTaskEmcalJetHMEC(const char *name) :
92 AliAnalysisTaskSE(name),
93 fTracksName("tracks"),
94 fJetsName("jets"),
95 fPhimin(-10),
96 fPhimax(10),
97 fEtamin(-0.9),
98 fEtamax(0.9),
99 fAreacut(0.0),
965c985f 100 fTrkBias(5),
101 fClusBias(5),
22d3f9c2 102 fTrkEta(0.9),
55f64c2f 103 fDoEventMixing(0),
104 fMixingTracks(50000),
1101e468 105 fESD(0),
55f64c2f 106 fPoolMgr(0x0),
1101e468 107 fOutputList(0),
108 fHistTrackPt(0),
109 fHistCentrality(0),
110 fHistJetEtaPhi(0),
55f64c2f 111 fHistJetHEtaPhi(0),
22d3f9c2 112 fhnMixedEvents(0x0),
113 fhnJH(0x0)
1101e468 114{
115 // Constructor
22d3f9c2 116 for(Int_t ipta=0; ipta<7; ipta++){
117 fHistTrackEtaPhi[ipta]=0;
118 }
1101e468 119 for(Int_t icent = 0; icent<6; ++icent){
120 fHistJetPt[icent]=0;
121 fHistJetPtBias[icent]=0;
41f87d59 122 fHistLeadJetPt[icent]=0;
123 fHistLeadJetPtBias[icent]=0;
81941f29 124 fHistJetPtTT[icent]=0;
125 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
1101e468 126 for(Int_t ieta = 0; ieta<3; ++ieta){
127 fHistJetH[icent][iptjet][ieta]=0;
128 fHistJetHBias[icent][iptjet][ieta]=0;
81941f29 129 fHistJetHTT[icent][iptjet][ieta]=0;
1101e468 130 }
131 }
132 }
133
55f64c2f 134
1101e468 135 DefineInput(0, TChain::Class());
136 DefineOutput(1, TList::Class());
137
138}
139
140//________________________________________________________________________
141void AliAnalysisTaskEmcalJetHMEC::UserCreateOutputObjects()
142{
143 // Called once
144
145
146 AliVEventHandler* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
147 if (!handler) {
148 AliError("Input handler not available!");
149 return;
150 }
151
152 OpenFile(1);
153 fOutputList = new TList();
154 fOutputList->SetOwner();
155
1101e468 156
55f64c2f 157
158 // Create histograms
1101e468 159 fHistTrackPt = new TH1F("fHistTrackPt", "P_{T} distribution", 1000, 0.0, 100.0);
160
161
162
163 fHistCentrality = new TH1F("fHistCentrality","centrality",100,0,100);
164
165 fHistJetEtaPhi = new TH2F("fHistJetEtaPhi","Jet eta-phi",900,-1.8,1.8,640,-3.2,3.2);
1101e468 166 fHistJetHEtaPhi = new TH2F("fHistJetHEtaPhi","Jet-Hadron deta-dphi",900,-1.8,1.8,640,-1.6,4.8);
167
168 char name[200];
169
22d3f9c2 170 for(Int_t ipta=0; ipta<7; ++ipta){
171 sprintf(name, "fHistTrackEtaPhi_%i", ipta);
c1076e58 172 fHistTrackEtaPhi[ipta] = new TH2F(name,name,400,-1,1,640,0.0,2.0*TMath::Pi());
22d3f9c2 173 fOutputList->Add(fHistTrackEtaPhi[ipta]);
174
175 }
1101e468 176
177 for(Int_t icent = 0; icent<6; ++icent){
178 sprintf(name,"fHistJetPt_%i",icent);
179 fHistJetPt[icent] = new TH1F(name,name,200,0,200);
180 fOutputList->Add(fHistJetPt[icent]);
181
182 sprintf(name,"fHistJetPtBias_%i",icent);
183 fHistJetPtBias[icent] = new TH1F(name,name,200,0,200);
184 fOutputList->Add(fHistJetPtBias[icent]);
185
41f87d59 186 sprintf(name,"fHistLeadJetPt_%i",icent);
187 fHistLeadJetPt[icent] = new TH1F(name,name,200,0,200);
188 fOutputList->Add(fHistLeadJetPt[icent]);
189
190 sprintf(name,"fHistLeadJetPtBias_%i",icent);
191 fHistLeadJetPtBias[icent] = new TH1F(name,name,200,0,200);
192 fOutputList->Add(fHistLeadJetPtBias[icent]);
193
81941f29 194 sprintf(name,"fHistJetPtTT_%i",icent);
195 fHistJetPtTT[icent] = new TH1F(name,name,200,0,200);
196 fOutputList->Add(fHistJetPtTT[icent]);
197
198 for(Int_t iptjet = 0; iptjet<5; ++iptjet){
1101e468 199 for(Int_t ieta = 0; ieta<3; ++ieta){
200 sprintf(name,"fHistJetH_%i_%i_%i",icent,iptjet,ieta);
201 fHistJetH[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
202 fOutputList->Add(fHistJetH[icent][iptjet][ieta]);
203
204 sprintf(name,"fHistJetHBias_%i_%i_%i",icent,iptjet,ieta);
205 fHistJetHBias[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
206 fOutputList->Add(fHistJetHBias[icent][iptjet][ieta]);
207
81941f29 208 sprintf(name,"fHistJetHTT_%i_%i_%i",icent,iptjet,ieta);
209 fHistJetHTT[icent][iptjet][ieta]=new TH2F(name,name,64,-0.5*TMath::Pi(),1.5*TMath::Pi(),300,0,30);
210 fOutputList->Add(fHistJetHTT[icent][iptjet][ieta]);
211
1101e468 212 }
213 }
214 }
215
22d3f9c2 216
217
218 UInt_t cifras = 0; // bit coded, see GetDimParams() below
c1076e58 219 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<7 | 1<<8;
22d3f9c2 220 fhnJH = NewTHnSparseF("fhnJH", cifras);
221
222 fhnJH->Sumw2();
223
224 fOutputList->Add(fhnJH);
225
226
55f64c2f 227 if(fDoEventMixing){
c1076e58 228 cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<7 | 1<<8;
229 fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);
230
231 fhnMixedEvents->Sumw2();
232
233 fOutputList->Add(fhnMixedEvents);
234
965c985f 235 }
236
1101e468 237
238 fOutputList->Add(fHistTrackPt);
239 fOutputList->Add(fHistCentrality);
240 fOutputList->Add(fHistJetEtaPhi);
1101e468 241 fOutputList->Add(fHistJetHEtaPhi);
242
243
244 PostData(1, fOutputList);
245
55f64c2f 246
247 //Event Mixing
248 Int_t trackDepth = fMixingTracks;
249 Int_t poolsize = 1000; // Maximum number of events, ignored in the present implemented of AliEventPoolManager
250
251 Int_t nZvtxBins = 7+1+7;
252 // bins for second buffer are shifted by 100 cm
e7fa65db 253 Double_t vertexBins[] = { -10, -5, -3, -1, 1, 3, 5, 10, 93, 95, 97, 99, 101, 103, 105, 107 };
55f64c2f 254 Double_t* zvtxbin = vertexBins;
255
256 Int_t nCentralityBins = 100;
257 Double_t centralityBins[nCentralityBins];
258 for(Int_t ic=0; ic<nCentralityBins; ic++){
259 centralityBins[ic]=1.0*ic;
260 }
55f64c2f 261
262 fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centralityBins, nZvtxBins, zvtxbin);
263
264
265
1101e468 266}
267
268//________________________________________________________________________
269
270Double_t AliAnalysisTaskEmcalJetHMEC:: RelativePhi(Double_t mphi,Double_t vphi) {
271
272
273 if (vphi < -1*TMath::Pi()) vphi += (2*TMath::Pi());
274 else if (vphi > TMath::Pi()) vphi -= (2*TMath::Pi());
275 if (mphi < -1*TMath::Pi()) mphi += (2*TMath::Pi());
276 else if (mphi > TMath::Pi()) mphi -= (2*TMath::Pi());
277 Double_t dphi = vphi-mphi;
278 if (dphi < -1*TMath::Pi()) dphi += (2*TMath::Pi());
279 else if (dphi > TMath::Pi()) dphi -= (2*TMath::Pi());
280
281 return dphi;//dphi in [-Pi, Pi]
282}
283
284
285//________________________________________________________________________
286Int_t AliAnalysisTaskEmcalJetHMEC::GetCentBin(Double_t cent) const
287{
288 // Get centrality bin.
289
290 Int_t centbin = -1;
291 if (cent>=0 && cent<10)
292 centbin = 0;
293 else if (cent>=10 && cent<20)
294 centbin = 1;
295 else if (cent>=20 && cent<30)
296 centbin = 2;
297 else if (cent>=30 && cent<40)
298 centbin = 3;
299 else if (cent>=40 && cent<50)
300 centbin = 4;
301 else if (cent>=50 && cent<90)
302 centbin = 5;
303 return centbin;
304}
305
306
307//________________________________________________________________________
308Int_t AliAnalysisTaskEmcalJetHMEC::GetEtaBin(Double_t eta) const
309{
310 // Get eta bin for histos.
311
312 Int_t etabin = -1;
313 if (TMath::Abs(eta)<=0.4)
314 etabin = 0;
315 else if (TMath::Abs(eta)>0.4 && TMath::Abs(eta)<0.8)
316 etabin = 1;
317 else if (TMath::Abs(eta)>=0.8)
318 etabin = 2;
319 return etabin;
320}
321//________________________________________________________________________
81941f29 322Int_t AliAnalysisTaskEmcalJetHMEC::GetpTjetBin(Double_t pt) const
1101e468 323{
81941f29 324 // Get jet pt bin for histos.
325
326 Int_t ptbin = -1;
fab37389 327 if (pt>=15 && pt<20)
81941f29 328 ptbin = 0;
81941f29 329 else if (pt>=20 && pt<25)
fab37389 330 ptbin = 1;
81941f29 331 else if (pt>=25 && pt<30)
fab37389 332 ptbin = 2;
333 else if (pt>=30 && pt<60)
81941f29 334 ptbin = 3;
fab37389 335 else if (pt>=60)
81941f29 336 ptbin = 4;
337
338
339 return ptbin;
1101e468 340}
341
342
343//________________________________________________________________________
344void AliAnalysisTaskEmcalJetHMEC::UserExec(Option_t *)
345{
346
347
348 // Main loop called for each event
349 // esd or aod mode
350 Bool_t esdMode = kTRUE;
351 if (dynamic_cast<AliAODEvent*>(InputEvent()))
352 esdMode = kFALSE;
353
354
355 if (esdMode) {
356 // optimization in case autobranch loading is off
357 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
358 if (fTracksName == "Tracks")
359 am->LoadBranch("Tracks");
360 }
361
362
363 //get centrality
364 TList *list = InputEvent()->GetList();
365 AliCentrality *centrality = InputEvent()->GetCentrality() ;
366 Double_t fcent=-1;
367 if(centrality)
368 fcent = centrality->GetCentralityPercentile("V0M");
369 else
370 fcent=99;//probably pp data
371
372 if (fcent<0) {
373 AliError(Form("Centrality negative: %f", fcent));
374 return;
375 }
376
377
378 fHistCentrality->Fill(fcent);
379 Int_t centbin = GetCentBin(fcent);
380
1af24178 381 if(centbin<0)
382 return;
383
1101e468 384 TClonesArray *jets = 0;
385 TClonesArray *tracks = 0;
386
387 tracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));
388 if (!tracks) {
389 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
390 return;
391 }
392 const Int_t Ntracks=tracks->GetEntries();
393
394 jets= dynamic_cast<TClonesArray*>(list->FindObject(fJetsName));
395 const Int_t Njets = jets->GetEntries();
396
81941f29 397 //Leticia's loop to find hardest track
398
399 Int_t iTT=-1;
400 Double_t ptmax=-10;
401
402 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++)
403 {
404 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
405 if (!track) {
406 printf("ERROR: Could not receive track %d\n", iTracks);
407 continue;
408 }
409
410 if(TMath::Abs(track->Eta())>0.9) continue;
411 if(track->Pt()<0.15)continue;
412 //iCount++;
413 if(track->Pt()>ptmax){
414 ptmax=track->Pt();
415 iTT=iTracks;
416 }
417 }
1101e468 418
419
81941f29 420 Int_t ijethi=-1;
421
422 Double_t highestjetpt=0.0;
423
424 Int_t passedTTcut=0;
1101e468 425
426 for (Int_t ijet = 0; ijet < Njets; ijet++)
427 {
81941f29 428
1101e468 429 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
430
431 if (!jet)
432 continue;
433
c1076e58 434 if(!AcceptJet(jet))
965c985f 435 continue;
1101e468 436
1101e468 437 Double_t jetPt = jet->Pt();
438
59d5ae99 439 if(highestjetpt<jetPt){
440 ijethi=ijet;
441 highestjetpt=jetPt;
442 }
443
444 }
445
446
447
c1076e58 448 for (Int_t ijet = 0; ijet < Njets; ijet++){
59d5ae99 449
c1076e58 450 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
451
452 if(!AcceptJet(jet))
453 continue;
454
455
55f64c2f 456 Double_t jetphi = jet->Phi();
59d5ae99 457 Double_t jetPt = jet->Pt();
55f64c2f 458 Double_t jeteta=jet->Eta();
1101e468 459
41f87d59 460 Double_t leadjet=0;
461 if (ijet==ijethi) leadjet=1;
462
463
965c985f 464 fHistJetPt[centbin]->Fill(jet->Pt());
41f87d59 465 fHistLeadJetPt[centbin]->Fill(jet->Pt());
965c985f 466
41f87d59 467 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
965c985f 468 fHistJetPtBias[centbin]->Fill(jet->Pt());
41f87d59 469 fHistLeadJetPtBias[centbin]->Fill(jet->Pt());
470 }
81941f29 471
1101e468 472 fHistJetEtaPhi->Fill(jet->Eta(),jetphi);
473
1101e468 474
81941f29 475 if(iTT>0){
476 AliVTrack* TT = static_cast<AliVTrack*>(tracks->At(iTT));
477 if(TMath::Abs(jetphi-TT->Phi()-TMath::Pi())<0.6) passedTTcut=1;
478 else passedTTcut=0;
479 }
1101e468 480
81941f29 481 if(passedTTcut)
482 fHistJetPtTT[centbin]->Fill(jet->Pt());
59d5ae99 483
81941f29 484
52c9d0d3 485 if (highestjetpt>15) {
81941f29 486
81941f29 487 for (Int_t iTracks = 0; iTracks < Ntracks; iTracks++)
488 {
489 AliVTrack* track = static_cast<AliVTrack*>(tracks->At(iTracks));
490 if (!track) {
491 printf("ERROR: Could not receive track %d\n", iTracks);
492 continue;
493 }
494
22d3f9c2 495 if(TMath::Abs(track->Eta())>fTrkEta) continue;
1101e468 496
497 fHistTrackPt->Fill(track->Pt());
498
81941f29 499 if (track->Pt()<0.15)
1101e468 500 continue;
501
502 Double_t trackphi = track->Phi();
503 if (trackphi > TMath::Pi())
504 trackphi = trackphi-2*TMath::Pi();
505
506 Double_t tracketa=track->Eta();
22d3f9c2 507 Double_t trackpt=track->Pt();
1101e468 508 Double_t deta=tracketa-jeteta;
509 Int_t ieta=GetEtaBin(deta);
510
511 //Jet pt, track pt, dPhi,deta,fcent
512 Double_t dphijh = RelativePhi(jetphi,trackphi);
513 if (dphijh < -0.5*TMath::Pi())
22d3f9c2 514 dphijh+= 2*TMath::Pi();
515 if (dphijh > 1.5*TMath::Pi()) dphijh-=2.*TMath::Pi();
516
1101e468 517
518 Int_t iptjet=-1;
519 iptjet=GetpTjetBin(jetPt);
520
521 fHistJetH[centbin][iptjet][ieta]->Fill(dphijh,track->Pt());
522 fHistJetHEtaPhi->Fill(deta,dphijh);
22d3f9c2 523
524 Double_t dR=sqrt(deta*deta+dphijh*dphijh);
525
526 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
527 fHistJetHBias[centbin][iptjet][ieta]->Fill(dphijh,trackpt);
528
c1076e58 529
e7fa65db 530 Double_t triggerEntries[8] = {fcent,jetPt,trackpt,dR,deta,dphijh,0.0,leadjet};
22d3f9c2 531 fhnJH->Fill(triggerEntries);
532 }
533
81941f29 534 if(passedTTcut)
22d3f9c2 535 fHistJetHTT[centbin][iptjet][ieta]->Fill(dphijh,trackpt);
1101e468 536
1101e468 537
538 } //track loop
59d5ae99 539 }//jet pt cut
55f64c2f 540
c1076e58 541 }//jet loop
55f64c2f 542
1af24178 543
544 //Prepare to do event mixing
545
55f64c2f 546 // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
547 TObjArray* tracksClone = CloneAndReduceTrackList(tracks);
548 //delete tracks;
549
550 Double_t fvertex[3]={0,0,0};
551 InputEvent()->GetPrimaryVertex()->GetXYZ(fvertex);
41f87d59 552 Double_t zVtx=fvertex[2];
965c985f 553
55f64c2f 554 if(fDoEventMixing>0){
555
556 // event mixing
557
558 // 1. First get an event pool corresponding in mult (cent) and
559 // zvertex to the current event. Once initialized, the pool
560 // should contain nMix (reduced) events. This routine does not
561 // pre-scan the chain. The first several events of every chain
562 // will be skipped until the needed pools are filled to the
563 // specified depth. If the pool categories are not too rare, this
564 // should not be a problem. If they are rare, you could lose
565 // statistics.
566
567 // 2. Collect the whole pool's content of tracks into one TObjArray
568 // (bgTracks), which is effectively a single background super-event.
569
570 // 3. The reduced and bgTracks arrays must both be passed into
571 // FillCorrelations(). Also nMix should be passed in, so a weight
572 // of 1./nMix can be applied.
573
574
575
576
577
578 AliEventPool* pool = fPoolMgr->GetEventPool(fcent, zVtx);
55f64c2f 579
580 if (!pool)
581 AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fcent, zVtx));
582
583
1af24178 584 //check for a trigger jet
c1076e58 585
1af24178 586
c1076e58 587 if (pool->IsReady() || pool->NTracksInPool() > fMixingTracks / 10 || pool->GetCurrentNEvents() >= 5)
588 {
589
590 for (Int_t ijet = 0; ijet < Njets; ijet++){
591
592 Double_t leadjet=0;
593 if (ijet==ijethi) leadjet=1;
1af24178 594
c1076e58 595 AliEmcalJet *jet = static_cast<AliEmcalJet*>(jets->At(ijet));
596
597 if(!AcceptJet(jet))
598 continue;
599
600 Double_t jetPt = jet->Pt();
1af24178 601 Double_t jetphi = jet->Phi();
1af24178 602 Double_t jeteta=jet->Eta();
603
604
605 Int_t nMix = pool->GetCurrentNEvents();
606
965c985f 607 //Fill for biased jet triggers only
608 if ((jet->MaxTrackPt()>fTrkBias) || (jet->MaxClusterPt()>fClusBias)){
609
610 // Fill mixed-event histos here
611 for (Int_t jMix=0; jMix<nMix; jMix++)
612 {
613 TObjArray* bgTracks = pool->GetEvent(jMix);
614 const Int_t Nbgtrks = bgTracks->GetEntries();
615 for(Int_t ibg=0; ibg<Nbgtrks; ibg++){
616 AliPicoTrack *part = static_cast<AliPicoTrack*>(bgTracks->At(ibg));
617 if(!part) continue;
618
619 Double_t DPhi = jetphi - part->Phi();
620 Double_t DEta = jeteta - part->Eta();
621 Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta);
622 if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
623 if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
c1076e58 624 Double_t triggerEntries[8] = {fcent,jetPt,part->Pt(),DR,DEta,DPhi,0.0,leadjet};
965c985f 625 fhnMixedEvents->Fill(triggerEntries,1./nMix);
626
627
628 }
1af24178 629 }
965c985f 630 }
55f64c2f 631 }
55f64c2f 632 }
55f64c2f 633
1af24178 634 //update pool if jet in event or not
635 pool->UpdatePool(tracksClone);
636
59d5ae99 637 }
638
1af24178 639
640
22d3f9c2 641
1101e468 642 PostData(1, fOutputList);
643}
644
645//________________________________________________________________________
646void AliAnalysisTaskEmcalJetHMEC::Terminate(Option_t *)
647{
648 //just terminate
649
650}
651
c1076e58 652//________________________________________________________________________
653Int_t AliAnalysisTaskEmcalJetHMEC::AcceptJet(AliEmcalJet *jet)
654{
655 //applies all jet cuts except pt
656 float jetphi = jet->Phi();
657 if (jetphi>TMath::Pi())
658 jetphi = jetphi-2*TMath::Pi();
659
660 if ((jet->Phi()<fPhimin)||(jet->Phi()>fPhimax))
661 return 0;
662 if ((jet->Eta()<fEtamin)||(jet->Eta()>fEtamax))
663 return 0;
664 if (jet->Area()<fAreacut)
665 return 0;
666 //prevents 0 area jets from sneaking by when area cut == 0
667 if (jet->Area()==0)
668 return 0;
669
670 //exclude jets with extremely high pt tracks which are likely misreconstructed
671 if(jet->MaxTrackPt()>100)
672 return 0;
673
674 //passed all above cuts
675 return 1;
676
677}
678
679//________________________________________________________________________
680
55f64c2f 681THnSparse* AliAnalysisTaskEmcalJetHMEC::NewTHnSparseF(const char* name, UInt_t entries)
682{
683 // generate new THnSparseF, axes are defined in GetDimParams()
684
685 Int_t count = 0;
686 UInt_t tmp = entries;
687 while(tmp!=0){
688 count++;
689 tmp = tmp &~ -tmp; // clear lowest bit
690 }
691
692 TString hnTitle(name);
693 const Int_t dim = count;
694 Int_t nbins[dim];
695 Double_t xmin[dim];
696 Double_t xmax[dim];
697
698 Int_t i=0;
699 Int_t c=0;
700 while(c<dim && i<32){
701 if(entries&(1<<i)){
702
703 TString label("");
704 GetDimParams(i, label, nbins[c], xmin[c], xmax[c]);
705 hnTitle += Form(";%s",label.Data());
706 c++;
707 }
708
709 i++;
710 }
711 hnTitle += ";";
712
713 return new THnSparseF(name, hnTitle.Data(), dim, nbins, xmin, xmax);
714}
715
716void AliAnalysisTaskEmcalJetHMEC::GetDimParams(Int_t iEntry, TString &label, Int_t &nbins, Double_t &xmin, Double_t &xmax)
717{
718 // stores label and binning of axis for THnSparse
719
720 const Double_t pi = TMath::Pi();
721
722 switch(iEntry){
723
724 case 0:
725 label = "V0 centrality (%)";
726
727 nbins = 10;
728 xmin = 0.;
729 xmax = 100.;
730 break;
731
732
733 case 1:
734 label = "corrected jet pt";
735 nbins = 20;
736 xmin = 0.;
737 xmax = 200.;
738 break;
739
740
741 case 2:
742 label = "track pT";
743
744 nbins = 100;
745 xmin = 0.;
746 xmax = 10;
747 break;
748
749
750 case 3:
751 label = "deltaR";
e7fa65db 752 nbins = 10;
55f64c2f 753 xmin = 0.;
e7fa65db 754 xmax = 5.0;
55f64c2f 755 break;
756
757
758
759 case 4:
760 label = "deltaEta";
22d3f9c2 761 nbins = 24;
762 xmin = -1.2;
763 xmax = 1.2;
55f64c2f 764 break;
765
766
767 case 5:
768 label = "deltaPhi";
5b38fc6d 769 nbins = 64;
55f64c2f 770 xmin = -0.5*pi;
771 xmax = 1.5*pi;
772 break;
773
774
775
776 case 6:
777 label = "leading track";
778 nbins = 13;
779 xmin = 0;
780 xmax = 50;
781 break;
782
783 case 7:
784
785 label = "trigger track";
786 nbins =10;
787 xmin = 0;
788 xmax = 50;
789 break;
790
c1076e58 791 case 8:
792 label = "leading jet";
793 nbins = 3;
794 xmin = -0.5;
795 xmax = 2.5;
796 break;
55f64c2f 797
798
799 }
800
801}
802
803
804//_________________________________________________
805// From CF event mixing code PhiCorrelations
806TObjArray* AliAnalysisTaskEmcalJetHMEC::CloneAndReduceTrackList(TObjArray* tracks)
807{
22d3f9c2 808 // clones a track list by using AliPicoTrack which uses much less memory (used for event mixing)
55f64c2f 809
810 TObjArray* tracksClone = new TObjArray;
811 tracksClone->SetOwner(kTRUE);
812
813 for (Int_t i=0; i<tracks->GetEntriesFast(); i++)
814 {
815 AliVParticle* particle = (AliVParticle*) tracks->At(i);
22d3f9c2 816 if(TMath::Abs(particle->Eta())>fTrkEta) continue;
965c985f 817 if(particle->Pt()<0.15)continue;
818
22d3f9c2 819 Double_t trackpt=particle->Pt();
820
821 Int_t hadbin=-1;
822 if(trackpt<0.5) hadbin=0;
823 else if(trackpt<1) hadbin=1;
824 else if(trackpt<2) hadbin=2;
825 else if(trackpt<3) hadbin=3;
826 else if(trackpt<5) hadbin=4;
827 else if(trackpt<8) hadbin=5;
828 else if(trackpt<20) hadbin=6;
829
830 if(hadbin>-1) fHistTrackEtaPhi[hadbin]->Fill(particle->Eta(),particle->Phi());
831
832
5b38fc6d 833 tracksClone->Add(new AliPicoTrack(particle->Pt(), particle->Eta(), particle->Phi(), particle->Charge(), 0, 0, 0, 0));
55f64c2f 834 }
835
836 return tracksClone;
837}
838
839
1101e468 840
c1076e58 841