]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/EventMixing/AliAnalysisTaskMixInfo.cxx
AliMixInputHandlerInfo : BeginEvent function for each input handler after fChain...
[u/mrichter/AliRoot.git] / ANALYSIS / EventMixing / AliAnalysisTaskMixInfo.cxx
index c930e7487423b3d003b71b566a907ce16cf17473..7269ea6a2ebcd8d4bb3fd4073d99a58ab2236c01 100644 (file)
@@ -4,11 +4,18 @@
 // AliAnalysisTaskMixInfo is task
 // for mixing info
 //
+// Mixing info can be enabled by setting one of following lines in UserCreateOutput() in your task
+//       // prints mixing info
+//       AliLog::SetClassDebugLevel("AliAnalysisTaskMixInfo", AliLog::kDebug);
+//       // prints mixing info + event info for both (main and mixed) events
+//       AliLog::SetClassDebugLevel("AliAnalysisTaskMixInfo", AliLog::kDebug+1);
+//
 // authors:
 //          Martin Vala (martin.vala@cern.ch)
 //
 
 #include <TList.h>
+#include <TObjString.h>
 
 #include "AliAnalysisManager.h"
 
 #include "AliAnalysisTaskMixInfo.h"
 #include "AliMixInfo.h"
 #include "AliMixEventPool.h"
+#include "AliMixEventCutObj.h"
+
 
 ClassImp(AliAnalysisTaskMixInfo)
 
 //________________________________________________________________________
 AliAnalysisTaskMixInfo::AliAnalysisTaskMixInfo(const char *name)
    : AliAnalysisTaskSE(name),
+     fInputEHMain(0),
+     fInputEHMix(0),
      fOutputList(0),
      fMixInfo(0),
      fCurrentEntryTmp(-1),
@@ -52,22 +63,21 @@ void AliAnalysisTaskMixInfo::UserCreateOutputObjects()
    SetDebugForAllClasses();
    fOutputList = new TList();
    fOutputList->SetOwner(kTRUE);
-   if (!fMixInfo) InitMixInfo();
 
