AliPhysics  3b4a69f (3b4a69f)
AliAnalysisTaskEA.cxx
Go to the documentation of this file.
1 #ifndef ALIANALYSISTASKSE_H
2 
3 #include <Riostream.h>
4 #include <TROOT.h>
5 #include <TFile.h>
6 #include <TChain.h>
7 #include <TTree.h>
8 #include <TKey.h>
9 #include <TProfile.h>
10 #include <TProfile2D.h>
11 #include <TH1.h>
12 #include <TH1F.h>
13 #include <TF1.h>
14 #include <TH2F.h>
15 #include <TH1D.h>
16 #include <TH1I.h>
17 #include <TArrayF.h>
18 #include <TArrayD.h>
19 #include <THnSparse.h>
20 #include <TCanvas.h>
21 #include <TList.h>
22 #include <TClonesArray.h>
23 #include <TObject.h>
24 #include <TMath.h>
25 #include <TSystem.h>
26 #include <TInterpreter.h>
27 #include "AliAnalysisTask.h"
28 #include "AliCentrality.h"
29 #include "AliStack.h"
30 #include "AliESDEvent.h"
31 #include "AliESDInputHandler.h"
32 #include "AliAODEvent.h"
33 #include "AliAODHandler.h"
34 #include "AliAnalysisManager.h"
35 #include "AliAnalysisTaskSE.h"
37 #include "AliParticleContainer.h"
38 #include "AliInputEventHandler.h"
39 #endif
40 
41 #include <time.h>
42 #include <TRandom3.h>
43 #include "AliGenEventHeader.h"
44 #include "AliGenPythiaEventHeader.h"
45 #include "AliGenHijingEventHeader.h"
46 #include "AliAODMCHeader.h"
47 #include "AliMCEvent.h"
48 #include "AliLog.h"
49 #include <AliEmcalJet.h>
50 #include <AliPicoTrack.h>
51 #include "AliVEventHandler.h"
52 #include "AliVParticle.h"
53 #include "AliAODMCParticle.h"
54 #include "AliAnalysisUtils.h"
55 #include "AliRhoParameter.h"
56 #include "TVector3.h"
57 #include "AliVVertex.h"
58 #include "AliExternalTrackParam.h"
59 
60 #include <stdio.h>
61 #include <stdlib.h>
62 #include <vector>
63 
64 #include "AliGenDPMjetEventHeader.h"
65 #include "AliJetContainer.h"
66 #include "AliAnalysisTaskEmcal.h"
68 #include "AliAnalysisTaskEA.h"
69 #include "AliHeader.h"
70 #include "AliRunLoader.h"
71 #include "AliVVZERO.h"
72 #include "AliAODZDC.h"
73 #include "AliVZDC.h"
74 #include "AliMultSelection.h"
75 
76 using namespace std;
77 
78 // ANALYSIS OF HIGH PT HADRON TRIGGER ASSOCIATED SPECTRUM OF RECOIL JETS IN P+PB
79 // Author Filip Krizek (7.Oct. 2015)
80 
81 ClassImp(AliAnalysisTaskEA)
82 //________________________________________________________________________________________
83 
86 fUseDefaultVertexCut(1),
87 fUsePileUpCut(1),
88 fMyTrackContainerName(""),
89 fMyParticleContainerName(""),
90 fMyJetContainerName(""),
91 fMyJetParticleContainerName(""),
92 fTrkContainerDetLevel(0x0),
93 fParticleContainerPartLevel(0x0),
94 fJetContainerDetLevel(0x0),
95 fJetContainerPartLevel(0x0),
96 fRhoTaskName(""),
97 fRhoTaskNameMC(""),
98 fCentralityTree(0x0),
99 fMultSelection(0x0),
100 fIsMinBiasTrig(1),
101 fIsEmcalTrig(0),
102 fCentralityV0A(-1),
103 fCentralityV0C(-1),
104 fCentralityCL1(-1),
105 fCentralityZNA(-1),
106 fCentralityZNC(-1),
107 fxVertex(-1),
108 fyVertex(-1),
109 fzVertex(-1),
110 fVertexer3d(1),
111 fNTracklets(-1),
112 fIsV0ATriggered(0),
113 fIsV0CTriggered(0),
114 fMultV0A(1),
115 fMultV0C(1),
116 fZEM1Energy(0),
117 fZEM2Energy(0),
118 fTrackEtaWindow(0.9),
119 fMinTrackPt(0.150),
120 fMC(0),
121 fHelperClass(0), fInitializedLocal(0),
122 fHistEvtSelection(0x0),
123 fhVertexZ(0x0),
124 fhTrackPhiIncl(0x0), fhTrackEtaIncl(0x0),
125 fhJetPhiIncl(0x0), fhJetEtaIncl(0x0),
126 fZVertexCut(10.0),
127 fnHadronTTBins(0),
128 fnJetChTTBins(0)
129 {
130  //default constructor
131 
132  for(Int_t i=0; i<2; i++) fNClusters[i] = 0;
133  for(Int_t i=0; i<8; i++) fRingMultV0[i] = 0;
134 
135  for(Int_t i=0; i<5; i++){
136  fZNCtower[i] = 0;
137  fZPCtower[i] = 0;
138  fZNAtower[i] = 0;
139  fZPAtower[i] = 0;
140  fZNCtowerLG[i] = 0;
141  fZPCtowerLG[i] = 0;
142  fZNAtowerLG[i] = 0;
143  fZPAtowerLG[i] = 0;
144  }
145 
146  for(Int_t i=0; i<fkTTbins; i++){
147  fHadronTT[i] = 0;
148  fJetChTT[i] = 0;
149  }
150 
151  for(Int_t i=0; i<fkTTbins;i++){
152  fHadronTTLowPt[i]=-1;
153  fHadronTTHighPt[i]=-1;
154  fJetChTTLowPt[i]=-1;
155  fJetChTTHighPt[i]=-1;
156  }
157 
158  sprintf(fTrigClass,"%s","");
159 }
160 
161 //________________________________________________________________________
163 AliAnalysisTaskEmcalJet(name,kTRUE),
164 fUseDefaultVertexCut(1),
165 fUsePileUpCut(1),
166 fMyTrackContainerName(""),
167 fMyParticleContainerName(""),
168 fMyJetContainerName(""),
169 fMyJetParticleContainerName(""),
170 fTrkContainerDetLevel(0x0),
171 fParticleContainerPartLevel(0x0),
172 fJetContainerDetLevel(0x0),
173 fJetContainerPartLevel(0x0),
174 fRhoTaskName(""),
175 fRhoTaskNameMC(""),
176 fCentralityTree(0x0),
177 fMultSelection(0x0),
178 fIsMinBiasTrig(1),
179 fIsEmcalTrig(0),
180 fCentralityV0A(-1),
181 fCentralityV0C(-1),
182 fCentralityCL1(-1),
183 fCentralityZNA(-1),
184 fCentralityZNC(-1),
185 fxVertex(-1),
186 fyVertex(-1),
187 fzVertex(-1),
188 fVertexer3d(1),
189 fNTracklets(-1),
190 fIsV0ATriggered(0),
191 fIsV0CTriggered(0),
192 fMultV0A(1),
193 fMultV0C(1),
194 fZEM1Energy(0),
195 fZEM2Energy(0),
196 fTrackEtaWindow(0.9),
197 fMinTrackPt(0.150),
198 fMC(0),
199 fHelperClass(0), fInitializedLocal(0),
200 fHistEvtSelection(0x0),
201 fhVertexZ(0x0),
202 fhTrackPhiIncl(0x0), fhTrackEtaIncl(0x0),
203 fhJetPhiIncl(0x0), fhJetEtaIncl(0x0),
204 fZVertexCut(10.0),
205 fnHadronTTBins(0),
206 fnJetChTTBins(0)
207 {
208  //Constructor
209 
210  for(Int_t i=0; i<2; i++) fNClusters[i] = 0;
211  for(Int_t i=0; i<8; i++) fRingMultV0[i] = 0;
212 
213  for(Int_t i=0; i<5; i++){
214  fZNCtower[i] = 0;
215  fZPCtower[i] = 0;
216  fZNAtower[i] = 0;
217  fZPAtower[i] = 0;
218  fZNCtowerLG[i] = 0;
219  fZPCtowerLG[i] = 0;
220  fZNAtowerLG[i] = 0;
221  fZPAtowerLG[i] = 0;
222  }
223 
224  //arrays number of triggers
225  for(Int_t i=0; i<fkTTbins; i++){
226  fHadronTT[i] = 0;
227  fJetChTT[i] = 0;
228  }
229 
230  for(Int_t i=0; i<fkTTbins;i++){
231  fHadronTTLowPt[i]=-1;
232  fHadronTTHighPt[i]=-1;
233  fJetChTTLowPt[i]=-1;
234  fJetChTTHighPt[i]=-1;
235  }
236 
237  sprintf(fTrigClass,"%s","");
238  //inclusive pT spectrum times the boost function
239 
240  DefineOutput(1, TList::Class());
241 }
242 
243 //_____________________________________________________________________________________
245 
246  TString trigger = fInputEvent->GetFiredTriggerClasses();
247  bool passedGammaTrigger = kFALSE;
248  //SELECT ALSO DCAL????PreSelection checks just EMCAL
249  if(trigger.Contains("EG1") || trigger.Contains("EG2") || trigger.Contains("DG1") || trigger.Contains("DG2")){
250  passedGammaTrigger = kTRUE;
251  }
252  return passedGammaTrigger;
253 
254 }
255 //_____________________________________________________________________________________
257 
258  TString trigger = fInputEvent->GetFiredTriggerClasses();
259  bool passedTrigger = kFALSE;
260  if(trigger.Contains("INT7")){
261  passedTrigger = kTRUE;
262  }
263  return passedTrigger;
264 
265 }
266 
267 //_____________________________________________________________________________________
269 
270  // Get rho from event using CMS approach
271  AliRhoParameter* rho = NULL;
272  TString rhoname = (!isMC) ? fRhoTaskName : fRhoTaskNameMC;
273  if(!rhoname.IsNull()){
274  rho = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(rhoname.Data()));
275  if (!rho) {
276  //AliWarningF(MSGWARNING("%s: Could not retrieve rho with name %s!"), GetName(), rhoname.Data());
277  return 0.;
278  }
279  }else{
280  //AliWarningF(MSGWARNING("No %s Rho task name provided"), (!isMC ? "DATA" : "MC"));
281  return 0.;
282  }
283 
284  return rho->GetVal();
285 }
286 //________________________________________________________________________
287 
289  //EVENT SELECTION RECONSTRUCTED DATA
290 
291 
292  if(!event) return kFALSE;
293 
294  //___________________________________________________
295  //TEST PILE UP
296  if(fUsePileUpCut){
297  if(!fHelperClass || fHelperClass->IsPileUpEvent(event)){
298  fHistEvtSelection->Fill(1.5); //count events rejected by pileup
299  return kFALSE;
300  }
301  }
302  //___________________________________________________
303  //VERTEX CUT
304 
306  if(!fHelperClass || !fHelperClass->IsVertexSelected2013pA(event)){ //??? USE THIS OR SOMETHING ELSE
307  fHistEvtSelection->Fill(2.5); //count events rejected by vertex cut
308  return kFALSE;
309  }
310  }else{
311  if(TMath::Abs(event->GetPrimaryVertex()->GetZ()) > fZVertexCut){
312  fHistEvtSelection->Fill(2.5); //count events rejected by vertex cut
313  return kFALSE;
314  }
315  }
316  //___________________________________________________
317  //AFTER VERTEX CUT
318  fhVertexZ->Fill(event->GetPrimaryVertex()->GetZ());
319 
320 
321  return kTRUE;
322 }
323 
324 //________________________________________________________________________
326  // Check if the track pt and eta range
327  if(!track) return kFALSE;
328 
329  if(isGen){ //particle level MC: select charged physical primary tracks
330  //Apply only for kine level or MC containers
331  if(!track->Charge()) return kFALSE;
332  if(fMC == kPartLevel){
333  if(!(static_cast<AliAODMCParticle*>(track))->IsPhysicalPrimary()) return kFALSE;
334  }
335  }
336  if(TMath::Abs(track->Eta()) < fTrackEtaWindow){ //APPLY TRACK ETA CUT
337  if(track->Pt() > fMinTrackPt){ //APPLY TRACK PT CUT
338  return kTRUE;
339  }
340  }
341  return kFALSE;
342 }
343 //________________________________________________________________________
345  // Initialization of jet containers done in AliAnalysisTaskEmcalJet::ExecOnce()
346  //Read arrays of jets and tracks
347  fInitializedLocal = kTRUE;
348 
349  // Initialize helper class (for vertex selection & pile up correction)
350  fHelperClass = new AliAnalysisUtils();
351  fHelperClass->SetCutOnZVertexSPD(kFALSE); // kFALSE: no cut; kTRUE: |zvtx-SPD - zvtx-TPC|<0.5cm
352 
353 
354  return;
355 }
356 
357 //________________________________________________________________________
359  if(!cluster->IsEMCAL()) return kFALSE;
360  if(cluster->E()<0.7) return kFALSE;
361  return kTRUE;
362 }
363 
364 //________________________________________________________________________
366 /*
367  //General QA.
368  if(!cluster->IsEMCAL()) return kFALSE;
369 
370  if( cluster->GetNCells() < 2) return kFALSE;
371 
372  Int_t disToBad = cluster->GetDistanceToBadChannel();
373  if(disToBad<2) return kFALSE;
374 
375  Int_t disToBorder = GetMaxDistanceFromBorder(cluster);
376  if(disToBorder<1) return kFALSE;
377 
378  Double_t exoticity = GetExoticity(cluster);
379  if(exoticity>0.97) return kFALSE;
380 
381  Double_t time = cluster->GetTOF()*1000000000; //in ns
382  if(!fMC && std::abs(time)>30) return kFALSE;
383 */
384  return kTRUE;
385 }
386 
387 //________________________________________________________________________
389  // executed in each event
390  //called in AliAnalysisTaskEmcal::UserExec(Option_t *)
391  // Analyze the event and Fill histograms
392 
393  if(!InputEvent()){
394  AliError("??? Event pointer == 0 ???");
395  return kFALSE;
396  }
397 
398  //Execute only once: Get tracks, jets from arrays if not already given
400 
401 
402  //_________________________________________________________________
403  // EVENT SELECTION
404  fHistEvtSelection->Fill(0.5); //Count input event
405 
406  //Check Reconstructed event vertex and pileup
407  if(!IsEventInAcceptance(InputEvent())) return kFALSE; //post data is in UserExec
408 
409 
410  fIsMinBiasTrig = kFALSE; //Minimum bias event flag
411  if(PassedMinBiasTrigger()){
412  fIsMinBiasTrig = kTRUE;
413  fHistEvtSelection->Fill(3.5); //Count Accepted input event
414  }
415 
416  fIsEmcalTrig = kFALSE; //EMCAL triggered event flag
417  if(PassedGATrigger()){
418  fIsEmcalTrig = kTRUE;
419  fHistEvtSelection->Fill(4.5); //Count Accepted input event
420  }
421 
422 
423  if(!fIsEmcalTrig && !fIsMinBiasTrig) return kFALSE; //post data is in UserExec
424 
425 
426  // END EVENT SELECTION
427  //_________________________________________________________________
428  // EVENT PROPERTIES
429 
430  for(int ir=0; ir<8; ir++) fRingMultV0[ir]=0.;
431 
432  // ***** Trigger selection
433  TString triggerClass = InputEvent()->GetFiredTriggerClasses();
434  sprintf(fTrigClass,"%s",triggerClass.Data());
435 
436 
437  fMultSelection = (AliMultSelection*) InputEvent()->FindListObject("MultSelection");
438  if(fMultSelection){
439  fCentralityV0A = fMultSelection->GetMultiplicityPercentile("V0A");
440  fCentralityV0C = fMultSelection->GetMultiplicityPercentile("V0C");
441  fCentralityCL1 = fMultSelection->GetMultiplicityPercentile("CL1");
442  fCentralityZNA = fMultSelection->GetMultiplicityPercentile("ZNA");
443  fCentralityZNC = fMultSelection->GetMultiplicityPercentile("ZNC");
444  }else{
445  fCentralityV0A = -1;
446  fCentralityV0C = -1;
447  fCentralityCL1 = -1;
448  fCentralityZNA = -1;
449  fCentralityZNC = -1;
450  }
451 
452  const AliVVertex *vertex = InputEvent()->GetPrimaryVertexSPD();
453  fxVertex = vertex->GetX();
454  fyVertex = vertex->GetY();
455  fzVertex = vertex->GetZ();
456  if(vertex->IsFromVertexer3D()) fVertexer3d = kTRUE;
457  else fVertexer3d = kFALSE;
458 
459  const AliVMultiplicity *mult = InputEvent()->GetMultiplicity();
460  fNTracklets = mult->GetNumberOfTracklets();
461 
462  for(Int_t ilay=0; ilay<2; ilay++){
463  fNClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
464  }
465 
466  AliVVZERO *vzeroAOD = InputEvent()->GetVZEROData();
467  fMultV0A = vzeroAOD->GetMTotV0A();
468  fMultV0C = vzeroAOD->GetMTotV0C();
469  //
470  fIsV0ATriggered = vzeroAOD->GetV0ADecision();
471  fIsV0CTriggered = vzeroAOD->GetV0CDecision();
472 
473  //
474  for(Int_t iRing = 0; iRing < 8; ++iRing){
475  for(Int_t i = 0; i < 8; ++i){
476  fRingMultV0[iRing] += vzeroAOD->GetMultiplicity(8*iRing+i);
477  }
478  }
479 
480  AliAODZDC *aodZDC =dynamic_cast<AliAODZDC*> (InputEvent()->GetZDCData());
481 
482  fZEM1Energy = (Float_t) (aodZDC->GetZEM1Energy());
483  fZEM2Energy = (Float_t) (aodZDC->GetZEM2Energy());
484 
485  const Double_t* towZNC = aodZDC->GetZNCTowerEnergy();
486  const Double_t* towZPC = aodZDC->GetZPCTowerEnergy();
487  const Double_t* towZNA = aodZDC->GetZNATowerEnergy();
488  const Double_t* towZPA = aodZDC->GetZPATowerEnergy();
489  //
490  const Double_t* towZNCLG = aodZDC->GetZNCTowerEnergyLR();
491  const Double_t* towZPCLG = aodZDC->GetZPCTowerEnergyLR();
492  const Double_t* towZNALG = aodZDC->GetZNATowerEnergyLR();
493  const Double_t* towZPALG = aodZDC->GetZPATowerEnergyLR();
494  //
495  for(Int_t it=0; it<5; it++){
496  fZNCtower[it] = (Float_t) (towZNC[it]);
497  fZPCtower[it] = (Float_t) (towZPC[it]);
498  fZNAtower[it] = (Float_t) (towZNA[it]);
499  fZPAtower[it] = (Float_t) (towZPA[it]);
500  fZNCtowerLG[it] = (Float_t) (towZNCLG[it]);
501  fZPCtowerLG[it] = (Float_t) (towZPCLG[it]);
502  fZNAtowerLG[it] = (Float_t) (towZNALG[it]);
503  fZPAtowerLG[it] = (Float_t) (towZPALG[it]);
504  }
505 
506 
507 
508  //_________________________________________________________________
509  // JET+TRACK CONTAINERS
510 
511  AliEmcalJet *jet = NULL; //jet pointer real jet
512  AliEmcalJet *jetMC = NULL; //jet pointer real jet
513  AliVParticle *track = NULL; //jet constituent
514 
515  //_________________________________________________________
516  //READ TRACK AND JET CONTAINERS
517  //Container operations http://alidoc.cern.ch/AliPhysics/master/READMEcontainers.html#emcalContainerIterateTechniques
518 
519  fTrkContainerDetLevel = static_cast<AliTrackContainer*> (GetTrackContainer(fMyTrackContainerName.Data())); //reconstructed particle container
520  fJetContainerDetLevel = static_cast<AliJetContainer*> (GetJetContainer(fMyJetContainerName.Data())); //AKT jet
521 
522  if(fMC){
523  fParticleContainerPartLevel = GetParticleContainer(fMyParticleContainerName.Data()); //reconstructed particle container
524  fJetContainerPartLevel = GetJetContainer(fMyJetParticleContainerName.Data()); //reconstructed particle container
525  }
526 
527 //
528 // //EMCAL CLUSTERS
529 // AliClusterContainer* clusters = GetClusterContainer(0);
530 // if(!clusters) AliError(Form("Could not retrieve clusters!"));
531 //
532 // //Filling cluster and pion THnSparsesx
533 // for(auto cluster: clusters->accepted()){
534 // if(!PreSelection(cluster)) continue;
535 //
536 // Bool_t passed = FinalClusterCuts(cluster);
537 //
538 // //FillClusterHisto(cluster, h_Cluster);
539 // for(auto cluster2: clusters->accepted()){
540 // if(!PreSelection(cluster2)) continue;
541 // if(cluster==cluster2) continue;
542 // // FillPionHisto(cluster, cluster2, h_Pi0);
543 //
544 // // AVOID DOUBLE COUNTING !!!!!!!!!!!!!!!
545 // }
546 // }
547 //
548 
549  //_________________________________________________________
550  //LOOP OVER TRACKS DETECTOR LEVEL + SEARCH FOR HIGH PT HADRON TRIGGER
551 
552  for(Int_t i=0; i<fnHadronTTBins; i++){
553  fHadronTT[i] = 0;
554  }
555 
556 
557  for(auto trackIterator : fTrkContainerDetLevel->accepted_momentum() ){
558  // trackIterator is a std::map of AliTLorentzVector and AliVTrack
559  track = trackIterator.second; // Get the full track
560 
561  if(IsTrackInAcceptance(track, kDetLevel)){
562  //fill some histograms for detector level tracks
563  fhTrackPhiIncl->Fill(track->Pt(), track->Phi());
564  fhTrackEtaIncl->Fill(track->Pt(), track->Eta());
565 
566 
567  for(Int_t itt=0; itt<fnHadronTTBins; itt++){
568  if(fHadronTTLowPt[itt] < track->Pt() && track->Pt() < fHadronTTHighPt[itt]){
569  fHadronTT[itt]++; // there was a high pt
570  }
571  }
572  }
573  }
574 
575  //_________________________________________________________
576  //LOOP OVER JETS DETECTOR LEVEL
577 
578  for(Int_t i=0; i<fnJetChTTBins; i++){
579  fJetChTT[i] = 0;
580  }
581 
582  Double_t rho = GetExternalRho(kDetLevel); //estimated backround pt density
583 
584  for(auto jetIterator : fJetContainerDetLevel->accepted_momentum() ){
585  // trackIterator is a std::map of AliTLorentzVector and AliVTrack
586  jet = jetIterator.second; // Get the pointer to jet object
587 
588  //fill some histograms for detector level jets
589  fhJetPhiIncl->Fill(jet->Pt(), jet->Phi());
590  fhJetEtaIncl->Fill(jet->Pt(), jet->Eta());
591 
592 
593  for(Int_t ijj=0; ijj<fnJetChTTBins; ijj++){
594  if(fJetChTTLowPt[ijj] < jet->Pt() && jet->Pt() < fJetChTTHighPt[ijj]){
595  fJetChTT[ijj]++; // there was a high pt
596  }
597  }
598 
599  //loop over jet constituents
600  //for(Int_t iq=0; iq < jet->GetNumberOfTracks(); iq++) {
601  // track = (AliVParticle*) (jet->TrackAt(iq, fTrkContainerDetLevel->GetArray()));
602  //here one can e.g. analyze jet shapes
603 
604  //}
605 
606 
607  //you can also find the closest particle level jet to given detector level
608  //the mateching betwe particle and detector level jets is done in Tagger task
609  //if(fMC){
610  // jetMC = jet->ClosestJet();
611  //}
612  }
613 
614 
615  //___________________________________________________________
616 //
617 // if(fMC){
618 //
619 // //_________________________________________________________
620 // //LOOP OVER PARTICLE LEVEL
621 //
622 // for(auto trackIterator : fParticleContainerPartLevel->accepted_momentum() ){
623 // // trackIterator is a std::map of AliTLorentzVector and AliVTrack
624 // track = trackIterator.second; // Get the full track
625 //
626 // if(IsTrackInAcceptance(track, kPartLevel)){
627 // //here fill some histograms for particle level particles
628 //
629 // }
630 // }
631 //
632 // //_________________________________________________________
633 // //LOOP OVER JETS PARTICLE LEVEL
634 //
635 //
636 // Double_t rhoMC = GetExternalRho(kPartLevel); //estimated backround pt density
637 //
638 // for(auto jetIterator : fJetContainerPartLevel->accepted_momentum() ){
639 // // trackIterator is a std::map of AliTLorentzVector and AliVTrack
640 // jet = jetIterator.second; // Get the pointer to jet object
641 //
642 // //fill some histograms for detector level jets
643 // fhJetPhiIncl->Fill(jet->Pt(), jet->Phi());
644 // fhJetEtaIncl->Fill(jet->Pt(), jet->Eta());
645 //
646 // //loop over jet constituents at particle level
647 // for(Int_t iq=0; iq < jet->GetNumberOfTracks(); iq++) {
648 // track = (AliVParticle*) (jet->TrackAt(iq, fParticleContainerPartLevel->GetArray()));
649 // //here one can e.g. analyze jet shapes
650 //
651 // }
652 //
653 // }
654 //
655 // }
656 
657  fCentralityTree->Fill();
658 
659 
660  return kTRUE;
661 }
662 
663 //________________________________________________________________________
665  //Treminate
666  PostData(1, fOutput);
667 
668  // Mandatory
669  fOutput = dynamic_cast<AliEmcalList*> (GetOutputData(1)); // '1' refers to the output slot
670  if(!fOutput) {
671  printf("ERROR: Output list not available\n");
672  return;
673  }
674 }
675 
676 //________________________________________________________________________
678  // Destructor. Clean-up the output list, but not the histograms that are put inside
679  // (the list is owner and will clean-up these histograms). Protect in PROOF case.
680  if(fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
681  delete fOutput;
682  }
683  delete fHelperClass;
684 
685 }
686 
687 //________________________________________________________________________
689  // called once to create user defined output objects like histograms, plots etc.
690  // and to put it on the output list.
691  // Note: Saving to file with e.g. OpenFile(0) is must be before creating other objects.
692  //fOutput TList defined in the mother class
694 
695  Bool_t oldStatus = TH1::AddDirectoryStatus();
696  TH1::AddDirectory(kFALSE);
697  TString name, object;
698 
699 
700  //__________________________________________________________
701  // Event statistics
702  fHistEvtSelection = new TH1I("fHistEvtSelection", "event selection", 5, 0, 5);
703  fHistEvtSelection->GetXaxis()->SetBinLabel(1,"events IN");
704  fHistEvtSelection->GetXaxis()->SetBinLabel(2,"pile up (rejected)");
705  fHistEvtSelection->GetXaxis()->SetBinLabel(3,"vertex cut (rejected)");
706  fHistEvtSelection->GetXaxis()->SetBinLabel(4,"MB");
707  fHistEvtSelection->GetXaxis()->SetBinLabel(5,"EMCAL");
708 
709 
711 
712 
713  //_______________________________________________________________________
714  //inclusive azimuthal and pseudorapidity histograms
715 
716  fhVertexZ = new TH1F("fhVertexZ","z vertex",40,-20,20);
717  fOutput->Add(fhVertexZ);
718 
719  //-------------------------
720 
721  fhTrackEtaIncl = new TH2F("fhTrackEtaIncl","Eta dist inclusive track vs pTjet", 50,0, 100, 40,-0.9,0.9);
722  fOutput->Add((TH2F*) fhTrackEtaIncl);
723 
724  fhTrackPhiIncl = new TH2F("fhTrackPhiIncl","Azim dist tracks vs pTjet", 50, 0, 100, 50,0,2*TMath::Pi());
725  fOutput->Add((TH2F*) fhTrackPhiIncl);
726 
727  fhJetEtaIncl = new TH2F("fhJetEtaIncl","Eta dist inclusive jets vs pTjet", 50,0, 100, 40,-0.9,0.9);
728  fOutput->Add((TH2F*) fhJetEtaIncl);
729 
730  fhJetPhiIncl = new TH2F("fhJetPhiIncl","Azim dist jets vs pTjet", 50, 0, 100, 50,0,2*TMath::Pi());
731  fOutput->Add((TH2F*) fhJetPhiIncl);
732 
733  // OUTPUT TREE
734  fCentralityTree = new TTree("fCentralityTree", "Centrality vs. multiplicity tree");
735  //
736  fCentralityTree->Branch("trigClass",fTrigClass,"trigClass/C");
737  fCentralityTree->Branch("xVertex", &fxVertex,"xVertex/D");
738  fCentralityTree->Branch("yVertex", &fyVertex,"yVertex/D");
739  fCentralityTree->Branch("zVertex", &fzVertex,"zVertex/D");
740  fCentralityTree->Branch("vertexer3d", &fVertexer3d,"vertexer3d/O");
741  fCentralityTree->Branch("nTracklets", &fNTracklets,"nTracklets/I");
742  fCentralityTree->Branch("nClusters", fNClusters,"nClusters[2]/I");
743  //
744  fCentralityTree->Branch("isV0ATriggered", &fIsV0ATriggered,"isV0ATriggered/I");
745  fCentralityTree->Branch("isV0CTriggered", &fIsV0CTriggered,"isV0CTriggered/I");
746  fCentralityTree->Branch("multV0A", &fMultV0A,"multV0A/F");
747  fCentralityTree->Branch("multV0C", &fMultV0C,"multV0C/F");
748  fCentralityTree->Branch("ringmultV0", fRingMultV0,"ringmultV0[8]/F");
749 
750  fCentralityTree->Branch("znctower", fZNCtower, "znctower[5]/F");
751  fCentralityTree->Branch("zpctower", fZPCtower, "zpctower[5]/F");
752  fCentralityTree->Branch("znatower", fZNAtower, "znatower[5]/F");
753  fCentralityTree->Branch("zpatower", fZPAtower, "zpatower[5]/F");
754  fCentralityTree->Branch("znctowerLG", fZNCtowerLG, "znctowerLG[5]/F");
755  fCentralityTree->Branch("zpctowerLG", fZPCtowerLG, "zpctowerLG[5]/F");
756  fCentralityTree->Branch("znatowerLG", fZNAtowerLG, "znatowerLG[5]/F");
757  fCentralityTree->Branch("zpatowerLG", fZPAtowerLG, "zpatowerLG[5]/F");
758 
759  //fCentralityTree->Branch("tdc", fTDCvalues, "tdc[32][4]/I");
760  //fCentralityTree->Branch("tdcSum", &fTDCSum, "tdcSum/F");
761  //fCentralityTree->Branch("tdcDiff", &fTDCDiff, "tdcDiff/F");
762 
763  fCentralityTree->Branch("centrV0Amult", &fCentralityV0A, "centrV0Amult/F");
764  fCentralityTree->Branch("centrV0Cmult", &fCentralityV0C, "centrV0Cmult/F");
765  fCentralityTree->Branch("centrSPDclu1", &fCentralityCL1, "centrSPDclu1/F");
766  fCentralityTree->Branch("centrZNA", &fCentralityZNA, "centrZNA/F");
767  fCentralityTree->Branch("centrZNC", &fCentralityZNC, "centrZNC/F");
768 
769  for(Int_t itt=0; itt<fnHadronTTBins; itt++){
770  name = Form("hadronTTbin_%d_%d",fHadronTTLowPt[itt],fHadronTTHighPt[itt]);
771  object = name;
772  object.Append("/I"); //Number of tracks in given bin
773 
774  fCentralityTree->Branch(name.Data(), &(fHadronTT[itt]), object.Data());
775  }
776 
777  for(Int_t ijj=0; ijj<fnJetChTTBins; ijj++){
778  name = Form("jetchTTbin_%d_%d",fJetChTTLowPt[ijj],fJetChTTHighPt[ijj]);
779  object = name;
780  object.Append("/I"); //Number of jets in given bin
781 
782  fCentralityTree->Branch(name.Data(), &(fJetChTT[ijj]), object.Data());
783  }
784 
785  fOutput->Add(fCentralityTree);
786 
787 
788 
789 
790  // =========== Switch on Sumw2 for all histos ===========
791  for(Int_t i=0; i<fOutput->GetEntries(); i++){
792  TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
793  if(h1){
794  h1->Sumw2();
795  continue;
796  }
797  THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
798  if(hn){
799  hn->Sumw2();
800  }
801  }
802  TH1::AddDirectory(oldStatus);
803 
804 
805  PostData(1, fOutput);
806 }
807 //________________________________________________________________________
809  //
810  // retrieve event objects
811  //
813 
814  return kTRUE;
815 }
816 //________________________________________________________________________
818 {
819  // Run analysis code here, if needed. It will be executed before FillHistograms().
820 
821  return kTRUE;
822 }
823 
824 //________________________________________________________________________
825 
AliAnalysisUtils * fHelperClass
Bool_t FillHistograms()
Function filling histograms.
Float_t fCentralityZNC
Centrality from ZNA.
Bool_t fVertexer3d
Z vertex from ITS.
TH2F * fhTrackEtaIncl
minimum bias phi inclusive
Int_t fJetChTTHighPt[fkTTbins]
double Double_t
Definition: External.C:58
Definition: External.C:236
AliJetContainer * GetJetContainer(Int_t i=0) const
Double_t Eta() const
Definition: AliEmcalJet.h:121
Int_t fNClusters[2]
no. tracklets
Double_t Phi() const
Definition: AliEmcalJet.h:117
Float_t fZPCtowerLG[5]
ZNC 5 tower signals.
Float_t fCentralityV0C
Centrality from V0A.
Container with name, TClonesArray and cuts for particles.
TString fMyParticleContainerName
Float_t fZNCtower[5]
ZEM2 Energy.
Bool_t fIsEmcalTrig
triggered by Min Bias Trig
TH2F * fhTrackPhiIncl
gc vertexZ inclusive
TH1I * fHistEvtSelection
gc trigger if tracks/jets are loaded initiates calling ExecOnce
TH1F * fhVertexZ
gc event statistics
Bool_t PreSelection(AliVCluster *cluster)
Float_t fMultV0A
V0C decision.
TH2F * fhJetEtaIncl
minimum bias phi inclusive
Int_t fJetChTT[fkTTbins]
array which stores the number of triggers in given event
Int_t fHadronTTHighPt[fkTTbins]
Float_t fZPAtower[5]
ZNA 5 tower signals.
Float_t fMultV0C
mult. V0A
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
Float_t fZPCtower[5]
ZNC 5 tower signals.
const AliJetIterableMomentumContainer accepted_momentum() const
int Int_t
Definition: External.C:63
Definition: External.C:204
Int_t fNTracklets
Is vertex from 3d vertexer?
float Float_t
Definition: External.C:68
AliParticleContainer * fParticleContainerPartLevel
detector level track container
Float_t fCentralityV0A
triggered by EMCAL
Double_t fxVertex
Centrality from ZNC.
Float_t fZPAtowerLG[5]
ZNA 5 tower signals.
Int_t fIsV0CTriggered
VOA decision.
Int_t fHadronTT[fkTTbins]
TString fMyJetParticleContainerName
Float_t fCentralityZNA
Centrality from Clusters in layer 1.
Bool_t fIsMinBiasTrig
fired trigger classes
char fTrigClass[1000]
object which handels centrality
Float_t fZNAtowerLG[5]
ZPC 5 tower signals.
Bool_t FinalClusterCuts(AliVCluster *cluster)
Float_t fZEM2Energy
ZEM1 Energy.
Double_t fTrackEtaWindow
ZPA 5 tower signals.
Float_t fZEM1Energy
V0 ring mult.
Double_t fZVertexCut
minimum bias eta inclusive
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
TH2F * fhJetPhiIncl
minimum bias eta inclusive
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Double_t Pt() const
Definition: AliEmcalJet.h:109
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
Definition: AliEmcalList.h:25
Bool_t isMC
AliEmcalList * fOutput
!output list
void Terminate(Option_t *)
Double_t fyVertex
X vertex from ITS.
AliTrackContainer * GetTrackContainer(Int_t i=0) const
Int_t fJetChTTLowPt[fkTTbins]
Float_t fZNAtower[5]
ZPC 5 tower signals.
Base task in the EMCAL jet framework.
Double_t fzVertex
Y vertex from ITS.
Represent a jet reconstructed using the EMCal jet framework.
Definition: AliEmcalJet.h:51
AliJetContainer * fJetContainerPartLevel
detector level jet container
const AliTrackIterableMomentumContainer accepted_momentum() const
Float_t fCentralityCL1
Centrality from V0C.
AliJetContainer * fJetContainerDetLevel
particle level container with particles
Bool_t IsTrackInAcceptance(AliVParticle *track, Bool_t isGen=0)
const char Option_t
Definition: External.C:48
AliTrackContainer * fTrkContainerDetLevel
void UserCreateOutputObjects()
Main initialization function on the worker.
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.
bool Bool_t
Definition: External.C:53
Bool_t fInitializedLocal
gc Vertex selection helper
TString fRhoTaskName
particle level jet container
Int_t fHadronTTLowPt[fkTTbins]
Bool_t IsEventInAcceptance(AliVEvent *event)
Int_t fIsV0ATriggered
no. clusters on SPD layers
Float_t fZNCtowerLG[5]
ZPA 5 tower signals.
Container for jet within the EMCAL jet framework.
Definition: External.C:196
Double_t GetExternalRho(Bool_t isMC)
Float_t fRingMultV0[8]
mult. V0C
AliMultSelection * fMultSelection
output tree