3 // Emcal jet analysis base task.
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->SetJetArray(InputEvent());
157 cont->SetEMCALGeometry();
158 cont->LoadRho(InputEvent());
161 //Get Jets, cuts and rho for first jet container
162 AliJetContainer *cont = GetJetContainer(0);
163 // fJetsName = cont->GetArrayName();
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) {
325 // Add particle container
326 // will be called in AddTask macro
328 AliJetContainer *cont = 0x0;
329 cont = new AliJetContainer();
330 cont->SetArrayName(n);
332 if(!defaultCutType.IsNull()) {
333 if(defaultCutType.EqualTo("TPC"))
334 cont->SetJetAcceptanceType(AliJetContainer::kTPC);
335 else if(defaultCutType.EqualTo("EMCAL"))
336 cont->SetJetAcceptanceType(AliJetContainer::kEMCAL);
338 AliWarning(Form("%s: default cut type %s not recognized. Not setting cuts.",GetName(),defaultCutType.Data()));
340 cont->SetJetAcceptanceType(AliJetContainer::kUser);
342 fJetCollArray.Add(cont);
346 //________________________________________________________________________
347 AliJetContainer* AliAnalysisTaskEmcalJetDev::GetJetContainer(Int_t i) const{
348 // Get i^th jet container
350 if(i<0 || i>fJetCollArray.GetEntriesFast()) return 0;
351 AliJetContainer *cont = static_cast<AliJetContainer*>(fJetCollArray.At(i));
355 //________________________________________________________________________
356 void AliAnalysisTaskEmcalJetDev::SetRhoName(const char *n, Int_t c)
358 AliJetContainer *cont = GetJetContainer(c);
362 //________________________________________________________________________
363 void AliAnalysisTaskEmcalJetDev::SetJetEtaLimits(Float_t min, Float_t max, Int_t c)
365 AliJetContainer *cont = GetJetContainer(c);
366 cont->SetJetEtaLimits(min,max);
369 //________________________________________________________________________
370 void AliAnalysisTaskEmcalJetDev::SetJetPhiLimits(Float_t min, Float_t max, Int_t c)
372 AliJetContainer *cont = GetJetContainer(c);
373 cont->SetJetPhiLimits(min,max);
376 //________________________________________________________________________
377 void AliAnalysisTaskEmcalJetDev::SetJetAreaCut(Float_t cut, Int_t c)
379 AliJetContainer *cont = GetJetContainer(c);
380 cont->SetJetAreaCut(cut);
383 //________________________________________________________________________
384 void AliAnalysisTaskEmcalJetDev::SetPercAreaCut(Float_t p, Int_t c)
386 AliJetContainer *cont = GetJetContainer(c);
387 cont->SetPercAreaCut(p);
390 //________________________________________________________________________
391 void AliAnalysisTaskEmcalJetDev::SetAreaEmcCut(Double_t a, Int_t c)
393 AliJetContainer *cont = GetJetContainer(c);
394 cont->SetAreaEmcCut(a);
397 //________________________________________________________________________
398 void AliAnalysisTaskEmcalJetDev::SetJetPtCut(Float_t cut, Int_t c)
400 AliJetContainer *cont = GetJetContainer(c);
401 cont->SetJetPtCut(cut);
404 //________________________________________________________________________
405 void AliAnalysisTaskEmcalJetDev::SetJetRadius(Float_t r, Int_t c)
407 AliJetContainer *cont = GetJetContainer(c);
408 cont->SetJetRadius(r);
411 //________________________________________________________________________
412 void AliAnalysisTaskEmcalJetDev::SetMaxClusterPt(Float_t cut, Int_t c)
414 AliJetContainer *cont = GetJetContainer(c);
415 cont->SetMaxClusterPt(cut);
418 //________________________________________________________________________
419 void AliAnalysisTaskEmcalJetDev::SetMaxTrackPt(Float_t cut, Int_t c)
421 AliJetContainer *cont = GetJetContainer(c);
422 cont->SetMaxTrackPt(cut);
425 //________________________________________________________________________
426 void AliAnalysisTaskEmcalJetDev::SetPtBiasJetClus(Float_t cut, Int_t c)
428 AliJetContainer *cont = GetJetContainer(c);
429 cont->SetPtBiasJetClus(cut);
432 //________________________________________________________________________
433 void AliAnalysisTaskEmcalJetDev::SetPtBiasJetTrack(Float_t cut, Int_t c)
435 AliJetContainer *cont = GetJetContainer(c);
436 cont->SetPtBiasJetTrack(cut);
439 //________________________________________________________________________
440 void AliAnalysisTaskEmcalJetDev::SetLeadingHadronType(Int_t t, Int_t c)
442 AliJetContainer *cont = GetJetContainer(c);
443 cont->SetLeadingHadronType(t);
446 //________________________________________________________________________
447 void AliAnalysisTaskEmcalJetDev::SetNLeadingJets(Int_t t, Int_t c)
449 AliJetContainer *cont = GetJetContainer(c);
450 cont->SetNLeadingJets(t);
453 //________________________________________________________________________
454 void AliAnalysisTaskEmcalJetDev::SetJetBitMap(UInt_t m, Int_t c)
456 AliJetContainer *cont = GetJetContainer(c);
457 cont->SetJetBitMap(m);
460 //________________________________________________________________________
461 TClonesArray* AliAnalysisTaskEmcalJetDev::GetJetArray(Int_t i) const {
462 // Get i^th TClonesArray with AliEmcalJet
464 AliJetContainer *cont = GetJetContainer(i);
466 AliError(Form("%s:Container %d not found",GetName(),i));
469 return cont->GetArray();
473 //________________________________________________________________________
474 AliEmcalJet* AliAnalysisTaskEmcalJetDev::GetAcceptJetFromArray(Int_t j, Int_t c) const {
475 // Get jet j if accepted from container c
476 // If jet not accepted return 0
478 AliJetContainer *cont = GetJetContainer(c);
480 AliError(Form("%s:Container %d not found",GetName(),c));
483 AliEmcalJet *jet = cont->GetAcceptJet(j);
489 //________________________________________________________________________
490 Int_t AliAnalysisTaskEmcalJetDev::GetNJets(Int_t i) const {
491 // Get number of entries in jet array i
493 AliJetContainer *cont = GetJetContainer(i);
495 AliError(Form("%s:Container %d not found",GetName(),i));
498 return cont->GetNJets();
502 //________________________________________________________________________
503 Double_t AliAnalysisTaskEmcalJetDev::GetRhoVal(Int_t i) const {
504 // Get rho corresponding to jet array i
506 AliJetContainer *cont = GetJetContainer(i);
508 AliError(Form("%s:Container %d not found",GetName(),i));
511 return cont->GetRhoVal();