From a01d1541bf0fa8f401ea97cc3294a57e5e791894 Mon Sep 17 00:00:00 2001
From: Tadej Novak <tadej.novak@cern.ch>
Date: Fri, 30 Oct 2020 15:01:22 +0100
Subject: [PATCH] Dump all variations in BookkeeperDumperTool

---
 .../BookkeeperDumperTool.h                    |   3 +-
 .../Root/BookkeeperDumperTool.cxx             | 100 ++++++++++++------
 Event/EventBookkeeperTools/util/dump-cbk.cxx  |   1 +
 3 files changed, 71 insertions(+), 33 deletions(-)

diff --git a/Event/EventBookkeeperTools/EventBookkeeperTools/BookkeeperDumperTool.h b/Event/EventBookkeeperTools/EventBookkeeperTools/BookkeeperDumperTool.h
index c9339ba270e..150e2acfd49 100644
--- a/Event/EventBookkeeperTools/EventBookkeeperTools/BookkeeperDumperTool.h
+++ b/Event/EventBookkeeperTools/EventBookkeeperTools/BookkeeperDumperTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef EVENT_BOOKKEEPER_TOOLS__BOOKKEEPER_DUMPER_TOOL_H
@@ -46,6 +46,7 @@ public:
   virtual StatusCode endInputFile(const SG::SourceID &) final { return StatusCode::SUCCESS; }
 #endif
 
+  Gaudi::Property<bool> m_allVariations{this, "AllVariations", false, "Dump all variations"};
   Gaudi::Property<bool> m_standaloneMode{this, "StandaloneMode", false, "Dump on initialize when running standalone"};
 };
 
diff --git a/Event/EventBookkeeperTools/Root/BookkeeperDumperTool.cxx b/Event/EventBookkeeperTools/Root/BookkeeperDumperTool.cxx
index e3c7770d6ee..b7bf2183ef5 100644
--- a/Event/EventBookkeeperTools/Root/BookkeeperDumperTool.cxx
+++ b/Event/EventBookkeeperTools/Root/BookkeeperDumperTool.cxx
@@ -1,12 +1,12 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
  * @file BookkeeperDumperTool.cxx
  * @brief Implementation of class BookkeeperDumperTool
  */
- 
+
 #include <xAODCutFlow/CutBookkeeperContainer.h>
 
 #include <EventBookkeeperTools/BookkeeperDumperTool.h>
