72fc2a332be196976f56ee190a70b6e59d4b293c
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskPt.cxx
1 #include "TChain.h"
2 #include "TTree.h"
3 #include "TH1F.h"
4 #include "TCanvas.h"
5 #include "TObjArray.h"
6
7 #include "AliAnalysisTask.h"
8 #include "AliAnalysisManager.h"
9
10 #include "AliESDEvent.h"
11 #include "AliVVevent.h"
12 #include "AliVVtrack.h"
13 #include "AliESDtrackCuts.h"
14 #include "AliVEventHandler.h"
15
16 #include "AliAnalysisTaskPt.h"
17
18 // example of an analysis task creating a p_t spectrum
19 // Authors: Panos Cristakoglou, Jan Fiete Grosse-Oetringhaus, Christian Klein-Boesing
20
21 ClassImp(AliAnalysisTaskPt)
22
23 //________________________________________________________________________
24 AliAnalysisTaskPt::AliAnalysisTaskPt(const char *name) 
25 : AliAnalysisTask(name, ""), fESD(0), fHistPt(0), fCuts(0), fEv(0)
26 {
27   // Constructor
28
29   // Define input and output slots here
30   // Input slot #0 works with a TChain
31   DefineInput(0, TChain::Class());
32   // Output slot #0 writes into a TH1 container
33   DefineOutput(0, TH1F::Class());
34 }
35
36 //________________________________________________________________________
37 void AliAnalysisTaskPt::ConnectInputData(Option_t *) 
38 {
39   // Connect ESD or AOD here
40   // Called once
41
42   printf("----> AliAnalysisTaskPt::ConnectInputData\n");
43   TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
44   if (!tree) {
45     Printf("ERROR: Could not read chain from input slot 0");
46   } else {
47     // Disable all branches and enable only the needed ones
48     // The next two lines are different when data produced as AliESDEvent is read
49     /*
50     tree->SetBranchStatus("*", kFALSE);
51     tree->SetBranchStatus("fTracks.*", kTRUE);
52     */
53
54     AliVEventHandler *esdH = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
55
56     if (!esdH) {
57       Printf("ERROR: Could not get ESDInputHandler");
58     } else {
59       Printf("----> AliAnalysisTaskPt::ConnectInputData Getting the event from handler %p", esdH);
60       //fESD = dynamic_cast<AliESDEvent*>(esdH->GetEvent());
61       fESD = esdH->GetEvent();
62     }
63     if (!fESD) {
64       Printf("ERROR, the dynamic cast did not work");
65     }
66   }
67
68   Printf("fESD = %p", fESD);
69   printf("<---- AliAnalysisTaskPt::ConnectInputData\n");
70 }
71
72 //________________________________________________________________________
73 void AliAnalysisTaskPt::CreateOutputObjects()
74 {
75   // Create histograms
76   // Called once
77
78
79   fHistPt = new TH1F("fHistPt", "P_{T} distribution", 15, 0.1, 3.1);
80   fHistPt->GetXaxis()->SetTitle("P_{T} (GeV/c)");
81   fHistPt->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");
82   fHistPt->SetMarkerStyle(kFullCircle);
83
84   fCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(1);
85   PostData(0, fHistPt);
86 }
87
88 //________________________________________________________________________
89 void AliAnalysisTaskPt::Exec(Option_t *) 
90 {
91   // Main loop
92   // Called for each event
93
94   if (!fESD) {
95     Printf("ERROR: fESD not available");
96     return;
97   }
98
99   Printf("There are %d tracks in this event", fESD->GetNumberOfTracks());
100
101   // Track loop to fill a pT spectrum
102   for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
103     AliVVtrack* track = fESD->GetTrack(iTracks);
104     if (!track) {
105       Printf("ERROR: Could not receive track %d", iTracks);
106       continue;
107     }
108
109     fHistPt->Fill(track->Pt());
110   } //track loop 
111
112   // Post output data.
113   PostData(0, fHistPt);
114   fEv++;
115 }      
116
117 //________________________________________________________________________
118 void AliAnalysisTaskPt::Terminate(Option_t *) 
119 {
120   // Draw result to the screen
121   // Called once at the end of the query
122
123   Printf("Terminate called: fESD = %p", fESD);
124
125   fHistPt = dynamic_cast<TH1F*> (GetOutputData(0));
126   if (!fHistPt) {
127     Printf("ERROR: fHistPt not available");
128     return;
129   }
130    
131   TCanvas *c1 = new TCanvas("AliAnalysisTaskPt","Pt",10,10,510,510);
132   c1->cd(1)->SetLogy();
133   fHistPt->DrawCopy("E");
134 }