]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskEmcalDiJetResponse.cxx
bug-fix: rotation of sub-leading jet in di-jet
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskEmcalDiJetResponse.cxx
CommitLineData
6e8b6371 1//
2// Dijet response analysis task.
3//
4// Author: M.Verweij
5
6#include <TClonesArray.h>
7#include <TH1F.h>
8#include <TH2F.h>
9#include <TH3F.h>
10#include <THnSparse.h>
11#include <TList.h>
12#include <TLorentzVector.h>
13#include <TProfile.h>
14#include <TChain.h>
15#include <TSystem.h>
16#include <TFile.h>
17#include <TKey.h>
18
19#include "AliVCluster.h"
20#include "AliVTrack.h"
21#include "AliEmcalJet.h"
22#include "AliRhoParameter.h"
23#include "AliLog.h"
6e8b6371 24#include "AliEmcalParticle.h"
25#include "AliMCEvent.h"
26#include "AliGenPythiaEventHeader.h"
27#include "AliAODMCHeader.h"
28#include "AliMCEvent.h"
29#include "AliAnalysisManager.h"
30#include "AliJetContainer.h"
31
32#include "AliAnalysisTaskEmcalDiJetResponse.h"
33
34ClassImp(AliAnalysisTaskEmcalDiJetResponse)
35
36//________________________________________________________________________
37AliAnalysisTaskEmcalDiJetResponse::AliAnalysisTaskEmcalDiJetResponse() :
38 AliAnalysisTaskEmcalDiJetBase("AliAnalysisTaskEmcalDiJetResponse"),
39 fDoMatchFullCharged(kTRUE),
40 fhnDiJetResponseCharged(0),
41 fhnDiJetResponseFullCharged(0),
42 fh1TriggersLostCharged(0),
43 fh1TriggersLostFull(0),
67c36e97 44 fh3AssocLostPtDeltaPhiCharged(0),
45 fh3AssocLostPtDeltaPhiFull(0),
6e8b6371 46 fhnMatchingCharged(0),
6ab30d5f 47 fhnMatchingFull(0),
48 fnUsedResponseVar(0)
6e8b6371 49{
50 // Default constructor.
6e8b6371 51
52 SetMakeGeneralHistograms(kTRUE);
53
54 for(Int_t i = 0; i<2; i++) {
55 fh1TriggersCharged[i] = 0;
56 fh1TriggersFull[i] = 0;
57 }
58
59}
60
61//________________________________________________________________________
62AliAnalysisTaskEmcalDiJetResponse::AliAnalysisTaskEmcalDiJetResponse(const char *name) :
63 AliAnalysisTaskEmcalDiJetBase(name),
64 fDoMatchFullCharged(kTRUE),
65 fhnDiJetResponseCharged(0),
66 fhnDiJetResponseFullCharged(0),
67 fh1TriggersLostCharged(0),
68 fh1TriggersLostFull(0),
67c36e97 69 fh3AssocLostPtDeltaPhiCharged(0),
70 fh3AssocLostPtDeltaPhiFull(0),
6e8b6371 71 fhnMatchingCharged(0),
6ab30d5f 72 fhnMatchingFull(0),
73 fnUsedResponseVar(0)
6e8b6371 74{
75 // Standard constructor.
76
77 SetMakeGeneralHistograms(kTRUE);
78
79 for(Int_t i = 0; i<2; i++) {
80 fh1TriggersCharged[i] = 0;
81 fh1TriggersFull[i] = 0;
82 }
83
84}
85
86//________________________________________________________________________
87AliAnalysisTaskEmcalDiJetResponse::~AliAnalysisTaskEmcalDiJetResponse()
88{
89 // Destructor.
90}
91
92
93//________________________________________________________________________
94void AliAnalysisTaskEmcalDiJetResponse::UserCreateOutputObjects()
95{
96 // Create user output.
97
6e8b6371 98 AliAnalysisTaskEmcalDiJetBase::UserCreateOutputObjects();
99
100 Bool_t oldStatus = TH1::AddDirectoryStatus();
101 TH1::AddDirectory(kFALSE);
102
103 //Store dijet vars: pt,trig MC, pt,trig DET, pt,ass MC, pt,ass DET, dPhi MC, dPhi Det, kT MC, kT Det
e50460de 104 const Int_t nBinsSparse0 = 10;
6e8b6371 105 const Int_t nBinsPt = 250;
e50460de 106 const Int_t nBinsDPhi = 36;
107 const Int_t nBinsKt = 25;
6ab30d5f 108 const Int_t nBinsDiJetEta = 40;
e50460de 109 const Int_t nBinsAj = 50;
6ab30d5f 110 const Int_t nBinsVar[2] = {nBinsKt,nBinsDiJetEta};
111
e50460de 112 const Int_t nBins0[nBinsSparse0] = {nBinsPt,nBinsPt,nBinsPt,nBinsPt,nBinsDPhi,nBinsDPhi,nBinsVar[fnUsedResponseVar],nBinsVar[fnUsedResponseVar],nBinsAj,nBinsAj};
6e8b6371 113
114 const Double_t minPt = 0.;
115 const Double_t maxPt = 250.;
e50460de 116 const Double_t minVar[2] = { 0.,-1.};
6ab30d5f 117 const Double_t maxVar[2] = { 100., 1.};
6e8b6371 118
e50460de 119 const Double_t xmin0[nBinsSparse0] = { minPt, minPt, minPt, minPt, 0.5*TMath::Pi(), 0.5*TMath::Pi(), minVar[fnUsedResponseVar], minVar[fnUsedResponseVar],0.,0.};
120 const Double_t xmax0[nBinsSparse0] = { maxPt, maxPt, maxPt, maxPt, 1.5*TMath::Pi(), 1.5*TMath::Pi(), maxVar[fnUsedResponseVar], maxVar[fnUsedResponseVar],1.,1.};
6e8b6371 121
e50460de 122 fhnDiJetResponseCharged = new THnSparseF("fhnDiJetResponseCharged","fhnDiJetResponseCharged;p_{T,trig}^{part};p_{T,trig}^{det};p_{T,ass}^{part};p_{T,ass}^{det};#Delta#varphi_{part};#Delta#varphi_{det};k_{T}^{part},k_{T}^{det};A_{j}^{part}A_{j}^{det}",nBinsSparse0,nBins0,xmin0,xmax0);
6e8b6371 123
e50460de 124 fhnDiJetResponseFullCharged = new THnSparseF("fhnDiJetResponseFullCharged","fhnDiJetResponseFullCharged;p_{T,trig}^{part};p_{T,trig}^{det};p_{T,ass}^{part};p_{T,ass}^{det};#Delta#varphi_{part};#Delta#varphi_{det};k_{T}^{part},k_{T}^{det};A_{j}^{part}A_{j}^{det}",nBinsSparse0,nBins0,xmin0,xmax0);
6ab30d5f 125
126 if(fnUsedResponseVar==1) {
127 fhnDiJetResponseCharged->SetTitle("fhnDiJetResponseCharged DiJetEta");
128 fhnDiJetResponseCharged->GetAxis(6)->SetTitle("#eta_{dijet}^{part}");
129 fhnDiJetResponseCharged->GetAxis(7)->SetTitle("#eta_{dijet}^{det}");
130
131 fhnDiJetResponseFullCharged->SetTitle("fhnDiJetResponseFullCharged DiJetEta");
132 fhnDiJetResponseFullCharged->GetAxis(6)->SetTitle("#eta_{dijet}^{part}");
133 fhnDiJetResponseFullCharged->GetAxis(7)->SetTitle("#eta_{dijet}^{det}");
134 }
135
136 fOutput->Add(fhnDiJetResponseCharged);
6e8b6371 137 fOutput->Add(fhnDiJetResponseFullCharged);
138
139 TString strType = "";
140 for(Int_t i = 0; i<2; i++) {
141 if(i==0) strType="Part";
142 else if(i==1) strType="Det";
143 fh1TriggersCharged[i] = new TH1F(Form("fh1TriggersCharged%s",strType.Data()),Form("fh1TriggersCharged%s;p_{T,trig}^{ch}",strType.Data()),nBinsPt,minPt,maxPt);
144 fOutput->Add(fh1TriggersCharged[i]);
145
146 fh1TriggersFull[i] = new TH1F(Form("fh1TriggersFull%s",strType.Data()),Form("fh1TriggersFull%s;p_{T,trig}^{ch}",strType.Data()),nBinsPt,minPt,maxPt);
147 fOutput->Add(fh1TriggersFull[i]);
148 }
149
150 fh1TriggersLostCharged = new TH1F("fh1TriggersLostCharged","fh1TriggersLostCharged;p_{T,trig}^{ch}",nBinsPt,minPt,maxPt);
151 fOutput->Add(fh1TriggersLostCharged);
152
153 fh1TriggersLostFull = new TH1F("fh1TriggersLostFull","fh1TriggersLostFull;p_{T,trig}^{ch}",nBinsPt,minPt,maxPt);
154 fOutput->Add(fh1TriggersLostFull);
155
67c36e97 156 fh3AssocLostPtDeltaPhiCharged = new TH3F("fh3AssocLostPtDeltaPhiCharged","fh3AssocLostPtDeltaPhiCharged;p_{T,trig}^{ch};p_{T,assoc}^{ch};#Delta#varphi",nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt,nBinsDPhi,-0.5*TMath::Pi(),1.5*TMath::Pi());
157 fOutput->Add(fh3AssocLostPtDeltaPhiCharged);
158
159 fh3AssocLostPtDeltaPhiFull = new TH3F("fh3AssocLostPtDeltaPhiFull","fh3AssocLostPtDeltaPhiFull;p_{T,trig}^{ch};p_{T,assoc}^{ch};#Delta#varphi",nBinsPt,minPt,maxPt,nBinsPt,minPt,maxPt,nBinsDPhi,-0.5*TMath::Pi(),1.5*TMath::Pi());
160 fOutput->Add(fh3AssocLostPtDeltaPhiFull);
161
6e8b6371 162 const Int_t nBinsSparseMatch = 6;
163 const Int_t nBinsDPhiMatch = 80;
164 const Int_t nBinsDEtaMatch = 80;
165 const Int_t nBinsDR = 20;
166 const Int_t nBinsType = 3;
167 const Int_t nBinsMatch[nBinsSparseMatch] = {nBinsPt,nBinsPt,nBinsDPhiMatch,nBinsDEtaMatch,nBinsDR,nBinsType};
168 //pTpart, pTdet, deltaPhi, deltaEta, deltaR, jet type (leading,subleading,other)
169 const Double_t xminMatch[nBinsSparseMatch] = { minPt, minPt, -0.5,-0.5, 0., 0};
170 const Double_t xmaxMatch[nBinsSparseMatch] = { maxPt, maxPt, 0.5, 0.5, 0.5,3};
171 fhnMatchingCharged = new THnSparseF("fhnMatchingCharged","fhnMatchingCharged;#it{p}_{T,part} (GeV/#it{c});#it{p}_{T,det} (GeV/#it{c});#Delta#varphi;#Delta#eta;#Delta R;type",
172 nBinsSparseMatch,nBinsMatch,xminMatch,xmaxMatch);
173 fOutput->Add(fhnMatchingCharged);
174
175 fhnMatchingFull = new THnSparseF("fhnMatchingFull","fhnMatchingFull;#it{p}_{T,part} (GeV/#it{c});#it{p}_{T,det} (GeV/#it{c});#Delta#varphi;#Delta#eta;#Delta R;type",
176 nBinsSparseMatch,nBinsMatch,xminMatch,xmaxMatch);
177 fOutput->Add(fhnMatchingFull);
178
179
180 // =========== Switch on Sumw2 for all histos ===========
181 for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
182 TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
183 if (h1){
184 h1->Sumw2();
185 continue;
186 }
187 THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
188 if(hn)hn->Sumw2();
189 }
190
191 TH1::AddDirectory(oldStatus);
192
193 PostData(1, fOutput); // Post data for ALL output slots > 0 here.
194}
195
6e8b6371 196//________________________________________________________________________
197Bool_t AliAnalysisTaskEmcalDiJetResponse::Run()
198{
199 // Run analysis code here, if needed. It will be executed before FillHistograms().
200
201 //Check if event is selected (vertex & pile-up)
202 if(!SelectEvent())
203 return kFALSE;
204
6e8b6371 205 if(fRhoType==0) {
206 fRhoFullVal = 0.;
207 fRhoChVal = 0.;
208 }
209 if(fRhoType==1) {
210 fRhoFullVal = GetRhoVal(fContainerFull);
211 fRhoChVal = GetRhoVal(fContainerCharged);
212 }
213
214
215 //Do matching
216 MatchJetsGeo(fContainerCharged,fContainerChargedMC,0,0.3,1);
217 MatchJetsGeo(fContainerFull,fContainerFullMC,0,0.3,2);
218
219 //Fill particle-detector level matching histos
220
221 if(fDoChargedCharged) CorrelateJets(1);
222
223 if(fDoFullCharged) {
224 SetChargedFractionIndexMC();
225 CorrelateJets(2);
226 }
227
228 return kTRUE; // If return kFALSE FillHistogram() will NOT be executed.
229}
230
231//________________________________________________________________________
232void AliAnalysisTaskEmcalDiJetResponse::CorrelateJets(const Int_t type) {
233 //
234 // Correlate jets and fill histos
235 //
236
6ab30d5f 237 if( fJetCorrelationType==kCorrelateAll )
238 CorrelateAllJets(type);
239 else if( fJetCorrelationType==kCorrelateTwo )
240 CorrelateTwoJets(type);
241 else if( fJetCorrelationType==kCorrelateLS )
242 AliWarning(Form("%s: leading-subleading correlation not implemented for response!",GetName()));
243
244 return;
245
246}
247
248
249//________________________________________________________________________
250void AliAnalysisTaskEmcalDiJetResponse::CorrelateAllJets(const Int_t type) {
251 //
252 // Correlate jets and fill histos
253 //
254
6e8b6371 255 Int_t typet = 0;
6e8b6371 256 Int_t typetMC = 0;
257 Int_t typeaMC = 0;
258 if(type==0) { //full-full
259 typetMC = fContainerFullMC;
260 typeaMC = fContainerFullMC;
261 typet = fContainerFull;
6e8b6371 262 }
263 else if(type==1) { //charged-charged
264 typetMC = fContainerChargedMC;
265 typeaMC = fContainerChargedMC;
266 typet = fContainerCharged;
6e8b6371 267 }
268 else if(type==2) { //full-charged
269 typetMC = fContainerFullMC;
270 typeaMC = fContainerChargedMC;
271 typet = fContainerFull;
6e8b6371 272 }
273 else {
274 AliWarning(Form("%s: type %d of dijet correlation not defined!",GetName(),type));
275 return;
276 }
277
278 Int_t nJetsTrig = 0;
279 Int_t nJetsAssoc = 0;
280 if(type==0) {
281 nJetsTrig = GetNJets(fContainerFullMC);
282 nJetsAssoc = nJetsTrig;
283 }
284 else if(type==1) {
285 nJetsTrig = GetNJets(fContainerChargedMC);
286 nJetsAssoc = nJetsTrig;
287 }
288 else if(type==2) {
289 nJetsTrig = GetNJets(fContainerFullMC);
290 nJetsAssoc = GetNJets(fContainerChargedMC);
291 }
292
293
294 for(Int_t ijt=0; ijt<nJetsTrig; ijt++) {
295
296 AliEmcalJet *jetTrigMC = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(ijt, typetMC));
297 if(!jetTrigMC) continue; //jet not selected
298
299 Double_t jetTrigPtMC = GetJetPt(jetTrigMC,typetMC);
300
301 if(jetTrigPtMC<fPtMinTriggerJet)
302 continue;
303
304 if(type==1)
305 fh1TriggersCharged[0]->Fill(jetTrigPtMC);
306 if(type==2)
307 fh1TriggersFull[0]->Fill(jetTrigPtMC);
308
309 AliEmcalJet *jetTrigDet = jetTrigMC->ClosestJet();
310 if(!jetTrigDet) {
311 //trigger is lost
312 if(type==1)
313 fh1TriggersLostCharged->Fill(jetTrigPtMC);
314 if(type==2)
315 fh1TriggersLostFull->Fill(jetTrigPtMC);
316
317 continue;
318 }
319
320 if(type==1)
321 fh1TriggersCharged[1]->Fill(GetJetPt(jetTrigDet,typet));
322 if(type==2)
323 fh1TriggersFull[1]->Fill(GetJetPt(jetTrigDet,typet));
324
325 for(Int_t ija=0; ija<nJetsAssoc; ija++) {
326 if(IsSameJet(ijt,ija,type,kTRUE)) continue;
327
328 AliEmcalJet *jetAssocMC = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(ija, typeaMC));
329 if(!jetAssocMC) continue;
330
331 Double_t jetAssocPtMC = GetJetPt(jetAssocMC,typeaMC);
332
333 //Now check if jets are also there on detector level
334 AliEmcalJet *jetAssocDet = jetAssocMC->ClosestJet();
67c36e97 335 if(!jetAssocDet) {
6e8b6371 336 //dijet is lost
67c36e97 337 if(type==1)
338 fh3AssocLostPtDeltaPhiCharged->Fill(jetTrigPtMC,jetAssocPtMC,GetDeltaPhi(jetTrigMC,jetAssocMC));
339 if(type==2)
340 fh3AssocLostPtDeltaPhiFull->Fill(jetTrigPtMC,jetAssocPtMC,GetDeltaPhi(jetTrigMC,jetAssocMC));
6e8b6371 341 continue;
342 }
343
6ab30d5f 344 FillDiJetResponse(jetTrigMC,jetAssocMC,jetTrigDet,jetAssocDet,type);
345
346 } // associate jet loop
347 }//trigger jet loop
348
349}
350
351//________________________________________________________________________
352void AliAnalysisTaskEmcalDiJetResponse::CorrelateTwoJets(const Int_t type) {
353 //
354 // Correlate jets and fill histos
355 //
356
357 Int_t typet = 0;
358 Int_t typea = 0;
359 Int_t typetMC = 0;
360 Int_t typeaMC = 0;
361 if(type==0) { //full-full
362 typetMC = fContainerFullMC;
363 typeaMC = fContainerFullMC;
364 typet = fContainerFull;
365 typea = fContainerFull;
366 }
367 else if(type==1) { //charged-charged
368 typetMC = fContainerChargedMC;
369 typeaMC = fContainerChargedMC;
370 typet = fContainerCharged;
371 typea = fContainerCharged;
372 }
373 else if(type==2) { //full-charged
374 typetMC = fContainerFullMC;
375 typeaMC = fContainerChargedMC;
376 typet = fContainerFull;
377 typea = fContainerCharged;
378 }
379 else {
380 AliWarning(Form("%s: type %d of dijet correlation not defined!",GetName(),type));
381 return;
382 }
383
384 Int_t nJetsTrig = 0;
6ab30d5f 385 if(type==0) {
386 nJetsTrig = GetNJets(fContainerFullMC);
6ab30d5f 387 }
388 else if(type==1) {
389 nJetsTrig = GetNJets(fContainerChargedMC);
6ab30d5f 390 }
391 else if(type==2) {
392 nJetsTrig = GetNJets(fContainerFullMC);
6ab30d5f 393 }
6e8b6371 394
6ab30d5f 395 for(Int_t ijt=0; ijt<nJetsTrig; ijt++) {
396
397 AliEmcalJet *jetTrigMC = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(ijt, typetMC));
398 if(!jetTrigMC) continue; //jet not selected
399
400 Double_t jetTrigPtMC = GetJetPt(jetTrigMC,typetMC);
401
402 if(jetTrigPtMC<fPtMinTriggerJet)
403 continue;
404
405 if(type==1)
406 fh1TriggersCharged[0]->Fill(jetTrigPtMC);
407 if(type==2)
408 fh1TriggersFull[0]->Fill(jetTrigPtMC);
409
410 AliEmcalJet *jetTrigDet = jetTrigMC->ClosestJet();
411 if(!jetTrigDet) {
412 //trigger is lost
6e8b6371 413 if(type==1)
6ab30d5f 414 fh1TriggersLostCharged->Fill(jetTrigPtMC);
415 if(type==2)
416 fh1TriggersLostFull->Fill(jetTrigPtMC);
6ab30d5f 417 continue;
418 }
419
420 if(type==1)
421 fh1TriggersCharged[1]->Fill(GetJetPt(jetTrigDet,typet));
422 if(type==2)
423 fh1TriggersFull[1]->Fill(GetJetPt(jetTrigDet,typet));
424
425
426 AliEmcalJet *jetAssocMC = GetLeadingJetOppositeHemisphere(type,typeaMC,jetTrigMC);
427 if(!jetAssocMC) continue;
6e8b6371 428
6ab30d5f 429 Double_t jetAssocPtMC = GetJetPt(jetAssocMC,typeaMC);
6e8b6371 430
6ab30d5f 431 //Now check if jets are also there on detector level
432 AliEmcalJet *jetAssocDet = jetAssocMC->ClosestJet();
433 if(!jetAssocDet) {
434 //dijet is lost
435 if(type==1)
436 fh3AssocLostPtDeltaPhiCharged->Fill(jetTrigPtMC,jetAssocPtMC,GetDeltaPhi(jetTrigMC,jetAssocMC));
437 if(type==2)
438 fh3AssocLostPtDeltaPhiFull->Fill(jetTrigPtMC,jetAssocPtMC,GetDeltaPhi(jetTrigMC,jetAssocMC));
439 continue;
440 }
441
f9de9b73 442 if(fDoPtBias) {
443 if(type==0 || type==1) {
444 if(GetJetPt(jetAssocDet,typea)>GetJetPt(jetTrigDet,typet))
445 continue;
446 }
3c709670 447 }
448
6ab30d5f 449 FillDiJetResponse(jetTrigMC,jetAssocMC,jetTrigDet,jetAssocDet,type);
450
451
6e8b6371 452 }//trigger jet loop
453
454}
455
6ab30d5f 456//________________________________________________________________________
457void AliAnalysisTaskEmcalDiJetResponse::FillDiJetResponse(const AliEmcalJet *jetTrigMC, const AliEmcalJet *jetAssocMC, const AliEmcalJet *jetTrigDet, const AliEmcalJet *jetAssocDet, Int_t type) {
458
459 //Fill dijet response
460
461 Int_t typet = 0;
462 Int_t typea = 0;
463 Int_t typetMC = 0;
464 Int_t typeaMC = 0;
465 if(type==0) { //full-full
466 typetMC = fContainerFullMC;
467 typeaMC = fContainerFullMC;
468 typet = fContainerFull;
469 typea = fContainerFull;
470 }
471 else if(type==1) { //charged-charged
472 typetMC = fContainerChargedMC;
473 typeaMC = fContainerChargedMC;
474 typet = fContainerCharged;
475 typea = fContainerCharged;
476 }
477 else if(type==2) { //full-charged
478 typetMC = fContainerFullMC;
479 typeaMC = fContainerChargedMC;
480 typet = fContainerFull;
481 typea = fContainerCharged;
482 }
483 else {
484 AliWarning(Form("%s: type %d of dijet correlation not defined!",GetName(),type));
485 return;
486 }
487
488 Double_t jetTrigPtMC = GetJetPt(jetTrigMC,typetMC);
489 Double_t jetAssocPtMC = GetJetPt(jetAssocMC,typeaMC);
490
e50460de 491 Double_t varDet[2] = {TMath::Abs(GetJetPt(jetTrigDet,typet)*TMath::Sin(GetDeltaPhi(jetTrigDet,jetAssocDet))),(jetTrigDet->Eta()+jetAssocDet->Eta())/2.};
492 Double_t varPart[2] = {TMath::Abs(jetTrigPtMC*TMath::Sin(GetDeltaPhi(jetTrigMC,jetAssocMC))),(jetTrigMC->Eta()+jetAssocMC->Eta())/2.};
493
494 Double_t ajDet = (GetJetPt(jetTrigDet,typet)-GetJetPt(jetAssocDet,typea))/(GetJetPt(jetTrigDet,typet)+GetJetPt(jetAssocDet,typea));
495 Double_t ajPart = (jetTrigPtMC-jetAssocPtMC)/(jetTrigPtMC+jetAssocPtMC);
6ab30d5f 496
497 //Store dijet vars: pt,trig MC; pt,trig DET; pt,ass MC; pt,ass DET; dPhi MC; dPhi Det; kT MC; kT Det;
e50460de 498 Double_t diJetVars[10] = {
6ab30d5f 499 jetTrigPtMC,
500 GetJetPt(jetTrigDet,typet),
501 jetAssocPtMC,
502 GetJetPt(jetAssocDet,typea),
503 GetDeltaPhi(jetTrigMC,jetAssocMC),
504 GetDeltaPhi(jetTrigDet,jetAssocDet),
505 varPart[fnUsedResponseVar],
e50460de 506 varDet[fnUsedResponseVar],
507 ajDet,
508 ajPart
6ab30d5f 509 };
510
511 if(type==1)
512 fhnDiJetResponseCharged->Fill(diJetVars);
513 else if(type==2)
514 fhnDiJetResponseFullCharged->Fill(diJetVars);
515
516
517}
518
6e8b6371 519//________________________________________________________________________
520void AliAnalysisTaskEmcalDiJetResponse::FillMatchHistos() {
521 //
522 // Fill Particle-Detector level matching histos
523 //
524
525 for(int i = 0; i < GetNJets(fContainerFull);++i) {
526 AliEmcalJet *jetDet = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(i, fContainerFull));
527 if(!jetDet) continue;
528
529 AliEmcalJet *jetPart = jetDet->ClosestJet();
530 if(!jetPart) continue;
531
67c36e97 532 Double_t matchVars[6] = {
6e8b6371 533 jetPart->Pt(),
534 jetDet->Pt(),
535 GetDeltaPhi(jetPart->Phi(),jetDet->Phi()),
536 jetPart->Eta()-jetDet->Eta(),
537 GetDeltaR(jetPart,jetDet),
538 TMath::Min((Float_t)i+0.5,2.5)
539 };
540 fhnMatchingFull->Fill(matchVars);
541
542 }//loop over full jets
543
544 for(int i = 0; i < GetNJets(fContainerCharged);++i) {
545 AliEmcalJet *jetDet = static_cast<AliEmcalJet*>(GetAcceptJetFromArray(i, fContainerCharged));
546 if(!jetDet) continue;
547
548 AliEmcalJet *jetPart = jetDet->ClosestJet();
549 if(!jetPart) continue;
550
67c36e97 551 Double_t matchVars[6] = {
6e8b6371 552 jetPart->Pt(),
553 jetDet->Pt(),
554 GetDeltaPhi(jetPart->Phi(),jetDet->Phi()),
555 jetPart->Eta()-jetDet->Eta(),
556 GetDeltaR(jetPart,jetDet),
557 TMath::Min((Float_t)i+0.5,2.5)
558 };
559 fhnMatchingCharged->Fill(matchVars);
560
561 }//loop over charged jets
562
563}
564
565
566//________________________________________________________________________
567Bool_t AliAnalysisTaskEmcalDiJetResponse::RetrieveEventObjects() {
568 //
569 // retrieve event objects
570 //
571
572 if (!AliAnalysisTaskEmcalDiJetBase::RetrieveEventObjects())
573 return kFALSE;
574
575 return kTRUE;
576
577}
578
579//_______________________________________________________________________
580void AliAnalysisTaskEmcalDiJetResponse::Terminate(Option_t *)
581{
582 // Called once at the end of the analysis.
583}