From 5d5c6fed5dc14c00ed08ef5aa267795634a3b910 Mon Sep 17 00:00:00 2001
From: Tadej Novak <tadej.novak@cern.ch>
Date: Thu, 7 Jan 2021 15:34:56 +0100
Subject: [PATCH] Treat complete and incomplete bookkeepers independently when
 writing

---
 .../Root/BookkeeperTool.cxx                   | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx b/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx
index 8bfc710ce92f..30fdde2d82f1 100644
--- a/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx
+++ b/Event/EventBookkeeperTools/Root/BookkeeperTool.cxx
@@ -174,6 +174,7 @@ StatusCode BookkeeperTool::metaDataStop()
       name.append("_weight_");
       name.append(std::to_string(i));
     }
+    std::string incompleteName = "Incomplete" + name;
 
     // In MP we might already have them written out
     if (outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(name)) {
@@ -182,20 +183,24 @@ StatusCode BookkeeperTool::metaDataStop()
         ATH_MSG_ERROR("Could not get " << name << " CutBookkeepers from output MetaDataStore");
         return StatusCode::FAILURE;
       }
+      xAOD::CutFlowHelpers::updateContainer(complete, m_completeContainers.at(i));
+    } else {
+      ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.cont[i]), name));
+      ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.aux[i]), name + "Aux."));
+    }
+
+    if (outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(incompleteName)) {    
       xAOD::CutBookkeeperContainer *incomplete{};
-      if (!outputMetaStore()->retrieve(incomplete, "Incomplete" + name).isSuccess()) {
-        ATH_MSG_ERROR("Could not get " << "Incomplete" + name << " CutBookkeepers from output MetaDataStore");
+      if (!outputMetaStore()->retrieve(incomplete, incompleteName).isSuccess()) {
+        ATH_MSG_ERROR("Could not get " << incompleteName << " CutBookkeepers from output MetaDataStore");
         return StatusCode::FAILURE;
       }
-      xAOD::CutFlowHelpers::updateContainer(complete, m_completeContainers.at(i));
       xAOD::CutFlowHelpers::updateContainer(incomplete, m_incompleteContainers.at(i));
     } else {
-      ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.cont[i]), name));
-      ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.aux[i]), name + "Aux."));
       // Only write non-empty incomplete containers
       if (i > 0 && !m_incompleteContainers.at(i)->empty()) {
-        ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.cont[i]), "Incomplete" + name));
-        ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.aux[i]), "Incomplete" + name + "Aux."));
+        ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.cont[i]), incompleteName));
+        ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.aux[i]), incompleteName + "Aux."));
       }
     }
   }
-- 
GitLab