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