3 // Emcal jet analysis base task.
5 // Author: S.Aiola, M. Verweij
7 #include "AliAnalysisTaskEmcalJet.h"
9 #include <TClonesArray.h>
12 #include "AliAnalysisManager.h"
13 #include "AliCentrality.h"
14 #include "AliEMCALGeometry.h"
15 #include "AliESDEvent.h"
16 #include "AliEmcalJet.h"
18 #include "AliRhoParameter.h"
19 #include "AliLocalRhoParameter.h"
20 #include "AliVCluster.h"
21 #include "AliVEventHandler.h"
22 #include "AliVParticle.h"
23 #include "AliJetContainer.h"
25 ClassImp(AliAnalysisTaskEmcalJet)
27 //________________________________________________________________________
28 AliAnalysisTaskEmcalJet::AliAnalysisTaskEmcalJet() :
29 AliAnalysisTaskEmcal("AliAnalysisTaskEmcalJet"),
38 // Default constructor.
40 fJetCollArray.SetOwner(kTRUE);
43 //________________________________________________________________________
44 AliAnalysisTaskEmcalJet::AliAnalysisTaskEmcalJet(const char *name, Bool_t histo) :
45 AliAnalysisTaskEmcal(name, histo),
54 // Standard constructor.
56 fJetCollArray.SetOwner(kTRUE);
59 //________________________________________________________________________
60 AliAnalysisTaskEmcalJet::~AliAnalysisTaskEmcalJet()
65 //________________________________________________________________________
66 Bool_t AliAnalysisTaskEmcalJet::AcceptBiasJet(AliEmcalJet *jet, Int_t c)
68 // Accept jet with a bias.
70 AliJetContainer *cont = GetJetContainer(c);
72 AliError(Form("%s:Container %d not found",GetName(),c));
76 return cont->AcceptBiasJet(jet);
79 //________________________________________________________________________
80 Float_t* AliAnalysisTaskEmcalJet::GenerateFixedBinArray(Int_t n, Float_t min, Float_t max) const
82 Float_t *bins = new Float_t[n+1];
84 Float_t binWidth = (max-min)/n;
86 for (Int_t i = 1; i <= n; i++) {
87 bins[i] = bins[i-1]+binWidth;
93 //________________________________________________________________________
94 Double_t AliAnalysisTaskEmcalJet::GetLeadingHadronPt(AliEmcalJet *jet, Int_t c)
97 AliJetContainer *cont = GetJetContainer(c);
99 AliError(Form("%s:Container %d not found",GetName(),c));
103 return cont->GetLeadingHadronPt(jet);
106 //________________________________________________________________________
107 Bool_t AliAnalysisTaskEmcalJet::AcceptJet(AliEmcalJet *jet, Int_t c)
109 // Return true if jet is accepted.
113 AliJetContainer *cont = GetJetContainer(c);
115 AliError(Form("%s:Container %d not found",GetName(),c));
119 return cont->AcceptJet(jet);
122 //________________________________________________________________________
123 AliRhoParameter *AliAnalysisTaskEmcalJet::GetRhoFromEvent(const char *name)
125 // Get rho from event.
127 AliRhoParameter *rho = 0;
129 if (!sname.IsNull()) {
130 rho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(sname));
132 AliWarning(Form("%s: Could not retrieve rho with name %s!", GetName(), name));
139 //________________________________________________________________________
140 AliLocalRhoParameter *AliAnalysisTaskEmcalJet::GetLocalRhoFromEvent(const char *name)
142 // Get local rho from event.
143 AliLocalRhoParameter *rho = 0;
145 if (!sname.IsNull()) {
146 rho = dynamic_cast<AliLocalRhoParameter*>(InputEvent()->FindListObject(sname));
148 AliWarning(Form("%s: Could not retrieve local rho with name %s!", GetName(), name));
156 //________________________________________________________________________
157 void AliAnalysisTaskEmcalJet::ExecOnce()
159 // Init the analysis.
161 AliAnalysisTaskEmcal::ExecOnce();
163 if (!fRhoName.IsNull() && !fRho) { // get rho from the event
164 fRho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoName));
166 AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoName.Data()));
167 fInitialized = kFALSE;
172 if (!fLocalRhoName.IsNull() && !fLocalRho) {
173 fLocalRho = dynamic_cast<AliLocalRhoParameter*>(InputEvent()->FindListObject(fLocalRhoName));
175 AliError(Form("%s: Could not retrieve local rho %s!", GetName(), fLocalRhoName.Data()));
176 fInitialized = kFALSE;
181 //Load all requested jet branches - each container knows name already
182 if(fJetCollArray.GetEntriesFast()==0) {
183 AliWarning("There are no jet collections");
187 for(Int_t i =0; i<fJetCollArray.GetEntriesFast(); i++) {
188 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.At(i));
189 cont->SetRunNumber(InputEvent()->GetRunNumber());
190 cont->SetEMCALGeometry();
191 cont->SetArray(InputEvent());
192 cont->LoadRho(InputEvent());
195 //Get Jets, cuts and rho for first jet container
196 AliJetContainer *cont = GetJetContainer(0);
198 if (!cont->GetArrayName().IsNull()) {
199 fJets = cont->GetArray();
200 if(!fJets && fJetCollArray.GetEntriesFast()>0) {
201 AliError(Form("%s: Could not retrieve first jet branch!", GetName()));
202 fInitialized = kFALSE;
207 if (!fRho) { // if rho name is not provided, tries to use the rho object of the first jet branch
208 fRhoName = cont->GetRhoName();
209 fRho = cont->GetRhoParameter();
213 //________________________________________________________________________
214 Bool_t AliAnalysisTaskEmcalJet::IsJetCluster(AliEmcalJet* jet, Int_t iclus, Bool_t sorted) const
216 // Return true if cluster is in jet.
218 for (Int_t i = 0; i < jet->GetNumberOfClusters(); ++i) {
219 Int_t ijetclus = jet->ClusterAt(i);
220 if (sorted && ijetclus > iclus)
222 if (ijetclus == iclus)
228 //________________________________________________________________________
229 Bool_t AliAnalysisTaskEmcalJet::IsJetTrack(AliEmcalJet* jet, Int_t itrack, Bool_t sorted) const
231 // Return true if track is in jet.
233 for (Int_t i = 0; i < jet->GetNumberOfTracks(); ++i) {
234 Int_t ijettrack = jet->TrackAt(i);
235 if (sorted && ijettrack > itrack)
237 if (ijettrack == itrack)
243 //________________________________________________________________________
244 Bool_t AliAnalysisTaskEmcalJet::RetrieveEventObjects()
246 // Retrieve objects from event.
248 if (!AliAnalysisTaskEmcal::RetrieveEventObjects())
252 fRhoVal = fRho->GetVal();
257 //________________________________________________________________________
258 AliJetContainer* AliAnalysisTaskEmcalJet::AddJetContainer(const char *n, TString defaultCutType, Float_t jetRadius) {
260 // Add particle container
261 // will be called in AddTask macro
263 TString tmp = TString(n);
264 if(tmp.IsNull()) return 0;
266 AliJetContainer *cont = 0x0;
267 cont = new AliJetContainer();
268 cont->SetArrayName(n);
269 cont->SetJetRadius(jetRadius);
271 defaultCutType.ToUpper();
273 if(!defaultCutType.IsNull() && !defaultCutType.EqualTo("USER")) {
274 if(defaultCutType.EqualTo("TPC"))
275 cont->SetJetAcceptanceType(AliJetContainer::kTPC);
276 else if(defaultCutType.EqualTo("EMCAL"))
277 cont->SetJetAcceptanceType(AliJetContainer::kEMCAL);
279 AliWarning(Form("%s: default cut type %s not recognized. Not setting cuts.",GetName(),defaultCutType.Data()));
281 cont->SetJetAcceptanceType(AliJetContainer::kUser);
283 fJetCollArray.Add(cont);
288 //________________________________________________________________________
289 AliJetContainer* AliAnalysisTaskEmcalJet::GetJetContainer(Int_t i) const{
290 // Get i^th jet container
292 if(i<0 || i>=fJetCollArray.GetEntriesFast()) return 0;
293 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.At(i));
297 //________________________________________________________________________
298 AliJetContainer* AliAnalysisTaskEmcalJet::GetJetContainer(const char* name) const{
299 // Get the jet container with name
301 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.FindObject(name));
305 //________________________________________________________________________
306 void AliAnalysisTaskEmcalJet::SetJetAcceptanceType(UInt_t t, Int_t c)
308 // Set acceptance cuts
309 AliJetContainer *cont = GetJetContainer(c);
311 cont->SetJetAcceptanceType((AliJetContainer::JetAcceptanceType)t);
314 AliError(Form("%s in SetJetAcceptanceType(...): container %d not found!",GetName(),c));
318 //________________________________________________________________________
319 void AliAnalysisTaskEmcalJet::SetJetAcceptanceType(TString cutType, Int_t c) {
320 //set acceptance cuts
322 AliJetContainer *cont = GetJetContainer(c);
324 AliError(Form("%s in SetJetAcceptanceType(...): container %d not found",GetName(),c));
330 if(!cutType.IsNull() && !cutType.EqualTo("USER")) {
331 if(cutType.EqualTo("TPC"))
332 cont->SetJetAcceptanceType(AliJetContainer::kTPC);
333 else if(cutType.EqualTo("EMCAL"))
334 cont->SetJetAcceptanceType(AliJetContainer::kEMCAL);
336 AliWarning(Form("%s: default cut type %s not recognized. Not setting cuts.",GetName(),cutType.Data()));
338 cont->SetJetAcceptanceType(AliJetContainer::kUser);
341 //________________________________________________________________________
342 void AliAnalysisTaskEmcalJet::SetRhoName(const char *n, Int_t c)
345 AliJetContainer *cont = GetJetContainer(c);
346 if (cont) cont->SetRhoName(n);
347 else AliError(Form("%s in SetRhoName(...): container %d not found",GetName(),c));
354 //________________________________________________________________________
355 void AliAnalysisTaskEmcalJet::SetJetEtaLimits(Float_t min, Float_t max, Int_t c)
357 AliJetContainer *cont = GetJetContainer(c);
358 if (cont) cont->SetJetEtaLimits(min,max);
359 else AliError(Form("%s in SetJetEtaLimits(...): container %d not found",GetName(),c));
362 //________________________________________________________________________
363 void AliAnalysisTaskEmcalJet::SetJetPhiLimits(Float_t min, Float_t max, Int_t c)
365 AliJetContainer *cont = GetJetContainer(c);
366 if (cont) cont->SetJetPhiLimits(min,max);
367 else AliError(Form("%s in SetJetPhiLimits(...): container %d not found",GetName(),c));
370 //________________________________________________________________________
371 void AliAnalysisTaskEmcalJet::SetJetAreaCut(Float_t cut, Int_t c)
373 AliJetContainer *cont = GetJetContainer(c);
374 if (cont) cont->SetJetAreaCut(cut);
375 else AliError(Form("%s in SetJetAreaCut(...): container %d not found",GetName(),c));
378 //________________________________________________________________________
379 void AliAnalysisTaskEmcalJet::SetPercAreaCut(Float_t p, Int_t c)
381 AliJetContainer *cont = GetJetContainer(c);
382 if (cont) cont->SetPercAreaCut(p);
383 else AliError(Form("%s in SetPercAreaCut(...): container %d not found",GetName(),c));
386 //________________________________________________________________________
387 void AliAnalysisTaskEmcalJet::SetZLeadingCut(Float_t zemc, Float_t zch, Int_t c)
389 AliJetContainer *cont = GetJetContainer(c);
390 if (cont) cont->SetZLeadingCut(zemc,zch);
391 else AliError(Form("%s in SetZLeadingCut(...): container %d not found",GetName(),c));
394 //________________________________________________________________________
395 void AliAnalysisTaskEmcalJet::SetNEFCut(Float_t min, Float_t max, Int_t c)
397 AliJetContainer *cont = GetJetContainer(c);
398 if (cont) cont->SetNEFCut(min,max);
399 else AliError(Form("%s in SetNEFCut(...): container %d not found",GetName(),c));
402 //________________________________________________________________________
403 void AliAnalysisTaskEmcalJet::SetAreaEmcCut(Double_t a, Int_t c)
405 AliJetContainer *cont = GetJetContainer(c);
406 if (cont) cont->SetAreaEmcCut(a);
407 else AliError(Form("%s in SetAreaEmcCut(...): container %d not found",GetName(),c));
410 //________________________________________________________________________
411 void AliAnalysisTaskEmcalJet::SetJetPtCut(Float_t cut, Int_t c)
413 AliJetContainer *cont = GetJetContainer(c);
414 if (cont) cont->SetJetPtCut(cut);
415 else AliError(Form("%s in SetJetPtCut(...): container %d not found",GetName(),c));
418 //________________________________________________________________________
419 void AliAnalysisTaskEmcalJet::SetJetRadius(Float_t r, Int_t c)
421 AliJetContainer *cont = GetJetContainer(c);
422 if (cont) cont->SetJetRadius(r);
423 else AliError(Form("%s in SetJetRadius(...): container %d not found",GetName(),c));
426 //________________________________________________________________________
427 void AliAnalysisTaskEmcalJet::SetMaxClusterPt(Float_t cut, Int_t c)
429 AliJetContainer *cont = GetJetContainer(c);
430 if (cont) cont->SetMaxClusterPt(cut);
431 else AliError(Form("%s in SetMaxClusterPt(...): container %d not found",GetName(),c));
434 //________________________________________________________________________
435 void AliAnalysisTaskEmcalJet::SetMaxTrackPt(Float_t cut, Int_t c)
437 AliJetContainer *cont = GetJetContainer(c);
438 if (cont) cont->SetMaxTrackPt(cut);
439 else AliError(Form("%s in SetMaxTrackPt(...): container %d not found",GetName(),c));
442 //________________________________________________________________________
443 void AliAnalysisTaskEmcalJet::SetPtBiasJetClus(Float_t cut, Int_t c)
445 AliJetContainer *cont = GetJetContainer(c);
446 if (cont) cont->SetPtBiasJetClus(cut);
447 else AliError(Form("%s in SetPtBiasJetClus(...): container %d not found",GetName(),c));
450 //________________________________________________________________________
451 void AliAnalysisTaskEmcalJet::SetPtBiasJetTrack(Float_t cut, Int_t c)
453 AliJetContainer *cont = GetJetContainer(c);
454 if (cont) cont->SetPtBiasJetTrack(cut);
455 else AliError(Form("%s in SetPtBiasJetTrack(...): container %d not found",GetName(),c));
458 //________________________________________________________________________
459 void AliAnalysisTaskEmcalJet::SetLeadingHadronType(Int_t t, Int_t c)
461 AliJetContainer *cont = GetJetContainer(c);
462 if (cont) cont->SetLeadingHadronType(t);
463 else AliError(Form("%s in SetLeadingHadronType(...): container %d not found",GetName(),c));
466 //________________________________________________________________________
467 void AliAnalysisTaskEmcalJet::SetNLeadingJets(Int_t t, Int_t c)
469 AliJetContainer *cont = GetJetContainer(c);
470 if (cont) cont->SetNLeadingJets(t);
471 else AliError(Form("%s in SetNLeadingJets(...): container %d not found",GetName(),c));
474 //________________________________________________________________________
475 void AliAnalysisTaskEmcalJet::SetJetBitMap(UInt_t m, Int_t c)
477 AliJetContainer *cont = GetJetContainer(c);
478 if (cont) cont->SetJetBitMap(m);
479 else AliError(Form("%s in SetJetBitMap(...): container %d not found",GetName(),c));
482 //________________________________________________________________________
483 void AliAnalysisTaskEmcalJet::SetIsParticleLevel(Bool_t b, Int_t c)
485 AliJetContainer *cont = GetJetContainer(c);
486 if (cont) cont->SetIsParticleLevel(b);
487 else AliError(Form("%s in SetIsParticleLevel(...): container %d not found",GetName(),c));
490 //________________________________________________________________________
491 const TString& AliAnalysisTaskEmcalJet::GetRhoName(Int_t c) const
494 AliJetContainer *cont = GetJetContainer(c);
495 if (cont) return cont->GetRhoName();
496 else { AliError(Form("%s in GetRhoName(...): container %d not found. Returning fRhoName...",GetName(),c)); return fRhoName; }
503 //________________________________________________________________________
504 TClonesArray* AliAnalysisTaskEmcalJet::GetJetArray(Int_t i) const {
505 // Get i^th TClonesArray with AliEmcalJet
507 AliJetContainer *cont = GetJetContainer(i);
509 AliError(Form("%s:Container %d not found",GetName(),i));
512 return cont->GetArray();
515 //________________________________________________________________________
516 Double_t AliAnalysisTaskEmcalJet::GetJetRadius(Int_t i) const {
517 // Get jet radius from jet container i
519 AliJetContainer *cont = GetJetContainer(i);
521 AliError(Form("%s:Container %d not found",GetName(),i));
525 return cont->GetJetRadius();
528 //________________________________________________________________________
529 AliEmcalJet* AliAnalysisTaskEmcalJet::GetJetFromArray(Int_t j, Int_t c) const {
530 // Get jet j if accepted from container c
531 // If jet not accepted return 0
533 AliJetContainer *cont = GetJetContainer(c);
535 AliError(Form("%s:Container %d not found",GetName(),c));
538 AliEmcalJet *jet = cont->GetJet(j);
543 //________________________________________________________________________
544 AliEmcalJet* AliAnalysisTaskEmcalJet::GetAcceptJetFromArray(Int_t j, Int_t c) const {
545 // Get jet j if accepted from container c
546 // If jet not accepted return 0
548 AliJetContainer *cont = GetJetContainer(c);
550 AliError(Form("%s:Container %d not found",GetName(),c));
553 AliEmcalJet *jet = cont->GetAcceptJet(j);
558 //________________________________________________________________________
559 Int_t AliAnalysisTaskEmcalJet::GetNJets(Int_t i) const {
560 // Get number of entries in jet array i
562 AliJetContainer *cont = GetJetContainer(i);
564 AliError(Form("%s:Container %d not found",GetName(),i));
567 return cont->GetNJets();
571 //________________________________________________________________________
572 Double_t AliAnalysisTaskEmcalJet::GetRhoVal(Int_t i) const {
573 // Get rho corresponding to jet array i
575 AliJetContainer *cont = GetJetContainer(i);
577 AliError(Form("%s:Container %d not found",GetName(),i));
580 return cont->GetRhoVal();