]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/muon/AliAnalysisTaskMuonAODCreation.cxx
3e5ecda008077e7ae90d8e9f2cf50f2d3f5c2670
[u/mrichter/AliRoot.git] / PWG / muon / AliAnalysisTaskMuonAODCreation.cxx
1 //#ifndef ALIANALYSISTASKMUONAODCREATION_CXX
2 //#define ALIANALYSISTASKMUONAODCREATION_CXX
3
4 /* $Id$ */
5
6 #include <TChain.h>
7 #include <TTree.h>
8 #include <TList.h>
9 #include <TCanvas.h>
10 #include <TClonesArray.h>
11 #include <TH1.h>
12
13 #include "AliAnalysisTaskMuonAODCreation.h"
14 #include "AliAnalysisTaskSE.h"
15 #include "AliAnalysisManager.h"
16 #include "AliAnalysisDataSlot.h"
17 #include "AliESDEvent.h"
18 #include "AliESD.h"
19 #include "AliAODEvent.h"
20 #include "AliAODHeader.h"
21 #include "AliVEvent.h"
22 #include "AliAODHandler.h"
23 #include "AliAODInputHandler.h"
24 #include "AliMCEventHandler.h"
25 #include "AliInputEventHandler.h"
26 #include "AliMCEvent.h"
27 #include "AliStack.h"
28 #include "AliLog.h"
29
30 ClassImp(AliAnalysisTaskMuonAODCreation)
31
32 //__________________________________________________________________________
33 AliAnalysisTaskMuonAODCreation::AliAnalysisTaskMuonAODCreation() :
34   fOutput(0x0),
35   fTree(0x0),
36   fOutputAOD(0x0)
37 {
38 }
39 //___________________________________________________________________________
40 AliAnalysisTaskMuonAODCreation::AliAnalysisTaskMuonAODCreation(const Char_t* name) :
41   AliAnalysisTaskSE(name),
42   fOutput(0x0),
43   fTree(0x0),
44   fOutputAOD(0x0)
45 {
46   // Constructor. Initialization of Inputs and Outputs
47   //
48     
49   DefineOutput(1,TList::Class());
50
51 }
52
53 //___________________________________________________________________________
54 AliAnalysisTaskMuonAODCreation& AliAnalysisTaskMuonAODCreation::operator=(const AliAnalysisTaskMuonAODCreation& c) 
55 {
56   //
57   // Assignment operator
58   //
59   if (this!=&c) {
60     AliAnalysisTaskSE::operator=(c) ;
61   }
62   return *this;
63 }
64
65 //___________________________________________________________________________
66 AliAnalysisTaskMuonAODCreation::AliAnalysisTaskMuonAODCreation(const AliAnalysisTaskMuonAODCreation& c) :
67   AliAnalysisTaskSE(c),
68   fOutput(c.fOutput),
69   fTree(c.fTree),
70   fOutputAOD(c.fOutputAOD)
71  {
72   //
73   // Copy Constructor                                                                           
74   //
75 }
76
77 //___________________________________________________________________________
78 AliAnalysisTaskMuonAODCreation::~AliAnalysisTaskMuonAODCreation() {
79   //
80   //destructor
81   //
82   Info("~AliAnalysisTaskMuonAODCreation","Calling Destructor");
83 }
84
85 //___________________________________________________________________________
86 void AliAnalysisTaskMuonAODCreation::UserCreateOutputObjects(){
87         
88   AliAODHandler* handler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
89  
90   fOutputAOD   = handler->GetAOD();
91   fTree = handler->GetTree();
92
93   fOutput = new TList();
94   fOutput->SetOwner(); 
95  
96   TH1D *pt_alltracks    = new TH1D("pt_alltracks","pt_alltracks",10,0,20);      
97   TH1D *pt_muontracks    = new TH1D("pt_muontracks","pt_muontracks",10,0,20);   
98         
99   fOutput->Add(pt_alltracks);   
100   fOutput->Add(pt_muontracks);  
101   fOutput->ls(); 
102
103
104
105
106 //_________________________________________________
107 void AliAnalysisTaskMuonAODCreation::UserExec(Option_t *)
108 {
109   
110   AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
111   if ( ! aod ) {
112     AliError("Cannot get AOD event");
113     return;
114   }  
115   
116   Int_t nMuons=0;
117  
118   for (Int_t j = 0; j<aod->GetNumberOfTracks(); j++) { 
119     AliAODTrack *track = aod->GetTrack(j);
120     ((TH1D*)(fOutput->FindObject("pt_alltracks")))->Fill(track->Pt()); 
121     if(track->IsMuonTrack()) {
122       nMuons++;
123       ((TH1D*)(fOutput->FindObject("pt_muontracks")))->Fill(track->Pt()); 
124     }  
125   }
126          
127   AliAODHandler* outputHandler = (AliAODHandler*) 
128       ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());         
129    
130   outputHandler->SetFillAOD(kFALSE);
131    
132   if(nMuons>0) { 
133     outputHandler->SetFillAOD(kTRUE);
134    
135     PostData(0,fTree);
136     PostData(1,fOutput);
137   } else {
138     return;
139   }
140 }
141
142
143 //________________________________________________________________________
144 void AliAnalysisTaskMuonAODCreation::Terminate(Option_t *) 
145 {
146   TCanvas *c = new TCanvas("c","plots",20,20,600,600);
147   c->Divide(2,2);
148   
149   TH1D *h_pt_all = dynamic_cast<TH1D*> (fOutput->FindObject("pt_alltracks"));  
150   TH1D *h_pt_muons = dynamic_cast<TH1D*> (fOutput->FindObject("pt_muontracks"));  
151   c->cd(1);
152   if (h_pt_all) h_pt_all->Draw();
153   c->cd(2);
154   if (h_pt_muons) h_pt_muons->Draw();
155   c->cd(3);
156   if (h_pt_all) h_pt_all->Draw();
157   if (h_pt_muons) h_pt_muons->Draw("same");
158 }
159