ROOT logo
//
// Class AliMixEventInputHandler
//
// Mixing input handler prepare N events before UserExec
// TODO example
// author:
//        Martin Vala (martin.vala@cern.ch)
//

#include <TFile.h>
#include <TChain.h>
#include <TChainElement.h>
#include <TSystem.h>

#include "AliLog.h"
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"

#include "AliMixEventPool.h"
#include "AliMixInputEventHandler.h"
#include "AliMixInputHandlerInfo.h"

#include "AliAnalysisTaskSE.h"

ClassImp(AliMixInputEventHandler)

//_____________________________________________________________________________
AliMixInputEventHandler::AliMixInputEventHandler(const Int_t size, const Int_t mixNum): AliMultiInputEventHandler(size),
   fMixTrees(),
   fTreeMap(size > 0 ? size : 1),
   fMixIntupHandlerInfoTmp(0),
   fEntryCounter(0),
   fEventPool(0),
   fNumberMixed(0),
   fMixNumber(mixNum),
   fUseDefautProcess(kFALSE),
   fDoMixExtra(kTRUE),
   fDoMixIfNotEnoughEvents(kTRUE),
   fDoMixEventGetEntryAuto(kTRUE),
   fCurrentEntry(0),
   fCurrentEntryMain(0),
   fCurrentEntryMix(0),
   fCurrentBinIndex(-1),
   fOfflineTriggerMask(0),
   fCurrentMixEntry(),
   fCurrentEntryMainTree(0)
{
   //
   // Default constructor.
   //
   AliDebug(AliLog::kDebug + 10, "<-");
   SetMixNumber(mixNum);
   AliDebug(AliLog::kDebug + 10, "->");
}

//_____________________________________________________________________________
AliMixInputEventHandler::~AliMixInputEventHandler() {
   //
   // Destructor
   //
   fMixTrees.Clear();
}

