2 // Class AliAnalysisTaskMixInfo
4 // AliAnalysisTaskMixInfo is task
8 // Martin Vala (martin.vala@cern.ch)
12 #include <TObjString.h>
14 #include "AliAnalysisManager.h"
16 #include "AliMixInputEventHandler.h"
17 #include "AliAnalysisTaskMixInfo.h"
18 #include "AliMixInfo.h"
19 #include "AliMixEventPool.h"
22 ClassImp(AliAnalysisTaskMixInfo)
24 //________________________________________________________________________
25 AliAnalysisTaskMixInfo::AliAnalysisTaskMixInfo(const char *name)
26 : AliAnalysisTaskSE(name),
30 fLogType(AliLog::kInfo),
36 DefineOutput(1, TList::Class());
39 //________________________________________________________________________
40 AliAnalysisTaskMixInfo::~AliAnalysisTaskMixInfo()
45 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
48 //________________________________________________________________________
49 void AliAnalysisTaskMixInfo::UserCreateOutputObjects()
54 SetDebugForAllClasses();
55 fOutputList = new TList();
56 fOutputList->SetOwner(kTRUE);
57 if (!fMixInfo) InitMixInfo();
59 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
60 AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
62 AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
64 AliMixEventPool *evPool = mixEH->GetEventPool();
66 evPool->SetBufferSize(mixEH->BufferSize());
67 evPool->SetMixNumber(mixEH->MixNumber());
68 fMixInfo->SetEventPool(evPool);
73 if (fMixInfo) fOutputList->Add(fMixInfo);
76 PostData(1, fOutputList);
79 //________________________________________________________________________
80 void AliAnalysisTaskMixInfo::UserExec(Option_t *)
83 // Called for each event
84 // if (fCurrentEntry != fCurrentEntryTmp) {
85 // fCurrentEntryTmp = fCurrentEntry;
86 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
87 AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
89 AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
90 if (fMixInfo && mixEH) {
91 if (mixEH->BufferSize() > 1) {
92 if (mixEH->NumberMixedTimes() >= mixEH->BufferSize())
93 fMixInfo->FillHistogram(AliMixInfo::kMainEvents, mixEH->CurrentBinIndex());
95 fMixInfo->FillHistogram(AliMixInfo::kMainEvents, mixEH->CurrentBinIndex());
98 // if (mixEH->CurrentEntryMix() >= 0)
99 AliDebug(AliLog::kDebug + 1, Form("Main %lld %d [%lld,%lld] %d", mixEH->CurrentEntry(), mixEH->CurrentBinIndex(), mixEH->CurrentEntryMain(), mixEH->CurrentEntryMix(), mixEH->NumberMixed()));
103 PostData(1, fOutputList);
106 //________________________________________________________________________
107 void AliAnalysisTaskMixInfo::UserExecMix(Option_t *)
110 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
111 AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
113 AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
115 if (fMixInfo) fMixInfo->FillHistogram(AliMixInfo::kMixedEvents, mixEH->CurrentBinIndex());
116 if (mixEH->CurrentEntryMix() < 0) {
117 AliError("Mix entry is -1 and it should not happen !!!!!");
120 AliDebug(AliLog::kDebug, Form("Mixing %lld %d [%lld,%lld] %d", mixEH->CurrentEntry(), mixEH->CurrentBinIndex(), mixEH->CurrentEntryMain(), mixEH->CurrentEntryMix(), mixEH->NumberMixed()));
123 PostData(1, fOutputList);
126 //________________________________________________________________________
127 void AliAnalysisTaskMixInfo::FinishTaskOutput()
130 if (fMixInfo) fMixInfo->Print();
134 //________________________________________________________________________
135 void AliAnalysisTaskMixInfo::Terminate(Option_t *)
137 // Draw result to the screen
138 // Called once at the end of the query
139 fOutputList = dynamic_cast<TList *>(GetOutputData(1));
141 AliError("fOutputList not available");
144 fOutputList->Print();
145 fMixInfo = (AliMixInfo *) fOutputList->FindObject("mixInfo");
147 fMixInfo->Draw("HIST");
148 AliMixEventPool *evPool = (AliMixEventPool *) fMixInfo->GetEventPool("mixEventPool");
149 if (evPool) evPool->Print();
153 //_____________________________________________________________________________
154 void AliAnalysisTaskMixInfo::SetLogType(AliLog::EType_t type, TString allClasses)
157 // Set Log level for this and other classes (list of their names)
159 AliDebug(AliLog::kDebug + 10, "<-");
161 fLogClassesString = allClasses;
162 SetDebugForAllClasses();
163 AliDebug(AliLog::kDebug + 10, "->");
166 //_____________________________________________________________________________
167 void AliAnalysisTaskMixInfo::SetDebugForAllClasses()
170 // Set debug level for all classes for which it is required
172 AliDebug(AliLog::kDebug + 10, "<-");
173 TObjArray *array = fLogClassesString.Tokenize(":");
176 for (Int_t i = 0; i < array->GetEntriesFast(); i++) {
177 str = (TObjString *) array->At(i);
178 strr = str->GetString();
179 AliLog::SetClassDebugLevel(strr.Data(), fLogType);
180 AliDebug(AliLog::kDebug + 5, Form("Setting Debug level %d to %s ...", (Int_t)fLogType - AliLog::kDebug, strr.Data()));
182 AliDebug(AliLog::kDebug + 10, "->");
186 void AliAnalysisTaskMixInfo::InitMixInfo()
191 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
192 AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
194 AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
196 fMixInfo = new AliMixInfo("mixInfo", "Mix title");
197 AliMixEventPool *evPool = mixEH->GetEventPool();
199 // TList *list = new TList;
200 if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMainEvents, 1, 1, 2);
201 if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMixedEvents, 1, 1, 2);
203 if (evPool->NeedInit()) evPool->Init();
204 Int_t num = evPool->GetListOfEntryLists()->GetEntriesFast();
205 if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMainEvents, num, 1, num + 1);
206 if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMixedEvents, num, 1, num + 1);
209 AliError("No mixEH");
212 AliError("No inEvHMain");