From f388b53deef78e288d6fc0195d44b31ddb416b46 Mon Sep 17 00:00:00 2001
From: Hass AbouZeid <hass.abouzeid@cern.ch>
Date: Sat, 17 Jun 2017 15:29:54 +0000
Subject: [PATCH] Merge branch 'reco-tf-overlay' into '21.0'

Add MC+MC Event Overlay (OverlayPool) to Reco_tf chain enablable by "doOverlay"

See merge request !2727

Former-commit-id: 3c485642d461c57c4d2b7e72416d4c0e9d2f5774
---
 .../python/overlayTransformUtils.py            | 18 ++++++++++++------
 .../RecJobTransforms/scripts/Reco_tf.py        | 10 ++++++++++
 Tools/PyJobTransforms/python/trfArgClasses.py  |  3 +++
 3 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/Event/EventOverlay/EventOverlayJobTransforms/python/overlayTransformUtils.py b/Event/EventOverlay/EventOverlayJobTransforms/python/overlayTransformUtils.py
index cbd6df21cae..c451564d61a 100644
--- a/Event/EventOverlay/EventOverlayJobTransforms/python/overlayTransformUtils.py
+++ b/Event/EventOverlay/EventOverlayJobTransforms/python/overlayTransformUtils.py
@@ -193,10 +193,16 @@ def addOverlayHITARMakerSubstep(executorSet):
     executorSet.add(BSJobSplitterExecutor(name = 'HITARMaker', skeletonFile = 'EventOverlayJobTransforms/skeleton.HITARMaker_tf.py', substep='HITARMaker',
                                           inData = ['TXT_EVENTID'], outData = ['TAR_CONFIG']))
 
-def addOverlay_PoolSubstep(executorSet):
-    executorSet.add(athenaExecutor(name = 'OverlayPool', skeletonFile = 'EventOverlayJobTransforms/skeleton.OverlayPool_tf.py',
-                                   substep = 'overlayPOOL', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz',
-                                   inData = ['HITS', 'RDO_BKG'], outData = ['RDO', 'RDO_SGNL']))
+def addOverlay_PoolSubstep(executorSet, inRecoChain = False):
+    executor = athenaExecutor(name = 'OverlayPool', skeletonFile = 'EventOverlayJobTransforms/skeleton.OverlayPool_tf.py',
+                              substep = 'overlayPOOL', tryDropAndReload = False, perfMonFile = 'ntuple.pmon.gz',
+                              inData = [('HITS', 'RDO_BKG')], outData = ['RDO', 'RDO_SGNL'])
+
+    if inRecoChain:
+        executor.inData = []
+        executor.outData = []
+ 
+    executorSet.add(executor)
 
 def addOverlay_BSSubstep(executorSet):
     executorSet.add(athenaExecutor(name = 'OverlayBS', skeletonFile = 'EventOverlayJobTransforms/skeleton.OverlayBS_tf.py',
@@ -213,9 +219,9 @@ def appendOverlayBSFilterSubstep(trf):
     addOverlayBSFilterSubstep(executor)
     trf.appendToExecutorSet(executor)
 
-def appendOverlay_PoolSubstep(trf):
+def appendOverlay_PoolSubstep(trf, inRecoChain = False):
     executor = set()
-    addOverlay_PoolSubstep(executor)
+    addOverlay_PoolSubstep(executor, inRecoChain)
     trf.appendToExecutorSet(executor)
 
 def appendOverlay_BSSubstep(trf):
diff --git a/Reconstruction/RecJobTransforms/scripts/Reco_tf.py b/Reconstruction/RecJobTransforms/scripts/Reco_tf.py
index 3173f7a311d..5a4f61b881d 100755
--- a/Reconstruction/RecJobTransforms/scripts/Reco_tf.py
+++ b/Reconstruction/RecJobTransforms/scripts/Reco_tf.py
@@ -80,6 +80,16 @@ def getTransform(RAWtoALL=False):
     except ImportError, e:
         msg.warning('Failed to import digitisation arguments ({0}). Digitisation substep will not be available.'.format(e))
         
+    # Again, protect core functionality from too tight a dependence on EventOverlay
+    try:
+        from EventOverlayJobTransforms.overlayTrfArgs import addOverlayTrfArgs, addOverlayPoolTrfArgs
+        from EventOverlayJobTransforms.overlayTransformUtils import appendOverlay_PoolSubstep
+        addOverlayTrfArgs(trf.parser)
+        addOverlayPoolTrfArgs(trf.parser)
+        appendOverlay_PoolSubstep(trf, True)
+    except ImportError, e:
+        msg.warning('Failed to import overlay arguments ({0}). Event overlay substep will not be available.'.format(e))
+    
     # Again, protect core functionality from too tight a dependence on PATJobTransforms
     try:
         from PATJobTransforms.PATTransformUtils import addPhysValidationFiles, addValidationArguments, appendPhysValidationSubstep
diff --git a/Tools/PyJobTransforms/python/trfArgClasses.py b/Tools/PyJobTransforms/python/trfArgClasses.py
index 82ae17b9c1b..0794dfb1da0 100644
--- a/Tools/PyJobTransforms/python/trfArgClasses.py
+++ b/Tools/PyJobTransforms/python/trfArgClasses.py
@@ -2057,11 +2057,14 @@ class argSubstepSteering(argSubstep):
     # usecases of steering. 
     # "no" - a convenience null option for production managers, does nothing
     # "doRDO_TRIG" - run split trigger for Reco_tf and friends
+    # "doOverlay" - run event overlay on premixed RDOs instead of standard HITtoRDO digitization
     # "afterburn" - run the B decay afterburner for event generation
     # "doRAWtoALL" - produce all DESDs and AODs directly from bytestream
     steeringAlises = {
                       'no': {},
                       'doRDO_TRIG': {'RAWtoESD': [('in', '-', 'RDO'), ('in', '+', 'RDO_TRIG'), ('in', '-', 'BS')]},
+                      'doOverlay': {'HITtoRDO': [('in', '-', 'HITS'), ('out', '-', 'RDO'), ('out', '-', 'RDO_FILT')],
+                                    'OverlayPool': [('in', '+', ('HITS', 'RDO_BKG')), ('out', '+', 'RDO')]},
                       'afterburn': {'generate': [('out', '-', 'EVNT')]},
                       'doRAWtoALL': {'RAWtoALL': [('in', '+', 'BS'), ('in', '+', 'RDO'), ('in', '+', 'RDO_FTK'),
                                                   ('in', '+', 'DRAW_ZMUMU'), ('in', '+', 'DRAW_ZEE'), ('in', '+', 'DRAW_EMU'), ('in', '+', 'DRAW_RPVLL'), 
-- 
GitLab