-   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-   AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
-   if (inEvHMain) {
-      AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
-      if (mixEH) {
-         AliMixEventPool *evPool = mixEH->GetEventPool();
-         if (evPool) {
-            evPool->SetBufferSize(mixEH->BufferSize());
-            evPool->SetMixNumber(mixEH->MixNumber());
-            fMixInfo->SetEventPool(evPool);
-         }
+   // sets all Inuput Handler pointers
+   InitInputHandlers();
+
+   // inits mix info
+   InitMixInfo();
+
+   if (fInputEHMix) {
+      AliMixEventPool *evPool = fInputEHMix->GetEventPool();
+      if (evPool) {
+         evPool->SetBufferSize(fInputEHMix->BufferSize());
+         evPool->SetMixNumber(fInputEHMix->MixNumber());
+         fMixInfo->SetEventPool(evPool);
       }
    }
-
    if (fMixInfo) fOutputList->Add(fMixInfo);
 
    // Post output data.
@@ -79,23 +89,14 @@ void AliAnalysisTaskMixInfo::UserExec(Option_t *)
 {
    // Main loop
    // Called for each event
-//     if (fCurrentEntry != fCurrentEntryTmp) {
-//       fCurrentEntryTmp = fCurrentEntry;
-   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-   AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
-   if (inEvHMain) {
-      AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
-      if (fMixInfo && mixEH) {
-         if (mixEH->BufferSize() > 1) {
-            if (mixEH->NumberMixedTimes() >= mixEH->BufferSize())
-               fMixInfo->FillHistogram(AliMixInfo::kMainEvents, mixEH->CurrentBinIndex());
-         } else {
-            fMixInfo->FillHistogram(AliMixInfo::kMainEvents, mixEH->CurrentBinIndex());
-         }
-
-      if (mixEH->CurrentEntryMix() >= 0)
-         AliDebug(AliLog::kDebug + 1, Form("Main %lld %d [%lld,%lld] %d", mixEH->CurrentEntry(), mixEH->NumberMixed(), mixEH->CurrentEntryMain(), mixEH->CurrentEntryMix(), mixEH->NumberMixed()));
+   if (fMixInfo && fInputEHMix) {
+      if (fInputEHMix->BufferSize() > 1) {
+         if (fInputEHMix->NumberMixedTimes() >= fInputEHMix->BufferSize())
+            fMixInfo->FillHistogram(AliMixInfo::kMainEvents, fInputEHMix->CurrentBinIndex());
+      } else {
+         fMixInfo->FillHistogram(AliMixInfo::kMainEvents, fInputEHMix->CurrentBinIndex());
       }
+      AliDebug(AliLog::kDebug, Form("Main %lld %d [%lld,%lld] %d", fInputEHMix->CurrentEntry(), fInputEHMix->CurrentBinIndex(), fInputEHMix->CurrentEntryMain(), fInputEHMix->CurrentEntryMix(), fInputEHMix->NumberMixed()));
    }
    // Post output data.
    PostData(1, fOutputList);
@@ -105,18 +106,19 @@ void AliAnalysisTaskMixInfo::UserExec(Option_t *)
 void AliAnalysisTaskMixInfo::UserExecMix(Option_t *)
 {
    // UserExecMix
-   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-   AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
-   if (inEvHMain) {
-      AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
-      if (!mixEH) return;
-      if (fMixInfo) fMixInfo->FillHistogram(AliMixInfo::kMixedEvents, mixEH->CurrentBinIndex());
-      if (mixEH->CurrentEntryMix() < 0) {
-         AliError("Mix entry is -1 and it should not happen !!!!!");
-         return ;
-      }
-      AliDebug(AliLog::kDebug, Form("Mixing %lld %d [%lld,%lld] %d", mixEH->CurrentEntry(), mixEH->NumberMixed(), mixEH->CurrentEntryMain(), mixEH->CurrentEntryMix(), mixEH->CurrentBinIndex()));
+
+   if (!fInputEHMix) return;
+
+   // fills bin index (even when it is -1, so we know out of range combinations)
+   if (fMixInfo) fMixInfo->FillHistogram(AliMixInfo::kMixedEvents, fInputEHMix->CurrentBinIndex());
+
+   // just test
+   if (fInputEHMix->CurrentEntryMix() < 0) {
+      AliError("Mix entry is -1 and it should not happen !!!!!");
+      return ;
    }
+   AliDebug(AliLog::kDebug, Form("Mixing %lld %d [%lld,%lld] %d", fInputEHMix->CurrentEntry(), fInputEHMix->CurrentBinIndex(), fInputEHMix->CurrentEntryMain(), fInputEHMix->CurrentEntryMix(), fInputEHMix->NumberMixed()));
+   if (AliLog::GetDebugLevel("", IsA()->GetName()) > AliLog::kDebug) PrintEventInfo();
    // Post output data.
    PostData(1, fOutputList);
 }
@@ -180,35 +182,57 @@ void AliAnalysisTaskMixInfo::SetDebugForAllClasses()
    AliDebug(AliLog::kDebug + 10, "->");
 }
 
-
+//_____________________________________________________________________________
 void AliAnalysisTaskMixInfo::InitMixInfo()
 {
    //
    // Init mixing info
    //
-   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-   AliMultiInputEventHandler *inEvHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
-   if (inEvHMain) {
-      //         AliMixEventInputHandler *mixEH = dynamic_cast<AliMixEventInputHandler *>(inEvHMain->MixingHandler());
-      AliMixInputEventHandler *mixEH = dynamic_cast<AliMixInputEventHandler *>(inEvHMain->GetFirstMultiInputHandler());
-      if (mixEH) {
-         fMixInfo = new AliMixInfo("mixInfo", "Mix title");
-//             if(fMixInfo) fMixInfo->SetOutputList(fOutputList);
-         AliMixEventPool *evPool = mixEH->GetEventPool();
-         if (!evPool) {
-            //             TList *list = new TList;
-            if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMainEvents, 1, 1, 2);
-            if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMixedEvents, 1, 1, 2);
-         } else {
-            if (evPool->NeedInit()) evPool->Init();
-            Int_t num = evPool->GetListOfEntryLists()->GetEntriesFast();
-            if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMainEvents, num, 1, num + 1);
-            if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMixedEvents, num, 1, num + 1);
-         }
+   if (fInputEHMix) {
+      fMixInfo = new AliMixInfo("mixInfo", "Mix title");
+      AliMixEventPool *evPool = fInputEHMix->GetEventPool();
+      if (!evPool) {
+         //             TList *list = new TList;
+         if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMainEvents, 1, 1, 2);
+         if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMixedEvents, 1, 1, 2);
       } else {
-         AliError("No mixEH");
+         if (evPool->NeedInit()) evPool->Init();
+         Int_t num = evPool->GetListOfEntryLists()->GetEntriesFast();
+         if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMainEvents, num, 1, num + 1);
+         if (fMixInfo) fMixInfo->CreateHistogram(AliMixInfo::kMixedEvents, num, 1, num + 1);
       }
-   } else {
-      AliError("No inEvHMain");
+   }
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskMixInfo::PrintEventInfo()
+{
+   //
+   // Prints event info for all event mxing cuts
+   //
+   if (fInputEHMix) {
+      TObjArrayIter next(fInputEHMix->GetEventPool()->GetListOfEventCuts());
+      AliMixEventCutObj *cut;
+      AliInputEventHandler *ihMain = fInputEHMain->GetFirstInputEventHandler();
+      AliMultiInputEventHandler *ihMultiMix = fInputEHMix->GetFirstMultiInputHandler();
+      AliInputEventHandler *ihMix = 0;
+      if (ihMultiMix) ihMix = ihMultiMix->GetFirstInputEventHandler();
+      if (!ihMix) return;
+      while ((cut = (AliMixEventCutObj *) next())) {
+         cut->PrintValues(ihMain->GetEvent(), ihMix->GetEvent());
+      }
+   }
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskMixInfo::InitInputHandlers()
+{
+   //
+   // Sets needed input handlers
+   //
+   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+   fInputEHMain = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
+   if (fInputEHMain) {
+      fInputEHMix = dynamic_cast<AliMixInputEventHandler *>(fInputEHMain->GetFirstMultiInputHandler());
    }
 }