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