2 // Class AliRsnVAnalysisTaskME
4 // Virtual Class derivated from AliAnalysisTaskME which will be base class
5 // for all RSN ME tasks
7 // authors: Martin Vala (martin.vala@cern.ch)
8 // Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
13 #include "AliESDEvent.h"
14 #include "AliMCEvent.h"
15 #include "AliAODEvent.h"
16 #include "AliAODTrack.h"
17 #include "AliMultiEventInputHandler.h"
18 #include "AliRsnVAnalysisTaskME.h"
20 ClassImp(AliRsnVAnalysisTaskME)
22 //_____________________________________________________________________________
23 AliRsnVAnalysisTaskME::AliRsnVAnalysisTaskME(const char *name, Int_t numOfOutputs) :
24 AliAnalysisTaskME(name),
25 fLogType(AliLog::kInfo),
26 fLogClassesString(""),
30 fNumberOfOutputs(numOfOutputs),
34 // Default constructor
36 AliDebug(AliLog::kDebug+2,"<-");
38 if (fNumberOfOutputs < 0) fNumberOfOutputs = 0;
39 if (fNumberOfOutputs > kMaxNumberOfOutputs) {
40 AliWarning(Form("We support only %d outputs. If you need more ask for it.", kMaxNumberOfOutputs));
41 AliWarning(Form("For now we are setting it to %d.", kMaxNumberOfOutputs));
42 fNumberOfOutputs = kMaxNumberOfOutputs;
45 DefineOutput(1, TList::Class());
47 AliDebug(AliLog::kDebug+2,"->");
50 AliRsnVAnalysisTaskME::AliRsnVAnalysisTaskME(const AliRsnVAnalysisTaskME& copy) : AliAnalysisTaskME(copy),
51 fLogType(copy.fLogType),
52 fLogClassesString(copy.fLogClassesString),
53 fESDEvent(copy.fESDEvent),
54 fMCEvent(copy.fMCEvent),
55 fAODEvent(copy.fAODEvent),
56 fTaskInfo(copy.fTaskInfo)
58 AliDebug(AliLog::kDebug+2,"<-");
59 AliDebug(AliLog::kDebug+2,"->");
62 //_____________________________________________________________________________
63 void AliRsnVAnalysisTaskME::LocalInit()
69 SetDebugForAllClasses();
70 AliDebug(AliLog::kDebug+2,"<-");
71 AliAnalysisTaskME::LocalInit();
72 AliDebug(AliLog::kDebug+2,"->");
75 //_____________________________________________________________________________
76 Bool_t AliRsnVAnalysisTaskME::Notify()
82 AliDebug(AliLog::kDebug+2,"<-");
83 if (!AliAnalysisTaskME::Notify()) return kFALSE;
84 AliDebug(AliLog::kDebug+2,"->");
90 //_____________________________________________________________________________
91 void AliRsnVAnalysisTaskME::ConnectInputData(Option_t *opt)
97 SetDebugForAllClasses();
99 AliDebug(AliLog::kDebug+2,"<-");
101 AliAnalysisTaskME::ConnectInputData(opt);
103 AliDebug(AliLog::kDebug+2,"->");
106 //_____________________________________________________________________________
107 void AliRsnVAnalysisTaskME::RsnUserCreateOutputObjects()
110 // Rsn User Create Output Objects
113 AliDebug(AliLog::kDebug+2,"<-");
115 AliDebug(AliLog::kDebug+2,"->");
119 //_____________________________________________________________________________
120 void AliRsnVAnalysisTaskME::UserCreateOutputObjects()
123 // User Create Output Objects
126 SetDebugForAllClasses();
128 AliDebug(AliLog::kDebug+2,"<-");
130 fOutList[0] = new TList();
131 fOutList[0]->SetOwner();
132 fTaskInfo.GenerateInfoList(fOutList[0]);
133 RsnUserCreateOutputObjects();
135 AliDebug(AliLog::kDebug+2,"<-");
138 //_____________________________________________________________________________
139 void AliRsnVAnalysisTaskME::UserExec(Option_t* opt)
145 AliDebug(AliLog::kDebug+2,"<-");
151 fTaskInfo.PrintInfo(fEntry);
153 PostData(1, fOutList[0]);
155 AliDebug(AliLog::kDebug+2,"->");
158 //_____________________________________________________________________________
159 void AliRsnVAnalysisTaskME::RsnUserExec(Option_t*)
165 AliDebug(AliLog::kDebug+2,"<-");
167 if (!CheckAndPrintEvents()) return;
169 AliDebug(AliLog::kDebug+2,"->");
172 //_____________________________________________________________________________
173 Bool_t AliRsnVAnalysisTaskME::CheckAndPrintEvents()
176 // Check for supported events
177 // return false in the case of unkown format
178 // or number of events is less or equal 1
181 AliInfo(Form("Current Entry %d", Entry()));
182 Int_t nEvents = fInputHandler->GetBufferSize();
183 if (nEvents <= 1) return kFALSE;
184 fESDEvent = dynamic_cast<AliESDEvent*>(GetEvent(0));
185 fAODEvent = dynamic_cast<AliAODEvent*>(GetEvent(0));
188 AliESDEvent **allESDEvents = new AliESDEvent*[nEvents];
189 for (Int_t i = 0; i < nEvents; i++) {
190 allESDEvents[i] = dynamic_cast<AliESDEvent*>(GetEvent(i));
191 if (!allESDEvents[i]) {
192 AliWarning(Form("Null ESD event in index %d", i));
195 AliDebug(AliLog::kDebug, Form("ESD event %d has %d tracks", i, allESDEvents[i]->GetNumberOfTracks()));
197 delete [] allESDEvents;
198 } else if (fAODEvent) {
199 AliAODEvent **allAODEvents = new AliAODEvent*[nEvents];
200 for (Int_t i = 0; i < nEvents; i++) {
201 allAODEvents[i] = dynamic_cast<AliAODEvent*>(GetEvent(i));
202 if (!allAODEvents[i]) {
203 AliWarning(Form("Null AOD event in index %d", i));
206 AliDebug(AliLog::kDebug, Form("AOD event %d has %d tracks", i, allAODEvents[i]->GetNumberOfTracks()));
208 delete [] allAODEvents;
210 AliWarning("Unknown input format");
217 //_____________________________________________________________________________
218 void AliRsnVAnalysisTaskME::Terminate(Option_t* opt)
224 AliDebug(AliLog::kDebug+2,"<-");
225 AliAnalysisTask::Terminate();
227 fOutList[0] = dynamic_cast<TList*>(GetOutputData(1));
229 AliError(Form("At end of analysis, fOutList is %p", fOutList));
235 TH1I *hEventInfo = (TH1I*) fOutList[0]->FindObject(fTaskInfo.GetEventHistogramName());
237 AliError(Form("hEventInfo is %p", hEventInfo));
241 AliInfo(Form("=== %s ==================", GetName()));
242 AliInfo(Form("Number Of Events Processed : %10d", (Long64_t)hEventInfo->Integral()));
243 AliInfo(Form("Number Of Events Accepted : %10d", (Long64_t)hEventInfo->GetBinContent(2)));
244 AliInfo(Form("Number Of Events Skipped : %10d", (Long64_t)hEventInfo->GetBinContent(1)));
245 AliInfo(Form("=== end %s ==============", GetName()));
247 AliDebug(AliLog::kDebug+2,"->");
250 //_____________________________________________________________________________
251 void AliRsnVAnalysisTaskME::RsnTerminate(Option_t*)
257 AliDebug(AliLog::kDebug+2,"<-");
258 AliDebug(AliLog::kDebug+2,"->");
261 //_____________________________________________________________________________
262 void AliRsnVAnalysisTaskME::FillInfo()
268 fTaskInfo.FillInfo();
271 //_____________________________________________________________________________
272 void AliRsnVAnalysisTaskME::SetLogType(AliLog::EType_t type, TString allClasses)
278 AliDebug(AliLog::kDebug+2,"<-");
280 fLogClassesString = allClasses;
281 AliDebug(AliLog::kDebug+2,"->");
283 //_____________________________________________________________________________
284 void AliRsnVAnalysisTaskME::SetDebugForAllClasses()
287 // Set Debug For All Classes
290 AliDebug(AliLog::kDebug+2,"<-");
291 TObjArray* array = fLogClassesString.Tokenize(":");
294 for (Int_t i = 0;i < array->GetEntriesFast();i++) {
295 str = (TObjString *) array->At(i);
296 strr = str->GetString();
297 AliLog::SetClassDebugLevel(strr.Data(), fLogType);
298 AliInfo(Form("Setting Debug to %s", strr.Data()));
300 AliDebug(AliLog::kDebug+2,"->");