]>
Commit | Line | Data |
---|---|---|
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 | ||
24 | ClassImp(AliAnalysisTaskEmcalJetDev) | |
25 | ||
26 | //________________________________________________________________________ | |
27 | AliAnalysisTaskEmcalJetDev::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 | //________________________________________________________________________ | |
41 | AliAnalysisTaskEmcalJetDev::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 | //________________________________________________________________________ | |
55 | AliAnalysisTaskEmcalJetDev::~AliAnalysisTaskEmcalJetDev() | |
56 | { | |
57 | // Destructor | |
58 | } | |
59 | ||
60 | //________________________________________________________________________ | |
61 | Bool_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 | //________________________________________________________________________ | |
75 | Float_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 | //________________________________________________________________________ | |
89 | Double_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 | //________________________________________________________________________ | |
102 | Bool_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 | //________________________________________________________________________ | |
118 | AliRhoParameter *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 | //________________________________________________________________________ | |
135 | void 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 | //________________________________________________________________________ | |
188 | Bool_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 | //________________________________________________________________________ | |
203 | Bool_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 | //________________________________________________________________________ | |
218 | Bool_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 | 232 | AliJetContainer* 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 | //________________________________________________________________________ | |
261 | AliJetContainer* 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 | //________________________________________________________________________ |
270 | AliJetContainer* 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 | //________________________________________________________________________ | |
278 | void 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 | //________________________________________________________________________ |
291 | void 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 | //________________________________________________________________________ |
307 | void 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 | //________________________________________________________________________ | |
320 | void 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 | //________________________________________________________________________ | |
328 | void 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 | //________________________________________________________________________ | |
336 | void 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 | //________________________________________________________________________ | |
344 | void 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 | //________________________________________________________________________ | |
352 | void 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 | //________________________________________________________________________ | |
360 | void 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 | //________________________________________________________________________ | |
368 | void 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 | //________________________________________________________________________ | |
376 | void 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 | //________________________________________________________________________ | |
384 | void 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 | //________________________________________________________________________ | |
392 | void 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 | //________________________________________________________________________ | |
400 | void 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 | //________________________________________________________________________ | |
408 | void 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 | //________________________________________________________________________ | |
416 | void 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 | //________________________________________________________________________ | |
424 | void 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 | //________________________________________________________________________ | |
432 | TClonesArray* 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 | //________________________________________________________________________ |
444 | AliEmcalJet* 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 | //________________________________________________________________________ |
459 | AliEmcalJet* 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 | //________________________________________________________________________ | |
474 | Int_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 | //________________________________________________________________________ | |
487 | Double_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 | } |