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