//_____________________________________________________________________________
void AliMixInputEventHandler::SetInputHandlerForMixing(const AliInputEventHandler *const inHandler)
{
   //
   // Create N (fBufferSize) copies of input handler
   //
   AliDebug(AliLog::kDebug + 5, Form("<-"));
   fInputHandlers.Clear();
   AliDebug(AliLog::kDebug + 5, Form("Creating %d input event handlers ...", fBufferSize));
   for (Int_t i = 0; i < fBufferSize; i++) {
      AliDebug(AliLog::kDebug + 5, Form("Adding %d ...", i));
      fInputHandlers.Add((AliInputEventHandler *) inHandler->Clone());
   }

   AliDebug(AliLog::kDebug + 5, Form("->"));
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::Init(TTree *tree, Option_t *opt)
{
   //
   // Init(const char*path) is called for all mix input handlers.
   // Create event pool if needed
   //
   AliDebug(AliLog::kDebug + 5, Form("<- %p %s", (void *)tree, opt));
   fAnalysisType = opt;
   if (!tree) {
      AliDebug(AliLog::kDebug + 5, Form("->"));
      return kFALSE;
   }

   if (!fDoMixIfNotEnoughEvents&&fDoMixExtra) {
      fDoMixExtra = kFALSE;
      AliWarning("fDoMixIfNotEnoughEvents=kFALSE -> setting fDoMixExtra=kFALSE");
   }

   // clears array of input handlers
   fMixTrees.Delete();
   // create AliMixInputHandlerInfo
   if (!fMixIntupHandlerInfoTmp) {
      // loads first file TChain (tree)
      tree->LoadTree(0);
      fMixIntupHandlerInfoTmp = new AliMixInputHandlerInfo(tree->GetName());
   }

   AliInputEventHandler *ih = 0;
   for (Int_t i = 0; i < fInputHandlers.GetEntries(); i++) {
      ih = (AliInputEventHandler *) fInputHandlers.At(i);
      ih->SetParentHandler(this);
   }

   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::Notify()
{
   //
   // Notify() is called for all mix input handlers
   //
   AliDebug(AliLog::kDebug + 5, Form("<-"));
   if (fUseDefautProcess) {
      AliDebug(AliLog::kDebug, Form("-> SKIPPED"));
      return AliMultiInputEventHandler::Notify();
   }
   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::Notify(const char *path)
{
   //
   // Notify(const char*path) is called for all mix input handlers
   //
   AliDebug(AliLog::kDebug + 5, Form("<- %s", path));

   Bool_t doPrepareEntry=kTRUE;
   TString anType = fAnalysisType;

   // in case of local doPrepareEntry only first time
   if (anType.CompareTo("proof")) doPrepareEntry = (fMixIntupHandlerInfoTmp->GetChain()->GetEntries()<=0);

   // adds current file
   fMixIntupHandlerInfoTmp->AddTreeToChain(path);
   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());
      if (doPrepareEntry) mixIHI->PrepareEntry(che, -1, (AliInputEventHandler *)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();
   if (fUseDefautProcess) {
      AliDebug(AliLog::kDebug, Form("-> SKIPPED"));
      return AliMultiInputEventHandler::Notify(path);
   }
   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::BeginEvent(Long64_t entry)
{
   //
   // BeginEvent(Long64_t entry) is called for all mix input handlers
   //
   fCurrentEntryMainTree = entry;

   AliDebug(AliLog::kDebug + 5, Form("-> %lld", entry));
   if (fUseDefautProcess) {
      AliDebug(AliLog::kDebug, Form("-> SKIPPED"));
      AliMultiInputEventHandler::BeginEvent(entry);/* return GetEntry();*/
   }
   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}
//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::GetEntry()
{
   //
   // All mixed events are set
   //
   AliDebug(AliLog::kDebug + 5, Form("<-"));

   if (!fEventPool) {
      MixStd();
   }
   // if buffer size is higher then 1
   else if (fBufferSize > 1) {
      MixBuffer();
   }
   // if mix number is higher then 0 and buffer size is 1
   else if (fMixNumber > 0) {
      MixEventsMoreTimesWithOneEvent();
   } else {
      AliWarning("Not supported Mixing !!!");
   }

   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::MixStd()
{
   //
   // Mix std - No event pool
   //
   AliDebug(AliLog::kDebug + 5, Form("<-"));
   AliDebug(AliLog::kDebug + 1, "Mix method");
   // get correct handler
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   AliMultiInputEventHandler *mh = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
   AliInputEventHandler *inEvHMain = 0;
   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"));
      // runs UserExecMix for all tasks, if needed
      UserExecMixAllTasks(fEntryCounter, 1, fEntryCounter, -1, 0);
      return kTRUE;
   }
   // pre mix evetns
   Int_t mixNum = fMixNumber;
   if (fDoMixExtra) {
      if (fEntryCounter <= 2 * fMixNumber) mixNum = 2 * fMixNumber + 2;
   }
   // start of
   AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ BEGIN SETUP EVENT %lld +++++++++++++++++++", fEntryCounter));
   // reset mix number
   fNumberMixed = 0;
   AliMixInputHandlerInfo *mihi = 0;
   Long64_t entryMix = 0, entryMixReal = 0;
   Int_t counter = 0;
   for (counter = 0; counter < mixNum; counter++) {
      entryMix = fEntryCounter - 1 - counter ;
      AliDebug(AliLog::kDebug + 5, Form("Handler[%d] entryMix %lld ", counter, entryMix));
      if (entryMix < 0) break;
      entryMixReal = entryMix;
      mihi = (AliMixInputHandlerInfo *) fMixTrees.At(0);
      TChainElement *te = fMixIntupHandlerInfoTmp->GetEntryInTree(entryMix);
      if (!te) {
         AliError("te is null. this is error. tell to developer (#1)");
      } else {
         if (fDoMixEventGetEntryAuto) mihi->PrepareEntry(te, entryMix, (AliInputEventHandler *)InputEventHandler(0), fAnalysisType);
         // runs UserExecMix for all tasks
         fNumberMixed++;
         UserExecMixAllTasks(fEntryCounter, 1, fEntryCounter, entryMixReal, fNumberMixed);
         InputEventHandler(0)->FinishEvent();
      }
   }
   AliDebug(AliLog::kDebug + 3, Form("fEntryCounter=%lld fMixEventNumber=%d", fEntryCounter, fNumberMixed));
   AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld +++++++++++++++++++", fEntryCounter));
   AliDebug(AliLog::kDebug + 5, Form("->"));
   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::MixBuffer()
{
   //
   // Mix in event buffer
   //
   AliDebug(AliLog::kDebug + 5, Form("<-"));
   AliDebug(AliLog::kDebug + 1, "Mix method");
   // get correct handler
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   AliMultiInputEventHandler *mh = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
   AliInputEventHandler *inEvHMain = 0;
   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;

   fCurrentMixEntry.Reset();

   // find out zero chain entries
   Long64_t zeroChainEntries = fMixIntupHandlerInfoTmp->GetChain()->GetEntries() - inEvHMain->GetTree()->GetTree()->GetEntries();
   // fill entry
   Long64_t currentMainEntry = inEvHMain->GetTree()->GetTree()->GetReadEntry() + zeroChainEntries;
   // fills entry
   if (fEventPool && inEvHMain) fEventPool->AddEntry(currentMainEntry, inEvHMain->GetEvent());
   // start of
   AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ BEGIN SETUP EVENT %lld +++++++++++++++++++", fEntryCounter));
   // reset mix number
   fNumberMixed = 0;
   Long64_t elNum = 0;
   TEntryList *el = 0;
   Int_t idEntryList = -1;
   if (fEventPool) el = fEventPool->FindEntryList(inEvHMain->GetEvent(), idEntryList);
   // return in case of 0 entry in full chain
   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);
      return kTRUE;
   }
   if (!el) {
      AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld SKIPPED (el null) +++++++++++++++++++", fEntryCounter));
      UserExecMixAllTasks(fEntryCounter, -1, fEntryCounter, -1, 0);
      return kTRUE;
   } 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) LESS THEN BUFFER +++++++++++++++++++", fEntryCounter, elNum));
         return kTRUE;
      }
   }

   AliMixInputHandlerInfo *mihi = 0;
   Long64_t entryMix = 0, entryMixReal = 0;
   Int_t counter = 0;
   AliInputEventHandler *eh = 0;
   TObjArrayIter next(&fInputHandlers);
   while ((eh = dynamic_cast<AliInputEventHandler *>(next()))) {
      if (fEventPool && fEventPool->GetListOfEventCuts()->GetEntries() > 0) {
         entryMix = -1;
         if (elNum >= fBufferSize) {
            Long64_t entryInEntryList =  elNum - 2 - counter;
            if (entryInEntryList < 0) break;
            entryMix = el->GetEntry(entryInEntryList);
         }
      }
      AliDebug(AliLog::kDebug + 5, Form("Handler[%d] entryMix %lld ", counter, entryMix));
      if (entryMix < 0) {
         UserExecMixAllTasks(fEntryCounter, -1, currentMainEntry, -1, 0);
         break;
      }
      entryMixReal = entryMix;
      mihi = (AliMixInputHandlerInfo *) fMixTrees.At(counter);
      TChainElement *te = fMixIntupHandlerInfoTmp->GetEntryInTree(entryMix);
      if (!te) {
         AliError("te is null. this is error. tell to developer (#1)");
      } else {
         fCurrentMixEntry.Enter(entryMixReal);
         AliDebug(AliLog::kDebug + 3, Form("Preparing InputEventHandler(%d)", counter));
         if (fDoMixEventGetEntryAuto) mihi->PrepareEntry(te, entryMix, (AliInputEventHandler *)InputEventHandler(counter), fAnalysisType);
         fNumberMixed++;
      }
      counter++;
   }

   if (fNumberMixed == fBufferSize) {
      // runs UserExecMix for all tasks
      UserExecMixAllTasks(fEntryCounter, idEntryList, fEntryCounter, entryMixReal, counter);
   }

   AliDebug(AliLog::kDebug + 3, Form("fEntryCounter=%lld fMixEventNumber=%d", fEntryCounter, fNumberMixed));
   AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld +++++++++++++++++++", fEntryCounter));
   AliDebug(AliLog::kDebug + 5, Form("->"));
   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::MixEventsMoreTimesWithOneEvent()
{
   //
   // Mix in history with one event in buffer
   //
   AliDebug(AliLog::kDebug + 5, "<-");
   AliDebug(AliLog::kDebug + 1, "Mix method");
   // get correct handler
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   AliMultiInputEventHandler *mh = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
   AliInputEventHandler *inEvHMain = 0;
   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;

   fCurrentMixEntry.Reset();

   // find out zero chain entries
   Long64_t zeroChainEntries = fMixIntupHandlerInfoTmp->GetChain()->GetEntries() - inEvHMain->GetTree()->GetTree()->GetEntries();
   // fill entry
   Long64_t currentMainEntry = inEvHMain->GetTree()->GetTree()->GetReadEntry() + zeroChainEntries;
   if (fEventPool && inEvHMain) fEventPool->AddEntry(currentMainEntry, inEvHMain->GetEvent());
   // start of
   AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ BEGIN SETUP EVENT %lld +++++++++++++++++++", fEntryCounter));
   // reset mix number
   fNumberMixed = 0;
   Long64_t elNum = 0;
   Int_t idEntryList = -1;
   TEntryList *el = 0;
   if (fEventPool) el = fEventPool->FindEntryList(inEvHMain->GetEvent(), idEntryList);
   // return in case of 0 entry in full chain
   if (!fEntryCounter) {
      // runs UserExecMix for all tasks, if needed
      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;
   }
   if (!el) {
      if (fEventPool) {
         AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld SKIPPED (el null, idEntryList=%d) +++++++++++++++++++", fEntryCounter, idEntryList));
         UserExecMixAllTasks(fEntryCounter, -1, currentMainEntry, -1, 0);
         return kTRUE;
      }
   } else {
      elNum = el->GetN();
      if (elNum < fBufferSize + 1) {
         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 (fDoMixExtra) {
      if (elNum <= 2 * fMixNumber + 1) mixNum = elNum + 1;
   }
   AliMixInputHandlerInfo *mihi = 0;
   Long64_t entryMix = 0, entryMixReal = 0;
   Int_t counter = 0;
   mihi = (AliMixInputHandlerInfo *) fMixTrees.At(0);
   // fills num for main events
   for (counter = 0; counter < mixNum; counter++) {
      fCurrentMixEntry.Reset();
      Long64_t entryInEntryList =  elNum - 2 - counter;
      AliDebug(AliLog::kDebug + 3, Form("entryInEntryList=%lld", entryInEntryList));
      if (entryInEntryList < 0) break;
      entryMix = el->GetEntry(entryInEntryList);
      AliDebug(AliLog::kDebug + 3, Form("entryMix=%lld", entryMix));
      if (entryMix < 0) break;
      entryMixReal = entryMix;
      TChainElement *te = fMixIntupHandlerInfoTmp->GetEntryInTree(entryMix);
      if (!te) {
         AliError("te is null. this is error. tell to developer (#2)");
      } else {
         fCurrentMixEntry.Enter(entryMixReal);
         if (fDoMixEventGetEntryAuto) mihi->PrepareEntry(te, entryMix, (AliInputEventHandler *)InputEventHandler(0), fAnalysisType);
         // runs UserExecMix for all tasks
         fNumberMixed++;
         UserExecMixAllTasks(fEntryCounter, idEntryList, currentMainEntry, entryMixReal, fNumberMixed);
         InputEventHandler(0)->FinishEvent();
      }
   }
   AliDebug(AliLog::kDebug + 3, Form("fEntryCounter=%lld fMixEventNumber=%d", fEntryCounter, fNumberMixed));
   AliDebug(AliLog::kDebug + 3, Form("++++++++++++++ END SETUP EVENT %lld +++++++++++++++++++", fEntryCounter));
   AliDebug(AliLog::kDebug + 5, Form("->"));
   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::MixEventsMoreTimesWithBuffer()
{
   //
   // Mix more events in buffer with mixing with history
   //
   AliWarning("Not implemented");
   return kFALSE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::FinishEvent()
{
   //
   // FinishEvent() is called for all mix input handlers
   //
   AliDebug(AliLog::kDebug + 5, Form("<-"));
   AliMultiInputEventHandler::FinishEvent();
   fEntryCounter++;
   AliDebug(AliLog::kDebug + 5, Form("->"));
   return kTRUE;
}

//_____________________________________________________________________________
void AliMixInputEventHandler::AddInputEventHandler(AliVEventHandler *)
{
   //
   // AddInputEventHandler will not be used
   //
   AliWarning("Function AddInputEventHandler is disabled for AliMixEventInputHandler !!!");
   AliWarning("Use AliMixEventInputHandler::SetInputHandlerForMixing instead. Exiting ...");
}

//_____________________________________________________________________________
void AliMixInputEventHandler::UserExecMixAllTasks(Long64_t entryCounter, Int_t idEntryList, Long64_t entryMainReal, Long64_t entryMixReal, Int_t numMixed)
{
   //
   // Execute all task and sets mixing parameters
   //
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   AliAnalysisTaskSE *mixTask = 0;
   TObjArrayIter next(mgr->GetTasks());
   while ((mixTask = dynamic_cast<AliAnalysisTaskSE *>(next()))) {
      AliDebug(AliLog::kDebug, Form("%s %lld %d [%lld,%lld] %d", mixTask->GetName(), entryCounter, numMixed, entryMainReal, entryMixReal, idEntryList));
      fCurrentEntry = entryCounter;
      fCurrentEntryMain = entryMainReal;
      fCurrentEntryMix = entryMixReal;
      fCurrentBinIndex = idEntryList;
      if (entryMixReal >= 0) mixTask->UserExecMix("");
   }
}

//_____________________________________________________________________________
void AliMixInputEventHandler::SetMixNumber(const Int_t mixNum)
{
   //
   // Sets mix number
   //
   if (fMixNumber > 1 && fBufferSize > 1) {
      AliWarning("Sleeping 10 sec to show Warning Message ...");
      AliWarning("=========================================================================================");
      AliWarning(Form("BufferSize(%d) higher > 1 and fMixNumber(%d) > 1, which is not supported", fBufferSize, mixNum));
      AliWarning("");
      AliWarning("\tBufferSize will be set to 1");
      AliWarning("");
      AliWarning("Hints:");
      AliWarning("");
      AliWarning("\t1.If you want to use buffer do:");
      AliWarning(Form("\t\tAliMixInputEventHandler *mixH = new AliMixInputEventHandler(%d,1)", fBufferSize));
      AliWarning("");
      AliWarning("\t2.If you want to use mix more time with buffer size 1, then do:");
      AliWarning(Form("\t\tAliMixInputEventHandler *mixH = new AliMixInputEventHandler(1,%d)", mixNum));
      AliWarning("");
      AliWarning("=========================================================================================");
      gSystem->Sleep(10000);
      fBufferSize = 1;
   }
   fMixNumber = mixNum;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::IsEventCurrentSelected()
{
   //
   // Check if event is selected by Physics selection
   //

   AliDebug(AliLog::kDebug + 5, Form("<-"));
   Bool_t isSelected = kTRUE;
   if (fOfflineTriggerMask && fOfflineTriggerMask != AliVEvent::kAny) {
      AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
      AliMultiInputEventHandler *mh = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
      if (mh) {
         AliInputEventHandler *ih =  mh->GetFirstInputEventHandler();
         isSelected = fOfflineTriggerMask & ih->IsEventSelected();
      }
   }
   AliDebug(AliLog::kDebug + 1, Form("isSelected=%d", isSelected));
   AliDebug(AliLog::kDebug + 5, Form("-> %d", isSelected));
   return isSelected;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::GetEntryMainEvent() {
   //
   // Calling GetEntry for main event in input handler (Should be used in UserExecMix() only)
   //

   AliInputEventHandler *ih = ((AliMultiInputEventHandler *)ParentHandler())->GetFirstInputEventHandler();
   ih->GetTree()->GetEntry(fCurrentEntryMainTree);
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliMixInputEventHandler::GetEntryMixedEvent(Int_t id) {
   //
   // Calling GetEntry for mixed event in input handler with id
   // (Should be used in UserExecMix() only)
   //

   AliMixInputHandlerInfo *mihi = (AliMixInputHandlerInfo *) fMixTrees.At(id);

   Long64_t entryMix = fCurrentMixEntry.GetEntry(fCurrentMixEntry.GetN()-id-1);
   if(entryMix<0) {
      AliError(Form("GetEntryMixedEvent(%d) => entryMix<0 [1]",id));
      return kFALSE;
   }
   TChainElement *te = fMixIntupHandlerInfoTmp->GetEntryInTree(entryMix);
   if (!te) {
      AliError("te is null. this is error. tell to developer (#3)");
      return kFALSE;
   }
   if(entryMix<0) {
      AliError(Form("GetEntryMixedEvent(%d) => entryMix<0 [2]",id));
      return kFALSE;
   }
   mihi->PrepareEntry(te, entryMix, (AliInputEventHandler *)InputEventHandler(id), fAnalysisType);

   return kTRUE;
}
 AliMixInputEventHandler.cxx:1
 AliMixInputEventHandler.cxx:2
 AliMixInputEventHandler.cxx:3
 AliMixInputEventHandler.cxx:4
 AliMixInputEventHandler.cxx:5
 AliMixInputEventHandler.cxx:6
 AliMixInputEventHandler.cxx:7
 AliMixInputEventHandler.cxx:8
 AliMixInputEventHandler.cxx:9
 AliMixInputEventHandler.cxx:10
 AliMixInputEventHandler.cxx:11
 AliMixInputEventHandler.cxx:12
 AliMixInputEventHandler.cxx:13
 AliMixInputEventHandler.cxx:14
 AliMixInputEventHandler.cxx:15
 AliMixInputEventHandler.cxx:16
 AliMixInputEventHandler.cxx:17
 AliMixInputEventHandler.cxx:18
 AliMixInputEventHandler.cxx:19
 AliMixInputEventHandler.cxx:20
 AliMixInputEventHandler.cxx:21
 AliMixInputEventHandler.cxx:22
 AliMixInputEventHandler.cxx:23
 AliMixInputEventHandler.cxx:24
 AliMixInputEventHandler.cxx:25
 AliMixInputEventHandler.cxx:26
 AliMixInputEventHandler.cxx:27
 AliMixInputEventHandler.cxx:28
 AliMixInputEventHandler.cxx:29
 AliMixInputEventHandler.cxx:30
 AliMixInputEventHandler.cxx:31
 AliMixInputEventHandler.cxx:32
 AliMixInputEventHandler.cxx:33
 AliMixInputEventHandler.cxx:34
 AliMixInputEventHandler.cxx:35
 AliMixInputEventHandler.cxx:36
 AliMixInputEventHandler.cxx:37
 AliMixInputEventHandler.cxx:38
 AliMixInputEventHandler.cxx:39
 AliMixInputEventHandler.cxx:40
 AliMixInputEventHandler.cxx:41
 AliMixInputEventHandler.cxx:42
 AliMixInputEventHandler.cxx:43
 AliMixInputEventHandler.cxx:44
 AliMixInputEventHandler.cxx:45
 AliMixInputEventHandler.cxx:46
 AliMixInputEventHandler.cxx:47
 AliMixInputEventHandler.cxx:48
 AliMixInputEventHandler.cxx:49
 AliMixInputEventHandler.cxx:50
 AliMixInputEventHandler.cxx:51
 AliMixInputEventHandler.cxx:52
 AliMixInputEventHandler.cxx:53
 AliMixInputEventHandler.cxx:54
 AliMixInputEventHandler.cxx:55
 AliMixInputEventHandler.cxx:56
 AliMixInputEventHandler.cxx:57
 AliMixInputEventHandler.cxx:58
 AliMixInputEventHandler.cxx:59
 AliMixInputEventHandler.cxx:60
 AliMixInputEventHandler.cxx:61
 AliMixInputEventHandler.cxx:62
 AliMixInputEventHandler.cxx:63
 AliMixInputEventHandler.cxx:64
 AliMixInputEventHandler.cxx:65
 AliMixInputEventHandler.cxx:66
 AliMixInputEventHandler.cxx:67
 AliMixInputEventHandler.cxx:68
 AliMixInputEventHandler.cxx:69
 AliMixInputEventHandler.cxx:70
 AliMixInputEventHandler.cxx:71
 AliMixInputEventHandler.cxx:72
 AliMixInputEventHandler.cxx:73
 AliMixInputEventHandler.cxx:74
 AliMixInputEventHandler.cxx:75
 AliMixInputEventHandler.cxx:76
 AliMixInputEventHandler.cxx:77
 AliMixInputEventHandler.cxx:78
 AliMixInputEventHandler.cxx:79
 AliMixInputEventHandler.cxx:80
 AliMixInputEventHandler.cxx:81
 AliMixInputEventHandler.cxx:82
 AliMixInputEventHandler.cxx:83
 AliMixInputEventHandler.cxx:84
 AliMixInputEventHandler.cxx:85
 AliMixInputEventHandler.cxx:86
 AliMixInputEventHandler.cxx:87
 AliMixInputEventHandler.cxx:88
 AliMixInputEventHandler.cxx:89
 AliMixInputEventHandler.cxx:90
 AliMixInputEventHandler.cxx:91
 AliMixInputEventHandler.cxx:92
 AliMixInputEventHandler.cxx:93
 AliMixInputEventHandler.cxx:94
 AliMixInputEventHandler.cxx:95
 AliMixInputEventHandler.cxx:96
 AliMixInputEventHandler.cxx:97
 AliMixInputEventHandler.cxx:98
 AliMixInputEventHandler.cxx:99
 AliMixInputEventHandler.cxx:100
 AliMixInputEventHandler.cxx:101
 AliMixInputEventHandler.cxx:102
 AliMixInputEventHandler.cxx:103
 AliMixInputEventHandler.cxx:104
 AliMixInputEventHandler.cxx:105
 AliMixInputEventHandler.cxx:106
 AliMixInputEventHandler.cxx:107
 AliMixInputEventHandler.cxx:108
 AliMixInputEventHandler.cxx:109
 AliMixInputEventHandler.cxx:110
 AliMixInputEventHandler.cxx:111
 AliMixInputEventHandler.cxx:112
 AliMixInputEventHandler.cxx:113
 AliMixInputEventHandler.cxx:114
 AliMixInputEventHandler.cxx:115
 AliMixInputEventHandler.cxx:116
 AliMixInputEventHandler.cxx:117
 AliMixInputEventHandler.cxx:118
 AliMixInputEventHandler.cxx:119
 AliMixInputEventHandler.cxx:120
 AliMixInputEventHandler.cxx:121
 AliMixInputEventHandler.cxx:122
 AliMixInputEventHandler.cxx:123
 AliMixInputEventHandler.cxx:124
 AliMixInputEventHandler.cxx:125
 AliMixInputEventHandler.cxx:126
 AliMixInputEventHandler.cxx:127
 AliMixInputEventHandler.cxx:128
 AliMixInputEventHandler.cxx:129
 AliMixInputEventHandler.cxx:130
 AliMixInputEventHandler.cxx:131
 AliMixInputEventHandler.cxx:132
 AliMixInputEventHandler.cxx:133
 AliMixInputEventHandler.cxx:134
 AliMixInputEventHandler.cxx:135
 AliMixInputEventHandler.cxx:136
 AliMixInputEventHandler.cxx:137
 AliMixInputEventHandler.cxx:138
 AliMixInputEventHandler.cxx:139
 AliMixInputEventHandler.cxx:140
 AliMixInputEventHandler.cxx:141
 AliMixInputEventHandler.cxx:142
 AliMixInputEventHandler.cxx:143
 AliMixInputEventHandler.cxx:144
 AliMixInputEventHandler.cxx:145
 AliMixInputEventHandler.cxx:146
 AliMixInputEventHandler.cxx:147
 AliMixInputEventHandler.cxx:148
 AliMixInputEventHandler.cxx:149
 AliMixInputEventHandler.cxx:150
 AliMixInputEventHandler.cxx:151
 AliMixInputEventHandler.cxx:152
 AliMixInputEventHandler.cxx:153
 AliMixInputEventHandler.cxx:154
 AliMixInputEventHandler.cxx:155
 AliMixInputEventHandler.cxx:156
 AliMixInputEventHandler.cxx:157
 AliMixInputEventHandler.cxx:158
 AliMixInputEventHandler.cxx:159
 AliMixInputEventHandler.cxx:160
 AliMixInputEventHandler.cxx:161
 AliMixInputEventHandler.cxx:162
 AliMixInputEventHandler.cxx:163
 AliMixInputEventHandler.cxx:164
 AliMixInputEventHandler.cxx:165
 AliMixInputEventHandler.cxx:166
 AliMixInputEventHandler.cxx:167
 AliMixInputEventHandler.cxx:168
 AliMixInputEventHandler.cxx:169
 AliMixInputEventHandler.cxx:170
 AliMixInputEventHandler.cxx:171
 AliMixInputEventHandler.cxx:172
 AliMixInputEventHandler.cxx:173
 AliMixInputEventHandler.cxx:174
 AliMixInputEventHandler.cxx:175
 AliMixInputEventHandler.cxx:176
 AliMixInputEventHandler.cxx:177
 AliMixInputEventHandler.cxx:178
 AliMixInputEventHandler.cxx:179
 AliMixInputEventHandler.cxx:180
 AliMixInputEventHandler.cxx:181
 AliMixInputEventHandler.cxx:182
 AliMixInputEventHandler.cxx:183
 AliMixInputEventHandler.cxx:184
 AliMixInputEventHandler.cxx:185
 AliMixInputEventHandler.cxx:186
 AliMixInputEventHandler.cxx:187
 AliMixInputEventHandler.cxx:188
 AliMixInputEventHandler.cxx:189
 AliMixInputEventHandler.cxx:190
 AliMixInputEventHandler.cxx:191
 AliMixInputEventHandler.cxx:192
 AliMixInputEventHandler.cxx:193
 AliMixInputEventHandler.cxx:194
 AliMixInputEventHandler.cxx:195
 AliMixInputEventHandler.cxx:196
 AliMixInputEventHandler.cxx:197
 AliMixInputEventHandler.cxx:198
 AliMixInputEventHandler.cxx:199
 AliMixInputEventHandler.cxx:200
 AliMixInputEventHandler.cxx:201
 AliMixInputEventHandler.cxx:202
 AliMixInputEventHandler.cxx:203
 AliMixInputEventHandler.cxx:204
 AliMixInputEventHandler.cxx:205
 AliMixInputEventHandler.cxx:206
 AliMixInputEventHandler.cxx:207
 AliMixInputEventHandler.cxx:208
 AliMixInputEventHandler.cxx:209
 AliMixInputEventHandler.cxx:210
 AliMixInputEventHandler.cxx:211
 AliMixInputEventHandler.cxx:212
 AliMixInputEventHandler.cxx:213
 AliMixInputEventHandler.cxx:214
 AliMixInputEventHandler.cxx:215
 AliMixInputEventHandler.cxx:216
 AliMixInputEventHandler.cxx:217
 AliMixInputEventHandler.cxx:218
 AliMixInputEventHandler.cxx:219
 AliMixInputEventHandler.cxx:220
 AliMixInputEventHandler.cxx:221
 AliMixInputEventHandler.cxx:222
 AliMixInputEventHandler.cxx:223
 AliMixInputEventHandler.cxx:224
 AliMixInputEventHandler.cxx:225
 AliMixInputEventHandler.cxx:226
 AliMixInputEventHandler.cxx:227
 AliMixInputEventHandler.cxx:228
 AliMixInputEventHandler.cxx:229
 AliMixInputEventHandler.cxx:230
 AliMixInputEventHandler.cxx:231
 AliMixInputEventHandler.cxx:232
 AliMixInputEventHandler.cxx:233
 AliMixInputEventHandler.cxx:234
 AliMixInputEventHandler.cxx:235
 AliMixInputEventHandler.cxx:236
 AliMixInputEventHandler.cxx:237
 AliMixInputEventHandler.cxx:238
 AliMixInputEventHandler.cxx:239
 AliMixInputEventHandler.cxx:240
 AliMixInputEventHandler.cxx:241
 AliMixInputEventHandler.cxx:242
 AliMixInputEventHandler.cxx:243
 AliMixInputEventHandler.cxx:244
 AliMixInputEventHandler.cxx:245
 AliMixInputEventHandler.cxx:246
 AliMixInputEventHandler.cxx:247
 AliMixInputEventHandler.cxx:248
 AliMixInputEventHandler.cxx:249
 AliMixInputEventHandler.cxx:250
 AliMixInputEventHandler.cxx:251
 AliMixInputEventHandler.cxx:252
 AliMixInputEventHandler.cxx:253
 AliMixInputEventHandler.cxx:254
 AliMixInputEventHandler.cxx:255
 AliMixInputEventHandler.cxx:256
 AliMixInputEventHandler.cxx:257
 AliMixInputEventHandler.cxx:258
 AliMixInputEventHandler.cxx:259
 AliMixInputEventHandler.cxx:260
 AliMixInputEventHandler.cxx:261
 AliMixInputEventHandler.cxx:262
 AliMixInputEventHandler.cxx:263
 AliMixInputEventHandler.cxx:264
 AliMixInputEventHandler.cxx:265
 AliMixInputEventHandler.cxx:266
 AliMixInputEventHandler.cxx:267
 AliMixInputEventHandler.cxx:268
 AliMixInputEventHandler.cxx:269
 AliMixInputEventHandler.cxx:270
 AliMixInputEventHandler.cxx:271
 AliMixInputEventHandler.cxx:272
 AliMixInputEventHandler.cxx:273
 AliMixInputEventHandler.cxx:274
 AliMixInputEventHandler.cxx:275
 AliMixInputEventHandler.cxx:276
 AliMixInputEventHandler.cxx:277
 AliMixInputEventHandler.cxx:278
 AliMixInputEventHandler.cxx:279
 AliMixInputEventHandler.cxx:280
 AliMixInputEventHandler.cxx:281
 AliMixInputEventHandler.cxx:282
 AliMixInputEventHandler.cxx:283
 AliMixInputEventHandler.cxx:284
 AliMixInputEventHandler.cxx:285
 AliMixInputEventHandler.cxx:286
 AliMixInputEventHandler.cxx:287
 AliMixInputEventHandler.cxx:288
 AliMixInputEventHandler.cxx:289
 AliMixInputEventHandler.cxx:290
 AliMixInputEventHandler.cxx:291
 AliMixInputEventHandler.cxx:292
 AliMixInputEventHandler.cxx:293
 AliMixInputEventHandler.cxx:294
 AliMixInputEventHandler.cxx:295
 AliMixInputEventHandler.cxx:296
 AliMixInputEventHandler.cxx:297
 AliMixInputEventHandler.cxx:298
 AliMixInputEventHandler.cxx:299
 AliMixInputEventHandler.cxx:300
 AliMixInputEventHandler.cxx:301
 AliMixInputEventHandler.cxx:302
 AliMixInputEventHandler.cxx:303
 AliMixInputEventHandler.cxx:304
 AliMixInputEventHandler.cxx:305
 AliMixInputEventHandler.cxx:306
 AliMixInputEventHandler.cxx:307
 AliMixInputEventHandler.cxx:308
 AliMixInputEventHandler.cxx:309
 AliMixInputEventHandler.cxx:310
 AliMixInputEventHandler.cxx:311
 AliMixInputEventHandler.cxx:312
 AliMixInputEventHandler.cxx:313
 AliMixInputEventHandler.cxx:314
 AliMixInputEventHandler.cxx:315
 AliMixInputEventHandler.cxx:316
 AliMixInputEventHandler.cxx:317
 AliMixInputEventHandler.cxx:318
 AliMixInputEventHandler.cxx:319
 AliMixInputEventHandler.cxx:320
 AliMixInputEventHandler.cxx:321
 AliMixInputEventHandler.cxx:322
 AliMixInputEventHandler.cxx:323
 AliMixInputEventHandler.cxx:324
 AliMixInputEventHandler.cxx:325
 AliMixInputEventHandler.cxx:326
 AliMixInputEventHandler.cxx:327
 AliMixInputEventHandler.cxx:328
 AliMixInputEventHandler.cxx:329
 AliMixInputEventHandler.cxx:330
 AliMixInputEventHandler.cxx:331
 AliMixInputEventHandler.cxx:332
 AliMixInputEventHandler.cxx:333
 AliMixInputEventHandler.cxx:334
 AliMixInputEventHandler.cxx:335
 AliMixInputEventHandler.cxx:336
 AliMixInputEventHandler.cxx:337
 AliMixInputEventHandler.cxx:338
 AliMixInputEventHandler.cxx:339
 AliMixInputEventHandler.cxx:340
 AliMixInputEventHandler.cxx:341
 AliMixInputEventHandler.cxx:342
 AliMixInputEventHandler.cxx:343
 AliMixInputEventHandler.cxx:344
 AliMixInputEventHandler.cxx:345
 AliMixInputEventHandler.cxx:346
 AliMixInputEventHandler.cxx:347
 AliMixInputEventHandler.cxx:348
 AliMixInputEventHandler.cxx:349
 AliMixInputEventHandler.cxx:350
 AliMixInputEventHandler.cxx:351
 AliMixInputEventHandler.cxx:352
 AliMixInputEventHandler.cxx:353
 AliMixInputEventHandler.cxx:354
 AliMixInputEventHandler.cxx:355
 AliMixInputEventHandler.cxx:356
 AliMixInputEventHandler.cxx:357
 AliMixInputEventHandler.cxx:358
 AliMixInputEventHandler.cxx:359
 AliMixInputEventHandler.cxx:360
 AliMixInputEventHandler.cxx:361
 AliMixInputEventHandler.cxx:362
 AliMixInputEventHandler.cxx:363
 AliMixInputEventHandler.cxx:364
 AliMixInputEventHandler.cxx:365
 AliMixInputEventHandler.cxx:366
 AliMixInputEventHandler.cxx:367
 AliMixInputEventHandler.cxx:368
 AliMixInputEventHandler.cxx:369
 AliMixInputEventHandler.cxx:370
 AliMixInputEventHandler.cxx:371
 AliMixInputEventHandler.cxx:372
 AliMixInputEventHandler.cxx:373
 AliMixInputEventHandler.cxx:374
 AliMixInputEventHandler.cxx:375
 AliMixInputEventHandler.cxx:376
 AliMixInputEventHandler.cxx:377
 AliMixInputEventHandler.cxx:378
 AliMixInputEventHandler.cxx:379
 AliMixInputEventHandler.cxx:380
 AliMixInputEventHandler.cxx:381
 AliMixInputEventHandler.cxx:382
 AliMixInputEventHandler.cxx:383
 AliMixInputEventHandler.cxx:384
 AliMixInputEventHandler.cxx:385
 AliMixInputEventHandler.cxx:386
 AliMixInputEventHandler.cxx:387
 AliMixInputEventHandler.cxx:388
 AliMixInputEventHandler.cxx:389
 AliMixInputEventHandler.cxx:390
 AliMixInputEventHandler.cxx:391
 AliMixInputEventHandler.cxx:392
 AliMixInputEventHandler.cxx:393
 AliMixInputEventHandler.cxx:394
 AliMixInputEventHandler.cxx:395
 AliMixInputEventHandler.cxx:396
 AliMixInputEventHandler.cxx:397
 AliMixInputEventHandler.cxx:398
 AliMixInputEventHandler.cxx:399
 AliMixInputEventHandler.cxx:400
 AliMixInputEventHandler.cxx:401
 AliMixInputEventHandler.cxx:402
 AliMixInputEventHandler.cxx:403
 AliMixInputEventHandler.cxx:404
 AliMixInputEventHandler.cxx:405
 AliMixInputEventHandler.cxx:406
 AliMixInputEventHandler.cxx:407
 AliMixInputEventHandler.cxx:408
 AliMixInputEventHandler.cxx:409
 AliMixInputEventHandler.cxx:410
 AliMixInputEventHandler.cxx:411
 AliMixInputEventHandler.cxx:412
 AliMixInputEventHandler.cxx:413
 AliMixInputEventHandler.cxx:414
 AliMixInputEventHandler.cxx:415
 AliMixInputEventHandler.cxx:416
 AliMixInputEventHandler.cxx:417
 AliMixInputEventHandler.cxx:418
 AliMixInputEventHandler.cxx:419
 AliMixInputEventHandler.cxx:420
 AliMixInputEventHandler.cxx:421
 AliMixInputEventHandler.cxx:422
 AliMixInputEventHandler.cxx:423
 AliMixInputEventHandler.cxx:424
 AliMixInputEventHandler.cxx:425
 AliMixInputEventHandler.cxx:426
 AliMixInputEventHandler.cxx:427
 AliMixInputEventHandler.cxx:428
 AliMixInputEventHandler.cxx:429
 AliMixInputEventHandler.cxx:430
 AliMixInputEventHandler.cxx:431
 AliMixInputEventHandler.cxx:432
 AliMixInputEventHandler.cxx:433
 AliMixInputEventHandler.cxx:434
 AliMixInputEventHandler.cxx:435
 AliMixInputEventHandler.cxx:436
 AliMixInputEventHandler.cxx:437
 AliMixInputEventHandler.cxx:438
 AliMixInputEventHandler.cxx:439
 AliMixInputEventHandler.cxx:440
 AliMixInputEventHandler.cxx:441
 AliMixInputEventHandler.cxx:442
 AliMixInputEventHandler.cxx:443
 AliMixInputEventHandler.cxx:444
 AliMixInputEventHandler.cxx:445
 AliMixInputEventHandler.cxx:446
 AliMixInputEventHandler.cxx:447
 AliMixInputEventHandler.cxx:448
 AliMixInputEventHandler.cxx:449
 AliMixInputEventHandler.cxx:450
 AliMixInputEventHandler.cxx:451
 AliMixInputEventHandler.cxx:452
 AliMixInputEventHandler.cxx:453
 AliMixInputEventHandler.cxx:454
 AliMixInputEventHandler.cxx:455
 AliMixInputEventHandler.cxx:456
 AliMixInputEventHandler.cxx:457
 AliMixInputEventHandler.cxx:458
 AliMixInputEventHandler.cxx:459
 AliMixInputEventHandler.cxx:460
 AliMixInputEventHandler.cxx:461
 AliMixInputEventHandler.cxx:462
 AliMixInputEventHandler.cxx:463
 AliMixInputEventHandler.cxx:464
 AliMixInputEventHandler.cxx:465
 AliMixInputEventHandler.cxx:466
 AliMixInputEventHandler.cxx:467
 AliMixInputEventHandler.cxx:468
 AliMixInputEventHandler.cxx:469
 AliMixInputEventHandler.cxx:470
 AliMixInputEventHandler.cxx:471
 AliMixInputEventHandler.cxx:472
 AliMixInputEventHandler.cxx:473
 AliMixInputEventHandler.cxx:474
 AliMixInputEventHandler.cxx:475
 AliMixInputEventHandler.cxx:476
 AliMixInputEventHandler.cxx:477
 AliMixInputEventHandler.cxx:478
 AliMixInputEventHandler.cxx:479
 AliMixInputEventHandler.cxx:480
 AliMixInputEventHandler.cxx:481
 AliMixInputEventHandler.cxx:482
 AliMixInputEventHandler.cxx:483
 AliMixInputEventHandler.cxx:484
 AliMixInputEventHandler.cxx:485
 AliMixInputEventHandler.cxx:486
 AliMixInputEventHandler.cxx:487
 AliMixInputEventHandler.cxx:488
 AliMixInputEventHandler.cxx:489
 AliMixInputEventHandler.cxx:490
 AliMixInputEventHandler.cxx:491
 AliMixInputEventHandler.cxx:492
 AliMixInputEventHandler.cxx:493
 AliMixInputEventHandler.cxx:494
 AliMixInputEventHandler.cxx:495
 AliMixInputEventHandler.cxx:496
 AliMixInputEventHandler.cxx:497
 AliMixInputEventHandler.cxx:498
 AliMixInputEventHandler.cxx:499
 AliMixInputEventHandler.cxx:500
 AliMixInputEventHandler.cxx:501
 AliMixInputEventHandler.cxx:502
 AliMixInputEventHandler.cxx:503
 AliMixInputEventHandler.cxx:504
 AliMixInputEventHandler.cxx:505
 AliMixInputEventHandler.cxx:506
 AliMixInputEventHandler.cxx:507
 AliMixInputEventHandler.cxx:508
 AliMixInputEventHandler.cxx:509
 AliMixInputEventHandler.cxx:510
 AliMixInputEventHandler.cxx:511
 AliMixInputEventHandler.cxx:512
 AliMixInputEventHandler.cxx:513
 AliMixInputEventHandler.cxx:514
 AliMixInputEventHandler.cxx:515
 AliMixInputEventHandler.cxx:516
 AliMixInputEventHandler.cxx:517
 AliMixInputEventHandler.cxx:518
 AliMixInputEventHandler.cxx:519
 AliMixInputEventHandler.cxx:520
 AliMixInputEventHandler.cxx:521
 AliMixInputEventHandler.cxx:522
 AliMixInputEventHandler.cxx:523
 AliMixInputEventHandler.cxx:524
 AliMixInputEventHandler.cxx:525
 AliMixInputEventHandler.cxx:526
 AliMixInputEventHandler.cxx:527
 AliMixInputEventHandler.cxx:528
 AliMixInputEventHandler.cxx:529
 AliMixInputEventHandler.cxx:530
 AliMixInputEventHandler.cxx:531
 AliMixInputEventHandler.cxx:532
 AliMixInputEventHandler.cxx:533
 AliMixInputEventHandler.cxx:534
 AliMixInputEventHandler.cxx:535
 AliMixInputEventHandler.cxx:536
 AliMixInputEventHandler.cxx:537
 AliMixInputEventHandler.cxx:538
 AliMixInputEventHandler.cxx:539
 AliMixInputEventHandler.cxx:540
 AliMixInputEventHandler.cxx:541
 AliMixInputEventHandler.cxx:542
 AliMixInputEventHandler.cxx:543
 AliMixInputEventHandler.cxx:544
 AliMixInputEventHandler.cxx:545
 AliMixInputEventHandler.cxx:546
 AliMixInputEventHandler.cxx:547
 AliMixInputEventHandler.cxx:548
 AliMixInputEventHandler.cxx:549
 AliMixInputEventHandler.cxx:550
 AliMixInputEventHandler.cxx:551
 AliMixInputEventHandler.cxx:552
 AliMixInputEventHandler.cxx:553
 AliMixInputEventHandler.cxx:554
 AliMixInputEventHandler.cxx:555
 AliMixInputEventHandler.cxx:556
 AliMixInputEventHandler.cxx:557
 AliMixInputEventHandler.cxx:558
 AliMixInputEventHandler.cxx:559
 AliMixInputEventHandler.cxx:560
 AliMixInputEventHandler.cxx:561
 AliMixInputEventHandler.cxx:562
 AliMixInputEventHandler.cxx:563
 AliMixInputEventHandler.cxx:564
 AliMixInputEventHandler.cxx:565
 AliMixInputEventHandler.cxx:566
 AliMixInputEventHandler.cxx:567
 AliMixInputEventHandler.cxx:568
 AliMixInputEventHandler.cxx:569
 AliMixInputEventHandler.cxx:570
 AliMixInputEventHandler.cxx:571
 AliMixInputEventHandler.cxx:572
 AliMixInputEventHandler.cxx:573
 AliMixInputEventHandler.cxx:574
 AliMixInputEventHandler.cxx:575
 AliMixInputEventHandler.cxx:576
 AliMixInputEventHandler.cxx:577
 AliMixInputEventHandler.cxx:578
 AliMixInputEventHandler.cxx:579
 AliMixInputEventHandler.cxx:580
 AliMixInputEventHandler.cxx:581
 AliMixInputEventHandler.cxx:582
 AliMixInputEventHandler.cxx:583
 AliMixInputEventHandler.cxx:584
 AliMixInputEventHandler.cxx:585
 AliMixInputEventHandler.cxx:586
 AliMixInputEventHandler.cxx:587
 AliMixInputEventHandler.cxx:588
 AliMixInputEventHandler.cxx:589
 AliMixInputEventHandler.cxx:590
 AliMixInputEventHandler.cxx:591
 AliMixInputEventHandler.cxx:592
 AliMixInputEventHandler.cxx:593
 AliMixInputEventHandler.cxx:594
 AliMixInputEventHandler.cxx:595
 AliMixInputEventHandler.cxx:596
 AliMixInputEventHandler.cxx:597
 AliMixInputEventHandler.cxx:598
 AliMixInputEventHandler.cxx:599
 AliMixInputEventHandler.cxx:600
 AliMixInputEventHandler.cxx:601
 AliMixInputEventHandler.cxx:602
 AliMixInputEventHandler.cxx:603
 AliMixInputEventHandler.cxx:604
 AliMixInputEventHandler.cxx:605
 AliMixInputEventHandler.cxx:606
 AliMixInputEventHandler.cxx:607
 AliMixInputEventHandler.cxx:608
 AliMixInputEventHandler.cxx:609
 AliMixInputEventHandler.cxx:610
 AliMixInputEventHandler.cxx:611
 AliMixInputEventHandler.cxx:612
 AliMixInputEventHandler.cxx:613
 AliMixInputEventHandler.cxx:614
 AliMixInputEventHandler.cxx:615
 AliMixInputEventHandler.cxx:616
 AliMixInputEventHandler.cxx:617
 AliMixInputEventHandler.cxx:618
 AliMixInputEventHandler.cxx:619
 AliMixInputEventHandler.cxx:620
 AliMixInputEventHandler.cxx:621
 AliMixInputEventHandler.cxx:622
 AliMixInputEventHandler.cxx:623
 AliMixInputEventHandler.cxx:624
 AliMixInputEventHandler.cxx:625
 AliMixInputEventHandler.cxx:626
 AliMixInputEventHandler.cxx:627