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 "AliAODInputHandler.h"
14 #include "AliMCEventHandler.h"
15 #include "AliMCEvent.h"
18 #include "AliBalance.h"
20 #include "AliAnalysisTaskBF.h"
22 // Analysis task for the BF code
23 // Authors: Panos Cristakoglou@cern.ch
25 ClassImp(AliAnalysisTaskBF)
27 //________________________________________________________________________
28 AliAnalysisTaskBF::AliAnalysisTaskBF(const char *name)
29 : AliAnalysisTask(name, ""), fESD(0), fAOD(0), fMC(0), fBalance(0) {
32 // Define input and output slots here
33 // Input slot #0 works with a TChain
34 DefineInput(0, TChain::Class());
35 // Output slot #0 writes into a TH1 container
36 DefineOutput(0, AliBalance::Class());
39 //________________________________________________________________________
40 void AliAnalysisTaskBF::ConnectInputData(Option_t *) {
41 // Connect ESD or AOD here
43 TString gAnalysisLevel = fBalance->GetAnalysisLevel();
45 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
47 Printf("ERROR: Could not read chain from input slot 0");
50 if(gAnalysisLevel == "ESD") {
51 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
54 Printf("ERROR: Could not get ESDInputHandler");
57 fESD = esdH->GetEvent();
59 else if(gAnalysisLevel == "AOD") {
60 AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
63 Printf("ERROR: Could not get AODInputHandler");
65 fAOD = aodH->GetEvent();
67 else if(gAnalysisLevel == "MC") {
68 AliMCEventHandler* mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
70 Printf("ERROR: Could not retrieve MC event handler");
76 Printf("Wrong analysis type: Only ESD, AOD and MC types are allowed!");
80 //________________________________________________________________________
81 void AliAnalysisTaskBF::CreateOutputObjects() {
87 //________________________________________________________________________
88 void AliAnalysisTaskBF::Exec(Option_t *) {
90 // Called for each event
91 TString gAnalysisLevel = fBalance->GetAnalysisLevel();
93 TObjArray *array = new TObjArray();
96 if(gAnalysisLevel == "ESD") {
98 Printf("ERROR: fESD not available");
102 Printf("There are %d tracks in this event", fESD->GetNumberOfTracks());
103 for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
104 AliESDtrack* track = fESD->GetTrack(iTracks);
106 Printf("ERROR: Could not receive track %d", iTracks);
113 else if(gAnalysisLevel == "AOD") {
115 Printf("ERROR: fAOD not available");
119 Printf("There are %d tracks in this event", fAOD->GetNumberOfTracks());
120 for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
121 AliAODtrack* track = fAOD->GetTrack(iTracks);
123 Printf("ERROR: Could not receive track %d", iTracks);
130 else if(gAnalysisLevel == "MC") {
132 Printf("ERROR: fMC not available");
136 Printf("There are %d tracks in this event", fMC->GetNumberOfPrimaries());
137 for (Int_t iTracks = 0; iTracks < fMC->GetNumberOfPrimaries(); iTracks++) {
138 AliMCParticle* track = fMC->GetTrack(iTracks);
140 Printf("ERROR: Could not receive particle %d", iTracks);
147 fBalance->CalculateBalance(array);
152 PostData(0, fBalance);
155 //________________________________________________________________________
156 void AliAnalysisTaskBF::Terminate(Option_t *) {
157 // Draw result to the screen
158 // Called once at the end of the query
160 fBalance = dynamic_cast<AliBalance*> (GetOutputData(0));
162 Printf("ERROR: fBalance not available");
166 TGraphErrors *gr = fBalance->DrawBalance();
167 gr->SetMarkerStyle(20);
170 fBalance->PrintResults();