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