Missed a log message on last commit.
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskME.cxx
CommitLineData
b81460ad 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18#include <TROOT.h>
19#include <TSystem.h>
20#include <TInterpreter.h>
21#include <TChain.h>
22#include <TFile.h>
23#include <TList.h>
24
25#include "AliAnalysisTaskME.h"
26#include "AliAnalysisManager.h"
27#include "AliAODEvent.h"
cd17c2ba 28#include "AliVEvent.h"
b81460ad 29#include "AliAODHandler.h"
cd17c2ba 30#include "AliMultiEventInputHandler.h"
b81460ad 31#include "AliLog.h"
32
33
34ClassImp(AliAnalysisTaskME)
35
36////////////////////////////////////////////////////////////////////////
37
38AliAnalysisTaskME::AliAnalysisTaskME():
39 AliAnalysisTask(),
40 fDebug(0),
41 fEntry(0),
42 fFreshBufferOnly(kFALSE),
43 fInputHandler(0x0),
44 fOutputAOD(0x0),
45 fTreeA(0x0)
46{
47 // Default constructor
48}
49
50AliAnalysisTaskME::AliAnalysisTaskME(const char* name):
51 AliAnalysisTask(name, "AnalysisTaskME"),
52 fDebug(0),
53 fEntry(0),
54 fFreshBufferOnly(kFALSE),
55 fInputHandler(0x0),
56 fOutputAOD(0x0),
57 fTreeA(0x0)
58{
59 // Default constructor
60 DefineInput (0, TChain::Class());
61 DefineOutput(0, TTree::Class());
62}
63
64AliAnalysisTaskME::AliAnalysisTaskME(const AliAnalysisTaskME& obj):
65 AliAnalysisTask(obj),
66 fDebug(0),
67 fEntry(0),
68 fFreshBufferOnly(kFALSE),
69 fInputHandler(0x0),
70 fOutputAOD(0x0),
71 fTreeA(0x0)
72{
73// Copy constructor
74 fDebug = obj.fDebug;
75 fEntry = obj.fEntry;
76 fInputHandler = obj.fInputHandler;
77 fOutputAOD = obj.fOutputAOD;
78 fTreeA = obj.fTreeA;
79}
80
81
82AliAnalysisTaskME& AliAnalysisTaskME::operator=(const AliAnalysisTaskME& other)
83{
84// Assignment
85 AliAnalysisTask::operator=(other);
86 fDebug = other.fDebug;
87 fEntry = other.fEntry;
88 fFreshBufferOnly = other.fFreshBufferOnly;
89 fInputHandler = other.fInputHandler;
90 fOutputAOD = other.fOutputAOD;
91 fTreeA = other.fTreeA;
92 return *this;
93}
94
95
96void AliAnalysisTaskME::ConnectInputData(Option_t* /*option*/)
97{
98// Connect the input data
99 if (fDebug > 1) printf("AnalysisTaskME::ConnectInputData() \n");
100//
101// Multi AOD
102//
cd17c2ba 103 fInputHandler = dynamic_cast<AliMultiEventInputHandler*>
b81460ad 104 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
94d4e23c 105 if (fInputHandler == 0) {
cd17c2ba 106 AliFatal("Event Handler has to be MultiEventInputHandler !");
94d4e23c 107 } else {
108 // Check that we have an event pool
109 if (!fInputHandler->GetEventPool()) {
110 fInputHandler->SetEventPool(AliAnalysisManager::GetAnalysisManager()->GetEventPool());
111 if (!fInputHandler->GetEventPool())
cd17c2ba 112 AliFatal("MultiEventInputHandler has no EventPool connected !");
94d4e23c 113 }
114 }
b81460ad 115}
116
117void AliAnalysisTaskME::CreateOutputObjects()
118{
119// Create the output container
120//
121// Default AOD
122 if (fDebug > 1) printf("AnalysisTaskME::CreateOutPutData() \n");
123
124 AliAODHandler* handler = (AliAODHandler*)
125 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
126
127 if (handler) {
128 fOutputAOD = handler->GetAOD();
129 fTreeA = handler->GetTree();
130 } else {
131 AliWarning("No AOD Event Handler connected.") ;
132 }
133 UserCreateOutputObjects();
134}
135
136void AliAnalysisTaskME::Exec(Option_t* option)
137{
138//
139// Exec analysis of one event
e7d9460a 140
b81460ad 141 if (fDebug > 1) AliInfo("AliAnalysisTaskME::Exec() \n");
142 if( fInputHandler )
143 fEntry = fInputHandler->GetReadEntry();
144 if ( !((Entry()-1)%100) && fDebug > 0)
145 AliInfo(Form("%s ----> Processing event # %lld", CurrentFileName(), Entry()));
15917707 146
147 AliAODHandler* outputHandler = (AliAODHandler*)
148 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
b81460ad 149// Call the user analysis
150 if (fInputHandler->IsBufferReady()) {
151 if ((fFreshBufferOnly && fInputHandler->IsFreshBuffer()) || !fFreshBufferOnly)
152 {
cd17c2ba 153 if (outputHandler) outputHandler->SetFillAOD(kTRUE);
b81460ad 154 UserExec(option);
155 PostData(0, fTreeA);
15917707 156 } else {
cd17c2ba 157 if (outputHandler) outputHandler->SetFillAOD(kFALSE);
b81460ad 158 }
e7d9460a 159 } else {
160 AliInfo(Form("Waiting for buffer to be ready !\n"));
b81460ad 161 }
162}
163
164const char* AliAnalysisTaskME::CurrentFileName()
165{
166// Returns the current file name
167 if(fInputHandler )
168 return fInputHandler->GetTree()->GetCurrentFile()->GetName();
169 else return "";
170}
171
c8fe2783 172void AliAnalysisTaskME::AddAODBranch(const char* cname, void* addobj, const char *fname)
b81460ad 173{
174 // Add a new branch to the aod tree
175 AliAODHandler* handler = (AliAODHandler*)
176 ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
177 if (handler) {
c8fe2783 178 handler->AddBranch(cname, addobj, fname);
b81460ad 179 }
180}
181
cd17c2ba 182AliVEvent* AliAnalysisTaskME::GetEvent(Int_t iev)
b81460ad 183{
184 // Get an event from the input handler
185 return (fInputHandler->GetEvent(iev));
186}
187