2 // Class AliAnalysisTaskMixInfo
4 // AliAnalysisTaskMixInfo is task
8 // Martin Vala (martin.vala@cern.ch)
13 #include "AliAnalysisManager.h"
15 #include "AliMixInputEventHandler.h"
16 #include "AliAnalysisTaskMixInfo.h"
17 #include "AliMixInfo.h"
18 #include "AliMixEventPool.h"
20 ClassImp(AliAnalysisTaskMixInfo)
22 //________________________________________________________________________
23 AliAnalysisTaskMixInfo::AliAnalysisTaskMixInfo(const char *name)
24 : AliAnalysisTaskSE(name),
28 fLogType(AliLog::kInfo),
34 DefineOutput(1, TList::Class());
37 //________________________________________________________________________
38 AliAnalysisTaskMixInfo::~AliAnalysisTaskMixInfo()
43 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
46 //________________________________________________________________________
47 void AliAnalysisTaskMixInfo::UserCreateOutputObjects()
52 SetDebugForAllClasses();
53 fOutputList = new TList();
54 fOutputList->SetOwner(kTRUE);
55 if (!fMixInfo) InitMixInfo();
57 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
58 AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
60 AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
62 AliMixEventPool *evPool = mixEH->GetEventPool();
64 evPool->SetBufferSize(mixEH->BufferSize());
65 evPool->SetMixNumber(mixEH->MixNumber());
66 fMixInfo->SetEventPool(evPool);
71 if (fMixInfo) fOutputList->Add(fMixInfo);
74 PostData(1, fOutputList);
77 //________________________________________________________________________
78 void AliAnalysisTaskMixInfo::UserExec(Option_t *)
81 // Called for each event
82 // if (fCurrentEntry != fCurrentEntryTmp) {
83 // fCurrentEntryTmp = fCurrentEntry;
84 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
85 AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
87 AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
88 if (fMixInfo && mixEH) {
89 if (mixEH->BufferSize() > 1) {
90 if (mixEH->NumberMixedTimes() >= mixEH->BufferSize())
91 fMixInfo->FillHistogram(AliMixInfo::kMainEvents, mixEH->CurrentBinIndex());
93 fMixInfo->FillHistogram(AliMixInfo::kMainEvents, mixEH->CurrentBinIndex());
96 if (mixEH->CurrentEntryMix() >= 0)
97 AliDebug(AliLog::kDebug + 1, Form("Main %lld %d [%lld,%lld] %d", mixEH->CurrentEntry(), mixEH->CurrentBinIndex(), mixEH->CurrentEntryMain(), mixEH->CurrentEntryMix(), mixEH->NumberMixed()));
101 PostData(1, fOutputList);
104 //________________________________________________________________________
105 void AliAnalysisTaskMixInfo::UserExecMix(Option_t *)
108 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
109 AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
111 AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
113 if (fMixInfo) fMixInfo->FillHistogram(AliMixInfo::kMixedEvents, mixEH->CurrentBinIndex());
114 if (mixEH->CurrentEntryMix() < 0) {
115 AliError("Mix entry is -1 and it should not happen !!!!!");
118 AliDebug(AliLog::kDebug, Form("Mixing %lld %d [%lld,%lld] %d", mixEH->CurrentEntry(), mixEH->CurrentBinIndex(), mixEH->CurrentEntryMain(), mixEH->CurrentEntryMix(), mixEH->NumberMixed()));
121 PostData(1, fOutputList);
124 //________________________________________________________________________
125 void AliAnalysisTaskMixInfo::FinishTaskOutput()
128 if (fMixInfo) fMixInfo->Print();
132 //________________________________________________________________________
133 void AliAnalysisTaskMixInfo::Terminate(Option_t *)
135 // Draw result to the screen
136 // Called once at the end of the query
137 fOutputList = dynamic_cast<TList *>(GetOutputData(1));
139 AliError("fOutputList not available");
142 fOutputList->Print();
143 fMixInfo = (AliMixInfo *) fOutputList->FindObject("mixInfo");
145 fMixInfo->Draw("HIST");
146 AliMixEventPool *evPool = (AliMixEventPool *) fMixInfo->GetEventPool("mixEventPool");
147 if (evPool) evPool->Print();
151 //_____________________________________________________________________________
152 void AliAnalysisTaskMixInfo::SetLogType(AliLog::EType_t type, TString allClasses)
155 // Set Log level for this and other classes (list of their names)
157 AliDebug(AliLog::kDebug + 10, "<-");
159 fLogClassesString = allClasses;
160 SetDebugForAllClasses();
161 AliDebug(AliLog::kDebug + 10, "->");
164 //_____________________________________________________________________________
165 void AliAnalysisTaskMixInfo::SetDebugForAllClasses()
168 // Set debug level for all classes for which it is required
170 AliDebug(AliLog::kDebug + 10, "<-");
171 TObjArray *array = fLogClassesString.Tokenize(":");
174 for (Int_t i = 0; i < array->GetEntriesFast(); i++) {
175 str = (TObjString *) array->At(i);
176 strr = str->GetString();
177 AliLog::SetClassDebugLevel(strr.Data(), fLogType);
178 AliDebug(AliLog::kDebug + 5, Form("Setting Debug level %d to %s ...", (Int_t)fLogType - AliLog::kDebug, strr.Data()));
180 AliDebug(AliLog::kDebug + 10, "->");
184 void AliAnalysisTaskMixInfo::InitMixInfo()
189 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
190 AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
192 // AliMixEventInputHandler *mixEH = dynamic_cast<AliMixEventInputHandler *>(inEvHMain->MixingHandler());
193 AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
195 fMixInfo = new AliMixInfo("mixInfo", "Mix title");
196 // if(fMixInfo) fMixInfo->SetOutputList(fOutputList);
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");