@@ -34,41 +34,77 @@ StatusCode BookkeeperDumperTool::initialize()
 StatusCode BookkeeperDumperTool::beginInputFile()
 {
   // Complete CutBookkeepers
-  if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>("CutBookkeepers")) {
-    const xAOD::CutBookkeeperContainer* completeBookkeepers = nullptr;
-    ATH_CHECK(inputMetaStore()->retrieve(completeBookkeepers, "CutBookkeepers"));
+  size_t index{};
+  while (true)
+  {
+    std::string name{"CutBookkeepers"};
+    if (index > 0) {
+      name.append("_weight_");
+      name.append(std::to_string(index));
+    }
 
-    ATH_MSG_INFO("Complete CBK size = " << completeBookkeepers->size());
-    for (const xAOD::CutBookkeeper *cbk : *completeBookkeepers) {
-      ATH_MSG_INFO("Complete CBK"
-                   << " name= " << cbk->name()
-                   << " cycle=" << cbk->cycle()
-                   << " stream=" << cbk->inputStream()
-                   << " N=" << cbk->nAcceptedEvents()
-                   << " W=" << cbk->sumOfEventWeights()
-                   << " nc=" << cbk->nChildren());
+    if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(name)) {
+      const xAOD::CutBookkeeperContainer* completeBookkeepers{};
+      ATH_CHECK(inputMetaStore()->retrieve(completeBookkeepers, name));
+
+      ATH_MSG_INFO("Complete CBK " << name << " size = " << completeBookkeepers->size());
+      for (const xAOD::CutBookkeeper *cbk : *completeBookkeepers) {
+        ATH_MSG_INFO("Complete CBK"
+                    << " name= " << cbk->name()
+                    << " cycle=" << cbk->cycle()
+                    << " stream=" << cbk->inputStream()
+                    << " N=" << cbk->nAcceptedEvents()
+                    << " W=" << cbk->sumOfEventWeights()
+                    << " nc=" << cbk->nChildren());
+      }
+      index++;
+    } else {
+      if (index == 0) {
+        ATH_MSG_INFO("No complete CutBookkeepers found");
+      }
+      break;
+    }
+
+    if (!m_allVariations) {
+      break;
     }
-  } else {
-    ATH_MSG_INFO("No complete CutBookkeepers found");
   }
 
   // Incomplete CutBookkeepers
-  if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>("IncompleteCutBookkeepers")) {
-    const xAOD::CutBookkeeperContainer* incompleteBookkeepers = nullptr;
-    ATH_CHECK(inputMetaStore()->retrieve(incompleteBookkeepers, "IncompleteCutBookkeepers"));
+  index = 0;
+  while (true)
+  {
+    std::string name{"IncompleteCutBookkeepers"};
+    if (index > 0) {
+      name.append("_weight_");
+      name.append(std::to_string(index));
+    }
 
-    ATH_MSG_INFO("Incomplete CBK size = " << incompleteBookkeepers->size());
-    for (const xAOD::CutBookkeeper *cbk : *incompleteBookkeepers) {
-      ATH_MSG_INFO("Incomplete CBK"
-                   << " name= " << cbk->name()
-                   << " cycle=" << cbk->cycle()
-                   << " stream=" << cbk->inputStream()
-                   << " N=" << cbk->nAcceptedEvents()
-                   << " W=" << cbk->sumOfEventWeights()
-                   << " nc=" << cbk->nChildren());
+    if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(name)) {
+      const xAOD::CutBookkeeperContainer* incompleteBookkeepers{};
+      ATH_CHECK(inputMetaStore()->retrieve(incompleteBookkeepers, name));
+
+      ATH_MSG_INFO("Incomplete CBK " << name << " size = " << incompleteBookkeepers->size());
+      for (const xAOD::CutBookkeeper *cbk : *incompleteBookkeepers) {
+        ATH_MSG_INFO("Incomplete CBK"
+                    << " name= " << cbk->name()
+                    << " cycle=" << cbk->cycle()
+                    << " stream=" << cbk->inputStream()
+                    << " N=" << cbk->nAcceptedEvents()
+                    << " W=" << cbk->sumOfEventWeights()
+                    << " nc=" << cbk->nChildren());
+      }
+      index++;
+    } else {
+      if (index == 0) {
+        ATH_MSG_INFO("No incomplete CutBookkeepers found");
+      }
+      break;
+    }
+
+    if (!m_allVariations) {
+      break;
     }
-  } else {
-    ATH_MSG_INFO("No incomplete CutBookkeepers found");
   }
 
   // Complete PDF CutBookkeepers
@@ -89,9 +125,9 @@ StatusCode BookkeeperDumperTool::beginInputFile()
   } else {
     ATH_MSG_INFO("No PDF CutBookkeepers found");
   }
-  
+
   // Incomplete PDF CutBookkeepers
-  if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>("IncompletePDFSumOfWeights")) {    
+  if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>("IncompletePDFSumOfWeights")) {
     const xAOD::CutBookkeeperContainer* pdfBookkeepers = nullptr;
     ATH_CHECK(inputMetaStore()->retrieve(pdfBookkeepers, "IncompletePDFSumOfWeights"));
 
diff --git a/Event/EventBookkeeperTools/util/dump-cbk.cxx b/Event/EventBookkeeperTools/util/dump-cbk.cxx
index cb72ff2fbec..2f50576eb83 100644
--- a/Event/EventBookkeeperTools/util/dump-cbk.cxx
+++ b/Event/EventBookkeeperTools/util/dump-cbk.cxx
@@ -66,6 +66,7 @@ int main(int argc, char **argv)
   // Retrieve the tool
   asg::AnaToolHandle<asg::AsgMetadataTool> tool("BookkeeperDumperTool/BookkeeperDumperTool");
   ANA_CHECK(tool.setProperty("StandaloneMode", true));
+  ANA_CHECK(tool.setProperty("AllVariations", true));
   ANA_CHECK(tool.retrieve());
 
   // Trigger finalization of all services and tools created by the Gaudi Application
-- 
GitLab