3 // Emcal jet analysis base task.
5 // Author: S.Aiola, M. Verweij
7 #include "AliAnalysisTaskEmcalJetDev.h"
10 #include <TClonesArray.h>
14 #include "AliAnalysisManager.h"
15 #include "AliCentrality.h"
16 #include "AliEMCALGeometry.h"
17 #include "AliESDEvent.h"
18 #include "AliEmcalJet.h"
20 #include "AliRhoParameter.h"
21 #include "AliVCluster.h"
22 #include "AliVEventHandler.h"
23 #include "AliVParticle.h"
24 #include "AliJetContainer.h"
26 ClassImp(AliAnalysisTaskEmcalJetDev)
28 //________________________________________________________________________
29 AliAnalysisTaskEmcalJetDev::AliAnalysisTaskEmcalJetDev() :
30 AliAnalysisTaskEmcalDev("AliAnalysisTaskEmcalJetDev"),
38 // Default constructor.
40 fJetCollArray.SetOwner(kTRUE);
43 //________________________________________________________________________
44 AliAnalysisTaskEmcalJetDev::AliAnalysisTaskEmcalJetDev(const char *name, Bool_t histo) :
45 AliAnalysisTaskEmcalDev(name, histo),
53 // Standard constructor.
55 fJetCollArray.SetOwner(kTRUE);
58 //________________________________________________________________________
59 AliAnalysisTaskEmcalJetDev::~AliAnalysisTaskEmcalJetDev()
64 //________________________________________________________________________
65 Bool_t AliAnalysisTaskEmcalJetDev::AcceptBiasJet(AliEmcalJet *jet, Int_t c)
67 // Accept jet with a bias.
69 AliJetContainer *cont = GetJetContainer(c);
71 AliError(Form("%s:Container %d not found",GetName(),c));
75 return cont->AcceptBiasJet(jet);
79 //________________________________________________________________________
80 Float_t* AliAnalysisTaskEmcalJetDev::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 AliAnalysisTaskEmcalJetDev::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);
107 //________________________________________________________________________
108 Bool_t AliAnalysisTaskEmcalJetDev::AcceptJet(AliEmcalJet *jet, Int_t c)
110 // Return true if jet is accepted.
114 AliJetContainer *cont = GetJetContainer(c);
116 AliError(Form("%s:Container %d not found",GetName(),c));
120 return cont->AcceptJet(jet);
124 //________________________________________________________________________
125 AliRhoParameter *AliAnalysisTaskEmcalJetDev::GetRhoFromEvent(const char *name)
127 // Get rho from event.
129 AliRhoParameter *rho = 0;
131 if (!sname.IsNull()) {
132 rho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(sname));
134 AliWarning(Form("%s: Could not retrieve rho with name %s!", GetName(), name));
141 //________________________________________________________________________
142 void AliAnalysisTaskEmcalJetDev::ExecOnce()
144 // Init the analysis.
146 AliAnalysisTaskEmcalDev::ExecOnce();
148 //Load all requested track branches - each container knows name already
149 if(fJetCollArray.GetEntriesFast()==0) {
150 AliWarning("There are no jet collections");
154 for(Int_t i =0; i<fJetCollArray.GetEntriesFast(); i++) {
155 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.At(i));
156 cont->SetRunNumber(InputEvent()->GetRunNumber());
157 cont->SetEMCALGeometry();
158 cont->SetJetArray(InputEvent());
159 cont->LoadRho(InputEvent());
162 //Get Jets, cuts and rho for first jet container
163 AliJetContainer *cont = GetJetContainer(0);
164 if (fAnaType == kTPC) {
165 cont->SetJetAcceptanceType(AliJetContainer::kTPC);
166 cont->SetJetEtaPhiTPC();
168 else if (fAnaType == kEMCAL) {
169 cont->SetJetAcceptanceType(AliJetContainer::kEMCAL);
170 cont->SetJetEtaPhiEMCAL();
173 fJets = GetJetArray(0);
174 if(!fJets && fJetCollArray.GetEntriesFast()>0) {
175 AliError(Form("%s: Could not retrieve first jet branch!", GetName()));
176 fInitialized = kFALSE;
180 fRhoName = cont->GetRhoName();
181 if(!fRhoName.IsNull()) {
182 fRho = cont->GetRhoParameter();
184 AliError(Form("%s: Could not retrieve rho of first jet branch!", GetName()));
185 fInitialized = kFALSE;
192 //________________________________________________________________________
193 Bool_t AliAnalysisTaskEmcalJetDev::GetSortedArray(Int_t indexes[], TClonesArray *array, Double_t rho, Int_t c)
195 // Get the leading jets.
197 static Float_t pt[9999] = {0};
202 const Int_t n = array->GetEntriesFast();
207 if (array->GetClass()->GetBaseClass("AliEmcalJet")) {
209 for (Int_t i = 0; i < n; i++) {
213 AliEmcalJet* jet = static_cast<AliEmcalJet*>(array->At(i));
216 AliError(Form("Could not receive jet %d", i));
220 if (!AcceptJet(jet,c))
223 pt[i] = jet->Pt() - rho * jet->Area();
227 else if (array->GetClass()->GetBaseClass("AliVTrack")) {
229 for (Int_t i = 0; i < n; i++) {
233 AliVTrack* track = static_cast<AliVTrack*>(array->At(i));
236 AliError(Form("Could not receive track %d", i));
240 if (!AcceptTrack(track, c))
247 else if (array->GetClass()->GetBaseClass("AliVCluster")) {
249 for (Int_t i = 0; i < n; i++) {
253 AliVCluster* cluster = static_cast<AliVCluster*>(array->At(i));
256 AliError(Form("Could not receive cluster %d", i));
260 if (!AcceptCluster(cluster, c))
263 TLorentzVector nPart;
264 cluster->GetMomentum(nPart, const_cast<Double_t*>(fVertex));
270 TMath::Sort(n, pt, indexes);
272 if (pt[indexes[0]] == -FLT_MAX)
278 //________________________________________________________________________
279 Bool_t AliAnalysisTaskEmcalJetDev::IsJetCluster(AliEmcalJet* jet, Int_t iclus, Bool_t sorted) const
281 // Return true if cluster is in jet.
283 for (Int_t i = 0; i < jet->GetNumberOfClusters(); ++i) {
284 Int_t ijetclus = jet->ClusterAt(i);
285 if (sorted && ijetclus > iclus)
287 if (ijetclus == iclus)
293 //________________________________________________________________________
294 Bool_t AliAnalysisTaskEmcalJetDev::IsJetTrack(AliEmcalJet* jet, Int_t itrack, Bool_t sorted) const
296 // Return true if track is in jet.
298 for (Int_t i = 0; i < jet->GetNumberOfTracks(); ++i) {
299 Int_t ijettrack = jet->TrackAt(i);
300 if (sorted && ijettrack > itrack)
302 if (ijettrack == itrack)
308 //________________________________________________________________________
309 Bool_t AliAnalysisTaskEmcalJetDev::RetrieveEventObjects()
311 // Retrieve objects from event.
313 if (!AliAnalysisTaskEmcalDev::RetrieveEventObjects())
317 fRhoVal = fRho->GetVal();
322 //________________________________________________________________________
323 void AliAnalysisTaskEmcalJetDev::AddJetContainer(const char *n, TString defaultCutType, Float_t jetRadius) {
325 // Add particle container
326 // will be called in AddTask macro
328 TString tmp = TString(n);
329 if(tmp.IsNull()) return;
331 AliJetContainer *cont = 0x0;
332 cont = new AliJetContainer();
333 cont->SetArrayName(n);
334 cont->SetJetRadius(jetRadius);
336 if(!defaultCutType.IsNull()) {
337 if(defaultCutType.EqualTo("TPC"))
338 cont->SetJetAcceptanceType(AliJetContainer::kTPC);
339 else if(defaultCutType.EqualTo("EMCAL"))
340 cont->SetJetAcceptanceType(AliJetContainer::kEMCAL);
342 AliWarning(Form("%s: default cut type %s not recognized. Not setting cuts.",GetName(),defaultCutType.Data()));
344 cont->SetJetAcceptanceType(AliJetContainer::kUser);
346 fJetCollArray.Add(cont);
350 //________________________________________________________________________
351 AliJetContainer* AliAnalysisTaskEmcalJetDev::GetJetContainer(Int_t i) const{
352 // Get i^th jet container
354 if(i<0 || i>fJetCollArray.GetEntriesFast()) return 0;
355 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.At(i));
359 //________________________________________________________________________
360 void AliAnalysisTaskEmcalJetDev::SetRhoName(const char *n, Int_t c)
362 AliJetContainer *cont = GetJetContainer(c);
366 //________________________________________________________________________
367 void AliAnalysisTaskEmcalJetDev::SetJetEtaLimits(Float_t min, Float_t max, Int_t c)
369 AliJetContainer *cont = GetJetContainer(c);
370 cont->SetJetEtaLimits(min,max);
373 //________________________________________________________________________
374 void AliAnalysisTaskEmcalJetDev::SetJetPhiLimits(Float_t min, Float_t max, Int_t c)
376 AliJetContainer *cont = GetJetContainer(c);
377 cont->SetJetPhiLimits(min,max);
380 //________________________________________________________________________
381 void AliAnalysisTaskEmcalJetDev::SetJetAreaCut(Float_t cut, Int_t c)
383 AliJetContainer *cont = GetJetContainer(c);
384 cont->SetJetAreaCut(cut);
387 //________________________________________________________________________
388 void AliAnalysisTaskEmcalJetDev::SetPercAreaCut(Float_t p, Int_t c)
390 AliJetContainer *cont = GetJetContainer(c);
391 cont->SetPercAreaCut(p);
394 //________________________________________________________________________
395 void AliAnalysisTaskEmcalJetDev::SetAreaEmcCut(Double_t a, Int_t c)
397 AliJetContainer *cont = GetJetContainer(c);
398 cont->SetAreaEmcCut(a);
401 //________________________________________________________________________
402 void AliAnalysisTaskEmcalJetDev::SetJetPtCut(Float_t cut, Int_t c)
404 AliJetContainer *cont = GetJetContainer(c);
405 cont->SetJetPtCut(cut);
408 //________________________________________________________________________
409 void AliAnalysisTaskEmcalJetDev::SetJetRadius(Float_t r, Int_t c)
411 AliJetContainer *cont = GetJetContainer(c);
412 cont->SetJetRadius(r);
415 //________________________________________________________________________
416 void AliAnalysisTaskEmcalJetDev::SetMaxClusterPt(Float_t cut, Int_t c)
418 AliJetContainer *cont = GetJetContainer(c);
419 cont->SetMaxClusterPt(cut);
422 //________________________________________________________________________
423 void AliAnalysisTaskEmcalJetDev::SetMaxTrackPt(Float_t cut, Int_t c)
425 AliJetContainer *cont = GetJetContainer(c);
426 cont->SetMaxTrackPt(cut);
429 //________________________________________________________________________
430 void AliAnalysisTaskEmcalJetDev::SetPtBiasJetClus(Float_t cut, Int_t c)
432 AliJetContainer *cont = GetJetContainer(c);
433 cont->SetPtBiasJetClus(cut);
436 //________________________________________________________________________
437 void AliAnalysisTaskEmcalJetDev::SetPtBiasJetTrack(Float_t cut, Int_t c)
439 AliJetContainer *cont = GetJetContainer(c);
440 cont->SetPtBiasJetTrack(cut);
443 //________________________________________________________________________
444 void AliAnalysisTaskEmcalJetDev::SetLeadingHadronType(Int_t t, Int_t c)
446 AliJetContainer *cont = GetJetContainer(c);
447 cont->SetLeadingHadronType(t);
450 //________________________________________________________________________
451 void AliAnalysisTaskEmcalJetDev::SetNLeadingJets(Int_t t, Int_t c)
453 AliJetContainer *cont = GetJetContainer(c);
454 cont->SetNLeadingJets(t);
457 //________________________________________________________________________
458 void AliAnalysisTaskEmcalJetDev::SetJetBitMap(UInt_t m, Int_t c)
460 AliJetContainer *cont = GetJetContainer(c);
461 cont->SetJetBitMap(m);
464 //________________________________________________________________________
465 TClonesArray* AliAnalysisTaskEmcalJetDev::GetJetArray(Int_t i) const {
466 // Get i^th TClonesArray with AliEmcalJet
468 AliJetContainer *cont = GetJetContainer(i);
470 AliError(Form("%s:Container %d not found",GetName(),i));
473 return cont->GetArray();
477 //________________________________________________________________________
478 AliEmcalJet* AliAnalysisTaskEmcalJetDev::GetAcceptJetFromArray(Int_t j, Int_t c) const {
479 // Get jet j if accepted from container c
480 // If jet not accepted return 0
482 AliJetContainer *cont = GetJetContainer(c);
484 AliError(Form("%s:Container %d not found",GetName(),c));
487 AliEmcalJet *jet = cont->GetAcceptJet(j);
493 //________________________________________________________________________
494 Int_t AliAnalysisTaskEmcalJetDev::GetNJets(Int_t i) const {
495 // Get number of entries in jet array i
497 AliJetContainer *cont = GetJetContainer(i);
499 AliError(Form("%s:Container %d not found",GetName(),i));
502 return cont->GetNJets();
506 //________________________________________________________________________
507 Double_t AliAnalysisTaskEmcalJetDev::GetRhoVal(Int_t i) const {
508 // Get rho corresponding to jet array i
510 AliJetContainer *cont = GetJetContainer(i);
512 AliError(Form("%s:Container %d not found",GetName(),i));
515 return cont->GetRhoVal();