AliPhysics  59e0e03 (59e0e03)
AliAnalysisTaskEmcalTmpSparseMaker.cxx
Go to the documentation of this file.
1 #include <TH2D.h>
2 #include <TVector2.h>
3 #include <THnSparse.h>
4 #include <TLorentzVector.h>
5 
6 #include "AliLog.h"
7 #include "AliVTrack.h"
8 #include "AliVCluster.h"
9 #include "AliAODCaloCluster.h"
10 #include "AliESDCaloCluster.h"
11 #include "AliPicoTrack.h"
12 #include "AliEmcalJet.h"
13 #include "AliRhoParameter.h"
14 #include "AliJetContainer.h"
15 #include "AliParticleContainer.h"
16 #include "AliClusterContainer.h"
17 
18 #include "AliVEventHandler.h"
19 #include "AliAnalysisManager.h"
20 
22 
24 
25 //_____________________________________________________________________________
28 fMtCh(0.),
29 fMtEm(0.),
30 fRhoV(0.),
31 fAPhi(0.),
32 fNameJet(""),
33 fContJets(0),
34 fContTrks(0),
35 fContClus(0),
36 fHnsEveH(0),
37 fHnsTrks(0),
38 fHnsClus(0),
39 fHnsJets(0),
40 fListOutputEvH(0),
41 fListOutputTrk(0),
42 fListOutputClu(0),
43 fListOutputJet(0)
44 {
45 //
46 // AliAnalysisTaskEmcalTmpSparseMaker::AliAnalysisTaskEmcalTmpSparseMaker
47 //
48 }
49 
50 //_____________________________________________________________________________
52 AliAnalysisTaskEmcalJet(name, bHistos),
53 fMtCh(0.),
54 fMtEm(0.),
55 fRhoV(0.),
56 fAPhi(0.),
57 fNameJet("cJets"),
58 fContJets(0),
59 fContTrks(0),
60 fContClus(0),
61 fHnsEveH(0),
62 fHnsTrks(0),
63 fHnsClus(0),
64 fHnsJets(0),
65 fListOutputEvH(0),
66 fListOutputTrk(0),
67 fListOutputClu(0),
68 fListOutputJet(0)
69 {
70 //
71 // AliAnalysisTaskEmcalTmpSparseMaker::AliAnalysisTaskEmcalTmpSparseMaker
72 //
73 
74  SetMakeGeneralHistograms(bHistos);
75 
76  DefineOutput(2, TList::Class());
77  DefineOutput(3, TList::Class());
78  DefineOutput(4, TList::Class());
79  DefineOutput(5, TList::Class());
80 }
81 
82 //_____________________________________________________________________________
84 {
85 //
86 // AliAnalysisTaskEmcalTmpSparseMaker::~AliAnalysisTaskEmcalTmpSparseMaker
87 //
88 
89  if (fContJets) { delete fContJets; fContJets = 0; }
90  if (fContTrks) { delete fContTrks; fContTrks = 0; }
91  if (fContClus) { delete fContClus; fContClus = 0; }
92 
93  if (fHnsEveH) { delete fHnsEveH; fHnsEveH = 0; }
94  if (fHnsTrks) { delete fHnsTrks; fHnsTrks = 0; }
95  if (fHnsClus) { delete fHnsClus; fHnsClus = 0; }
96  if (fHnsJets) { delete fHnsJets; fHnsJets = 0; }
97 
98  if (fListOutputEvH) { delete fListOutputEvH; fListOutputEvH = 0; }
99  if (fListOutputTrk) { delete fListOutputTrk; fListOutputTrk = 0; }
100  if (fListOutputClu) { delete fListOutputClu; fListOutputClu = 0; }
101  if (fListOutputJet) { delete fListOutputJet; fListOutputJet = 0; }
102 }
103 
104 //_____________________________________________________________________________
106 {
107 //
108 // AliAnalysisTaskEmcalTmpSparseMaker::Init
109 //
110 
111  return;
112 }
113 
114 //_____________________________________________________________________________
116 {
117 //
118 // AliAnalysisTaskEmcalTmpSparseMaker::UserCreateOutputObjects
119 //
120 
122 //=============================================================================
123 
125 
126  fContTrks = GetParticleContainer(0); if (fContTrks) fContTrks->SetClassName("AliVTrack");
127  fContClus = GetClusterContainer(0); if (fContClus) fContClus->SetClassName("AliVCluster");
128 //=============================================================================
129 
130  if (fListOutputEvH) { delete fListOutputEvH; fListOutputEvH = 0; }
131  if (fListOutputTrk) { delete fListOutputTrk; fListOutputTrk = 0; }
132  if (fListOutputClu) { delete fListOutputClu; fListOutputClu = 0; }
133  if (fListOutputJet) { delete fListOutputJet; fListOutputJet = 0; }
134 
135  fListOutputEvH = new TList();
136  if (fContTrks) fListOutputTrk = new TList();
137  if (fContClus) fListOutputClu = new TList();
138  if (fContJets) fListOutputJet = new TList();
139 //=============================================================================
140 
141  Bool_t bStatusTmpH = TH1::AddDirectoryStatus();
142  TH1::AddDirectory(kFALSE);
143 
144  MakeSparseEveH();
145  if (fContTrks) MakeSparseTrks();
146  if (fContClus) MakeSparseClus();
147  if (fContJets) MakeSparseJets();
148 
149  TH1::AddDirectory(bStatusTmpH);
150 //=============================================================================
151 
152  PostData(2, fListOutputEvH);
153  if (fListOutputTrk) PostData(3, fListOutputTrk);
154  if (fListOutputClu) PostData(4, fListOutputClu);
155  if (fListOutputJet) PostData(5, fListOutputJet);
156 //=============================================================================
157 
158  return;
159 }
160 
161 //_____________________________________________________________________________
163 {
164 //
165 // AliAnalysisTaskEmcalTmpSparseMaker::Terminate
166 //
167 
168  AliAnalysisTaskEmcalJet::Terminate(opt);
169 
170  return;
171 }
172 
173 //_____________________________________________________________________________
175 {
176 //
177 // AliAnalysisTaskEmcalTmpSparseMaker::Run
178 //
179 
180  if (fContTrks) FillSparseTrks();
181  if (fContClus) FillSparseClus();
182  if (fContJets) FillSparseJets();
183 //=============================================================================
184 
185  return kTRUE;
186 }
187 
188 //_____________________________________________________________________________
190 {
191 //
192 // AliAnalysisTaskEmcalTmpSparseMaker::FillHistograms
193 //
194 
195  if (!AliAnalysisTaskEmcalJet::FillHistograms()) return kFALSE;
196 //=============================================================================
197 
198  FillSparseEveH();
199 //=============================================================================
200 
201  return kTRUE;
202 }
203 
204 //_____________________________________________________________________________
206 {
207 //
208 // AliAnalysisTaskEmcalTmpSparseMaker::FillGeneralHistograms
209 //
210 
212 
213  return kTRUE;
214 }
215 
216 //_____________________________________________________________________________
218 {
219 //
220 // AliAnalysisTaskEmcalTmpSparseMaker::ExecOnce
221 //
222 
224  if (!fLocalInitialized) return;
225 //=============================================================================
226 
227  if (fContJets) if (fContJets->GetArray()==0) fContJets = 0x0;
228 
229  if (fContTrks) if (fContTrks->GetArray()==0) fContTrks = 0x0;
230  if (fContClus) if (fContClus->GetArray()==0) fContClus = 0x0;
231 
232  return;
233 }
234 
235 //_____________________________________________________________________________
237 {
238 //
239 // AliAnalysisTaskEmcalTmpSparseMaker::RetrieveEventObjects
240 //
241 
242  if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects()) return kFALSE;
243 //=============================================================================
244 
245  if (fContTrks) fAPhi = CalcAysPlane();
249 
250  return kTRUE;
251 }
252 
253 //_____________________________________________________________________________
255 {
256 //
257 // AliAnalysisTaskEmcalTmpSparseMaker::IsEventSelected
258 //
259 
260  if (!AliAnalysisTaskEmcalJet::IsEventSelected()) return kFALSE;
261 
262  return kTRUE;
263 }
264 
265 //_____________________________________________________________________________
267 {
268 //
269 // AliAnalysisTaskEmcalTmpSparseMaker::FillSparseEveH
270 //
271 
272  if (!fHnsEveH) return;
273 //=============================================================================
274 
275  Double_t dV[] = { fCent, fMtCh, fMtEm, fVertex[2], fEPV0, fAPhi, fRhoV };
276  fHnsEveH->Fill(dV);
277 //=============================================================================
278 
279  return;
280 }
281 
282 //_____________________________________________________________________________
284 {
285 //
286 // AliAnalysisTaskEmcalTmpSparseMaker::FillSparseTrks
287 //
288 
289  if ((!fContTrks) || (!fHnsTrks)) return;
290 //=============================================================================
291 
292  AliVTrack *pTrk = 0;
293  fContTrks->ResetCurrentID();
294  while ((pTrk=static_cast<AliVTrack*>(fContTrks->GetNextAcceptParticle()))) {
295  Double_t dV[] = { fCent, fMtCh, fVertex[2], fEPV0, fAPhi,
296  CalcRelPhiEP(pTrk->Phi()),
297  pTrk->Pt(), pTrk->Eta(), pTrk->Phi() };
298 
299  fHnsTrks->Fill(dV);
300  }
301 //=============================================================================
302 
303  return;
304 }
305 
306 //_____________________________________________________________________________
308 {
309 //
310 // AliAnalysisTaskEmcalTmpSparseMaker::FillSparseClus
311 //
312 
313  if ((!fContClus) || (!fHnsClus)) return;
314 //=============================================================================
315 
316  AliVCluster *pClu = 0;
317  fContClus->ResetCurrentID();
318  while ((pClu=static_cast<AliVCluster*>(fContClus->GetNextAcceptCluster()))) {
319 
320  TLorentzVector vClu;
321  pClu->GetMomentum(vClu, fVertex);
322  Double_t dV[] = { fCent, fMtEm, fVertex[2], fEPV0, fAPhi,
323  CalcRelPhiEP(vClu.Phi()),
324  vClu.Pt(), vClu.Eta(), vClu.Phi() };
325 
326  fHnsClus->Fill(dV);
327  }
328 //=============================================================================
329 
330  return;
331 }
332 
333 //_____________________________________________________________________________
335 {
336 //
337 // AliAnalysisTaskEmcalTmpSparseMaker::FillSparseJets
338 //
339 
340  if ((!fContJets) || (!fHnsJets)) return;
341 //=============================================================================
342 
343  Int_t kLjetID[2] = { -1, -1 };
344  Double_t dLjetPt[2] = { -1., -1. };
345 
346  AliEmcalJet *pJet = 0;
347  fContJets->ResetCurrentID();
348  while ((pJet=fContJets->GetNextAcceptJet())) {
349  Double_t dPtJ = fContJets->GetJetPtCorr(fContJets->GetCurrentID());
350 
351  if (dPtJ>dLjetPt[0]) {
352  dLjetPt[1] = dLjetPt[0];
353  kLjetID[1] = kLjetID[0];
354 
355  dLjetPt[0] = dPtJ;
356  kLjetID[0] = fContJets->GetCurrentID();
357  } else if (dPtJ>dLjetPt[1]) {
358  dLjetPt[1] = dPtJ;
359  kLjetID[1] = fContJets->GetCurrentID();
360  }
361  }
362 //=============================================================================
363 
364  for (Int_t j=0; j<2; j++) {
365  if ((kLjetID[j]<0) || (dLjetPt[j]<0.)) continue;
366  pJet = fContJets->GetAcceptJet(kLjetID[j]); if (!pJet) continue;
367 //=============================================================================
368 
370  if (pContTrk) for (Int_t i=0; i<pJet->GetNumberOfTracks(); i++) {
371  AliVParticle *pTrk = pJet->TrackAt(i, pContTrk->GetArray());
372 
373  if (pTrk) {
374  Double_t dV[] = { fCent, fMtCh, fVertex[2], fEPV0, fAPhi,
375  CalcRelPhiEP(pTrk->Phi()), dLjetPt[j],
376  pTrk->Pt(), pTrk->Eta(), pTrk->Phi(), 2.*j };
377 
378  fHnsJets->Fill(dV);
379  }
380  }
381 //=============================================================================
382 
384  if (pContClus) for (Int_t i=0; i<pJet->GetNumberOfClusters(); i++) {
385  AliVCluster *pClu = pJet->ClusterAt(i, pContClus->GetArray());
386 
387  if (pClu) {
388  TLorentzVector vClu;
389  pClu->GetMomentum(vClu, fVertex);
390  Double_t dV[] = { fCent, fMtEm, fVertex[2], fEPV0, fAPhi,
391  CalcRelPhiEP(vClu.Phi()), dLjetPt[j],
392  vClu.Pt(), vClu.Eta(), vClu.Phi(), 2.*j+1. };
393 
394  fHnsJets->Fill(dV);
395  }
396  }
397  }
398 //=============================================================================
399 
400  return;
401 }
402 
403 //_____________________________________________________________________________
405 {
406 //
407 // AliAnalysisTaskEmcalTmpSparseMaker::MakeSparseEveH
408 //
409 
410  if (!fListOutputEvH) return;
411 //=============================================================================
412 
413  const Int_t nV = 7;
414  const Double_t dPhiNeg = -1.*TMath::Pi();
415  const Double_t dPhiPos = 1.*TMath::Pi() + TMath::Pi()/50.;
416  const Double_t dPhiMax = TMath::TwoPi() + TMath::Pi()/50.;
417  const TString sBin[] = { "aCent", "aMtCh", "aMtEm", "aVz", "aEPhi", "aAPhi", "aRho" };
418  const Int_t nBin[] = { 100, 600, 600, 20, 101, 101, 500 };
419  const Double_t dMin[] = { 0., 0., 0., -10., dPhiNeg, 0., 0. };
420  const Double_t dMax[] = { 100., 3000., 3000., 10., dPhiPos, dPhiMax, 500. };
421 
422  if (fHnsEveH) { delete fHnsEveH; fHnsEveH = 0; }
423  fHnsEveH = new THnSparseD("hsEveH", "", nV, nBin, dMin, dMax);
424  for (Int_t i=0; i<nV; i++) fHnsEveH->GetAxis(i)->SetName(sBin[i]);
425  fListOutputEvH->Add(fHnsEveH);
426 //=============================================================================
427 
428  return;
429 }
430 
431 //_____________________________________________________________________________
433 {
434 //
435 // AliAnalysisTaskEmcalTmpSparseMaker::MakeSparseTrks
436 //
437 
438  if (!fListOutputTrk) return;
439 //=============================================================================
440 
441  const Int_t nV = 9;
442  const Double_t dPhiNeg = -1.*TMath::Pi();
443  const Double_t dPhiPos = 1.*TMath::Pi() + TMath::Pi()/50.;
444  const Double_t dPhiMax = TMath::TwoPi() + TMath::Pi()/50.;
445  const Double_t dPhiMin = TMath::PiOver2() + TMath::Pi()/50.;
446  const TString sBin[] = { "aCent", "aMult", "aVz", "aEPhi", "aAPhi", "aRPhi", "aPt", "aEta", "aPhi" };
447  const Int_t nBin[] = { 100, 600, 20, 101, 101, 26, 1000, 200, 101 };
448  const Double_t dMin[] = { 0., 0., -10., dPhiNeg, 0., 0., 0., -1., 0. };
449  const Double_t dMax[] = { 100., 3000., 10., dPhiPos, dPhiMax, dPhiMin, 100., 1., dPhiMax };
450 
451  if (fHnsTrks) { delete fHnsTrks; fHnsTrks = 0; }
452  fHnsTrks = new THnSparseD("hsTrks", "", nV, nBin, dMin, dMax);
453  for (Int_t i=0; i<nV; i++) fHnsTrks->GetAxis(i)->SetName(sBin[i]);
454  fListOutputTrk->Add(fHnsTrks);
455 //=============================================================================
456 
457  return;
458 }
459 
460 //_____________________________________________________________________________
462 {
463 //
464 // AliAnalysisTaskEmcalTmpSparseMaker::MakeSparseClus
465 //
466 
467  if (!fListOutputClu) return;
468 //=============================================================================
469 
470  const Int_t nV = 9;
471  const Double_t dPhiNeg = -1.*TMath::Pi();
472  const Double_t dPhiPos = 1.*TMath::Pi() + TMath::Pi()/50.;
473  const Double_t dPhiMax = TMath::TwoPi() + TMath::Pi()/50.;
474  const Double_t dPhiMin = TMath::PiOver2() + TMath::Pi()/50.;
475  const TString sBin[] = { "aCent", "aMult", "aVz", "aEPhi", "aAPhi", "aRPhi", "aPt", "aEta", "aPhi" };
476  const Int_t nBin[] = { 100, 600, 20, 101, 101, 26, 1000, 200, 101 };
477  const Double_t dMin[] = { 0., 0., -10., dPhiNeg, 0., 0., 0., -1., 0. };
478  const Double_t dMax[] = { 100., 3000., 10., dPhiPos, dPhiMax, dPhiMin, 100., 1., dPhiMax };
479 
480  if (fHnsClus) { delete fHnsClus; fHnsClus = 0; }
481  fHnsClus = new THnSparseD("hsClus", "", nV, nBin, dMin, dMax);
482  for (Int_t i=0; i<nV; i++) fHnsClus->GetAxis(i)->SetName(sBin[i]);
483  fListOutputClu->Add(fHnsClus);
484 //=============================================================================
485 
486  return;
487 }
488 
489 //_____________________________________________________________________________
491 {
492 //
493 // AliAnalysisTaskEmcalTmpSparseMaker::MakeSparseJets
494 //
495 
496  if (!fListOutputJet) return;
497 //=============================================================================
498 
499  const Int_t nV = 11;
500  const Double_t dPhiNeg = -1.*TMath::Pi();
501  const Double_t dPhiPos = 1.*TMath::Pi() + TMath::Pi()/50.;
502  const Double_t dPhiMax = TMath::TwoPi() + TMath::Pi()/50.;
503  const Double_t dPhiMin = TMath::PiOver2() + TMath::Pi()/50.;
504  const TString sBin[] = { "aCent", "aMult", "aVz", "aEPhi", "aAPhi", "aRPhi", "aJet", "aPt", "aEta", "aPhi", "aType" };
505  const Int_t nBin[] = { 100, 600, 20, 101, 101, 26, 500, 1000, 200, 101, 4 };
506  const Double_t dMin[] = { 0., 0., -10., dPhiNeg, 0., 0., 0., 0., -1., 0., -0.5 };
507  const Double_t dMax[] = { 100., 3000., 10., dPhiPos, dPhiMax, dPhiMin, 250, 100., 1., dPhiMax, 3.5 };
508 
509  if (fHnsJets) { delete fHnsJets; fHnsJets = 0; }
510  fHnsJets = new THnSparseD("hsJets", "", nV, nBin, dMin, dMax);
511  for (Int_t i=0; i<nV; i++) fHnsJets->GetAxis(i)->SetName(sBin[i]);
512  fListOutputJet->Add(fHnsJets);
513 //=============================================================================
514 
515  return;
516 }
517 
518 //_____________________________________________________________________________
520 {
521 //
522 // AliAnalysisTaskEmcalTmpSparseMaker::CalcRelPhiEP
523 //
524 
525  Double_t dPhiSA = TVector2::Phi_mpi_pi(dPhi);
526  Double_t dPhiEP = TVector2::Phi_mpi_pi(dPhiSA - fEPV0);
527 
528  dPhiEP = TMath::Abs(dPhiEP);
529  if (dPhiEP>TMath::PiOver2()) dPhiEP = TMath::Pi() - dPhiEP;
530 
531  return dPhiEP;
532 }
533 
534 //_____________________________________________________________________________
536 {
537 //
538 // AliAnalysisTaskEmcalTmpSparseMaker::CalcAysPlane
539 //
540 
541  if (!fContTrks) return -9999.;
542 
543  AliVParticle *pTrk = 0;
544  Double_t dQx = 0, dQy = 0.;
545  fContTrks->ResetCurrentID();
546  while ((pTrk=fContTrks->GetNextAcceptParticle())) {
547  dQx += TMath::Cos(pTrk->Phi());
548  dQy += TMath::Sin(pTrk->Phi());
549  } TVector2 vQ(dQx,dQy);
550 
551  return (vQ.Phi());
552 }
virtual AliVParticle * GetNextAcceptParticle()
Double_t GetRhoVal() const
double Double_t
Definition: External.C:58
AliJetContainer * GetJetContainer(Int_t i=0) const
Bool_t fLocalInitialized
whether or not the task has been already initialized
virtual Bool_t FillGeneralHistograms()
Filling general histograms.
Double_t fEPV0
!event plane V0
Int_t ClusterAt(Int_t idx) const
Definition: AliEmcalJet.h:137
AliClusterContainer * GetClusterContainer() const
Container for particles within the EMCAL framework.
Int_t TrackAt(Int_t idx) const
Definition: AliEmcalJet.h:160
UShort_t GetNumberOfTracks() const
Definition: AliEmcalJet.h:139
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
AliParticleContainer * GetParticleContainer() const
virtual Bool_t FillHistograms()
Function filling histograms.
int Int_t
Definition: External.C:63
UShort_t GetNumberOfClusters() const
Definition: AliEmcalJet.h:138
AliClusterContainer * GetClusterContainer(Int_t i=0) const
Get cluster container attached to this task.
virtual Bool_t FillGeneralHistograms()
Filling general histograms.
Int_t GetNAcceptedClusters() const
Double_t fCent
!event centrality
AliEmcalJet * GetNextAcceptJet()
virtual Bool_t IsEventSelected()
Performing event selection.
virtual Bool_t RetrieveEventObjects()
Retrieve common objects from event.
Double_t fVertex[3]
!event vertex
void SetMakeGeneralHistograms(Bool_t g)
AliEmcalJet * GetAcceptJet(Int_t i) const
Bool_t GetMomentum(TLorentzVector &mom, const AliVCluster *vc, Double_t mass) const
virtual Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
Definition: AliEmcalJet.h:51
const char Option_t
Definition: External.C:48
void UserCreateOutputObjects()
Main initialization function on the worker.
bool Bool_t
Definition: External.C:53
virtual Bool_t IsEventSelected()
Performing event selection.
Int_t GetNAcceptedParticles() const
virtual Bool_t FillHistograms()
Function filling histograms.
Container structure for EMCAL clusters.
AliVCluster * GetNextAcceptCluster()
virtual void ExecOnce()
Perform steps needed to initialize the analysis.
Double_t GetJetPtCorr(Int_t i) const