From b249c1504bf248785efcd9d7796b39f4ae3046be Mon Sep 17 00:00:00 2001
From: John Chapman <jchapman@cern.ch>
Date: Thu, 20 Sep 2018 15:46:10 +0200
Subject: [PATCH] Patch /TagInfo metadata container with information from the
 input HITS file

The `/TagInfo` metadata container written out by MC Overlay jobs is currently
based upon the container from the pre-mixed RDO file. This commit adds
any additional key-value pairs from the `/TagInfo` metadata container of the
input hard-scatter HITS file.

A more robust solution where the two input containers are somehow merged will
be sought, but this commit should fix most issues in the short term.


Former-commit-id: 1ead2cc9abd5ad03a73811b3625e52c3eecd1458
---
 .../python/OverlayPoolReadMetaData.py           | 17 +++++++++++++----
 .../share/skeleton.OverlayPool_tf.py            | 10 ++++++++++
 .../OverlayCommonAlgs/python/OverlayFlags.py    |  7 +++++++
 3 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/Event/EventOverlay/EventOverlayJobTransforms/python/OverlayPoolReadMetaData.py b/Event/EventOverlay/EventOverlayJobTransforms/python/OverlayPoolReadMetaData.py
index 6074548c6066..1f85bffd76eb 100644
--- a/Event/EventOverlay/EventOverlayJobTransforms/python/OverlayPoolReadMetaData.py
+++ b/Event/EventOverlay/EventOverlayJobTransforms/python/OverlayPoolReadMetaData.py
@@ -396,14 +396,23 @@ def tagInfoMetaDataCheck(sigtaginfodict,pileuptaginfodict):
     result = True
     """Check the metadata for pre-mixed pileup RDO File"""
     pileupkeys = pileuptaginfodict.keys()
+    logOverlayPoolReadMetadata.debug("Signal /TagInfo ", sigtaginfodict)
+    logOverlayPoolReadMetadata.debug("Pileup /TagInfo ", pileuptaginfodict)
     sigkeys = sigtaginfodict.keys()
     pileupType = "PreMixed"
+    sigOnlyDict = dict()
     sigOnlyKeySet = set(sigkeys).difference(set(pileupkeys))
-    logOverlayPoolReadMetadata.info("The following keys only appear in Signal /TagInfo MetaData:")
-    print sigOnlyKeySet
+    logOverlayPoolReadMetadata.debug("The following keys only appear in Signal /TagInfo MetaData:")
+    logOverlayPoolReadMetadata.debug(sigOnlyKeySet)
+    for key in sigOnlyKeySet:
+        sigOnlyDict[key] = sigtaginfodict[key]
+        logOverlayPoolReadMetadata.debug("key: ", key, "value: ", sigtaginfodict[key])
+        pass
+    from OverlayCommonAlgs.OverlayFlags import overlayFlags
+    overlayFlags.extraTagInfoPairs = sigOnlyDict
     keysToCompareSet = set(sigkeys).intersection(set(pileupkeys))
-    logOverlayPoolReadMetadata.info("The following keys appear in Signal and PreMixed /TagInfo MetaData:")
-    print keysToCompareSet
+    logOverlayPoolReadMetadata.debug("The following keys appear in Signal and PreMixed /TagInfo MetaData:")
+    logOverlayPoolReadMetadata.debug(keysToCompareSet)
     return result
 
 def readInputFileMetadata():
diff --git a/Event/EventOverlay/EventOverlayJobTransforms/share/skeleton.OverlayPool_tf.py b/Event/EventOverlay/EventOverlayJobTransforms/share/skeleton.OverlayPool_tf.py
index a03e83d9bb01..b33dc8003e42 100644
--- a/Event/EventOverlay/EventOverlayJobTransforms/share/skeleton.OverlayPool_tf.py
+++ b/Event/EventOverlay/EventOverlayJobTransforms/share/skeleton.OverlayPool_tf.py
@@ -206,5 +206,15 @@ if hasattr(runArgs, "postExec") and runArgs.postExec != 'NONE':
     for cmd in runArgs.postExec:
         exec(cmd)
 
+from AthenaCommon.AppMgr import ServiceMgr
+
+#Patch /TagInfo metadata container
+from OverlayCommonAlgs.OverlayFlags import overlayFlags
+for key in overlayFlags.extraTagInfoPairs.get_Value().keys():
+    ServiceMgr.TagInfoMgr.ExtraTagValuePairs += [str(key), str(overlayFlags.extraTagInfoPairs.get_Value()[key])]
+if hasattr(runArgs, 'AMITag'):
+    if runArgs.AMITag != "NONE":
+        ServiceMgr.TagInfoMgr.ExtraTagValuePairs += ["AMITag", runArgs.AMITag]
+
 #print "OverlayPool_tf.py: at the end. job=\n", job
 print "\nOverlayPool_tf.py: at the end. ServiceMgr=\n", ServiceMgr
diff --git a/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py b/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
index b884efddfa71..96158c32cbef 100644
--- a/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
+++ b/Event/EventOverlay/OverlayCommonAlgs/python/OverlayFlags.py
@@ -57,6 +57,13 @@ class outputStore(JobProperty):
     allowedTypes=['str']
     StoredValue = 'StoreGateSvc'
 
+class extraTagInfoPairs(JobProperty):
+    """ workaround to correctly populate the /TagInfo metadata container
+    """
+    statusOn=False
+    allowedTypes=['dict']
+    StoredValue=dict()
+
 ## Definition and registration of the simulation flag container
 
 class Overlay_Flags(JobPropertyContainer):
-- 
GitLab