4 #include "TLorentzVector.h"
5 #include "TGraphErrors.h"
7 #include "AliAnalysisTask.h"
8 #include "AliAnalysisManager.h"
10 #include "AliESDEvent.h"
11 #include "AliESDInputHandler.h"
12 #include "AliAODEvent.h"
13 #include "AliAODTrack.h"
14 #include "AliAODInputHandler.h"
15 #include "AliMCEventHandler.h"
16 #include "AliMCEvent.h"
19 #include "AliBalance.h"
21 #include "AliAnalysisTaskBF.h"
23 // Analysis task for the BF code
24 // Authors: Panos Cristakoglou@cern.ch
26 ClassImp(AliAnalysisTaskBF)
28 //________________________________________________________________________
29 AliAnalysisTaskBF::AliAnalysisTaskBF(const char *name)
30 : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0), fBalance(0) {
33 // Define input and output slots here
34 // Input slot #0 works with a TChain
35 DefineInput(0, TChain::Class());
36 // Output slot #0 writes into a TH1 container
37 DefineOutput(0, AliBalance::Class());
40 //________________________________________________________________________
41 void AliAnalysisTaskBF::ConnectInputData(Option_t *) {
42 // Connect ESD or AOD here
44 TString gAnalysisLevel = fBalance->GetAnalysisLevel();
46 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
48 Printf("ERROR: Could not read chain from input slot 0");
51 if(gAnalysisLevel == "ESD") {
52 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
55 Printf("ERROR: Could not get ESDInputHandler");
58 fESD = esdH->GetEvent();
60 else if(gAnalysisLevel == "AOD") {
61 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
64 Printf("ERROR: Could not get AODInputHandler");
66 fAOD = aodH->GetEvent();
68 else if(gAnalysisLevel == "MC") {
69 AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
71 Printf("ERROR: Could not retrieve MC event handler");
77 Printf("Wrong analysis type: Only ESD, AOD and MC types are allowed!");
81 //________________________________________________________________________
82 void AliAnalysisTaskBF::CreateOutputObjects() {
88 //________________________________________________________________________
89 void AliAnalysisTaskBF::Exec(Option_t *) {
91 // Called for each event
92 TString gAnalysisLevel = fBalance->GetAnalysisLevel();
94 TObjArray *array = new TObjArray();
97 if(gAnalysisLevel == "ESD") {
99 Printf("ERROR: fESD not available");
103 Printf("There are %d tracks in this event", fESD->GetNumberOfTracks());
104 for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
105 AliESDtrack* track = fESD->GetTrack(iTracks);
107 Printf("ERROR: Could not receive track %d", iTracks);
114 else if(gAnalysisLevel == "AOD") {
116 Printf("ERROR: fAOD not available");
120 Printf("There are %d tracks in this event", fAOD->GetNumberOfTracks());
121 for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
122 AliAODTrack* track = fAOD->GetTrack(iTracks);
124 Printf("ERROR: Could not receive track %d", iTracks);
131 else if(gAnalysisLevel == "MC") {
133 Printf("ERROR: fMC not available");
137 Printf("There are %d tracks in this event", fMC->GetNumberOfPrimaries());
138 for (Int_t iTracks = 0; iTracks < fMC->GetNumberOfPrimaries(); iTracks++) {
139 AliMCParticle* track = dynamic_cast<AliMCParticle *>(fMC->GetTrack(iTracks));
141 Printf("ERROR: Could not receive particle %d", iTracks);
148 fBalance->CalculateBalance(array);
153 PostData(0, fBalance);
156 //________________________________________________________________________
157 void AliAnalysisTaskBF::Terminate(Option_t *) {
158 // Draw result to the screen
159 // Called once at the end of the query
161 fBalance = dynamic_cast<AliBalance*> (GetOutputData(0));
163 Printf("ERROR: fBalance not available");
167 TGraphErrors *gr = fBalance->DrawBalance();
168 gr->SetMarkerStyle(20);
171 fBalance->PrintResults();