fNumberMixed(0),
fMixNumber(mixNum),
fUseDefautProcess(kFALSE),
- fUsePreMixEvents(kTRUE),
+ fDoMixExtra(kTRUE),
+ fDoMixIfNotEnoughEvents(kTRUE),
fCurrentEntry(0),
fCurrentEntryMain(0),
fCurrentEntryMix(0),
- fCurrentBinIndex(-1)
+ fCurrentBinIndex(-1),
+ fOfflineTriggerMask(0)
{
//
// Default constructor.
AliDebug(AliLog::kDebug + 10, "->");
}
-//_____________________________________________________________________________
-AliInputEventHandler *AliMixInputEventHandler::InputEventHandler(const Int_t index)
-{
- //
- // Returns input handler
- //
- AliDebug(AliLog::kDebug + 5, Form("<-"));
- if ((index >= 0) && (index < fBufferSize)) {
- AliMultiInputEventHandler *eh = dynamic_cast<AliMultiInputEventHandler *>(fInputHandlers.At(index));
- if (eh)
- return (AliInputEventHandler *) eh;
-// return (AliInputEventHandler *) eh->InputEventHandler(0);
- else
- return (AliInputEventHandler *) fInputHandlers.At(index);
- }
- AliDebug(AliLog::kDebug + 5, Form("->"));
- return 0;
-}
//_____________________________________________________________________________
void AliMixInputEventHandler::SetInputHandlerForMixing(const AliInputEventHandler *const inHandler)
{
AliDebug(AliLog::kDebug + 5, Form("Adding %d ...", i));
fInputHandlers.Add((AliInputEventHandler *) inHandler->Clone());
}
+
AliDebug(AliLog::kDebug + 5, Form("->"));
}
AliDebug(AliLog::kDebug + 5, Form("->"));
return kFALSE;
}
+
+ if (!fDoMixIfNotEnoughEvents) {
+ fDoMixExtra = kFALSE;
+ AliWarning("fDoMixIfNotEnoughEvents=kTRUE -> setting fDoMixExtra=kFALSE");
+ }
+
// clears array of input handlers
fMixTrees.Clear();
// create AliMixInputHandlerInfo
tree->LoadTree(0);
fMixIntupHandlerInfoTmp = new AliMixInputHandlerInfo(tree->GetName());
}
- // moved to Notify
-// // adds current file
-// fMixIntupHandlerInfoTmp->AddTreeToChain(tree->GetTree());
-// Int_t lastIndex = fMixIntupHandlerInfoTmp->GetChain()->GetListOfFiles()->GetEntries();
-// TChainElement *che = (TChainElement *)fMixIntupHandlerInfoTmp->GetChain()->GetListOfFiles()->At(lastIndex - 1);
-// AliMixInputHandlerInfo *mixIHI = 0;
-// for(Int_t i = 0; i < fInputHandlers.GetEntries(); i++) {
-// AliDebug(AliLog::kDebug+5, Form("fInputHandlers[%d]", i));
-// mixIHI = new AliMixInputHandlerInfo(fMixIntupHandlerInfoTmp->GetName(), fMixIntupHandlerInfoTmp->GetTitle());
-// mixIHI->PrepareEntry(che, -1, InputEventHandler(i),fAnalysisType);
-// AliDebug(AliLog::kDebug+5, Form("chain[%d]->GetEntries() = %lld", i, mixIHI->GetChain()->GetEntries()));
-// fMixTrees.Add(mixIHI);
-// }
-// AliDebug(AliLog::kDebug+5, Form("fEntryCounter=%lld", fEntryCounter));
-// if(fEventPool && fEventPool->NeedInit())
-// fEventPool->Init();
+
+ AliInputEventHandler *ih = 0;
+ for (Int_t i = 0; i < fInputHandlers.GetEntries(); i++) {
+ ih = (AliInputEventHandler *) fInputHandlers.At(i);
+ ih->SetParentHandler(this);
+// ih->Init(tree,opt);
+ }
+
AliDebug(AliLog::kDebug + 5, Form("->"));
return kTRUE;
}
for (Int_t i = 0; i < fInputHandlers.GetEntries(); i++) {
AliDebug(AliLog::kDebug + 5, Form("fInputHandlers[%d]", i));
mixIHI = new AliMixInputHandlerInfo(fMixIntupHandlerInfoTmp->GetName(), fMixIntupHandlerInfoTmp->GetTitle());
- mixIHI->PrepareEntry(che, -1, InputEventHandler(i), fAnalysisType);
+ mixIHI->PrepareEntry(che, -1, (AliInputEventHandler*)InputEventHandler(i), fAnalysisType);
AliDebug(AliLog::kDebug + 5, Form("chain[%d]->GetEntries() = %lld", i, mixIHI->GetChain()->GetEntries()));
fMixTrees.Add(mixIHI);
}
// All mixed events are set
//
AliDebug(AliLog::kDebug + 5, Form("<-"));
- // if no event pool MixStd
-// if (fEventPool && fEventPool->NeedInit()) fEventPool->Init();
+
if (!fEventPool) {
MixStd();
}
} else {
AliWarning("Not supported Mixing !!!");
}
+
AliDebug(AliLog::kDebug + 5, Form("->"));
return kTRUE;
}
if (mh) inEvHMain = dynamic_cast<AliInputEventHandler *>(mh->GetFirstInputEventHandler());
else inEvHMain = dynamic_cast<AliInputEventHandler *>(mgr->GetInputEventHandler());
if (!inEvHMain) return kFALSE;
+
+ // check for PhysSelection
+ if (!IsEventCurrentSelected()) return kFALSE;
+
// return in case of 0 entry in full chain
if (!fEntryCounter) {
AliDebug(AliLog::kDebug + 3, Form("-> fEntryCounter == 0"));
}
// pre mix evetns
Int_t mixNum = fMixNumber;
- if (fUsePreMixEvents) {
+ if (fDoMixExtra) {
if (fEntryCounter <= 2 * fMixNumber) mixNum = 2 * fMixNumber + 2;
}
// start of
if (!te) {
AliError("te is null. this is error. tell to developer (#1)")
} else {
- mihi->PrepareEntry(te, entryMix, InputEventHandler(0), fAnalysisType);
+ mihi->PrepareEntry(te, entryMix, (AliInputEventHandler*)InputEventHandler(0), fAnalysisType);
// runs UserExecMix for all tasks
fNumberMixed++;
UserExecMixAllTasks(fEntryCounter, 1, fEntryCounter, entryMixReal, fNumberMixed);
if (mh) inEvHMain = dynamic_cast<AliInputEventHandler *>(mh->GetFirstInputEventHandler());
else inEvHMain = dynamic_cast<AliInputEventHandler *>(mgr->GetInputEventHandler());
if (!inEvHMain) return kFALSE;
+
+ // check for PhysSelection
+ if (!IsEventCurrentSelected()) return kFALSE;
+
// find out zero chain entries
Long64_t zeroChainEntries = fMixIntupHandlerInfoTmp->GetChain()->GetEntries() - inEvHMain->GetTree()->GetTree()->GetEntries();
// fill entry
if (!fEntryCounter) {
AliDebug(AliLog::kDebug + 3, Form("-> fEntryCounter == 0"));
// runs UserExecMix for all tasks, if needed
- if (el) UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
- else UserExecMixAllTasks(fEntryCounter, -1, currentMainEntry, -1, 0);
+ if (el) UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
+ else UserExecMixAllTasks(fEntryCounter, -1, currentMainEntry, -1, 0);
return kTRUE;
}
if (!el) {
} else {
elNum = el->GetN();
if (elNum < fBufferSize + 1) {
- UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
- AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld SKIPPED (%lld) +++++++++++++++++++", fEntryCounter, elNum));
+ UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
+ AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld SKIPPED (%lld) LESS THEN BUFFER +++++++++++++++++++", fEntryCounter, elNum));
return kTRUE;
}
}
Int_t counter = 0;
AliInputEventHandler *eh = 0;
TObjArrayIter next(&fInputHandlers);
- while ((eh = dynamic_cast<AliInputEventHandler *> (next()))) {
+ while ((eh = dynamic_cast<AliInputEventHandler *>(next()))) {
if (fEventPool && fEventPool->GetListOfEventCuts()->GetEntries() > 0) {
entryMix = -1;
if (elNum >= fBufferSize) {
AliError("te is null. this is error. tell to developer (#1)")
} else {
AliDebug(AliLog::kDebug + 3, Form("Preparing InputEventHandler(%d)", counter));
- mihi->PrepareEntry(te, entryMix, InputEventHandler(counter), fAnalysisType);
+ mihi->PrepareEntry(te, entryMix, (AliInputEventHandler*)InputEventHandler(counter), fAnalysisType);
// runs UserExecMix for all tasks
UserExecMixAllTasks(fEntryCounter, idEntryList, fEntryCounter, entryMixReal, counter);
fNumberMixed++;
if (mh) inEvHMain = dynamic_cast<AliInputEventHandler *>(mh->GetFirstInputEventHandler());
else inEvHMain = dynamic_cast<AliInputEventHandler *>(mgr->GetInputEventHandler());
if (!inEvHMain) return kFALSE;
+
+ // check for PhysSelection
+ if (!IsEventCurrentSelected()) return kFALSE;
+
// find out zero chain entries
Long64_t zeroChainEntries = fMixIntupHandlerInfoTmp->GetChain()->GetEntries() - inEvHMain->GetTree()->GetTree()->GetEntries();
// fill entry
// return in case of 0 entry in full chain
if (!fEntryCounter) {
// runs UserExecMix for all tasks, if needed
- if (el) UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
- else UserExecMixAllTasks(fEntryCounter, -1, currentMainEntry, -1, 0);
+ if (el && fDoMixIfNotEnoughEvents) {
+ UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
+ } else {
+ idEntryList = -1;
+ UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
+ }
AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld SKIPPED (fEntryCounter=0, idEntryList=%d) +++++++++++++++++++", fEntryCounter, idEntryList));
return kTRUE;
}
} else {
elNum = el->GetN();
if (elNum < fBufferSize + 1) {
- UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
+ if (fDoMixIfNotEnoughEvents) {
+ // include main event in to counter in this case (so idEntryList>0)
+ UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
+ } else {
+ // dont include it in main event counter (idEntryList = -1)
+ idEntryList = -1;
+ UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
+ }
AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld SKIPPED [FIRST ENTRY in el] (elnum=%lld, idEntryList=%d) +++++++++++++++++++", fEntryCounter, elNum, idEntryList));
return kTRUE;
}
+ if (!fDoMixIfNotEnoughEvents) {
+ if (elNum <= fMixNumber + 1) {
+ UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, -1, 0);
+ AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld SKIPPED (%lld) NOT ENOUGH EVENTS TO MIX => NEED=%d +++++++++++++++++++", fEntryCounter, elNum, fMixNumber + 1));
+ return kTRUE;
+ }
+ }
}
// pre mix evetns
Int_t mixNum = fMixNumber;
- if (fUsePreMixEvents) {
+ if (fDoMixExtra) {
if (elNum <= 2 * fMixNumber + 1) mixNum = elNum + 1;
}
AliMixInputHandlerInfo *mihi = 0;
if (!te) {
AliError("te is null. this is error. tell to developer (#2)")
} else {
- mihi->PrepareEntry(te, entryMix, InputEventHandler(0), fAnalysisType);
+ mihi->PrepareEntry(te, entryMix, (AliInputEventHandler*)InputEventHandler(0), fAnalysisType);
// runs UserExecMix for all tasks
fNumberMixed++;
UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, entryMixReal, fNumberMixed);
while ((mixTask = (AliAnalysisTaskSE *) next())) {
if (dynamic_cast<AliAnalysisTaskSE *>(mixTask)) {
AliDebug(AliLog::kDebug, Form("%s %lld %d [%lld,%lld] %d", mixTask->GetName(), entryCounter, numMixed, entryMainReal, entryMixReal, idEntryList));
- fCurrentEntry = idEntryList;
- fCurrentEntryMain = entryCounter;
- fCurrentEntryMix = entryMainReal;
- fCurrentBinIndex = entryMixReal;
-
- if (entryMixReal > -1) mixTask->UserExecMix("");
+ fCurrentEntry = entryCounter;
+ fCurrentEntryMain = entryMainReal;
+ fCurrentEntryMix = entryMixReal;
+ fCurrentBinIndex = idEntryList;
+ if (entryMixReal >= 0) mixTask->UserExecMix("");
}
}
}
}
fMixNumber = mixNum;
}
+
+Bool_t AliMixInputEventHandler::IsEventCurrentSelected()
+{
+ AliDebug(AliLog::kDebug + 5, Form("<-"));
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ AliMultiInputEventHandler *mh = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
+ Bool_t isSelected = kTRUE;
+ if (mh) {
+ if (fOfflineTriggerMask && mh->GetEventSelection()) {
+ isSelected = fOfflineTriggerMask & mh->IsEventSelected();
+ }
+ }
+ AliDebug(AliLog::kDebug + 1, Form("isSelected=%d", isSelected));
+ AliDebug(AliLog::kDebug + 5, Form("-> %d", isSelected));
+ return isSelected;
+}