]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/AliAnalysisTaskEmcalJet.cxx
Change binning
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliAnalysisTaskEmcalJet.cxx
CommitLineData
8628b70c 1// $Id$
a546db49 2//
3// Emcal jet analysis base task.
4//
9239b066 5// Author: S.Aiola, M. Verweij
a546db49 6
7#include "AliAnalysisTaskEmcalJet.h"
8
a546db49 9#include <TClonesArray.h>
10#include <TList.h>
11
a546db49 12#include "AliAnalysisManager.h"
13#include "AliCentrality.h"
8f3e275e 14#include "AliEMCALGeometry.h"
15#include "AliESDEvent.h"
a546db49 16#include "AliEmcalJet.h"
a546db49 17#include "AliLog.h"
e2c9f708 18#include "AliRhoParameter.h"
7dd1eeea 19#include "AliLocalRhoParameter.h"
8f3e275e 20#include "AliVCluster.h"
21#include "AliVEventHandler.h"
22#include "AliVParticle.h"
9239b066 23#include "AliJetContainer.h"
a546db49 24
25ClassImp(AliAnalysisTaskEmcalJet)
26
27//________________________________________________________________________
28AliAnalysisTaskEmcalJet::AliAnalysisTaskEmcalJet() :
29 AliAnalysisTaskEmcal("AliAnalysisTaskEmcalJet"),
a487deae 30 fRhoName(),
7dd1eeea 31 fLocalRhoName(),
9239b066 32 fJetCollArray(),
a487deae 33 fJets(0),
34 fRho(0),
7dd1eeea 35 fLocalRho(0),
a487deae 36 fRhoVal(0)
a546db49 37{
38 // Default constructor.
9239b066 39
40 fJetCollArray.SetOwner(kTRUE);
a546db49 41}
42
a546db49 43//________________________________________________________________________
44AliAnalysisTaskEmcalJet::AliAnalysisTaskEmcalJet(const char *name, Bool_t histo) :
45 AliAnalysisTaskEmcal(name, histo),
a487deae 46 fRhoName(),
7dd1eeea 47 fLocalRhoName(),
9239b066 48 fJetCollArray(),
a487deae 49 fJets(0),
50 fRho(0),
7dd1eeea 51 fLocalRho(0),
a487deae 52 fRhoVal(0)
a546db49 53{
54 // Standard constructor.
9239b066 55
56 fJetCollArray.SetOwner(kTRUE);
a546db49 57}
58
59//________________________________________________________________________
60AliAnalysisTaskEmcalJet::~AliAnalysisTaskEmcalJet()
61{
62 // Destructor
63}
64
2bddb6ae 65//________________________________________________________________________
9239b066 66Bool_t AliAnalysisTaskEmcalJet::AcceptBiasJet(AliEmcalJet *jet, Int_t c)
2bddb6ae 67{
76bc10fe 68 // Accept jet with a bias.
69
9239b066 70 AliJetContainer *cont = GetJetContainer(c);
71 if(!cont) {
72 AliError(Form("%s:Container %d not found",GetName(),c));
73 return 0;
83888eef 74 }
75
9239b066 76 return cont->AcceptBiasJet(jet);
83888eef 77}
78
83888eef 79//________________________________________________________________________
9239b066 80Double_t AliAnalysisTaskEmcalJet::GetLeadingHadronPt(AliEmcalJet *jet, Int_t c)
83888eef 81{
9239b066 82
83 AliJetContainer *cont = GetJetContainer(c);
84 if(!cont) {
85 AliError(Form("%s:Container %d not found",GetName(),c));
86 return 0;
87 }
88
89 return cont->GetLeadingHadronPt(jet);
2bddb6ae 90}
91
a546db49 92//________________________________________________________________________
9239b066 93Bool_t AliAnalysisTaskEmcalJet::AcceptJet(AliEmcalJet *jet, Int_t c)
a546db49 94{
95 // Return true if jet is accepted.
2103dc6a 96 if (!jet)
97 return kFALSE;
98
9239b066 99 AliJetContainer *cont = GetJetContainer(c);
100 if(!cont) {
101 AliError(Form("%s:Container %d not found",GetName(),c));
102 return 0;
103 }
85d48773 104
9239b066 105 return cont->AcceptJet(jet);
1f6fff78 106}
107
e2c9f708 108//________________________________________________________________________
109AliRhoParameter *AliAnalysisTaskEmcalJet::GetRhoFromEvent(const char *name)
110{
111 // Get rho from event.
112
113 AliRhoParameter *rho = 0;
114 TString sname(name);
115 if (!sname.IsNull()) {
116 rho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(sname));
117 if (!rho) {
118 AliWarning(Form("%s: Could not retrieve rho with name %s!", GetName(), name));
119 return 0;
120 }
121 }
122 return rho;
123}
9239b066 124
7dd1eeea 125//________________________________________________________________________
126AliLocalRhoParameter *AliAnalysisTaskEmcalJet::GetLocalRhoFromEvent(const char *name)
127{
128 // Get local rho from event.
129 AliLocalRhoParameter *rho = 0;
130 TString sname(name);
131 if (!sname.IsNull()) {
132 rho = dynamic_cast<AliLocalRhoParameter*>(InputEvent()->FindListObject(sname));
133 if (!rho) {
9239b066 134 AliWarning(Form("%s: Could not retrieve local rho with name %s!", GetName(), name));
7dd1eeea 135 return 0;
136 }
137 }
138 return rho;
139}
9239b066 140
141
1f6fff78 142//________________________________________________________________________
abc24170 143void AliAnalysisTaskEmcalJet::ExecOnce()
1f6fff78 144{
145 // Init the analysis.
146
a487deae 147 AliAnalysisTaskEmcal::ExecOnce();
148
9239b066 149 if (!fRhoName.IsNull() && !fRho) { // get rho from the event
a487deae 150 fRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoName));
151 if (!fRho) {
152 AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoName.Data()));
153 fInitialized = kFALSE;
154 return;
155 }
156 }
157
7dd1eeea 158 if (!fLocalRhoName.IsNull() && !fLocalRho) {
159 fLocalRho = dynamic_cast<AliLocalRhoParameter*>(InputEvent()->FindListObject(fLocalRhoName));
160 if (!fLocalRho) {
161 AliError(Form("%s: Could not retrieve local rho %s!", GetName(), fLocalRhoName.Data()));
162 fInitialized = kFALSE;
163 return;
164 }
165 }
166
9239b066 167 //Load all requested jet branches - each container knows name already
168 if(fJetCollArray.GetEntriesFast()==0) {
169 AliWarning("There are no jet collections");
170 return;
1f6fff78 171 }
a487deae 172
9239b066 173 for(Int_t i =0; i<fJetCollArray.GetEntriesFast(); i++) {
174 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.At(i));
175 cont->SetRunNumber(InputEvent()->GetRunNumber());
176 cont->SetEMCALGeometry();
177 cont->SetArray(InputEvent());
178 cont->LoadRho(InputEvent());
a487deae 179 }
180
9239b066 181 //Get Jets, cuts and rho for first jet container
182 AliJetContainer *cont = GetJetContainer(0);
183
184 if (!cont->GetArrayName().IsNull()) {
185 fJets = cont->GetArray();
186 if(!fJets && fJetCollArray.GetEntriesFast()>0) {
187 AliError(Form("%s: Could not retrieve first jet branch!", GetName()));
188 fInitialized = kFALSE;
189 return;
a487deae 190 }
191 }
192
9239b066 193 if (!fRho) { // if rho name is not provided, tries to use the rho object of the first jet branch
194 fRhoName = cont->GetRhoName();
195 fRho = cont->GetRhoParameter();
a487deae 196 }
1f6fff78 197}
198
199//________________________________________________________________________
76bc10fe 200Bool_t AliAnalysisTaskEmcalJet::IsJetCluster(AliEmcalJet* jet, Int_t iclus, Bool_t sorted) const
201{
202 // Return true if cluster is in jet.
203
204 for (Int_t i = 0; i < jet->GetNumberOfClusters(); ++i) {
205 Int_t ijetclus = jet->ClusterAt(i);
206 if (sorted && ijetclus > iclus)
207 return kFALSE;
208 if (ijetclus == iclus)
209 return kTRUE;
210 }
211 return kFALSE;
212}
213
214//________________________________________________________________________
215Bool_t AliAnalysisTaskEmcalJet::IsJetTrack(AliEmcalJet* jet, Int_t itrack, Bool_t sorted) const
216{
217 // Return true if track is in jet.
218
219 for (Int_t i = 0; i < jet->GetNumberOfTracks(); ++i) {
220 Int_t ijettrack = jet->TrackAt(i);
221 if (sorted && ijettrack > itrack)
222 return kFALSE;
223 if (ijettrack == itrack)
224 return kTRUE;
225 }
226 return kFALSE;
227}
228
229//________________________________________________________________________
230Bool_t AliAnalysisTaskEmcalJet::RetrieveEventObjects()
1f6fff78 231{
76bc10fe 232 // Retrieve objects from event.
1f6fff78 233
76bc10fe 234 if (!AliAnalysisTaskEmcal::RetrieveEventObjects())
235 return kFALSE;
236
a487deae 237 if (fRho)
238 fRhoVal = fRho->GetVal();
76bc10fe 239
240 return kTRUE;
a546db49 241}
9239b066 242
243//________________________________________________________________________
244AliJetContainer* AliAnalysisTaskEmcalJet::AddJetContainer(const char *n, TString defaultCutType, Float_t jetRadius) {
245
246 // Add particle container
247 // will be called in AddTask macro
248
249 TString tmp = TString(n);
250 if(tmp.IsNull()) return 0;
251
252 AliJetContainer *cont = 0x0;
253 cont = new AliJetContainer();
254 cont->SetArrayName(n);
255 cont->SetJetRadius(jetRadius);
256
257 defaultCutType.ToUpper();
258
259 if(!defaultCutType.IsNull() && !defaultCutType.EqualTo("USER")) {
260 if(defaultCutType.EqualTo("TPC"))
261 cont->SetJetAcceptanceType(AliJetContainer::kTPC);
262 else if(defaultCutType.EqualTo("EMCAL"))
263 cont->SetJetAcceptanceType(AliJetContainer::kEMCAL);
264 else
265 AliWarning(Form("%s: default cut type %s not recognized. Not setting cuts.",GetName(),defaultCutType.Data()));
266 } else
267 cont->SetJetAcceptanceType(AliJetContainer::kUser);
268
269 fJetCollArray.Add(cont);
270
271 return cont;
272}
273
274//________________________________________________________________________
275AliJetContainer* AliAnalysisTaskEmcalJet::GetJetContainer(Int_t i) const{
276 // Get i^th jet container
277
278 if(i<0 || i>=fJetCollArray.GetEntriesFast()) return 0;
279 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.At(i));
280 return cont;
281}
282
283//________________________________________________________________________
284AliJetContainer* AliAnalysisTaskEmcalJet::GetJetContainer(const char* name) const{
285 // Get the jet container with name
286
287 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.FindObject(name));
288 return cont;
289}
290
291//________________________________________________________________________
292void AliAnalysisTaskEmcalJet::SetJetAcceptanceType(UInt_t t, Int_t c)
293{
294 // Set acceptance cuts
295 AliJetContainer *cont = GetJetContainer(c);
296 if (cont) {
297 cont->SetJetAcceptanceType((AliJetContainer::JetAcceptanceType)t);
298 }
299 else {
300 AliError(Form("%s in SetJetAcceptanceType(...): container %d not found!",GetName(),c));
301 }
302}
303
304//________________________________________________________________________
305void AliAnalysisTaskEmcalJet::SetJetAcceptanceType(TString cutType, Int_t c) {
306 //set acceptance cuts
307
308 AliJetContainer *cont = GetJetContainer(c);
309 if (!cont) {
310 AliError(Form("%s in SetJetAcceptanceType(...): container %d not found",GetName(),c));
311 return;
312 }
313
314 cutType.ToUpper();
315
316 if(!cutType.IsNull() && !cutType.EqualTo("USER")) {
317 if(cutType.EqualTo("TPC"))
318 cont->SetJetAcceptanceType(AliJetContainer::kTPC);
319 else if(cutType.EqualTo("EMCAL"))
320 cont->SetJetAcceptanceType(AliJetContainer::kEMCAL);
321 else
322 AliWarning(Form("%s: default cut type %s not recognized. Not setting cuts.",GetName(),cutType.Data()));
323 } else
324 cont->SetJetAcceptanceType(AliJetContainer::kUser);
325}
326
327//________________________________________________________________________
328void AliAnalysisTaskEmcalJet::SetRhoName(const char *n, Int_t c)
329{
330 if (c >= 0) {
331 AliJetContainer *cont = GetJetContainer(c);
332 if (cont) cont->SetRhoName(n);
333 else AliError(Form("%s in SetRhoName(...): container %d not found",GetName(),c));
334 }
335 else {
336 fRhoName = n;
337 }
338}
339
340//________________________________________________________________________
341void AliAnalysisTaskEmcalJet::SetJetEtaLimits(Float_t min, Float_t max, Int_t c)
342{
343 AliJetContainer *cont = GetJetContainer(c);
344 if (cont) cont->SetJetEtaLimits(min,max);
345 else AliError(Form("%s in SetJetEtaLimits(...): container %d not found",GetName(),c));
346}
347
348//________________________________________________________________________
349void AliAnalysisTaskEmcalJet::SetJetPhiLimits(Float_t min, Float_t max, Int_t c)
350{
351 AliJetContainer *cont = GetJetContainer(c);
352 if (cont) cont->SetJetPhiLimits(min,max);
353 else AliError(Form("%s in SetJetPhiLimits(...): container %d not found",GetName(),c));
354}
355
356//________________________________________________________________________
357void AliAnalysisTaskEmcalJet::SetJetAreaCut(Float_t cut, Int_t c)
358{
359 AliJetContainer *cont = GetJetContainer(c);
360 if (cont) cont->SetJetAreaCut(cut);
361 else AliError(Form("%s in SetJetAreaCut(...): container %d not found",GetName(),c));
362}
363
364//________________________________________________________________________
365void AliAnalysisTaskEmcalJet::SetPercAreaCut(Float_t p, Int_t c)
366{
367 AliJetContainer *cont = GetJetContainer(c);
368 if (cont) cont->SetPercAreaCut(p);
369 else AliError(Form("%s in SetPercAreaCut(...): container %d not found",GetName(),c));
370}
371
372//________________________________________________________________________
373void AliAnalysisTaskEmcalJet::SetZLeadingCut(Float_t zemc, Float_t zch, Int_t c)
374{
375 AliJetContainer *cont = GetJetContainer(c);
376 if (cont) cont->SetZLeadingCut(zemc,zch);
377 else AliError(Form("%s in SetZLeadingCut(...): container %d not found",GetName(),c));
378}
379
380//________________________________________________________________________
381void AliAnalysisTaskEmcalJet::SetNEFCut(Float_t min, Float_t max, Int_t c)
382{
383 AliJetContainer *cont = GetJetContainer(c);
384 if (cont) cont->SetNEFCut(min,max);
385 else AliError(Form("%s in SetNEFCut(...): container %d not found",GetName(),c));
386}
387
388//________________________________________________________________________
389void AliAnalysisTaskEmcalJet::SetAreaEmcCut(Double_t a, Int_t c)
390{
391 AliJetContainer *cont = GetJetContainer(c);
392 if (cont) cont->SetAreaEmcCut(a);
393 else AliError(Form("%s in SetAreaEmcCut(...): container %d not found",GetName(),c));
394}
395
396//________________________________________________________________________
397void AliAnalysisTaskEmcalJet::SetJetPtCut(Float_t cut, Int_t c)
398{
399 AliJetContainer *cont = GetJetContainer(c);
400 if (cont) cont->SetJetPtCut(cut);
401 else AliError(Form("%s in SetJetPtCut(...): container %d not found",GetName(),c));
402}
403
404//________________________________________________________________________
405void AliAnalysisTaskEmcalJet::SetJetRadius(Float_t r, Int_t c)
406{
407 AliJetContainer *cont = GetJetContainer(c);
408 if (cont) cont->SetJetRadius(r);
409 else AliError(Form("%s in SetJetRadius(...): container %d not found",GetName(),c));
410}
411
412//________________________________________________________________________
413void AliAnalysisTaskEmcalJet::SetMaxClusterPt(Float_t cut, Int_t c)
414{
415 AliJetContainer *cont = GetJetContainer(c);
416 if (cont) cont->SetMaxClusterPt(cut);
417 else AliError(Form("%s in SetMaxClusterPt(...): container %d not found",GetName(),c));
418}
419
420//________________________________________________________________________
421void AliAnalysisTaskEmcalJet::SetMaxTrackPt(Float_t cut, Int_t c)
422{
423 AliJetContainer *cont = GetJetContainer(c);
424 if (cont) cont->SetMaxTrackPt(cut);
425 else AliError(Form("%s in SetMaxTrackPt(...): container %d not found",GetName(),c));
426}
427
428//________________________________________________________________________
429void AliAnalysisTaskEmcalJet::SetPtBiasJetClus(Float_t cut, Int_t c)
430{
431 AliJetContainer *cont = GetJetContainer(c);
432 if (cont) cont->SetPtBiasJetClus(cut);
433 else AliError(Form("%s in SetPtBiasJetClus(...): container %d not found",GetName(),c));
434}
435
436//________________________________________________________________________
437void AliAnalysisTaskEmcalJet::SetPtBiasJetTrack(Float_t cut, Int_t c)
438{
439 AliJetContainer *cont = GetJetContainer(c);
440 if (cont) cont->SetPtBiasJetTrack(cut);
441 else AliError(Form("%s in SetPtBiasJetTrack(...): container %d not found",GetName(),c));
442}
443
444//________________________________________________________________________
445void AliAnalysisTaskEmcalJet::SetLeadingHadronType(Int_t t, Int_t c)
446{
447 AliJetContainer *cont = GetJetContainer(c);
448 if (cont) cont->SetLeadingHadronType(t);
449 else AliError(Form("%s in SetLeadingHadronType(...): container %d not found",GetName(),c));
450}
451
452//________________________________________________________________________
453void AliAnalysisTaskEmcalJet::SetNLeadingJets(Int_t t, Int_t c)
454{
455 AliJetContainer *cont = GetJetContainer(c);
456 if (cont) cont->SetNLeadingJets(t);
457 else AliError(Form("%s in SetNLeadingJets(...): container %d not found",GetName(),c));
458}
459
460//________________________________________________________________________
461void AliAnalysisTaskEmcalJet::SetJetBitMap(UInt_t m, Int_t c)
462{
463 AliJetContainer *cont = GetJetContainer(c);
464 if (cont) cont->SetJetBitMap(m);
465 else AliError(Form("%s in SetJetBitMap(...): container %d not found",GetName(),c));
466}
467
468//________________________________________________________________________
469void AliAnalysisTaskEmcalJet::SetIsParticleLevel(Bool_t b, Int_t c)
470{
471 AliJetContainer *cont = GetJetContainer(c);
472 if (cont) cont->SetIsParticleLevel(b);
473 else AliError(Form("%s in SetIsParticleLevel(...): container %d not found",GetName(),c));
474}
475
476//________________________________________________________________________
477const TString& AliAnalysisTaskEmcalJet::GetRhoName(Int_t c) const
478{
479 if (c >= 0) {
480 AliJetContainer *cont = GetJetContainer(c);
481 if (cont) return cont->GetRhoName();
482 else { AliError(Form("%s in GetRhoName(...): container %d not found. Returning fRhoName...",GetName(),c)); return fRhoName; }
483 }
484 else {
485 return fRhoName;
486 }
487}
488
489//________________________________________________________________________
490TClonesArray* AliAnalysisTaskEmcalJet::GetJetArray(Int_t i) const {
491 // Get i^th TClonesArray with AliEmcalJet
492
493 AliJetContainer *cont = GetJetContainer(i);
494 if(!cont) {
495 AliError(Form("%s:Container %d not found",GetName(),i));
496 return 0;
497 }
498 return cont->GetArray();
499}
500
501//________________________________________________________________________
502Double_t AliAnalysisTaskEmcalJet::GetJetRadius(Int_t i) const {
503 // Get jet radius from jet container i
504
505 AliJetContainer *cont = GetJetContainer(i);
506 if(!cont) {
507 AliError(Form("%s:Container %d not found",GetName(),i));
508 return 0;
509 }
510
511 return cont->GetJetRadius();
512}
513
514//________________________________________________________________________
515AliEmcalJet* AliAnalysisTaskEmcalJet::GetJetFromArray(Int_t j, Int_t c) const {
516 // Get jet j if accepted from container c
517 // If jet not accepted return 0
518
519 AliJetContainer *cont = GetJetContainer(c);
520 if(!cont) {
521 AliError(Form("%s:Container %d not found",GetName(),c));
522 return 0;
523 }
524 AliEmcalJet *jet = cont->GetJet(j);
525
526 return jet;
527}
528
529//________________________________________________________________________
530AliEmcalJet* AliAnalysisTaskEmcalJet::GetAcceptJetFromArray(Int_t j, Int_t c) const {
531 // Get jet j if accepted from container c
532 // If jet not accepted return 0
533
534 AliJetContainer *cont = GetJetContainer(c);
535 if(!cont) {
536 AliError(Form("%s:Container %d not found",GetName(),c));
537 return 0;
538 }
539 AliEmcalJet *jet = cont->GetAcceptJet(j);
540
541 return jet;
542}
543
544//________________________________________________________________________
545Int_t AliAnalysisTaskEmcalJet::GetNJets(Int_t i) const {
546 // Get number of entries in jet array i
547
548 AliJetContainer *cont = GetJetContainer(i);
549 if(!cont) {
550 AliError(Form("%s:Container %d not found",GetName(),i));
551 return 0;
552 }
553 return cont->GetNJets();
554
555}
556
557//________________________________________________________________________
558Double_t AliAnalysisTaskEmcalJet::GetRhoVal(Int_t i) const {
559 // Get rho corresponding to jet array i
560
561 AliJetContainer *cont = GetJetContainer(i);
562 if(!cont) {
563 AliError(Form("%s:Container %d not found",GetName(),i));
564 return 0;
565 }
566 return cont->GetRhoVal();
567}