From 1428201699536f354bcbe864e7e82e9dda24fef0 Mon Sep 17 00:00:00 2001
From: Tim Martin <Tim.Martin@cern.ch>
Date: Tue, 29 Oct 2019 16:12:14 +0100
Subject: [PATCH]    * The initial navigation collections produced by the
 L1Decoder are prefixed "HLTNav_" (like all other navigation collections)    *
 The initial ROI and initial Rec ROI collections produced by the L1Decoder are
 prefixed "HLT_" (like all other persistifiable collections produced during
 HLT execution)    * The white listing of ROI containers in the `recordable()`
 checking function is removed.    * The white listing of "HLTNav_" containers
 in the `recordable()` checking function is changed to an ERROR.    * All
 "HLTNav_" containers are added to the EDM (online) via TriggerConfig.py so
 they should never be specified by hand in TriggerEDMRun3.py    * Added some
 missing navigation containers to the collection script (L1Decoder fullscan
 output and HLT summary maker output)    * When exporting "HLTNav_", dynamic
 variables were removed. The output of HypoAlgs requires dynamic variables to
 re-map element links.    * Both decObj and decObjFilterOut are now passed to
 triggerOutputCfg such that the sub-set in decObjFilterOut get the correct aux
 dyn added.

---
 .../python/MuonBytestreamDecodeConfig.py      |  2 +-
 .../MuonConfig/python/MuonRdoDecodeConfig.py  |  8 +--
 .../share/skeleton.RDOtoRDOtrigger.py         |  4 +-
 .../TrigL2MuonSA/MuFastSteering.h             |  4 +-
 .../python/TrigL2MuonSAConfig_newJO.py        |  4 +-
 .../TrigT2CaloCommon/python/CaloDef.py        |  4 +-
 .../share/testDataAccessService.py            |  4 +-
 .../L1Decoder/python/L1DecoderConfig.py       | 45 ++++++++--------
 .../L1Decoder/src/CTPUnpackingTool.h          |  1 +
 .../L1Decoder/src/EMRoIsUnpackingTool.h       |  4 +-
 .../L1Decoder/src/JRoIsUnpackingTool.h        |  6 +--
 Trigger/TrigSteer/L1Decoder/src/L1Decoder.h   |  4 +-
 .../L1Decoder/src/METRoIsUnpackingTool.h      |  2 +-
 .../L1Decoder/src/MURoIsUnpackingTool.h       |  4 +-
 .../src/RoIsUnpackingEmulationTool.h          |  3 +-
 .../L1Decoder/src/RoIsUnpackingToolBase.cxx   | 16 +++---
 .../L1Decoder/src/TAURoIsUnpackingTool.h      |  4 +-
 .../TrigSteer/ViewAlgsTest/share/EVTest.py    |  6 +--
 .../ViewAlgsTest/share/creatingEVTest.ref     | 23 ++++----
 .../ViewAlgsTest/share/mergingEVTest.ref      | 23 ++++----
 .../python/EmuStepProcessingConfig.py         |  8 +--
 .../TrigUpgradeTest/python/TestUtils.py       |  4 +-
 .../TrigUpgradeTest/share/Calo.py             |  6 +--
 .../TrigUpgradeTest/share/CaloRinger.py       |  6 +--
 .../TrigUpgradeTest/share/EmuScalingCFTest.py |  4 +-
 .../TrigUpgradeTest/share/IDCalo.py           |  2 +-
 .../TrigUpgradeTest/share/L1CF.py             |  4 +-
 .../TrigUpgradeTest/share/MinBias.py          |  4 +-
 .../TrigUpgradeTest/share/cfTest.py           |  6 +--
 .../TrigUpgradeTest/share/egammaRinger.py     |  2 +-
 .../TrigUpgradeTest/share/full_menu.py        | 21 ++++----
 .../TrigUpgradeTest/share/full_menu_cf.py     | 21 ++++----
 .../TrigUpgradeTest/share/met.fromCells.py    |  2 +-
 .../TrigUpgradeTest/share/met.fromClusters.py |  2 +-
 .../share/met.fromClustersPufit.py            |  2 +-
 .../TrigUpgradeTest/share/met.fromJets.py     |  2 +-
 .../TrigUpgradeTest/share/met.seq.test.py     |  2 +-
 .../TrigUpgradeTest/share/simpleJetJob.py     |  2 +-
 .../TrigEDMConfig/python/TriggerEDMRun3.py    | 27 +++-------
 .../TriggerJobOpts/python/TriggerConfig.py    | 53 +++++++++++++------
 .../python/HLTMenuConfig/Menu/HLTCFConfig.py  |  8 +--
 .../python/HLTMenuConfig/Muon/MuonSetup.py    |  4 +-
 42 files changed, 193 insertions(+), 170 deletions(-)

diff --git a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
index 1e41a120ebc..6d21d423a6c 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonBytestreamDecodeConfig.py
@@ -67,7 +67,7 @@ def RpcBytestreamDecodeCfg(flags, forTrigger=False):
 
     if forTrigger:
         # Configure the RAW data provider for ROI access
-        RpcRawDataProvider.RoIs = "MURoIs" # Maybe we don't want to hard code this?
+        RpcRawDataProvider.RoIs = "HLT_MURoIs" # Maybe we don't want to hard code this?
 
     acc.addEventAlgo(RpcRawDataProvider, primary=True)
     return acc
diff --git a/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
index 7b742a887e8..518adbeb454 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
@@ -62,7 +62,7 @@ def RpcRDODecodeCfg(flags, forTrigger=False):
     if forTrigger:
         # Set the algorithm to RoI mode
         RpcRdoToRpcPrepData.DoSeededDecoding = True
-        RpcRdoToRpcPrepData.RoIs = "MURoIs"
+        RpcRdoToRpcPrepData.RoIs = "HLT_MURoIs"
 
 
     acc.addEventAlgo(RpcRdoToRpcPrepData)
@@ -93,7 +93,7 @@ def TgcRDODecodeCfg(flags, forTrigger=False):
     if forTrigger:
         # Set the algorithm to RoI mode
         TgcRdoToTgcPrepData.DoSeededDecoding = True
-        TgcRdoToTgcPrepData.RoIs = "MURoIs"
+        TgcRdoToTgcPrepData.RoIs = "HLT_MURoIs"
 
     acc.addEventAlgo(TgcRdoToTgcPrepData)
     return acc
@@ -126,7 +126,7 @@ def MdtRDODecodeCfg(flags, forTrigger=False):
     if forTrigger:
         # Set the algorithm to RoI mode
         MdtRdoToMdtPrepData.DoSeededDecoding = True
-        MdtRdoToMdtPrepData.RoIs = "MURoIs"
+        MdtRdoToMdtPrepData.RoIs = "HLT_MURoIs"
 
     acc.addEventAlgo(MdtRdoToMdtPrepData)
     return acc
@@ -159,7 +159,7 @@ def CscRDODecodeCfg(flags, forTrigger=False):
     if forTrigger:
         # Set the algorithm to RoI mode
         CscRdoToCscPrepData.DoSeededDecoding = True
-        CscRdoToCscPrepData.RoIs = "MURoIs"
+        CscRdoToCscPrepData.RoIs = "HLT_MURoIs"
 
     acc.addEventAlgo(CscRdoToCscPrepData)
     return acc
diff --git a/Reconstruction/RecJobTransforms/share/skeleton.RDOtoRDOtrigger.py b/Reconstruction/RecJobTransforms/share/skeleton.RDOtoRDOtrigger.py
index 809f621921b..2eb0c0bed39 100644
--- a/Reconstruction/RecJobTransforms/share/skeleton.RDOtoRDOtrigger.py
+++ b/Reconstruction/RecJobTransforms/share/skeleton.RDOtoRDOtrigger.py
@@ -264,7 +264,9 @@ for i in outSequence.getAllChildren():
         from TriggerJobOpts.TriggerConfig import collectHypos, collectFilters, collectDecisionObjects
         hypos = collectHypos( findSubSequence(topSequence, "HLTAllSteps") )
         filters = collectFilters( findSubSequence(topSequence, "HLTAllSteps") )
-        decObj = collectDecisionObjects( hypos, filters, findAlgorithm(topSequence, "L1Decoder") )
+        decObj = collectDecisionObjects( hypos, filters, 
+            findAlgorithm(topSequence, "L1Decoder"), 
+            findAlgorithm(topSequence, "DecisionSummaryMakerAlg") )
         StreamRDO.ItemList += [ "xAOD::TrigCompositeContainer#"+obj for obj in decObj ]
         StreamRDO.ItemList += [ "xAOD::TrigCompositeAuxContainer#"+obj+"Aux." for obj in decObj ]
         StreamRDO.MetadataItemList +=  [ "xAOD::TriggerMenuContainer#*", "xAOD::TriggerMenuAuxContainer#*" ]
diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/TrigL2MuonSA/MuFastSteering.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/TrigL2MuonSA/MuFastSteering.h
index a4ea16b7e8a..e6ead1e5dad 100644
--- a/Trigger/TrigAlgorithms/TrigL2MuonSA/TrigL2MuonSA/MuFastSteering.h
+++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/TrigL2MuonSA/MuFastSteering.h
@@ -244,11 +244,11 @@ class MuFastSteering : public HLT::FexAlgo,
 
   //ReadHandle MURoIs
   SG::ReadHandleKey<TrigRoiDescriptorCollection> m_roiCollectionKey{
-	this, "MuRoIs", "MURoIs", "Name of the input data from L1Decoder"};
+	this, "MuRoIs", "HLT_MURoIs", "Name of the input data from L1Decoder"};
 
   //ReadHandle RecMuonRoIs
   SG::ReadHandleKey<DataVector<LVL1::RecMuonRoI>> m_recRoiCollectionKey{
-	this, "RecMuonRoI", "RecMURoIs", "Name of the input data on LVL1::RecMuonRoI produced by L1Decoder"};
+	this, "RecMuonRoI", "HLT_RecMURoIs", "Name of the input data on LVL1::RecMuonRoI produced by L1Decoder"};
 
   //WriteHandle <xAOD::L2StandAloneMuonContainer>
   SG::WriteHandleKey<xAOD::L2StandAloneMuonContainer> m_muFastContainerKey{
diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py
index 711856784f3..5f0c241191a 100644
--- a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py
+++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py
@@ -273,14 +273,14 @@ def AlignmentBarrelLUTSvcCfg( flags ):
 
 # In the future, above functions should be moved to TrigL2MuonSA package(?)
 
-def l2MuFastAlgCfg( flags, roisKey="MURoIs" ):
+def l2MuFastAlgCfg( flags, roisKey="HLT_MURoIs" ):
 
     acc = ComponentAccumulator()
 
     # Get Reco alg of muFast step
     muFastAcc, muFastFex = muFastSteeringCfg( flags, roisKey )  
     muFastFex.MuRoIs = roisKey
-    muFastFex.RecMuonRoI = "RecMURoIs"
+    muFastFex.RecMuonRoI = "HLT_RecMURoIs"
     muFastFex.MuonL2SAInfo = muFastInfo
     muFastFex.forID = "forID"
     muFastFex.forMS = "forMS"
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py
index 8ce862cadb6..d5dc4604ef5 100644
--- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py
@@ -15,7 +15,7 @@ def setMinimalCaloSetup() :
 # defined as private within this module, so that they can be configured only in functions in this module
 ########################
 
-def _algoHLTCaloCell(name="HLTCaloCellMaker", inputEDM='FSRoI', outputEDM='CellsClusters', RoIMode=True, OutputLevel=ERROR) :
+def _algoHLTCaloCell(name="HLTCaloCellMaker", inputEDM='HLT_FSRoI', outputEDM='CellsClusters', RoIMode=True, OutputLevel=ERROR) :
    setMinimalCaloSetup()
    from AthenaCommon.AppMgr import ServiceMgr as svcMgr
    from TrigCaloRec.TrigCaloRecConfig import HLTCaloCellMaker
@@ -43,7 +43,7 @@ def _algoHLTTopoClusterLC(inputEDM="CellsClusters", OutputLevel=ERROR, algSuffix
    algo.OutputLevel=OutputLevel
    return algo
 
-def _algoL2Egamma(inputEDM="EMRoIs",OutputLevel=ERROR,doRinger=False, ClustersName="HLT_L2CaloEMClusters", RingerKey="HLT_L2CaloRinger"):
+def _algoL2Egamma(inputEDM="HLT_EMRoIs",OutputLevel=ERROR,doRinger=False, ClustersName="HLT_L2CaloEMClusters", RingerKey="HLT_L2CaloRinger"):
     setMinimalCaloSetup()
     from TrigT2CaloEgamma.TrigT2CaloEgammaConfig import T2CaloEgamma_ReFastAlgo
     algo=T2CaloEgamma_ReFastAlgo("FastCaloL2EgammaAlg", doRinger=doRinger, RingerKey=RingerKey)
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/share/testDataAccessService.py b/Trigger/TrigAlgorithms/TrigT2CaloCommon/share/testDataAccessService.py
index f83fbf8cd1e..53337c24d21 100644
--- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/share/testDataAccessService.py
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/share/testDataAccessService.py
@@ -44,7 +44,7 @@ if TriggerFlags.doCalo:
     
      from TrigCaloRec.TrigCaloRecConf import HLTCaloCellMaker, HLTCaloCellSumMaker
      algo1=HLTCaloCellMaker("testFastAlgo1")
-     algo1.RoIs="StoreGateSvc+EMRoIs"
+     algo1.RoIs="StoreGateSvc+HLT_EMRoIs"
      algo1.TrigDataAccessMT=svcMgr.TrigCaloDataAccessSvc
      #algo1.roiMode=False
      algo1.OutputLevel=VERBOSE
@@ -60,7 +60,7 @@ if TriggerFlags.doCalo:
   algo=T2CaloEgamma_ReFastAlgo("testReFastAlgo")
   algo.OutputLevel=VERBOSE
 
-  algo.RoIs="StoreGateSvc+EMRoIs"
+  algo.RoIs="StoreGateSvc+HLT_EMRoIs"
   topSequence += algo
 
 
diff --git a/Trigger/TrigSteer/L1Decoder/python/L1DecoderConfig.py b/Trigger/TrigSteer/L1Decoder/python/L1DecoderConfig.py
index 37ce1c086af..a1073c1dc5e 100644
--- a/Trigger/TrigSteer/L1Decoder/python/L1DecoderConfig.py
+++ b/Trigger/TrigSteer/L1Decoder/python/L1DecoderConfig.py
@@ -10,15 +10,15 @@ def mapThresholdToL1DecisionCollection(threshold):
     Translates L1 threshold  name of the DecisionsContainer name in the L1Decoder unpacking tools
     """
     if threshold == "" or threshold == "FS":
-        return "L1FS"
+        return "HLTNav_L1FS"
 
-    mapThresholdToL1Decoder = { "EM" : "L1EM",
-                                "MU" : "L1MU",
-                                "J"  : "L1J",
-                                "TAU": "L1TAU",
-                                "XE" : "L1MET",
-                                "XS" : "L1MET",
-                                "TE" : "L1MET" }
+    mapThresholdToL1Decoder = { "EM" : "HLTNav_L1EM",
+                                "MU" : "HLTNav_L1MU",
+                                "J"  : "HLTNav_L1J",
+                                "TAU": "HLTNav_L1TAU",
+                                "XE" : "HLTNav_L1MET",
+                                "XS" : "HLTNav_L1MET",
+                                "TE" : "HLTNav_L1MET" }
 
     # remove actual threshold value from L1 threshold string
     for thresholdType, l1Collection in mapThresholdToL1Decoder.iteritems():
@@ -34,26 +34,26 @@ def createCaloRoIUnpackers():
     from L1Decoder.L1DecoderConf import EMRoIsUnpackingTool, METRoIsUnpackingTool, JRoIsUnpackingTool, RerunRoIsUnpackingTool, TAURoIsUnpackingTool
     from L1Decoder.L1DecoderMonitoring import RoIsUnpackingMonitoring
     from TrigEDMConfig.TriggerEDMRun3 import recordable
-    emUnpacker = EMRoIsUnpackingTool(Decisions = recordable("L1EM"),
-                                     OutputTrigRoIs = recordable("EMRoIs"),
+    emUnpacker = EMRoIsUnpackingTool(Decisions = "HLTNav_L1EM",
+                                     OutputTrigRoIs = recordable("HLT_EMRoIs"),
                                      MonTool = RoIsUnpackingMonitoring( prefix="EM", maxCount=30 ))
 
     #            emUnpacker.MonTool = RoIsUnpackingMonitoring( prefix="EM", maxCount=30 )
 
     emRerunUnpacker = RerunRoIsUnpackingTool("EMRerunRoIsUnpackingTool",
-                                             SourceDecisions="L1EM",
-                                             Decisions="RerunL1EM" )
+                                             SourceDecisions="HLTNav_L1EM",
+                                             Decisions="HLTNav_RerunL1EM" )
 
-    metUnpacker = METRoIsUnpackingTool(Decisions = recordable("L1MET"))
+    metUnpacker = METRoIsUnpackingTool(Decisions = "HLTNav_L1MET")
 
 
-    tauUnpacker = TAURoIsUnpackingTool(Decisions = "L1TAU",
-                                       OutputTrigRoIs = "TAURoIs")
+    tauUnpacker = TAURoIsUnpackingTool(Decisions = "HLTNav_L1TAU",
+                                       OutputTrigRoIs = recordable("HLT_TAURoI"))
 
     tauUnpacker.MonTool = RoIsUnpackingMonitoring( prefix="TAU", maxCount=30 )
 
-    jUnpacker = JRoIsUnpackingTool(Decisions = recordable("L1J"),
-                                   OutputTrigRoIs = recordable("JETRoI") )
+    jUnpacker = JRoIsUnpackingTool(Decisions = "HLTNav_L1J",
+                                   OutputTrigRoIs = recordable("HLT_JETRoI") )
 
     jUnpacker.MonTool = RoIsUnpackingMonitoring( prefix="J", maxCount=30 )
 
@@ -65,14 +65,14 @@ def createMuonRoIUnpackers():
     from L1Decoder.L1DecoderMonitoring import RoIsUnpackingMonitoring
 
     from TrigEDMConfig.TriggerEDMRun3 import recordable
-    muUnpacker = MURoIsUnpackingTool(Decisions = recordable("L1MU"),
-                                     OutputTrigRoIs = recordable("MURoIs"))
+    muUnpacker = MURoIsUnpackingTool(Decisions = "HLTNav_L1MU",
+                                     OutputTrigRoIs = recordable("HLT_MURoIs"))
 
     muUnpacker.MonTool = RoIsUnpackingMonitoring( prefix="MU", maxCount=20 )
 
     muRerunUnpacker =  RerunRoIsUnpackingTool("MURerunRoIsUnpackingTool",
-                                              SourceDecisions="L1MU",
-                                              Decisions="RerunL1MU" )
+                                              SourceDecisions="HLTNav_L1MU",
+                                              Decisions="HLTNav_RerunL1MU" )
     return [muUnpacker],[muRerunUnpacker]
 
 
@@ -114,7 +114,6 @@ class L1Decoder(L1Decoder) :
 
 def L1DecoderCfg(flags):
 
-    from TrigEDMConfig.TriggerEDMRun3 import recordable
     from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 
     from L1Decoder.L1DecoderConf import L1Decoder, CTPUnpackingTool
@@ -122,7 +121,7 @@ def L1DecoderCfg(flags):
 
     acc = ComponentAccumulator()
     decoderAlg = L1Decoder()
-    decoderAlg.L1DecoderSummaryKey = recordable("L1DecoderSummary")
+    decoderAlg.L1DecoderSummaryKey = "L1DecoderSummary" # Transient, consumed by DecisionSummaryMakerAlg
     decoderAlg.ctpUnpacker = CTPUnpackingTool( ForceEnableAllChains = flags.Trigger.L1Decoder.forceEnableAllChains,
                                                MonTool = CTPUnpackingMonitoring(512, 200) )
 
diff --git a/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.h
index f83f3c0abc7..a202b4aa64e 100644
--- a/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.h
+++ b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.h
@@ -30,6 +30,7 @@ public:
 
 
 private:
+  // TODO Remove if HLTConfigSvc and LVL1ConfigSvc are no longer needed to put the HLTTriggerMenu and L1Menu in the DetectorStore
   ServiceHandle<TrigConf::ILVL1ConfigSvc> m_lvl1ConfigSvc{this, "LVL1ConfigSvc", "TrigConf::LVL1ConfigSvc/LVL1ConfigSvc", ""};
   ServiceHandle<TrigConf::IHLTConfigSvc> m_hltConfigSvc{this, "HLTConfigSvc", "TrigConf::HLTConfigSvc/HLTConfigSvc", ""};
   
diff --git a/Trigger/TrigSteer/L1Decoder/src/EMRoIsUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/src/EMRoIsUnpackingTool.h
index 6ae9f68c35e..9f31b15ac34 100644
--- a/Trigger/TrigSteer/L1Decoder/src/EMRoIsUnpackingTool.h
+++ b/Trigger/TrigSteer/L1Decoder/src/EMRoIsUnpackingTool.h
@@ -42,10 +42,10 @@ private:
 
   ///@{ @name Properties
   SG::WriteHandleKey<TrigRoiDescriptorCollection> m_trigRoIsKey{
-    this, "OutputTrigRoIs", "EMRoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputTrigRoIs", "HLT_EMRoIs", "Name of the RoIs object produced by the unpacker"};
 
   SG::WriteHandleKey< DataVector<LVL1::RecEmTauRoI> > m_recRoIsKey{
-    this, "OutputRecRoIs", "RecEMRoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputRecRoIs", "HLT_RecEMRoIs", "Name of the RoIs object produced by the unpacker"};
 
   Gaudi::Property<float>            m_roIWidth{this, "RoIWidth", 0.1, "Size of RoI in eta/ phi"};
   ///@}
diff --git a/Trigger/TrigSteer/L1Decoder/src/JRoIsUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/src/JRoIsUnpackingTool.h
index 0ebe26d3162..541a5da2fa4 100644
--- a/Trigger/TrigSteer/L1Decoder/src/JRoIsUnpackingTool.h
+++ b/Trigger/TrigSteer/L1Decoder/src/JRoIsUnpackingTool.h
@@ -33,17 +33,17 @@ public:
   virtual StatusCode start() override;
 private: 
   SG::WriteHandleKey<TrigRoiDescriptorCollection> m_trigRoIsKey{
-    this, "OutputTrigRoIs", "JETRoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputTrigRoIs", "HLT_JETRoIs", "Name of the RoIs object produced by the unpacker"};
 
 
   SG::WriteHandleKey< DataVector<LVL1::RecJetRoI> > m_recRoIsKey{
-    this, "OutputRecRoIs", "RecJETRoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputRecRoIs", "HLT_RecJETRoIs", "Name of the RoIs object produced by the unpacker"};
 
   Gaudi::Property<float>            m_roIWidth{
     this, "RoIWidth", 0.4, "Size of RoI in eta/ phi"};
   
 
-  Gaudi::Property<std::string> m_fsRoIKey{ this, "FSRoIKey", "FSRoI", "The key of FS RoI made earlier by the L1Decoder" };
+  Gaudi::Property<std::string> m_fsRoIKey{ this, "FSRoIKey", "HLT_FSRoI", "The key of FS RoI made earlier by the L1Decoder" };
 
   ServiceHandle<TrigConf::ILVL1ConfigSvc> m_configSvc;
   std::vector<TrigConf::TriggerThreshold*> m_jetThresholds;
diff --git a/Trigger/TrigSteer/L1Decoder/src/L1Decoder.h b/Trigger/TrigSteer/L1Decoder/src/L1Decoder.h
index 0b2fd0b6b92..5b34bfb786c 100644
--- a/Trigger/TrigSteer/L1Decoder/src/L1Decoder.h
+++ b/Trigger/TrigSteer/L1Decoder/src/L1Decoder.h
@@ -55,10 +55,10 @@ private:
       "Object with the time stamp when decoding started" };
 
   SG::WriteHandleKey<TrigRoiDescriptorCollection> m_trigFSRoIKey{
-    this, "OutputFSTrigRoI", "FSRoI", "Name of the RoIs object containing the single FS RoI tagged with all chains in which FS reconstruction happens and have no dependencey on L1 information"};
+    this, "OutputFSTrigRoI", "HLT_FSRoI", "Name of the RoIs object containing the single FS RoI tagged with all chains in which FS reconstruction happens and have no dependencey on L1 information"};
 
   SG::WriteHandleKey<TrigCompositeUtils::DecisionContainer> m_FSDecisions{
-    this, "FSDecisions", "L1FS", "Name of the decisions container (suitable for filters) containing all unprescaled chains"};
+    this, "FSDecisions", "HLTNav_L1FS", "Name of the decisions container (suitable for filters) containing all unprescaled chains"};
 
   Gaudi::Property<bool> m_doCostMonitoring{this, "DoCostMonitoring", false, 
     "Enables start-of-event cost monitoring behavior."};
diff --git a/Trigger/TrigSteer/L1Decoder/src/METRoIsUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/src/METRoIsUnpackingTool.h
index 60f98749fe3..2360f3c5a1b 100644
--- a/Trigger/TrigSteer/L1Decoder/src/METRoIsUnpackingTool.h
+++ b/Trigger/TrigSteer/L1Decoder/src/METRoIsUnpackingTool.h
@@ -30,7 +30,7 @@ public:
   virtual StatusCode start() override;
 
 private:
-  Gaudi::Property<std::string> m_fsRoIKey{ this, "FSRoIKey", "FSRoI", "The key of FS RoI made earlier by the L1Decoder" };
+  Gaudi::Property<std::string> m_fsRoIKey{ this, "FSRoIKey", "HLT_FSRoI", "The key of FS RoI made earlier by the L1Decoder" };
 
   ServiceHandle<TrigConf::ILVL1ConfigSvc> m_configSvc;
   LVL1::JEPRoIDecoder m_jepDecoder;
diff --git a/Trigger/TrigSteer/L1Decoder/src/MURoIsUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/src/MURoIsUnpackingTool.h
index fa972de7236..2af1e894ef9 100644
--- a/Trigger/TrigSteer/L1Decoder/src/MURoIsUnpackingTool.h
+++ b/Trigger/TrigSteer/L1Decoder/src/MURoIsUnpackingTool.h
@@ -40,10 +40,10 @@ private:
 
   ///@{ @name Properties
   SG::WriteHandleKey< TrigRoiDescriptorCollection > m_trigRoIsKey{
-    this, "OutputTrigRoIs", "MURoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputTrigRoIs", "HLT_MURoIs", "Name of the RoIs object produced by the unpacker"};
 
   SG::WriteHandleKey< DataVector<LVL1::RecMuonRoI> > m_recRoIsKey{
-    this, "OutputRecRoIs", "RecMURoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputRecRoIs", "HLT_RecMURoIs", "Name of the RoIs object produced by the unpacker"};
 
   Gaudi::Property<float> m_roIWidth{"RoIWidth", 0.1, "Size of RoI in eta/ phi"};
   ///@}
diff --git a/Trigger/TrigSteer/L1Decoder/src/RoIsUnpackingEmulationTool.h b/Trigger/TrigSteer/L1Decoder/src/RoIsUnpackingEmulationTool.h
index ce907e35bc4..692c146aacc 100644
--- a/Trigger/TrigSteer/L1Decoder/src/RoIsUnpackingEmulationTool.h
+++ b/Trigger/TrigSteer/L1Decoder/src/RoIsUnpackingEmulationTool.h
@@ -32,12 +32,13 @@ class RoIsUnpackingEmulationTool : public RoIsUnpackingToolBase {
   virtual StatusCode start() override;
   
  private: 
+  // Used indirectly to place the HLT JSON object into the DetStore
   ServiceHandle<TrigConf::IHLTConfigSvc> m_hltConfigSvc{this, "HLTConfigSvc", "TrigConf::HLTConfigSvc/HLTConfigSvc", ""};
 
 
   ///@{ @name Properties
   SG::WriteHandleKey<TrigRoiDescriptorCollection> m_trigRoIsKey{
-    this, "OutputTrigRoIs", "EMRoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputTrigRoIs", "HLT_EMRoIs", "Name of the RoIs object produced by the unpacker"};
 
   Gaudi::Property<float> m_roIWidth{"RoIWidth", 0.1, "Size of RoI in eta/ phi"};
 
diff --git a/Trigger/TrigSteer/L1Decoder/src/RoIsUnpackingToolBase.cxx b/Trigger/TrigSteer/L1Decoder/src/RoIsUnpackingToolBase.cxx
index 4e1ec6337b9..8e9eae747f5 100644
--- a/Trigger/TrigSteer/L1Decoder/src/RoIsUnpackingToolBase.cxx
+++ b/Trigger/TrigSteer/L1Decoder/src/RoIsUnpackingToolBase.cxx
@@ -41,14 +41,14 @@ StatusCode RoIsUnpackingToolBase::decodeMapping( std::function< bool(const std::
     for ( const std::string& th: thresholds ) {
       counter++;
       if ( filter(th) ) {
-	m_thresholdToChainMapping[ HLT::Identifier( th ) ].push_back(  HLT::Identifier( chain.name() ) );
-	ATH_MSG_DEBUG( "Associating " << chain.name() << " with threshold " << th );
-	if ( thresholds.size() > 1 ) {
-	  std::string legName = createLegName( chain.name(), counter);
-	  m_thresholdToChainMapping[ HLT::Identifier(th) ].push_back( HLT::Identifier( legName ) );
-	  m_legToChainMapping.insert( std::make_pair( HLT::Identifier( legName ),  HLT::Identifier( chain.name() ) ) );
-	  ATH_MSG_INFO( "Associating additional chain leg " << legName << " with threshold " << th );
-	}
+        m_thresholdToChainMapping[ HLT::Identifier( th ) ].push_back(  HLT::Identifier( chain.name() ) );
+        ATH_MSG_DEBUG( "Associating " << chain.name() << " with threshold " << th );
+        if ( thresholds.size() > 1 ) {
+          std::string legName = createLegName( chain.name(), counter);
+          m_thresholdToChainMapping[ HLT::Identifier(th) ].push_back( HLT::Identifier( legName ) );
+          m_legToChainMapping.insert( std::make_pair( HLT::Identifier( legName ),  HLT::Identifier( chain.name() ) ) );
+          ATH_MSG_INFO( "Associating additional chain leg " << legName << " with threshold " << th );
+        }
       }
     }
   }
diff --git a/Trigger/TrigSteer/L1Decoder/src/TAURoIsUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/src/TAURoIsUnpackingTool.h
index 2e4c1d16a1b..d284a69e9ff 100644
--- a/Trigger/TrigSteer/L1Decoder/src/TAURoIsUnpackingTool.h
+++ b/Trigger/TrigSteer/L1Decoder/src/TAURoIsUnpackingTool.h
@@ -41,10 +41,10 @@ private:
 
   ///@{ @name Properties
   SG::WriteHandleKey<TrigRoiDescriptorCollection> m_trigRoIsKey{
-    this, "OutputTrigRoIs", "TAURoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputTrigRoIs", "HLT_TAURoIs", "Name of the RoIs object produced by the unpacker"};
 
   SG::WriteHandleKey< DataVector<LVL1::RecEmTauRoI> > m_recRoIsKey{
-    this, "OutputRecRoIs", "RecTAURoIs", "Name of the RoIs object produced by the unpacker"};
+    this, "OutputRecRoIs", "HLT_RecTAURoIs", "Name of the RoIs object produced by the unpacker"};
 
   Gaudi::Property<float>            m_roIWidth{this, "RoIWidth", 0.1, "Size of RoI in eta/ phi"};
   ///@}
diff --git a/Trigger/TrigSteer/ViewAlgsTest/share/EVTest.py b/Trigger/TrigSteer/ViewAlgsTest/share/EVTest.py
index abdd0f49aa0..1cf07537337 100644
--- a/Trigger/TrigSteer/ViewAlgsTest/share/EVTest.py
+++ b/Trigger/TrigSteer/ViewAlgsTest/share/EVTest.py
@@ -37,7 +37,7 @@ ctpUnpacker = CTPUnpackingEmulationTool( OutputLevel =  DEBUG, ForceEnableAllCha
 #ctpUnpacker.CTPToChainMapping = [ "0:HLT_g100",  "1:HLT_e20", "2:HLT_mu20", "3:HLT_2mu8", "3:HLT_mu8", "33:HLT_2mu8", "15:HLT_mu8_e8" ]
 l1Decoder.ctpUnpacker = ctpUnpacker
 
-emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool", OutputLevel=DEBUG, InputFilename="rois.dat", OutputTrigRoIs="L1EMRoIs", Decisions="L1EM" )
+emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool", OutputLevel=DEBUG, InputFilename="rois.dat", OutputTrigRoIs="HLT_L1EMRoIs", Decisions="HLTNav_L1EM" )
 ThresholdToChainMapping = ["EM7 : HLT_e8", "EM7 : HLT_mu8_e8", "EM20 : HLT_e20", "EM50 : HLT_2g50",   "EM100 : HLT_g100" ]
 
 l1Decoder.roiUnpackers = [emUnpacker]
@@ -52,7 +52,7 @@ viewAlgsContainer = seqAND( "ViewAlgsContainer" )
 
 
 steps = [ parOR("step0Filtering"), parOR("step1InViewReco") ]
-steps[0] += seqFilter( "Step0EM", Inputs=["L1EM"], Outputs=["step0EM"],
+steps[0] += seqFilter( "Step0EM", Inputs=["HLTNav_L1EM"], Outputs=["step0EM"],
                       Chains=[ x.split(':')[-1].strip() for x in ThresholdToChainMapping ] ) # all chains
 
 
@@ -64,7 +64,7 @@ viewAlgsContainer += viewAlg
 algs=[ useExisting( "Step0EM" ) ]
 from ViewAlgsTest.ViewAlgsTestConf import TestViewDriver
 EMViewsMaker = TestViewDriver( "EMViewsMaker", OutputLevel = DEBUG, 
-                               RoIsContainer = 'L1EMRoIs', RoIsViewOutput="InViewRoI", 
+                               RoIsContainer = 'HLTNav_L1EMRoIs', RoIsViewOutput="InViewRoI", 
                                ClustersViewInput="ViewClusters", Views="EMClusterViews", 
                                ViewNodeName = viewAlgsContainer.name(), Scheduler = AlgScheduler.getScheduler() )
 algs.append( EMViewsMaker )
diff --git a/Trigger/TrigSteer/ViewAlgsTest/share/creatingEVTest.ref b/Trigger/TrigSteer/ViewAlgsTest/share/creatingEVTest.ref
index 9ea78db835d..777867ae03a 100644
--- a/Trigger/TrigSteer/ViewAlgsTest/share/creatingEVTest.ref
+++ b/Trigger/TrigSteer/ViewAlgsTest/share/creatingEVTest.ref
@@ -1,11 +1,12 @@
-EMViewsMaker                                0     DEBUG Property update for OutputLevel : new value = 2
-EMViewsMaker                                0     DEBUG input handles: 1
-EMViewsMaker                                0     DEBUG output handles: 2
-EMViewsMaker                                0     DEBUG Data Deps for EMViewsMaker
-algInView                                   0     DEBUG Property update for OutputLevel : new value = 2
-algInView                                   0     DEBUG input handles: 1
-algInView                                   0     DEBUG output handles: 1
-algInView                                   0     DEBUG Data Deps for algInView
-EMViewsMaker                                0     DEBUG input handles: 1
-EMViewsMaker                                0     DEBUG output handles: 2
-EMViewsMaker                                0     DEBUG Data Deps for EMViewsMaker
+EMViewsMaker                                   0   DEBUG Property update for OutputLevel : new value = 2
+EMViewsMaker                                   0   DEBUG input handles: 1
+EMViewsMaker                                   0   DEBUG output handles: 2
+EMViewsMaker                                   0   DEBUG Data Deps for EMViewsMaker
+algInView                                      0   DEBUG Property update for OutputLevel : new value = 2
+algInView                                      0   DEBUG input handles: 1
+algInView                                      0   DEBUG output handles: 1
+algInView                                      0   DEBUG Data Deps for algInView
+       * EMViewsMaker
+EMViewsMaker                                   0   DEBUG input handles: 1
+EMViewsMaker                                   0   DEBUG output handles: 2
+EMViewsMaker                                   0   DEBUG Data Deps for EMViewsMaker
diff --git a/Trigger/TrigSteer/ViewAlgsTest/share/mergingEVTest.ref b/Trigger/TrigSteer/ViewAlgsTest/share/mergingEVTest.ref
index 9ea78db835d..777867ae03a 100644
--- a/Trigger/TrigSteer/ViewAlgsTest/share/mergingEVTest.ref
+++ b/Trigger/TrigSteer/ViewAlgsTest/share/mergingEVTest.ref
@@ -1,11 +1,12 @@
-EMViewsMaker                                0     DEBUG Property update for OutputLevel : new value = 2
-EMViewsMaker                                0     DEBUG input handles: 1
-EMViewsMaker                                0     DEBUG output handles: 2
-EMViewsMaker                                0     DEBUG Data Deps for EMViewsMaker
-algInView                                   0     DEBUG Property update for OutputLevel : new value = 2
-algInView                                   0     DEBUG input handles: 1
-algInView                                   0     DEBUG output handles: 1
-algInView                                   0     DEBUG Data Deps for algInView
-EMViewsMaker                                0     DEBUG input handles: 1
-EMViewsMaker                                0     DEBUG output handles: 2
-EMViewsMaker                                0     DEBUG Data Deps for EMViewsMaker
+EMViewsMaker                                   0   DEBUG Property update for OutputLevel : new value = 2
+EMViewsMaker                                   0   DEBUG input handles: 1
+EMViewsMaker                                   0   DEBUG output handles: 2
+EMViewsMaker                                   0   DEBUG Data Deps for EMViewsMaker
+algInView                                      0   DEBUG Property update for OutputLevel : new value = 2
+algInView                                      0   DEBUG input handles: 1
+algInView                                      0   DEBUG output handles: 1
+algInView                                      0   DEBUG Data Deps for algInView
+       * EMViewsMaker
+EMViewsMaker                                   0   DEBUG input handles: 1
+EMViewsMaker                                   0   DEBUG output handles: 2
+EMViewsMaker                                   0   DEBUG Data Deps for EMViewsMaker
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/EmuStepProcessingConfig.py b/Trigger/TrigValidation/TrigUpgradeTest/python/EmuStepProcessingConfig.py
index ac537f0b74c..db3c13ebe3e 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/EmuStepProcessingConfig.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/EmuStepProcessingConfig.py
@@ -214,12 +214,12 @@ def generateL1DecoderAndChains():
     ctpUnpacker = CTPUnpackingEmulationTool( ForceEnableAllChains=False , InputFilename="ctp.dat" )
     l1Decoder.ctpUnpacker = ctpUnpacker
 
-    emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool", InputFilename="l1emroi.dat", OutputTrigRoIs="L1EMRoIs", Decisions="L1EM", ThresholdPrefix="EM" )
-    emUnpacker.Decisions="L1EM"
+    emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool", InputFilename="l1emroi.dat", OutputTrigRoIs="HLT_L1EMRoIs", Decisions="HLTNav_L1EM", ThresholdPrefix="EM" )
+    emUnpacker.Decisions="HLTNav_L1EM"
 
 
-    muUnpacker = RoIsUnpackingEmulationTool("MURoIsUnpackingTool", InputFilename="l1muroi.dat",  OutputTrigRoIs="L1MURoIs", Decisions="L1MU", ThresholdPrefix="MU" )
-    muUnpacker.Decisions="L1MU"
+    muUnpacker = RoIsUnpackingEmulationTool("MURoIsUnpackingTool", InputFilename="l1muroi.dat",  OutputTrigRoIs="HLT_L1MURoIs", Decisions="HLTNav_L1MU", ThresholdPrefix="MU" )
+    muUnpacker.Decisions="HLTNav_L1MU"
 
 
     l1Decoder.roiUnpackers = [emUnpacker, muUnpacker]
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/TestUtils.py b/Trigger/TrigValidation/TrigUpgradeTest/python/TestUtils.py
index a7f55a9e0f8..eb9cbf6c25b 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/python/TestUtils.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/python/TestUtils.py
@@ -49,7 +49,7 @@ class L1EmulationTest(L1Decoder):
         if TriggerFlags.doID() or TriggerFlags.doCalo():
             emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool",
                                                     Decisions = "EMRoIDecisions",
-                                                    OutputTrigRoIs = "EMRoIs",
+                                                    OutputTrigRoIs = "HLT_EMRoIs",
                                                     OutputLevel = self.getDefaultProperty("OutputLevel"))
             self.roiUnpackers += [emUnpacker]
             print emUnpacker
@@ -59,7 +59,7 @@ class L1EmulationTest(L1Decoder):
         if TriggerFlags.doMuon():
             muUnpacker = RoIsUnpackingEmulationTool("MURoIsUnpackingTool",
                                                     Decisions = "MURoIDecisions",
-                                                    OutputTrigRoIs = "MURoIs",
+                                                    OutputTrigRoIs = "HLT_MURoIs",
                                                     OutputLevel=self.getDefaultProperty("OutputLevel"))
             self.roiUnpackers += [muUnpacker]
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/Calo.py b/Trigger/TrigValidation/TrigUpgradeTest/share/Calo.py
index 6e4e2167087..08652747d81 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/Calo.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/Calo.py
@@ -30,7 +30,7 @@ if TriggerFlags.doCalo:
 
   if ( doHLTCaloTopo ) :
     from TrigT2CaloCommon.CaloDef import HLTFSTopoRecoSequence
-    recosequence, caloclusters = HLTFSTopoRecoSequence("FSRoI")
+    recosequence, caloclusters = HLTFSTopoRecoSequence("HLT_FSRoI")
     steps+=recosequence
  
   if ( doL2Egamma ) :
@@ -38,8 +38,8 @@ if TriggerFlags.doCalo:
      from TrigT2CaloCommon.CaloDef import createFastCaloSequence
 
      filterL1RoIsAlg = RoRSeqFilter( "filterL1RoIsAlg")
-     filterL1RoIsAlg.Input = ["L1EM"]
-     filterL1RoIsAlg.Output = ["FilteredEMRoIDecisions"]
+     filterL1RoIsAlg.Input = ["HLTNav_L1EM"]
+     filterL1RoIsAlg.Output = ["HLTNav_FilteredEMRoIDecisions"]
      filterL1RoIsAlg.Chains = [ "HLT_e3_etcut", "HLT_e5_etcut", "HLT_e7_etcut" ]
      (fastCaloSequence, sequenceOut) = createFastCaloSequence(filterL1RoIsAlg.Output[0])
      steps+=stepSeq("finalCaloSequence", filterL1RoIsAlg, [ fastCaloSequence ])
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/CaloRinger.py b/Trigger/TrigValidation/TrigUpgradeTest/share/CaloRinger.py
index b2cbf79e6f6..f69fac9b2b6 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/CaloRinger.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/CaloRinger.py
@@ -30,7 +30,7 @@ if TriggerFlags.doCalo:
 
   if ( doHLTCaloTopo ) :
     from TrigT2CaloCommon.CaloDef import HLTFSTopoRecoSequence
-    recosequence, caloclusters = HLTFSTopoRecoSequence("FSRoI")
+    recosequence, caloclusters = HLTFSTopoRecoSequence("HLT_FSRoI")
     steps+=recosequence
  
   if ( doL2Egamma ) :
@@ -38,8 +38,8 @@ if TriggerFlags.doCalo:
      from TrigT2CaloCommon.CaloDef import createFastCaloSequence
 
      filterL1RoIsAlg = RoRSeqFilter( "filterL1RoIsAlg")
-     filterL1RoIsAlg.Input = ["L1EM"]
-     filterL1RoIsAlg.Output = ["FilteredEMRoIDecisions"]
+     filterL1RoIsAlg.Input = ["HLTNav_L1EM"]
+     filterL1RoIsAlg.Output = ["HLTNav_FilteredEMRoIDecisions"]
      filterL1RoIsAlg.Chains = [ "HLT_e3_etcut", "HLT_e5_etcut", "HLT_e7_etcut" ]
      (fastCaloSequence, sequenceOut) = createFastCaloSequence(filterL1RoIsAlg.Output[0], doRinger=True, 
                                                               ClustersName="HLT_L2CaloEMClusters",
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/EmuScalingCFTest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/EmuScalingCFTest.py
index bd9216290c8..996ddd5f732 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/EmuScalingCFTest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/EmuScalingCFTest.py
@@ -104,9 +104,9 @@ def process():
     ctpUnpacker = CTPUnpackingEmulationTool( ForceEnableAllChains=False , InputFilename="ctp.dat" )
     l1Decoder.ctpUnpacker = ctpUnpacker
 
-    emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool", InputFilename="l1emroi.dat", OutputTrigRoIs="L1EMRoIs", Decisions="L1EM", ThresholdPrefix="EM" )
+    emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool", InputFilename="l1emroi.dat", OutputTrigRoIs="HLT_L1EMRoIs", Decisions="HLTNav_L1EM", ThresholdPrefix="EM" )
     from TrigUpgradeTest.EmuStepProcessingConfig import thresholdToChains
-    emUnpacker.Decisions="L1EM"
+    emUnpacker.Decisions="HLTNav_L1EM"
 
   
     l1Decoder.roiUnpackers = [emUnpacker]
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py b/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
index 9f86957c523..068aa76ae9f 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/IDCalo.py
@@ -14,7 +14,7 @@ from AthenaCommon.AlgSequence import AthSequencer
 viewSeq = AthSequencer("AthViewSeq", Sequential=True, ModeOR=False, StopOverride=False)
 topSequence += viewSeq
 
-roiCollectionName =  "EMRoIs"  
+roiCollectionName =  "HLT_EMRoIs"  
 
 # View maker alg
 from AthenaCommon import CfgMgr
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/L1CF.py b/Trigger/TrigValidation/TrigUpgradeTest/share/L1CF.py
index 8904a8bdbed..df5de9375e5 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/L1CF.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/L1CF.py
@@ -17,10 +17,10 @@ ctpUnpacker = CTPUnpackingEmulationTool( ForceEnableAllChains=False , InputFilen
 #ctpUnpacker.CTPToChainMapping = [ "0:HLT_g100",  "1:HLT_e20", "2:HLT_mu20", "3:HLT_2mu8", "3:HLT_mu8", "33:HLT_2mu8", "15:HLT_mu8_e8" ]
 l1Decoder.ctpUnpacker = ctpUnpacker
 
-emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool", InputFilename="l1emroi.dat", OutputTrigRoIs="L1EMRoIs", Decisions="L1EM" )
+emUnpacker = RoIsUnpackingEmulationTool("EMRoIsUnpackingTool", InputFilename="l1emroi.dat", OutputTrigRoIs="HLT_L1EMRoIs", Decisions="HLTNav_L1EM" )
 emUnpacker.ThresholdToChainMapping = ["EM7 : HLT_mu8_e8", "EM20 : HLT_e20", "EM50 : HLT_2g50",   "EM100 : HLT_g100" ]
 
-muUnpacker = RoIsUnpackingEmulationTool("MURoIsUnpackingTool", InputFilename="l1muroi.dat",  OutputTrigRoIs="L1MURoIs", Decisions="L1MU" )
+muUnpacker = RoIsUnpackingEmulationTool("MURoIsUnpackingTool", InputFilename="l1muroi.dat",  OutputTrigRoIs="HLT_L1MURoIs", Decisions="HLTNav_L1MU" )
 muUnpacker.ThresholdToChainMapping = ["MU6 : HLT_mu6", "MU8 : HLT_mu8", "MU8 : HLT_2mu8",  "MU8 : HLT_mu8_e8",  "MU10 : HLT_mu20",   "EM100 : HLT_g100" ]
 
 l1Decoder.roiUnpackers = [emUnpacker, muUnpacker]
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/MinBias.py b/Trigger/TrigValidation/TrigUpgradeTest/share/MinBias.py
index 904d5bfd7b9..615f20e9345 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/MinBias.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/MinBias.py
@@ -9,9 +9,9 @@ viewAlgs = makeInDetAlgs(whichSignature='MinBias', separateTrackParticleCreator=
 
 for viewAlg in viewAlgs:
         if "RoIs" in viewAlg.properties():
-            viewAlg.RoIs = "FSRoI"
+            viewAlg.RoIs = "HLT_FSRoI"
         if "roiCollectionName" in viewAlg.properties():
-            viewAlg.roiCollectionName = "FSRoI"
+            viewAlg.roiCollectionName = "HLT_FSRoI"
 
 from AthenaCommon.AlgSequence import AlgSequence
 topSequence  = AlgSequence()
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/cfTest.py b/Trigger/TrigValidation/TrigUpgradeTest/share/cfTest.py
index 93e5c12d3f9..a8bfc112254 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/cfTest.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/cfTest.py
@@ -91,9 +91,9 @@ mueChains = [ 'HLT_mu8_e8' ]
 
 steps = [ parOR("step%i" % i) for i in range(5)]
 stepNo = 0
-steps[stepNo] += seqFilter( "Step1MU", Inputs=["L1MU"], Outputs=["step0MU"], Chains=muChains )
-steps[stepNo] += seqFilter( "Step1MU_E", Inputs=["L1MU", "L1EM"], Outputs=["step0MU","step0EM"], Chains=mueChains )
-steps[stepNo] += seqFilter( "Step1EM", Inputs=["L1EM"], Outputs=["step0EM"], Chains=(eChains + gChains)  )
+steps[stepNo] += seqFilter( "Step1MU", Inputs=["HLTNav_L1MU"], Outputs=["step0MU"], Chains=muChains )
+steps[stepNo] += seqFilter( "Step1MU_E", Inputs=["HLTNav_L1MU", "HLTNav_L1EM"], Outputs=["step0MU","step0EM"], Chains=mueChains )
+steps[stepNo] += seqFilter( "Step1EM", Inputs=["HLTNav_L1EM"], Outputs=["step0EM"], Chains=(eChains + gChains)  )
 
 emHypo = hypo("Step1ElGamHypo", Input="EMClusters", Output="EMDecisions")
 emHypoTools = [ emHTool("HLT_e2"), emHTool("HLT_e3"), emHTool("HLT_e5"),
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRinger.py b/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRinger.py
index a4e22f5f48d..2a67c14ca3f 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRinger.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/egammaRinger.py
@@ -36,7 +36,7 @@ steps+=_algoHLTTopoCluster(OutputLevel=DEBUG)
 
 
 filterL1RoIsAlg = RoRSeqFilter( "filterL1RoIsAlg")
-filterL1RoIsAlg.Input = ["L1EM"]
+filterL1RoIsAlg.Input = ["HLTNav_L1EM"]
 filterL1RoIsAlg.Output = ["FilteredEMRoIDecisions"]
 filterL1RoIsAlg.Chains = [ 
                            "HLT_e3_etcut", 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu.py b/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu.py
index 5d89b34f893..2e9c943d1f7 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu.py
@@ -44,32 +44,35 @@ if opt.reverseViews:
 # Configure trigger output using parts of the NewJO configuration
 # in a somewhat hacky way
 ##########################################
-from TriggerJobOpts.TriggerConfig import collectHypos, collectFilters, collectDecisionObjects, triggerOutputCfg
+from TriggerJobOpts.TriggerConfig import collectHypos, collectFilters, collectDecisionObjects, triggerOutputCfg, collectFilterDecisionObjects
 from AthenaCommon.CFElements import findAlgorithm,findSubSequence
 hypos = collectHypos(findSubSequence(topSequence, "HLTAllSteps"))
 filters = collectFilters(findSubSequence(topSequence, "HLTAllSteps"))
 
+# find DecisionSummaryMakerAlg
+summaryMakerAlg = findAlgorithm(topSequence, "DecisionSummaryMakerAlg")
+if not summaryMakerAlg:
+    __log.warning("Failed to find DecisionSummaryMakerAlg")
+
 # try to find L1Decoder
 l1decoder = findAlgorithm(topSequence,'L1Decoder')
 if not l1decoder:
     l1decoder = findAlgorithm(topSequence,'L1EmulationTest')
-if l1decoder:
-    decObj = collectDecisionObjects( hypos, filters, l1decoder )
+if l1decoder and summaryMakerAlg:
+    decObj = collectDecisionObjects( hypos, filters, l1decoder, summaryMakerAlg )
+    decObjFilterOut = collectFilterDecisionObjects(filters, inputs=False, outputs=True)
     __log.debug("Decision Objects to write to output [hack method - should be replaced with triggerRunCfg()]")
     __log.debug(decObj)
 else:
-    __log.warning("Failed to find L1Decoder, cannot determine Decision names for output configuration")
+    __log.warning("Failed to find L1Decoder or DecisionSummaryMakerAlg, cannot determine Decision names for output configuration")
     decObj = []
+    decObjFilterOut = []
 
-# find DecisionSummaryMakerAlg
-summaryMakerAlg = findAlgorithm(topSequence, "DecisionSummaryMakerAlg")
-if not summaryMakerAlg:
-    __log.warning("Failed to find DecisionSummaryMakerAlg")
 
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
 from AthenaCommon.Configurable import Configurable
 Configurable.configurableRun3Behavior+=1
-acc, edmSet = triggerOutputCfg(ConfigFlags, decObj, summaryMakerAlg)
+acc, edmSet = triggerOutputCfg(ConfigFlags, decObj, decObjFilterOut, summaryMakerAlg)
 Configurable.configurableRun3Behavior-=1
 acc.appendToGlobals()
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu_cf.py b/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu_cf.py
index 9fb6ba15abb..ae0dbf8766c 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu_cf.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/full_menu_cf.py
@@ -288,32 +288,35 @@ makeHLTTree( triggerConfigHLT=TriggerConfigHLT )
 # Configure trigger output using parts of the NewJO configuration
 # in a somewhat hacky way - copy-pasted from full_menu.py
 ##########################################
-from TriggerJobOpts.TriggerConfig import collectHypos, collectFilters, collectDecisionObjects, triggerOutputCfg
+from TriggerJobOpts.TriggerConfig import collectHypos, collectFilters, collectDecisionObjects, collectFilterDecisionObjects, triggerOutputCfg
 from AthenaCommon.CFElements import findAlgorithm,findSubSequence
 hypos = collectHypos(findSubSequence(topSequence, "HLTAllSteps"))
 filters = collectFilters(findSubSequence(topSequence, "HLTAllSteps"))
 
+# find DecisionSummaryMakerAlg
+summaryMakerAlg = findAlgorithm(topSequence, "DecisionSummaryMakerAlg")
+if not summaryMakerAlg:
+    __log.warning("Failed to find DecisionSummaryMakerAlg")
+
 # try to find L1Decoder
 l1decoder = findAlgorithm(topSequence,'L1Decoder')
 if not l1decoder:
     l1decoder = findAlgorithm(topSequence,'L1EmulationTest')
-if l1decoder:
-    decObj = collectDecisionObjects( hypos, filters, l1decoder )
+if l1decoder and summaryMakerAlg:
+    decObj = collectDecisionObjects( hypos, filters, l1decoder, summaryMakerAlg )
+    decObjFilterOut = collectFilterDecisionObjects(filters, inputs=False, outputs=True)
     __log.debug("Decision Objects to write to output [hack method - should be replaced with triggerRunCfg()]")
     __log.debug(decObj)
 else:
-    __log.warning("Failed to find L1Decoder, cannot determine Decision names for output configuration")
+    __log.warning("Failed to find L1Decoder or summaryMakerAlg, cannot determine Decision names for output configuration")
     decObj = []
+    decObjFilterOut = []
 
-# find DecisionSummaryMakerAlg
-summaryMakerAlg = findAlgorithm(topSequence, "DecisionSummaryMakerAlg")
-if not summaryMakerAlg:
-    __log.warning("Failed to find DecisionSummaryMakerAlg")
 
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
 from AthenaCommon.Configurable import Configurable
 Configurable.configurableRun3Behavior+=1
-acc, edmSet = triggerOutputCfg(ConfigFlags, decObj, summaryMakerAlg)
+acc, edmSet = triggerOutputCfg(ConfigFlags, decObj, decObjFilterOut, summaryMakerAlg)
 Configurable.configurableRun3Behavior-=1
 acc.appendToGlobals()
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromCells.py b/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromCells.py
index c46d6e88fb0..16d2f0e6852 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromCells.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromCells.py
@@ -63,7 +63,7 @@ hypoAlg.HypoTools=[makeMETHypoTool()]
 hypoAlg.METContainerKey=metAlg.METContainerKey
 
 hypoAlg.OutputLevel = DEBUG
-hypoAlg.HypoInputDecisions = "L1MET"
+hypoAlg.HypoInputDecisions = "HLTNav_L1MET"
 hypoAlg.HypoOutputDecisions = "EFMETDecisions"
 topSequence += hypoAlg
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromClusters.py b/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromClusters.py
index 3ce0d9c441e..f92ecec9a03 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromClusters.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromClusters.py
@@ -61,7 +61,7 @@ hypoAlg.HypoTools=[makeMETHypoTool()]
 hypoAlg.METContainerKey=metAlg.METContainerKey
 
 hypoAlg.OutputLevel = DEBUG
-hypoAlg.HypoInputDecisions = "L1MET"
+hypoAlg.HypoInputDecisions = "HLTNav_L1MET"
 hypoAlg.HypoOutputDecisions = "EFMETDecisions"
 topSequence += hypoAlg
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromClustersPufit.py b/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromClustersPufit.py
index bcc689af6f2..18922cf35b0 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromClustersPufit.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromClustersPufit.py
@@ -53,7 +53,7 @@ hypoAlg.HypoTools=[makeMETHypoTool()]
 hypoAlg.METContainerKey=metAlg.METContainerKey
 
 hypoAlg.OutputLevel = DEBUG
-hypoAlg.HypoInputDecisions = "L1MET"
+hypoAlg.HypoInputDecisions = "HLTNav_L1MET"
 hypoAlg.HypoOutputDecisions = "EFMETDecisions"
 topSequence += hypoAlg
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromJets.py b/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromJets.py
index d4d9dec5a95..0a339755f59 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromJets.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/met.fromJets.py
@@ -71,7 +71,7 @@ hypoAlg.HypoTools=[makeMETHypoTool()]
 hypoAlg.METContainerKey=metAlg.METContainerKey
 
 hypoAlg.OutputLevel = DEBUG
-hypoAlg.HypoInputDecisions = "L1MET"
+hypoAlg.HypoInputDecisions = "HLTNav_L1MET"
 hypoAlg.HypoOutputDecisions = "EFMETDecisions"
 topSequence += hypoAlg
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/met.seq.test.py b/Trigger/TrigValidation/TrigUpgradeTest/share/met.seq.test.py
index ee843e5434d..1eaa2a5b575 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/met.seq.test.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/met.seq.test.py
@@ -11,7 +11,7 @@ topSequence = AlgSequence()
 from DecisionHandling.DecisionHandlingConf import InputMakerForRoI
 InputMakerAlg = InputMakerForRoI("MetCellInputMaker", RoIsLink="initialRoI")
 InputMakerAlg.RoIs='METCellRoI'
-InputMakerAlg.InputMakerInputDecisions=["L1MET"]
+InputMakerAlg.InputMakerInputDecisions=["HLTNav_L1MET"]
 InputMakerAlg.InputMakerOutputDecisions=["InputMaker_from_L1MET"]
 topSequence += InputMakerAlg
 
diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/simpleJetJob.py b/Trigger/TrigValidation/TrigUpgradeTest/share/simpleJetJob.py
index 86cd3117a01..c71d9cb2021 100644
--- a/Trigger/TrigValidation/TrigUpgradeTest/share/simpleJetJob.py
+++ b/Trigger/TrigValidation/TrigUpgradeTest/share/simpleJetJob.py
@@ -35,7 +35,7 @@ if TriggerFlags.doCalo:
              L1JetDecisions=unpack.Decisions
 
 
-     inputRoIs="FSRoI"
+     inputRoIs="HLT_FSRoI"
      hypoDecisions=L1JetDecisions
 
      addFiltering=True
diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
index 57b095848c1..579a116906f 100644
--- a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
+++ b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
@@ -31,7 +31,8 @@ def recordable( name ):
     If the names are correct the outputKey is assigned with SomeKey, if there is a missmatch an exception is thrown.
     """
 
-    if name in ["HLTNav_Summary", "L1DecoderSummary"] or "L1" in name or "RoI" in name:
+    if "HLTNav_" in name:
+        __log.error( "Don't call recordable({0}), or add any \"HLTNav_\" collection manually to the EDM. See:collectDecisionObjects.".format( name ) )
         pass
     else: #negative filtering
         if not name.startswith( "HLT_" ):
@@ -63,32 +64,20 @@ JetVars = '.'.join(JetVarsToKeep)
 TriggerHLTListRun3 = [
 
     #framework/steering
-    ('xAOD::TrigCompositeContainer#HLTNav_Summary',          'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeAuxContainer#HLTNav_SummaryAux.',   'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeContainer#L1DecoderSummary',        'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeAuxContainer#L1DecoderSummaryAux.', 'BS ESD AODFULL AODSLIM', 'Steer'),
-
     ('xAOD::TrigDecision#xTrigDecision' ,                    'ESD AODFULL AODSLIM', 'Steer'),
     ('xAOD::TrigDecisionAuxInfo#xTrigDecisionAux.',          'ESD AODFULL AODSLIM', 'Steer'),
     ('xAOD::TrigConfKeys#TrigConfKeys' ,                     'ESD AODFULL AODSLIM', 'Steer'),
 
-    ('TrigRoiDescriptorCollection#EMRoIs',                   'BS ESD AODFULL AODSLIM',  'Steer'),
-    ('TrigRoiDescriptorCollection#MURoIs',                   'BS ESD AODFULL AODSLIM',  'Steer'),
-    ('TrigRoiDescriptorCollection#METRoI',                   'BS ESD AODFULL AODSLIM',  'Steer'),
-    ('TrigRoiDescriptorCollection#JETRoI',                   'BS ESD AODFULL AODSLIM',  'Steer'),
+    ('TrigRoiDescriptorCollection#HLT_EMRoIs',                   'BS ESD AODFULL AODSLIM',  'Steer'),
+    ('TrigRoiDescriptorCollection#HLT_MURoIs',                   'BS ESD AODFULL AODSLIM',  'Steer'),
+    ('TrigRoiDescriptorCollection#HLT_METRoI',                   'BS ESD AODFULL AODSLIM',  'Steer'),
+    ('TrigRoiDescriptorCollection#HLT_JETRoI',                   'BS ESD AODFULL AODSLIM',  'Steer'),
+    ('TrigRoiDescriptorCollection#HLT_TAURoI',                   'BS ESD AODFULL AODSLIM',  'Steer'),
+    ('TrigRoiDescriptorCollection#HLT_FSRoI',                    'BS ESD AODFULL AODSLIM',  'Steer'),
     ('TrigRoiDescriptorCollection#HLT_RoiForTau',                   'BS ESD AODFULL AODSLIM',  'Steer', 'inViews = TAUCaloViews'),
     ('TrigRoiDescriptorCollection#HLT_RoiForID2',                   'BS ESD AODFULL AODSLIM',  'Steer', 'inViews = TAUIDViews'),
     ('TrigRoiDescriptorCollection#HLT_RoiForID1',                   'BS ESD AODFULL AODSLIM',  'Steer', 'inViews = TAUID2Views'),
 
-    ('xAOD::TrigCompositeContainer#L1EM',                    'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeAuxContainer#L1EMAux.',             'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeContainer#L1MU',                    'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeAuxContainer#L1MUAux.',             'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeContainer#L1MET',                   'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeAuxContainer#L1METAux.',            'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeContainer#L1J',                     'BS ESD AODFULL AODSLIM', 'Steer'),
-    ('xAOD::TrigCompositeAuxContainer#L1JAux.',              'BS ESD AODFULL AODSLIM', 'Steer'),
-
     ('xAOD::TrigCompositeContainer#HLT_TrigCostContainer',   'CostMonDS ESD', 'Steer'),
     ('xAOD::TrigCompositeAuxContainer#HLT_TrigCostContainerAux.alg.store.view.thread.slot.roi.start.stop.', 'CostMonDS ESD', 'Steer'),
 
diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py
index daa08bd5527..ec5bfc3e65b 100644
--- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py
+++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py
@@ -82,6 +82,8 @@ def collectL1DecoderDecisionObjects(l1decoder):
     __log.info("Collecting decision objects from L1 decoder instance")
     decisionObjects.update([ d.Decisions for d in l1decoder.roiUnpackers ])
     decisionObjects.update([ d.Decisions for d in l1decoder.rerunRoiUnpackers ])
+    # decisionObjects.add( l1decoder.FSDecisions ) # Crashes?
+    decisionObjects.add( "HLTNav_L1FS" ) # Hard-coded, but should be l1decoder.FSDecisions 
     return decisionObjects
 
 def collectHypoDecisionObjects(hypos, inputs = True, outputs = True):
@@ -114,17 +116,28 @@ def collectFilterDecisionObjects(filters, inputs = True, outputs = True):
                 decisionObjects.update( filt.Output )
     return decisionObjects
 
-def collectDecisionObjects(  hypos, filters, l1decoder ):
+def collectHLTSummaryDecisionObjects(hltSummary):
+    decisionObjects = set()
+    __log.info("Collecting decision objects from hltSummary")
+    decisionObjects.update( hltSummary.DecisionsSummaryKey )
+    return decisionObjects
+
+def collectDecisionObjects(  hypos, filters, l1decoder, hltSummary ):
     """
     Returns the set of all decision objects of HLT
     """
     decObjL1 = collectL1DecoderDecisionObjects(l1decoder)
-    decObjHypo = collectHypoDecisionObjects(hypos)
-    decObjFilter = collectFilterDecisionObjects(filters)
+    decObjHypo = collectHypoDecisionObjects(hypos, inputs = True, outputs = True)
+    decObjFilter = collectFilterDecisionObjects(filters, inputs = True, outputs = True)
+    # InputMaker are not needed explicitly as the Filter Outputs = InputMaker Inputs
+    # and InputMaker Outputs = Hypo Inputs
+    # Therefore we implicitly collect all navigaiton I/O of all InputMakers
+    decObjSummary = collectHLTSummaryDecisionObjects(hltSummary)
     decisionObjects = set()
     decisionObjects.update(decObjL1)
     decisionObjects.update(decObjHypo)
     decisionObjects.update(decObjFilter)
+    decisionObjects.update(decObjSummary)
     return decisionObjects
 
 def triggerSummaryCfg(flags, hypos):
@@ -188,7 +201,7 @@ def triggerMonitoringCfg(flags, hypos, filters, l1Decoder):
     return acc, mon
 
 
-def triggerOutputCfg(flags, decObj, summaryAlg):
+def triggerOutputCfg(flags, decObj, decObjFilterOut, summaryAlg):
     # Following cases are considered:
     # 1) Running in partition or athenaHLT - configure BS output written by the HLT framework
     # 2) Running offline athena and writing BS - configure BS output written by OutputStream alg
@@ -227,13 +240,13 @@ def triggerOutputCfg(flags, decObj, summaryAlg):
     # Create the configuration
     if onlineWriteBS:
         __log.info("Configuring online ByteStream HLT output")
-        acc = triggerBSOutputCfg(flags, decObj, summaryAlg)
+        acc = triggerBSOutputCfg(flags, decObj, decObjFilterOut, summaryAlg)
     elif offlineWriteBS:
         __log.info("Configuring offline ByteStream HLT output")
-        acc = triggerBSOutputCfg(flags, decObj, summaryAlg, offline=True)
+        acc = triggerBSOutputCfg(flags, decObj, decObjFilterOut, summaryAlg, offline=True)
     elif writePOOL:
         __log.info("Configuring POOL HLT output")
-        acc = triggerPOOLOutputCfg(flags, decObj, edmSet)
+        acc = triggerPOOLOutputCfg(flags, decObj, decObjFilterOut, edmSet)
     else:
         __log.info("No HLT output writing is configured")
         acc = ComponentAccumulator()
@@ -241,7 +254,7 @@ def triggerOutputCfg(flags, decObj, summaryAlg):
     return acc, edmSet
 
 
-def triggerBSOutputCfg(flags, decObj, summaryAlg, offline=False):
+def triggerBSOutputCfg(flags, decObj, decObjFilterOut, summaryAlg, offline=False):
     from TriggerMenuMT.HLTMenuConfig.Menu import EventBuildingInfo
     from TrigEDMConfig.TriggerEDM import getTriggerEDMList
     from TrigEDMConfig.TriggerEDMRun3 import persistent
@@ -260,8 +273,11 @@ def triggerBSOutputCfg(flags, decObj, summaryAlg, offline=False):
 
     # Add decision containers (navigation)
     for item in decObj:
+        dynamic = '.-'
+        if item in decObjFilterOut:
+            dynamic = '.remap_linkColKeys.remap_linkColIndices.'
         typeName = 'xAOD::TrigCompositeContainer#{:s}'.format(item)
-        typeNameAux = 'xAOD::TrigCompositeAuxContainer#{:s}Aux.-'.format(item)
+        typeNameAux = 'xAOD::TrigCompositeAuxContainer#{:s}Aux{:s}'.format(item, dynamic)
         if typeName not in ItemModuleDict.keys():
             ItemModuleDict[typeName] = [EventBuildingInfo.getFullHLTResultID()]
         if typeNameAux not in ItemModuleDict.keys():
@@ -319,7 +335,7 @@ def triggerBSOutputCfg(flags, decObj, summaryAlg, offline=False):
     return acc
 
 
-def triggerPOOLOutputCfg(flags, decObj, edmSet):
+def triggerPOOLOutputCfg(flags, decObj, decObjFilterOut, edmSet):
     # Get the list from TriggerEDM
     from TrigEDMConfig.TriggerEDM import getTriggerEDMList
     edmList = getTriggerEDMList(edmSet, flags.Trigger.EDMDecodingVersion)
@@ -331,8 +347,11 @@ def triggerPOOLOutputCfg(flags, decObj, edmSet):
 
     # Add decision containers (navigation)
     for item in decObj:
+        dynamic = '.-'
+        if item in decObjFilterOut:
+            dynamic = '.remap_linkColKeys.remap_linkColIndices.'
         itemsToRecord.append('xAOD::TrigCompositeContainer#{:s}'.format(item))
-        itemsToRecord.append('xAOD::TrigCompositeAuxContainer#{:s}Aux.-'.format(item))
+        itemsToRecord.append('xAOD::TrigCompositeAuxContainer#{:s}Aux{:s}'.format(item, dynamic))
 
     # Create OutputStream
     outputType = ''
@@ -365,7 +384,7 @@ def triggerPOOLOutputCfg(flags, decObj, edmSet):
     return acc
 
 
-def triggerMergeViewsAndAddMissingEDMCfg( edmSet, hypos, viewMakers, decObj ):
+def triggerMergeViewsAndAddMissingEDMCfg( edmSet, hypos, viewMakers, decObj, decObjFilterOut ):
 
     from TrigOutputHandling.TrigOutputHandlingConf import HLTEDMCreatorAlg, HLTEDMCreator
     from TrigEDMConfig.TriggerEDMRun3 import TriggerHLTListRun3
@@ -435,7 +454,7 @@ def triggerMergeViewsAndAddMissingEDMCfg( edmSet, hypos, viewMakers, decObj ):
     __log.debug("The GapFiller is ensuring the creation of all the decision object collections: '{}'".format( decObj ) )
     # Append and hence confirm all TrigComposite collections
     # Gap filler is also used to perform re-mapping of the HypoAlg outputs which is a sub-set of decObj
-    tool.FixLinks = list(collectHypoDecisionObjects(hypos, inputs=False, outputs=True))
+    tool.FixLinks = list(decObjFilterOut)
     tool.TrigCompositeContainer += list(decObj)
     alg.OutputTools += [tool]
 
@@ -484,8 +503,10 @@ def triggerRunCfg( flags, menu=None ):
     from TrigCostMonitorMT.TrigCostMonitorMTConfig import TrigCostMonitorMTCfg
     acc.merge( TrigCostMonitorMTCfg( flags ) )
 
-    decObj = collectDecisionObjects( hypos, filters, l1DecoderAlg )
+    decObj = collectDecisionObjects( hypos, filters, l1DecoderAlg, summaryAlg )
+    decObjFilterOut = collectFilterDecisionObjects(filters, inputs=False, outputs=True)
     __log.info( "Number of decision objects found in HLT CF %d", len( decObj ) )
+    __log.info( "Of which, %d are the outputs of filters", len( decObjFilterOut ) )
     __log.info( str( decObj ) )
 
     HLTTop = seqOR( "HLTTop", [ l1DecoderAlg, HLTSteps, summaryAlg, monitoringAlg ] )
@@ -497,11 +518,11 @@ def triggerRunCfg( flags, menu=None ):
     # configure components need to normalise output before writing out
     viewMakers = collectViewMakers( HLTSteps )
 
-    outputAcc, edmSet = triggerOutputCfg( flags, decObj, summaryAlg )
+    outputAcc, edmSet = triggerOutputCfg( flags, decObj, decObjFilterOut, summaryAlg )
     acc.merge( outputAcc )
 
     if edmSet:
-        mergingAlg = triggerMergeViewsAndAddMissingEDMCfg( [edmSet] , hypos, viewMakers, decObj )
+        mergingAlg = triggerMergeViewsAndAddMissingEDMCfg( [edmSet] , hypos, viewMakers, decObj, decObjFilterOut )
         acc.addEventAlgo( mergingAlg, sequenceName="HLTTop" )
 
     return acc
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py
index 572f6294d23..4e6f8fb06ec 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig.py
@@ -160,10 +160,11 @@ def makeHLTTree(newJO=False, triggerConfigHLT = None):
     summary= makeSummary("TriggerSummaryFinal", flatDecisions)
     hltTop += summary
 
+    # TODO - check we are not running things twice. Once here and once in TriggerConfig.py
 
     # add signature monitor
     from TriggerJobOpts.TriggerConfig import collectHypos, collectFilters, collectViewMakers, collectDecisionObjects,\
-        triggerMonitoringCfg, triggerSummaryCfg, triggerMergeViewsAndAddMissingEDMCfg
+        triggerMonitoringCfg, triggerSummaryCfg, triggerMergeViewsAndAddMissingEDMCfg, collectFilterDecisionObjects
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
     from AthenaCommon.Configurable import Configurable
     Configurable.configurableRun3Behavior+=1
@@ -171,17 +172,18 @@ def makeHLTTree(newJO=False, triggerConfigHLT = None):
     hypos = collectHypos(steps)
     filters = collectFilters(steps)
     viewMakers = collectViewMakers(steps)
-    decObj = collectDecisionObjects( hypos, filters, l1decoder[0] )
     summaryAcc, summaryAlg = triggerSummaryCfg( ConfigFlags, hypos )
     hltTop += summaryAlg
     summaryAcc.appendToGlobals()
+    decObj = collectDecisionObjects( hypos, filters, l1decoder[0], summaryAlg )
+    decObjFilterOut = collectFilterDecisionObjects(filters, inputs=False, outputs=True)
 
     monAcc, monAlg = triggerMonitoringCfg( ConfigFlags, hypos, filters, l1decoder[0] )
     monAcc.appendToGlobals()
     hltTop += monAlg
 
     # this is a shotcut for now, we always assume we may be writing ESD & AOD outputs, so all gaps will be filled
-    edmAlg = triggerMergeViewsAndAddMissingEDMCfg(['AOD', 'ESD'], hypos, viewMakers, decObj )
+    edmAlg = triggerMergeViewsAndAddMissingEDMCfg(['AOD', 'ESD'], hypos, viewMakers, decObj, decObjFilterOut)
     hltTop += edmAlg
 
     Configurable.configurableRun3Behavior-=1
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
index ac44b94b0e2..52eece3a63e 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py
@@ -298,7 +298,7 @@ def muFastRecoSequence( RoIs ):
   
   muFastAlg.DataPreparator = MuFastDataPreparator
 
-  muFastAlg.RecMuonRoI = "RecMURoIs"
+  muFastAlg.RecMuonRoI = "HLT_RecMURoIs"
   muFastAlg.MuRoIs = RoIs
   muFastAlg.MuonL2SAInfo = muNames.L2SAName
   muFastAlg.MuonCalibrationStream = "MuonCalibrationStream"
@@ -492,7 +492,7 @@ def muEFSARecoSequence( RoIs, name ):
   for efAlg in efAlgs:
       if "RoIs" in efAlg.properties():
         if name == "FS":
-          efAlg.RoIs = "FSRoI"
+          efAlg.RoIs = "HLT_FSRoI"
         else:
           efAlg.RoIs = RoIs
       muEFSARecoSequence += efAlg
-- 
GitLab