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