diff --git a/AtlasTest/TestTools/test/test_ParallelCallTestExample.cxx b/AtlasTest/TestTools/test/test_ParallelCallTestExample.cxx
index 4ca2e50ecf205218beb950a71f8a979673222453..a12284eeda0f0a691804e2624d4b0c1acabc5bf0 100644
--- a/AtlasTest/TestTools/test/test_ParallelCallTestExample.cxx
+++ b/AtlasTest/TestTools/test/test_ParallelCallTestExample.cxx
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 #include <mutex>
 #include <map>
@@ -20,7 +20,8 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
  * @brief Specimen of service caching expensive calculations.
  * It uses internally std::map which is not thread-safely expandable.
  **/
-class ExpensiveCompCacheSvc {
+class IService { };
+class ExpensiveCompCacheSvc : public IService {
 public:
   int compute( int x ) {
     // should the lock be here, or can be later only when we update the map
diff --git a/Calorimeter/CaloCalibHitRec/share/jobOptions_SimpleCaloRec.py b/Calorimeter/CaloCalibHitRec/share/jobOptions_SimpleCaloRec.py
index 7151b5fd3f43b67c84aaf1d4e21cbedfd0277f98..bbc544f1a826a590919b9d81e84c6e9a97b8f2d8 100644
--- a/Calorimeter/CaloCalibHitRec/share/jobOptions_SimpleCaloRec.py
+++ b/Calorimeter/CaloCalibHitRec/share/jobOptions_SimpleCaloRec.py
@@ -174,7 +174,7 @@ theCBNT_CaloClusterTopoW=CBNTAA_CaloCluster("CBNT_CaloClusterTopoW")
 CBNT_AthenaAware += CBNTAA_CaloCluster("CBNT_CaloClusterTopoOOC")
 theCBNT_CaloClusterTopoOOC=CBNTAA_CaloCluster("CBNT_CaloClusterTopoOOC")
 
-theCBNT_CaloClusterTopoEM.ClusterColl = "CaloTopoCluster"
+theCBNT_CaloClusterTopoEM.ClusterColl = "CaloTopoClusters"
 theCBNT_CaloClusterTopoEM.Suffix = "_topo_em"
 theCBNT_CaloClusterTopoEM.EMOnly = FALSE
 theCBNT_CaloClusterTopoEM.MaxCaloCluster = 600
diff --git a/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker.cxx b/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker.cxx
index 3e45f3be99c512a3f0a23e6b1d402293b19e6d4f..5b34bf728da5de16b3eafb476af95bd95e5cb4a8 100644
--- a/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker.cxx
+++ b/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker.cxx
@@ -416,8 +416,9 @@ CaloCalibClusterMomentsMaker::execute(const EventContext& ctx,
 	engCalibDead[ii].resize(theClusColl->size(),0);
 	eOut[ii] = 0;
 	eDead[ii] = 0;
-	iClus = 0;
+	iClus = -1;
         for (xAOD::CaloCluster * theCluster : *theClusColl) {
+	  ++iClus;
 	  if ( engCalibTot[iClus] > 0 ) {
 	    int iEtaSign = 1;
 	    if ( theCluster->eta() < 0 )
diff --git a/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker2.cxx b/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker2.cxx
index 5ed4debecdf4cb22a086b9b9ed9d0094862470f7..eb9ce78bae2b9149529c98f0fccc7d9ae55a9fad 100644
--- a/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker2.cxx
+++ b/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker2.cxx
@@ -429,8 +429,9 @@ CaloCalibClusterMomentsMaker2::execute(const EventContext& ctx,
          (ii == 1 && (m_doOutOfClusterM || m_doDeadM || (m_doDeadEnergySharing && m_MatchDmType==kMatchDmMedium) ) ) || 
          (ii == 2 && (m_doOutOfClusterT || m_doDeadT || (m_doDeadEnergySharing && m_MatchDmType==kMatchDmTight)) ) ) {
       engCalibOut[ii].resize(theClusColl->size(),0);
-      iClus = 0;
+      iClus = -1;
       for (const xAOD::CaloCluster * theCluster : *theClusColl) {
+	++iClus;
         MyClusInfo& clusInfo = clusInfoVec[iClus];
 
         if ( clusInfo.engCalibIn.engTot > 0 ) {
diff --git a/Calorimeter/CaloClusterCorrection/share/CaloTopoLocalCalib_jobOptions.py b/Calorimeter/CaloClusterCorrection/share/CaloTopoLocalCalib_jobOptions.py
index 65159a9a1e58d01a727262e01df97a98f09af2d3..7c4bc5defbb2fba6f3a6b5bab9fe0f2f1ff36873 100755
--- a/Calorimeter/CaloClusterCorrection/share/CaloTopoLocalCalib_jobOptions.py
+++ b/Calorimeter/CaloClusterCorrection/share/CaloTopoLocalCalib_jobOptions.py
@@ -14,8 +14,8 @@ CaloTopoClusterMaker.ClusterCorrectionTools += [
 
 # use new name for calibrated clusters and old name for em-scale clusters
 
-CaloTopoClusterMaker.ClustersOutputName = "CaloCalTopoCluster"
-CaloTopoClusterMaker.KeepCorrectionToolAndContainerNames += ["CaloClusterLocalCalib/LocalCalib","CaloTopoCluster"]
+CaloTopoClusterMaker.ClustersOutputName = "CaloCalTopoClusters"
+CaloTopoClusterMaker.KeepCorrectionToolAndContainerNames += ["CaloClusterLocalCalib/LocalCalib","CaloTopoClusters"]
 CaloTopoClusterMaker.KeepCorrectionToolAndContainerNames += ["CaloClusterLocalCalib/OOCCalib","CaloWeightTopoCluster"]
 CaloTopoClusterMaker.TopoMoments.MomentsNames += [
   "FIRST_ETA",  
diff --git a/Calorimeter/CaloCnv/CaloJiveXML/share/CaloJiveXML_DataTypes.py b/Calorimeter/CaloCnv/CaloJiveXML/share/CaloJiveXML_DataTypes.py
index e0a674374fc121eee692f144f859df45d571cd49..920de0ae15a035bb36210c44df595f20608f93ed 100644
--- a/Calorimeter/CaloCnv/CaloJiveXML/share/CaloJiveXML_DataTypes.py
+++ b/Calorimeter/CaloCnv/CaloJiveXML/share/CaloJiveXML_DataTypes.py
@@ -22,7 +22,7 @@ theCaloClusterRetriever.FavouriteClusterCollection="egClusterCollection"
 
 ## example how to set other collection. when commented out: all other, non-HLT
 ##
-theCaloClusterRetriever.OtherClusterCollections=["CombinedCluster","MuonClusterCollection","CaloTopoCluster"]
+theCaloClusterRetriever.OtherClusterCollections=["CombinedCluster","MuonClusterCollection","CaloTopoClusters"]
 
 # See M5 jOs for further commissioning options
 #
diff --git a/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveDeps.py b/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveDeps.py
index 05a4a3e7054af1716e72a054ba7f75b9530796e1..e14b6f80eef95417c5fcc97c5e0b6a90e23c6279 100644
--- a/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveDeps.py
+++ b/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveDeps.py
@@ -38,9 +38,9 @@ topSequence.CaloTopoCluster.ExtraInputs =  [('CaloCalibrationHitContainer','Stor
                                             ('CaloCellContainer','StoreGateSvc+AllCalo')]
 topSequence.CaloTopoCluster.ExtraOutputs = [('xAOD::CaloClusterContainer','StoreGateSvc+CaloCalTopoClusters'),
                                             ('xAOD::CaloClusterAuxContainer','StoreGateSvc+CaloCalTopoClustersAux.'),
-                                            ('xAOD::CaloClusterContainer','StoreGateSvc+CaloTopoCluster'),
-                                            ('xAOD::CaloClusterAuxContainer','StoreGateSvc+CaloTopoClusterAux.'),
-                                            ('CaloClusterCellLinkContainer','StoreGateSvc+CaloTopoCluster_links'),
+                                            ('xAOD::CaloClusterContainer','StoreGateSvc+CaloTopoClusters'),
+                                            ('xAOD::CaloClusterAuxContainer','StoreGateSvc+CaloTopoClustersAux.'),
+                                            ('CaloClusterCellLinkContainer','StoreGateSvc+CaloTopoClusters_links'),
                                             ('CaloClusterCellLinkContainer','StoreGateSvc+CaloCalTopoClusters_links')]
 
 
diff --git a/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveJets.py b/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveJets.py
index 4e9aab22c90f237f08929709e54650a5641dc7a3..0947f7ef45cbc2c4b90e597c7a5cdcb6419181ff 100644
--- a/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveJets.py
+++ b/Calorimeter/CaloExample/CaloHiveEx/share/CaloHiveJets.py
@@ -42,7 +42,7 @@ jalg4 = JetAlgorithm("jetalg4")
 j4 = JetRecTool("jetrectool4",OutputContainer="AntiKt4EMTopoJets")
 g4 = PseudoJetGetter(
   "emget4",
-  InputContainer = "CaloTopoCluster",
+  InputContainer = "CaloTopoClusters",
   Label = "EMTopo",
   OutputContainer = "PseudoJetEMTopo4",
   SkipNegativeEnergy = True,
@@ -78,7 +78,7 @@ for x in range(0, nJets):
   j = JetRecTool("jetrectool"+app,OutputContainer=out,OutputLevel=OutLevel)
   g = PseudoJetGetter(
     "emget"+app,
-    InputContainer = "CaloTopoCluster",
+    InputContainer = "CaloTopoClusters",
     Label = "EMTopo",
     OutputContainer = "PseudoJetEMTopo"+app,
     SkipNegativeEnergy = True,
diff --git a/Calorimeter/CaloLocalHadCalib/share/GetLCClassification_jobOptions.py b/Calorimeter/CaloLocalHadCalib/share/GetLCClassification_jobOptions.py
index 4cc947de59ef10bd46a9e083262cc54a98eb477f..4cac7dc362f58fa71713c469bc18dd0bebaf9c82 100644
--- a/Calorimeter/CaloLocalHadCalib/share/GetLCClassification_jobOptions.py
+++ b/Calorimeter/CaloLocalHadCalib/share/GetLCClassification_jobOptions.py
@@ -23,6 +23,6 @@ GetLCC.OutputFileName = outFileNameLCC
 #    'log10(<rho_cell (MeV/mm^3)>)-log10(E_clus (MeV))': ('log10(<rho_cell (MeV/mm^3)>)-log10(E_clus (MeV))',-9.0,-4.0,20),
 #    'log10(lambda_clus (mm))': ('log10(lambda_clus (mm))',0.0,4.0,20)}
 #
-GetLCC.ClusterCollectionName = "CaloTopoCluster"
+GetLCC.ClusterCollectionName = "CaloTopoClusters"
 
 topSequence += GetLCC
diff --git a/Calorimeter/CaloLocalHadCalib/share/GetLCDeadMaterialTree_jobOptions.py b/Calorimeter/CaloLocalHadCalib/share/GetLCDeadMaterialTree_jobOptions.py
index a1a2e784feffd1efd3df331ab9bb47996ca44b6d..4d2475bee5906ff79ac884e662a7f040c136ac27 100644
--- a/Calorimeter/CaloLocalHadCalib/share/GetLCDeadMaterialTree_jobOptions.py
+++ b/Calorimeter/CaloLocalHadCalib/share/GetLCDeadMaterialTree_jobOptions.py
@@ -8,8 +8,8 @@ from AthenaCommon.AlgSequence import AlgSequence
 
 GetLCDM = GetLCDeadMaterialTree("GetLCDM")
 GetLCDM.HadDMCoeffInitFile = "CaloHadDMCoeff_init_v2.txt"
-GetLCDM.ClusterCollectionName = "CaloTopoCluster"
-GetLCDM.ClusterCollectionNameCalib = "CaloCalTopoCluster"
+GetLCDM.ClusterCollectionName = "CaloTopoClusters"
+GetLCDM.ClusterCollectionNameCalib = "CaloCalTopoClusters"
 GetLCDM.doSaveCalibClusInfo = False # to save additional info from collection with calibrated clusters
 if 'outFileNameLCDM' in dir():
   GetLCDM.OutputFileName = outFileNameLCDM
diff --git a/Calorimeter/CaloLocalHadCalib/share/GetLCOutOfCluster_jobOptions.py b/Calorimeter/CaloLocalHadCalib/share/GetLCOutOfCluster_jobOptions.py
index 0a409fd2746714caaf262eb32d240ac24bb9099c..c271183a2694465d843f27cf01463dc9cd96f2ce 100644
--- a/Calorimeter/CaloLocalHadCalib/share/GetLCOutOfCluster_jobOptions.py
+++ b/Calorimeter/CaloLocalHadCalib/share/GetLCOutOfCluster_jobOptions.py
@@ -23,6 +23,6 @@ GetLCO.OutputFileName = outFileNameLCO
 #    'log10(lambda_clus (mm))': ('log10(lambda_clus (mm))',0.0,4.0,20),
 #    'weight': ('weight',0.,5.,1)}
 #
-GetLCO.ClusterCollectionName = "CaloTopoCluster"
+GetLCO.ClusterCollectionName = "CaloTopoClusters"
 
 topSequence += GetLCO
diff --git a/Calorimeter/CaloLocalHadCalib/share/GetLCSinglePionsPerf_jobOptions.py b/Calorimeter/CaloLocalHadCalib/share/GetLCSinglePionsPerf_jobOptions.py
index 2549a14b2e4ba323ad0049ad7ddd1c1349b68374..6d980d075af114bca05b5f8d8bf0a620aaea2e14 100644
--- a/Calorimeter/CaloLocalHadCalib/share/GetLCSinglePionsPerf_jobOptions.py
+++ b/Calorimeter/CaloLocalHadCalib/share/GetLCSinglePionsPerf_jobOptions.py
@@ -10,10 +10,10 @@ from math import pi
 lcPerf = GetLCSinglePionsPerf("LocalHadPerformance")
 
 # collection name to study cluster moments
-lcPerf.ClusterBasicCollName = "CaloTopoCluster"
+lcPerf.ClusterBasicCollName = "CaloTopoClusters"
 
 # collections names to study engReco wrt Truth after different correction steps
-lcPerf.ClusterCollectionNames = ["CaloTopoCluster", "CaloWTopoCluster", "CaloOOCTopoCluster", "CaloCalTopoClusters"]
+lcPerf.ClusterCollectionNames = ["CaloTopoClusters", "CaloWTopoCluster", "CaloOOCTopoCluster", "CaloCalTopoClusters"]
 #lcPerf.ClusterCollectionNames = ["CaloTopoCluster_EMAll", "CaloWTopoCluster_EMAll", "CaloOOCTopoCluster_EMAll", "CaloCalTopoCluster_EMAll"]
 #lcPerf.ClusterCollectionNames = ["CaloTopoCluster_HadAll", "CaloWTopoCluster_HadAll", "CaloOOCTopoCluster_HadAll", "CaloCalTopoCluster_HadAll"]
 
diff --git a/Calorimeter/CaloLocalHadCalib/share/GetLCWeights_jobOptions.py b/Calorimeter/CaloLocalHadCalib/share/GetLCWeights_jobOptions.py
index 31bf88a3468dd3e7e1f659493adb2ec1bdaa08f3..45db078c427ab697361cc98d08c5477f30fbe4a1 100644
--- a/Calorimeter/CaloLocalHadCalib/share/GetLCWeights_jobOptions.py
+++ b/Calorimeter/CaloLocalHadCalib/share/GetLCWeights_jobOptions.py
@@ -32,7 +32,7 @@ GetLCW.UseInversionMethod = True
 # 'EMB2:log10(rho_cell (MeV/mm^3))': ('log10(rho_cell (MeV/mm^3))',-7.0,1.0,20),
 # 'EMB2:weight': ('weight',-2.0,3.0,1)}
 #
-GetLCW.ClusterCollectionName = "CaloTopoCluster"
+GetLCW.ClusterCollectionName = "CaloTopoClusters"
 GetLCW.CalibrationHitContainerNames = ["LArCalibrationHitInactive"
                                        ,"LArCalibrationHitActive"
                                        ,"TileCalibHitInactiveCell"
diff --git a/Calorimeter/CaloLocalHadCalib/src/GetLCClassification.cxx b/Calorimeter/CaloLocalHadCalib/src/GetLCClassification.cxx
index 96ea7857f01998ed331df934e5cbaab39cca85ed..b9598048619f7320b2ad0157d652c308897a5caf 100644
--- a/Calorimeter/CaloLocalHadCalib/src/GetLCClassification.cxx
+++ b/Calorimeter/CaloLocalHadCalib/src/GetLCClassification.cxx
@@ -43,7 +43,7 @@ GetLCClassification::GetLCClassification(const std::string& name,
 					 ISvcLocator* pSvcLocator) 
   : AthAlgorithm(name, pSvcLocator),
     m_outputFile(nullptr),
-    m_clusterCollName("CaloTopoCluster"),
+    m_clusterCollName("CaloTopoClusters"),
     m_NormalizationType("Lin"),
     m_NormalizationTypeNumber(0),
     m_ClassificationType("None"),
diff --git a/Calorimeter/CaloLocalHadCalib/src/GetLCDeadMaterialTree.cxx b/Calorimeter/CaloLocalHadCalib/src/GetLCDeadMaterialTree.cxx
index 20ab84f7affa69e4d6a9a25ed7cef5cf00bc18a6..2c55d6f1074c6e45c1d4d32223ced423e715731a 100644
--- a/Calorimeter/CaloLocalHadCalib/src/GetLCDeadMaterialTree.cxx
+++ b/Calorimeter/CaloLocalHadCalib/src/GetLCDeadMaterialTree.cxx
@@ -63,7 +63,7 @@ GetLCDeadMaterialTree::GetLCDeadMaterialTree(const std::string& name,
     m_outputTree(nullptr),
     m_outputFileName("DeadMaterialTree.root"),
     m_outputFile(nullptr),
-    m_clusterCollName("CaloTopoCluster"),
+    m_clusterCollName("CaloTopoClusters"),
     m_HadDMCoeff(nullptr),
     m_data(nullptr),
     m_doSaveCalibClusInfo(false),
diff --git a/Calorimeter/CaloLocalHadCalib/src/GetLCOutOfCluster.cxx b/Calorimeter/CaloLocalHadCalib/src/GetLCOutOfCluster.cxx
index c8bdf3a2e47e8b42938a8a3d078f314eb67592ba..43474afb2f906e900c8f7aa86725e20db5a48394 100644
--- a/Calorimeter/CaloLocalHadCalib/src/GetLCOutOfCluster.cxx
+++ b/Calorimeter/CaloLocalHadCalib/src/GetLCOutOfCluster.cxx
@@ -42,7 +42,7 @@ GetLCOutOfCluster::GetLCOutOfCluster(const std::string& name,
 				     ISvcLocator* pSvcLocator) 
   : AthAlgorithm(name, pSvcLocator),
     m_outputFile(nullptr),
-    m_clusterCollName("CaloTopoCluster"),
+    m_clusterCollName("CaloTopoClusters"),
     m_NormalizationType("Lin"),
     m_NormalizationTypeNumber(0),
     m_ClassificationType("None"),
diff --git a/Calorimeter/CaloLocalHadCalib/src/GetLCWeights.cxx b/Calorimeter/CaloLocalHadCalib/src/GetLCWeights.cxx
index 28c56b3326854bc0e2146813c5fd8a03d41e5cbf..bff9b19b847cf1af6afb8b65e9c8ae827a74c972 100644
--- a/Calorimeter/CaloLocalHadCalib/src/GetLCWeights.cxx
+++ b/Calorimeter/CaloLocalHadCalib/src/GetLCWeights.cxx
@@ -46,7 +46,7 @@ GetLCWeights::GetLCWeights(const std::string& name,
 			   ISvcLocator* pSvcLocator) 
   : AthAlgorithm(name, pSvcLocator),
     m_outputFile(nullptr),
-    m_clusterCollName("CaloTopoCluster"),
+    m_clusterCollName("CaloTopoClusters"),
     m_useInversionMethod(true),
     m_NormalizationType("Lin"),
     m_NormalizationTypeNumber(0),
diff --git a/Calorimeter/CaloRec/python/CaloClusterTopoGetter.py b/Calorimeter/CaloRec/python/CaloClusterTopoGetter.py
index 81d03a6fa7053cf110f346983c3dd8f2d1217584..3bee11446d5c8cf340cf8806f8dda52dddc567ed 100644
--- a/Calorimeter/CaloRec/python/CaloClusterTopoGetter.py
+++ b/Calorimeter/CaloRec/python/CaloClusterTopoGetter.py
@@ -61,13 +61,13 @@ class CaloClusterTopoGetter ( Configured )  :
     _outputType = "CaloClusterContainer" # the main (AOD) object type
     if jobproperties.CaloTopoClusterFlags.doTopoClusterLocalCalib() or jobproperties.CaloTopoClusterFlags.doCellWeightCalib():
         _outputKey = "CaloCalTopoClusters" # the main (AOD) object key
-        _output = { _outputType : ["CaloCalTopoClusters","CaloTopoCluster"],
+        _output = { _outputType : ["CaloCalTopoClusters","CaloTopoClusters"],
                     "xAOD::CaloClusterAuxContainer" : ["CaloTopoClusterAux.","CaloCalTopoClustersAux."],
                     "CaloClusterCellLinkContainer" : ["CaloCalTopoClusters_links","CaloTopoCluster_links"]
                     }
     else:
-        _outputKey = "CaloTopoCluster" # the main (AOD) object key
-        _output = { _outputType : "CaloTopoCluster",
+        _outputKey = "CaloTopoClusters" # the main (AOD) object key
+        _output = { _outputType : "CaloTopoClusters",
                     "xAOD::CaloClusterAuxContainer" : "CaloTopoClusterAux.",
                     "CaloClusterCellLinkContainer" : "CaloTopoCluster_links"
                     }
@@ -338,7 +338,7 @@ class CaloClusterTopoGetter ( Configured )  :
 
 
 
-        theCaloClusterSnapshot=CaloClusterSnapshot(OutputName="CaloTopoCluster",SetCrossLinks=True)
+        theCaloClusterSnapshot=CaloClusterSnapshot(OutputName="CaloTopoClusters",SetCrossLinks=True)
 
             
         # maker tools
@@ -431,7 +431,7 @@ class CaloClusterTopoGetter ( Configured )  :
         if jobproperties.CaloTopoClusterFlags.doTopoClusterLocalCalib():
             CaloTopoCluster.ClustersOutputName="CaloCalTopoClusters"
         else:
-            CaloTopoCluster.ClustersOutputName="CaloTopoCluster"
+            CaloTopoCluster.ClustersOutputName="CaloTopoClusters"
         CaloTopoCluster.ClusterMakerTools = [TopoMaker, TopoSplitter]
             
         from CaloClusterCorrection.CaloClusterBadChannelListCorr import CaloClusterBadChannelListCorr
diff --git a/Calorimeter/CaloRec/python/CaloRecoConfig.py b/Calorimeter/CaloRec/python/CaloRecoConfig.py
index 4628c40cea948bd297d6e6fa67bef9f3fd0fbf6e..b4c7df4aa3f537463f93bbe3eaae6c623ecfd5af 100644
--- a/Calorimeter/CaloRec/python/CaloRecoConfig.py
+++ b/Calorimeter/CaloRec/python/CaloRecoConfig.py
@@ -43,9 +43,9 @@ def CaloRecoCfg(configFlags, clustersname=None,doLCCalib=None):
     from LArCellRec.LArNoisyROSummaryConfig import LArNoisyROSummaryCfg
     result.merge(LArNoisyROSummaryCfg(configFlags))
 
-    from LArROD.LArFebErrorSummaryMakerConfig import LArFebErrorSummaryMakerCfg
-    result.merge(LArFebErrorSummaryMakerCfg(configFlags))
-
+    if not configFlags.Input.isMC:
+        from LArROD.LArFebErrorSummaryMakerConfig import LArFebErrorSummaryMakerCfg
+        result.merge(LArFebErrorSummaryMakerCfg(configFlags))
 
     return result
 
diff --git a/Calorimeter/CaloRec/share/CaloRecOutputItemList_jobOptions.py b/Calorimeter/CaloRec/share/CaloRecOutputItemList_jobOptions.py
index 14365aceadfc12b8529d2b59724095a79ce5a1ad..82bf65664154fe2512affd04bf42ff2932e00767 100644
--- a/Calorimeter/CaloRec/share/CaloRecOutputItemList_jobOptions.py
+++ b/Calorimeter/CaloRec/share/CaloRecOutputItemList_jobOptions.py
@@ -40,7 +40,7 @@ CaloClusterKeys+=["EMTopoSW35"]
 #CaloClusterKeys+=["LArClusterEMSofte"]
 
 if rec.Commissioning():
-    # CaloClusterKeys += ["LArMuClusterCandidates","CaloTopoCluster","EMTopoCluster420","TileTopoCluster","MuonClusterCollection"]
+    # CaloClusterKeys += ["LArMuClusterCandidates","CaloTopoClusters","EMTopoCluster420","TileTopoCluster","MuonClusterCollection"]
     CaloClusterKeys += ["MuonClusterCollection"]    
 
 for theKey in CaloClusterKeys:
diff --git a/Calorimeter/CaloRec/share/CaloRec_jobOptions.py b/Calorimeter/CaloRec/share/CaloRec_jobOptions.py
index 2a500d27c039984a57cdcc029eb610ae15f6cf83..25a3e9b8f0c669d7af80ec0b38b6fbe9aa1a9501 100644
--- a/Calorimeter/CaloRec/share/CaloRec_jobOptions.py
+++ b/Calorimeter/CaloRec/share/CaloRec_jobOptions.py
@@ -354,7 +354,7 @@ if rec.doWritexAOD():
     from xAODCaloEventCnv.xAODCaloEventCnvConf import ClusterCreator
     topSequence+=ClusterCreator("CaloCluster2xAOD")
 
-    #CaloClusterKeys=("CaloCalTopoCluster", "CaloTopoCluster", "EMTopoCluster430", "LArClusterEM", "LArClusterEM7_11Nocorr",
+    #CaloClusterKeys=("CaloCalTopoClusters", "CaloTopoClusters", "EMTopoCluster430", "LArClusterEM", "LArClusterEM7_11Nocorr",
     #                 "CombinedCluster","EMTopoSW35","egClusterCollection","LArClusterEMSofte")
     #for k in CaloClusterKeys:
     #    itemname="CaloClusterContainer#"+k
diff --git a/Calorimeter/CaloRec/src/CaloTopoTowerAlgorithm.cxx b/Calorimeter/CaloRec/src/CaloTopoTowerAlgorithm.cxx
index 06d2b1a6cf9997e81cb38377d666596c00be5aa4..ecb1c472fe1913eb8b4b138c2e618b90fe2ca07e 100644
--- a/Calorimeter/CaloRec/src/CaloTopoTowerAlgorithm.cxx
+++ b/Calorimeter/CaloRec/src/CaloTopoTowerAlgorithm.cxx
@@ -30,7 +30,7 @@ CaloTopoTowerAlgorithm::CaloTopoTowerAlgorithm(const std::string& name,
   , m_genericLink(true) 
   , m_ptools( this )
   , m_cellContainerKey("AllCalo")
-  , m_clusterKey("CaloTopoCluster")
+  , m_clusterKey("CaloTopoClusters")
   , m_cellToClusterMapKey("CaloCell2TopoCluster")
   , m_towerContainerKey("CmbTower")
   , m_newTowerContainerKey("TopoTower")
diff --git a/Calorimeter/CaloRec/src/CaloTopoTowerFromClusterMaker.cxx b/Calorimeter/CaloRec/src/CaloTopoTowerFromClusterMaker.cxx
index 32a26459a2b32977d16d05e385905506a45849c3..aaf92b6285e03929c224b05868989c765069d8df 100644
--- a/Calorimeter/CaloRec/src/CaloTopoTowerFromClusterMaker.cxx
+++ b/Calorimeter/CaloRec/src/CaloTopoTowerFromClusterMaker.cxx
@@ -52,7 +52,7 @@ CaloTopoTowerFromClusterMaker::CaloTopoTowerFromClusterMaker(const std::string&
 							     const std::string& name,
 							     const IInterface* pParent)
   : AthAlgTool(type,name,pParent)
-  , m_clusterContainerKey("CaloTopoCluster")
+  , m_clusterContainerKey("CaloTopoClusters")
   , m_cellContainerKey("AllCalo")
   , m_energyThreshold(m_energyThresholdDef-1.)
   , m_clusterRange(m_clusterRangeDef)
diff --git a/Calorimeter/CaloRec/src/CaloTopoTowerFromClusterMaker.h b/Calorimeter/CaloRec/src/CaloTopoTowerFromClusterMaker.h
index c0bb2e2bfaacc855df826cab1e6989771826e6fb..35c5ea4d8bc384a064161637beff5391c07fd72e 100644
--- a/Calorimeter/CaloRec/src/CaloTopoTowerFromClusterMaker.h
+++ b/Calorimeter/CaloRec/src/CaloTopoTowerFromClusterMaker.h
@@ -203,7 +203,7 @@ inline bool                                  CaloTopoTowerFromClusterMaker::isVa
 /// <tr>
 /// <td align="left" valign="top"><tt>ClusterContainerKey</tt></td>
 /// <td align="center" valign="top"><tt>SG::ReadHandleKey<xAOD::CaloClusterContainer></tt></td>
-/// <td align="center" valign="top"><tt>"CaloTopoCluster"</tt></td>
+/// <td align="center" valign="top"><tt>"CaloTopoClusters"</tt></td>
 /// <td align="left" valign="top">cluster container key is needed to pick up @c xAOD::CaloClusterContainer for filtered mode (<tt>UseCellsFromCluster = true</tt>)
 /// </tr>
 /// <tr>
diff --git a/Calorimeter/CaloUtils/CMakeLists.txt b/Calorimeter/CaloUtils/CMakeLists.txt
index b76e4a4de1e0df7e94784231e511109bc3ad6e97..e42ec2f0b84623b009d45a1379421ec98bacf1af 100644
--- a/Calorimeter/CaloUtils/CMakeLists.txt
+++ b/Calorimeter/CaloUtils/CMakeLists.txt
@@ -60,7 +60,7 @@ atlas_add_test( CaloTowerStore_test
 atlas_add_test( CaloTowerBuilderTool_test
    SCRIPT test/CaloTowerBuilderTool_test.sh
    LOG_IGNORE_PATTERN "Reading file|Unable to locate catalog|Cache alignment|IOVDbSvc +INFO|INFO Initializing"
-   ENVIRONMENT "ATLAS_REFERENCE_TAG=CaloUtils/CaloUtils-01-00-17"
+   ENVIRONMENT "ATLAS_REFERENCE_TAG=CaloUtils/CaloUtils-01-00-18"
    PROPERTIES TIMEOUT 500 )
 
 atlas_add_test( ToolWithConstants_test
diff --git a/Calorimeter/CaloUtils/share/CaloTowerStore_test.ref b/Calorimeter/CaloUtils/share/CaloTowerStore_test.ref
index 18138f453864041959a3613e3f3516c11ef467e6..9e27ad2957dbe2c6cea5f07c0fa493247e111c72 100644
--- a/Calorimeter/CaloUtils/share/CaloTowerStore_test.ref
+++ b/Calorimeter/CaloUtils/share/CaloTowerStore_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:34:52 CET 2021
+Wed Nov 17 09:54:17 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "CaloUtils/CaloTowerStore_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "CaloIdCnv/CaloIdCnv_joboptions.py"
 Py:Athena            INFO including file "CaloConditions/CaloConditions_jobOptions.py"
@@ -26,20 +21,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:35:14 2021
+                                          running on pcaz004 on Wed Nov 17 09:54:27 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 3378 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 3427 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -159,7 +154,7 @@ BarrelConstruction   INFO   Use sagging in geometry  ? 0
 EMECConstruction     INFO multi-layered version of absorbers activated, parameter value is 1
 EMECConstruction     INFO activating LAr::EMEC::Pos::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Pos::OuterWheel
-ClassIDSvc           INFO getRegistryEntries: read 6066 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 5930 CLIDRegistry entries for module ALL
 CaloIDHelper_ID...   INFO in createObj: creating a TileTBID helper object in the detector store
 TileTBID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -177,7 +172,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -189,9 +184,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -208,24 +203,8 @@ CondInputLoader      INFO Adding base classes:
 CondInputLoader      INFO Will create WriteCondHandle dependencies for the following DataObjects:
     +  ( 'CaloRec::CaloCellPositionShift' , 'ConditionStore+LArCellPositionShift' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 ApplicationMgr       INFO Application Manager Initialized successfully
-ClassIDSvc           INFO getRegistryEntries: read 2146 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 2148 CLIDRegistry entries for module ALL
 CondInputLoader      INFO created CondCont<CaloRec::CaloCellPositionShift> with key 'ConditionStore+LArCellPositionShift'
 CondInputLoader      INFO created CondCont<DetCondKeyTrans> with key 'ConditionStore+/LAR/Align'
 ApplicationMgr       INFO Application Manager Started successfully
@@ -254,6 +233,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -264,7 +257,6 @@ IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
 test1
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 1 events processed so far  <<<===
 /cvmfs/atlas-co...   INFO Database being retired...
@@ -276,25 +268,25 @@ Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All]
 ApplicationMgr       INFO Application Manager Stopped successfully
 CondInputLoader      INFO Finalizing CondInputLoader...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.05 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnAttrIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnOffIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTPpmRxIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.02 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 1/0 objs/chan/bytes 1/1/173 ((     0.02 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.04 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 1/0 objs/chan/bytes 1/1/173 ((     0.03 ))s
 IOVDbFolder       WARNING Folder /LAR/Identifier/LArTTCellMapAtlas is requested but no data retrieved
-IOVDbSvc             INFO  bytes in ((      0.07 ))s
+IOVDbSvc             INFO  bytes in ((      0.12 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 3 ReadTime: ((     0.07 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 3 ReadTime: ((     0.12 ))s
 IOVDbSvc             INFO Connection COOLOFL_CALO/OFLP200 : nConnect: 1 nFolders: 3 ReadTime: ((     0.00 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  110 [ms] Ave/Min/Max=    27.5(+-    42.1)/       0/     100 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  140 [ms] Ave/Min/Max=      35(+-    49.7)/       0/     120 [ms] #=  4
-ChronoStatSvc        INFO Time User   : Tot= 1.62  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      25(+-    37.7)/       0/      90 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      30(+-    46.4)/       0/     110 [ms] #=  4
+ChronoStatSvc        INFO Time User   : Tot= 1.03  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/Commission/CommissionUtils/share/RecoCosmic.py b/Commission/CommissionUtils/share/RecoCosmic.py
index 7f24f6f9e25ee9739191cf0ed536520f0150bfb3..41371572c9bd2349138becf4895a6e1bcbd016ab 100644
--- a/Commission/CommissionUtils/share/RecoCosmic.py
+++ b/Commission/CommissionUtils/share/RecoCosmic.py
@@ -52,7 +52,7 @@ CaloTopoClusterMaker.TopoCluster.CalorimeterNames=[ "TILE" ]
 # slim cells 
 theApp.TopAlg +=["CaloClusterCellSlimmer/slimmer"]
 slimmer = Algorithm("slimmer")
-slimmer.ClusterContainerNames = ["EMTopoCluster","CaloTopoCluster"]
+slimmer.ClusterContainerNames = ["EMTopoCluster","CaloTopoClusters"]
 slimmer.CellContainerName = "ClusterOnly" 
 
 
diff --git a/Control/AthContainers/Root/AuxVectorData.cxx b/Control/AthContainers/Root/AuxVectorData.cxx
index 42fa0b11843a6dbe168b0deaf77df589b2e2c754..6d0c881998fc41e64c3af873ffeb5b021dcc4c66 100644
--- a/Control/AthContainers/Root/AuxVectorData.cxx
+++ b/Control/AthContainers/Root/AuxVectorData.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 /**
  * @file AthContainers/src/AuxVectorData.cxx
@@ -515,6 +515,9 @@ void AuxVectorData::Cache::store (SG::auxid_t auxid, void* ptr)
     std::fill (newcache + m_cache_len, newcache + newlen,
                static_cast<void*>(0));
 
+    // The above writes must be visible before we update the cache pointers.
+    AthContainers_detail::fence_seq_cst();
+
     // Store so that other threads can see it.
     // The stores to m_cache must happen before the store to m_cache_len;
     // we use a fence to ensure this.
diff --git a/Control/AthContainers/test/AuxVectorData_test.cxx b/Control/AthContainers/test/AuxVectorData_test.cxx
index fdcd8f60a54294bff925baad0b7acd56b9cc8d27..e5f572504af9521b530c1d23c8fded7ab3c84352 100644
--- a/Control/AthContainers/test/AuxVectorData_test.cxx
+++ b/Control/AthContainers/test/AuxVectorData_test.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 // $Id$
@@ -348,8 +348,8 @@ void ThreadingTest::threadedTest()
   AuxVectorData_test b;
   b.setStore (&m_store);
 
-  int nthread = 10;
-  AthContainers_detail::thread threads[10];
+  constexpr int nthread = 10;
+  AthContainers_detail::thread threads[nthread];
   m_sm.lock();
   for (int i=0; i < nthread; i++)
     threads[i] = AthContainers_detail::thread (testThread (*this, b, i));
diff --git a/Control/AthLinks/AthLinks/tools/DataProxyHolder.h b/Control/AthLinks/AthLinks/tools/DataProxyHolder.h
index bead67d797675a7f2ef3e3c22881e8d2b0abc1f3..4de440dfd3e34ec386d338fde1f6d9f87077fc2d 100644
--- a/Control/AthLinks/AthLinks/tools/DataProxyHolder.h
+++ b/Control/AthLinks/AthLinks/tools/DataProxyHolder.h
@@ -1,10 +1,8 @@
 // This file's extension implies that it's C, but it's really -*- C++ -*-.
 
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id$
 /**
  * @file AthLinks/tools/DataProxyHolder.h
  * @author scott snyder <snyder@bnl.gov>
@@ -432,7 +430,7 @@ private:
    * If we're holding a pointer directly, rather than a proxy,
    * then return 0 rather than raising an exception.
    */
-  IProxyDict* source1() const;
+  IProxyDict* source1();
 
 
   /**
diff --git a/Control/AthLinks/AthLinks/tools/DataProxyHolder.icc b/Control/AthLinks/AthLinks/tools/DataProxyHolder.icc
index 102143459fa87decbe819b91c4dcc19acc4681a5..a64b82c5b538647a44bae7856ce7227325a10639 100644
--- a/Control/AthLinks/AthLinks/tools/DataProxyHolder.icc
+++ b/Control/AthLinks/AthLinks/tools/DataProxyHolder.icc
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 /**
  * @file AthLinks/tools/DataProxyHolder.icc
@@ -164,7 +164,7 @@ void DataProxyHolder::storeObjpointer (const_pointer_t p)
  * then return 0 rather than raising an exception.
  */
 inline
-IProxyDict* DataProxyHolder::source1() const
+IProxyDict* DataProxyHolder::source1()
 {
   if (!m_proxy || isObjpointer()) {
     return 0;
diff --git a/Control/AthLinks/src/DataProxyHolder.cxx b/Control/AthLinks/src/DataProxyHolder.cxx
index 9e63ab18050c616f10ec74ed35c3d878e67fc897..eabc8f5a32a41371374bbbcbf27c27f973a810ee 100644
--- a/Control/AthLinks/src/DataProxyHolder.cxx
+++ b/Control/AthLinks/src/DataProxyHolder.cxx
@@ -20,6 +20,7 @@
 #include "AthenaKernel/IProxyDict.h"
 #include "AthenaKernel/errorcheck.h"
 #include "AthenaKernel/ExtendedEventContext.h"
+#include "CxxUtils/checker_macros.h"
 #include "GaudiKernel/ThreadLocalContext.h"
 
 
@@ -266,8 +267,10 @@ void* DataProxyHolder::storableBase (castfn_t* castfn, CLID clid) const
   // using a hard cast.  Check to see if this object has actually
   // been registered under the requested clid.
   if (m_proxy->transientID (clid)) {
+    // Ok --- DataProxy is thread-safe.
+    SG::DataProxy* proxy_nc ATLAS_THREAD_SAFE = m_proxy;
     DataBucketBase* db =
-      dynamic_cast<DataBucketBase*> (m_proxy->accessData());
+      dynamic_cast<DataBucketBase*> (proxy_nc->accessData());
 
     // Do a hard cast...
     if (db)
diff --git a/Control/AthenaCommon/python/Configurable.py b/Control/AthenaCommon/python/Configurable.py
index 79f3094a452c6f5ce0f45321701abb60229b5cc4..15a3eaec24efc630629c66c40a7f29446b51fc4e 100755
--- a/Control/AthenaCommon/python/Configurable.py
+++ b/Control/AthenaCommon/python/Configurable.py
@@ -322,7 +322,7 @@ class Configurable(metaclass=ConfigurableMeta.ConfigurableMeta ):
          ccjo = cc.getJobOptName()
          for c in self.__children:
             if c.getJobOptName() == ccjo:
-               log.error( 'attempt to add a duplicate (%s.%s) ... dupe ignored', joname or self.name(), ccjo )
+               log.debug( 'attempt to add a duplicate (%s.%s) ... dupe ignored', joname or self.name(), ccjo )
                break
          else:
             if index is None:
diff --git a/Control/AthenaConfiguration/python/AccumulatorCache.py b/Control/AthenaConfiguration/python/AccumulatorCache.py
index dace4c1eae896d80c1516204a2cafee5a15466fa..7c74fda9d72c60643531f84b7e821ceb3001209b 100644
--- a/Control/AthenaConfiguration/python/AccumulatorCache.py
+++ b/Control/AthenaConfiguration/python/AccumulatorCache.py
@@ -2,6 +2,7 @@
 #  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 #
 
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaCommon.Logging import logging
 _msg = logging.getLogger('AccumulatorCache')
 
@@ -110,6 +111,7 @@ class AccumulatorDecorator:
         return None
 
     def __call__(self , *args , **kwargs):
+        cacheHit = None
         try:
             t0 = time.perf_counter()
             res, cacheHit = self._callImpl(*args, **kwargs)
@@ -198,6 +200,12 @@ class AccumulatorDecorator:
         else:
             return (self._func(*args , **kwargs), None)
 
+    def __del__(self):
+        # Cleanup dangling private tools of cached CAs
+        for k, v in self._cache.items():
+            if isinstance(v, ComponentAccumulator):
+                v.popPrivateTools(quiet=True)
+
 
 def AccumulatorCache(func = None, maxSize = 128,
                      verifyResult = AccumulatorDecorator.VERIFY_NOTHING, deepCopy = True):
diff --git a/Control/AthenaConfiguration/python/AllConfigFlags.py b/Control/AthenaConfiguration/python/AllConfigFlags.py
index 8cbc0901a593e363eebb9cb5a33ed061fddd9f1d..b9882da84a7a8fa3f91137173fc7db423c8bdb1b 100644
--- a/Control/AthenaConfiguration/python/AllConfigFlags.py
+++ b/Control/AthenaConfiguration/python/AllConfigFlags.py
@@ -43,7 +43,7 @@ def _createCfgFlags():
     acf.addFlag('Input.ProjectName', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("project_name","data17_13TeV") ) # former global.ProjectName
     acf.addFlag('Input.Format', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("file_type","") ) # former global.InputFormat
     acf.addFlag('Input.ProcessingTags', lambda prevFlags : GetFileMD(prevFlags.Input.Files).get("processingTags","") ) # list of names of streams written to this file
-    acf.addFlag('Input.SpecialConfiguration', lambda prevFlags : getSpecialConfigurationMetadata(prevFlags.Input.Files))  # special Configuration options read from input file metadata
+    acf.addFlag('Input.SpecialConfiguration', lambda prevFlags : getSpecialConfigurationMetadata(prevFlags.Input.Files, prevFlags.Input.SecondaryFiles))  # special Configuration options read from input file metadata
 
     def _inputCollections(inputFile):
         if not inputFile:
diff --git a/Control/AthenaConfiguration/python/AtlasSemantics.py b/Control/AthenaConfiguration/python/AtlasSemantics.py
index 31ebbd22ecb7cea1bdb25e5aad8aba6049840a75..b98601bb5d060d3893a7c955ad04115744cf7cef 100644
--- a/Control/AthenaConfiguration/python/AtlasSemantics.py
+++ b/Control/AthenaConfiguration/python/AtlasSemantics.py
@@ -1,20 +1,12 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
-from past.builtins import basestring
 import GaudiConfig2.semantics
 from GaudiKernel.GaudiHandles import PrivateToolHandleArray, PublicToolHandle, ServiceHandle
 import re
-import collections
 import copy
 
-# collections.Sequence is deprecated as of python 3.3.
-# As of 3.9, need to get it from collections.abc.
-# But that doesn't exist in py2.
-try:
-    from collections import abc
-    Sequence = abc.Sequence
-except ImportError:
-    Sequence = collections.Sequence
+from collections import abc
+Sequence = abc.Sequence
 
 class AppendListSemantics(GaudiConfig2.semantics.SequenceSemantics):
     '''
@@ -146,8 +138,8 @@ class PublicHandleArraySemantics(GaudiConfig2.semantics.PropertySemantics):
             elif isinstance(v,(PublicToolHandle,ServiceHandle)):
                 newValue.append("{}/{}".format(v.getType(),v.getName()))
 
-            elif isinstance(v,basestring):
-                #Check if componet is known ...
+            elif isinstance(v,str):
+                #Check if component is known ...
                 newValue.append(v)
                 pass
             else:
diff --git a/Control/AthenaConfiguration/python/AutoConfigFlags.py b/Control/AthenaConfiguration/python/AutoConfigFlags.py
index 794a9943251e23c08e03c839a21f0f655e5aa433..adb551aded023f87fc2a38b09dafd62c83e56e73 100644
--- a/Control/AthenaConfiguration/python/AutoConfigFlags.py
+++ b/Control/AthenaConfiguration/python/AutoConfigFlags.py
@@ -159,7 +159,7 @@ def getInitialTimeStampsFromRunNumbers(runNumbers):
     return timeStamps
 
 
-def getSpecialConfigurationMetadata(inputFiles):
+def getSpecialConfigurationMetadata(inputFiles, secondaryInputFiles):
     """Read in special simulation job option fragments based on metadata
     passed by the evgen stage
     """
@@ -180,9 +180,15 @@ def getSpecialConfigurationMetadata(inputFiles):
                                        'SimulationJobOptions/preInclude.Qball.py' : 'Monopole.MonopoleConfigNew.QballPreInclude',
                                        'SimulationJobOptions/preInclude.RHadronsPythia8.py' : None, # FIXME
                                        'SimulationJobOptions/preInclude.fcp.py' : 'Monopole.MonopoleConfigNew.fcpPreInclude' }
+    specialConfigString = ''
+    from AthenaConfiguration.AutoConfigFlags import GetFileMD
     if len(inputFiles)>0:
-        from AthenaConfiguration.AutoConfigFlags import GetFileMD
         specialConfigString = GetFileMD(inputFiles).get('specialConfiguration', '')
+    if (not len(specialConfigString) or specialConfigString == 'NONE') and len(secondaryInputFiles)>0:
+        # If there is no specialConfiguration metadata in the primary
+        # input try the secondary inputs (MC Overlay case)
+        specialConfigString = GetFileMD(secondaryInputFiles).get('specialConfiguration', '')
+    if len(specialConfigString)>0:
         ## Parse the specialConfiguration string
         ## Format is 'key1=value1;key2=value2;...'. or just '
         spcitems = specialConfigString.split(";")
diff --git a/Control/AthenaConfiguration/python/ComponentAccumulator.py b/Control/AthenaConfiguration/python/ComponentAccumulator.py
index 359ce74603f824488c5306e1d53537438cb29e53..b83453f014c0e34b0f1c9a2eef57a44411da5958 100644
--- a/Control/AthenaConfiguration/python/ComponentAccumulator.py
+++ b/Control/AthenaConfiguration/python/ComponentAccumulator.py
@@ -339,12 +339,13 @@ class ComponentAccumulator(object):
 
         return
 
-    def popPrivateTools(self):
+    def popPrivateTools(self, quiet=False):
         """Get the (list of) private AlgTools from this ComponentAccumulator.
-        The CA will not keep any reference to the AlgTool.
+        The CA will not keep any reference to the AlgTool. Throw an exception if
+        no tools are available unless quiet=True.
         """
         tool=self._privateTools
-        if tool is None:
+        if not quiet and tool is None:
             raise ConfigurationError("Private tool(s) requested, but none are present")
         self._privateTools=None
         return tool
diff --git a/Control/AthenaConfiguration/python/OldFlags2NewFlags.py b/Control/AthenaConfiguration/python/OldFlags2NewFlags.py
index 8e5c56d3157cee898cb3a0015f30cd5d645c1a04..f7338802082216e42a1b7b40e2e567081bf5f0c0 100644
--- a/Control/AthenaConfiguration/python/OldFlags2NewFlags.py
+++ b/Control/AthenaConfiguration/python/OldFlags2NewFlags.py
@@ -56,7 +56,7 @@ def getNewConfigFlags():
     geom_flag_map.update({ 'MM':'Micromegas', 'sTGC':'sTGC'})
 
     # Geometry - Forward
-    # TODO
+    geom_flag_map.update({'Lucid':'Lucid', 'ZDC':'ZDC', 'ALFA':'ALFA', 'AFP':'AFP'})
 
     # Now set Geometry i.e. do equivalent of : 
     # ConfigFlags.Detector.GeometryBpipe = DetFlags.geometry.bpipe_on()
diff --git a/Control/AthenaConfiguration/python/testAccumulatorCache.py b/Control/AthenaConfiguration/python/testAccumulatorCache.py
index b6296a5b3802b10830351d016def7f538db6c346..aebe23894aa4b08ef4a6ec69eb32cd6e0ae3774e 100755
--- a/Control/AthenaConfiguration/python/testAccumulatorCache.py
+++ b/Control/AthenaConfiguration/python/testAccumulatorCache.py
@@ -52,6 +52,19 @@ class TestCache(unittest.TestCase):
         info = fac.getInfo()
         self.assertEqual(info["hits"] , 1)
 
+    def test_exception(self):
+        """Test cache when function throws exception."""
+
+        class MyException(BaseException):
+            pass
+
+        @AccumulatorCache
+        def throw():
+            raise MyException()
+
+        # Make sure no other exception is thrown by decorator itself
+        self.assertRaises(MyException, throw)
+
     def test_cache_limit(self):
         """Test cache limits."""
 
@@ -294,5 +307,37 @@ class TestCache(unittest.TestCase):
         self.assertEqual(info["cache_size"] , 0)
 
 
+class TestCA(unittest.TestCase):
+    """
+    ComponentAccumulator specific tests
+    """
+
+    def setUp(self):
+        """Add handler for ERROR messages"""
+        import io
+        from AthenaCommon.Logging import logging
+
+        self.errors = io.StringIO()
+        handler = logging.StreamHandler(self.errors)
+        handler.setLevel(logging.ERROR)
+        logging.getLogger().addHandler(handler)
+
+    def test_private_tools(self):
+        """Test caching of CAs with private tools."""
+        from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+        from AthenaConfiguration.ComponentFactory import CompFactory
+
+        @AccumulatorCache(deepCopy = True)
+        def cfg():
+            acc = ComponentAccumulator()
+            acc.setPrivateTools(CompFactory.AthenaOutputStreamTool())
+            return acc
+
+        acc = cfg()
+        acc.popPrivateTools()
+        del acc  # no ERROR here as we consumed the private tools
+        del cfg  # this produces an ERROR if private tools of cached CAs are not deleted
+        self.assertTrue(len(self.errors.getvalue())==0)
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/Control/AthenaExamples/AthExHive/src/HiveExSvc.h b/Control/AthenaExamples/AthExHive/src/HiveExSvc.h
index 646241e5c8dbbc3f1377b4adaee43c174b7cfcef..b3efd251928227a5d4bde32d4103f8fe3cbd408c 100644
--- a/Control/AthenaExamples/AthExHive/src/HiveExSvc.h
+++ b/Control/AthenaExamples/AthExHive/src/HiveExSvc.h
@@ -30,7 +30,7 @@ public:
   virtual StatusCode initialize() override;
   virtual StatusCode finalize() override;
   
-  void add(const std::string&, const unsigned int&);
+  virtual void add(const std::string&, const unsigned int&) override;
 
 private:
 
diff --git a/Control/AthenaMonitoring/CMakeLists.txt b/Control/AthenaMonitoring/CMakeLists.txt
index c954f136aff26c83d879e625680d0c6e9dccb5e3..87c41d9dfc936a3313564f711e3a2da1af017c7c 100644
--- a/Control/AthenaMonitoring/CMakeLists.txt
+++ b/Control/AthenaMonitoring/CMakeLists.txt
@@ -68,8 +68,10 @@ atlas_install_runtime( share/test_unit_ExampleMonitorAlgorithm*.ref )
 atlas_add_test( ExampleMonitorAlgorithm_test
     SCRIPT test/test_unit_ExampleMonitorAlgorithm.sh
     PROPERTIES TIMEOUT 300
+    POST_EXEC_SCRIPT nopost.sh
 )
 atlas_add_test( ExampleMonitorAlgorithm_online_test
     SCRIPT test/test_unit_ExampleMonitorAlgorithm_online.sh
     PROPERTIES TIMEOUT 300
+    POST_EXEC_SCRIPT nopost.sh
 )
\ No newline at end of file
diff --git a/Control/AthenaMonitoring/python/ExampleMonitorAlgorithm.py b/Control/AthenaMonitoring/python/ExampleMonitorAlgorithm.py
index 7bd5f4b5370b9821cf7e098d056b9f9d66bb89b4..c629e2795d9a4b2849321825d9ef2df82082a0ef 100644
--- a/Control/AthenaMonitoring/python/ExampleMonitorAlgorithm.py
+++ b/Control/AthenaMonitoring/python/ExampleMonitorAlgorithm.py
@@ -88,6 +88,9 @@ def ExampleMonitoringConfig(inputFlags):
     # specify a merge method
     myGroup.defineHistogram('lumiPerBCID;lumiPerBCID_merge',title='Luminosity,WithCommaInTitle;L/BCID;Events',
                             path='ToRuleThemAll',xbins=40,xmin=0.0,xmax=80.0, merge='weightedAverage')
+    # use strings as bin labels
+    myGroup.defineHistogram('evtstr', title='Event number as string;Event number;Events',
+                            xbins=2500, path='ToRuleThemAll', merge='merge')
     # TEfficiencies
     myGroup.defineHistogram('pT_passed,pT', type='TEfficiency', title='Test TEfficiency;x;Eff',
                             path='AndInTheDarkness', xbins=100, xmin=0.0, xmax=50.0)
diff --git a/Control/AthenaMonitoring/share/test_unit_ExampleMonitorAlgorithm.ref b/Control/AthenaMonitoring/share/test_unit_ExampleMonitorAlgorithm.ref
index 1cfa541a2d79e80e5fe1531d8767df588ebfdd5b..8ab0cb3c5f3ea449133da873a67248a795c7b15f 100644
--- a/Control/AthenaMonitoring/share/test_unit_ExampleMonitorAlgorithm.ref
+++ b/Control/AthenaMonitoring/share/test_unit_ExampleMonitorAlgorithm.ref
@@ -13,7 +13,9 @@ TH1F /run_311321/top/Keys/clusterB/c_layer2_clusterB: 979 uncompressed (hash 131
 TH1F /run_311321/top/Keys/clusterB/c_layer1_clusterB: 979 uncompressed (hash 1105958788)
 TH1F /run_311321/top/Keys/c_restricted_layer2_clusterX: 989 uncompressed (hash 255957623)
 TH1F /run_311321/top/Keys/c_restricted_layer1_clusterB: 989 uncompressed (hash 457873993)
+TH1F /run_311321/top/Keys/c_layer2_formatted: 969 uncompressed (hash 772510883)
 TH1F /run_311321/top/Keys/c_layer2: 952 uncompressed (hash 1161596241)
+TH1F /run_311321/top/Keys/c_layer1_formatted: 969 uncompressed (hash 593204385)
 TH1F /run_311321/top/Keys/c_layer1: 952 uncompressed (hash 955944271)
 TH1F /run_311321/top/EtaPhi/a_1_1: 578 uncompressed (hash 1244158600)
 TH1F /run_311321/top/EtaPhi/a_1_0: 578 uncompressed (hash 1138907783)
@@ -25,6 +27,7 @@ TH2F /run_311321/top/Eta/b_vs_a_1: 1148 uncompressed (hash 1684713683)
 TH2F /run_311321/top/Eta/b_vs_a_0: 1148 uncompressed (hash 1574678738)
 TH1F /run_311321/OneRing/ToRuleThemAll/lumiPerBCID_merge: 748 uncompressed (hash 1181712869)
 TH1F /run_311321/OneRing/ToRuleThemAll/lumiPerBCID: 742 uncompressed (hash 3154673526)
+TH1F /run_311321/OneRing/ToRuleThemAll/evtstr: 86119 uncompressed (hash 672511662)
 TH1F /run_311321/OneRing/ToFindThem/lb: 12574 uncompressed (hash 3672452440)
 TH1F /run_311321/OneRing/ToBringThemAll/random2: 668 uncompressed (hash 2041017371)
 TH1F /run_311321/OneRing/ToBringThemAll/random: 613 uncompressed (hash 1269065538)
@@ -43,7 +46,9 @@ TH1F /run_311321/OneRing/Keys/clusterB/c_layer2_clusterB: 979 uncompressed (hash
 TH1F /run_311321/OneRing/Keys/clusterB/c_layer1_clusterB: 979 uncompressed (hash 1105958788)
 TH1F /run_311321/OneRing/Keys/c_restricted_layer2_clusterX: 989 uncompressed (hash 255957623)
 TH1F /run_311321/OneRing/Keys/c_restricted_layer1_clusterB: 989 uncompressed (hash 457873993)
+TH1F /run_311321/OneRing/Keys/c_layer2_formatted: 969 uncompressed (hash 772510883)
 TH1F /run_311321/OneRing/Keys/c_layer2: 952 uncompressed (hash 1161596241)
+TH1F /run_311321/OneRing/Keys/c_layer1_formatted: 969 uncompressed (hash 593204385)
 TH1F /run_311321/OneRing/Keys/c_layer1: 952 uncompressed (hash 955944271)
 TH1F /run_311321/OneRing/EtaPhi/a_1_1: 578 uncompressed (hash 1244158600)
 TH1F /run_311321/OneRing/EtaPhi/a_1_0: 578 uncompressed (hash 1138907783)
diff --git a/Control/AthenaMonitoring/share/test_unit_ExampleMonitorAlgorithm_online.ref b/Control/AthenaMonitoring/share/test_unit_ExampleMonitorAlgorithm_online.ref
index 9fd794750c3c316f92782a7b1b1c264b0405fe23..c6904bd48acb8d834efae724432dd33bae1c8c36 100644
--- a/Control/AthenaMonitoring/share/test_unit_ExampleMonitorAlgorithm_online.ref
+++ b/Control/AthenaMonitoring/share/test_unit_ExampleMonitorAlgorithm_online.ref
@@ -14,9 +14,9 @@ TH1F /top/Keys/clusterB/c_layer2_clusterB: 979 uncompressed (hash 1313380230)
 TH1F /top/Keys/clusterB/c_layer1_clusterB: 979 uncompressed (hash 1105958788)
 TH1F /top/Keys/c_restricted_layer2_clusterX: 989 uncompressed (hash 255957623)
 TH1F /top/Keys/c_restricted_layer1_clusterB: 989 uncompressed (hash 457873993)
-TH1F /top/Keys/c_layer2_formatted: 968 uncompressed (hash 2820051072)
+TH1F /top/Keys/c_layer2_formatted: 969 uncompressed (hash 772510883)
 TH1F /top/Keys/c_layer2: 952 uncompressed (hash 1161596241)
-TH1F /top/Keys/c_layer1_formatted: 968 uncompressed (hash 2614268030)
+TH1F /top/Keys/c_layer1_formatted: 969 uncompressed (hash 593204385)
 TH1F /top/Keys/c_layer1: 952 uncompressed (hash 955944271)
 TH1F /top/EtaPhi/a_3_1: 578 uncompressed (hash 3580844046)
 TH1F /top/EtaPhi/a_3_0: 578 uncompressed (hash 3475986445)
@@ -32,6 +32,7 @@ TH2F /top/Eta/b_vs_a_1: 1148 uncompressed (hash 1684713683)
 TH2F /top/Eta/b_vs_a_0: 1148 uncompressed (hash 1574678738)
 TH1F /OneRing/ToRuleThemAll/lumiPerBCID_merge: 748 uncompressed (hash 1380155879)
 TH1F /OneRing/ToRuleThemAll/lumiPerBCID: 742 uncompressed (hash 3353116536)
+TH1F /OneRing/ToRuleThemAll/evtstr: 86119 uncompressed (hash 672511662)
 TH1F /OneRing/ToFindThem/lb: 12574 uncompressed (hash 3672452440)
 TH1F /OneRing/ToBringThemAll/random2_LB180_189: 678 uncompressed (hash 3266868898)
 TH1F /OneRing/ToBringThemAll/random: 613 uncompressed (hash 1269065538)
@@ -50,9 +51,9 @@ TH1F /OneRing/Keys/clusterB/c_layer2_clusterB: 979 uncompressed (hash 1313380230
 TH1F /OneRing/Keys/clusterB/c_layer1_clusterB: 979 uncompressed (hash 1105958788)
 TH1F /OneRing/Keys/c_restricted_layer2_clusterX: 989 uncompressed (hash 255957623)
 TH1F /OneRing/Keys/c_restricted_layer1_clusterB: 989 uncompressed (hash 457873993)
-TH1F /OneRing/Keys/c_layer2_formatted: 968 uncompressed (hash 2820051072)
+TH1F /OneRing/Keys/c_layer2_formatted: 969 uncompressed (hash 772510883)
 TH1F /OneRing/Keys/c_layer2: 952 uncompressed (hash 1161596241)
-TH1F /OneRing/Keys/c_layer1_formatted: 968 uncompressed (hash 2614268030)
+TH1F /OneRing/Keys/c_layer1_formatted: 969 uncompressed (hash 593204385)
 TH1F /OneRing/Keys/c_layer1: 952 uncompressed (hash 955944271)
 TH1F /OneRing/EtaPhi/a_3_1: 578 uncompressed (hash 3580844046)
 TH1F /OneRing/EtaPhi/a_3_0: 578 uncompressed (hash 3475986445)
diff --git a/Control/AthenaMonitoring/src/ExampleMonitorAlgorithm.cxx b/Control/AthenaMonitoring/src/ExampleMonitorAlgorithm.cxx
index bb5f2a98b66a9d4748c8c03bea1c770412a9eabc..f2bba66471caee34d250b62d8f6e5699229fd2e0 100644
--- a/Control/AthenaMonitoring/src/ExampleMonitorAlgorithm.cxx
+++ b/Control/AthenaMonitoring/src/ExampleMonitorAlgorithm.cxx
@@ -55,6 +55,9 @@ StatusCode ExampleMonitorAlgorithm::fillHistograms( const EventContext& ctx ) co
     lb = GetEventInfo(ctx)->lumiBlock();
     run = GetEventInfo(ctx)->runNumber();
     testweight = 2.0;
+
+    // Event number as string
+    auto mon_evtstr = Monitored::Scalar<std::string>("evtstr", std::to_string(ctx.eventID().event_number()));
     
     TRandom3 r(ctx.eventID().event_number());
     // Example of using flags
@@ -74,7 +77,7 @@ StatusCode ExampleMonitorAlgorithm::fillHistograms( const EventContext& ctx ) co
     auto mon_pT_vec = Monitored::Collection("pT_vec", pT_vec);
 
     // Fill. First argument is the tool name, all others are the variables to be saved.
-    fill("ExampleMonitor",lumiPerBCID,lb,random,pT,pT_passed,mon_pT_vec,testweight,mon_str,mon_strvec);
+    fill("ExampleMonitor",lumiPerBCID,lb,random,pT,pT_passed,mon_pT_vec,testweight,mon_str,mon_strvec,mon_evtstr);
 
     // Alternative fill method. Get the group yourself, and pass it to the fill function.
     auto tool = getGroup("ExampleMonitor");
diff --git a/Control/AthenaMonitoringKernel/python/GenericMonitoringTool.py b/Control/AthenaMonitoringKernel/python/GenericMonitoringTool.py
index c651b28bda19f38207c7d372a28560b1c1d55a07..94f652aa5f77c54bf50ce5d274d85410124c9ba3 100644
--- a/Control/AthenaMonitoringKernel/python/GenericMonitoringTool.py
+++ b/Control/AthenaMonitoringKernel/python/GenericMonitoringTool.py
@@ -144,7 +144,7 @@ class GenericMonitoringArray:
                     aliased = unAliased+';'+aliasBase+postfix
                 else:
                     # if format call changed the alias, use custom
-                    aliased = aliasBaseFormatted
+                    aliased = unAliased+';'+aliasBaseFormatted
                 if title is not None:
                     kwargs['title'] = title.format(*accessors)
                 if path is not None:
diff --git a/Control/AthenaServices/CMakeLists.txt b/Control/AthenaServices/CMakeLists.txt
index 72ba4bdd63e8b78a4f575ada9228566e9da583d2..9afbbdf13edd8a3e99c6e0ee01794c9703d1604b 100644
--- a/Control/AthenaServices/CMakeLists.txt
+++ b/Control/AthenaServices/CMakeLists.txt
@@ -60,12 +60,12 @@ atlas_add_test( ThinningCacheTool_test
    LINK_LIBRARIES TestTools AsgTools AthenaKernel GaudiKernel EventInfo AthenaBaseComps )
 
 atlas_add_test( AthTPCnvSvc
-   SCRIPT test/AthTPCnvSvc.sh
+   SCRIPT athena.py AthenaServices/AthTPCnvSvc_test.py
    LOG_IGNORE_PATTERN "^ApplicationMgr +INFO|ERROR Cannot set CLID.*AthenaServicesTestConverters"
    PROPERTIES TIMEOUT 300 )
 
 atlas_add_test( AthDictLoaderSvc
-   SCRIPT test/AthDictLoaderSvc.sh
+   SCRIPT athena.py AthenaServices/AthDictLoaderSvc_test.py
    PROPERTIES TIMEOUT 300 )
 
 
@@ -92,8 +92,6 @@ atlas_install_joboptions( share/AthTPCnvSvc_test.py
    share/ThinningCacheTool_test.txt
    share/MTES_test.py )
 
-atlas_install_scripts( test/MTES_test.sh )
-
 # Need to make sure that python file installation happens before genconf
 # in order for our custom __init__.py to be installed correctly.
 add_dependencies( AthenaServicesConfigurables AthenaServicesPythonInstall )
diff --git a/Control/AthenaServices/share/AthTPCnvSvc.ref b/Control/AthenaServices/share/AthTPCnvSvc.ref
index f8055c74f331d698588937b95bb0300a4368f223..0dcdd5364e2152434a82c2004c88b7823f880c46 100644
--- a/Control/AthenaServices/share/AthTPCnvSvc.ref
+++ b/Control/AthenaServices/share/AthTPCnvSvc.ref
@@ -9,19 +9,6 @@ AthTPCnvSvc       WARNING could not load converter for transient CLID [20394825]
 AthTPCnvSvc       WARNING could not load converter for transient CLID [20394825] (AthenaServicesTestConverters::TBTRIG)
 AthTPCnvSvc       WARNING could not load converter for transient CLID [20394824] (AthenaServicesTestConverters::TBTRIG)
 AthTPCnvSvc       WARNING could not load converter for transient CLID [20394824] (AthenaServicesTestConverters::TBTRIG)
-Py:Configurable     ERROR attempt to add a duplicate (AthBeginSeq.BeginIncFiringAlg) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthBeginSeq.IncidentProcAlg1) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthEndSeq.EndIncFiringAlg) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthEndSeq.IncidentProcAlg2) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthAllAlgSeq.AthCondSeq) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthAllAlgSeq.AthAlgSeq) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthAlgEvtSeq.AthBeginSeq) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthAlgEvtSeq.AthAllAlgSeq) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthAlgEvtSeq.AthEndSeq) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthMasterSeq.AthAlgEvtSeq) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthMasterSeq.AthOutSeq) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthMasterSeq.EndAlgorithmsFiringAlg) ... dupe ignored
-Py:Configurable     ERROR attempt to add a duplicate (AthMasterSeq.IncidentProcAlg3) ... dupe ignored
 ClassIDSvc           INFO RE-initializing ClassIDSvc
 AthenaEventLoopMgr   INFO   ===>>>  start of run 1    <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #1, run #1 0 events processed so far  <<<===
diff --git a/Control/AthenaServices/src/AthReadAlg.cxx b/Control/AthenaServices/src/AthReadAlg.cxx
index ea834ec1b9bcd6442ecd13c023d0683c62328e06..294174ed6b81886f42150c31fba293bafc905f13 100644
--- a/Control/AthenaServices/src/AthReadAlg.cxx
+++ b/Control/AthenaServices/src/AthReadAlg.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration.
+ * Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration.
  */
 /**
  * @file AthenaServices/src/AthReadAlg.cxx
@@ -47,7 +47,7 @@ StatusCode AthReadAlg::initialize()
 StatusCode AthReadAlg::execute (const EventContext& ctx) const
 {
   // Look up the proxy for the original object.
-  const SG::DataProxy* proxy = evtStore()->proxy_exact (m_sgkey);
+  SG::DataProxy* proxy = evtStore()->proxy_exact (m_sgkey);
   if (!proxy) {
     ATH_MSG_ERROR( "Cannot find proxy for original object: " <<
                    m_key.clid() << "/" << m_key.key() << "_DELETED [" <<
diff --git a/Control/AthenaServices/test/AthDictLoaderSvc.sh b/Control/AthenaServices/test/AthDictLoaderSvc.sh
deleted file mode 100755
index c574a539bb64e31ca121f4ca955ab28e135284ab..0000000000000000000000000000000000000000
--- a/Control/AthenaServices/test/AthDictLoaderSvc.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration.
-#
-# Script running the AthDictLoaderSvc_test.py test jobOptions for CTest.
-#
-
-# Return the correct code:
-set -e
-
-# Run the test:
-athena.py AthenaServices/AthDictLoaderSvc_test.py
diff --git a/Control/AthenaServices/test/AthTPCnvSvc.sh b/Control/AthenaServices/test/AthTPCnvSvc.sh
deleted file mode 100755
index 5ecac73d87e2142a368b9477ea7565a68723aa7d..0000000000000000000000000000000000000000
--- a/Control/AthenaServices/test/AthTPCnvSvc.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-#
-# Script running the AthTPCnvSvc_test.py test jobOptions for CTest.
-#
-
-# Return the correct code:
-set -e
-
-# Run the test:
-athena.py AthenaServices/AthTPCnvSvc_test.py
diff --git a/Control/AthenaServices/test/MTES_test.sh b/Control/AthenaServices/test/MTES_test.sh
deleted file mode 100755
index 21e64ef7054a68d0fd5a84f0f54f292e94eaa481..0000000000000000000000000000000000000000
--- a/Control/AthenaServices/test/MTES_test.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-#
-# Script running the MTES_test.py test jobOptions
-#
-
-# Return the correct code:
-set -e
-
-# Run the test:
-athena.py --mtes --threads=2 AthenaServices/MTES_test.py
diff --git a/Control/CxxUtils/CxxUtils/SealSharedLib.h b/Control/CxxUtils/CxxUtils/SealSharedLib.h
index 1daae0bf47b6fcc521a7d9a768725602e6644148..4d298e8de47252eb407e9526b605222a62b1e9e4 100644
--- a/Control/CxxUtils/CxxUtils/SealSharedLib.h
+++ b/Control/CxxUtils/CxxUtils/SealSharedLib.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -57,7 +57,7 @@ public:
 
     bool		operator== (const Callback1 &x) const;
     /**/		operator bool (void) const;
-    void		operator() (T1) const;
+    void		operator() (T1);
 
 private:
     Callback1Rep<T1>	*m_rep;
@@ -128,7 +128,7 @@ Callback1<T1>::operator bool (void) const
 
 template <class T1>
 inline void
-Callback1<T1>::operator() (T1 a) const
+Callback1<T1>::operator() (T1 a)
 { m_rep->call (a); }
 
 template <class T1, class T2>
@@ -181,7 +181,7 @@ public:
 
     static SharedLibrary *	self (void);
     static SharedLibrary *	load (const std::string &name);
-    static void			loaded (const InfoHandler &handler);
+    static void			loaded (InfoHandler &handler);
 
     void			release (void);
     void			abandon (void);
diff --git a/Control/CxxUtils/Root/SealSharedLib.cxx b/Control/CxxUtils/Root/SealSharedLib.cxx
index 29221d416cec968235e5e43ea7eb702dbdae6274..da79127368fe4778ae5e15d1db28fb9ca35bb925 100644
--- a/Control/CxxUtils/Root/SealSharedLib.cxx
+++ b/Control/CxxUtils/Root/SealSharedLib.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -287,7 +287,7 @@ SharedLibrary::load (const std::string &name)
 /** Iterate and provide information about all currently loaded
     shared libraries.  */
 void
-SharedLibrary::loaded (const InfoHandler &handler)
+SharedLibrary::loaded (InfoHandler &handler)
 {
     // Dynamic linker characteristics:
     //   AIX, Windows, SVR4 (DG/UX, DRS/NX, DYNIX/ptx, Linux, SINIX,
diff --git a/Control/DataModelRoot/DataModelRoot/RootType.h b/Control/DataModelRoot/DataModelRoot/RootType.h
index 43769201b00ef71fff7df0a1202d49ac4ea35b1c..d9efb7cee061ffbf3950d7ccf3eefe8f63685311 100644
--- a/Control/DataModelRoot/DataModelRoot/RootType.h
+++ b/Control/DataModelRoot/DataModelRoot/RootType.h
@@ -87,9 +87,9 @@ public:
    Bool_t IsTransient() const;
 
    size_t FunctionParameterSize( Bool_t required = false ) const;
-   TMemberAdapter FunctionParameterAt( size_t nth ) const;
-   std::string FunctionParameterNameAt( size_t nth ) const;
-   std::string FunctionParameterDefaultAt( size_t nth ) const;
+   TMemberAdapter FunctionParameterAt( size_t nth );
+   std::string FunctionParameterNameAt( size_t nth );
+   std::string FunctionParameterDefaultAt( size_t nth );
 
    TReturnTypeAdapter   ReturnType() const;
    TScopeAdapter        DeclaringScope ATLAS_NOT_THREAD_SAFE () const;
diff --git a/Control/DataModelRoot/src/RootType.cxx b/Control/DataModelRoot/src/RootType.cxx
index 0a8f269458484bae7bb9ad11deab506384d01f1b..3787086f5486e7d0c44f95a46f46d2ba69481364 100644
--- a/Control/DataModelRoot/src/RootType.cxx
+++ b/Control/DataModelRoot/src/RootType.cxx
@@ -267,14 +267,14 @@ size_t TMemberAdapter::FunctionParameterSize( Bool_t required ) const
 }
 
 //____________________________________________________________________________
-TMemberAdapter TMemberAdapter::FunctionParameterAt( size_t nth ) const
+TMemberAdapter TMemberAdapter::FunctionParameterAt( size_t nth )
 {
 // get the type info of the function parameter at position nth
    return (TMethodArg*)((TFunction*)fMember)->GetListOfMethodArgs()->At( nth );
 }
 
 //____________________________________________________________________________
-std::string TMemberAdapter::FunctionParameterNameAt( size_t nth ) const
+std::string TMemberAdapter::FunctionParameterNameAt( size_t nth )
 {
 // get the formal name, if available, of the function parameter at position nth
    const char* name =
@@ -286,7 +286,7 @@ std::string TMemberAdapter::FunctionParameterNameAt( size_t nth ) const
 }
 
 //____________________________________________________________________________
-std::string TMemberAdapter::FunctionParameterDefaultAt( size_t nth ) const
+std::string TMemberAdapter::FunctionParameterDefaultAt( size_t nth )
 {
 // get the default value, if available, of the function parameter at position nth
    TMethodArg* arg = (TMethodArg*)((TFunction*)fMember)->GetListOfMethodArgs()->At( nth );
diff --git a/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.cxx b/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.cxx
index 4eca37faf47a71bf71e1a60b48b48e2632332818..31739506697d8ab509606db0637a82281355a0b6 100644
--- a/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.cxx
+++ b/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.cxx
@@ -509,7 +509,7 @@ void PerfMonMTSvc::report2Log_EventLevel() {
     }
     m_eventLoopMsgCounter++;
     // Add to leak estimate
-    if (it.first >= 25) {
+    if (it.first >= m_memFitLowerLimit) {
       m_fit_vmem.addPoint(it.first, it.second.mem_stats.at("vmem"));
       m_fit_pss.addPoint(it.first, it.second.mem_stats.at("pss"));
     }
@@ -562,7 +562,7 @@ void PerfMonMTSvc::report2Log_Summary() {
     ATH_MSG_INFO(format("%1% %|35t|%2% ") % "Leak estimate per event Pss: " % scaleMem(m_fit_pss.slope()));
     ATH_MSG_INFO("  >> Estimated using the last " << m_fit_vmem.nPoints()
                                                   << " measurements from the Event Level Monitoring");
-    ATH_MSG_INFO("  >> Events prior to the first 25 are omitted...");
+    ATH_MSG_INFO("  >> Events prior to the first " << m_memFitLowerLimit.toString() << " are omitted...");
   }
 
   ATH_MSG_INFO("=======================================================================================");
diff --git a/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.h b/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.h
index d3ac4b44d2319a33773ba87f4888f399dca33b45..292d05ef0130f752236bae90c351482c29cb787d 100644
--- a/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.h
+++ b/Control/PerformanceMonitoring/PerfMonComps/src/PerfMonMTSvc.h
@@ -138,6 +138,10 @@ class PerfMonMTSvc : virtual public IPerfMonMTSvc, virtual public IIncidentListe
   Gaudi::Property<std::string> m_checkPointType{
       this, "checkPointType", "Arithmetic",
       "Type of the check point sequence: Arithmetic(0, k, 2k...) or Geometric(0,k,k^2...)."};
+  /// Lower limit (in number of events) for the memory fit
+  Gaudi::Property<uint64_t> m_memFitLowerLimit{
+      this, "memFitLowerLimit", 25,
+      "Lower limit (in number of events) for the memory fit."};
   /// Frequency of event level monitoring
   Gaudi::Property<uint64_t> m_checkPointFactor{
       this, "checkPointFactor", 50,
diff --git a/Control/PerformanceMonitoring/PerfMonTests/CMakeLists.txt b/Control/PerformanceMonitoring/PerfMonTests/CMakeLists.txt
index 50b7171f8c00c115bff1f538c034ee56dfb22dd9..f1d7362b8e46b1a8e7d8fab80a2f9260475d0522 100644
--- a/Control/PerformanceMonitoring/PerfMonTests/CMakeLists.txt
+++ b/Control/PerformanceMonitoring/PerfMonTests/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
 # Declare the package name:
 atlas_subdir( PerfMonTests )
@@ -49,12 +49,15 @@ atlas_add_test( BaseLine
 
 atlas_add_test ( PerfMonMTSvc_serial
   SCRIPT test/test_perfMonMTSvc_serial.py
+  POST_EXEC_SCRIPT "nopost.sh"
   PROPERTIES TIMEOUT 300)
 
 atlas_add_test ( PerfMonMTSvc_mt1
   SCRIPT test/test_perfMonMTSvc_mt1.py
+  POST_EXEC_SCRIPT "nopost.sh"
   PROPERTIES TIMEOUT 300)
 
 atlas_add_test ( PerfMonMTSvc_mt8
   SCRIPT test/test_perfMonMTSvc_mt8.py
+  POST_EXEC_SCRIPT "nopost.sh"
   PROPERTIES TIMEOUT 300)
diff --git a/Control/RootUtils/src/Type.cxx b/Control/RootUtils/src/Type.cxx
index 6282f08171f480dbb47e1b3568fd631980e24223..77b963e3f86663a9ec734577046500f995b96339 100644
--- a/Control/RootUtils/src/Type.cxx
+++ b/Control/RootUtils/src/Type.cxx
@@ -1,8 +1,6 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
-
-// $Id$
 /**
  * @file RootUtils/src/Type.cxx
  * @author scott snyder <snyder@bnl.gov>
@@ -12,6 +10,7 @@
 
 
 #include "RootUtils/Type.h"
+#include "CxxUtils/checker_macros.h"
 #include "TError.h"
 #include "TROOT.h"
 #include <memory>
@@ -303,8 +302,13 @@ void* Type::create() const
 void Type::destroy (void* p) const
 {
   if (p) {
-    if (m_cls)
-      m_cls->Destructor (p);
+    if (m_cls) {
+      // TClass::Destructor is non-const.
+      // But there's nothing obviously problematic in it...
+      // just suppress the checker warning for now.
+      TClass* cls ATLAS_THREAD_SAFE = m_cls;
+      cls->Destructor (p);
+    }
     else
       delete [] (reinterpret_cast<char*> (p));
   }
diff --git a/Control/StoreGate/StoreGate/VarHandleBase.h b/Control/StoreGate/StoreGate/VarHandleBase.h
index 5d15cd99e55ad63993cd9b4f431f94212ffd694c..a0e1c47d4485355730e99ada9e8c15f64d3bc0e4 100644
--- a/Control/StoreGate/StoreGate/VarHandleBase.h
+++ b/Control/StoreGate/StoreGate/VarHandleBase.h
@@ -1,7 +1,7 @@
 // This file's extension implies that it's C, but it's really -*- C++ -*-.
 
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 /**
  * @file StoreGate/VarHandleBase.h
@@ -480,7 +480,7 @@ namespace SG {
      * If newKey matches the existing key, then make a symlink.
      * If neither match, it's an error.
      */
-    StatusCode symLink_impl (CLID newClid, const std::string& newKey) const;
+    StatusCode symLink_impl (CLID newClid, const std::string& newKey);
 
 
     /**
diff --git a/Control/StoreGate/share/VarHandleBase_test.ref b/Control/StoreGate/share/VarHandleBase_test.ref
index e0bb0b2510a68de290e036761503c981cff88fcd..209546e267d6e889fab99f45cf02d5bf34d36d34 100644
--- a/Control/StoreGate/share/VarHandleBase_test.ref
+++ b/Control/StoreGate/share/VarHandleBase_test.ref
@@ -1,24 +1,24 @@
 
 
-Initializing Gaudi ApplicationMgr using job opts ../share/VarHandleBase_test.txt
-JobOptionsSvc        INFO # =======> /home/sss/atlas/dvtest/build/../tests/../share/VarHandleBase_test.txt
-JobOptionsSvc        INFO # (1,1): ApplicationMgr.ExtSvc = ["StoreGateSvc/OtherStore"]
-JobOptionsSvc        INFO # (2,1): OtherStore.ProxyProviderSvc = ""
-JobOptionsSvc        INFO Job options successfully read in from ../share/VarHandleBase_test.txt
+Initializing Gaudi ApplicationMgr using job opts /home/sss/atlas/rootaccess/build/joboptions/StoreGate/VarHandleBase_test.txt
+JobOptionsSvc        INFO # =======> /home/sss/atlas/rootaccess/build/joboptions/StoreGate/VarHandleBase_test.txt
+JobOptionsSvc        INFO # (1,1): ApplicationMgr.ExtSvc = ["StoreGateSvc/StoreGateSvc"]
+JobOptionsSvc        INFO # (2,1): ApplicationMgr.ExtSvc = ["StoreGateSvc/OtherStore"]
+JobOptionsSvc        INFO # (3,1): OtherStore.ProxyProviderSvc = ""
+JobOptionsSvc        INFO Job options successfully read in from /home/sss/atlas/rootaccess/build/joboptions/StoreGate/VarHandleBase_test.txt
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v27r1p99)
-                                          running on karma on Fri Jul 13 04:46:33 2018
+                                          running on karma on Wed Nov  3 21:06:32 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
-ClassIDSvc           INFO  getRegistryEntries: read 753 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 813 CLIDRegistry entries for module ALL
 EventLoopMgr      WARNING Unable to locate service "EventSelector" 
 EventLoopMgr      WARNING No events will be processed from external input.
-HistogramPersis...WARNING Histograms saving not required.
 ApplicationMgr       INFO Application Manager Initialized successfully
 ApplicationMgr Ready
 test1
-ClassIDSvc           INFO  getRegistryEntries: read 952 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 973 CLIDRegistry entries for module ALL
 ServiceManager      FATAL No Service factory for BazSvc available.
 VarHandleKey.Se...  ERROR ServiceLocatorHelper::service: can not locate service BazSvc
                     ERROR FILE:LINE (StatusCode SG::VarHandleKey::initialize(bool)): code FAILURE: Cannot locate store: BazSvc
@@ -56,7 +56,7 @@ VarHandle(FooSv...WARNING FILE:LINE (void*SG::VarHandleBase::typeless_dataPointe
 VarHandle(FooSv...WARNING FILE:LINE (void*SG::VarHandleBase::typeless_dataPointer_fromProxy(SG::DataProxy*, bool) const): Proxy  [293847295/foo] is in an invalid state
 VarHandle(FooSv...WARNING FILE:LINE (void*SG::VarHandleBase::typeless_dataPointer_fromProxy(SG::DataProxy*, bool) const): Request for an invalid object; requested CLID = 293847295, proxy primary ID is 293847296
 test9
-VarHandleBase @0x7ffcdf09c5d0 store=FooSvc, clid=293847295, key=foo----------- ptr@0, proxy@0
+VarHandleBase @0x7fff34567950 store=FooSvc, clid=293847295, key=foo----------- ptr@0, proxy@0
 test10
 ServiceManager      FATAL No Service factory for FooSvc available.
 VarHandleKey.Se...  ERROR ServiceLocatorHelper::service: can not locate service FooSvc
@@ -69,6 +69,6 @@ ServiceManager      FATAL No Service factory for FooSvc available.
 VarHandleKey.Se...  ERROR ServiceLocatorHelper::service: can not locate service FooSvc
 VarHandle(FooSv...  ERROR FILE:LINE (const void*SG::VarHandleBase::get_impl(const EventContext*, bool) const): code FAILURE: Cannot find proxy for 293847295/foo
 test12
-VarHandle(FooSv...  ERROR FILE:LINE (StatusCode SG::VarHandleBase::symLink_impl(unsigned int, const std::string&) const): code FAILURE: symlink: Handle not valid.
-VarHandle(FooSv...  ERROR FILE:LINE (StatusCode SG::VarHandleBase::symLink_impl(unsigned int, const std::string&) const): code FAILURE: symlink: Handle not valid.
+VarHandle(FooSv...  ERROR FILE:LINE (StatusCode SG::VarHandleBase::symLink_impl(unsigned int, const std::string&)): code FAILURE: symlink: Handle not valid.
+VarHandle(FooSv...  ERROR FILE:LINE (StatusCode SG::VarHandleBase::symLink_impl(unsigned int, const std::string&)): code FAILURE: symlink: Handle not valid.
 test13
diff --git a/Control/StoreGate/src/VarHandleBase.cxx b/Control/StoreGate/src/VarHandleBase.cxx
index 5c9bcb290fbca629b5d8a5cb00d27fa0af5c4b68..af5f4dcd9f86348966ca43437ae32ae4603893bb 100644
--- a/Control/StoreGate/src/VarHandleBase.cxx
+++ b/Control/StoreGate/src/VarHandleBase.cxx
@@ -1,7 +1,7 @@
 ///////////////////////// -*- C++ -*- /////////////////////////////
 
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 // VarHandleBase.cxx 
@@ -931,7 +931,7 @@ namespace SG {
    * If neither match, it's an error.
    */
   StatusCode VarHandleBase::symLink_impl (CLID newClid,
-                                          const std::string& newKey) const
+                                          const std::string& newKey)
   {
     if (!m_ptr || !m_store) {
       REPORT_ERROR (StatusCode::FAILURE) << "symlink: Handle not valid.";
diff --git a/DataQuality/DataQualityInterfaces/src/DatabaseConfig.cxx b/DataQuality/DataQualityInterfaces/src/DatabaseConfig.cxx
index c2950099fecc81cd58947a59debe488130f8c0c7..91f99c41f7e0b45497d2b1751bfbf96f313d01e6 100644
--- a/DataQuality/DataQualityInterfaces/src/DatabaseConfig.cxx
+++ b/DataQuality/DataQualityInterfaces/src/DatabaseConfig.cxx
@@ -10,7 +10,6 @@
 #include "CoolKernel/IDatabaseSvc.h"
 #include "CoolKernel/IObject.h"
 #include "CoolKernel/IFolder.h"
-#include "CoolKernel/IObject.h"
 
 #include "DataQualityInterfaces/DatabaseConfig.h"
 #include <array>
diff --git a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
index 9e23cb4baac4cd60a1a13921823b099f64991f59..3b04dfb7e45643bc4b53c3f8d5877f1eb99dcd51 100644
--- a/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
+++ b/DataQuality/DataQualityTools/src/DQTGlobalWZFinderTool.cxx
@@ -37,7 +37,6 @@
 
 #include <vector>
 
-#include "xAODEventInfo/EventInfo.h"
 #include "TProfile.h"
 #include "LWHists/TH1F_LW.h"
 #include "LWHists/TH2F_LW.h"
diff --git a/DataQuality/DataQualityUtils/DataQualityUtils/CoolMdt.h b/DataQuality/DataQualityUtils/DataQualityUtils/CoolMdt.h
index 206fea433991053e0e5de41087d7cccc5fba0501..21508a1aec693c8dad5a7aef9c9e7d5fb74b2c3c 100644
--- a/DataQuality/DataQualityUtils/DataQualityUtils/CoolMdt.h
+++ b/DataQuality/DataQualityUtils/DataQualityUtils/CoolMdt.h
@@ -45,7 +45,6 @@
 
 #include <sstream>
 #include <fstream>
-#include <string>
 #include <TCanvas.h>
 #include <TDirectory.h>
 #include <TFile.h>
diff --git a/DataQuality/DataQualityUtils/DataQualityUtils/CoolRpc.h b/DataQuality/DataQualityUtils/DataQualityUtils/CoolRpc.h
index 14fe706af3ba40a7ca3d3c8e1873b3f6e3944a86..5fbe008b7ff163121f885b243ac9b9d5e8d28ae7 100644
--- a/DataQuality/DataQualityUtils/DataQualityUtils/CoolRpc.h
+++ b/DataQuality/DataQualityUtils/DataQualityUtils/CoolRpc.h
@@ -45,7 +45,6 @@
 
 #include <sstream>
 #include <fstream>
-#include <string>
 #include <TCanvas.h>
 #include <TDirectory.h>
 #include <TFile.h>
diff --git a/DataQuality/DataQualityUtils/DataQualityUtils/CoolTgc.h b/DataQuality/DataQualityUtils/DataQualityUtils/CoolTgc.h
index 3903a3eb9bc5492a7d182e7ca5ca272576324f75..9903529f105e118af05fc9276ab3a487b666e3da 100644
--- a/DataQuality/DataQualityUtils/DataQualityUtils/CoolTgc.h
+++ b/DataQuality/DataQualityUtils/DataQualityUtils/CoolTgc.h
@@ -46,7 +46,6 @@
 
 #include <sstream>
 #include <fstream>
-#include <string>
 #include <TCanvas.h>
 #include <TDirectory.h>
 #include <TFile.h>
diff --git a/DataQuality/DataQualityUtils/DataQualityUtils/HistogramDataCOOL.h b/DataQuality/DataQualityUtils/DataQualityUtils/HistogramDataCOOL.h
index c7716e517835846abae06f6e11347867ee7ca5d9..69381811b99d06110fb891c0f3a8563f672ff75a 100644
--- a/DataQuality/DataQualityUtils/DataQualityUtils/HistogramDataCOOL.h
+++ b/DataQuality/DataQualityUtils/DataQualityUtils/HistogramDataCOOL.h
@@ -38,7 +38,6 @@
 
 #include <sstream>
 #include <fstream>
-#include <string>
 #include <TCanvas.h>
 #include <TDirectory.h>
 #include <TFile.h>
diff --git a/DataQuality/DataQualityUtils/data/postprocessing/TRTmon.yaml b/DataQuality/DataQualityUtils/data/postprocessing/TRTmon.yaml
index 01481b3a6b0c26530a2513c0550b53c02d990e88..edecd232e475f1f55eec50cc5c5b36c9f7582bb2 100644
--- a/DataQuality/DataQualityUtils/data/postprocessing/TRTmon.yaml
+++ b/DataQuality/DataQualityUtils/data/postprocessing/TRTmon.yaml
@@ -37,3 +37,23 @@ Input:  [ 'TRT/(?P<region>Barrel/Stack\d.[A,C]*|[EndcapA|EndcapC]*/Sector\d.)/(?
 Output: [ 'TRT/{region}/hHitOnTrackVsAll{element}' ]
 Function: TRTMonitoringRun3.TRTPostProcessing.hHitOnTrackVsAll
 Description: TRTHITONTRACKVSALL
+---
+Input:  [ 'TRT/(?P<region>Barrel)/Stack(?P<id>\d+)(?P<side>A|C)/hEfficiencyS' ]
+Output: [ 'TRT/Efficiency/hEfficiencyBarrel{side}' ]
+Function: TRTMonitoringRun3.TRTPostProcessing.hEfficiency
+Description: TRTBARRELEFFICIENCY
+---
+Input:  [ 'TRT/(?P<region>Endcap)(?P<side>A|C)/Sector(?P<id>\d+)/hEfficiencyS' ]
+Output: [ 'TRT/Efficiency/hEfficiencyEndCap{side}' ]
+Function: TRTMonitoringRun3.TRTPostProcessing.hEfficiency
+Description: TRTENDCAPSEFFICIENCY
+---
+Input:  [ 'TRT/(?P<region>Barrel)/Stack(?P<id>\d+)(?P<side>A|C)/hEfficiencyS' ]
+Output: [ 'TRT/Efficiency/hEfficiencyIntegralBarrel{side}' ]
+Function: TRTMonitoringRun3.TRTPostProcessing.hEfficiencyIntegral
+Description: TRTBARRELEFFICIENCYINTEGRAL
+---
+Input:  [ 'TRT/(?P<region>Endcap)(?P<side>A|C)/Sector(?P<id>\d+)/hEfficiencyS' ]
+Output: [ 'TRT/Efficiency/hEfficiencyIntegralEndCap{side}' ]
+Function: TRTMonitoringRun3.TRTPostProcessing.hEfficiencyIntegral
+Description: TRTENDCAPSEFFICIENCYINTEGRAL
\ No newline at end of file
diff --git a/DataQuality/DataQualityUtils/src/MonitoringFile_DiMuPostProcess.cxx b/DataQuality/DataQualityUtils/src/MonitoringFile_DiMuPostProcess.cxx
index b472d5b46453428be04e731fceca7f5c70a626c9..190c202cd7112a26d1621bfe56e12d0da8af6a51 100644
--- a/DataQuality/DataQualityUtils/src/MonitoringFile_DiMuPostProcess.cxx
+++ b/DataQuality/DataQualityUtils/src/MonitoringFile_DiMuPostProcess.cxx
@@ -27,7 +27,6 @@
 #include "RooCBShape.h"
 #include "RooFFTConvPdf.h"
 #include "RooGlobalFunc.h"
-#include "RooPlot.h"
 
 namespace dqutils {
 
diff --git a/DataQuality/DataQualityUtils/src/MonitoringFile_IDPerfPostProcess.cxx b/DataQuality/DataQualityUtils/src/MonitoringFile_IDPerfPostProcess.cxx
index 9a13f7b4043664f96d188f7a21cc6b1bf4998263..b222ae1500e5a34185c88b1783d222013e0c0f30 100644
--- a/DataQuality/DataQualityUtils/src/MonitoringFile_IDPerfPostProcess.cxx
+++ b/DataQuality/DataQualityUtils/src/MonitoringFile_IDPerfPostProcess.cxx
@@ -30,7 +30,6 @@
 #include "RooCBShape.h"
 #include "RooFFTConvPdf.h"
 #include "RooGlobalFunc.h"
-#include "RooPlot.h"
 
 namespace dqutils {
 
diff --git a/DataQuality/GoodRunsLists/GoodRunsLists/TGoodRunsListReader.h b/DataQuality/GoodRunsLists/GoodRunsLists/TGoodRunsListReader.h
index 0548b02bc67e45c50aeeec5da8d43c2cebf0fab7..dd5109c4fc6980ad606a8cb6642ba6e28fed9c06 100644
--- a/DataQuality/GoodRunsLists/GoodRunsLists/TGoodRunsListReader.h
+++ b/DataQuality/GoodRunsLists/GoodRunsLists/TGoodRunsListReader.h
@@ -22,8 +22,6 @@
 #include "GoodRunsLists/TMsgLogger.h"
 #include "GoodRunsLists/TGRLCollection.h"
 
-#include <vector>
-
 class TXMLNode;
 
 namespace Root {
diff --git a/DataQuality/GoodRunsLists/GoodRunsLists/TGoodRunsListWriter.h b/DataQuality/GoodRunsLists/GoodRunsLists/TGoodRunsListWriter.h
index a91d27a86958d9c666052e6661701e37f1b8e485..9c2348091ba674af99ea1b9b2a891cec12441388 100644
--- a/DataQuality/GoodRunsLists/GoodRunsLists/TGoodRunsListWriter.h
+++ b/DataQuality/GoodRunsLists/GoodRunsLists/TGoodRunsListWriter.h
@@ -24,8 +24,6 @@
 #include "GoodRunsLists/TGoodRunsList.h"
 #include "GoodRunsLists/TGRLCollection.h"
 
-#include <vector>
-
 typedef unsigned char xmlChar;
 typedef struct _xmlTextWriter xmlTextWriter;
 typedef xmlTextWriter *xmlTextWriterPtr;
diff --git a/DataQuality/HanConfigGenerator/src/hcg.cxx b/DataQuality/HanConfigGenerator/src/hcg.cxx
index 8859308f621995082158e27fa6bf732abdd0f62c..5c4a55fb406c9b8db558ac7264b2b6b8c870f701 100644
--- a/DataQuality/HanConfigGenerator/src/hcg.cxx
+++ b/DataQuality/HanConfigGenerator/src/hcg.cxx
@@ -38,7 +38,6 @@
 #include "TDirectory.h"
 
 #include "TPad.h"
-#include "TStyle.h"
 
 
 
diff --git a/DataQuality/dqm_algorithms/src/OccupancyHoleFinder.cxx b/DataQuality/dqm_algorithms/src/OccupancyHoleFinder.cxx
index de422647e604dc660c6c609fa268613e1c4f6fe0..5eeb3cd486209413521ccbca3c34c680e6cd7eb7 100644
--- a/DataQuality/dqm_algorithms/src/OccupancyHoleFinder.cxx
+++ b/DataQuality/dqm_algorithms/src/OccupancyHoleFinder.cxx
@@ -21,7 +21,6 @@
 #include <algorithm>
 #include <utility>
 #include <map>
-#include <sstream>
 #include <cstdlib>
 
 #include <dqm_core/AlgorithmManager.h>
diff --git a/DataQuality/dqm_algorithms/src/RPC_OccupancyHoleFinder.cxx b/DataQuality/dqm_algorithms/src/RPC_OccupancyHoleFinder.cxx
index 196a946d1249b2c90930a4a5ea3892a9cc2560d1..0a237e7d6ec51856e3e49319c134db9739851d74 100644
--- a/DataQuality/dqm_algorithms/src/RPC_OccupancyHoleFinder.cxx
+++ b/DataQuality/dqm_algorithms/src/RPC_OccupancyHoleFinder.cxx
@@ -26,7 +26,6 @@
 #include <algorithm>
 #include <utility>
 #include <map>
-#include <sstream>
 #include <cstdlib>
 
 #include <dqm_core/AlgorithmManager.h>
diff --git a/Database/APR/PersistencySvc/src/UserSession.cpp b/Database/APR/PersistencySvc/src/UserSession.cpp
index 202945e4bea7f80b73c1e6e95afc897018cf74ad..af49f22be6b556a997fbc8eb2aaf8dbb72797b84 100644
--- a/Database/APR/PersistencySvc/src/UserSession.cpp
+++ b/Database/APR/PersistencySvc/src/UserSession.cpp
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "UserSession.h"
@@ -78,8 +78,10 @@ std::vector< std::string >
 pool::PersistencySvc::UserSession::connectedDatabases() const
 {
   std::vector< std::string > result;
-  for ( pool::PersistencySvc::DatabaseRegistry::const_iterator iDb = m_registry->begin();
-        iDb != m_registry->end(); ++iDb ) {
+  // Make sure we call const methods.
+  const DatabaseRegistry* registry = m_registry;
+  for ( pool::PersistencySvc::DatabaseRegistry::const_iterator iDb = registry->begin();
+        iDb != registry->end(); ++iDb ) {
     result.push_back( (*iDb)->fid() );
   }
   return result;
@@ -122,7 +124,9 @@ pool::PersistencySvc::UserSession::setFileCatalog(pool::IFileCatalog& catalog)
 const pool::ITechnologySpecificAttributes&
 pool::PersistencySvc::UserSession::technologySpecificAttributes( long technology ) const
 {
-  return static_cast< const pool::ITechnologySpecificAttributes& >( m_technologyDispatcher->microSessionManager( technology ) );
+  // Make sure we call the const version of microSesssionManager().
+  const TechnologyDispatcher* disp = m_technologyDispatcher;
+  return static_cast< const pool::ITechnologySpecificAttributes& >( disp->microSessionManager( technology ) );
 }
 
 pool::ITechnologySpecificAttributes&
diff --git a/Database/APR/RootCollection/src/RootCollection.cpp b/Database/APR/RootCollection/src/RootCollection.cpp
index 0216037688d9ab5efbf135e7e078e951d083c935..ae676f5fbbc027b24e464ecb084196fa2b182c2c 100755
--- a/Database/APR/RootCollection/src/RootCollection.cpp
+++ b/Database/APR/RootCollection/src/RootCollection.cpp
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "RootCollection.h"
@@ -442,7 +442,7 @@ namespace pool {
     }
 
      
-    string  RootCollection::retrieveFID() const {
+    string  RootCollection::retrieveFID() {
 
       FileCatalog::FileID fid="";
       string fileType="";        
@@ -469,7 +469,7 @@ namespace pool {
     }
 
 
-   string RootCollection::retrieveUniquePFN(const FileCatalog::FileID& fid) const
+   string RootCollection::retrieveUniquePFN(const FileCatalog::FileID& fid)
    {
       IFileCatalog::Files       pfns;
       m_fileCatalog->start();
diff --git a/Database/APR/RootCollection/src/RootCollection.h b/Database/APR/RootCollection/src/RootCollection.h
index a4d0198a9129f69f517e7f3cb5adfcaca6345f4c..b6a91f959626816eb07a10f272ac536a8aa2cd84 100755
--- a/Database/APR/RootCollection/src/RootCollection.h
+++ b/Database/APR/RootCollection/src/RootCollection.h
@@ -196,8 +196,8 @@ namespace pool {
 
         bool fileCatalogRequired()const;
         std::string retrievePFN()const;
-        std::string retrieveFID()const;
-        std::string retrieveUniquePFN(const FileCatalog::FileID& fid)const;
+        std::string retrieveFID();
+        std::string retrieveUniquePFN(const FileCatalog::FileID& fid);
         std::string retrieveBestPFN(const FileCatalog::FileID& fid)const;  
         void retrieveFileCatalog()const;
 
diff --git a/Database/AthenaPOOL/RootConversions/src/TConvertingBranchElement.cxx b/Database/AthenaPOOL/RootConversions/src/TConvertingBranchElement.cxx
index 3034c055e7de4f3c13c9e9fe30069ccf69fe267b..98b7cbc761e510fb20ec143da01445aac2cf8009 100755
--- a/Database/AthenaPOOL/RootConversions/src/TConvertingBranchElement.cxx
+++ b/Database/AthenaPOOL/RootConversions/src/TConvertingBranchElement.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -938,7 +938,17 @@ Int_t TConvertingBranchElement::GetEntry(Long64_t entry, Int_t getall)
       TBasket* basket = (TBasket*)GetBasket(GetReadBasket());
       TBuffer* buffer = basket->GetBufferRef();
       Int_t bufbegin = buffer->Length();
+
+      // Suppress false positive seen wth gcc11.
+#if __GNUC__ == 11
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
       (this->*fReadLeaves) (*buffer);
+#if __GNUC__ == 11
+# pragma GCC diagnostic pop
+#endif
+
       nb = buffer->Length() - bufbegin;
     }
     else
diff --git a/Database/CoolRunQuery/python/AtlRunQueryCOMA.py b/Database/CoolRunQuery/python/AtlRunQueryCOMA.py
index 675f1f750f58a0841997e9eadf76320214390713..53b9f0be3a99a6e11035fc59e79ca09a30b66f44 100755
--- a/Database/CoolRunQuery/python/AtlRunQueryCOMA.py
+++ b/Database/CoolRunQuery/python/AtlRunQueryCOMA.py
@@ -80,9 +80,6 @@ class ARQ_COMA:
         except ValueError:
             return []
         if run not in cls.__store:
-
-            print ("FRESH Access for run" ,run)
-
             output = ['PR.P_LEVEL', 'PR.P_PERIOD', 'PR.P_PROJECT' ]
             condition = [ "PR.RUN_INDEX = :run" ]
             bindvars = { "run": run }
diff --git a/Database/CoolRunQuery/python/AtlRunQueryLib.py b/Database/CoolRunQuery/python/AtlRunQueryLib.py
index 69c6cda2a7f4e3e3cc827ae21613bcab44912519..a9ed78b0e0e43becd89e355324e5fbf917bd7939 100755
--- a/Database/CoolRunQuery/python/AtlRunQueryLib.py
+++ b/Database/CoolRunQuery/python/AtlRunQueryLib.py
@@ -218,7 +218,7 @@ class AtlRunQuery:
                 from CoolRunQuery.utils.AtlRunQueryUtils import timeStringToSecondsUTC,secondsToTimeStringUTC,get_run_range2,GetTimeRanges
                 timelist = ','.join(self.cmdlineOptions.timelist)
                 timeranges,timerangesHR = GetTimeRanges(timelist, intRepFnc=timeStringToSecondsUTC, maxval=time())
-                timerangesAsString = [ map(secondsToTimeStringUTC, tr) for tr in timeranges]
+                timerangesAsString = [ list(map(secondsToTimeStringUTC, tr)) for tr in timeranges ]
                 runranges = [ ( "%s-%s" % get_run_range2(tr[0],tr[1]) ) for tr in timerangesAsString]
                 runlist = [','.join(runranges)]
 
diff --git a/Database/CoolRunQuery/python/AtlRunQueryParser.py b/Database/CoolRunQuery/python/AtlRunQueryParser.py
index 4fb1777d1ca530f080dca2415dddf649922d221c..8a556b9c55f1b29058d0ad64adb242a607d70369 100755
--- a/Database/CoolRunQuery/python/AtlRunQueryParser.py
+++ b/Database/CoolRunQuery/python/AtlRunQueryParser.py
@@ -113,7 +113,7 @@ class ArgumentParser:
         # allowed 'show' arguments
 
         # init detector mask
-        (self.dName, self.NotInAll, self.vetoedbits) = InitDetectorMaskDecoder(run2=True) # needs to be fixed (made run-dependent) - move into Det Selector
+        (self.dName, self.NotInAll, self.vetoedbits) = InitDetectorMaskDecoder(lhcRun=3) # needs to be fixed (made run-dependent) - move into Det Selector
 
     def ParserUsage( self ):
         print (' ')
diff --git a/Database/CoolRunQuery/python/AtlRunQueryRun.py b/Database/CoolRunQuery/python/AtlRunQueryRun.py
index 95f79b517707c7aa2d4baf547424d524d05f12ab..b6fc2ba9c719909eeec6070d3d59b8087ff18c64 100644
--- a/Database/CoolRunQuery/python/AtlRunQueryRun.py
+++ b/Database/CoolRunQuery/python/AtlRunQueryRun.py
@@ -33,11 +33,12 @@ import urllib.request
 _fW = {'Run' : 12, 'NLB': 5, 'Time': 50, '#Events': 10, 'Stream': 10}
 
 class DataEntry:
-    def __init__(self, iov, value, reject=False):
+    def __init__(self, iov, value, reject=False, valueForStorage=None):
         self.iov = iov
         self.lbrange = (self.iov.startTime.lb, self.iov.endTime.lb) # note that the end lb is not part of the iov
         self.value = value
         self.rejected = reject
+        self.valueForStorage = valueForStorage
 
     def __str__(self):
         return "[%i-%i) %s %r" % (self.lbrange[0], self.lbrange[1], "r" if self.rejected else "a", self.value)
@@ -63,6 +64,9 @@ class DataEntry:
     def lastlb(self):
         return ((0x100000000 + self.endlb)-1) & 0xFFFFFFFF
 
+    def __getitem__(self,k):
+        return self.valueForStorage[k]
+
     def contains(self, lb):
         return self.lbrange[0]<=lb and lb<self.lbrange[1]
 
@@ -74,6 +78,15 @@ class DataEntry:
         v = self.value.pickled() if hasattr(self.value,'pickled') else self.value
         return { 'firstlb' : self.startlb, 'lastlb' : self.lastlb, 'value' : v, 'accepted' : not self.rejected }
 
+    def json(self):
+        retDict = { 'lbrange' : [self.startlb, self.lastlb] }
+        if self.valueForStorage is None:
+            v = self.value.pickled() if hasattr(self.value,'pickled') else self.value
+            retDict["value"] = v
+        else:
+            retDict.update(self.valueForStorage)
+        return retDict
+
 
 class DataEntryList(list):
     def __init__(self, key, run):
@@ -100,6 +113,9 @@ class DataEntryList(list):
     def pickled(self):
         return [e.pickled() for e in self]
             
+    def json(self):
+        return [e.json() for e in self]
+
 
 class RunData:
 
@@ -267,10 +283,10 @@ class RunData:
             stops.update(entrylist.stops())
         return sorted(list(stops))
 
-    def addResult(self, iov, k, value, reject):
+    def addResult(self, iov, k, value, reject, valueForStorage = None):
         if not iov:
             iov = IOVRange(runStart=self.run, lbStart=1, runEnd=self.run+1, lbEnd=0)
-        self[k].append(DataEntry(iov=iov, value=value, reject=reject))
+        self[k].append(DataEntry(iov=iov, value=value, reject=reject, valueForStorage=valueForStorage))
 
     def astxt(self):
         s = ""
@@ -297,8 +313,6 @@ class RunData:
         return s
 
 
-
-
 @total_ordering
 class Run:
     ShowOrder = []
@@ -333,6 +347,7 @@ class Run:
     
     def __init__(self, runNr=0):
         self.runNr = runNr
+        self.lhcRun = 0
         self.sor = 0
         self.eor = 0
         self.lastlb = 0
@@ -353,6 +368,17 @@ class Run:
         self.lumiunittxt = 'nb'
         self.instlumiunittxt = '30'
         self.givepeakmuinfo = True
+        if self.runNr > 378000:
+            # last Run-2 run with SMK 2787 and release AthenaP1,21.1.56 is 376153
+            # first Run-3 with SMK 59 and release 22.0.13 is 379453
+            self.lhcRun = 3
+        elif self.runNr > 249000: 
+            # last Run-1 run with SMK 1670 and release AtlasP1HLT,19.3.0.4 is 248373  
+            # first Run-2 run with SMK 2002 and release AtlasP1HLT,20.1.0.1 is 249785  
+            self.lhcRun = 2
+        else:
+            self.lhcRun = 1
+
         if self.runNr > 168206 and self.runNr <= 170482:
             self.lumiunit = 1.0e6 # unit is mbarn for heavy ions
             self.lumiunittxt = 'mb'
@@ -713,17 +739,16 @@ class Run:
                     s+='\n'
         return s
 
-    def addResult(self, resDictKey, value, iov=None, reject=False):
+    def addResult(self, resDictKey, value, iov=None, reject=False, valueForStorage=None):
         if resDictKey=='DQ' and value=='n.a.':
             return
-        #print ("Run.addResult:",resDictKey, value, iov,"reject=",reject)
         if resDictKey not in self.result:
             self.result[resDictKey] = value
         if iov:
             if iov.startTime.lb>self.lastlb:
                 return # sometimes there are IOVs completely outside the run e.g. run 165821 DQ SHIFTOFL
             iov.endTime = min(iov.endTime, IOVTime(self.runNr,self.lastlb+1) ) 
-        self.data.addResult(iov, resDictKey, value, reject)
+        self.data.addResult(iov, resDictKey, value, reject, valueForStorage=valueForStorage)
 
     def runlinks(self):
         s = ''
@@ -748,10 +773,14 @@ class Run:
         s += '<a href="http://atlas-dcs.cern.ch/navigation.php?date2=%s" target="_blank" title="DCS status at end of run %i"><font size="-3">EoR</font></a>,&nbsp;\n  ' % (tend, self.runNr)
         #s += '    <a href="https://atlas-dcs.cern.ch/navigation.php?date2=2008-09-29-19-01-42">DCS:SoR</font></a>/' % (tbeg, self.runNr)
         #s += '<a href="https://atlas-dcs.cern.ch/navigation.php?date2=2008-09-30-08-17"><font size="-3">EoR</font></a>,&nbsp;\n  ' % (tend, self.runNr)
+
         # OKS
-        # protect against missing OKS information
         if self.data['oks']:
-             s += '    <a href="http://cern.ch/atlas-project-tdaq-cc/cgi/getdata.sh?tdaq-05-05-00&oracle://atlas_oks/r&atlas_oks_archive&%i&%i&ATLAS" target="_blank" title="Download online configuration for run %i"><font size="-3">OKS</font></a>\n' % ( self.data['oks'][0].value + (self.runNr,) )
+            if self.lhcRun<3:
+                s += '    <a href="http://cern.ch/atlas-project-tdaq-cc/cgi/getdata.sh?tdaq-05-05-00&oracle://atlas_oks/r&atlas_oks_archive&%i&%i&ATLAS" target="_blank" title="Download online configuration for run %i"><font size="-3">OKS</font></a>\n' % ( self.data['oks'][0].value + (self.runNr,) )
+            else:
+                (hash, release) = self.data["oks"][0].value
+                s+= f'    <a href="https://gitlab.cern.ch/atlas-tdaq-oks/p1/{release}/-/tree/{hash[5:]}" target="_blank" title="Browse online configuration for run {self.runNr}"><font size="-3">OKS</font></a>\n'
         # lumi summary
         # typical address: https://atlas.web.cern.ch/Atlas/GROUPS/DATAPREPARATION/RunSummary/run142308_summary.html
         # OLD: fname = 'https://atlas.web.cern.ch/Atlas/GROUPS/DATAPREPARATION/RunSummary/run%i_summary.html' % (self.runNr)
@@ -1021,7 +1050,7 @@ def ashtml(run):
             k = data_key.ResultKey
             v = run.result[k]
 
-            with timer("keybuild %s" % k):
+            with timer("keybuild %s" % k, disabled=True):
                 if any(['olc:beam2intensity' in k,
                         'olc:beam1intensity' in k,
                         'lhc:beamenergy' in k,
@@ -1031,8 +1060,6 @@ def ashtml(run):
                         'L1 PSK' == k,
                         ]):
                     continue
-
-
                 
                 s += '\n  '
 
@@ -1137,7 +1164,7 @@ def ashtml(run):
                 if "detector systems" in k.lower():
                     if v!='n.a.':
                         mask = '0x'+v if Selector.condDB()=='CONDBR2' else v # run2 the format is a hex string, in run 1 it is an int (represented as string)
-                        v = DecodeDetectorMask( mask, Selector.condDB()=='CONDBR2',True)
+                        v = DecodeDetectorMask( mask=mask, lhcRun=run.lhcRun, smart=True)
                     s += '  <td style="min-width:%ipx"><font size="-2">%s<hr color="#aaaaaa" size=1>[<a href="http://sroe.home.cern.ch/sroe/cgi-bin/avgmodule.py?run=%i" target=_blank>SCT HV setting</a>]</font></td>' % (1.1*len(v),v,run.runNr)
                     continue
 
@@ -1589,6 +1616,8 @@ def ashtml(run):
                     s += '<td class="showTip OFLBS stream" style="text-decoration:none; text-align: right">%s%s</a></td>' % (openwincmd, fullprint)  
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if "STR:" == k[0:4]:
                     streamName = k[4:]
                     if 'n.a.' in v:
@@ -1740,7 +1769,7 @@ def ashtml(run):
                           
                     continue
 
-
+                # -----------------------------------------------------------------------------------------------------------------------
 
                 if k=="TriggerMenu":
                     chains = run.splitTriggerChains(v)
@@ -1754,6 +1783,8 @@ def ashtml(run):
                         s += '<td style="min-width:300px"><font size="-2">%s<hr color="gray" size=1>%s<hr color="gray" size=1>%s</font></td>' % ( chains )
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if k=="TriggerRates":
                     if type(v)==str:
                         s += '<td>%s</td>'%v
@@ -1774,6 +1805,8 @@ def ashtml(run):
                         s+="<td><table class='ratestable'>\n%s\n  </table></td>" % tablecontent
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if "Datasets" == k:
                     # separate datasets into stream types
                     streamtypes = ['physics_','express_','calibration_','debug_', 'debugrec_']
@@ -1896,10 +1929,27 @@ def ashtml(run):
 
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if 'HLT PSK' == k:
                     # add another column with links to trigger menu for all SMK and PSKs combinations
                     linklist = run.stats['PSK']['blocks']
-
+                    linkRun12 = (
+                        '<a href="https://atlas-trigconf.cern.ch/run/smkey/{smk}/l1key/{l1psk}/hltkey/{hltpsk}/" target="_blank" '
+                        'title="L1: \'{l1name}\', HLT \'{hltname}\'. '
+                        'You can obtain the full trigger menu corresponding to SMK={smk} and prescale keys L1={l1psk}, HLT={hltpsk} in an independent window"'
+                        '>{l1psk}&nbsp;|&nbsp;{hltpsk}</a>'
+                    )
+                    linkRun3L1 = (
+                        '<a href="https://atlas-triggertool.web.cern.ch/db/{db}/smk/{smk}/l1psk/{l1psk}/" target="_blank" '
+                        'title="L1: \'{l1name}\'. You can obtain the full trigger menu corresponding to SMK={smk} and L1 prescale key {l1psk} in an independent window"'
+                        '>{l1psk}</a>'
+                    )
+                    linkRun3HLT = (
+                        '<a href="https://atlas-triggertool.web.cern.ch/db/{db}/smk/{smk}/hltpsk/{hltpsk}/" target="_blank" '
+                        'title="HLT: \'{hltname}\'. You can obtain the full trigger menu corresponding to SMK={smk} and HLT prescale key {l1psk} in an independent window"'
+                        '>{hltpsk}</a>'
+                    )
                     if linklist:
                         if len(linklist)<=15:
                             ncol = 1
@@ -1926,10 +1976,17 @@ def ashtml(run):
                                 entry = row + col*nrow
                                 if entry>=len(linklist):
                                     continue
-                                link = linklist[entry]
-                                s += '<td style="padding-left: 0.8em">%s</td><td>&minus;</td><td>%s:&nbsp;</td>' % (str(link[0]),str(link[1]))
-                                lll = '<a href="https://atlas-trigconf.cern.ch/run/smkey/%s/l1key/%s/hltkey/%s/" target="_blank" title="L1 \'%s\', HLT \'%s\'. Obtain full trigger menu corresponding to SMK=%s and prescale keys L1=%s, HLT=%s, in independent window">' % (run.result['SMK'],link[2],link[3],link[4],link[5],run.result['SMK'],link[2],link[3])
-                                s += '<td style="border-right: 1px solid gray; padding-right: 0.8em">%s%s&nbsp;|&nbsp;%s</a></td>' % (lll, link[2],link[3])
+                                link = dict(zip( ("startlb", "endlb", "l1psk", "hltpsk", "l1name", "hltname"),linklist[entry]))
+                                link.update({
+                                    "smk" : run.result["SMK"],
+                                    "db" : "dev1_i8" if int(run.result["SMK"]) < 3000 else "run3"
+                                })
+                                s += f'<td style="padding-left: 0.8em">{link["startlb"]}</td><td>&minus;</td><td>{link["endlb"]}:&nbsp;</td>'
+                                if run.lhcRun < 3:
+                                    cellContent = linkRun12.format(**link)
+                                else:
+                                    cellContent = linkRun3L1.format(**link) + "&nbsp;|&nbsp;" + linkRun3HLT.format(**link)
+                                s += f'<td style="border-right: 1px solid gray; padding-right: 0.8em">{cellContent}</td>'
                             s += '</tr>'
                         s += '</table>'
                         s += '<hr style="width:100%; background-color: #AAAABB; height:1px; margin-left:0; border:0"/>'
@@ -1939,14 +1996,23 @@ def ashtml(run):
                         s += '<td style="text-align:center">n.a.</td>'
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if 'BGS Key' == k:
                     if v!='n.a.':
+                        smk = int(run.result["SMK"])
+                        bgskOffset = 10000 if (smk<3000 and run.lhcRun==3) else 0
+
                         if len(run.stats['BGS Key' ]['blocks'])>0:
                             s += '<td align="center"><table class="triggerlinktable" align="center"><tr><td style="text-align:left;font-weight:bold" colspan="3">LB&nbsp;range</td><td style="text-align:right;font-weight:bold">BGS</td></tr>'
                             for bgskey, lbbeg, lbend in run.stats['BGS Key' ]['blocks']:
                                 s += '<tr><td style="text-align:right">%i</td><td style="text-align:right">&minus;</td><td style="text-align:right">%i:&nbsp;</td>' % (lbbeg, lbend-1)
-                                lll = '&nbsp;<a href="https://atlas-trigconf.cern.ch/bunchgroups?key=%s" target="_blank" title="Obtain bunch group description for BGS Key=%s in independent window">' % (bgskey,bgskey)
-                                s += '<td>%s%s</a></td></tr>' % (lll, bgskey)
+                                cellContent = (
+                                    f'&nbsp;<a href="https://atlas-trigconf.cern.ch/bunchgroups?key={bgskey+bgskOffset}" target="_blank" '
+                                    f'title="Obtain bunch group description for BGS Key={bgskey} in independent window"'
+                                    f'>{bgskey}</a>'
+                                )
+                                s += f'<td>{cellContent}</td></tr>'
                             s += '</table>'
                             s+='</td>'
                         else:
@@ -1955,6 +2021,8 @@ def ashtml(run):
                         s += '<td class="tdna">n.a.</td>'
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if "SMK" == k:
                     if v=='n.a.':
                         s += '<td class="tdna">n.a.</td>'
@@ -1963,6 +2031,8 @@ def ashtml(run):
                         s += '<td style="text-align: center;">%s<br>%s</td>' % (v,namecomment)
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if 'lar:runtype' in k or 'lar:format' in k:
                     info = LArConfig(k.replace('lar:',''))
                     try:
@@ -1974,6 +2044,8 @@ def ashtml(run):
                             s += '<td style="text-align: right">%s</td>' % v
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if 'BPM' == k:
 
                     # compute average and RMS BPMs            
@@ -2095,6 +2167,8 @@ def ashtml(run):
                     s += '<td style="text-decoration:none">%s<div class="showTip BPM stream" style="display:inline;cursor:pointer">%s</div></a></td>' % (tooltipkey, fullprint)
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if 'ofllumi:' in k:
 
                     if ofllumiFlag:
@@ -2229,6 +2303,8 @@ def ashtml(run):
                     s += '<td class="showTip OFLLumi stream" style="text-decoration:none; text-align: right">%s%s</a></td>' % (openwincmd, fullprint)  
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 if any( [ ('lhc:' in k and 'beamenergy' not in k),
                           ('TorCurrent' in k),
                           ('SolCurrent' in k),
@@ -2324,6 +2400,8 @@ def ashtml(run):
 
                     continue
 
+                # -----------------------------------------------------------------------------------------------------------------------
+
                 # all others
                 if v=='n.a.':
                     s += '<td class="tdna">n.a.</td>'
diff --git a/Database/CoolRunQuery/python/AtlRunQuerySFO.py b/Database/CoolRunQuery/python/AtlRunQuerySFO.py
index b7491feba138235ff287081522c7101b3075e7fa..a0d937275e535eac1b4fde28d6c62e7240b4fdd6 100644
--- a/Database/CoolRunQuery/python/AtlRunQuerySFO.py
+++ b/Database/CoolRunQuery/python/AtlRunQuerySFO.py
@@ -281,10 +281,12 @@ def SetOKSLinks( runlist ):
     from CoolRunQuery.utils.AtlRunQueryUtils import coolDbConn
     conn = coolDbConn.GetAtlasRunDBConnection()
     cursor = conn.cursor()
-    query = "select ConfigSchema,ConfigData from ATLAS_RUN_NUMBER.RunNumber where RunNumber=:run"
-    cursor.prepare(query)
+    query = [
+        "select ConfigSchema,ConfigData from ATLAS_RUN_NUMBER.RunNumber where RunNumber=:run",  # Run 1+2
+        "select ConfigVersion,Release from ATLAS_RUN_NUMBER.RunNumber where RunNumber=:run"  # Run 3
+    ]
     for run in runlist:
-        cursor.execute(query, run=run.runNr)
+        cursor.execute(query[0 if run.lhcRun<3 else 1], run=run.runNr)
         re = cursor.fetchall()
         run.addResult('oks',re[0])
 
@@ -298,7 +300,8 @@ def main():
         #coolDbConn.get_auth('oracle://atlr/rn_r') # only in /afs/cern.ch/atlas/project/tdaq/databases/.coral/authentication.xml
         #print (coolDbConn.get_auth('oracle://ATLAS_COOLPROD/ATLAS_COOLOFL_TRIGGER'))
         from CoolRunQuery.AtlRunQuerySFO import SetOKSLinks
-        SetOKSLinks([Run(178211)])
+        SetOKSLinks([Run(178211)]) # Run 2
+        SetOKSLinks([Run(405396)]) # Run 3
 
     if test_sfo:
 
diff --git a/Database/CoolRunQuery/python/AtlRunQuerySelectorWorker.py b/Database/CoolRunQuery/python/AtlRunQuerySelectorWorker.py
index 312629fab553f5f9aadaca41b7da1c1992b40f49..e310706981d5d5376d7e5dbc27516e2c34ecdda4 100644
--- a/Database/CoolRunQuery/python/AtlRunQuerySelectorWorker.py
+++ b/Database/CoolRunQuery/python/AtlRunQuerySelectorWorker.py
@@ -137,7 +137,7 @@ class SelectorWorker:
         selcls = SelectorWorker.__creationRules[selname]
         thecls = eval('%s' % selcls)
         newsel = thecls(name=selname, *args, **kwargs)  # noqa: F821
-        print ("CREATING SELECTOR %s %s('%s')" % (("SHOW" if doesShow else "RETRIEVE"), selcls, selname))
+        # print ("CREATING SELECTOR %s %s('%s')" % (("SHOW" if doesShow else "RETRIEVE"), selcls, selname))
         s = cls.SelDescr(selector=newsel, priority=0, doesSelect=False, doesShow=True, executed=False)
         return s
 
@@ -226,7 +226,7 @@ class SelectorWorker:
             cls.addSelector( ReadyForPhysicsSelector(name = 'readyforphysics', readyforphysics = options.readyforphysics), 31 )
 
         if options.partition:
-            cls.addSelector( PartitionSelector(name = 'partition', partition = options.partition), 30 )
+            cls.addSelector( PartitionSelector(name = 'partition', partition = options.partition), 300 )
         
         if options.trigger:
             cls.addSelector( TriggerSelector(name = 'trigger', trigger = options.trigger), 25 )
diff --git a/Database/CoolRunQuery/python/html/AtlRunQueryPageMaker.py b/Database/CoolRunQuery/python/html/AtlRunQueryPageMaker.py
index 112b2972f4f3baa8baa202b0e154466002ef2085..e758cc8261f4d693f6cdee4ce73523a0e2134f38 100644
--- a/Database/CoolRunQuery/python/html/AtlRunQueryPageMaker.py
+++ b/Database/CoolRunQuery/python/html/AtlRunQueryPageMaker.py
@@ -8,7 +8,6 @@ class PageMaker:
     @classmethod
     def makePage(cls, body, origQuery=None, extraReplace=None, removeExamples=False):
         from CoolRunQuery.AtlRunQueryQueryConfig import QC
-        
         (top, bottom) = cls.getBlankPage(removeExamples=removeExamples)
         # put in the original query
         if origQuery is not None:
diff --git a/Database/CoolRunQuery/python/output/AtlRunQueryRoot.py b/Database/CoolRunQuery/python/output/AtlRunQueryRoot.py
index 1a7c00d46b39dd83cd74708adf1771c6affab150..80450f8577ca7f6f8ee7b16cf060e8ef437579ed 100644
--- a/Database/CoolRunQuery/python/output/AtlRunQueryRoot.py
+++ b/Database/CoolRunQuery/python/output/AtlRunQueryRoot.py
@@ -209,6 +209,20 @@ def MakePlots( tree, datapath ):
 
 def makeLBPlotSummaryForLHC( lbrange, xvecStb, yvec, runNr, datapath, printText = '' ):
 
+    plotDevelop = False
+    if plotDevelop:
+        # pickle input
+        import json
+        store = (list(lbrange), xvecStb, yvec, runNr, datapath)
+        pf = open( '%s/plotinput.json' % datapath, 'w' )
+        try:
+            json.dump(store, pf)
+        except Exception as ex:
+            print ('ERROR: could not store plotinput data')
+            print("Reason: %s" % ex)
+            sys.exit(1)
+        pf.close()
+
     # sanity check
     if not lbrange or len(yvec)==0 or not yvec[0]:
         return "None"
@@ -229,16 +243,16 @@ def makeLBPlotSummaryForLHC( lbrange, xvecStb, yvec, runNr, datapath, printText
     x2 = lbrange[-1]
 
     h  = TH1F( name, title, x2 - x1 + 1, x1, x2 + 1 ) # for stable beams
-    hg = []
-    for iy in range(len(yvec)):
-        hg.append( TH1F( name + 'g%i' % iy, title, x2 - x1 + 1, x1, x2 + 1 ) )
     h.GetXaxis().SetTitle( 'Luminosity block number' )
     h.GetXaxis().SetTitleOffset( 1.3 )
     h.GetYaxis().SetTitle( 'Beam intensity (10^{11} protons)' )
     h.GetYaxis().SetTitleOffset( 1.0 )
     h.SetTitle( title )    
-    for lb in lbrange:
-        for iy,y in enumerate(yvec):
+
+    hg = []
+    for iy,y in enumerate(yvec):
+        hg.append( TH1F( name + 'g%i' % iy, title, x2 - x1 + 1, x1, x2 + 1 ) )
+        for lb in lbrange:
             hg[iy].SetBinContent( lb, y[lb] )
     
     # first draw histogram        
@@ -254,7 +268,7 @@ def makeLBPlotSummaryForLHC( lbrange, xvecStb, yvec, runNr, datapath, printText
     # beam energy (rescale)
     ebcol = TColor.GetColor( "#306754" )
     heb = hg[2]
-    heb.Scale( 1./1000.0 ) # in TeV
+    heb.Scale( 1./1000.0, "nosw2" ) # in TeV
     if heb.GetMaximum()==0:
         heb.SetMaximum(1)
     ebmax = heb.GetMaximum()*1.3
@@ -266,9 +280,8 @@ def makeLBPlotSummaryForLHC( lbrange, xvecStb, yvec, runNr, datapath, printText
     heb.SetLineColor( ebcol )
     heb.SetLineWidth( 1 )
     scale = h.GetMaximum()/ebmax
-    # heb.SetFillColor( TColor.GetColor("#CCFB5D") )
     heb.SetFillColor( TColor.GetColor("#C3FDB8") )
-    heb.Scale( scale )    
+    heb.Scale( scale, "nosw2" )
     heb.Draw("same")
 
     if xvecStb:
@@ -971,24 +984,10 @@ def makeRatePlot( v, lbduration, plottriggers, averrate, xtit, ytit, name, title
 # command line driver for convenience
 if __name__=='__main__':
 
-    import pickle
-    datapath = '/afs/cern.ch/user/s/stelzer/runsummary/data'
-    pf = open( '%s/rates.pickle' % datapath, 'r' )
-    try:
-        store = pickle.load(pf)
-    except pickle.UnpicklingError as err:
-        print ('ERROR: could not load rates (%s)' % err)
-        sys.exit(1)
-    pf.close()
-
-    (v, lbduration, plottriggers, averrate, xtit, ytit, name, title, datapath, printText) = store
-
-    datapath = '/afs/cern.ch/user/s/stelzer/runsummary/data'
-    makeRatePlot(v, lbduration, plottriggers, averrate, xtit, ytit, name, title, datapath, printText)
-
-    #froot = TFile.Open( 'atlrunquery.root', 'READ' )
-    #tree = gDirectory.Get( 'RunQuery' )
-    #
-    #hnames, fnames = MakePlots( tree )
-    #htmlstr = MakeHtml( hnames, fnames )
-    #print (htmlstr)
+    import json
+    datapath = "."
+    pf = open( '%s/plotinput.json' % datapath, 'r' )
+    (lbrange, xvecStb, yvec, runNr, datapath) = json.load(pf)
+    lbrange = range(len(lbrange))
+    datapath = "test"
+    makeLBPlotSummaryForLHC( lbrange, xvecStb, yvec, runNr, datapath, printText = '' )
diff --git a/Database/CoolRunQuery/python/output/AtlRunQuerySave.py b/Database/CoolRunQuery/python/output/AtlRunQuerySave.py
index 16aa85de7da315e554d1d7c7a894176a5a8814aa..eeda39b72731b73289af30add6e550f384e8b3f9 100644
--- a/Database/CoolRunQuery/python/output/AtlRunQuerySave.py
+++ b/Database/CoolRunQuery/python/output/AtlRunQuerySave.py
@@ -18,7 +18,7 @@ from CoolRunQuery.AtlRunQueryQueryConfig import QC
 from CoolRunQuery.selector.AtlRunQuerySelectorBase import DataKey
 
 import pickle,sys
-from CoolRunQuery.AtlRunQueryRun import Run
+from CoolRunQuery.AtlRunQueryRun import DataEntry, DataEntryList, Run
 
 def CreateResultDict( runlist ):
 
@@ -43,13 +43,15 @@ def CreateResultDict( runlist ):
     SaveResultTxt(runlist, header)
 
     dic = CreateDic(runlist, header)
-    
-    dic_basic = CreateDicBasicTypes(dic)
 
-    SaveTypelessPickleResult(dic_basic)
+    SaveResultAsJson(dic)
 
     summary = CreateSummary(dic)
 
+    dic_basic = CreateDictForPickling(dic)
+
+    SaveTypelessPickleResult(dic_basic)
+
     return dic, summary
 
 
@@ -100,6 +102,45 @@ def SaveTypelessPickleResult(pdic, filename = 'atlrunquery.pickle'):
         sys.exit(1)
     pf.close()
 
+def SaveResultAsJson( result, filename = 'atlrunquery.json'):
+    # write json output
+
+    # ignoring a few large ones for now and one that is not working
+    # large ones should be stored better
+    ignoreForNow = [
+        # "lhc:fillnumber",
+        # "lhc:stablebeams",
+        "lhc:beamenergy", # large
+        "olc:lumi:0", # large
+        "olc:beam1intensity", # large
+        "olc:beam2intensity", # large 
+        # "olc:beam1bunches",
+        # "olc:beam2bunches",
+        # "olc:collbunches",
+        "olc:bcidmask" # broken
+    ]
+
+    runs = [r["runNr"] for r in result[DataKey("Run")]]
+    store = { runNr:{} for runNr in runs}
+
+    for datakey in result:
+        key = datakey.pickled()
+        if key in ignoreForNow:
+            print("Not storing in json file: ", key)
+            continue
+
+        for (runNr, x) in zip(runs, result[datakey]):
+            if isinstance(x, (DataEntry,DataEntryList)):
+                store[runNr][key] = x.json()
+            else:
+                store[runNr][key] = x
+
+    with open( '%s/atlrunquery.json' % QC.datapath, 'w' ) as pf:
+        try:
+            import json
+            json.dump(store, pf)
+        except Exception as e:
+            print ('ERROR: could not create json file with results: "%r"' % e)
 
 
 def CreateDic(runlist, header):
@@ -108,7 +149,7 @@ def CreateDic(runlist, header):
     for r in runlist:
         for k in header:
             if   k == 'Run':
-                scontent = r.runNr
+                scontent = {"runNr": r.runNr, "lastLB": r.lastlb, "dataPeriod": "tbd", "lhcRun": r.lhcRun}
             elif k == 'Links':
                 scontent = ""
             elif k == '#LB':
@@ -128,8 +169,8 @@ def basic(v):
         return v.pickled()
     return v
 
-def CreateDicBasicTypes(dic):
-    dic_basic = {'Run':dic[DataKey('Run')]}
+def CreateDictForPickling(dic):
+    dic_basic = {'Run': [ r["runNr"] for r in dic[DataKey('Run')]]}
 
     for i,r in enumerate(dic_basic['Run']):
         dic_basic[r] = dict([ ( k.pickled(), basic(v[i]) ) for k,v in dic.items()])
diff --git a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorBase.py b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorBase.py
index 3d8253a694c241dad0408c04a82737a23a6bbe49..e1c76d80c65d2a1bbc2d9b0abd27478b7384898d 100644
--- a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorBase.py
+++ b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorBase.py
@@ -158,6 +158,10 @@ class Selector(object):
     def runAfterQuery(self, runlist):
         pass
 
+    # use this method for the selector to specify which data should be stored
+    def valueForStorage(self, condData, key):
+        return None
+
 
 class Condition(Selector):
     def __init__(self, name, dbfolderkey, channelKeys):
@@ -389,9 +393,9 @@ class RunLBBasedCondition(Condition):
         # for each key sort the data by IOV start time
         for k in self.ResultKey():
             condData[k].sort()
-            #if k.startswith('ofllumi'):
-            #    for x in condData[k]:
-            #        print (k,x)
+            # if k.startswith('Rele'):
+            #     for x in condData[k]:
+            #         print("TEST",k,x)
 
         condDataDict = {}
         for k in self.ResultKey():
@@ -417,14 +421,12 @@ class RunLBBasedCondition(Condition):
                     run.showDataIncomplete = True
 
                 for iov, data in datavec:
-                    #if k=="DQ":
-                    #    print ("CCCCCCCCCCCC",k,data)
                     self.selDataMissing = False
                     if self.ApplySelection(k) and not self.passes(data,k):
-                        run.addResult(k, self.prettyValue(data,k), iov, reject=True)
+                        run.addResult(k, self.prettyValue(data,k), iov, reject=True, valueForStorage=self.valueForStorage(data,k))
                         rejectSomething = True
                     else:
-                        run.addResult(k, self.prettyValue(data,k), iov)
+                        run.addResult(k, self.prettyValue(data,k), iov, valueForStorage=self.valueForStorage(data,k))
                         if self.selDataMissing:
                             run.selDataIncomplete = True
 
diff --git a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorEvents.py b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorEvents.py
index 6a9263c5c324f269f30e7e7b134c7d31379a787e..dc3e72251db16b18f3cb0363949383c913505437 100644
--- a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorEvents.py
+++ b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorEvents.py
@@ -43,7 +43,7 @@ class EventSelector(RunLBBasedCondition):
         runnrlist = [r.runNr for r in runlist]
 
         from CoolRunQuery.AtlRunQuerySFO import GetSFO_NphysicseventsAll
-        with timer("GetSFO_NphysicseventsAll"):
+        with timer("GetSFO_NphysicseventsAll", disabled=True):
             events = GetSFO_NphysicseventsAll( cursor, runnrlist )  # { runnr: nPhysEvents }
 
         for run in runlist:
diff --git a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorLhcOlc.py b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorLhcOlc.py
index c3fcb098e7aa7bba011147e81d689570bc6b6866..750d29c5a91061378c0c86660c298b43c7d63cd1 100644
--- a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorLhcOlc.py
+++ b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorLhcOlc.py
@@ -16,7 +16,7 @@ class LHCSelector(Selector):
             self.condition.applySelection = False
 
     def __str__(self):
-        return "\n%s" % self.condition
+        return str(self.condition)
 
     def addShowSelector(self, addArg=''):
         self.showarg=addArg
@@ -25,6 +25,8 @@ class LHCSelector(Selector):
         self.condition.setShowOutput(self.showarg)
         
     def select(self, runlist):
+        print (self, end='')
+        sys.stdout.flush()
         runlist = self.condition.select(runlist)
         return runlist
 
@@ -65,8 +67,6 @@ class LHCCondition(TimeBasedCondition):
                 print ('ERROR: unknown condition format for LHC: "%s" -> need two arguments separated by blank' % lhcargs)
                 sys.exit(1)                                    
 
-
-
     def setShowOutput(self, addArg ):
         ck = ['lhc:fillnumber', 'lhc:stablebeams', 'lhc:beamenergy']
         if addArg == 'all':
diff --git a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorStreams.py b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorStreams.py
index d8ae407387b7393247522d4df6ee430bf009e429..d9e02f8c7cd435a20a332b1fcb21524769dd5617 100644
--- a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorStreams.py
+++ b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorStreams.py
@@ -78,16 +78,16 @@ class StreamSelector(Selector):
         runnrlist = [r.runNr for r in runlist]
 
         from CoolRunQuery.AtlRunQuerySFO import GetSFO_streamsAll,GetSFO_filesAll
-        with timer('GetSFO_streamsAll'):
+        with timer('GetSFO_streamsAll', disabled=True):
             streamsall = GetSFO_streamsAll( cursor, runnrlist )  # { runnr: [streams] }
-        with timer('GetSFO_filesAll'):
+        with timer('GetSFO_filesAll', disabled=True):
             filesall   = GetSFO_filesAll( cursor, runnrlist )    # [(COUNT(FILESIZE), SUM(FILESIZE), SUM(NREVENTS))]
 
         if ShowStreams:
             from CoolRunQuery.AtlRunQuerySFO import GetSFO_LBsAll,GetSFO_NeventsAll,GetSFO_overlapAll
-            with timer('GetSFO_LBsAll'):
+            with timer('GetSFO_LBsAll', disabled=True):
                 lbinfoall  = GetSFO_LBsAll( cursor, runnrlist )      # [(MIN(LUMIBLOCKNR), MAX(LUMIBLOCKNR), #LUMIBLOCKS)]
-            with timer('GetSFO_overlapAll'):
+            with timer('GetSFO_overlapAll', disabled=True):
                 overlapall = GetSFO_overlapAll( cursor, runnrlist )  # [(SUM(OVERLAP_EVENTS))]
             smallrunnrlist=[]
             for r in runnrlist: # go through old runlist and see
@@ -97,7 +97,7 @@ class StreamSelector(Selector):
                     if r in lbinfoall and s in lbinfoall[r] and lbinfoall[r][s][1]>0:
                         smallrunnrlist += [r]
                         break
-            with timer('GetSFO_NeventsAll'):
+            with timer('GetSFO_NeventsAll', disabled=True):
                 neventsall = GetSFO_NeventsAll( cursor, smallrunnrlist )  # [(LUMIBLOCKNR, NREVENTS)]
 
 
diff --git a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorTrigger.py b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorTrigger.py
index c5ed7b94fd775ed7812f0c7006708146623ce608..2289e729f5862153a4d415ee76564e2147d0a473 100644
--- a/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorTrigger.py
+++ b/Database/CoolRunQuery/python/selector/AtlRunQuerySelectorTrigger.py
@@ -119,30 +119,66 @@ class TrigKeySelector(RunLBBasedCondition):
             return value.split(',')[1]
         return value
 
+    def valueForStorage(self, condData, key):
+        if key=='Release' and ';' in condData:
+            [db,rel,relfull] = condData.split(';')
+            return {"db" : db, "release" : rel, "releaseFullName" : relfull}
+        elif key == 'SMK':
+            try:
+                smk = int(condData)
+            except ValueError:
+                smk = 0
+            return {"value": smk}
+
     def runAfterQuery(self,runlist):
-        for k in self.ResultKey():
-            if k != 'SMK':
+
+        from CoolRunQuery.utils.AtlRunQueryTriggerUtils import getSmkNames, getRandom, triggerDBAlias
+
+        smksByLHCRun = {
+            1: set(),
+            2: set(),
+            3: defaultdict(set)
+            }
+        smkNamesByLHCRun = {}
+
+        for run in runlist:
+            try:
+                smk = int(run.result['SMK'])
+            except (ValueError, KeyError):
                 continue
-            smks = set()
-            for run in runlist:
-                smk = run.result['SMK']
-                if not str.isdigit(smk):
-                    continue
-                smks.add(int(smk))
 
-            from CoolRunQuery.utils.AtlRunQueryTriggerUtils import getSmkNames, getRandom
-            smknames = getSmkNames(smks)
+            if run.lhcRun < 3:
+                smksByLHCRun[run.lhcRun].add(smk)
+            else:
+                try:
+                    dbAlias = run.data['Release'][0]["db"]
+                except KeyError:
+                    smk = run.data['SMK'][0].value
+                    dbAlias = "TRIGGERDB_RUN3" if smk>=3000 else "TRIGGERDBDEV1_I8"
+                smksByLHCRun[run.lhcRun][dbAlias].add(smk)
+
+        smkNamesByLHCRun[1] = getSmkNames(smksByLHCRun[1], triggerDBAlias(lhcRun=1))
+        smkNamesByLHCRun[2] = getSmkNames(smksByLHCRun[2], triggerDBAlias(lhcRun=2))
+        smkNamesByLHCRun[3] = {}
+        for dbAlias in smksByLHCRun[3]:
+            smkNamesByLHCRun[3].update( getSmkNames(smksByLHCRun[3][dbAlias], dbAlias) )
 
-            for run in runlist:
-                smk = run.result['SMK']
-                if str.isdigit(smk) and int(smk) in smknames:
-                    info = list(smknames[int(smk)])
-                else:
-                    info = ["unknown",0,"no comment"]
-                if info[2]=="" or info[2]=="~":
-                    info[2]="no comment"
-                run.stats[k] = { "info" : tuple(info),
-                                 "random" : getRandom(int(smk)) if str.isdigit(smk) else (0,0,0,0)}
+        for run in runlist:
+            try:
+                smk = int(run.result['SMK'])
+            except (ValueError, KeyError):
+                continue
+
+            if smk in smkNamesByLHCRun[run.lhcRun]:
+                info = list(smkNamesByLHCRun[run.lhcRun][smk])
+            else:
+                info = ["Name unknown", 0, "no comment"]
+            if info[2]=="" or info[2]=="~":
+                info[2]="no comment"
+            run.stats['SMK'] = {
+                "info": tuple(info),
+                "random": getRandom(smk, run.lhcRun)
+                }
 
 
 class BGSKeySelector(RunLBBasedCondition):
@@ -186,7 +222,6 @@ class L1TrigKeySelector(RunLBBasedCondition):
                                                dbfolderkey='COOLONL_TRIGGER::/TRIGGER/LVL1/Lvl1ConfigKey',
                                                channelKeys = [(0,'L1 PSK','Lvl1PrescaleConfigurationKey')])
 
-
     def __str__(self):
         return "Retrieving L1 PSK"
 
@@ -216,8 +251,6 @@ class L1TrigKeySelector(RunLBBasedCondition):
         HLTTrigKeySelector.combineHltL1Keys(runlist)
 
 
-
-        
 class HLTTrigKeySelector(RunLBBasedCondition):
     def __init__(self, name):
         self.showTrigKeys = False
@@ -258,18 +291,28 @@ class HLTTrigKeySelector(RunLBBasedCondition):
 
         HLTTrigKeySelector.combineHltL1Keys(runlist)
 
-
-
-
     @classmethod
     def combineHltL1Keys(cls, runlist):
         from CoolRunQuery.utils.AtlRunQueryTriggerUtils import isTriggerRun2
+        l1keysByDbAlias = defaultdict(set)
+        hltkeysByDbAlias = defaultdict(set)
+
         l1keysRun1 = set() # to collect run 1 keys
         hltkeysRun1 = set()
         l1keysRun2 = set() # to collect run 2 keys
         hltkeysRun2 = set()
         for run in runlist:
-            if isTriggerRun2(run_number = run.runNr): # run 2
+            if run.lhcRun == 3:
+                try:
+                    dbAlias = run.data['Release'][0]["db"]
+                except KeyError:
+                    smk = run.data['SMK'][0].value
+                    dbAlias = "TRIGGERDB_RUN3" if smk>=3000 else "TRIGGERDBDEV1_I8"
+                if 'L1 PSK' in run.stats:
+                    l1keysByDbAlias[dbAlias].update( [x[0] for x in run.stats['L1 PSK']['blocks']] )
+                if 'HLT PSK' in run.stats:
+                    hltkeysByDbAlias[dbAlias].update( [x[0] for x in run.stats['HLT PSK']['blocks']] )
+            elif isTriggerRun2(run_number = run.runNr): # run 2
                 if 'L1 PSK' in run.stats:
                     l1keysRun2.update( [x[0] for x in run.stats['L1 PSK']['blocks']] )
                 if 'HLT PSK' in run.stats:
@@ -280,16 +323,34 @@ class HLTTrigKeySelector(RunLBBasedCondition):
                 if 'HLT PSK' in run.stats:
                     hltkeysRun1.update( [x[0] for x in run.stats['HLT PSK']['blocks']] )
 
+        # we need L1 and HLT keys before it makes sense to continue
+        if len(l1keysRun1)+len(l1keysRun2)+len(l1keysByDbAlias) == 0:
+            return
+        if len(hltkeysRun1)+len(hltkeysRun2)+len(hltkeysByDbAlias) == 0:
+            return
 
         from CoolRunQuery.utils.AtlRunQueryTriggerUtils import getL1PskNames, getHLTPskNames
-
-        l1namesRun1  = getL1PskNames(l1keysRun1, isRun2 = False)
-        hltnamesRun1 = getHLTPskNames(hltkeysRun1, isRun2 = False)
-        l1namesRun2  = getL1PskNames(l1keysRun2, isRun2 = True)
-        hltnamesRun2 = getHLTPskNames(hltkeysRun2, isRun2 = True)
+        l1namesRun1  = getL1PskNames(l1keysRun1, lhcRun = 1)
+        hltnamesRun1 = getHLTPskNames(hltkeysRun1, lhcRun = 1)
+        l1namesRun2  = getL1PskNames(l1keysRun2, lhcRun = 2)
+        hltnamesRun2 = getHLTPskNames(hltkeysRun2, lhcRun = 2)
+        l1NamesByDbAlias = {}
+        hltNamesByDbAlias = {}
+        for dbAlias in l1keysByDbAlias:
+            l1NamesByDbAlias[dbAlias] = getL1PskNames(l1keysByDbAlias[dbAlias], dbAlias = dbAlias)
+        for dbAlias in hltkeysByDbAlias:
+            hltNamesByDbAlias[dbAlias] = getHLTPskNames(hltkeysByDbAlias[dbAlias], dbAlias = dbAlias)
 
         for run in runlist:
-            if isTriggerRun2(run_number = run.runNr): # run 2
+            if run.lhcRun == 3:
+                try:
+                    dbAlias = run.data['Release'][0]["db"]
+                except KeyError:
+                    smk = run.data['SMK'][0].value
+                    dbAlias = "TRIGGERDB_RUN3" if smk>=3000 else "TRIGGERDBDEV1_I8"
+                l1names  = l1NamesByDbAlias[dbAlias]
+                hltnames = hltNamesByDbAlias[dbAlias]
+            elif isTriggerRun2(run_number = run.runNr): # run 2
                 l1names  = l1namesRun2
                 hltnames = hltnamesRun2
             else:
@@ -314,15 +375,16 @@ class HLTTrigKeySelector(RunLBBasedCondition):
             run.stats['PSK' ] = {'blocks' : sorted(list(blocks)) }
             
 
-
 class RatesSelector(RunLBBasedCondition):
     def __init__(self, name, trigger=[]):
         # trigger can be ["*Electron*", "L1_*"]
         # rate will be printed for all triggers matching the pattern
 
-        super(RatesSelector,self).__init__(name=name,
-                                           dbfolderkey='COOLONL_TRIGGER::/TRIGGER/LUMI/LVL1COUNTERS',
-                                           channelKeys = [(-1,'TriggerRates','TriggerName')])
+        super(RatesSelector,self).__init__(
+            name=name,
+            dbfolderkey='COOLONL_TRIGGER::/TRIGGER/LUMI/LVL1COUNTERS',
+            channelKeys = [(-1,'TriggerRates','TriggerName')]
+        )
 
         self.trigger=trigger
         from CoolRunQuery.AtlRunQuerySelectorWorker import SelectorWorker
@@ -399,6 +461,7 @@ class RatesSelector(RunLBBasedCondition):
 
         return runlist
 
+
 class TriggerSelector(RunLBBasedCondition):
 
     def __init__(self, name, trigger=[]):
diff --git a/Database/CoolRunQuery/python/utils/AtlRunQueryLookup.py b/Database/CoolRunQuery/python/utils/AtlRunQueryLookup.py
index 6de8638a0ec1fe1a8c6458cd02d6455406d85b6d..9e937ec554e8e20070f1cf444d6d43b84bb6df84 100644
--- a/Database/CoolRunQuery/python/utils/AtlRunQueryLookup.py
+++ b/Database/CoolRunQuery/python/utils/AtlRunQueryLookup.py
@@ -140,34 +140,38 @@ def isDQ(name):
     return name in DQChannelDict
 
 
-OLCAlgorithms = { 0:     'ATLAS_PREFERRED',
-                  1:     'LHC',
-                  101:	 'LUCID_ZEROS_OR',
-                  102:	 'LUCID_ZEROS_AND',
-                  103:	 'LUCID_HITS_OR',
-                  104:	 'LUCID_HITS_AND',
-                  151:	 'LUCID_AND',
-                  201:	 'BCM_H_ZEROS_AND',
-                  202:	 'BCM_H_EVENTS_AND',
-                  203:	 'BCM_H_EVENTS_XORA',
-                  204:	 'BCM_H_EVENTS_XORC',
-                  205:	 'BCM_V_ZEROS_AND',
-                  206:	 'BCM_V_EVENTS_AND',
-                  207:	 'BCM_V_EVENTS_XORA',
-                  208:	 'BCM_V_EVENTS_XORC',
-                  301:	 'MBTS_ZEROS_AND',
-                  302:	 'MBTS_ZEROS_OR',
-                  303:	 'MBTS_HITS_AND',
-                  304:	 'MBTS_HITS_OR',
-                  401:	 'ZDC',
-                  501:	 'FCAL',
-                  601:	 'HLT',
-                  901:	 'OffLumi_LArTime_Events',
-                  998:	 'OflLumi_Fake0',
-                  999:	 'OflLumi_Fake1' }
-
-def InitDetectorMaskDecoder( run2 ):
-    if run2:
+OLCAlgorithms = {
+    0:   'ATLAS_PREFERRED',
+    1:   'LHC',
+    101: 'LUCID_ZEROS_OR',
+    102: 'LUCID_ZEROS_AND',
+    103: 'LUCID_HITS_OR',
+    104: 'LUCID_HITS_AND',
+    151: 'LUCID_AND',
+    201: 'BCM_H_ZEROS_AND',
+    202: 'BCM_H_EVENTS_AND',
+    203: 'BCM_H_EVENTS_XORA',
+    204: 'BCM_H_EVENTS_XORC',
+    205: 'BCM_V_ZEROS_AND',
+    206: 'BCM_V_EVENTS_AND',
+    207: 'BCM_V_EVENTS_XORA',
+    208: 'BCM_V_EVENTS_XORC',
+    301: 'MBTS_ZEROS_AND',
+    302: 'MBTS_ZEROS_OR',
+    303: 'MBTS_HITS_AND',
+    304: 'MBTS_HITS_OR',
+    401: 'ZDC',
+    501: 'FCAL',
+    601: 'HLT',
+    901: 'OffLumi_LArTime_Events',
+    998: 'OflLumi_Fake0',
+    999: 'OflLumi_Fake1'
+    }
+
+def InitDetectorMaskDecoder( lhcRun ):
+    if lhcRun==3:
+        return InitDetectorMaskDecoderRun3()
+    elif lhcRun==2:
         return InitDetectorMaskDecoderRun2()
     else:
         return InitDetectorMaskDecoderRun1()
@@ -181,7 +185,7 @@ def InitDetectorMaskDecoderRun1():
     #   https://svnweb.cern.ch/trac/atlastdaq/browser/DAQ/online/RCUtils/trunk/src/get_detectormask.cc
     #   http://isscvs.cern.ch/cgi-bin/viewcvs-all.cgi/DAQ/online/RunControl/src/get_detectormask.cc?root=atlastdaq&view=markup
 
-    dName = ['unknown']*64
+    dName = ['unknown']*54
     dName[0]  = "Pix Barrel"
     dName[1]  = "Pix Disks"
     dName[2]  = "Pix B-Layer"
@@ -241,15 +245,15 @@ def InitDetectorMaskDecoderRun1():
     notInAll = ['CSC', 'L2SV', 'SFI', 'SFO', 'LVL2', 'EF', 'Lucid', 'ZDC', 'Alfa',
                 'TRT_ANCILLARY_CRATE','TILECAL_LASER_CRATE','MUON_ANCILLARY_CRATE','TDAQ_BEAM_CRATE'  ]
 
-    NotInAll = ['']*64
+    notPartOfAllRequirement = ['']*54
     for i in range(0,len(dName)): 
         for n in notInAll:
             if dName[i] == n:
-                NotInAll[i] = ' NotInAll'
+                notPartOfAllRequirement[i] = ' NotInAll'
 
-    vetoedbits = [3, 50, 51, 52, 53] + list(range(54,64))
+    vetoedbits = [3, 50, 51, 52, 53] #+ list(range(54,64))
 
-    return (dName, NotInAll, vetoedbits)
+    return (dName, notPartOfAllRequirement, vetoedbits)
 
 
 def InitDetectorMaskDecoderRun2():
@@ -261,7 +265,7 @@ def InitDetectorMaskDecoderRun2():
     #   https://svnweb.cern.ch/trac/atlastdaq/browser/DAQ/online/RCUtils/trunk/src/get_detectormask.cc
     #   http://isscvs.cern.ch/cgi-bin/viewcvs-all.cgi/DAQ/online/RunControl/src/get_detectormask.cc?root=atlastdaq&view=markup
 
-    dName = ['unknown']*128
+    dName = ['unknown']*64
     dName[0]  = "Pix Barrel"
     dName[1]  = "Pix Disks"
     dName[2]  = "Pix B-Layer"
@@ -311,7 +315,7 @@ def InitDetectorMaskDecoderRun2():
     dName[46] = "BCM"
     dName[47] = "Lucid"
     dName[48] = "ZDC"
-    dName[49] = "Alfa"
+    dName[49] = "ALFA"
     dName[50] = "TRT_ANCILLARY_CRATE"
     dName[51] = "TILECAL_LASER_CRATE"
     dName[52] = "MUON_ANCILLARY_CRATE"
@@ -331,23 +335,50 @@ def InitDetectorMaskDecoderRun2():
     notInAll = ['L2SV', 'SFI', 'SFO', 'LVL2', 'Lucid', 'ZDC', 'Alfa',
                 'TRT_ANCILLARY_CRATE','TILECAL_LASER_CRATE','MUON_ANCILLARY_CRATE','TDAQ_BEAM_CRATE'  ]
 
-    NotInAll = map(lambda x: ' NotInAll' if x in notInAll else '', dName)
+    notPartOfAllRequirement = map(lambda x: ' NotInAll' if x in notInAll else '', dName)
+
+    # these bits are ignored
+    vetoedbits = [3, 41, 42, 44, 50, 51, 52, 53, 55, 57, 58, 59] #+ list(range(64,128))
+
+    return (dName, notPartOfAllRequirement, vetoedbits)
+
+
+def InitDetectorMaskDecoderRun3():
+    # https://gitlab.cern.ch/atlas-tdaq-software/eformat/-/blob/eformat-05-08-03/src/DetectorMask.cxx
 
-    vetoedbits = [3, 41, 42, 44, 50, 51, 52, 53, 55, 57, 58, 59] + list(range(64,128)) #+ range(64,128)
+    (dName, _, vetoedbits) = InitDetectorMaskDecoderRun2()
 
-    return (dName, NotInAll, vetoedbits)
+    dName += [
+        "AFP",         # 65
+        "LAr EMBAECA", # 66
+        "LAr EMBAECC",
+        "LAr EMHAECA",
+        "LAr EMHAECC",
+        "STGC A",      # 70
+        "STGC C"
+    ]
 
+    notInAll = ['L2SV', 'SFI', 'SFO', 'LVL2', 'Lucid', 'ZDC', 'Alfa',
+                'TRT_ANCILLARY_CRATE','TILECAL_LASER_CRATE','MUON_ANCILLARY_CRATE','TDAQ_BEAM_CRATE'  ]
+    notInAll += [ "CSC EA", "CSC EC", "FTK", "Pix DBM" ]
+
+    notPartOfAllRequirement = map(lambda x: ' NotInAll' if x in notInAll else '', dName)
+    
+    # these bits are ignored
+    vetoedbits = [3, 32, 33, 41, 42, 44, 50, 51, 52, 53, 54, 55, 57, 58, 59, 63]
 
+    return (dName, notPartOfAllRequirement, vetoedbits)
 
 
-def DecodeDetectorMaskToString( detmask, isRun2, smart ):
+
+def DecodeDetectorMaskToString( detmask, lhcRun, smart ):
     """
     takes (int) detmask
     returns ( (string) listOfDetectors, (bool) inclusion )
     if smart is set to True, then the listOfDetectors might be inversed and excluded ones are shown
     """
 
-    dName, NotInAll, vetoedbits = InitDetectorMaskDecoder(isRun2)
+    dName, _, vetoedbits = InitDetectorMaskDecoder(lhcRun=lhcRun)
 
     ic = 0
     res = ""
@@ -386,7 +417,7 @@ def splitAt(line, splitstring=',', splitsize=80):
     return res
 
 
-def DecodeDetectorMask( mask, isRun2, smart=False ):
+def DecodeDetectorMask( mask, lhcRun=3, smart=False ):
     """
     takes an decimal or hex string (hex string must start with 0x) and returns an HTML element
     """
@@ -398,8 +429,7 @@ def DecodeDetectorMask( mask, isRun2, smart=False ):
     else:
         mask = int(mask)
         
-    detectors, inclusion = DecodeDetectorMaskToString(mask, isRun2, smart)
-    #detectors = ",<BR>".join( splitAt(detectors,", ") )
+    detectors, inclusion = DecodeDetectorMaskToString(mask, lhcRun=lhcRun, smart=smart)
 
     col = '#106734' if smart else '#000000'
     if inclusion:
@@ -421,10 +451,19 @@ def LArConfig(type):
     else:
         print ('ERROR in LArconfig: unknown type %s' % type)
         sys.exit()
-             
+
 
 
 if __name__=="__main__":
 
-    InitDetectorMaskDecoder(run2=True)
+    # Run 1
+    mask = "0x1fffffffffff7" # all but ALFA
+    print(DecodeDetectorMask(mask, lhcRun=1, smart=True))
+
+    # Run 2
+    mask = "0x1e5103697c0ffffff7" # all but RPC BA, RPC BC, TGC EA, TGC EC, CSC EA, CSC EC, MUCTPI, Lucid, FTK, MMEGA EC, Pix DBM
+    print(DecodeDetectorMask(mask, lhcRun=2, smart=True))
 
+    # Run 3
+    mask = "0x1e5103697c0ffffff7" # all but RPC BA, RPC BC, TGC EA, TGC EC, CSC EA, CSC EC, MUCTPI, Lucid, FTK, MMEGA EC, Pix DBM
+    print(DecodeDetectorMask(mask, lhcRun=3, smart=True))
diff --git a/Database/CoolRunQuery/python/utils/AtlRunQueryTimer.py b/Database/CoolRunQuery/python/utils/AtlRunQueryTimer.py
index 97163ae6ac8b8be97413e0ba67000fadd2139e95..3f58caa8fc8cbd1d7cc6254920b11b6b1c864963 100644
--- a/Database/CoolRunQuery/python/utils/AtlRunQueryTimer.py
+++ b/Database/CoolRunQuery/python/utils/AtlRunQueryTimer.py
@@ -83,9 +83,9 @@ class TimerStats:
 
 
 @contextmanager
-def timer(name):
+def timer(name, disabled = False):
     "A context manager which spits out how long the block took to execute"
-    if False: #not environ.has_key("ARQDEBUG"):
+    if disabled: #not environ.has_key("ARQDEBUG"):
         yield
         return
 
diff --git a/Database/CoolRunQuery/python/utils/AtlRunQueryTriggerUtils.py b/Database/CoolRunQuery/python/utils/AtlRunQueryTriggerUtils.py
index efc76b7af353bff19c976559a4c66b7c38a8cf10..e6f288d3bc40d3592c468de6b7e15ad9496960e9 100755
--- a/Database/CoolRunQuery/python/utils/AtlRunQueryTriggerUtils.py
+++ b/Database/CoolRunQuery/python/utils/AtlRunQueryTriggerUtils.py
@@ -12,11 +12,10 @@
 
 
 from __future__ import print_function
+from collections.abc import Iterable
 
 
-__cursor_schema = [ (None ,"") , (None , "") ] # run 1 and run 2 cursor
-
-
+__cursor_schema = {} # cache for cursor and schema by alias
 
 # returns True if run is RUN 2 (2015-2018)
 def isTriggerRun2(run_number = None , smk = None , isRun2 = None ):
@@ -24,15 +23,43 @@ def isTriggerRun2(run_number = None , smk = None , isRun2 = None ):
         raise RuntimeError("Cannot determine if trigger db is run 1 or 2")
 
     if smk is not None :
-        return smk >= 2000
+        return smk >= 2000 and smk<3000
     elif run_number is not None :
         return run_number > 249000
     else:
         return isRun2
 
 
-def triggerDBAlias(run_number = None , smk = None, isRun2 = None ):
-    return "TRIGGERDB" if isTriggerRun2( run_number=run_number, smk=smk, isRun2 = isRun2) else "TRIGGERDB_RUN1"
+def triggerDBAlias(run_number = None , smk = None, lhcRun = None ):
+    if run_number is None and smk is None and lhcRun is None:
+        raise RuntimeError("Cannot determine the triggerDBAlias as no info is given")
+
+    # lhcRun given
+    if lhcRun==1 or lhcRun==2:
+        return f"TRIGGERDB_RUN{lhcRun}"
+    if lhcRun==3:
+        return "TRIGGERDBDEV1_I8" if (smk is not None and smk<3000) else "TRIGGERDB_RUN3"
+
+    # smk given
+    if smk is not None:
+        if smk<2000:
+            return "TRIGGERDB_RUN1"
+        elif smk<3000:
+            # note that this causes problems for the runs taken during the LS2 Pilot beam test
+            return "TRIGGERDB_RUN2"
+        else:
+            return "TRIGGERDB_RUN3"
+
+    # run number given (should not be used, as the run should know the lhcRun)
+    # see AtlRunQueryRun.py
+    if run_number > 405800:
+        return "TRIGGERDB_RUN3"
+    if run_number > 378000:
+        return "TRIGGERDBDEV1_I8"
+    elif run_number > 249000:
+        return "TRIGGERDB_RUN2"
+    else:
+        return "TRIGGERDB_RUN1"
 
 
 
@@ -57,21 +84,21 @@ class TriggerChain:
 
 ### helper ----------------------------------------------------------------------
 def FindFile( filename, pathlist, access ):
-   """Find <filename> with rights <access> through <pathlist>."""
+    """Find <filename> with rights <access> through <pathlist>."""
 
- # special case for those filenames that already contain a path
-   if os.path.dirname( filename ):
-      if os.access( filename, access ):
-         return filename
+    # special case for those filenames that already contain a path
+    if os.path.dirname( filename ):
+        if os.access( filename, access ):
+            return filename
 
- # test the file name in all possible paths until first found
-   for path in pathlist:
-      f = os.path.join( path, filename )
-      if os.access( f, access ):
-         return f
+    # test the file name in all possible paths until first found
+    for path in pathlist:
+        f = os.path.join( path, filename )
+        if os.access( f, access ):
+            return f
 
- # no such accessible file avalailable
-   return None
+    # no such accessible file avalailable
+    return None
 
 
 
@@ -111,7 +138,7 @@ def _getConnectionServicesForAlias(alias):
 
     log.info( "For alias '%s' found list of connections %r", (alias,connectionServices) )
     if connectionServices is None:
-        log.fatal("Trigger connection alias '%s' is not defined in %s" % (alias,dblookupfilename))
+        print("ERROR: Trigger connection alias '%s' is not defined in %s" % (alias,dblookupfilename))
     return connectionServices
 
 
@@ -233,7 +260,7 @@ def interpretConnection(connection, debug=False, resolveAlias=True):
     if connectionServices is None:
         return connectionParameters
 
-    # If ${TRIGGER_USE_FRONTIER} is True, then we remove sqlite files
+    # If ${TRIGGER_USE_FRONTIER} is True then we remove sqlite files
     if os.getenv('TRIGGER_USE_FRONTIER',False):
         connectionServices = filter(lambda conn: not conn.startswith("sqlite_file"), connectionServices)
         if 'ATLAS_TRIGGERDB_FORCESQLITE' in os.environ:
@@ -326,19 +353,13 @@ def _get_mysql_cursor (host, db, user, passwd=""):
     return connection.cursor()
 
 
-
-def getTriggerDBCursor(run_number = None, smk = None, isRun2 = None):
-
-    index = 1 if isTriggerRun2(run_number = run_number, smk = smk, isRun2 = isRun2 ) else 0
+def getTriggerDBCursorForAlias(dbAlias):
 
     global __cursor_schema
-    if __cursor_schema[index][0]:
-        return __cursor_schema[index] # return the correct cursor and schema name
-
-    # need to connect
-    connection = triggerDBAlias(run_number = run_number, smk = smk, isRun2 = isRun2)
+    if dbAlias in __cursor_schema:
+        return __cursor_schema[dbAlias] # return the correct cursor and schema name
 
-    connectionParameters = interpretConnection(connection)
+    connectionParameters = interpretConnection(dbAlias)
     technology = connectionParameters["techno"]
 
     if technology == 'sqlite':
@@ -358,11 +379,15 @@ def getTriggerDBCursor(run_number = None, smk = None, isRun2 = None):
         cursor = _get_mysql_cursor(connectionParameters["server"], connectionParameters["dbname"], connectionParameters["user"], connectionParameters["passwd"]),''
         schema = ''
 
-    __cursor_schema[index] = (cursor,schema)
+    __cursor_schema[dbAlias] = (cursor,schema)
 
-    return __cursor_schema[index] # return the correct cursor and schema name
+    return __cursor_schema[dbAlias] # return the correct cursor and schema name
 
 
+def getTriggerDBCursor(run_number = None, smk = None, lhcRun = None):
+
+    dbAlias = triggerDBAlias(run_number = run_number, smk = smk, lhcRun = lhcRun)
+    return getTriggerDBCursorForAlias(dbAlias)
 
 
 def getUsedTables(output, condition, schemaname, tables):
@@ -378,10 +403,11 @@ def getUsedTables(output, condition, schemaname, tables):
 
 
 def executeQuery(cursor, output, condition, schemaname, tables, bindvars=()):
-    query = 'select distinct %s from %s where %s' % \
-            (', '.join(output),
-             ', '.join(getUsedTables(output, condition, schemaname, tables)),
-             ' and '.join(condition))
+    query = 'select distinct %s from %s where %s' % (
+        ', '.join(output),
+        ', '.join(getUsedTables(output, condition, schemaname, tables)),
+        ' and '.join(condition)
+        )
     if len(bindvars)==0:
         cursor.execute(str(query))
     else:
@@ -390,10 +416,8 @@ def executeQuery(cursor, output, condition, schemaname, tables, bindvars=()):
     return cursor.fetchall()
 
 
-def getL1PskNames(psk, run_number = None , smk = None , isRun2 = None ):
-    if type(psk) == set:
-        psk = list(psk)
-    if type(psk) != list:
+def getL1PskNames(psk, dbAlias = None, run_number = None , smk = None , lhcRun = None ):
+    if not isinstance(psk, Iterable):
         psk = [psk]
 
     keyslist = ','.join([str(k) for k in psk if k])
@@ -405,81 +429,65 @@ def getL1PskNames(psk, run_number = None , smk = None , isRun2 = None ):
     output = [ 'L.L1PS_ID', 'L.L1PS_NAME' ]
     condition = [ "L.L1PS_ID in (%s)" % keyslist ]
 
-    cursor, schema = getTriggerDBCursor(run_number = run_number, smk = smk, isRun2 = isRun2 )
+    if dbAlias is not None:
+        cursor, schema = getTriggerDBCursorForAlias(dbAlias)
+    else:
+        cursor, schema = getTriggerDBCursor(run_number = run_number, smk = smk, lhcRun = lhcRun )
+
     res = executeQuery(cursor, output, condition, schema, tables)
 
     return dict(res)
 
 
 
-def getHLTPskNames(psk, run_number = None , smk = None , isRun2 = None ):
-    cursor,schema = getTriggerDBCursor(run_number = run_number, smk = smk, isRun2 = isRun2 )
-
-    if type(psk) == set:
-        psk = list(psk)
-    if type(psk) != list:
+def getHLTPskNames(psk, dbAlias = None, run_number = None , smk = None , lhcRun = None ):
+    if not isinstance(psk, Iterable):
         psk = [psk]
 
-    if len(psk)==0:
-        return {}
-
-    prescales = [str(k) for k in psk if k]
-    if len(prescales)==0:
+    keyslist = ','.join([str(k) for k in psk if k])
+    if keyslist=="":
         return {}
 
     tables = { 'L' : 'HLT_PRESCALE_SET' }
     output = ['L.HPS_ID', 'L.HPS_NAME']
-    condition = [ "L.HPS_ID in (%s)" % ','.join(prescales) ]
+    condition = [ "L.HPS_ID in (%s)" % keyslist ]
 
-    res = executeQuery( cursor, output, condition, schema, tables)
+    if dbAlias is not None:
+        cursor, schema = getTriggerDBCursorForAlias(dbAlias)
+    else:
+        cursor,schema = getTriggerDBCursor(run_number = run_number, smk = smk, lhcRun = lhcRun )
 
+    res = executeQuery( cursor, output, condition, schema, tables)
 
     return dict(res)
 
 
-def getSmkNames( allSMK ):
+def getSmkNames( smks, dbAlias ):
     """
     takes a single SMK or a list of SMKs
-
     returns a map from SMK to (name,version,comment)
     """
+    if not isinstance(smks, Iterable):
+        smks = [smks]
 
-    if type( allSMK ) == set:
-        allSMK = list( allSMK )
-    if type( allSMK ) != list:
-        allSMK = [ allSMK ]
-
-    if len( allSMK )==0:
+    keyslist = ','.join([str(k) for k in smks if k])
+    if keyslist=="":
         return {}
 
+    tables = { 'S' : 'SUPER_MASTER_TABLE' }
+    output = ['S.SMT_ID', 'S.SMT_NAME', 'S.SMT_VERSION', 'S.SMT_COMMENT']
+    condition = [ "S.SMT_ID in (%s)" % keyslist ]
 
-    run1smks = [smk for smk in  allSMK if not isTriggerRun2(smk = smk ) ]
-    run2smks = [smk for smk in  allSMK if isTriggerRun2(smk = smk ) ]
-
-    smkMap = {}  # map 
-
-    for smklist in [ run1smks, run2smks]:
-
-        if len(smklist)==0:
-            continue
-    
-        tables = { 'S' : 'SUPER_MASTER_TABLE' }
-        output = ['S.SMT_ID', 'S.SMT_NAME', 'S.SMT_VERSION', 'S.SMT_COMMENT']
-        condition = [ "S.SMT_ID in (%s)" % ','.join([str(k) for k in smklist]) ]
-
-        cursor, schema = getTriggerDBCursor( smk = smklist[0] )
-        res = executeQuery( cursor, output, condition, schema, tables)
-
-        smkMap.update( dict([ (r[0],(r[1],r[2],r[3])) for r in res]) )
+    cursor, schema = getTriggerDBCursorForAlias(dbAlias)
+    res = executeQuery( cursor, output, condition, schema, tables)
 
-    return smkMap
+    return dict([ (r[0],(r[1],r[2],r[3])) for r in res])
 
 
 
 
 def getHLTMenu(smk):
-
-    if smk is None:
+    if smk is None or smk==0:
         return [],[]
 
     if isTriggerRun2(smk):
@@ -487,18 +495,18 @@ def getHLTMenu(smk):
     else:
         output = ['TC.HTC_NAME', 'TC.HTC_CHAIN_COUNTER', 'TC.HTC_LOWER_CHAIN_NAME', 'TC.HTC_L2_OR_EF' ]
     
-    tables = { 'SM'  : 'SUPER_MASTER_TABLE',
-               'HM'  : 'HLT_MASTER_TABLE',
-               'M2C' : 'HLT_TM_TO_TC',
-               'TC'  : 'HLT_TRIGGER_CHAIN'
-               }
-
-    
-    condition = [ "SM.SMT_ID = :smk",
-                  'SM.SMT_HLT_MASTER_TABLE_ID = HM.HMT_ID',
-                  'HM.HMT_TRIGGER_MENU_ID = M2C.HTM2TC_TRIGGER_MENU_ID',
-                  'M2C.HTM2TC_TRIGGER_CHAIN_ID = TC.HTC_ID' ]
-    
+    tables = {
+        'SM'  : 'SUPER_MASTER_TABLE',
+        'HM'  : 'HLT_MASTER_TABLE',
+        'M2C' : 'HLT_TM_TO_TC',
+        'TC'  : 'HLT_TRIGGER_CHAIN'
+        }
+    condition = [
+        'SM.SMT_ID = :smk',
+        'SM.SMT_HLT_MASTER_TABLE_ID = HM.HMT_ID',
+        'HM.HMT_TRIGGER_MENU_ID = M2C.HTM2TC_TRIGGER_MENU_ID',
+        'M2C.HTM2TC_TRIGGER_CHAIN_ID = TC.HTC_ID'
+        ]
     bindvars = { "smk": smk }
     
     cursor,schema = getTriggerDBCursor(smk)
@@ -519,21 +527,24 @@ def getHLTMenu(smk):
 
 
 def getL1Menu(smk):
-
-    if smk is None:
+    if smk is None or smk==0:
         return []
-
-    output = ['TI.L1TI_NAME', 'TI.L1TI_CTP_ID' ]
-    
-    tables = { 'SM'  : 'SUPER_MASTER_TABLE',
-               'M'   : 'L1_MASTER_TABLE',
-               'M2I' : 'L1_TM_TO_TI',
-               'TI'  : 'L1_TRIGGER_ITEM'
-               }
-    condition = [ "SM.SMT_ID = :smk",
-                  'SM.SMT_L1_MASTER_TABLE_ID = M.L1MT_ID',
-                  'M.L1MT_TRIGGER_MENU_ID = M2I.L1TM2TI_TRIGGER_MENU_ID',
-                  'M2I.L1TM2TI_TRIGGER_ITEM_ID = TI.L1TI_ID' ]
+    output = [
+        'TI.L1TI_NAME',
+        'TI.L1TI_CTP_ID'
+        ]
+    tables = {
+        'SM'  : 'SUPER_MASTER_TABLE',
+        'M'   : 'L1_MASTER_TABLE',
+        'M2I' : 'L1_TM_TO_TI',
+        'TI'  : 'L1_TRIGGER_ITEM'
+        }
+    condition = [
+        "SM.SMT_ID = :smk",
+        'SM.SMT_L1_MASTER_TABLE_ID = M.L1MT_ID',
+        'M.L1MT_TRIGGER_MENU_ID = M2I.L1TM2TI_TRIGGER_MENU_ID',
+        'M2I.L1TM2TI_TRIGGER_ITEM_ID = TI.L1TI_ID'
+        ]
     bindvars = { "smk": smk }
 
     cursor,schema = getTriggerDBCursor(smk = smk)
@@ -571,11 +582,20 @@ def getHLTPrescales(hltprescalekey, run_number):
     if isTriggerRun2( run_number = run_number ):
         return l2ps,efps
     
-    tables = { 'H' : 'HLT_PRESCALE_SET',
-               'P' : 'HLT_PRESCALE'
-               }
-    output = [ 'P.HPR_L2_OR_EF', 'P.HPR_CHAIN_COUNTER', 'P.HPR_PRESCALE', 'P.HPR_PASS_THROUGH_RATE' ]
-    condition = [ "P.HPR_PRESCALE_SET_ID = :psk", "P.HPR_L2_OR_EF not like 'express'" ]
+    tables = {
+        'H' : 'HLT_PRESCALE_SET',
+        'P' : 'HLT_PRESCALE'
+        }
+    output = [
+        'P.HPR_L2_OR_EF',
+        'P.HPR_CHAIN_COUNTER',
+        'P.HPR_PRESCALE',
+        'P.HPR_PASS_THROUGH_RATE'
+        ]
+    condition = [
+        "P.HPR_PRESCALE_SET_ID = :psk",
+        "P.HPR_L2_OR_EF not like 'express'"
+        ]
     bindvars = { "psk": hltprescalekey }
 
     cursor,schema = getTriggerDBCursor(isRun2 = True)
@@ -590,15 +610,20 @@ def getHLTPrescales(hltprescalekey, run_number):
     return l2ps, efps
 
 
-def getRandom(smk):
+def getRandom(smk, lhcRun):
+    # does not work for Run 3
+    if lhcRun >= 3:
+        return (1,1,1,1)
+
     if smk=='n.a.':
         return ('n.a.','n.a.')
 
-    tables = { 'S' : 'SUPER_MASTER_TABLE',
-               'M' : 'L1_MASTER_TABLE',
-               'R' : 'L1_RANDOM'
-               }
-    if isTriggerRun2(smk=smk):
+    tables = {
+        'S' : 'SUPER_MASTER_TABLE',
+        'M' : 'L1_MASTER_TABLE',
+        'R' : 'L1_RANDOM'
+        }
+    if lhcRun == 2:
         output = [ 'R.L1R_CUT0', 'R.L1R_CUT1', 'R.L1R_CUT2', 'R.L1R_CUT3' ]
     else:
         output = [ 'R.L1R_RATE1', 'R.L1R_RATE2' ]
@@ -607,7 +632,7 @@ def getRandom(smk):
     
     bindvars = { "smk": smk }
 
-    cursor,schema = getTriggerDBCursor(smk=smk)
+    cursor,schema = getTriggerDBCursorForAlias(dbAlias = triggerDBAlias(lhcRun=lhcRun))
     res = executeQuery(cursor, output, condition, schema, tables, bindvars)
     if len(res) > 0:
         return res[0]
diff --git a/Database/CoolRunQuery/python/utils/AtlRunQueryUtils.py b/Database/CoolRunQuery/python/utils/AtlRunQueryUtils.py
index a6a11367277513be96d24174afe708fa4a9543ff..08eea88ea0ad1c59e1c21819b25fcb6d73758944 100644
--- a/Database/CoolRunQuery/python/utils/AtlRunQueryUtils.py
+++ b/Database/CoolRunQuery/python/utils/AtlRunQueryUtils.py
@@ -626,7 +626,16 @@ def get_runs(start,end=None):
 
 
 def get_run_range2(start,end=None):
-    """start and end are given in the format '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'"""
+    """
+    find all runs between two timestamps
+    start and end are given in the format '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'
+    """
+
+    # first we find the last run before the specified start time
+    # second we check if it spans over the specified start time
+    #   - if it does then we use this run number
+    #   - if it does not we find the first run after the specified start time and use this run number
+    # if an end is given we search for the last run that starts before the specified end time
 
     co = coolDbConn.GetAtlasRunDBConnection()
     cu = co.cursor()
@@ -634,20 +643,41 @@ def get_run_range2(start,end=None):
     #available:
     # NAME,RUNNUMBER,STARTAT,DURATION,CREATEDBY,HOST,PARTITIONNAME,CONFIGSCHEMA,CONFIGDATA,COMMENTS
 
-    t = time.gmtime( timeStringToSecondsUTC(start) )
-    sstart = time.strftime("%Y%m%dT%H%M%S",t)
+    start_seconds_utc = timeStringToSecondsUTC(start)
+    start_gmtime = time.gmtime( start_seconds_utc )
+    start_fstring = time.strftime("%Y%m%dT%H%M%S", start_gmtime)
 
     # last run that started before the begin of the range
-    subq = "SELECT MAX(RUNNUMBER) FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT<'%s'" % sstart
+    subq = "SELECT MAX(RUNNUMBER) FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT<'%s' AND PARTITIONNAME='ATLAS'" % start_fstring
     q = "select RUNNUMBER,STARTAT,DURATION from ATLAS_RUN_NUMBER.RUNNUMBER where RUNNUMBER=(%s)" % subq
     cu.execute(q)
     try:
         run1,startat,duration = cu.fetchone()
+
+        startAtGmtime = time.strptime( startat, "%Y%m%dT%H%M%S" ) # parse the format from the RunNumber DB
+        startAtUtcSecond = calendar.timegm( startAtGmtime )
+        # startAtHuman = time.strftime("%Y%m%dT%H%M%S", startAtGmtime)
+
+        endAtUtcSecond = startAtUtcSecond + duration
+        # endAtGmtime = time.gmtime( endAtUtcSecond )
+        # endAtHuman = time.strftime("%Y%m%dT%H%M%S", endAtGmtime)
+
+        # print("start: ", start)
+        # print("Last run before start: ",run1)
+        # print("   starts at: ",startat)
+        # print("   lasts for: ", duration)
+        # print("start sec", startAtUtcSecond)
+        # print("start gmt", startAtGmtime)
+        # print("start hr ", startAtHuman)
+        # print("end sec", endAtUtcSecond)
+        # print("end gmt", endAtGmtime)
+        # print("end hr ", endAtHuman)
+
         # note that duration is not exact, but always a bit larger than the length of the run
     
-        #endat = calendar.timegm( time.strptime(startat,"%Y%m%dT%H%M%S") ) + duration
-        if end < timeStringToSecondsUTC(start):
-            q = "SELECT MIN(RUNNUMBER) FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT>'%s'" % sstart
+        if endAtUtcSecond < start_seconds_utc:
+            print("Run started and ended before the specified start time, so need to take the first one that started of the specified start time")
+            q = "SELECT MIN(RUNNUMBER) FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT>'%s' AND PARTITIONNAME='ATLAS'" % start_fstring
             cu.execute(q)
             try:
                 run1 = cu.fetchone()[0]
@@ -659,8 +689,8 @@ def get_run_range2(start,end=None):
     run2 = None
     if end is not None:
         # last run that started before the end of the range
-        t = time.gmtime( timeStringToSecondsUTC(end) )
-        endtime = time.strftime("%Y%m%dT%H%M%S",t)
+        start_gmtime = time.gmtime( timeStringToSecondsUTC(end) )
+        endtime = time.strftime("%Y%m%dT%H%M%S",start_gmtime)
         q = "SELECT MAX(RUNNUMBER) FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT<'%s'" % endtime
         cu.execute(q)
         run2 = cu.fetchone()[0]
@@ -675,7 +705,7 @@ class XMLReader(object):
             self.element = element
             self.tag = element.tag
             self.attributes = dict(element.items())
-            self.children = element.getchildren()
+            self.children = list(element)
             self.readchildren()
 
         def items(self):
diff --git a/Database/CoraCool/CoraCool/CoraCoolFolder.h b/Database/CoraCool/CoraCool/CoraCoolFolder.h
index 7280728e5a6257bfd41ab7d92c250b130bd7107d..68b7c0086cc594ee5570cfd57a7a3b3b56357678 100755
--- a/Database/CoraCool/CoraCool/CoraCoolFolder.h
+++ b/Database/CoraCool/CoraCool/CoraCoolFolder.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef CORACOOL_CORACOOLFOLDER_H
@@ -149,7 +149,7 @@ class CoraCoolFolder {
   // accessors for friend class CoraCoolObjectIter
   coral::ISessionProxy* proxy();
   const coral::ISessionProxy* proxy() const;
-  coral::ITable* table() const;
+  coral::ITable* table();
   void setOutputSpec(coral::IQuery* query);
 
   bool decodeAttrSpec();
diff --git a/Database/CoraCool/src/CoraCoolFolder.cxx b/Database/CoraCool/src/CoraCoolFolder.cxx
index 9ea7d54281df09e4c77235d7507cdf06ad1d52ce..08f4b66c54679854e29374102e5cca80529b8cec 100755
--- a/Database/CoraCool/src/CoraCoolFolder.cxx
+++ b/Database/CoraCool/src/CoraCoolFolder.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 // CoraCoolFolder.cxx
@@ -584,6 +584,6 @@ void CoraCoolFolder::setPrefetchAll(bool prefetchAll) {
   m_coolfolder->setPrefetchAll(prefetchAll);
 }
 
-coral::ITable* CoraCoolFolder::table() const { 
+coral::ITable* CoraCoolFolder::table() { 
   return &(m_proxy->nominalSchema().tableHandle(m_tablename));
 }
diff --git a/DetectorDescription/DetDescrCond/DetDescrCondTools/share/coolHist_insertFileToCatalog.py b/DetectorDescription/DetDescrCond/DetDescrCondTools/share/coolHist_insertFileToCatalog.py
index a2a145594b5094566439c29b6e4ef8ef28c40161..e8c2e33a47b1c96965005c5b368d4f8c50bb59b7 100755
--- a/DetectorDescription/DetDescrCond/DetDescrCondTools/share/coolHist_insertFileToCatalog.py
+++ b/DetectorDescription/DetDescrCond/DetDescrCondTools/share/coolHist_insertFileToCatalog.py
@@ -7,8 +7,8 @@
 import os,sys,getopt
 
 def usage():
-    print 'Usage: coolHist_insertFileToCatalog.py {-u fileCatalog} file1 {file2}...'
-    print 'Default file catalogue is PoolFileCatalog.xml'
+    print("Usage: coolHist_insertFileToCatalog.py {-u fileCatalog} file1 {file2}...")
+    print("Default file catalogue is PoolFileCatalog.xml")
 
 # get options (only -u)
 destcat='file:PoolFileCatalog.xml'
@@ -23,7 +23,7 @@ except getopt.GetoptError:
 if len(args)<1:
     usage()
     sys.exit(1)
-print 'Destination catalog is',destcat
+print(f"Destination catalog is {destcat}")
 
 # open fake source catalogue and write header
 sourcename='coolhist_tempcat.xml'
@@ -33,7 +33,7 @@ sourcecat.write("""<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
 """)
 
 for myfile in args:
-    print '>= Obtain GUID for file',myfile
+    print(f">= Obtain GUID for file {myfile}")
     rc=os.system('coolHist_extractFileIdentifier.sh %s' % myfile)
     if (rc==0):
         guid=open('coolhist_guid.tmp','r').readline()[:-1]
@@ -46,18 +46,18 @@ for myfile in args:
     </File>
 """ % (guid,myfile))
         else:
-            print '>= No GUID available for file',myfile
+            print(f">= No GUID available for file {myfile}")
     else:
-        print '>= Problems obtaining GUID for file',myfile
+        print(f">= Problems obtaining GUID for file {myfile}")
 # write catalogue trailer
 sourcecat.write('</POOLFILECATALOG>')
 sourcecat.close()
 
 # now merge catalogues using Pool utility
 comm='FCpublish -d %s -u file:%s' % (destcat,sourcename)
-print 'Execute',comm
+print(f"Execute {comm}")
 rc=os.system(comm)
 if (rc!=0):
-    print 'Error from Pool FCpublish'
+    print("Error from Pool FCpublish")
 else:
-    print 'Insertion done'
+    print("Insertion done")
diff --git a/DetectorDescription/ReadoutGeometryBase/ReadoutGeometryBase/DetectorDesign.h b/DetectorDescription/ReadoutGeometryBase/ReadoutGeometryBase/DetectorDesign.h
index e400d0bc50fb86997b2ee5cf1c717b6fca59ebca..3f5aefca2a7e645404c7dc6ff4f31659b6d0edea 100644
--- a/DetectorDescription/ReadoutGeometryBase/ReadoutGeometryBase/DetectorDesign.h
+++ b/DetectorDescription/ReadoutGeometryBase/ReadoutGeometryBase/DetectorDesign.h
@@ -39,7 +39,7 @@ class SiLocalPosition;
 class SiIntersect;
 
 enum DetectorShape {
-  Box=0, Trapezoid, Annulus,Other
+  Box=0, Trapezoid, Annulus,Other,PolarAnnulus
 };
 
 enum DetectorType {
diff --git a/DetectorDescription/ReadoutGeometryBase/src/SolidStateDetectorElementBase.cxx b/DetectorDescription/ReadoutGeometryBase/src/SolidStateDetectorElementBase.cxx
index e834f246281e61ffc44df29009938a8198e23e45..5140b4671caf6572535c24effbaf033c93e97307 100644
--- a/DetectorDescription/ReadoutGeometryBase/src/SolidStateDetectorElementBase.cxx
+++ b/DetectorDescription/ReadoutGeometryBase/src/SolidStateDetectorElementBase.cxx
@@ -143,7 +143,18 @@ using Trk::distDepth;
 
     if (!dir.m_etaDirection) xEta = -xEta;
     if (!dir.m_phiDirection) xPhi = -xPhi;
-    return Amg::Vector2D(xPhi, xEta);
+    auto result = Amg::Vector2D(xPhi, xEta);
+
+    if (m_design->shape() == InDetDD::PolarAnnulus) { // Do conversion to polar co-ords as well
+      double x = result.x();
+      double y = result.y();
+
+      double r = std::hypot(x,y);
+      double phi = std::atan2(y,x);
+      result = Amg::Vector2D(phi,r);
+    }
+
+    return result;
   }
 
   HepGeom::Point3D<double>
diff --git a/DetectorDescription/RegionSelector/python/RegSelToolConfig.py b/DetectorDescription/RegionSelector/python/RegSelToolConfig.py
index 32a775ef1c5a914235765fd00836f47a4ed9f7da..a9d76d5e9de683972e2b5c36608a63f91578e9df 100644
--- a/DetectorDescription/RegionSelector/python/RegSelToolConfig.py
+++ b/DetectorDescription/RegionSelector/python/RegSelToolConfig.py
@@ -239,7 +239,8 @@ def regSelTool_TRT_Cfg(flags):
     # temporary
     from PixelConditionsAlgorithms.PixelConditionsConfig import PixelCablingCondAlgCfg
     return regSelToolCfg(flags, "TRT", CompFactory.TRT_RegSelCondAlg,
-                         readout_geometry=TRT_ReadoutGeometryCfg(flags), conditions=PixelCablingCondAlgCfg(flags))
+                         readout_geometry=TRT_ReadoutGeometryCfg(flags),
+                         conditions=PixelCablingCondAlgCfg(flags))  # FIXME: TRT should not depend on Pixel
 
 # ITk
 def regSelTool_ITkPixel_Cfg(flags):
@@ -272,18 +273,28 @@ def regSelTool_RPC_Cfg(flags):
                          conditions=RPCCablingConfigCfg(flags))
 
 def regSelTool_TGC_Cfg(flags):
-    from MuonConfig.MuonCablingConfig import TGCCablingConfigCfg
+    from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg, TGCCablingConfigCfg
+
+    conditions = ComponentAccumulator()
+    conditions.merge(MDTCablingConfigCfg(flags))  # FIXME: should not depend on MDT
+    conditions.merge(TGCCablingConfigCfg(flags))
     return regSelToolCfg(flags, "TGC", CompFactory.TGC_RegSelCondAlg,
-                         conditions=TGCCablingConfigCfg(flags))
+                         conditions=conditions)
 
 def regSelTool_CSC_Cfg(flags):
-    return regSelToolCfg(flags, "CSC", CompFactory.CSC_RegSelCondAlg)
+    from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg
+    return regSelToolCfg(flags, "CSC", CompFactory.CSC_RegSelCondAlg,
+                         conditions=MDTCablingConfigCfg(flags))  # FIXME: CSC should not depend on MDT
 
 def regSelTool_STGC_Cfg(flags):
-    return regSelToolCfg(flags, "STGC", CompFactory.sTGC_RegSelCondAlg)
+    from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg
+    return regSelToolCfg(flags, "STGC", CompFactory.sTGC_RegSelCondAlg,
+                         conditions=MDTCablingConfigCfg(flags))  # FIXME: sTGC should not depend on MDT
 
 def regSelTool_MM_Cfg(flags):
-    return regSelToolCfg(flags, "MM", CompFactory.MM_RegSelCondAlg)
+    from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg
+    return regSelToolCfg(flags, "MM", CompFactory.MM_RegSelCondAlg,
+                         conditions=MDTCablingConfigCfg(flags))  # FIXME: MM should not depend on MDT
 
 
 # calo 
diff --git a/Event/EventInfo/src/PileUpEventInfo.cxx b/Event/EventInfo/src/PileUpEventInfo.cxx
index daf6aed277125a42d5e14f5dd4094936e8d11b90..3646d8287e8dfe88aa56f174e6c592d57144ea3c 100644
--- a/Event/EventInfo/src/PileUpEventInfo.cxx
+++ b/Event/EventInfo/src/PileUpEventInfo.cxx
@@ -1,5 +1,5 @@
 /*
-   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+   Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
  */
 
 /**
@@ -13,6 +13,7 @@
 #include "GaudiKernel/MsgStream.h"
 #include "EventInfo/EventID.h"
 #include "EventInfo/PileUpEventInfo.h"
+#include <utility>
 
 PileUpEventInfo::PileUpEventInfo() :
   EventInfo()
@@ -148,5 +149,6 @@ PileUpEventInfo::SubEvent::SubEvent(time_type t, unsigned int BCID,
 
 unsigned int
 PileUpEventInfo::SubEvent::BCID() const {
-  return(0 == pSubEvt ? 0 :  pSubEvt->event_ID()->bunch_crossing_id());
+  // Be sure to call const methods to avoid checker warnings.
+  return(0 == pSubEvt ? 0 :  std::as_const(*pSubEvt).event_ID()->bunch_crossing_id());
 }
diff --git a/Event/xAOD/xAODMuon/xAODMuon/versions/Muon_v1.h b/Event/xAOD/xAODMuon/xAODMuon/versions/Muon_v1.h
index 77eaccd3b31992d7d5953d90856104c703043e04..1043974f746ba68825160df2cb717b8df1ef19ac 100644
--- a/Event/xAOD/xAODMuon/xAODMuon/versions/Muon_v1.h
+++ b/Event/xAOD/xAODMuon/xAODMuon/versions/Muon_v1.h
@@ -1,7 +1,7 @@
 // Dear emacs, this is -*- c++ -*-
 
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 // $Id: Muon_v1.h 745098 2016-05-05 15:47:04Z wleight $
@@ -108,6 +108,7 @@ namespace xAOD {
       CaloLikelihood,
       CaloScore,
       ExtrapolateMuonToIP,
+      Commissioning,
       NumberOfMuonAuthors // increase this guy when adding
     };
     /// Returns the primary author of this Muon.
@@ -119,7 +120,7 @@ namespace xAOD {
     /// Get all the authors of this Muon.
     /// For example during overlap checking, the same Muon may have been reconstructed by many different algorithms. This method returns a 16bit
     /// number, where each bit represents a muon algorithm, defined as follows (the lowest bit is indicates that something has gone wrong):
-    /// unknown | MuidCo | STACO | MuTag | MuTagIMO | MuidSA | MuGirl | MuGirlLowBeta | CaloTag | CaloLikelihood | CaloScore | ExtrapolateMuonToIP | MuonCombinedRefit | ExtrapolateMuonToIP        
+    /// unknown | MuidCo | STACO | MuTag | MuTagIMO | MuidSA | MuGirl | MuGirlLowBeta | CaloTag | CaloLikelihood | CaloScore | ExtrapolateMuonToIP | MuonCombinedRefit | ExtrapolateMuonToIP | Commissioning       
     /// @returns  16-bit word, 1-bit reserved for each muon Algorithm: 
     uint16_t allAuthors() const;
     void setAllAuthors(uint16_t authors);
diff --git a/Event/xAOD/xAODTrigger/Root/jFexLRJetRoI_v1.cxx b/Event/xAOD/xAODTrigger/Root/jFexLRJetRoI_v1.cxx
index 95e6429c8d67dbb5ef5a0a28740ba8e2475eb9e6..7e9804c1e5a1b45bd499831fd6b840033295ac3f 100644
--- a/Event/xAOD/xAODTrigger/Root/jFexLRJetRoI_v1.cxx
+++ b/Event/xAOD/xAODTrigger/Root/jFexLRJetRoI_v1.cxx
@@ -40,7 +40,7 @@ namespace xAOD {
    jFexLRJetRoI_v1::jFexLRJetRoI_v1()
      : SG::AuxElement() {
    }
-   void jFexLRJetRoI_v1::initialize( uint8_t jFexNumber, uint8_t fpgaNumber, uint32_t tobWord) {
+   void jFexLRJetRoI_v1::initialize( uint8_t jFexNumber, uint8_t fpgaNumber, uint32_t tobWord, float_t eta, float_t phi) {
  
      setTobWord( tobWord );
      setjFexNumber( jFexNumber );
@@ -51,8 +51,8 @@ namespace xAOD {
      setTobSat(unpackSaturationIndex());
      setGlobalEta(unpackGlobalEta());
      setGlobalPhi(unpackGlobalPhi());
-     setEta( (unpackGlobalEta()+unpackTTweightEta())/10 );
-     setPhi( (unpackGlobalPhi()+unpackTTweightPhi())/10 );
+     setEta( eta );
+     setPhi( phi );
 
    //include in future when xTOB in jFEX has been implemented.
 
@@ -191,60 +191,11 @@ namespace xAOD {
             globalPhi = tobLocalPhi() + (fpgaNumber() * 16);
         }
 
-
         return globalPhi;
 
     }
 
 
-    float jFexLRJetRoI_v1::unpackTTweightEta() const{
-        float weight = 0.0;
-        if(jFexNumber() == 0 || jFexNumber() == 5) {
-
-            if(tobLocalEta() <=s_FWD_EtaPosition[1]) { //Region 1
-                weight = 0.5;
-            }
-            else if(tobLocalEta() <=s_FWD_EtaPosition[3]) { //Region 2
-                weight = 1.0;
-            }
-            else if(tobLocalEta() == s_FWD_EtaPosition[4] ) { //Region 3
-                weight = 0.5;
-            }
-            else if(tobLocalEta() <=s_FWD_EtaPosition[6]) {//Region 4
-                weight = 0.5;
-            }
-        }
-        else{ //Modules 1-4
-            weight = 0.5;
-        }
-
-        return   weight;
-    }
-    float jFexLRJetRoI_v1::unpackTTweightPhi() const{
-        float weight = 0.0;
-        if(jFexNumber() == 0 || jFexNumber() == 5) {
-
-            if(tobLocalEta() <=s_FWD_EtaPosition[1]) { //Region 1
-                weight = 0.5;
-            }
-            else if(tobLocalEta() <=s_FWD_EtaPosition[3]) { //Region 2
-                weight = 1.0;
-            }
-            else if(tobLocalEta() == s_FWD_EtaPosition[4] ) { //Region 3
-                weight = 1.0;
-            }
-            else if(tobLocalEta() <=s_FWD_EtaPosition[6]) {//Region 4
-                weight = 2;
-            }
-        }
-        else { //Modules 1-4
-            weight = 0.5;
-        }
-
-        return   weight;
-    }
-
-
 } // namespace xAOD
 
 
diff --git a/Event/xAOD/xAODTrigger/Root/jFexSRJetRoI_v1.cxx b/Event/xAOD/xAODTrigger/Root/jFexSRJetRoI_v1.cxx
index 959b38c0800b3f9739aa5db461db9c5926090d8f..e6670165af26c5f104c981108b874c278cca5647 100644
--- a/Event/xAOD/xAODTrigger/Root/jFexSRJetRoI_v1.cxx
+++ b/Event/xAOD/xAODTrigger/Root/jFexSRJetRoI_v1.cxx
@@ -39,7 +39,7 @@ namespace xAOD {
       : SG::AuxElement() {
    }
 
-   void jFexSRJetRoI_v1::initialize( uint8_t jFexNumber, uint8_t fpgaNumber, uint32_t tobWord) {
+   void jFexSRJetRoI_v1::initialize( uint8_t jFexNumber, uint8_t fpgaNumber, uint32_t tobWord, float_t eta, float_t phi) {
     
     
      setTobWord( tobWord );
@@ -51,8 +51,8 @@ namespace xAOD {
      setTobSat(unpackSaturationIndex());
      setGlobalEta(unpackGlobalEta());
      setGlobalPhi(unpackGlobalPhi()); 
-     setEta( (unpackGlobalEta()+unpackTTweightEta())/10 ); 
-     setPhi( (unpackGlobalPhi()+unpackTTweightPhi())/10 ); 
+     setEta( eta ); 
+     setPhi( phi ); 
           
    //include in future when xTOB in jFEX has been implemented.
 
@@ -197,55 +197,6 @@ namespace xAOD {
         return globalPhi;
 
     }
-    
-    
-    float jFexSRJetRoI_v1::unpackTTweightEta() const{
-        float weight = 0.0;
-        if(jFexNumber() == 0 || jFexNumber() == 5) {
-            
-            if(tobLocalEta() <=s_FWD_EtaPosition[1]) { //Region 1
-                weight = 0.5;
-            }
-            else if(tobLocalEta() <=s_FWD_EtaPosition[3]) { //Region 2
-                weight = 1.0;
-            }
-            else if(tobLocalEta() == s_FWD_EtaPosition[4] ) { //Region 3
-                weight = 0.5;
-            }
-            else if(tobLocalEta() <=s_FWD_EtaPosition[6]) {//Region 4
-                weight = 0.5;
-            }
-        }
-        else { //Modules 1-4
-            weight = 0.5;
-        }
-        
-        return  weight;     
-    }
-    
-    float jFexSRJetRoI_v1::unpackTTweightPhi() const{
-        float weight = 0.0;
-        if(jFexNumber() == 0 || jFexNumber() == 5) {
-            
-            if(tobLocalEta() <=s_FWD_EtaPosition[1]) { //Region 1
-                weight = 0.5;
-            }
-            else if(tobLocalEta() <=s_FWD_EtaPosition[3]) { //Region 2
-                weight = 1.0;
-            }
-            else if(tobLocalEta() == s_FWD_EtaPosition[4] ) { //Region 3
-                weight = 1.0;
-            }
-            else if(tobLocalEta() <=s_FWD_EtaPosition[6]) {//Region 4
-                weight = 2;
-            }
-        }
-        else { //Modules 1-4
-            weight = 0.5;
-        }
-        
-        return   weight;         
-    }
 
 } // namespace xAOD
 
diff --git a/Event/xAOD/xAODTrigger/Root/jFexTauRoI_v1.cxx b/Event/xAOD/xAODTrigger/Root/jFexTauRoI_v1.cxx
index 26d307ad0167d9923d060ab1554199968a3c3a91..85d0e64e7d02d94a320fd9f626a5ec05b428f5e6 100644
--- a/Event/xAOD/xAODTrigger/Root/jFexTauRoI_v1.cxx
+++ b/Event/xAOD/xAODTrigger/Root/jFexTauRoI_v1.cxx
@@ -23,7 +23,7 @@ namespace xAOD {
    jFexTauRoI_v1::jFexTauRoI_v1()
      : SG::AuxElement() {
    }
-   void jFexTauRoI_v1::initialize( uint8_t jFexNumber,uint8_t fpgaNumber, uint32_t tobWord) {
+   void jFexTauRoI_v1::initialize( uint8_t jFexNumber,uint8_t fpgaNumber, uint32_t tobWord, float_t eta, float_t phi) {
  
      setTobWord( tobWord );
      setjFexNumber( jFexNumber );
@@ -35,8 +35,8 @@ namespace xAOD {
      setTobSat(unpackSaturationIndex());
      setGlobalEta(unpackGlobalEta());
      setGlobalPhi(unpackGlobalPhi());
-     setEta( (unpackGlobalEta()+0.5)/10 );
-     setPhi( (unpackGlobalPhi()+0.5)/10 ); 
+     setEta( eta );
+     setPhi( phi ); 
    //include in future when xTOB in jFEX has been implemented.
 
    // If the object is a TOB then the isTOB should be true.
diff --git a/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexLRJetRoI_v1.h b/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexLRJetRoI_v1.h
index 12492ce0d72eac172c48c66efac6eb14d770a747..3f4c4461bc25933f61418e8ac70b90a48ccfeebc 100644
--- a/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexLRJetRoI_v1.h
+++ b/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexLRJetRoI_v1.h
@@ -26,7 +26,7 @@ namespace xAOD {
       jFexLRJetRoI_v1();
 
       /// In future initialze the xTOB as well, word1
-      void initialize(uint8_t jFexNumber,uint8_t fpgaNumber, uint32_t tobWord );
+      void initialize(uint8_t jFexNumber, uint8_t fpgaNumber, uint32_t tobWord, float_t eta, float_t phi);
 
       /// The "raw" 32-bit word describing the object candidate
       uint32_t  tobWord()       const;
@@ -95,9 +95,6 @@ namespace xAOD {
       //static const int s_resMask  = 0x7ff; 
       static const int s_satMask  = 0x1; 
 
-      float unpackTTweightEta() const; 
-      float unpackTTweightPhi() const; 
-
    }; // class jFexLRJetRoI_v1
 
 } // namespace xAOD
diff --git a/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexSRJetRoI_v1.h b/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexSRJetRoI_v1.h
index 964fddd748cbf824f14a67d4bc050631d4e8613b..9e22f795e4605d8915fc7186c43d79a3f722880a 100644
--- a/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexSRJetRoI_v1.h
+++ b/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexSRJetRoI_v1.h
@@ -26,7 +26,7 @@ namespace xAOD {
       jFexSRJetRoI_v1();
 
       /// In future initialze the xTOB as well, word1
-      void initialize(uint8_t jFexNumber,uint8_t fpgaNumber, uint32_t tobWord );
+      void initialize(uint8_t jFexNumber,uint8_t fpgaNumber, uint32_t tobWord, float_t eta, float_t phi );
 
       /// The "raw" 32-bit word describing the object candidate
       uint32_t  tobWord()       const;
@@ -94,9 +94,6 @@ namespace xAOD {
       //static const int s_resMask  = 0x7ff; 
       static const int s_satMask = 0x1; 
       
-      float unpackTTweightEta() const;
-      float unpackTTweightPhi() const;
-
    }; // class jFexSRJetRoI_v1
 
 } // namespace xAOD
diff --git a/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexTauRoI_v1.h b/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexTauRoI_v1.h
index 1c181601ab23e01666c89a03d10751b2eddb88ea..9e6a36d365605320008fb3755a15aad51b8e11b8 100644
--- a/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexTauRoI_v1.h
+++ b/Event/xAOD/xAODTrigger/xAODTrigger/versions/jFexTauRoI_v1.h
@@ -26,7 +26,7 @@ namespace xAOD {
       jFexTauRoI_v1();
 
       /// In future initialze the xTOB as well, word1
-      void initialize(uint8_t jFexNumber,uint8_t fpgaNumber, uint32_t tobWord );
+      void initialize(uint8_t jFexNumber,uint8_t fpgaNumber, uint32_t tobWord, float_t eta, float_t phi );
 
       /// The "raw" 32-bit word describing the object candidate
       uint32_t  tobWord()       const;
diff --git a/ForwardDetectors/FPTracker/src/Magnet.cxx b/ForwardDetectors/FPTracker/src/Magnet.cxx
index 89ed90a0055e44ced8fba0b9476d3b8442ee15c2..33e44912859f703dc8425253fcdd1ba6f6a5a9c6 100644
--- a/ForwardDetectors/FPTracker/src/Magnet.cxx
+++ b/ForwardDetectors/FPTracker/src/Magnet.cxx
@@ -46,7 +46,7 @@ namespace FPTracker{
     m_bender(bender),
     m_label(label){
     if (m_apertype == 1){ assert(m_aper_A1 != 0.);}
-    if (m_apertype == 2){ assert(m_aper_A3 != 0. and  m_aper_A4 != 0.);}
+    if (m_apertype == 2 || m_apertype == 3){ assert(m_aper_A3 != 0. and  m_aper_A4 != 0.);}
   }
   IBeamElement::ConstPtr_t Magnet::clone() const{
     IBeamElement::ConstPtr_t pm(new Magnet(*this));
@@ -175,8 +175,50 @@ namespace FPTracker{
 	 
 	return false;
       }
+    if(m_apertype == 3) 
+      {
+	double part_x = offCenter.x(); 
+	double part_y = offCenter.y(); 
+	
+	if ( m_aper_A1 > 0. )
+	  {
+	    if( std::fabs(part_x)>m_aper_A1 )
+	      {
+		std::ostringstream ost;
+		ost<<"outside for aperture type 3 x test: particle x  "<<part_x<<" m_aper_A1 "<<m_aper_A1<<"\n";
+		particle.addMsg( ost.str() );
+		return true;
+	      }
+	  }
+	if ( m_aper_A2 > 0. )
+	  {
+	    if( std::fabs(part_y)>m_aper_A2)
+	      {
+		std::ostringstream ost;
+		ost<<"outside for aperture type 3 y test: particle y  "<<part_y<<" m_aper_A2 "<<m_aper_A2<<"\n";
+		particle.addMsg( ost.str() );
+		return true;
+	      }
+	  }
+	if ( m_aper_A3 > 0. && m_aper_A4 > 0. )
+	  {
+	    float B3=std::tan(m_aper_A3)*m_aper_A1;
+	    float B4=m_aper_A2/std::tan(m_aper_A4);
+	    float d=(m_aper_A1-std::fabs(part_x))/(m_aper_A1-B4)+(m_aper_A2-std::fabs(part_y))/(m_aper_A2-B3);
+	    
+	    if(d<1.)
+	    {
+	      std::ostringstream ost;
+	      ost<<"outside for aperture type 3 test: particle x  "<<part_x<<" particle y  "<<part_y<<"; m_aper_A1 "<<m_aper_A1<<"  m_aper_A2 "<<m_aper_A2<<"  m_aper_A3 "<<m_aper_A3<<"  m_aper_A4 "<<m_aper_A4<<"\n";
+	      particle.addMsg( ost.str() );
+	      return true;
+	    }
+	  }
+	 
+	return false;
+      }
     
-    // aperture is checked anly if aperture type i s 1 or 2
+    // aperture is checked anly if aperture type i s 1, 2, or 3
     return false;
   }
 
diff --git a/ForwardDetectors/FPTracker/src/magnetSet.cxx b/ForwardDetectors/FPTracker/src/magnetSet.cxx
index 505e1cc5c8f39a67e2bd03f7881a41dc9edc3c17..9ecfc8ce0dba7b87cd2d99000f9584c5d574e796 100644
--- a/ForwardDetectors/FPTracker/src/magnetSet.cxx
+++ b/ForwardDetectors/FPTracker/src/magnetSet.cxx
@@ -237,6 +237,10 @@ namespace FPTracker
 	  {
 	    mmagapertype              =2;
 	  } 
+	else if(aperture == "\"OCTAGON\"") 
+	  {
+	    mmagapertype              =3;
+	  } 
 	else 
 	  {
 	    std::stringstream sstr;
diff --git a/ForwardDetectors/ForwardTracker/src/Magnet.cxx b/ForwardDetectors/ForwardTracker/src/Magnet.cxx
index 9b75576077011bc4fd418f18c258389e1efc0442..13220d74ec518cad64a9ff3e2c168620e56ceb1f 100644
--- a/ForwardDetectors/ForwardTracker/src/Magnet.cxx
+++ b/ForwardDetectors/ForwardTracker/src/Magnet.cxx
@@ -112,6 +112,45 @@ namespace ForwardTracker {
       
       return false;
     }
+    else if (m_aperType == "\"OCTAGON\"") {
+	
+      if ( m_A1 > 0. ) {
+	if( std::fabs(offCenter.x())>m_A1 ) {
+	
+	  std::ostringstream ost; ost << m_label << " isOutOfAperture ";
+
+	  ost << " |x|: " << std::fabs(offCenter.x()) << " > A1: " << m_A1;
+	  particle.addMsg(ost.str());
+	  return true;
+	}
+      }
+      if ( m_A2 > 0. ) {
+	if( std::fabs(offCenter.y())>m_A2) {
+	
+	  std::ostringstream ost; ost << m_label << " isOutOfAperture ";
+
+	  ost << " |y|: " << std::fabs(offCenter.y()) << " > A2: " << m_A2;
+	  particle.addMsg(ost.str());
+	  return true;
+	}
+      }
+      if ( m_A3 > 0. && m_A4 > 0. ) {
+	
+	float B3=std::tan(m_A3)*m_A1;
+	float B4=m_A2/std::tan(m_A4);
+	float d=(m_A1-std::fabs(offCenter.x()))/(m_A1-B4)+(m_A2-std::fabs(offCenter.y()))/(m_A2-B3);
+	    
+	if(d<1.) {
+	  std::ostringstream ost; ost << m_label << " isOutOfAperture ";
+	
+	  ost<<" x: "<<offCenter.x()<<" y: "<<offCenter.y()<<"  m_A1 "<<m_A1<<"  m_A2 "<<m_A2<<"  m_A3 "<<m_A3<<"  m_A4 "<<m_A4<<"  d: "<<d;
+	  particle.addMsg( ost.str() );
+	  return true;
+	}
+      }
+	 
+      return false; 
+    }
     else {
 
       std::stringstream sstr; sstr << " Unknown magnet aperture type " << m_aperType << "\n";
diff --git a/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_DigitizationToolBox.cxx b/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_DigitizationToolBox.cxx
index 9796a0eaf809962e7bf7a63ccd41418360d9e978..d264f4e5c05e4ca143ebaf2f967c0c80720cc00e 100644
--- a/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_DigitizationToolBox.cxx
+++ b/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_DigitizationToolBox.cxx
@@ -171,7 +171,7 @@ StatusCode LUCID_DigitizationToolBox::fillDigitContainer(TimedHitCollection<LUCI
     TimedHitCollection<LUCID_SimHit>                 thpc = thpclucid;
     TimedHitCollection<LUCID_SimHit>::const_iterator i, e, hitIt;
     
-    while (thpc.nextDetectorElement(i, e)) for (hitIt = i; hitIt != e; hitIt++) {
+    while (thpc.nextDetectorElement(i, e)) for (hitIt = i; hitIt != e; ++hitIt) {
       
       if (m_tubeID != (*hitIt)->GetTubeID()) continue;
 
@@ -204,7 +204,7 @@ StatusCode LUCID_DigitizationToolBox::fillDigitContainer(LUCID_SimHitCollection*
     LUCID_SimHitCollection::const_iterator hitIt  = thpclucid->begin();
     LUCID_SimHitCollection::const_iterator hitItE = thpclucid->end();
 
-    for (; hitIt != hitItE; hitIt++) {
+    for (; hitIt != hitItE; ++hitIt) {
       
       if (m_tubeID != (*hitIt).GetTubeID()) continue;
       
diff --git a/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_DigitizationToolBox.h b/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_DigitizationToolBox.h
index b38aeda4324f593cdb9f8f2645b051705a1f8dcf..86670022ad709e1ce1336f2cc00df7ce5b9cc184 100644
--- a/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_DigitizationToolBox.h
+++ b/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_DigitizationToolBox.h
@@ -57,41 +57,41 @@ class LUCID_DigitizationToolBox {
   double DynodeChainSimulation(double npe, CLHEP::HepRandomEngine* rndEngine) const;
   static double DynodeGainSmearing   (double npe, CLHEP::HepRandomEngine* rndEngine);
   
-  LUCID_DigitContainer* m_digitContainer;
+  LUCID_DigitContainer* m_digitContainer{};
 
-  int    m_numTubes;  
-  double m_qdcChannelsPerPE;
-  double m_qdcPedestal;
-  double m_qdcFedNoiseFactor;
-  double m_tdcPmtNoiseFactor;
-  double m_tdcFedNoiseFactor;
+  int    m_numTubes{};  
+  double m_qdcChannelsPerPE{};
+  double m_qdcPedestal{};
+  double m_qdcFedNoiseFactor{};
+  double m_tdcPmtNoiseFactor{};
+  double m_tdcFedNoiseFactor{};
 
-  double m_TotalPMTgain;
-  double m_AmpFactor;
-  double m_Q1bin;
-  int    m_NoiseCharge;
-  int    m_numDyinodes;
-  double m_dynodeGammaFactor;
+  double m_TotalPMTgain{};
+  double m_AmpFactor{};
+  double m_Q1bin{};
+  int    m_NoiseCharge{};
+  int    m_numDyinodes{};
+  double m_dynodeGammaFactor{};
 
-  double m_gainPerDynode;
-  double m_ChargeToQdcFactor;
+  double m_gainPerDynode{};
+  double m_ChargeToQdcFactor{};
   
-  std::vector<double> m_pmtSmearing;
-  std::vector<double> m_pmtScaling;
-  std::vector<double> m_gasScaling;
-  std::vector<double> m_npeThreshold;
+  std::vector<double> m_pmtSmearing{};
+  std::vector<double> m_pmtScaling{};
+  std::vector<double> m_gasScaling{};
+  std::vector<double> m_npeThreshold{};
 
-  bool   m_fillRootTree;
+  bool   m_fillRootTree{};
 
-  unsigned short m_tubeID;
-  double         m_npe;
-  unsigned short m_npeGas;
-  unsigned short m_npePmt;
-  unsigned short m_qdc;
-  double         m_tdcTot;
-  unsigned short m_tdc;
+  unsigned short m_tubeID{};
+  double         m_npe{};
+  unsigned short m_npeGas{};
+  unsigned short m_npePmt{};
+  unsigned short m_qdc{};
+  double         m_tdcTot{};
+  unsigned short m_tdc{};
 
-  TTree* m_tubeInfo;
+  TTree* m_tubeInfo{};
 };
 
 #endif
diff --git a/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_PileUpTool.cxx b/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_PileUpTool.cxx
index 5491fa04b1dab823811e16af29f3774d9bcee6c4..5485edbfb54f821df8ae50a44a3c67551fc692ed 100644
--- a/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_PileUpTool.cxx
+++ b/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_PileUpTool.cxx
@@ -20,23 +20,26 @@ LUCID_PileUpTool::LUCID_PileUpTool(const std::string& type,
                                    const std::string& name,
                                    const IInterface* parent) :
   PileUpToolBase     (type, name, parent),
-  m_numTubes         (40),
-  m_qdcChannelsPerPE (15.0),
-  m_qdcPedestal      (150.0),
-  m_qdcFedNoiseFactor(3.0),
-  m_tdcPmtNoiseFactor(2.8),
-  m_tdcFedNoiseFactor(0.8),
-  m_TotalPMTgain     (1.25e6),
-  m_AmpFactor        (7.5),
-  m_Q1bin            (0.1e-12),
-  m_NoiseCharge      (541666),
-  m_numDyinodes      (10),
-  m_dynodeGammaFactor(1.356),
-  m_pmtSmearing      (1, 0.000001),
-  m_pmtScaling       (1, 0.000001),
-  m_gasScaling       (1, 0.000001),
-  m_npeThreshold     (15, 0.000001),
-  m_fillRootTree     (false)
+  LUCID_DigitizationToolBox(
+  40,//m_numTubes
+  15.0,//m_qdcChannelsPerPE
+  150.0,//m_qdcPedestal
+  3.0,//m_qdcFedNoiseFactor
+  2.8,//m_tdcPmtNoiseFactor
+  0.8,//m_tdcFedNoiseFactor
+  1.25e6,//m_TotalPMTgain
+  7.5,//m_AmpFactor
+  0.1e-12,//m_Q1bin
+  541666,//m_NoiseCharge
+  10,//m_numDyinodes
+  1.356,//m_dynodeGammaFactor
+  {0.000001}, //m_pmtSmearing
+  {0.000001}, //m_pmtScaling
+  {0.000001}, //m_gasScaling
+  {0.000001,0.000001,0.000001,0.000001,0.000001,
+   0.000001,0.000001,0.000001,0.000001,0.000001,
+   0.000001,0.000001,0.000001,0.000001,0.000001},//15 values m_npeThreshold
+  false) //m_fillRootTree
 {
 
   m_SimHitCollectionName = "LucidSimHitsVector";
diff --git a/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_PileUpTool.h b/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_PileUpTool.h
index 87fd231742237f5e59e2437e4189ed77029100b7..25093f2b0d5956b1c8be928f4c7f1405bb5b9692 100644
--- a/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_PileUpTool.h
+++ b/ForwardDetectors/LUCID/LUCID_Digitization/src/LUCID_PileUpTool.h
@@ -72,27 +72,6 @@ private:
   ITHistSvc  *m_digitHistSvc{};
 
   LUCID_SimHitCollection* m_mergedhitList{};
-
-  int    m_numTubes;
-  double m_qdcChannelsPerPE;
-  double m_qdcPedestal;
-  double m_qdcFedNoiseFactor;
-  double m_tdcPmtNoiseFactor;
-  double m_tdcFedNoiseFactor;
-
-  double m_TotalPMTgain;
-  double m_AmpFactor;
-  double m_Q1bin;
-  int    m_NoiseCharge;
-  int    m_numDyinodes;
-  double m_dynodeGammaFactor;
-
-  std::vector<double> m_pmtSmearing;
-  std::vector<double> m_pmtScaling;
-  std::vector<double> m_gasScaling;
-  std::vector<double> m_npeThreshold;
-
-  bool   m_fillRootTree;
 };
 
 #endif
diff --git a/Generators/Epos_i/CMakeLists.txt b/Generators/Epos_i/CMakeLists.txt
index 6b8a60cba678ea6c802f0af54dd4c41413b7f4db..412eccb881bbee0b44ca091bacfb8140041cb898 100644
--- a/Generators/Epos_i/CMakeLists.txt
+++ b/Generators/Epos_i/CMakeLists.txt
@@ -1,5 +1,8 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
+# Minimum CMake requirement for the package.
+cmake_minimum_required( VERSION 3.21 )
+
 # Declare the package name:
 atlas_subdir( Epos_i )
 
diff --git a/Generators/EvgenProdTools/src/FixHepMC.cxx b/Generators/EvgenProdTools/src/FixHepMC.cxx
index 45fbe8675a3ba6bc0657259795a9f8b0ca20c74b..1f4ba737627ca56dcb1170650df344a37bf7c483 100644
--- a/Generators/EvgenProdTools/src/FixHepMC.cxx
+++ b/Generators/EvgenProdTools/src/FixHepMC.cxx
@@ -46,6 +46,7 @@ StatusCode FixHepMC::execute() {
 
     // Some heuristics
     std::vector<HepMC::GenParticlePtr> tofix;
+    // Herwig7+EvtGen has problems with bad pdg id. 16.11.2021
     std::vector<HepMC::GenParticlePtr> bad_pdg_id_particles;
     for (auto ip: evt->particles()) {
       // Skip this particle if (somehow) its pointer is null
@@ -60,6 +61,15 @@ StatusCode FixHepMC::execute() {
       if (pdg_id == 43 || pdg_id == 44 || pdg_id == -43 || pdg_id == -44 || pdg_id == 30353 || pdg_id == -30353 || pdg_id == 30343 || pdg_id == -30343) bad_pdg_id_particles.push_back(ip);
     }
 
+    // SHERPA has problems with bad beam particles. 16.11.2021
+    auto beams_t = evt->beams();
+    if (beams_t.size() != 2) {
+      ATH_MSG_INFO("Invalid number of beam particles " <<  beams_t.size() << ". Will try to fix.");
+      std::vector<HepMC::GenParticlePtr> bparttoremove;
+      for (auto bpart: beams_t) if (bpart->id() == 0 && bpart->production_vertex()) bparttoremove.push_back(bpart); 
+      for (auto bpart: bparttoremove) bpart->production_vertex()->remove_particle_out(bpart); 
+    }
+
     /// AV: In case we have 3 particles, we try to add a vertex that correspond to 1->2 and 1->1 splitting.
     if (tofix.size() == 3 || tofix.size() == 2) {
       size_t no_endv = 0;
diff --git a/Generators/GeneratorFilters/GeneratorFilters/xAODMissingEtFilter.h b/Generators/GeneratorFilters/GeneratorFilters/xAODMETFilter.h
similarity index 67%
rename from Generators/GeneratorFilters/GeneratorFilters/xAODMissingEtFilter.h
rename to Generators/GeneratorFilters/GeneratorFilters/xAODMETFilter.h
index d031e48fb876ba07e01fa65f2ad9a17f3caff82e..e3ff7e48abfe627513c608ad195bf06161c69be3 100644
--- a/Generators/GeneratorFilters/GeneratorFilters/xAODMissingEtFilter.h
+++ b/Generators/GeneratorFilters/GeneratorFilters/xAODMETFilter.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef GENERATORFILTERS_XAODMISSINGETFILTER_H
-#define GENERATORFILTERS_XAODMISSINGETFILTER_H
+#ifndef GENERATORFILTERS_XAODMETFILTER_H
+#define GENERATORFILTERS_XAODMETFILTER_H
 
 #include "GeneratorModules/GenFilter.h"
 #include "xAODTruth/TruthParticle.h"
@@ -13,10 +13,10 @@
 
 /// Filters on total missing energy from nus and LSPs
 /// @author Seth Zenz, December 2005
-class xAODMissingEtFilter:public GenFilter {
+class xAODMETFilter:public GenFilter {
 public:
 
-  xAODMissingEtFilter(const std::string& name, ISvcLocator* pSvcLocator);
+  xAODMETFilter(const std::string& name, ISvcLocator* pSvcLocator);
   virtual StatusCode filterEvent();
 
  private:
@@ -26,4 +26,4 @@ public:
 
 };
 
-#endif
\ No newline at end of file
+#endif
diff --git a/Generators/GeneratorFilters/GeneratorFilters/xAODMultiElecMuTauFilter.h b/Generators/GeneratorFilters/GeneratorFilters/xAODMultiElecMuTauFilter.h
new file mode 100644
index 0000000000000000000000000000000000000000..53c0916574b26962da1945eabaf4f0e125e6258c
--- /dev/null
+++ b/Generators/GeneratorFilters/GeneratorFilters/xAODMultiElecMuTauFilter.h
@@ -0,0 +1,34 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GENERATORFILTERS_XAODMULTIELECMUTAUFILTER_H
+#define GENERATORFILTERS_XAODMULTIELECMUTAUFILTER_H
+
+#include "GeneratorModules/GenFilter.h"
+#include "xAODTruth/TruthEvent.h"
+#include "xAODTruth/TruthEventContainer.h"
+
+/// Select multiple charged leptons taking into account electrons, muons and taus (inc. hadronic decays).
+///
+///  The user can steer the maximum |eta| and minimum pt and there is a separate
+/// (visible) pt cut for hadronic taus.
+///
+/// @author Carl Gwilliam
+class xAODMultiElecMuTauFilter : public GenFilter {
+public:
+
+  xAODMultiElecMuTauFilter(const std::string& name, ISvcLocator* pSvcLocator);
+  virtual StatusCode filterEvent();
+
+private:
+
+  double m_minPt;
+  double m_maxEta;
+  double m_minVisPtHadTau;
+  int    m_NLeptons;
+  bool   m_incHadTau;
+  bool   m_TwoSameSignLightLeptonsOneHadTau;
+};
+
+#endif
diff --git a/Generators/GeneratorFilters/GeneratorFilters/TauTruthParticleSlimmer.h b/Generators/GeneratorFilters/GeneratorFilters/xAODTruthParticleSlimmerTau.h
similarity index 76%
rename from Generators/GeneratorFilters/GeneratorFilters/TauTruthParticleSlimmer.h
rename to Generators/GeneratorFilters/GeneratorFilters/xAODTruthParticleSlimmerTau.h
index a42165213b4a44b6a2ceb27834cb65a12cb6c321..6873cb3334df0ec24473247b0df9ba377a8bebd4 100644
--- a/Generators/GeneratorFilters/GeneratorFilters/TauTruthParticleSlimmer.h
+++ b/Generators/GeneratorFilters/GeneratorFilters/xAODTruthParticleSlimmerTau.h
@@ -2,8 +2,8 @@
   Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-#ifndef GENERATORFILTERS_TAUTRUTHPARTICLESLIMMER_H
-#define GENERATORFILTERS_TAUTRUTHPARTICLESLIMMER_H
+#ifndef GENERATORFILTERS_XAODTRUTHPARTICLESLIMMERTAU_H
+#define GENERATORFILTERS_XAODTRUTHPARTICLESLIMMERTAU_H
 
 #include "AthenaBaseComps/AthAlgorithm.h"
 #include "AthenaBaseComps/AthAlgTool.h"
@@ -25,12 +25,12 @@
 /// The design of this class heavily mirrors the DerivationFramework::TruthCollectionMaker.
 ///
 /// @author Jeff Dandoy <Jeff.Dandoy@cern.ch>
-class TauTruthParticleSlimmer : public AthAlgorithm {
+class xAODTruthParticleSlimmerTau : public AthAlgorithm {
 public:
 
   /// Regular algorithm constructor
-  TauTruthParticleSlimmer( const std::string& name, ISvcLocator* svcLoc );
-//  TauTruthParticleSlimmer( const std::string& t, const std::string& n, const IInterface* p);
+  xAODTruthParticleSlimmerTau( const std::string& name, ISvcLocator* svcLoc );
+//  xAODTruthParticleSlimmerTau( const std::string& t, const std::string& n, const IInterface* p);
   /// Function initialising the algorithm
   virtual StatusCode initialize();
   /// Function executing the algorithm
@@ -53,8 +53,8 @@ private:
 
   ToolHandle<IMCTruthClassifier> m_classifier;
 
-}; // class TauTruthParticleSlimmer
+}; // class xAODTruthParticleSlimmerTau
 
 
 
-#endif // GENERATORFILTERS_TAUTRUTHPARTICLESLIMMER_H
+#endif // GENERATORFILTERS_XAODTRUTHPARTICLESLIMMERTAU_H
diff --git a/Generators/GeneratorFilters/share/common/CreatexAODSlimContainers.py b/Generators/GeneratorFilters/share/common/CreatexAODSlimContainers.py
index 43e05d5870a6492f5d4a47d56319438fef24c8da..6ac29132505ea125c7035fbeb7b93a58f0f25e6a 100644
--- a/Generators/GeneratorFilters/share/common/CreatexAODSlimContainers.py
+++ b/Generators/GeneratorFilters/share/common/CreatexAODSlimContainers.py
@@ -13,9 +13,9 @@ def createxAODSlimmedContainer(container_name,prefiltSeq):
             from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerMuon
             prefiltSeq += xAODTruthParticleSlimmerMuon('xAODTruthParticleSlimmerMuon')
     elif container_name=="TruthTaus":
-        if not hasattr(prefiltSeq, "TauTruthParticleSlimmer"):
-            from GeneratorFilters.GeneratorFiltersConf import TauTruthParticleSlimmer
-            prefiltSeq += TauTruthParticleSlimmer('TauTruthParticleSlimmer')
+        if not hasattr(prefiltSeq, "xAODTruthParticleSlimmerTau"):
+            from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerTau
+            prefiltSeq += xAODTruthParticleSlimmerTau('xAODTruthParticleSlimmerTau')
     elif container_name=="TruthPhotons":
         if not hasattr(prefiltSeq, "xAODTruthParticleSlimmerPhoton"):
             from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerPhoton
diff --git a/Generators/GeneratorFilters/share/common/QCDJetFilter_JZX.py b/Generators/GeneratorFilters/share/common/QCDJetFilter_JZX.py
new file mode 100644
index 0000000000000000000000000000000000000000..034adfb5cbb20886c6e5e16214db6039f43042c0
--- /dev/null
+++ b/Generators/GeneratorFilters/share/common/QCDJetFilter_JZX.py
@@ -0,0 +1,17 @@
+## QCD truth jet filter common config for all JZx and JZxW
+
+# Min and max momenta for the slices
+minDict = {0:-1,1:20,2:60,3:160,4:400,5:800,6:1300,7:1800,8:2500,9:3200,10:3900,11:4600,12:5300}
+maxDict = {0:20,1:60,2:160,3:400,4:800,5:1300,6:1800,7:2500,8:3200,9:3900,10:4600,11:5300,12:7000}
+
+def QCDJZSlice(x,r,filtSeq):
+
+    include("GeneratorFilters/FindJets.py")
+    CreateJets(prefiltSeq, r)
+    AddJetsFilter(filtSeq, runArgs.ecmEnergy, r)
+    
+    from AthenaCommon.SystemOfUnits import GeV
+#    filtSeq.QCDTruthJetFilter.TruthJetContainer = "AntiKt6TruthJets"
+    filtSeq.QCDTruthJetFilter.MinPt = minDict[x]*GeV
+    filtSeq.QCDTruthJetFilter.MaxPt = maxDict[x]*GeV
+
diff --git a/Generators/GeneratorFilters/share/common/xAODElectronFilter_Common.py b/Generators/GeneratorFilters/share/common/xAODElectronFilter_Common.py
new file mode 100644
index 0000000000000000000000000000000000000000..13e1f2d2156deb60f917820e6cbe7d8513478903
--- /dev/null
+++ b/Generators/GeneratorFilters/share/common/xAODElectronFilter_Common.py
@@ -0,0 +1,14 @@
+# common fragment for xAODElectron filter
+# conversion to XAOD, 
+# creation of slimmed container containing electrons
+# connecting the filter
+
+include ("GeneratorFilters/CreatexAODSlimContainers.py")
+createxAODSlimmedContainer("TruthElectrons",prefiltSeq)
+prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT'
+
+from GeneratorFilters.GeneratorFiltersConf import xAODElectronFilter
+#xAODElectronFilter = xAODElectronFilter("xAODElectronFilter")  
+#filtSeq += xAODElectronFilter
+
+
diff --git a/Generators/GeneratorFilters/share/common/xAODMETFilter_Common.py b/Generators/GeneratorFilters/share/common/xAODMETFilter_Common.py
new file mode 100644
index 0000000000000000000000000000000000000000..7b707dc9c6facdbd09664f4aa502b37d59aaf1e8
--- /dev/null
+++ b/Generators/GeneratorFilters/share/common/xAODMETFilter_Common.py
@@ -0,0 +1,19 @@
+# common fragment for xAODMissingEt filter
+# conversion to XAOD, 
+# creation of slimmed container containing MET
+# connecting the filter
+
+if not hasattr(prefiltSeq, 'xAODCnv'):  
+  from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg
+  prefiltSeq += xAODMaker__xAODTruthCnvAlg('xAODCnv',WriteTruthMetaData=False)
+  prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT'
+
+if not hasattr(prefiltSeq, "xAODTruthParticleSlimmerMET"):
+  from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerMET
+  prefiltSeq += xAODTruthParticleSlimmerMET('xAODTruthParticleSlimmerMET')
+
+from GeneratorFilters.GeneratorFiltersConf import xAODMETFilter
+#xAODMissingEtFilter = xAODMissingEtFilter("xAODMissingEtFilter")  
+#filtSeq += xAODMissingEtFilter
+
+
diff --git a/Generators/GeneratorFilters/share/common/xAODMultiLeptonFilter_Common.py b/Generators/GeneratorFilters/share/common/xAODMultiLeptonFilter_Common.py
new file mode 100644
index 0000000000000000000000000000000000000000..333e7ea6488d116d3415e50078b0e8c6601f17a5
--- /dev/null
+++ b/Generators/GeneratorFilters/share/common/xAODMultiLeptonFilter_Common.py
@@ -0,0 +1,22 @@
+# common fragment for xAODMultiLepton filter
+# conversion to XAOD, 
+# creation of slimmed container containing electrons and muons
+# connecting the filter
+
+if not hasattr(prefiltSeq, 'xAODCnv'):  
+  from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg
+  prefiltSeq += xAODMaker__xAODTruthCnvAlg('xAODCnv',WriteTruthMetaData=False)
+  prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT'
+
+if not hasattr(prefiltSeq, "xAODTruthParticleSlimmerElectron"):
+  from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerElectron
+  prefiltSeq += xAODTruthParticleSlimmerElectron('xAODTruthParticleSlimmerElectron')
+
+if not hasattr(prefiltSeq, "xAODTruthParticleSlimmerMuon"):
+  from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerMuon   
+  prefiltSeq += xAODTruthParticleSlimmerMuon('xAODTruthParticleSlimmerMuon')
+
+from GeneratorFilters.GeneratorFiltersConf import xAODMultiLeptonFilter
+
+
+
diff --git a/Generators/GeneratorFilters/share/common/xAODMultiMuonFilter_Common.py b/Generators/GeneratorFilters/share/common/xAODMultiMuonFilter_Common.py
new file mode 100644
index 0000000000000000000000000000000000000000..cb8c3d062206571c28fa7e8ae84bdf048e48d8e1
--- /dev/null
+++ b/Generators/GeneratorFilters/share/common/xAODMultiMuonFilter_Common.py
@@ -0,0 +1,18 @@
+# common fragment for xAODMultiMuon filter
+# conversion to XAOD, 
+# connecting the filter
+
+if not hasattr(prefiltSeq, 'xAODCnv'):  
+  from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg
+  prefiltSeq += xAODMaker__xAODTruthCnvAlg('xAODCnv',WriteTruthMetaData=False)
+  prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT'
+
+if not hasattr(prefiltSeq, "xAODTruthParticleSlimmerMuon"):
+  from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerMuon
+  prefiltSeq += xAODTruthParticleSlimmerMuon('xAODTruthParticleSlimmerMuon')
+
+from GeneratorFilters.GeneratorFiltersConf import xAODMultiMuonFilter
+#xAODMultiMuonFilter = xAODMultiMuonFilter("xAODMultiMuonFilter")  
+#filtSeq += xAODMultiMuonFilter
+
+
diff --git a/Generators/GeneratorFilters/share/common/xAODMuonFilter_Common.py b/Generators/GeneratorFilters/share/common/xAODMuonFilter_Common.py
new file mode 100644
index 0000000000000000000000000000000000000000..3d84ea72fa3789e22cc829946bea812f4de99a1d
--- /dev/null
+++ b/Generators/GeneratorFilters/share/common/xAODMuonFilter_Common.py
@@ -0,0 +1,17 @@
+# common fragment for xAODMuon filter
+# conversion to XAOD, 
+# creation of slimmed container containing muons
+# connecting the filter
+
+if not hasattr(prefiltSeq, 'xAODCnv'):  
+  from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg
+  prefiltSeq += xAODMaker__xAODTruthCnvAlg('xAODCnv',WriteTruthMetaData=False)
+  prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT'
+
+if not hasattr(prefiltSeq, "xAODTruthParticleSlimmerMuon"):
+  from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerMuon
+  prefiltSeq += xAODTruthParticleSlimmerMuon('xAODTruthParticleSlimmerMuon')
+
+from GeneratorFilters.GeneratorFiltersConf import xAODMuonFilter
+
+
diff --git a/Generators/GeneratorFilters/share/common/xAODPhotonFilter_Common.py b/Generators/GeneratorFilters/share/common/xAODPhotonFilter_Common.py
new file mode 100644
index 0000000000000000000000000000000000000000..7f9dc6b365c0ab6221330ee3a6789cc6c93adab0
--- /dev/null
+++ b/Generators/GeneratorFilters/share/common/xAODPhotonFilter_Common.py
@@ -0,0 +1,19 @@
+# common fragment for xAODPhoton filter
+# conversion to XAOD, 
+# creation of slimmed container containing photons
+# connecting the filter
+
+if not hasattr(prefiltSeq, 'xAODCnv'):  
+  from xAODTruthCnv.xAODTruthCnvConf import xAODMaker__xAODTruthCnvAlg
+  prefiltSeq += xAODMaker__xAODTruthCnvAlg('xAODCnv',WriteTruthMetaData=False)
+  prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT'
+
+if not hasattr(prefiltSeq, "xAODTruthParticleSlimmerPhoton"):
+  from GeneratorFilters.GeneratorFiltersConf import xAODTruthParticleSlimmerPhoton
+  prefiltSeq += xAODTruthParticleSlimmerPhoton('xAODTruthParticleSlimmerPhoton')
+
+from GeneratorFilters.GeneratorFiltersConf import xAODPhotonFilter
+#xAODPhotonFilter = xAODPhotonFilter("xAODPhotonFilter")  
+#filtSeq += xAODPhotonFilter
+
+
diff --git a/Generators/GeneratorFilters/share/common/xAODTauFilter_Common.py b/Generators/GeneratorFilters/share/common/xAODTauFilter_Common.py
new file mode 100644
index 0000000000000000000000000000000000000000..a27c8d7a79d859e233ae6f41977b5db1b2f7f2b6
--- /dev/null
+++ b/Generators/GeneratorFilters/share/common/xAODTauFilter_Common.py
@@ -0,0 +1,14 @@
+# common fragment for xAODTau filter
+# conversion to XAOD, 
+# creation of slimmed container containing taus
+# connecting the filter
+
+include ("GeneratorFilters/CreatexAODSlimContainers.py")
+createxAODSlimmedContainer("TruthTaus",prefiltSeq)
+prefiltSeq.xAODCnv.AODContainerName = 'GEN_EVENT'
+
+from GeneratorFilters.GeneratorFiltersConf import xAODTauFilter
+#xAODTauFilter = xAODTauFilter("xAODTauFilter")  
+#filtSeq += xAODTauFilter
+
+
diff --git a/Generators/GeneratorFilters/src/components/GeneratorFilters_entries.cxx b/Generators/GeneratorFilters/src/components/GeneratorFilters_entries.cxx
index 6cfc7578dea5787af5b8b1c67789eb130c88de31..96465f5d73d61946d73efc26dbc1a2861900c78d 100644
--- a/Generators/GeneratorFilters/src/components/GeneratorFilters_entries.cxx
+++ b/Generators/GeneratorFilters/src/components/GeneratorFilters_entries.cxx
@@ -1,48 +1,49 @@
 // filters accepted for 22.6
-#include "GeneratorFilters/BSignalFilter.h"
-#include "GeneratorFilters/ChargedTracksWeightFilter.h"
-#include "GeneratorFilters/DecayTimeFilter.h"
-#include "GeneratorFilters/DirectPhotonFilter.h"
-#include "GeneratorFilters/HeavyFlavorHadronFilter.h"
-#include "GeneratorFilters/LeptonFilter.h" 
-#include "GeneratorFilters/MissingEtFilter.h"
-#include "GeneratorFilters/MultiElecMuTauFilter.h"
 #include "GeneratorFilters/QCDTruthJetFilter.h"
-#include "GeneratorFilters/TauFilter.h"
-#include "GeneratorFilters/xAODTauFilter.h"
 #include "GeneratorFilters/xAODElectronFilter.h"
-#include "GeneratorFilters/xAODMuonFilter.h"
-#include "GeneratorFilters/xAODPhotonFilter.h"
+#include "GeneratorFilters/xAODMETFilter.h"
+#include "GeneratorFilters/xAODMultiElecMuTauFilter.h"
 #include "GeneratorFilters/xAODMultiLeptonFilter.h"
 #include "GeneratorFilters/xAODMultiMuonFilter.h"
-#include "GeneratorFilters/xAODMissingEtFilter.h"
-#include "GeneratorFilters/xAODDiLeptonMassFilter.h"
-#include "GeneratorFilters/xAODDecayTimeFilter.h"
-#include "GeneratorFilters/xAODDecaysFinalStateFilter.h"
-#include "GeneratorFilters/xAODChargedTracksFilter.h"
-
+#include "GeneratorFilters/xAODMuonFilter.h"
+#include "GeneratorFilters/xAODPhotonFilter.h"
+#include "GeneratorFilters/xAODTauFilter.h"
 
 // slimmers for 22.6
-#include "GeneratorFilters/PileupTruthParticleSlimmer.h"
-#include "GeneratorFilters/TauTruthParticleSlimmer.h"
 #include "GeneratorFilters/xAODTruthParticleSlimmerElectron.h"
+#include "GeneratorFilters/xAODTruthParticleSlimmerMET.h"
 #include "GeneratorFilters/xAODTruthParticleSlimmerMuon.h"
 #include "GeneratorFilters/xAODTruthParticleSlimmerPhoton.h"
-#include "GeneratorFilters/xAODTruthParticleSlimmerMET.h"
-#include "GeneratorFilters/xAODTruthParticleSlimmerLightLepton.h"
-
-
-
-
-
-
-
+#include "GeneratorFilters/xAODTruthParticleSlimmerTau.h"
 
-#include "GeneratorFilters/ElectronFilter.h"
-#include "GeneratorFilters/ZtoLeptonFilter.h"
+// other accepted for 22.6
+#include "GeneratorFilters/BSignalFilter.h"
+#include "GeneratorFilters/ChargedTracksFilter.h"
+#include "GeneratorFilters/ChargedTracksWeightFilter.h"
+#include "GeneratorFilters/DecaysFinalStateFilter.h"
+#include "GeneratorFilters/DecayTimeFilter.h"
+#include "GeneratorFilters/DiLeptonMassFilter.h"
+#include "GeneratorFilters/DirectPhotonFilter.h"
+#include "GeneratorFilters/HeavyFlavorHadronFilter.h"
+#include "GeneratorFilters/LeptonFilter.h" 
+#include "GeneratorFilters/LeptonPairFilter.h"
+#include "GeneratorFilters/M4MuIntervalFilter.h"
+#include "GeneratorFilters/MissingEtFilter.h"
+#include "GeneratorFilters/MultiBjetFilter.h"
+#include "GeneratorFilters/MultiCjetFilter.h"
+#include "GeneratorFilters/MultiElecMuTauFilter.h"
 #include "GeneratorFilters/MultiLeptonFilter.h"
 #include "GeneratorFilters/MultiMuonFilter.h"
-#include "GeneratorFilters/MultiBjetFilter.h"
+#include "GeneratorFilters/ParentChildFilter.h"
+#include "GeneratorFilters/ParentTwoChildrenFilter.h"
+#include "GeneratorFilters/SameParticleHardScatteringFilter.h"
+#include "GeneratorFilters/TauFilter.h"
+#include "GeneratorFilters/VBFForwardJetsFilter.h"
+#include "GeneratorFilters/VBFMjjIntervalFilter.h"
+#include "GeneratorFilters/XtoVVDecayFilterExtended.h"
+// other
+#include "GeneratorFilters/ElectronFilter.h"
+#include "GeneratorFilters/ZtoLeptonFilter.h"
 #include "GeneratorFilters/BSignalFilter.h"
 #include "GeneratorFilters/ATauFilter.h"
 #include "GeneratorFilters/JetFilter.h"
@@ -57,11 +58,8 @@
 #include "GeneratorFilters/TTbarMassFilter.h"
 #include "GeneratorFilters/TruthJetFilter.h"
 #include "GeneratorFilters/SoftLeptonFilter.h"
-#include "GeneratorFilters/ParentChildFilter.h"
-#include "GeneratorFilters/ParentTwoChildrenFilter.h"
 #include "GeneratorFilters/ParentChildwStatusFilter.h"
 #include "GeneratorFilters/SoftLeptonInJetFilter.h"
-#include "GeneratorFilters/VBFForwardJetsFilter.h"
 #include "GeneratorFilters/TTbarPlusJetsFilter.h"
 #include "GeneratorFilters/WMultiLeptonFilter.h"
 #include "GeneratorFilters/PtmissAndOrLeptonFilter.h"
@@ -77,9 +75,7 @@
 #include "GeneratorFilters/TruthJetWeightFilter.h"
 #include "GeneratorFilters/MultiElectronFilter.h"
 #include "GeneratorFilters/DiPhotonFilter.h"
-#include "GeneratorFilters/ChargedTracksFilter.h"
 #include "GeneratorFilters/DecayModeFilter.h"
-#include "GeneratorFilters/DiLeptonMassFilter.h"
 #include "GeneratorFilters/DstD0K3piFilter.h"
 #include "GeneratorFilters/FourLeptonMassFilter.h"
 #include "GeneratorFilters/FourLeptonInvMassFilter.h"
@@ -92,72 +88,74 @@
 #include "GeneratorFilters/TopCKMKinFilter.h"
 #include "GeneratorFilters/MultiHiggsFilter.h"
 #include "GeneratorFilters/XtoVVDecayFilter.h"
-#include "GeneratorFilters/XtoVVDecayFilterExtended.h"
 #include "GeneratorFilters/VHtoVVFilter.h"
 #include "GeneratorFilters/TtHtoVVDecayFilter.h"
 #include "GeneratorFilters/SusySubprocessFinder.h"
 #include "GeneratorFilters/LeadingPhotonFilter.h"
 #include "GeneratorFilters/VHtoVVDiLepFilter.h"
-#include "GeneratorFilters/VBFMjjIntervalFilter.h"
 #include "GeneratorFilters/JetFilterWithTruthPhoton.h"
 #include "GeneratorFilters/Boosted2DijetFilter.h"
 #include "GeneratorFilters/DiBjetFilter.h"
 #include "GeneratorFilters/HiggsFilter.h"
 #include "GeneratorFilters/TTbarBoostCatFilter.h"
 #include "GeneratorFilters/MultiParticleFilter.h" 
-#include "GeneratorFilters/LeptonPairFilter.h"
 #include "GeneratorFilters/DecayPositionFilter.h"
 #include "GeneratorFilters/HTFilter.h"
 #include "GeneratorFilters/TTbarPlusHeavyFlavorFilter.h"
 #include "GeneratorFilters/DuplicateEventFilter.h"
 #include "GeneratorFilters/BoostedHadTopAndTopPair.h"
-#include "GeneratorFilters/DecaysFinalStateFilter.h"
 #include "GeneratorFilters/HTFilter.h"
 #include "GeneratorFilters/TrimuMassRangeFilter.h"
 
 
-// filters accepted for 22.6
-DECLARE_COMPONENT( BSignalFilter )
-DECLARE_COMPONENT( ChargedTracksWeightFilter )
-DECLARE_COMPONENT( DirectPhotonFilter )
-DECLARE_COMPONENT( DecayTimeFilter )
-DECLARE_COMPONENT( HeavyFlavorHadronFilter )
-DECLARE_COMPONENT( LeptonFilter )
-DECLARE_COMPONENT( MissingEtFilter )
-DECLARE_COMPONENT( MultiElecMuTauFilter )
+//filters accepted for 22.6
 DECLARE_COMPONENT( QCDTruthJetFilter )
-DECLARE_COMPONENT( TauFilter )
-DECLARE_COMPONENT( xAODTauFilter )
 DECLARE_COMPONENT( xAODElectronFilter )
+DECLARE_COMPONENT( xAODMETFilter)
+DECLARE_COMPONENT( xAODMultiElecMuTauFilter )
+DECLARE_COMPONENT( xAODMultiLeptonFilter)
+DECLARE_COMPONENT( xAODMultiMuonFilter)
 DECLARE_COMPONENT( xAODMuonFilter )
 DECLARE_COMPONENT( xAODPhotonFilter )
-DECLARE_COMPONENT( xAODMultiLeptonFilter )
-DECLARE_COMPONENT( xAODMultiMuonFilter )
-DECLARE_COMPONENT( xAODMissingEtFilter )
-DECLARE_COMPONENT( xAODDiLeptonMassFilter )
-DECLARE_COMPONENT( xAODDecayTimeFilter )
-DECLARE_COMPONENT( xAODDecaysFinalStateFilter )
-DECLARE_COMPONENT( xAODChargedTracksFilter )
-
+DECLARE_COMPONENT( xAODTauFilter )
 
 //slimmers accepted for 22.6
-DECLARE_COMPONENT( PileupTruthParticleSlimmer )
-DECLARE_COMPONENT( TauTruthParticleSlimmer )
 DECLARE_COMPONENT( xAODTruthParticleSlimmerElectron )
+DECLARE_COMPONENT( xAODTruthParticleSlimmerMET)
 DECLARE_COMPONENT( xAODTruthParticleSlimmerMuon )
-DECLARE_COMPONENT( xAODTruthParticleSlimmerPhoton )
-DECLARE_COMPONENT( xAODTruthParticleSlimmerMET )
-DECLARE_COMPONENT( xAODTruthParticleSlimmerLightLepton )
-
-
+DECLARE_COMPONENT( xAODTruthParticleSlimmerPhoton)
+DECLARE_COMPONENT( xAODTruthParticleSlimmerTau )
 
+// other accepted for 22.6
+DECLARE_COMPONENT( BSignalFilter )
+DECLARE_COMPONENT( ChargedTracksFilter )
+DECLARE_COMPONENT( ChargedTracksWeightFilter )
+DECLARE_COMPONENT( DecaysFinalStateFilter ) 
+DECLARE_COMPONENT( DecayTimeFilter )
+DECLARE_COMPONENT( DiLeptonMassFilter )
+DECLARE_COMPONENT( DirectPhotonFilter )
+DECLARE_COMPONENT( HeavyFlavorHadronFilter )
+DECLARE_COMPONENT( LeptonFilter )
+DECLARE_COMPONENT( LeptonPairFilter )
+DECLARE_COMPONENT( M4MuIntervalFilter )
+DECLARE_COMPONENT( MissingEtFilter )
+DECLARE_COMPONENT( MultiBjetFilter )
+DECLARE_COMPONENT( MultiCjetFilter )
+DECLARE_COMPONENT( MultiElecMuTauFilter )
+DECLARE_COMPONENT( MultiLeptonFilter )   
+DECLARE_COMPONENT( MultiMuonFilter )  
+DECLARE_COMPONENT( ParentChildFilter )
+DECLARE_COMPONENT( ParentTwoChildrenFilter ) 
+DECLARE_COMPONENT( SameParticleHardScatteringFilter )
+DECLARE_COMPONENT( TauFilter )
+DECLARE_COMPONENT( VBFForwardJetsFilter )
+DECLARE_COMPONENT( VBFMjjIntervalFilter )
+DECLARE_COMPONENT( XtoVVDecayFilterExtended )
 
+// others
 DECLARE_COMPONENT( ElectronFilter )
 DECLARE_COMPONENT( LeptonFilter )
 DECLARE_COMPONENT( ZtoLeptonFilter )
-DECLARE_COMPONENT( MultiLeptonFilter )
-DECLARE_COMPONENT( MultiMuonFilter )
-DECLARE_COMPONENT( MultiBjetFilter )
 DECLARE_COMPONENT( BSignalFilter )
 DECLARE_COMPONENT( ATauFilter )
 DECLARE_COMPONENT( JetFilter )
@@ -171,11 +169,8 @@ DECLARE_COMPONENT( TTbarWToLeptonFilter )
 DECLARE_COMPONENT( TTbarMassFilter )
 DECLARE_COMPONENT( TruthJetFilter )
 DECLARE_COMPONENT( SoftLeptonFilter )
-DECLARE_COMPONENT( ParentChildFilter )
-DECLARE_COMPONENT( ParentTwoChildrenFilter )
 DECLARE_COMPONENT( ParentChildwStatusFilter )
 DECLARE_COMPONENT( SoftLeptonInJetFilter )
-DECLARE_COMPONENT( VBFForwardJetsFilter )
 DECLARE_COMPONENT( TTbarPlusJetsFilter )
 DECLARE_COMPONENT( WMultiLeptonFilter )
 DECLARE_COMPONENT( PtmissAndOrLeptonFilter )
@@ -191,9 +186,7 @@ DECLARE_COMPONENT( XXvvGGFilter )
 DECLARE_COMPONENT( TruthJetWeightFilter )
 DECLARE_COMPONENT( MultiElectronFilter )
 DECLARE_COMPONENT( DiPhotonFilter )
-DECLARE_COMPONENT( ChargedTracksFilter )
 DECLARE_COMPONENT( DecayModeFilter )
-DECLARE_COMPONENT( DiLeptonMassFilter )
 DECLARE_COMPONENT( HeavyFlavorHadronFilter )
 DECLARE_COMPONENT( DstD0K3piFilter )
 DECLARE_COMPONENT( FourLeptonMassFilter )
@@ -208,25 +201,23 @@ DECLARE_COMPONENT( BSubstruct )
 DECLARE_COMPONENT( TopCKMKinFilter )
 DECLARE_COMPONENT( MultiHiggsFilter )
 DECLARE_COMPONENT( XtoVVDecayFilter )
-DECLARE_COMPONENT( XtoVVDecayFilterExtended )
 DECLARE_COMPONENT( VHtoVVFilter )
 DECLARE_COMPONENT( TtHtoVVDecayFilter )
 DECLARE_COMPONENT( SusySubprocessFinder )
 DECLARE_COMPONENT( LeadingPhotonFilter )
 DECLARE_COMPONENT( VHtoVVDiLepFilter )
-DECLARE_COMPONENT( VBFMjjIntervalFilter )
 DECLARE_COMPONENT( JetFilterWithTruthPhoton )
 DECLARE_COMPONENT( Boosted2DijetFilter )
 DECLARE_COMPONENT( DiBjetFilter )
 DECLARE_COMPONENT( HiggsFilter )
 DECLARE_COMPONENT( TTbarBoostCatFilter )
 DECLARE_COMPONENT( MultiParticleFilter )
-DECLARE_COMPONENT( LeptonPairFilter )
 DECLARE_COMPONENT( DecayPositionFilter )
 DECLARE_COMPONENT( HTFilter )
 DECLARE_COMPONENT( TTbarPlusHeavyFlavorFilter )
 DECLARE_COMPONENT( DuplicateEventFilter )
 DECLARE_COMPONENT( BoostedHadTopAndTopPair )
-DECLARE_COMPONENT( DecaysFinalStateFilter )
 DECLARE_COMPONENT( HTFilter )
 DECLARE_COMPONENT( TrimuMassRangeFilter )
+
+
diff --git a/Generators/GeneratorFilters/src/xAODMissingEtFilter.cxx b/Generators/GeneratorFilters/src/xAODMETFilter.cxx
similarity index 87%
rename from Generators/GeneratorFilters/src/xAODMissingEtFilter.cxx
rename to Generators/GeneratorFilters/src/xAODMETFilter.cxx
index 93d4b4b00941bb26d7f41caa8d91938155816eb9..9f23f7c6360bc0d2216febb66875ba61c27e4c0e 100644
--- a/Generators/GeneratorFilters/src/xAODMissingEtFilter.cxx
+++ b/Generators/GeneratorFilters/src/xAODMETFilter.cxx
@@ -2,11 +2,11 @@
   Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "GeneratorFilters/xAODMissingEtFilter.h"
+#include "GeneratorFilters/xAODMETFilter.h"
 #include "TruthUtils/PIDHelpers.h"
 
 
-xAODMissingEtFilter::xAODMissingEtFilter(const std::string& name, ISvcLocator* pSvcLocator)
+xAODMETFilter::xAODMETFilter(const std::string& name, ISvcLocator* pSvcLocator)
   : GenFilter(name,pSvcLocator)
 {
   declareProperty("METCut",m_METmin = 10000.);
@@ -15,7 +15,7 @@ xAODMissingEtFilter::xAODMissingEtFilter(const std::string& name, ISvcLocator* p
 }
 
 
-StatusCode xAODMissingEtFilter::filterEvent() {
+StatusCode xAODMETFilter::filterEvent() {
     
   // Retrieve TruthMET container from xAOD MET slimmer, contains (MC::isGenStable() && MC::isNonInteracting()) particles
   const xAOD::TruthParticleContainer* xTruthParticleContainer;
diff --git a/Generators/GeneratorFilters/src/xAODMultiElecMuTauFilter.cxx b/Generators/GeneratorFilters/src/xAODMultiElecMuTauFilter.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..023bd7d3684d560e31b71f009e8b1d6ce6bb1336
--- /dev/null
+++ b/Generators/GeneratorFilters/src/xAODMultiElecMuTauFilter.cxx
@@ -0,0 +1,121 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "GeneratorFilters/xAODMultiElecMuTauFilter.h"
+#include "CLHEP/Vector/LorentzVector.h"
+
+
+xAODMultiElecMuTauFilter::xAODMultiElecMuTauFilter(const std::string& name, ISvcLocator* pSvcLocator)
+  : GenFilter(name,pSvcLocator)
+{
+declareProperty("MinPt",                             m_minPt                            = 5000. );
+declareProperty("MaxEta",                            m_maxEta                           = 10.0  );
+declareProperty("MinVisPtHadTau",                    m_minVisPtHadTau                   = 10000.);
+declareProperty("NLeptons",                          m_NLeptons                         = 4     );
+declareProperty("IncludeHadTaus",                    m_incHadTau                        = true  );
+declareProperty("TwoSameSignLightLeptonsOneHadTau",  m_TwoSameSignLightLeptonsOneHadTau = false );
+}
+
+
+StatusCode xAODMultiElecMuTauFilter::filterEvent() {
+  int numLeptons = 0;
+  int numLightLeptons = 0;
+  int numHadTaus = 0;
+  if (m_TwoSameSignLightLeptonsOneHadTau) {
+    if (m_NLeptons!=3) ATH_MSG_ERROR("TwoSameSignLightLeptonsOneHadTau request possible only for NLeptons = 3. Check your jobOptions.");
+  }
+  int charge1 = 0; 
+  int charge2 = 0; 
+
+  // Retrieve full TruthEvent container
+  const xAOD::TruthEventContainer *xTruthEventContainer;
+  if (evtStore()->retrieve(xTruthEventContainer, "TruthEvents").isFailure())
+  {
+    ATH_MSG_ERROR("No TruthEvents collection with name " << "TruthEvents" << " found in StoreGate!");
+    return StatusCode::FAILURE;
+  }
+
+  xAOD::TruthEventContainer::const_iterator itr;
+  for (itr = xTruthEventContainer->begin(); itr!=xTruthEventContainer->end(); ++itr) {
+    const xAOD::TruthEvent *genEvt = (*itr);
+    unsigned int nPart = genEvt->nTruthParticles();
+    for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
+       const xAOD::TruthParticle* pitr =  genEvt->truthParticle(iPart);
+       if (pitr->status() == 1 && (std::abs(pitr->pdgId()) == 11 || std::abs(pitr->pdgId()) == 13)) {
+         if (pitr->pt() >= m_minPt && std::abs(pitr->eta()) <= m_maxEta) {
+           ATH_MSG_DEBUG("Found lepton with PDG ID = " << pitr->pdgId()
+                         << ", status = " <<  pitr->status()
+                         << ", pt = "     <<  pitr->pt()
+                         << ", eta = "    <<  pitr->eta());
+            numLeptons++;
+            numLightLeptons++;
+            if (numLightLeptons==1) { if (pitr->pdgId() < 0) { charge1 = -1; } else { charge1 = 1; } } 
+           if (numLightLeptons==2) { if (pitr->pdgId() < 0) { charge2 = -1; } else { charge2 = 1; } } 
+         }
+         continue;
+       }
+       //Look for Hadronic taus (leptonic ones will be saved by above) that have status!=3 and don't decay to another tau (FSR)
+       if (!m_incHadTau) continue;
+       const xAOD::TruthParticle *tau= nullptr;
+       const xAOD::TruthParticle *taunu= nullptr;
+       if (std::abs(pitr->pdgId()) != 15 || pitr->status() == 3) continue;
+         tau = pitr;
+         if(!tau->decayVtx()) continue;
+         // Loop over children and:
+         // 1. Find if it is hadronic (i.e. no decay lepton).
+         // 2. Veto tau -> tau (FSR)
+         // 3. Store the tau neutino to calculate the visible momentum
+         for (unsigned int iChild = 0; iChild < tau->decayVtx()->nOutgoingParticles(); ++iChild) {
+             const xAOD::TruthParticle* citr =  tau->decayVtx()->outgoingParticle(iChild);
+             //Ignore tau -> tau (FSR)
+             if (pitr->pdgId() == citr->pdgId()) {
+               ATH_MSG_DEBUG("FSR tau decay.  Ignoring!");
+               tau = nullptr;
+               break;
+           }
+             // Ignore leptonic decays
+             if (std::abs(citr->pdgId()) == 13 || std::abs(citr->pdgId()) == 11) {
+               tau = nullptr;
+               break;
+          }
+            // Find tau decay nu
+            if (std::abs(citr->pdgId()) == 16) {
+               taunu = citr;
+           }
+         }
+         if (tau) {
+           // Good hadronic decay
+           CLHEP::HepLorentzVector tauVisMom = CLHEP::HepLorentzVector(tau->px() - taunu->px(),
+                                                         tau->py() - taunu->py(),
+                                                         tau->pz() - taunu->pz(),
+                                                         tau->e()  - taunu->e());
+           if (tauVisMom.perp() >= m_minVisPtHadTau && std::abs(tauVisMom.eta()) <= m_maxEta) {
+             ATH_MSG_DEBUG("Found hadronic tau decay with PDG ID = " << tau->pdgId()
+                           << ", status = " << tau->status()
+                           << ", vis pt = " << tauVisMom.perp()
+                           << ", eta = " <<  tauVisMom.eta());
+             numLeptons++;
+             numHadTaus++;
+        
+           }
+       }
+    }
+  }
+
+ bool passed_event = false;
+  if (m_TwoSameSignLightLeptonsOneHadTau) {
+    if ( ((numLightLeptons+numHadTaus)==numLeptons) && numLightLeptons == 2 && numHadTaus == 1 && charge1==charge2 ) {
+      ATH_MSG_INFO("Found " << numLeptons << " Leptons: two same sign ligh leptons + one hadronic tau! Event passed.");
+      passed_event = true;
+    }
+  } else {
+    if ( numLeptons >= m_NLeptons ) {
+      ATH_MSG_INFO("Found " << numLeptons << "Leptons. Event passed.");
+      passed_event = true;
+    }
+  }
+  setFilterPassed(passed_event);
+
+  return StatusCode::SUCCESS;
+}
diff --git a/Generators/GeneratorFilters/src/TauTruthParticleSlimmer.cxx b/Generators/GeneratorFilters/src/xAODTruthParticleSlimmerTau.cxx
similarity index 95%
rename from Generators/GeneratorFilters/src/TauTruthParticleSlimmer.cxx
rename to Generators/GeneratorFilters/src/xAODTruthParticleSlimmerTau.cxx
index ac53e4ed196911c4eee6a2e29f4590f29566f00f..771e26d235ffb985bb1c8aecb2be3d65a433c1b7 100644
--- a/Generators/GeneratorFilters/src/TauTruthParticleSlimmer.cxx
+++ b/Generators/GeneratorFilters/src/xAODTruthParticleSlimmerTau.cxx
@@ -20,11 +20,11 @@
 
 #include "MCTruthClassifier/IMCTruthClassifier.h"
 
-#include "GeneratorFilters/TauTruthParticleSlimmer.h"
+#include "GeneratorFilters/xAODTruthParticleSlimmerTau.h"
 
 using namespace std;
 
-TauTruthParticleSlimmer::TauTruthParticleSlimmer(const string &name, ISvcLocator *svcLoc)
+xAODTruthParticleSlimmerTau::xAODTruthParticleSlimmerTau(const string &name, ISvcLocator *svcLoc)
     : AthAlgorithm(name, svcLoc), m_classifier("MCTruthClassifier/MCTruthClassifier")
 {
   declareProperty("xAODTruthParticleContainerName", m_xaodTruthParticleContainerName = "TruthParticles");
@@ -34,7 +34,7 @@ TauTruthParticleSlimmer::TauTruthParticleSlimmer(const string &name, ISvcLocator
   declareProperty("abseta_selection", m_abseta_selection = 4.5);
 }
 
-StatusCode TauTruthParticleSlimmer::initialize()
+StatusCode xAODTruthParticleSlimmerTau::initialize()
 {
   ATH_CHECK(m_classifier.retrieve());
 
@@ -43,7 +43,7 @@ StatusCode TauTruthParticleSlimmer::initialize()
   return StatusCode::SUCCESS;
 }
 
-CLHEP::HepLorentzVector TauTruthParticleSlimmer::sumDaughterNeutrinos(const xAOD::TruthParticle *part)
+CLHEP::HepLorentzVector xAODTruthParticleSlimmerTau::sumDaughterNeutrinos(const xAOD::TruthParticle *part)
 {
   CLHEP::HepLorentzVector nu(0, 0, 0, 0);
   if (((std::abs(part->pdgId()) == 12) || (std::abs(part->pdgId()) == 14) || (std::abs(part->pdgId()) == 16)) && part->status() != 3)
@@ -62,7 +62,7 @@ CLHEP::HepLorentzVector TauTruthParticleSlimmer::sumDaughterNeutrinos(const xAOD
   return nu;
 }
 
-StatusCode TauTruthParticleSlimmer::execute()
+StatusCode xAODTruthParticleSlimmerTau::execute()
 {
 
   CLHEP::HepLorentzVector nutau;
diff --git a/Generators/MadGraphControl/python/MadGraphParamHelpers.py b/Generators/MadGraphControl/python/MadGraphParamHelpers.py
index 88cad016694534ab907ab833e77230d698a03327..fb2a51526066586b0755d630432277fb0de1f4ce 100644
--- a/Generators/MadGraphControl/python/MadGraphParamHelpers.py
+++ b/Generators/MadGraphControl/python/MadGraphParamHelpers.py
@@ -11,7 +11,6 @@ def set_SM_params(process_dir,FourFS=False):
     https://twiki.cern.ch/twiki/bin/view/AtlasProtected/McProductionCommonParametersMC15
     """
     param_card_settings = {
-    'loop' : { '1':"9.118760e+01" },
     'mass' : {
 '5':  "0.000000",
 '15': "1.777000e+00",
@@ -167,7 +166,7 @@ def get_PMG_updates(process_dir):
                 newparamdict['mass'][pid] = mass
             # Width: Always set it, even if it wasn't in the dictionary
             if pid not in widths or widths[pid]!=width:
-                newparamdict['decay'][pid] = 'decay '+pid+' '+width
+                newparamdict['decay'][pid] = 'DECAY '+pid+' '+width
             # Yukawa: Set it only if it was in the dictionary
             # This is to protect against models that don't use Yukawa blocks as normal
             if pid in yukawas and yukawas[pid]!=mass:
diff --git a/Generators/MadGraphControl/python/MadGraphUtils.py b/Generators/MadGraphControl/python/MadGraphUtils.py
index 0fb6d90e6027d2c8f370ad800c7bd91bd25669ec..3d0da9d4cc642a42f9368efe0ba0c821671ff3e6 100755
--- a/Generators/MadGraphControl/python/MadGraphUtils.py
+++ b/Generators/MadGraphControl/python/MadGraphUtils.py
@@ -5,7 +5,7 @@
 #    updates for aMC@NLO by Josh McFayden <mcfayden@cern.ch>
 #  Attempts to remove path-dependence of MadGraph
 
-import os,time,subprocess,shutil,glob,re,stat
+import os,time,subprocess,shutil,glob,re
 from AthenaCommon import Logging
 mglog = Logging.logging.getLogger('MadGraphUtils')
 
@@ -20,7 +20,7 @@ MADGRAPH_CATCH_ERRORS=True
 # PDF setting (global setting)
 MADGRAPH_PDFSETTING=None
 MADGRAPH_COMMAND_STACK = []
-from MadGraphControl.MadGraphUtilsHelpers import checkSettingExists,checkSetting,checkSettingIsTrue,settingIsTrue,getDictFromCard,get_runArgs_info,get_physics_short,is_version_or_newer
+from MadGraphControl.MadGraphUtilsHelpers import checkSettingExists,checkSetting,checkSettingIsTrue,getDictFromCard,get_runArgs_info,get_physics_short,is_version_or_newer
 from MadGraphControl.MadGraphParamHelpers import do_PMG_updates,check_PMG_updates
 
 
@@ -389,16 +389,13 @@ def generate(process_dir='PROC_mssm_0', grid_pack=False, gridpack_compile=False,
     # Check if process is NLO or LO
     isNLO=is_NLO_run(process_dir=process_dir)
 
-    # use f2py2 if f2py not available
+    # if f2py not available
     if get_reweight_card(process_dir=process_dir) is not None:
         from distutils.spawn import find_executable
-        if find_executable('f2py2') is not None:
-            mglog.info('found f2py2, will update configuration')
-            modify_config_card(process_dir=process_dir,settings={'f2py_compiler':'f2py2','f2py_compiler_py2':'f2py2'})
-        elif find_executable('f2py') is not None:
+        if find_executable('f2py') is not None:
             mglog.info('Found f2py, will use it for reweighting')
         else:
-            raise RuntimeError('Could not find f2py or f2py2, needed for reweighting')
+            raise RuntimeError('Could not find f2py, needed for reweighting')
         check_reweight_card(process_dir)
 
     if grid_pack:
@@ -636,10 +633,6 @@ def generate_from_gridpack(runArgs=None, extlhapath=None, gridpack_compile=None,
     ls_dir(currdir)
     ls_dir(MADGRAPH_GRIDPACK_LOCATION)
 
-    if not isNLO:
-        # hack script to add reweighting and systematics, if required
-        hack_gridpack_script()
-
     # Update the run card according to consistency checks
     run_card_consistency_check(isNLO=isNLO,process_dir=MADGRAPH_GRIDPACK_LOCATION)
 
@@ -660,19 +653,38 @@ def generate_from_gridpack(runArgs=None, extlhapath=None, gridpack_compile=None,
             mglog.info('Turning off systematics for now, running standalone later')
             modify_run_card(process_dir=MADGRAPH_GRIDPACK_LOCATION,settings={'systematics_program':'none'},skipBaseFragment=True)
 
-
+    global MADGRAPH_COMMAND_STACK
     if not isNLO:
         ### LO RUN ###
-        if not os.access(MADGRAPH_GRIDPACK_LOCATION+'/bin/run.sh',os.R_OK):
-            mglog.error('/bin/run.sh not found at '+MADGRAPH_GRIDPACK_LOCATION)
-            raise RuntimeError('Could not find run.sh executable')
+        if not os.access(MADGRAPH_GRIDPACK_LOCATION+'/bin/gridrun',os.R_OK):
+            mglog.error('/bin/gridrun not found at '+MADGRAPH_GRIDPACK_LOCATION)
+            raise RuntimeError('Could not find gridrun executable')
         else:
-            mglog.info('Found '+MADGRAPH_GRIDPACK_LOCATION+'/bin/run.sh, starting generation.')
-
+            mglog.info('Found '+MADGRAPH_GRIDPACK_LOCATION+'/bin/gridrun, starting generation.')
         generate_prep(MADGRAPH_GRIDPACK_LOCATION)
-        generate = stack_subprocess([MADGRAPH_GRIDPACK_LOCATION+'/bin/run.sh',str(int(nevents)),str(int(random_seed))],stdin=subprocess.PIPE,stderr=subprocess.PIPE if MADGRAPH_CATCH_ERRORS else None)
+        granularity=1
+        mglog.info("Now generating {} events with random seed {} and granularity {}".format(int(nevents),int(random_seed),granularity))
+        # not sure whether this is needed but it is done in the old "run.sh" script
+        new_ld_path=":".join([os.environ['LD_LIBRARY_PATH'],os.getcwd()+'/'+MADGRAPH_GRIDPACK_LOCATION+'/madevent/lib',os.getcwd()+'/'+MADGRAPH_GRIDPACK_LOCATION+'/HELAS/lib'])
+        os.environ['LD_LIBRARY_PATH']=new_ld_path
+        MADGRAPH_COMMAND_STACK+=["export LD_LIBRARY_PATH="+":".join(['${LD_LIBRARY_PATH}',new_ld_path])]
+        generate = stack_subprocess([python,MADGRAPH_GRIDPACK_LOCATION+'/bin/gridrun',str(int(nevents)),str(int(random_seed)),str(granularity)],stdin=subprocess.PIPE,stderr=subprocess.PIPE if MADGRAPH_CATCH_ERRORS else None)        
         (out,err) = generate.communicate()
         error_check(err)
+        gp_events=MADGRAPH_GRIDPACK_LOCATION+"/Events/GridRun_{}/unweighted_events.lhe.gz".format(int(random_seed))
+        if not os.path.exists(gp_events):
+            mglog.error('Error in gp generation, did not find events at '+gp_events)
+
+        # add reweighting, which is not run automatically from LO GPs
+        reweight_card=get_reweight_card(MADGRAPH_GRIDPACK_LOCATION)
+        if reweight_card is not None:
+            pythonpath_backup=os.environ['PYTHONPATH']
+            # workaround as madevent crashes when path to mg in PYTHONPATH
+            os.environ['PYTHONPATH']=':'.join([p for p in pythonpath_backup.split(':') if 'madgraph5amc' not in p])
+            add_reweighting('GridRun_{}'.format(int(random_seed)))
+            os.environ['PYTHONPATH']=pythonpath_backup
+
+        shutil.move(gp_events,'events.lhe.gz')
 
     else:
         ### NLO RUN ###
@@ -682,7 +694,6 @@ def generate_from_gridpack(runArgs=None, extlhapath=None, gridpack_compile=None,
             mglog.info('Found '+MADGRAPH_GRIDPACK_LOCATION+'/bin/generate_events, starting generation.')
 
         ls_dir(MADGRAPH_GRIDPACK_LOCATION+'/Events/')
-        global MADGRAPH_COMMAND_STACK
         if os.access(MADGRAPH_GRIDPACK_LOCATION+'/Events/'+gridpack_run_name, os.F_OK):
             mglog.info('Removing '+MADGRAPH_GRIDPACK_LOCATION+'/Events/'+gridpack_run_name+' directory from gridpack generation')
             MADGRAPH_COMMAND_STACK += ['rm -rf '+MADGRAPH_GRIDPACK_LOCATION+'/Events/'+gridpack_run_name]
@@ -975,7 +986,7 @@ def setupLHAPDF(process_dir=None, extlhapath=None, allow_links=True):
     mglog.info('lhapdf-config --datadir:      '+str(subprocess.Popen([lhapdfconfig, '--datadir'],stdout = subprocess.PIPE).stdout.read().strip()))
     mglog.info('lhapdf-config --pdfsets-path: '+str(subprocess.Popen([lhapdfconfig, '--pdfsets-path'],stdout = subprocess.PIPE).stdout.read().strip()))
 
-    modify_config_card(process_dir=process_dir,settings={'lhapdf':lhapdfconfig})
+    modify_config_card(process_dir=process_dir,settings={'lhapdf':lhapdfconfig,'lhapdf_py3':lhapdfconfig})
 
     mglog.info('Creating links for LHAPDF')
     if os.path.islink(process_dir+'/lib/PDFsets'):
@@ -2069,7 +2080,7 @@ def modify_param_card(param_card_input=None,param_card_backup=None,process_dir=M
 
         #do special case of DECAY block
         if blockName=="DECAY":
-           if theParam.splitlines()[0].split()[0]=="DECAY":
+           if theParam.splitlines()[0].split()[0].upper()=="DECAY":
                #specifying the full decay block
                for newline in theParam.splitlines():
                     newcard.write(newline+'\n')
@@ -2429,78 +2440,17 @@ def run_card_consistency_check(isNLO=False,process_dir='.'):
 
     mglog.info('Finished checking run card - All OK!')
 
-
-def hack_gridpack_script():
-    reweight_card = get_reweight_card(process_dir=MADGRAPH_GRIDPACK_LOCATION)
-
-    need_to_add_rwgt=reweight_card is not None
-
-    run_card_dict=getDictFromCard(get_default_runcard(process_dir=MADGRAPH_GRIDPACK_LOCATION),lowercase=True)
-
-    systematics_program=None
-    if settingIsTrue(run_card_dict['use_syst']):
-        systematics_program='systematics'
-        if checkSettingExists('systematics_program',run_card_dict):
-            if checkSetting('systematics_program','systematics',run_card_dict):
-                systematics_program='systematics'
-            if checkSetting('systematics_program','syscalc',run_card_dict):
-                systematics_program='syscalc'
-            if checkSetting('systematics_program','none',run_card_dict):
-                systematics_program=None
-    need_to_add_syst=systematics_program is not None
-
-    systematics_arguments=''
-    if checkSettingExists('systematics_arguments',run_card_dict):
-        sys_dict=MadGraphControl.MadGraphSystematicsUtils.parse_systematics_arguments(run_card_dict['systematics_arguments'])
-        for s in sys_dict:
-            systematics_arguments+=' --'+s+'='+sys_dict[s]
-
-    # add systematics calculation and reweighting to run.sh
-    runscript=MADGRAPH_GRIDPACK_LOCATION+'/bin/run.sh'
-    oldscript = open(runscript,'r')
-    newscript = open(runscript+'.tmp','w')
-    # in older MG versions the gridpack is run with the command below
-    gridrun_line_old='./bin/gridrun $num_events $seed'
-    syst_line_old=''
-    reweight_line_old='./bin/madevent reweight '+MADGRAPH_RUN_NAME+' -f\n'
-    # in new versions it is run like this
-    gridrun_line_new='${DIR}/bin/gridrun $num_events $seed $gran'
-    syst_line_new=''
-    reweight_line_new='${DIR}/bin/madevent reweight '+MADGRAPH_RUN_NAME+' -f\n'
-
-    for line in oldscript:
-        if (need_to_add_rwgt or need_to_add_syst) and gridrun_line_old in line:
-            newscript.write(line)
-            # run systematics
-            if need_to_add_syst:
-                newscript.write(syst_line_old)
-                need_to_add_syst=False
-            # reweight
-            if need_to_add_rwgt:
-                newscript.write(reweight_line_old)
-                need_to_add_rwgt=False
-        elif (need_to_add_rwgt or need_to_add_syst) and gridrun_line_new in line:
-            newscript.write(line)
-            # run systematics
-            if need_to_add_syst:
-                newscript.write(syst_line_new)
-                need_to_add_syst=False
-            # reweight
-            if need_to_add_rwgt:
-                newscript.write(reweight_line_new)
-                need_to_add_rwgt=False
-        else:
-            newscript.write(line)
-    oldscript.close()
-    newscript.close()
-    mglog.info('created '+runscript+'.tmp')
-
-    if reweight_card and need_to_add_rwgt:
-        raise RuntimeError('Could not add reweighting to gridpack script: '+runscript+' maybe line to generate events changed')
-    shutil.move(runscript+'.tmp',runscript)
-    st = os.stat(runscript)
-    os.chmod(runscript, st.st_mode | stat.S_IEXEC)
-
+def add_reweighting(run_name,reweight_card=None,process_dir=MADGRAPH_GRIDPACK_LOCATION):
+    mglog.info('Running reweighting module on existing events')
+    if reweight_card is not None:
+        mglog.info('Copying new reweight card from '+reweight_card)
+        shutil.move(reweight_card,process_dir+'/Cards/reweight_card.dat')
+    reweight_cmd='{}/bin/madevent reweight {} -f'.format(process_dir,run_name)
+    global MADGRAPH_CATCH_ERRORS
+    reweight = stack_subprocess([python]+reweight_cmd.split(),stdin=subprocess.PIPE,stderr=subprocess.PIPE if MADGRAPH_CATCH_ERRORS else None)
+    (out,err) = reweight.communicate()
+    error_check(err)
+    mglog.info('Finished reweighting')
 
 def check_reset_proc_number(opts):
     if 'ATHENA_PROC_NUMBER' in os.environ and int(os.environ['ATHENA_PROC_NUMBER'])>0:
diff --git a/Generators/PowhegControl/share/example/processes/t_sch/mc.PhPy8EG_A14NNPDF23_t_sch_example.py b/Generators/PowhegControl/share/example/processes/t_sch/mc.PhPy8EG_A14NNPDF23_t_sch_example.py
index f3a39709aef4720eac40eb1b72d1bbe4b523550c..93a656f8bfc3b58acacd5eab8854e2b07407ed90 100644
--- a/Generators/PowhegControl/share/example/processes/t_sch/mc.PhPy8EG_A14NNPDF23_t_sch_example.py
+++ b/Generators/PowhegControl/share/example/processes/t_sch/mc.PhPy8EG_A14NNPDF23_t_sch_example.py
@@ -28,3 +28,5 @@ PowhegConfig.generate()
 #--------------------------------------------------------------
 include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
 include("Pythia8_i/Pythia8_Powheg_Main31.py")
+# Setting the appropriate number of final state particles for the main31 routine
+genSeq.Pythia8.Commands += [ 'Powheg:NFinal = 2' ]
diff --git a/Generators/PowhegControl/share/example/processes/t_tch_4FS/mc.PhPy8EG_A14NNPDF23_t_tch_4FS_example.py b/Generators/PowhegControl/share/example/processes/t_tch_4FS/mc.PhPy8EG_A14NNPDF23_t_tch_4FS_example.py
index a466a085df3ab26ce77412ccd52d351dbb395d13..8b33117c23dc5597592de8f0088b55dad821e054 100644
--- a/Generators/PowhegControl/share/example/processes/t_tch_4FS/mc.PhPy8EG_A14NNPDF23_t_tch_4FS_example.py
+++ b/Generators/PowhegControl/share/example/processes/t_tch_4FS/mc.PhPy8EG_A14NNPDF23_t_tch_4FS_example.py
@@ -29,3 +29,5 @@ PowhegConfig.generate()
 #--------------------------------------------------------------
 include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
 include("Pythia8_i/Pythia8_Powheg_Main31.py")
+# Setting the appropriate number of final state particles for the main31 routine
+genSeq.Pythia8.Commands += [ 'Powheg:NFinal = 3' ]
diff --git a/Generators/PowhegControl/share/example/processes/tt/mc.PhPy8EG_A14NNPDF23_tt_example.py b/Generators/PowhegControl/share/example/processes/tt/mc.PhPy8EG_A14NNPDF23_tt_example.py
index ad0abea696c18738c75fc6cf505783e97b016cf2..d10e707c2dda2d5d378127b3d9a505c3d899a86c 100644
--- a/Generators/PowhegControl/share/example/processes/tt/mc.PhPy8EG_A14NNPDF23_tt_example.py
+++ b/Generators/PowhegControl/share/example/processes/tt/mc.PhPy8EG_A14NNPDF23_tt_example.py
@@ -28,3 +28,5 @@ PowhegConfig.generate()
 #--------------------------------------------------------------
 include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
 include("Pythia8_i/Pythia8_Powheg_Main31.py")
+# Setting the appropriate number of final state particles for the main31 routine
+genSeq.Pythia8.Commands += [ 'Powheg:NFinal = 2' ]
diff --git a/Generators/PowhegControl/share/example/processes/ttH/mc.PhPy8EG_A14NNPDF23_ttH_example.py b/Generators/PowhegControl/share/example/processes/ttH/mc.PhPy8EG_A14NNPDF23_ttH_example.py
index 7108ea6eec889e14ec71c97d75df94029a79f0fc..864e0e94c9b35e75d8ed79c8198f532bd8a70d1c 100644
--- a/Generators/PowhegControl/share/example/processes/ttH/mc.PhPy8EG_A14NNPDF23_ttH_example.py
+++ b/Generators/PowhegControl/share/example/processes/ttH/mc.PhPy8EG_A14NNPDF23_ttH_example.py
@@ -28,3 +28,5 @@ PowhegConfig.generate()
 #--------------------------------------------------------------
 include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
 include("Pythia8_i/Pythia8_Powheg_Main31.py")
+# Setting the appropriate number of final state particles for the main31 routine
+genSeq.Pythia8.Commands += [ 'Powheg:NFinal = 3' ]
diff --git a/Generators/PowhegControl/share/example/processes/ttbb/mc.PhPy8EG_A14NNPDF23_ttbb_example.py b/Generators/PowhegControl/share/example/processes/ttbb/mc.PhPy8EG_A14NNPDF23_ttbb_example.py
index 62eeee6be24301236726654bb0bad0b77f49de1d..05b363569b2bc833affa7c00da34e24e1333211b 100644
--- a/Generators/PowhegControl/share/example/processes/ttbb/mc.PhPy8EG_A14NNPDF23_ttbb_example.py
+++ b/Generators/PowhegControl/share/example/processes/ttbb/mc.PhPy8EG_A14NNPDF23_ttbb_example.py
@@ -28,3 +28,5 @@ PowhegConfig.generate()
 #--------------------------------------------------------------
 include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
 include("Pythia8_i/Pythia8_Powheg_Main31.py")
+# Setting the appropriate number of final state particles for the main31 routine
+genSeq.Pythia8.Commands += [ 'Powheg:NFinal = 4' ]
diff --git a/Generators/PowhegControl/share/example/processes/ttj/mc.PhPy8EG_A14NNPDF23_ttj_example.py b/Generators/PowhegControl/share/example/processes/ttj/mc.PhPy8EG_A14NNPDF23_ttj_example.py
index 75013d9b0e2ef178709e6f09e20cf364080ab4c0..fe2b6e9625ccc293dd09e4993261a9d4a1c801bf 100644
--- a/Generators/PowhegControl/share/example/processes/ttj/mc.PhPy8EG_A14NNPDF23_ttj_example.py
+++ b/Generators/PowhegControl/share/example/processes/ttj/mc.PhPy8EG_A14NNPDF23_ttj_example.py
@@ -28,3 +28,5 @@ PowhegConfig.generate()
 #--------------------------------------------------------------
 include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
 include("Pythia8_i/Pythia8_Powheg_Main31.py")
+# Setting the appropriate number of final state particles for the main31 routine
+genSeq.Pythia8.Commands += [ 'Powheg:NFinal = 3' ]
diff --git a/Generators/PowhegControl/share/example/processes/ttj_MiNNLO/mc.PhPy8EG_A14NNPDF23_ttj_MiNNLO_example.py b/Generators/PowhegControl/share/example/processes/ttj_MiNNLO/mc.PhPy8EG_A14NNPDF23_ttj_MiNNLO_example.py
index 813e8a918137ea1c59523ff2b8a5b24365029a6f..f107ad4f349e138085d00b0a0eae83f3fa763fd8 100644
--- a/Generators/PowhegControl/share/example/processes/ttj_MiNNLO/mc.PhPy8EG_A14NNPDF23_ttj_MiNNLO_example.py
+++ b/Generators/PowhegControl/share/example/processes/ttj_MiNNLO/mc.PhPy8EG_A14NNPDF23_ttj_MiNNLO_example.py
@@ -43,3 +43,5 @@ PowhegConfig.generate()
 #--------------------------------------------------------------
 include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
 include("Pythia8_i/Pythia8_Powheg_Main31.py")
+# Setting the appropriate number of final state particles for the main31 routine
+genSeq.Pythia8.Commands += [ 'Powheg:NFinal = 3' ]
diff --git a/Generators/PowhegControl/share/example/ttWm_EW/mc.PhPy8EG_A14NNPDF23_ttWm_EW_example.py b/Generators/PowhegControl/share/example/ttWm_EW/mc.PhPy8EG_A14NNPDF23_ttWm_EW_example.py
deleted file mode 100644
index ed80b961591b5e65288a3dbef5e168c8abcd30a4..0000000000000000000000000000000000000000
--- a/Generators/PowhegControl/share/example/ttWm_EW/mc.PhPy8EG_A14NNPDF23_ttWm_EW_example.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-#--------------------------------------------------------------
-# EVGEN configuration
-#--------------------------------------------------------------
-evgenConfig.description = "POWHEG+Pythia8 top pair plus W boson production with A14 NNPDF2.3 tune."
-evgenConfig.keywords = ["SM", "top"]
-evgenConfig.contact = ["stefan.richter@cern.ch"]
-
-# --------------------------------------------------------------
-# Load ATLAS defaults for the Powheg ttbb process
-# --------------------------------------------------------------
-include("PowhegControl/PowhegControl_ttWm_EW_Common.py")
-
-# --------------------------------------------------------------
-# Generate events
-# --------------------------------------------------------------
-PowhegConfig.generate()
-
-#--------------------------------------------------------------
-# Pythia8 showering with the A14 NNPDF2.3 tune
-#--------------------------------------------------------------
-include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
-include("Pythia8_i/Pythia8_Powheg.py")
diff --git a/Generators/PowhegControl/share/example/ttWm_QCD/mc.PhPy8EG_A14NNPDF23_ttWm_QCD_example.py b/Generators/PowhegControl/share/example/ttWm_QCD/mc.PhPy8EG_A14NNPDF23_ttWm_QCD_example.py
deleted file mode 100644
index 2c0a0296897de7d70b387acce30933ad17cce6d6..0000000000000000000000000000000000000000
--- a/Generators/PowhegControl/share/example/ttWm_QCD/mc.PhPy8EG_A14NNPDF23_ttWm_QCD_example.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-#--------------------------------------------------------------
-# EVGEN configuration
-#--------------------------------------------------------------
-evgenConfig.description = "POWHEG+Pythia8 top pair plus W boson production with A14 NNPDF2.3 tune."
-evgenConfig.keywords = ["SM", "top"]
-evgenConfig.contact = ["stefan.richter@cern.ch"]
-
-# --------------------------------------------------------------
-# Load ATLAS defaults for the Powheg ttbb process
-# --------------------------------------------------------------
-include("PowhegControl/PowhegControl_ttWm_QCD_Common.py")
-
-# --------------------------------------------------------------
-# Generate events
-# --------------------------------------------------------------
-PowhegConfig.generate()
-
-#--------------------------------------------------------------
-# Pythia8 showering with the A14 NNPDF2.3 tune
-#--------------------------------------------------------------
-include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
-include("Pythia8_i/Pythia8_Powheg.py")
diff --git a/Generators/PowhegControl/share/example/ttWp_EW/mc.PhPy8EG_A14NNPDF23_ttWp_EW_example.py b/Generators/PowhegControl/share/example/ttWp_EW/mc.PhPy8EG_A14NNPDF23_ttWp_EW_example.py
deleted file mode 100644
index 8d63aef436479eee70caa67b6428398005ee2e91..0000000000000000000000000000000000000000
--- a/Generators/PowhegControl/share/example/ttWp_EW/mc.PhPy8EG_A14NNPDF23_ttWp_EW_example.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-#--------------------------------------------------------------
-# EVGEN configuration
-#--------------------------------------------------------------
-evgenConfig.description = "POWHEG+Pythia8 top pair plus W boson production with A14 NNPDF2.3 tune."
-evgenConfig.keywords = ["SM", "top"]
-evgenConfig.contact = ["stefan.richter@cern.ch"]
-
-# --------------------------------------------------------------
-# Load ATLAS defaults for the Powheg ttbb process
-# --------------------------------------------------------------
-include("PowhegControl/PowhegControl_ttWp_EW_Common.py")
-
-# --------------------------------------------------------------
-# Generate events
-# --------------------------------------------------------------
-PowhegConfig.generate()
-
-#--------------------------------------------------------------
-# Pythia8 showering with the A14 NNPDF2.3 tune
-#--------------------------------------------------------------
-include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
-include("Pythia8_i/Pythia8_Powheg.py")
diff --git a/Generators/PowhegControl/share/example/ttWp_QCD/mc.PhPy8EG_A14NNPDF23_ttWp_QCD_example.py b/Generators/PowhegControl/share/example/ttWp_QCD/mc.PhPy8EG_A14NNPDF23_ttWp_QCD_example.py
deleted file mode 100644
index c5f0238a0e3acf8cce28c702e177085a5d183832..0000000000000000000000000000000000000000
--- a/Generators/PowhegControl/share/example/ttWp_QCD/mc.PhPy8EG_A14NNPDF23_ttWp_QCD_example.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-#--------------------------------------------------------------
-# EVGEN configuration
-#--------------------------------------------------------------
-evgenConfig.description = "POWHEG+Pythia8 top pair plus W boson production with A14 NNPDF2.3 tune."
-evgenConfig.keywords = ["SM", "top"]
-evgenConfig.contact = ["stefan.richter@cern.ch"]
-
-# --------------------------------------------------------------
-# Load ATLAS defaults for the Powheg ttbb process
-# --------------------------------------------------------------
-include("PowhegControl/PowhegControl_ttWp_QCD_Common.py")
-
-# --------------------------------------------------------------
-# Generate events
-# --------------------------------------------------------------
-PowhegConfig.generate()
-
-#--------------------------------------------------------------
-# Pythia8 showering with the A14 NNPDF2.3 tune
-#--------------------------------------------------------------
-include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py")
-include("Pythia8_i/Pythia8_Powheg.py")
diff --git a/Generators/QGSJet_i/CMakeLists.txt b/Generators/QGSJet_i/CMakeLists.txt
index d1b4ee4de42f98d6dde5f28ab64625820533ec34..abddcc331fce6f97c74a2d6b1c8e69ccd2acfb60 100644
--- a/Generators/QGSJet_i/CMakeLists.txt
+++ b/Generators/QGSJet_i/CMakeLists.txt
@@ -1,5 +1,8 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
+# Minimum CMake requirement for the package.
+cmake_minimum_required( VERSION 3.21 )
+
 # Declare the package name:
 atlas_subdir( QGSJet_i )
 
diff --git a/Generators/Sherpa_i/SherpaEnvironmentConfig.cmake b/Generators/Sherpa_i/SherpaEnvironmentConfig.cmake
index 551dbb0b412f79a0160b7db6729a953cb308bd71..67ea7c3edaf99e2c5344d1e612a4451189723574 100644
--- a/Generators/Sherpa_i/SherpaEnvironmentConfig.cmake
+++ b/Generators/Sherpa_i/SherpaEnvironmentConfig.cmake
@@ -9,7 +9,8 @@ find_package( Sherpa )
 
 if( SHERPA_FOUND )
   set( SHERPAENVIRONMENT_ENVIRONMENT 
-        FORCESET SHERPAVER ${SHERPA_LCGVERSION} )
+        FORCESET SHERPAVER ${SHERPA_LCGVERSION} 
+        FORCESET SHERPA_SHARE_PATH ${SHERPA_LCGROOT}/share/SHERPA-MC )
 endif()
 
 # Silently declare the module found:
diff --git a/Generators/Sherpa_i/src/Sherpa_i.cxx b/Generators/Sherpa_i/src/Sherpa_i.cxx
index 33dc2d47c02f9979fb06c9a6cfc97577d708f2be..6af340906e9864d12d449d690916804e90af8cd4 100644
--- a/Generators/Sherpa_i/src/Sherpa_i.cxx
+++ b/Generators/Sherpa_i/src/Sherpa_i.cxx
@@ -237,7 +237,8 @@ StatusCode Sherpa_i::fillEvt(HepMC::GenEvent* event) {
 
 #ifdef HEPMC3
 // units correction
-      event->set_units(HepMC3::Units::MEV, HepMC3::Units::MM);
+      event->set_units(HepMC3::Units::GEV, HepMC3::Units::MM);
+  GeVToMeV(event);
 //uncomment to list HepMC3 events
 //    std::cout << " print::listing Sherpa " << std::endl;
 //    HepMC3::Print::listing(std::cout, *event);
diff --git a/HLT/Event/ByteStreamEmonSvc/CMakeLists.txt b/HLT/Event/ByteStreamEmonSvc/CMakeLists.txt
index 635714d00484d43be0b6b2ff38209178310094f9..e72b388a2348b2fb143e7e18a060b81a6e4e3d7a 100644
--- a/HLT/Event/ByteStreamEmonSvc/CMakeLists.txt
+++ b/HLT/Event/ByteStreamEmonSvc/CMakeLists.txt
@@ -6,7 +6,7 @@
 atlas_subdir( ByteStreamEmonSvc )
 
 # External dependencies:
-find_package( Boost COMPONENTS filesystem thread system )
+find_package( Boost COMPONENTS filesystem thread system unit_test_framework )
 find_package( tdaq COMPONENTS emon ohroot owl is omniORB4 omnithread oh )
 
 # Component(s) in the package:
@@ -18,3 +18,11 @@ atlas_add_component( ByteStreamEmonSvc
 # Install files from the package:
 atlas_install_joboptions( share/*.py )
 atlas_install_python_modules( python/*.py )
+
+atlas_add_test(
+    test_extract_histogram_tag
+    SOURCES test/test_extract_histogram_tag.cxx src/extract_histogram_tag.cxx
+    POST_EXEC_SCRIPT nopost.sh
+    INCLUDE_DIRS ${Boost_INCLUDE_DIRS}
+    LINK_LIBRARIES Boost::unit_test_framework
+)
diff --git a/HLT/Event/ByteStreamEmonSvc/src/ByteStreamEmonInputSvc.cxx b/HLT/Event/ByteStreamEmonSvc/src/ByteStreamEmonInputSvc.cxx
index 742bf7bd13b812f172e361fd27a542b4427d5213..a26b728476a7ed93e81165f4e1cd171b852acad5 100644
--- a/HLT/Event/ByteStreamEmonSvc/src/ByteStreamEmonInputSvc.cxx
+++ b/HLT/Event/ByteStreamEmonSvc/src/ByteStreamEmonInputSvc.cxx
@@ -28,6 +28,7 @@
 #include "ByteStreamCnvSvcBase/ByteStreamAddress.h"
 #include "CxxUtils/checker_macros.h"
 #include "PersistentDataModel/DataHeader.h"
+#include "./extract_histogram_tag.h"
 
 #include <cstdlib>
 #include <csignal>
@@ -536,7 +537,8 @@ void ByteStreamEmonInputSvc::check_publish()
             TH1 *h = nullptr;
             if(m_histSvc->getHist(name, h)) {
                 // might throw...
-                m_provider->publish(*h, name);
+                auto name_tag = detail::extract_histogram_tag(name);
+                m_provider->publish(*h, name_tag.first, name_tag.second);
             };
         }
         for(const std::string& name : m_histSvc->getEfficiencies()) {
@@ -559,8 +561,9 @@ void ByteStreamEmonInputSvc::check_publish()
                         p = create2DProfile(h);
                     }
                     // might throw...
-                    m_provider->publish(*p, name);
-                    //m_provider->publish(*h, name);
+                    auto name_tag = detail::extract_histogram_tag(name);
+                    m_provider->publish(*p, name_tag.first, name_tag.second);
+                    //m_provider->publish(*h, name_tag.first, name_tag.second);
                 } // tdaq doesn't currently support publishing efficiencies, will change in the future
             };
         }
diff --git a/HLT/Event/ByteStreamEmonSvc/src/extract_histogram_tag.cxx b/HLT/Event/ByteStreamEmonSvc/src/extract_histogram_tag.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..2eda057efbdf9a93d00fa8bfe36e6154669f409e
--- /dev/null
+++ b/HLT/Event/ByteStreamEmonSvc/src/extract_histogram_tag.cxx
@@ -0,0 +1,39 @@
+
+#include "./extract_histogram_tag.h"
+
+#include <regex>
+
+namespace {
+
+// Regular expressions for per-LBN histogram names used over time
+std::regex const lbRegex_run2("^/?run_\\d+/lb_(\\d+)(/.+)$");
+std::regex const lbRegex_run3("^(.+)_LB((\\d+)|\\d+_(\\d+))$");
+
+}
+
+namespace detail {
+
+std::pair<std::string, int> extract_histogram_tag(const std::string& histo_name)
+{
+    std::smatch what;
+    if (std::regex_match(histo_name, what, ::lbRegex_run2)) {
+        try {
+            int tag = std::stoi(what.str(1));
+            return std::make_pair(what[2], tag);
+        } catch(std::exception &ex) {
+            // should not happen but be defensive and just ignore it
+        }
+    }
+    if (std::regex_match(histo_name, what, ::lbRegex_run3)) {
+        std::string const tagStr = what[3].length() > 0 ? what.str(3) : what.str(4);
+        try {
+            int tag = std::stoi(tagStr);
+            return std::make_pair(what[1], tag);
+        } catch(std::exception &ex) {
+            // should not happen but be defensive and just ignore it
+        }
+    }
+    return std::make_pair(histo_name, -1);
+}
+
+} // namespace detail
diff --git a/HLT/Event/ByteStreamEmonSvc/src/extract_histogram_tag.h b/HLT/Event/ByteStreamEmonSvc/src/extract_histogram_tag.h
new file mode 100644
index 0000000000000000000000000000000000000000..05038b200314e5d1e1d9d3c1451c683703bba8a8
--- /dev/null
+++ b/HLT/Event/ByteStreamEmonSvc/src/extract_histogram_tag.h
@@ -0,0 +1,21 @@
+/*
+  Copyright (C) 2021 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include <string>
+#include <utility>
+
+namespace detail {
+
+/**
+ * Extract tag/LB number from per-LBN histogram name.
+ *
+ * This method supports naming conventions used in run2 and run3. It returns a
+ * histogram hame without LB number in it and a tag (LBN) extracted from the
+ * name. If histogram name does not have LBN in it then the name is returned
+ * without any change, and tag is set to -1.
+ */
+std::pair<std::string, int> extract_histogram_tag(const std::string& histo_name);
+
+
+} // namespace detail
diff --git a/HLT/Event/ByteStreamEmonSvc/test/test_extract_histogram_tag.cxx b/HLT/Event/ByteStreamEmonSvc/test/test_extract_histogram_tag.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..6a1f9edeefc7eff339592750583f2300ac5d0beb
--- /dev/null
+++ b/HLT/Event/ByteStreamEmonSvc/test/test_extract_histogram_tag.cxx
@@ -0,0 +1,98 @@
+
+#define BOOST_TEST_MODULE test_extract_histogram_tag
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
+
+#include "../src/extract_histogram_tag.h"
+
+
+using detail::extract_histogram_tag;
+
+
+BOOST_AUTO_TEST_CASE(test_stripTag_nolbn)
+{
+    // test case for when histo name does not have LBN in it
+
+    std::pair<std::string, int> result;
+
+    // path and tag are not set is stripTag() returns false
+    result = extract_histogram_tag("name");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/EXPERT/name");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/LB/EXPERT/name");
+    BOOST_TEST(result.second == -1);
+}
+
+BOOST_AUTO_TEST_CASE(test_stripTag_lbn_run2)
+{
+    // test case for run2 LBN convention
+
+    std::pair<std::string, int> result;
+
+    result = extract_histogram_tag("/run_0/lb_1/name");
+    BOOST_TEST(result.first == "/name");
+    BOOST_TEST(result.second == 1);
+
+    result = extract_histogram_tag("/run_100/lb_999/EXPERT/name");
+    BOOST_TEST(result.first == "/EXPERT/name");
+    BOOST_TEST(result.second == 999);
+
+    result = extract_histogram_tag("/run_999/lb_123456789/LB/EXPERT/name");
+    BOOST_TEST(result.first == "/LB/EXPERT/name");
+    BOOST_TEST(result.second == 123456789);
+
+    // some non-matching cases
+    result = extract_histogram_tag("/run_X/lb_1/LB/EXPERT/name");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/run_1/lb_Y/LB/EXPERT/name");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/run_X/lb_Y/LB/EXPERT/name");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/run_1/lb_-1/LB/EXPERT/name");
+    BOOST_TEST(result.second == -1);
+}
+
+BOOST_AUTO_TEST_CASE(test_stripTag_lbn_run3)
+{
+    // test case for run3 LBN convention
+
+    std::pair<std::string, int> result;
+
+    result = extract_histogram_tag("name_LB1");
+    BOOST_TEST(result.first == "name");
+    BOOST_TEST(result.second == 1);
+
+    result = extract_histogram_tag("name_LB1_10");
+    BOOST_TEST(result.first == "name");
+    BOOST_TEST(result.second == 10);
+
+    result = extract_histogram_tag("/EXPERT/name_LB999");
+    BOOST_TEST(result.first == "/EXPERT/name");
+    BOOST_TEST(result.second == 999);
+
+    result = extract_histogram_tag("/LB/EXPERT/name_LB999_1001");
+    BOOST_TEST(result.first == "/LB/EXPERT/name");
+    BOOST_TEST(result.second == 1001);
+
+    // some non-matching cases
+    result = extract_histogram_tag("/LB/EXPERT/name_LBN");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/LB/EXPERT/name_LBN_100");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/LB/EXPERT/name_LB1_N");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/LB/EXPERT/name_LB-1");
+    BOOST_TEST(result.second == -1);
+
+    result = extract_histogram_tag("/LB/EXPERT/nameLB1");
+    BOOST_TEST(result.second == -1);
+}
diff --git a/HLT/Trigger/TrigTransforms/TrigTransform/python/trigTranslate.py b/HLT/Trigger/TrigTransforms/TrigTransform/python/trigTranslate.py
index 6ad09bf8637db31f23e3d7d87644b11b1a5a499f..277322898f2234d99c311bf5ec916154e216d076 100644
--- a/HLT/Trigger/TrigTransforms/TrigTransform/python/trigTranslate.py
+++ b/HLT/Trigger/TrigTransforms/TrigTransform/python/trigTranslate.py
@@ -26,7 +26,6 @@ def getOption(runArgs, name, substep, first, output):
     tfToAthenaHLT['inputBS_RDOFile'] = 'file'
     tfToAthenaHLT['maxEvents'] = 'number-of-events'
     tfToAthenaHLT['skipEvents'] = 'skip-events'
-    tfToAthenaHLT['runNumber'] = 'run-number'
     tfToAthenaHLT['precommand'] = 'precommand'
     tfToAthenaHLT['postcommand'] = 'postcommand'
     tfToAthenaHLT['useDB'] = 'use-database'
diff --git a/HighGranularityTimingDetector/HGTD_Reconstruction/HGTD_TrackingGeometry/HGTD_TrackingGeometry/HGTD_LayerBuilderCond.h b/HighGranularityTimingDetector/HGTD_Reconstruction/HGTD_TrackingGeometry/HGTD_TrackingGeometry/HGTD_LayerBuilderCond.h
index 251b0d2a048ee7a8f6d6885854905e875de6c57b..708f2def112165a885f04116fa79bec02e5eefd9 100644
--- a/HighGranularityTimingDetector/HGTD_Reconstruction/HGTD_TrackingGeometry/HGTD_TrackingGeometry/HGTD_LayerBuilderCond.h
+++ b/HighGranularityTimingDetector/HGTD_Reconstruction/HGTD_TrackingGeometry/HGTD_TrackingGeometry/HGTD_LayerBuilderCond.h
@@ -26,13 +26,6 @@
 class HGTD_ID;
 class HGTD_DetectorManager;
 
-#ifndef TRKDETDESCR_TAKESMALLERBIGGER
-#define TRKDETDESCR_TAKESMALLERBIGGER
-#define takeSmaller(current,test) current = current < test ? current : test
-#define takeBigger(current,test)  current = current > test ? current : test
-#define takeSmallerBigger(cSmallest, cBiggest, test) takeSmaller(cSmallest, test); takeBigger(cBiggest, test)
-#endif
-
 namespace Trk {
   class Surface;
   class CylinderLayer;
diff --git a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/scripts/sct_calib_tf.py b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/scripts/sct_calib_tf.py
index 7ebfdb34f5b56fcdace88fc762428aa5016c4fce..c62475c9a8871ced16addf2b17d408f526af1a35 100755
--- a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/scripts/sct_calib_tf.py
+++ b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/scripts/sct_calib_tf.py
@@ -221,16 +221,16 @@ def addOutputArgs(parser,dict):
     if 'doDeadChip' in checkPart and checkSplit == 1:
         parser.add_argument('--outputHITMapFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'HitMap output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTHitMaps.root'],runarg=True))
-        parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
-                            help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
+        #parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
+        #                    help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
         parser.add_argument('--outputBSErrorsFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'BS Errors file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTBSErrors.root'],runarg=True))
 
     if 'doDeadChip' in checkPart and checkSplit != 1:
         parser.add_argument('--outputHITMapFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'HitMap output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTHitMaps.root'],runarg=True))
-        parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
-                            help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
+        #parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
+        #                    help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
         parser.add_argument('--outputBSErrorsFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'BS Errors file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTBSErrors.root'],runarg=True))
         parser.add_argument('--outputDeadChipFile', type=trfArgClasses.argFactory(trfArgClasses.argFile, runarg=True,io='output'),
@@ -242,16 +242,16 @@ def addOutputArgs(parser,dict):
     if 'doDeadStrip' in checkPart and checkSplit == 1:
         parser.add_argument('--outputHITMapFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'HitMap output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTHitMaps.root'],runarg=True))
-        parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
-                            help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
+        #parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
+        #                    help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
         parser.add_argument('--outputBSErrorsFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'BS Errors file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTBSErrors.root'],runarg=True))
 
     if 'doDeadStrip' in checkPart and checkSplit != 1:
         parser.add_argument('--outputHITMapFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'HitMap output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTHitMaps.root'],runarg=True))
-        parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
-                            help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
+        #parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
+        #                    help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
         parser.add_argument('--outputBSErrorsFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'BS Errors file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTBSErrors.root'],runarg=True))
         parser.add_argument('--outputDeadStripFile', type=trfArgClasses.argFactory(trfArgClasses.argFile, runarg=True,io='output'),
@@ -263,16 +263,16 @@ def addOutputArgs(parser,dict):
     if 'doQuietChip' in checkPart and checkSplit == 1:
         parser.add_argument('--outputHITMapFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'HitMap output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTHitMaps.root'],runarg=True))
-        parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
-                            help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
+        #parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
+        #                    help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
         parser.add_argument('--outputBSErrorsFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'BS Errors file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTBSErrors.root'],runarg=True))
 
     if 'doQuietChip' in checkPart and checkSplit != 1:
         parser.add_argument('--outputHITMapFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'HitMap output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTHitMaps.root'],runarg=True))
-        parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
-                            help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
+        #parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
+        #                    help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
         parser.add_argument('--outputBSErrorsFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'BS Errors file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTBSErrors.root'],runarg=True))
         parser.add_argument('--outputDeadChipFile', type=trfArgClasses.argFactory(trfArgClasses.argFile, runarg=True,io='output'),
@@ -284,16 +284,16 @@ def addOutputArgs(parser,dict):
     if 'doQuietStrip' in checkPart and checkSplit == 1:
         parser.add_argument('--outputHITMapFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'HitMap output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTHitMaps.root'],runarg=True))
-        parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
-                            help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
+        #parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
+        #                    help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
         parser.add_argument('--outputBSErrorsFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'BS Errors file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTBSErrors.root'],runarg=True))
 
     if 'doQuietStrip' in checkPart and checkSplit != 1:
         parser.add_argument('--outputHITMapFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'HitMap output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTHitMaps.root'],runarg=True))
-        parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
-                            help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
+        #parser.add_argument('--outputLBFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
+        #                    help = 'LB output file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTLB.root'],runarg=True))
         parser.add_argument('--outputBSErrorsFile', type=trfArgClasses.argFactory(trfArgClasses.argNTUPFile, runarg=True,io='output'),
                             help = 'BS Errors file',group='Calibration',default=trfArgClasses.argNTUPFile([checkPrefix+'SCTBSErrors.root'],runarg=True))
         parser.add_argument('--outputDeadStripFile', type=trfArgClasses.argFactory(trfArgClasses.argFile, runarg=True,io='output'),
@@ -618,11 +618,11 @@ class SCTCalibExecutor( athenaExecutor ):
             outNentries1 = int(outTFile1.Get('GENERAL/events').GetEntries())
             outInstance1._setMetadata(outInstance1._value,{'nentries': outNentries1})
 
-            outInstance2 = self.conf.dataDictionary[list(self._output)[2]]
-            outTFile2 = TFile(outInstance2._value[0])
-            print (outTFile2.GetName())
-            outNentries2 = int(outTFile2.Get('GENERAL/events').GetEntries())
-            outInstance2._setMetadata(outInstance2._value,{'nentries': outNentries2})
+            #outInstance2 = self.conf.dataDictionary[list(self._output)[2]]
+            #outTFile2 = TFile(outInstance2._value[0])
+            #print (outTFile2.GetName())
+            #outNentries2 = int(outTFile2.Get('GENERAL/events').GetEntries())
+            #outInstance2._setMetadata(outInstance2._value,{'nentries': outNentries2})
 
         if 'doDeadStrip' in runArgs['part']._value and runArgs['splitHitMap']._value != 1:
             pwd=os.getcwd()
@@ -736,7 +736,7 @@ class SCTCalibExecutor( athenaExecutor ):
 
         if prefix != '':
             try:
-                if runArgs['splitHitMap']._value !=1:
+                if runArgs['splitHitMap']._value !=1 and 'COOL' in listOfKeys:
                     os.rename('mycool.db',prefix+'.mycool.db')                
                 if jobnb != '':
                     prefixTmp = prefix + "."+ jobnb
@@ -745,7 +745,7 @@ class SCTCalibExecutor( athenaExecutor ):
                 if runArgs['splitHitMap']._value == 2:
                     os.rename('SCTHitMaps.root',prefix+'.SCTHitMaps.root')
                     if 'doNoisyStrip' in runArgs['part']._value:
-                    	os.rename('SCTLB.root',prefix+'.SCTLB.root')
+                        os.rename('SCTLB.root',prefix+'.SCTLB.root')
                     if ('doDeadStrip' in runArgs['part']._value or 'doDeadChip' in runArgs['part']._value or 'doQuietStrip' in runArgs['part']._value or 'doQuietChip' in runArgs['part']._value ):
                         os.rename('SCTBSErrors.root',prefix+'.SCTBSErrors.root')
             except:
diff --git a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/share/ReadCoolUPD4.py b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/share/ReadCoolUPD4.py
index 1885baca87feefb53fe66454ed11e55da12ced31..b31459ffa919c0960a258fe11713cf57599bfae5 100755
--- a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/share/ReadCoolUPD4.py
+++ b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/share/ReadCoolUPD4.py
@@ -40,7 +40,7 @@ def formIovFromTo(runNumberStart, runNumber):
   
 #CS this modification checks which was the k-last run before the processed one
 def getRunNumberStart(runNumber, k):
-    runlistfile = open("/afs/cern.ch/user/s/sctcalib/public/runlist.txt", "r")
+    runlistfile = open("/afs/cern.ch/user/s/sctcalib/scratch0/lastRuns.txt", "r")
     content = runlistfile.read()
     runlistfile.close()
     content_list = content.split("\n")
diff --git a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCTCalib.cxx b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCTCalib.cxx
index c0c7b160b82c5944f11fa15c4590dff9be713573..af4827cbe59fb227e479e8adf8a33752be82d779 100644
--- a/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCTCalib.cxx
+++ b/InnerDetector/InDetCalibAlgs/SCT_CalibAlgs/src/SCTCalib.cxx
@@ -263,7 +263,9 @@ StatusCode SCTCalib::initialize() {
       m_calibEvtInfoTool->setTimeStamp(m_runStartTime, m_runEndTime);
       m_calibEvtInfoTool->setRunNumber(m_runNumber);
       m_calibEvtInfoTool->setEventNumber(m_eventNumber);
-      m_calibLbTool->read("./SCTLB.root");
+      if (m_doNoisyStrip) {
+         m_calibLbTool->read("./SCTLB.root");
+      }
       if (m_doBSErrors) {
          m_calibBsErrTool->read("./SCTBSErrors.root");
       }
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py
index 5bd5af0492dd17d1a315afb078e9d3317295b713..e5bc740e4bf4134dc74a8268329ba68ad4405ac8 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/python/PixelConditionsConfig.py
@@ -378,6 +378,8 @@ def PixelChargeCalibCondAlgCfg(flags, name="PixelChargeCalibCondAlg", **kwargs):
     acc = ComponentAccumulator()
     acc.merge(PixelConfigCondAlgCfg(flags))
     acc.merge(addFoldersSplitOnline(flags, "PIXEL", "/PIXEL/Onl/PixCalib", "/PIXEL/PixCalib", className="CondAttrListCollection"))
+    from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
+    acc.merge(PixelReadoutGeometryCfg(flags))
     kwargs.setdefault("PixelDetEleCollKey", "PixelDetectorElementCollection")
     kwargs.setdefault("PixelModuleData", "PixelModuleData")
     kwargs.setdefault("ReadKey", "/PIXEL/PixCalib")
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleTool/python/ITkStripLorentzAngleConfig.py b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/ITkStripLorentzAngleConfig.py
index 6c2bba6d0825d6c5b48143eaa6bf587161440262..612969d39e2729b1f68ccfc2cfde7f388d5c0727 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleTool/python/ITkStripLorentzAngleConfig.py
+++ b/InnerDetector/InDetConditions/SiLorentzAngleTool/python/ITkStripLorentzAngleConfig.py
@@ -4,7 +4,7 @@ Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 """
 from AthenaConfiguration.ComponentFactory import CompFactory
 from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
-from SCT_ConditionsTools.SCT_ConditionsToolsConfig import SCT_SiliconConditionsCfg
+from SCT_ConditionsTools.ITkStripConditionsToolsConfig import ITkStripSiliconConditionsCfg
 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
 
 
@@ -34,7 +34,7 @@ def ITkStripLorentzAngleCfg(flags, name="ITkStripSiLorentzAngleCondAlg",
             if kwargs.get("DCSConditionsTool"):
                 sikwargs["DCSConditionsTool"] = kwargs.get("DCSConditionsTool")
             sikwargs["ForceUseGeoModel"] = forceUseGeoModel
-            algkwargs["SiConditionsTool"] = acc.popToolsAndMerge(SCT_SiliconConditionsCfg(flags, **sikwargs))
+            algkwargs["SiConditionsTool"] = acc.popToolsAndMerge(ITkStripSiliconConditionsCfg(flags, **sikwargs))
     #Specify correct DetElCollection for ITkStrip
     algkwargs["SCTDetEleCollKey"] = "ITkStripDetectorElementCollection"
     acc.addCondAlgo(CompFactory.SCTSiLorentzAngleCondAlg(name, **algkwargs))
diff --git a/InnerDetector/InDetConditions/SiPropertiesTool/python/ITkStripSiPropertiesConfig.py b/InnerDetector/InDetConditions/SiPropertiesTool/python/ITkStripSiPropertiesConfig.py
index 60490bf90b2e81d210453330d1f28b631211fc26..31b1b43814cf23762fd61a21d84d0b3ebf473e3a 100644
--- a/InnerDetector/InDetConditions/SiPropertiesTool/python/ITkStripSiPropertiesConfig.py
+++ b/InnerDetector/InDetConditions/SiPropertiesTool/python/ITkStripSiPropertiesConfig.py
@@ -4,7 +4,7 @@ Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 """
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
-from SCT_ConditionsTools.SCT_ConditionsToolsConfig import SCT_SiliconConditionsCfg
+from SCT_ConditionsTools.ITkStripConditionsToolsConfig import ITkStripSiliconConditionsCfg
 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
 
 
@@ -22,7 +22,7 @@ def ITkStripSiPropertiesCfg(flags, name="ITkStripSiPropertiesCondAlg", **kwargs)
     if SiConditionsTool:
         algkwargs["SiConditionsTool"] = SiConditionsTool
     else:
-        algkwargs["SiConditionsTool"] = acc.popToolsAndMerge(SCT_SiliconConditionsCfg(flags, **kwargs))
+        algkwargs["SiConditionsTool"] = acc.popToolsAndMerge(ITkStripSiliconConditionsCfg(flags, **kwargs))
     # For SCT_ID and SCT_DetectorElementCollection
     # used in SCTSiPropertiesCondAlg and SiPropertiesTool
     #Specify correct DetElCollection for ITkStrip
diff --git a/InnerDetector/InDetConfig/python/BackTrackingConfig.py b/InnerDetector/InDetConfig/python/BackTrackingConfig.py
index da02f0a0e613993604f52c2b6b0d84af698bbb3d..b08814dff64feffa684d9eb3873a11203ff4aebd 100644
--- a/InnerDetector/InDetConfig/python/BackTrackingConfig.py
+++ b/InnerDetector/InDetConfig/python/BackTrackingConfig.py
@@ -152,8 +152,7 @@ def TRT_SeededTrackFinderCfg(flags, name='InDetTRT_SeededTrackFinder', InputColl
     InDetTrackFitterBT = acc.popToolsAndMerge(TC.InDetTrackFitterBTCfg(flags))
     acc.addPublicTool(InDetTrackFitterBT)
 
-    InDetTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryToolNoHoleSearch)
+    InDetTrackSummaryToolNoHoleSearch = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
 
     InDetTRTExtensionTool = acc.popToolsAndMerge(TC.InDetTRT_ExtensionToolCfg(flags))
     acc.addPublicTool(InDetTRTExtensionTool)
@@ -213,7 +212,7 @@ def TrkAmbiguityScoreCfg(flags, name='InDetTRT_SeededAmbiguityScore', **kwargs):
     acc.addEventAlgo(InDetAmbiguityScore)
     return acc
 
-def InDetAmbiTrackSelectionToolCfg(flags, name='InDetTRT_SeededAmbiTrackSelectionTool', **kwargs):
+def InDetTRTAmbiTrackSelectionToolCfg(flags, name='InDetTRT_SeededAmbiTrackSelectionTool', **kwargs):
     acc = ComponentAccumulator()
 
     InDetTRTDriftCircleCut = acc.getPrimaryAndMerge(TC.InDetTRTDriftCircleCutForPatternRecoCfg(flags))
@@ -258,10 +257,9 @@ def SimpleAmbiguityProcessorToolCfg(flags, name='InDetTRT_SeededAmbiguityProcess
     else:
         InDetTRT_SeededScoringTool = acc.popToolsAndMerge(TC.InDetTRT_SeededScoringToolCfg(flags))
         acc.addPublicTool(InDetTRT_SeededScoringTool)
-        InDetTRT_SeededSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-        acc.addPublicTool(InDetTRT_SeededSummaryTool)
+        InDetTRT_SeededSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
-    InDetTRT_SeededAmbiTrackSelectionTool = acc.popToolsAndMerge(InDetAmbiTrackSelectionToolCfg(flags))
+    InDetTRT_SeededAmbiTrackSelectionTool = acc.popToolsAndMerge(InDetTRTAmbiTrackSelectionToolCfg(flags))
     acc.addPublicTool(InDetTRT_SeededAmbiTrackSelectionTool)
 
     kwargs.setdefault("Fitter", InDetTrackFitterBT)
diff --git a/InnerDetector/InDetConfig/python/ConversionFindingConfig.py b/InnerDetector/InDetConfig/python/ConversionFindingConfig.py
index 06697594b3ab49289f09028455b71549514c9c11..1ea867c74a7d8214105fff45c5b8543eab78ecf3 100644
--- a/InnerDetector/InDetConfig/python/ConversionFindingConfig.py
+++ b/InnerDetector/InDetConfig/python/ConversionFindingConfig.py
@@ -53,8 +53,7 @@ def InDetConversionTrackSelectorToolCfg(flags, name="TrackSelector"):
     acc = ComponentAccumulator()
     kwargs = {}
     from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
-    kwargs["Extrapolator"] = acc.getPrimaryAndMerge(
-        AtlasExtrapolatorCfg(flags))
+    kwargs["Extrapolator"] = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
     kwargs["RatioCut1"] = flags.InDet.SecVertex.TrkSel.RatioCut1
     kwargs["RatioCut2"] = flags.InDet.SecVertex.TrkSel.RatioCut2
     kwargs["RatioCut3"] = flags.InDet.SecVertex.TrkSel.RatioCut3
@@ -79,8 +78,7 @@ def TrkVKalVrtFitterCfg(flags, name="TrkVKalVrtFitter"):
     acc = ComponentAccumulator()
     kwargs = {}
     from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
-    kwargs["Extrapolator"] = acc.getPrimaryAndMerge(
-        AtlasExtrapolatorCfg(flags))
+    kwargs["Extrapolator"] = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
     kwargs["FirstMeasuredPoint"] = flags.InDet.SecVertex.Fitter.FirstMeasuredPoint
     kwargs["FirstMeasuredPointLimit"] = flags.InDet.SecVertex.Fitter.FirstMeasuredPointLimit
     kwargs["InputParticleMasses"] = flags.InDet.SecVertex.Fitter.InputParticleMasses
@@ -114,7 +112,7 @@ def ConversionFinderCfg(flags, name="ConversionFinderTool"):
     acc = ComponentAccumulator()
     kwargs = {}
     from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
-    kwargs["Extrapolator"] = acc.getPrimaryAndMerge(
+    kwargs["Extrapolator"] = acc.popToolsAndMerge(
         AtlasExtrapolatorCfg(flags))
     kwargs["PostSelector"] = acc.getPrimaryAndMerge(
         ConversionPostSelectorCfg(flags))
diff --git a/InnerDetector/InDetConfig/python/ITkRecToolConfig.py b/InnerDetector/InDetConfig/python/ITkRecToolConfig.py
index 49aa20bddf887cda3e1a9a2e857fb97247b4f78f..73c6e6f49e95730e6d7a0e3c28904c9e0a96260f 100644
--- a/InnerDetector/InDetConfig/python/ITkRecToolConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkRecToolConfig.py
@@ -37,12 +37,12 @@ def ITkTrackSummaryHelperToolCfg(flags, name='ITkSummaryHelper', **kwargs):
   isHLT=kwargs.pop("isHLT",False)
 
   if 'AssoTool' not in kwargs :
+    assoTool = None
     if not isHLT:
-      ITkPrdAssociationTool_setup = result.getPrimaryAndMerge(ITkPrdAssociationTool_setupCfg(flags))
-      kwargs.setdefault("AssoTool", ITkPrdAssociationTool_setup)
+      assoTool = result.getPrimaryAndMerge(ITkPrdAssociationTool_setupCfg(flags))
     else:
-      ITkTrigPrdAssociationTool = result.getPrimaryAndMerge(ITkTrigPrdAssociationToolCfg(flags))
-      kwargs.setdefault("AssoTool", ITkTrigPrdAssociationTool)
+      assoTool = result.getPrimaryAndMerge(ITkTrigPrdAssociationToolCfg(flags))
+    kwargs.setdefault("AssoTool", assoTool)
 
   if "HoleSearch" not in kwargs:
     ITkTrackHoleSearchTool = result.getPrimaryAndMerge(ITkTrackHoleSearchToolCfg(flags))
@@ -74,7 +74,7 @@ def ITkBoundaryCheckToolCfg(flags, name='ITkBoundaryCheckTool', **kwargs):
       kwargs.setdefault("SctSummaryTool", None)
 
   if 'PixelLayerTool' not in kwargs :
-    kwargs.setdefault("PixelLayerTool", result.getPrimaryAndMerge(ITkTestPixelLayerToolCfg(flags)))
+    kwargs.setdefault("PixelLayerTool", result.popToolsAndMerge(ITkTestPixelLayerToolCfg(flags)))
 
   kwargs.setdefault("UsePixel", flags.Detector.EnableITkPixel)
   kwargs.setdefault("UseSCT", flags.Detector.EnableITkStrip)
@@ -85,24 +85,23 @@ def ITkBoundaryCheckToolCfg(flags, name='ITkBoundaryCheckTool', **kwargs):
   return result
 
 
-def ITkTrackHoleSearchToolCfg(flags, name = 'ITkHoleSearchTool', **kwargs):
+def ITkTrackHoleSearchToolCfg(flags, name='ITkHoleSearchTool', **kwargs):
   result = ComponentAccumulator()
   if 'Extrapolator' not in kwargs:
-    from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-    Extrapolator = result.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-    kwargs.setdefault("Extrapolator", Extrapolator)
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+    extrapolator = result.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+    result.addPublicTool(extrapolator)  # TODO: migrate to private?
+    kwargs.setdefault("Extrapolator", extrapolator)
 
   if 'BoundaryCheckTool' not in kwargs:
-    ITkBoundaryCheckTool = result.popToolsAndMerge(ITkBoundaryCheckToolCfg(flags))
-    kwargs.setdefault('BoundaryCheckTool', ITkBoundaryCheckTool)
+    kwargs.setdefault('BoundaryCheckTool', result.popToolsAndMerge(ITkBoundaryCheckToolCfg(flags)))
 
-  if flags.Beam.Type == "cosmics" :
+  if flags.Beam.Type == "cosmics":
     kwargs.setdefault("Cosmics", True)
 
-  kwargs.setdefault( "CountDeadModulesAfterLastHit" , True)
+  kwargs.setdefault("CountDeadModulesAfterLastHit", True)
 
-  indet_hole_search_tool = CompFactory.InDet.InDetTrackHoleSearchTool(name, **kwargs)
-  result.addPublicTool(indet_hole_search_tool, primary=True)
+  result.addPublicTool(CompFactory.InDet.InDetTrackHoleSearchTool(name, **kwargs), primary=True)
   return result
 
 def ITkTestPixelLayerToolCfg(flags, name = "ITkTestPixelLayerTool", **kwargs):
@@ -113,16 +112,17 @@ def ITkTestPixelLayerToolCfg(flags, name = "ITkTestPixelLayerTool", **kwargs):
     kwargs.setdefault("PixelSummaryTool", result.popToolsAndMerge(ITkPixelConditionsSummaryCfg(flags)))
 
   if 'Extrapolator' not in kwargs :
-    from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-    Extrapolator = result.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-    kwargs.setdefault("Extrapolator", Extrapolator)
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+    extrapolator = result.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+    result.addPublicTool(extrapolator)  # TODO: migrate to private?
+    kwargs.setdefault("Extrapolator", extrapolator)
 
   kwargs.setdefault("CheckActiveAreas", flags.ITk.checkDeadElementsOnTrack)
   kwargs.setdefault("CheckDeadRegions", flags.ITk.checkDeadElementsOnTrack)
   kwargs.setdefault("CheckDisabledFEs", flags.ITk.checkDeadElementsOnTrack)
 
   tool = CompFactory.InDet.InDetTestPixelLayerTool( name = the_name, **kwargs)
-  result.addPublicTool( tool, primary=True )
+  result.setPrivateTools( tool )
   return result
 
 def ITkPatternPropagatorCfg(flags, name='ITkPatternPropagator', **kwargs):
diff --git a/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py b/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py
index 79e052ca0196bf3211c4cf225f4903c587c32c04..4a6792755e5e5d74db76da8665daf4dfdd2b4188 100644
--- a/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py
+++ b/InnerDetector/InDetConfig/python/ITkSiliconPreProcessing.py
@@ -156,7 +156,7 @@ def ITkNnPixelClusterSplitProbToolCfg(flags, name="ITkNnPixelClusterSplitProbToo
 
     ITkNnPixelClusterSplitProbTool = CompFactory.InDet.TruthPixelClusterSplitProbTool(name=name,**kwargs) #Truth-based for ITk for now
 
-    acc.addPublicTool(ITkNnPixelClusterSplitProbTool, primary=True)
+    acc.setPrivateTools(ITkNnPixelClusterSplitProbTool)
     return acc
 
 def ITkNnPixelClusterSplitterCfg(flags, name="ITkNnPixelClusterSplitter", **kwargs):
diff --git a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
index a9a99195f9aededc66195e1548645554f4dea2b2..b15eec258d17196aa89bccd7ed676c09cdfb82fc 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackRecoConfig.py
@@ -14,8 +14,8 @@ def ITk_BCM_ZeroSuppressionCfg(flags, name="ITk_BCM_ZeroSuppression", **kwargs):
 ##------------------------------------------------------------------------------
 def ITkPixelClusterizationCfg(flags, name = "ITkPixelClusterization", **kwargs) :
     acc = ComponentAccumulator()
-    merged_pixels_tool = acc.getPrimaryAndMerge(ITkMergedPixelsToolCfg(flags, **kwargs))
-    ambi_finder = acc.getPrimaryAndMerge(ITkPixelGangedAmbiguitiesFinderCfg(flags, **kwargs))
+    merged_pixels_tool = acc.popToolsAndMerge(ITkMergedPixelsToolCfg(flags, **kwargs))
+    ambi_finder = acc.popToolsAndMerge(ITkPixelGangedAmbiguitiesFinderCfg(flags, **kwargs))
 
     kwargs.setdefault("clusteringTool", merged_pixels_tool)
     kwargs.setdefault("gangedAmbiguitiesFinder", ambi_finder)
@@ -46,7 +46,7 @@ def ITkStripClusterizationCfg(flags, name="ITkStripClusterization", **kwargs) :
     ITkStripLorentzAngleTool = acc.popToolsAndMerge( ITkStripLorentzAngleCfg(flags) )
 
     #### Clustering tool ######
-    ITkClusterMakerTool = acc.getPrimaryAndMerge(ITkClusterMakerToolCfg(flags))
+    ITkClusterMakerTool = acc.popToolsAndMerge(ITkClusterMakerToolCfg(flags))
     ITkStripClusteringTool = CompFactory.InDet.SCT_ClusteringTool( name           = "ITkStripClusteringTool",
                                                                    globalPosAlg   = ITkClusterMakerTool,
                                                                    conditionsTool = ITkStripConditionsSummaryTool,
@@ -83,14 +83,14 @@ def ITkPixelGangedAmbiguitiesFinderCfg(flags, **kwargs) :
     kwargs.setdefault("PixelDetEleCollKey", "ITkPixelDetectorElementCollection")
 
     ITkPixelGangedAmbiguitiesFinder = CompFactory.InDet.PixelGangedAmbiguitiesFinder( name = "ITkPixelGangedAmbiguitiesFinder", **kwargs)
-    acc.addPublicTool( ITkPixelGangedAmbiguitiesFinder, primary=True )
+    acc.setPrivateTools( ITkPixelGangedAmbiguitiesFinder )
     return acc
 
 ##------------------------------------------------------------------------------
 def ITkMergedPixelsToolCfg(flags, **kwargs) :
       acc = ComponentAccumulator()
       # --- now load the framework for the clustering
-      kwargs.setdefault("globalPosAlg", acc.getPrimaryAndMerge(ITkClusterMakerToolCfg(flags)))
+      kwargs.setdefault("globalPosAlg", acc.popToolsAndMerge(ITkClusterMakerToolCfg(flags)))
 
       # PixelClusteringToolBase uses PixelConditionsSummaryTool
       from PixelConditionsTools.ITkPixelConditionsSummaryConfig import ITkPixelConditionsSummaryCfg
@@ -100,27 +100,21 @@ def ITkMergedPixelsToolCfg(flags, **kwargs) :
       kwargs.setdefault("PixelDetEleCollKey","ITkPixelDetectorElementCollection")
 
       ITkMergedPixelsTool = CompFactory.InDet.MergedPixelsTool(  name = "ITkMergedPixelsTool", **kwargs)
-      acc.addPublicTool(ITkMergedPixelsTool, primary=True)
+      acc.setPrivateTools(ITkMergedPixelsTool)
       return acc
 
 ##------------------------------------------------------------------------------
 def ITkClusterMakerToolCfg(flags, name="ITkClusterMakerTool", **kwargs) :
     acc = ComponentAccumulator()
 
-    from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (ITkPixelChargeCalibCondAlgCfg, ITkPixelConfigCondAlgCfg, ITkPixelDeadMapCondAlgCfg,
-                                                                 ITkPixelOfflineCalibCondAlgCfg)
+    from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelChargeCalibCondAlgCfg
     from PixelReadoutGeometry.PixelReadoutGeometryConfig import ITkPixelReadoutManagerCfg
     #ITkPixelCablingCondAlgCfg + ITkPixelReadoutSpeedAlgCfg needed?
 
     # This directly needs the following Conditions data:
     # PixelModuleData & PixelChargeCalibCondData
-    acc.merge(ITkPixelConfigCondAlgCfg(flags))
-    acc.merge(ITkPixelDeadMapCondAlgCfg(flags))
     acc.merge(ITkPixelChargeCalibCondAlgCfg(flags))
-    acc.merge(ITkPixelOfflineCalibCondAlgCfg(flags))
     acc.merge(ITkPixelReadoutManagerCfg(flags))
-    #acc.merge(PixelCablingCondAlgCfg(flags))
-    #acc.merge(PixelReadoutSpeedAlgCfg(flags))
 
     from SiLorentzAngleTool.ITkPixelLorentzAngleConfig import ITkPixelLorentzAngleCfg
     ITkPixelLorentzAngleTool = acc.popToolsAndMerge(ITkPixelLorentzAngleCfg(flags))
@@ -134,37 +128,25 @@ def ITkClusterMakerToolCfg(flags, name="ITkClusterMakerTool", **kwargs) :
     kwargs.setdefault("PixelOfflineCalibData", "")
 
     ITkClusterMakerTool = CompFactory.InDet.ClusterMakerTool(name = name, **kwargs)
-    acc.addPublicTool(ITkClusterMakerTool, primary=True)
+    acc.setPrivateTools(ITkClusterMakerTool)
     return acc
 
 
-def ITkTrackToVertexCfg(flags, name="ITkTrackToVertex", **kwargs):
-    result = ComponentAccumulator()
-    if "Extrapolator" not in kwargs:
-        from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-        Extrapolator = result.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-        kwargs["Extrapolator"] = Extrapolator
-    from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
-
-    result.merge(BeamSpotCondAlgCfg(flags))
-    result.setPrivateTools(CompFactory.Reco.TrackToVertex(name, **kwargs))
-    return result
-
 def ITkTrackParticleCreatorToolCfg(flags, name="ITkTrackParticleCreatorTool", **kwargs):
     result = ComponentAccumulator()
     if "TrackToVertex" not in kwargs:
-        kwargs["TrackToVertex"] = result.popToolsAndMerge(ITkTrackToVertexCfg(flags))
+        from InDetConfig.TrackRecoConfig import TrackToVertexCfg
+        kwargs["TrackToVertex"] = result.popToolsAndMerge(TrackToVertexCfg(flags))
     if "TrackSummaryTool" not in kwargs:
         from InDetConfig.ITkTrackingCommonConfig import ITkTrackSummaryToolSharedHitsCfg
-        TrackSummaryTool = result.popToolsAndMerge(ITkTrackSummaryToolSharedHitsCfg(flags))
-        result.addPublicTool(TrackSummaryTool)
+        TrackSummaryTool = result.getPrimaryAndMerge(ITkTrackSummaryToolSharedHitsCfg(flags))
         kwargs["TrackSummaryTool"] = TrackSummaryTool
     p_expr = flags.ITk.perigeeExpression
     kwargs.setdefault("BadClusterID", flags.ITk.pixelClusterBadClusterID)
     kwargs.setdefault("KeepParameters", True)
     kwargs.setdefault("KeepFirstParameters", flags.ITk.KeepFirstParameters)
     kwargs.setdefault("PerigeeExpression", p_expr if p_expr != "Vertex" else "BeamLine")
-    kwargs.setdefault("DoITk", True)
+    kwargs.setdefault("IBLParameterSvc", "")
     ITkTrackParticleCreatorTool = CompFactory.Trk.TrackParticleCreatorTool(name, **kwargs)
     result.addPublicTool(ITkTrackParticleCreatorTool, primary=True)
     return result
@@ -190,7 +172,7 @@ def ITkTrackCollectionMergerAlgCfg(flags, name="ITkTrackCollectionMerger", Input
     kwargs.setdefault("UpdateSharedHits", True)
     kwargs.setdefault("UpdateAdditionalInfo", True)
     from InDetConfig.ITkTrackingCommonConfig import ITkTrackSummaryToolSharedHitsCfg
-    TrackSummaryTool = result.popToolsAndMerge(ITkTrackSummaryToolSharedHitsCfg(flags))
+    TrackSummaryTool = result.getPrimaryAndMerge(ITkTrackSummaryToolSharedHitsCfg(flags))
     kwargs.setdefault("SummaryTool", TrackSummaryTool)
 
     result.addEventAlgo(CompFactory.Trk.TrackCollectionMerger(name, **kwargs))
@@ -230,29 +212,6 @@ def ITkTrackRecoCfg(flags):
     """Configures complete ID tracking """
     result = ComponentAccumulator()
 
-    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
-    result.merge(BeamPipeGeometryCfg(flags))
-
-    #TODO move these to a more appropriate place
-
-    from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
-    result.merge(BeamSpotCondAlgCfg(flags))
-
-    from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (ITkPixelChargeCalibCondAlgCfg, ITkPixelOfflineCalibCondAlgCfg, ITkPixelDistortionAlgCfg)
-    result.merge(ITkPixelChargeCalibCondAlgCfg(flags))
-    result.merge(ITkPixelOfflineCalibCondAlgCfg(flags))
-    result.merge(ITkPixelDistortionAlgCfg(flags))
-
-    from SiLorentzAngleTool.ITkPixelLorentzAngleConfig import ITkPixelLorentzAngleTool, ITkPixelLorentzAngleCfg
-    result.addPublicTool(ITkPixelLorentzAngleTool(flags))
-    result.addPublicTool(result.popToolsAndMerge(ITkPixelLorentzAngleCfg(flags)))
-
-    from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleCfg
-    result.addPublicTool(result.popToolsAndMerge(ITkStripLorentzAngleCfg(flags)))
-
-    #Needed for ITk?
-    #from PixelConditionsAlgorithms.PixelConditionsConfig import PixelHitDiscCnfgAlgCfg
-    #result.merge(PixelHitDiscCnfgAlgCfg(flags))
     if flags.Input.Format == "BS":
         from PixelRawDataByteStreamCnv.PixelRawDataByteStreamCnvConfig import PixelRawDataProviderAlgCfg
         result.merge(PixelRawDataProviderAlgCfg(flags))
diff --git a/InnerDetector/InDetConfig/python/ITkTrackTruthConfig.py b/InnerDetector/InDetConfig/python/ITkTrackTruthConfig.py
index 545207a37bfd401e44ac598ff3eb59bcf27d9387..9c37fa534b55201363e52e3dd635af8f64ac0ea3 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackTruthConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackTruthConfig.py
@@ -43,7 +43,6 @@ def ITkTrackTruthSimilaritySelectorCfg(flags, DetailedTruth, TracksTruth, name='
     acc = ComponentAccumulator()
 
     ITkTruthMatchSimilarityTool = acc.popToolsAndMerge(ITkTruthMatchToolCfg(flags))
-    acc.addPublicTool(ITkTruthMatchSimilarityTool)
 
     kwargs.setdefault("DetailedTrackTruthName", DetailedTruth)
     kwargs.setdefault("OutputName", TracksTruth)
diff --git a/InnerDetector/InDetConfig/python/ITkTrackingCommonConfig.py b/InnerDetector/InDetConfig/python/ITkTrackingCommonConfig.py
index 90edd3672b7ccabe8077630462aebcd5f08d1fc7..a7d4c70c509312455e0843b53944f8e48d83a36f 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackingCommonConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackingCommonConfig.py
@@ -68,6 +68,9 @@ def ITkPixelClusterOnTrackToolBaseCfg(flags, name="ITkPixelClusterOnTrackTool",
     acc = ComponentAccumulator()
     the_name = makeName(name, kwargs)
 
+    from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelOfflineCalibCondAlgCfg
+    acc.merge(ITkPixelOfflineCalibCondAlgCfg(flags))
+
     split_cluster_map_extension = kwargs.pop('SplitClusterMapExtension','')
     if (flags.Beam.Type == "cosmics"):
         kwargs.setdefault("ErrorStrategy", 0)
@@ -238,13 +241,10 @@ def ITkTrackPRD_AssociationCfg(flags, name='ITkTrackPRD_Association', **kwargs):
     return acc
 
 def ITkSummaryHelperNoHoleSearchCfg(flags, name='ITkSummaryHelperNoHoleSearch', **kwargs):
-    acc = ComponentAccumulator()
     if 'HoleSearch' not in kwargs :
         kwargs.setdefault("HoleSearch", None)
     from  InDetConfig.ITkRecToolConfig import ITkTrackSummaryHelperToolCfg
-    ITkTrackSummaryHelperTool = acc.getPrimaryAndMerge(ITkTrackSummaryHelperToolCfg(flags, name = name, **kwargs))
-    acc.setPrivateTools(ITkTrackSummaryHelperTool)
-    return acc
+    return ITkTrackSummaryHelperToolCfg(flags, name = name, **kwargs)
 
 def ITkTrackSummaryToolCfg(flags, name='ITkTrackSummaryTool', **kwargs):
     acc = ComponentAccumulator()
@@ -263,7 +263,7 @@ def ITkTrackSummaryToolCfg(flags, name='ITkTrackSummaryTool', **kwargs):
             from  InDetConfig.ITkRecToolConfig import ITkTrackSummaryHelperToolCfg
             ITkSummaryHelperTool = acc.getPrimaryAndMerge(ITkTrackSummaryHelperToolCfg(flags, **id_helper_args))
         else:
-            ITkSummaryHelperTool = acc.popToolsAndMerge(ITkSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
+            ITkSummaryHelperTool = acc.getPrimaryAndMerge(ITkSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
         kwargs.setdefault("InDetSummaryHelperTool", ITkSummaryHelperTool)
 
     #
@@ -273,20 +273,16 @@ def ITkTrackSummaryToolCfg(flags, name='ITkTrackSummaryTool', **kwargs):
     kwargs.setdefault("doHolesInDet", do_holes)
     kwargs.setdefault("TRT_ElectronPidTool", None) # we don't want to use those tools during pattern
     kwargs.setdefault("PixelToTPIDTool", None) # we don't want to use those tools during pattern
-    acc.setPrivateTools(CompFactory.Trk.TrackSummaryTool(name = the_name, **kwargs))
+    acc.addPublicTool(CompFactory.Trk.TrackSummaryTool(name = the_name, **kwargs), primary=True)
     return acc
 
 def ITkSummaryHelperSharedHitsCfg(flags, name='ITkSummaryHelperSharedHits', **kwargs):
-    acc = ComponentAccumulator()
-
     kwargs.setdefault("PixelToTPIDTool", None)
     kwargs.setdefault("TestBLayerTool", None)
     kwargs.setdefault("DoSharedHits", flags.ITk.doSharedHits)
 
     from  InDetConfig.ITkRecToolConfig import ITkTrackSummaryHelperToolCfg
-    ITkTrackSummaryHelperTool = acc.getPrimaryAndMerge(ITkTrackSummaryHelperToolCfg(flags, name = name, **kwargs))
-    acc.setPrivateTools(ITkTrackSummaryHelperTool)
-    return acc
+    return ITkTrackSummaryHelperToolCfg(flags, name = name, **kwargs)
 
 def ITkTrackSummaryToolSharedHitsCfg(flags, name='ITkTrackSummaryToolSharedHits',**kwargs):
     acc = ComponentAccumulator()
@@ -298,14 +294,14 @@ def ITkTrackSummaryToolSharedHitsCfg(flags, name='ITkTrackSummaryToolSharedHits'
         id_helper_args = copyArgs(kwargs,copy_args) if 'ClusterSplitProbabilityName' in kwargs else {}
         kwargs.pop('ClusterSplitProbabilityName',None)
 
-        ITkSummaryHelperSharedHits = acc.popToolsAndMerge(ITkSummaryHelperSharedHitsCfg(flags, **id_helper_args))
+        ITkSummaryHelperSharedHits = acc.getPrimaryAndMerge(ITkSummaryHelperSharedHitsCfg(flags, **id_helper_args))
         kwargs.setdefault("InDetSummaryHelperTool", ITkSummaryHelperSharedHits)
 
     kwargs.setdefault( "PixelToTPIDTool", None)
     kwargs.setdefault( "doSharedHits", flags.ITk.doSharedHits)
 
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags, name, **kwargs))
-    acc.setPrivateTools(ITkTrackSummaryTool)
+    ITkTrackSummaryTool = acc.getPrimaryAndMerge(ITkTrackSummaryToolCfg(flags, name, **kwargs))
+    acc.addPublicTool(ITkTrackSummaryTool, primary=True)
     return acc
 
 def ITkMultipleScatteringUpdatorCfg(flags, name = "ITkMultipleScatteringUpdator", **kwargs):
@@ -345,9 +341,10 @@ def ITkKalmanTrackFitterBaseCfg(flags, name='ITkKalmanTrackFitterBase',**kwargs)
     if len(pix_cluster_on_track_args)>0 and len(nameSuffix)>0 :
         pix_cluster_on_track_args['nameSuffix']=nameSuffix
 
-    from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-    Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-    kwargs.setdefault("ExtrapolatorHandle", Extrapolator)
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+    extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+    acc.addPublicTool(extrapolator)  # TODO: migrate to private?
+    kwargs.setdefault("ExtrapolatorHandle", extrapolator)
 
     if 'RIO_OnTrackCreatorHandle' not in kwargs :
         ITkRefitRotCreator = acc.popToolsAndMerge(ITkRotCreatorCfg(flags, 
@@ -402,9 +399,10 @@ def ITkKalmanCompetingPixelClustersToolCfg(flags, name='ITkKalmanCompetingPixelC
     kwargs.setdefault('WeightCutValueEndCap',5.5)
 
     if 'Extrapolator' not in kwargs:
-        from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-        Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-        kwargs.setdefault("Extrapolator", Extrapolator)
+        from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+        extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+        acc.addPublicTool(extrapolator)  # TODO: migrate to private?
+        kwargs.setdefault("Extrapolator", extrapolator)
 
     acc.setPrivateTools(CompFactory.InDet.CompetingPixelClustersOnTrackTool(name=name, **kwargs))
     return acc
@@ -415,9 +413,10 @@ def ITkKalmanCompetingStripClustersToolCfg(flags, name='ITkKalmanCompetingStripC
     kwargs.setdefault('WeightCutValueEndCap',5.5)
 
     if 'Extrapolator' not in kwargs:
-        from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-        Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-        kwargs.setdefault("Extrapolator", Extrapolator)
+        from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+        extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+        acc.addPublicTool(extrapolator)  # TODO: migrate to private?
+        kwargs.setdefault("Extrapolator", extrapolator)
 
     acc.setPrivateTools(CompFactory.InDet.CompetingSCT_ClustersOnTrackTool(name=name,**kwargs))
     return acc
@@ -504,7 +503,7 @@ def ITkKalmanFitterCfg(flags, name='ITkKalmanFitter',**kwargs) :
     kwargs.setdefault('InternalDAFHandle', ITkKalmanInternalDAF)
 
     ITkKalmanTrackFitter = acc.popToolsAndMerge(ITkKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
-    acc.addPublicTool(ITkKalmanTrackFitter, primary=True)
+    acc.setPrivateTools(ITkKalmanTrackFitter)
     return acc
 
 def ITkKalmanDNAFitterCfg(flags, name='ITkKalmanDNAFitter',**kwargs) :
@@ -521,7 +520,7 @@ def ITkKalmanDNAFitterCfg(flags, name='ITkKalmanDNAFitter',**kwargs) :
     kwargs.setdefault('InternalDAFHandle', ITkKalmanInternalDAF)
 
     ITkKalmanTrackFitter = acc.popToolsAndMerge(ITkKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
-    acc.addPublicTool(ITkKalmanTrackFitter, primary=True)
+    acc.setPrivateTools(ITkKalmanTrackFitter)
     return acc
 
 def ITkReferenceKalmanFitterCfg(flags, name='ITkReferenceKalmanFitter',**kwargs) :
@@ -534,7 +533,7 @@ def ITkReferenceKalmanFitterCfg(flags, name='ITkReferenceKalmanFitter',**kwargs)
     kwargs.setdefault('InternalDAFHandle', ITkKalmanInternalDAFRef)
 
     ITkKalmanTrackFitter = acc.popToolsAndMerge(ITkKalmanTrackFitterBaseCfg(flags, name=name, **kwargs))
-    acc.addPublicTool(ITkKalmanTrackFitter, primary=True)
+    acc.setPrivateTools(ITkKalmanTrackFitter)
     return acc
 
 def ITkDistributedKalmanFilterCfg(flags, name="ITkDistributedKalmanFilter", **kwargs) :
@@ -542,17 +541,16 @@ def ITkDistributedKalmanFilterCfg(flags, name="ITkDistributedKalmanFilter", **kw
 
     pix_cluster_on_track_args = stripArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
 
-    if 'ExtrapolatorTool' not in kwargs :
-        from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-        Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-        kwargs.setdefault('ExtrapolatorTool', Extrapolator)
+    if 'ExtrapolatorTool' not in kwargs:
+        from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+        kwargs.setdefault('ExtrapolatorTool', acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags)))
 
-    if 'ROTcreator' not in kwargs :
+    if 'ROTcreator' not in kwargs:
         ITkRotCreator = acc.popToolsAndMerge(ITkRotCreatorCfg(flags, **pix_cluster_on_track_args))
         kwargs.setdefault('ROTcreator', ITkRotCreator)
 
     DistributedKalmanFilter = CompFactory.Trk.DistributedKalmanFilter(name = name, **kwargs)
-    acc.addPublicTool(DistributedKalmanFilter, primary=True)
+    acc.setPrivateTools(DistributedKalmanFilter)
     return acc
 
 def ITkGlobalChi2FitterCfg(flags, name='ITkGlobalChi2Fitter', **kwargs) :
@@ -594,7 +592,7 @@ def ITkGlobalChi2FitterCfg(flags, name='ITkGlobalChi2Fitter', **kwargs) :
         kwargs.setdefault('Momentum', 1000.*Units.MeV)
 
     ITkGlobalChi2Fitter = acc.popToolsAndMerge(ITkGlobalChi2FitterBaseCfg(flags, name=name, **kwargs))
-    acc.addPublicTool(ITkGlobalChi2Fitter, primary=True)
+    acc.setPrivateTools(ITkGlobalChi2Fitter)
     return acc
 
 def ITkGsfMaterialUpdatorCfg(flags, name='ITkGsfMaterialUpdator', **kwargs) :
@@ -653,7 +651,7 @@ def ITkGaussianSumFitterCfg(flags, name='ITkGaussianSumFitter', **kwargs) :
     kwargs.setdefault('DoHitSorting', True)
 
     GaussianSumFitter = CompFactory.Trk.GaussianSumFitter(name = name, **kwargs)
-    acc.addPublicTool(GaussianSumFitter, primary=True)
+    acc.setPrivateTools(GaussianSumFitter)
     return acc
 
 def ITkTrackFitterCfg(flags, name='ITkTrackFitter', **kwargs) :
@@ -682,11 +680,11 @@ def ITkGlobalChi2FitterBaseCfg(flags, name='ITkGlobalChi2FitterBase', **kwargs)
             # @TODO howto get the TrackingGeometryKey from the TrackingGeometryCondAlgCfg ?
             kwargs.setdefault("TrackingGeometryReadKey", 'AtlasTrackingGeometry')
 
-    from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
     from TrkConfig.AtlasExtrapolatorToolsConfig import AtlasNavigatorCfg, ITkPropagatorCfg, ITkMaterialEffectsUpdatorCfg
-    from InDetConfig.ITkRecToolConfig  import ITkUpdatorCfg
+    from InDetConfig.ITkRecToolConfig import ITkUpdatorCfg
 
-    Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
+    Extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
     Navigator = acc.getPrimaryAndMerge(AtlasNavigatorCfg(flags))
     ITkPropagator = acc.getPrimaryAndMerge(ITkPropagatorCfg(flags))
     ITkUpdator = acc.popToolsAndMerge(ITkUpdatorCfg(flags))
@@ -805,11 +803,8 @@ def ITkRotCreatorDigitalCfg(flags, name='ITkRotCreatorDigital', **kwargs) :
     return acc
 
 def ITkTrackSummaryToolNoHoleSearchCfg(flags, name='ITkTrackSummaryToolNoHoleSearch',**kwargs) :
-    acc = ComponentAccumulator()
     kwargs.setdefault('doHolesInDet', False)
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags, name=name, **kwargs))
-    acc.setPrivateTools(ITkTrackSummaryTool)
-    return acc
+    return ITkTrackSummaryToolCfg(flags, name=name, **kwargs)
 
 def ITkROIInfoVecCondAlgCfg(flags, name='ITkROIInfoVecCondAlg', **kwargs) :
     acc = ComponentAccumulator()
@@ -822,10 +817,10 @@ def ITkROIInfoVecCondAlgCfg(flags, name='ITkROIInfoVecCondAlg', **kwargs) :
 def ITkAmbiScoringToolBaseCfg(flags, name='ITkAmbiScoringTool', **kwargs) :
     acc = ComponentAccumulator()
 
-    from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-    kwargs.setdefault("Extrapolator", acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags)))
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+    kwargs.setdefault("Extrapolator", acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags)))
 
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags))
+    ITkTrackSummaryTool = acc.getPrimaryAndMerge(ITkTrackSummaryToolCfg(flags))
 
     from AthenaCommon.DetFlags  import DetFlags
     have_calo_rois = flags.ITk.doBremRecovery and flags.ITk.doCaloSeededBrem and DetFlags.detdescr.Calo_allOn()
@@ -849,20 +844,20 @@ def ITkAmbiScoringToolBaseCfg(flags, name='ITkAmbiScoringTool', **kwargs) :
         kwargs.setdefault("InDetEtaDependentCutsSvc", acc.getService("ITkEtaDependentCutsSvc"+flags.ITk.Tracking.extension))
 
     the_name = name + flags.ITk.Tracking.extension
-    acc.addPublicTool(CompFactory.InDet.InDetAmbiScoringTool(name = the_name, **kwargs), primary=True)
+    acc.setPrivateTools(CompFactory.InDet.InDetAmbiScoringTool(name = the_name, **kwargs))
     return acc
 
 def ITkCosmicsScoringToolBaseCfg(flags, name='ITkCosmicsScoringTool', **kwargs) :
     acc = ComponentAccumulator()
     the_name=makeName(name, kwargs)
 
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags))
+    ITkTrackSummaryTool = acc.getPrimaryAndMerge(ITkTrackSummaryToolCfg(flags))
 
     kwargs.setdefault("nWeightedClustersMin", flags.ITk.Tracking.nWeightedClustersMin )
     kwargs.setdefault("minTRTHits", 0 )
     kwargs.setdefault("SummaryTool", ITkTrackSummaryTool )
 
-    acc.addPublicTool(CompFactory.InDet.InDetCosmicScoringTool(name = the_name, **kwargs ), primary=True)
+    acc.setPrivateTools( CompFactory.InDet.InDetCosmicScoringTool(name = the_name, **kwargs ) )
     return acc
 
 def ITkCosmicExtenScoringToolCfg(flags, name='ITkCosmicExtenScoringTool',**kwargs) :
@@ -894,9 +889,9 @@ def ITkNNScoringToolBaseCfg(flags, name='ITkNNScoringTool', **kwargs) :
         alg = acc.popToolsAndMerge(ITkROIInfoVecCondAlgCfg(flags))
         kwargs.setdefault("CaloROIInfoName", alg.WriteKey )
 
-    from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-    Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-    ITkTrackSummaryTool = acc.popToolsAndMerge(ITkTrackSummaryToolCfg(flags))
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+    Extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+    ITkTrackSummaryTool = acc.getPrimaryAndMerge(ITkTrackSummaryToolCfg(flags))
 
     kwargs.setdefault("nnCutConfig", "dev/TrackingCP/LRTAmbiNetwork/20200727_225401/nn-config.json" )
     kwargs.setdefault("nnCutThreshold", flags.ITk.nnCutLargeD0Threshold )
diff --git a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
index 361bad19a4b6dac1002e3c60c327450dd7e4c28e..e3191bfc4ef9bee1157947658cca872a07b7c5fa 100644
--- a/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
+++ b/InnerDetector/InDetConfig/python/ITkTrackingSiPatternConfig.py
@@ -38,7 +38,7 @@ def ITkSiSpacePointsSeedMakerCfg(flags, name="ITkSpSeedsMaker", InputCollections
     kwargs.setdefault("useOverlapSpCollection", flags.ITk.Tracking.useITkStrip and flags.ITk.Tracking.useITkStripSeeding )
     kwargs.setdefault("SpacePointsOverlapName", 'ITkOverlapSpacePoints')
     kwargs.setdefault("radMax", flags.ITk.Tracking.radMax)
-    kwargs.setdefault("RapidityCut",  flags.ITk.Tracking.maxEta )
+    kwargs.setdefault("etaMax", flags.ITk.Tracking.maxEta )
 
     if usePrdAssociationTool:
         # not all classes have that property !!!
@@ -223,8 +223,13 @@ def ITkSiTrackMaker_xkCfg(flags, name="ITkSiTrackMaker", InputCollections = None
         kwargs.setdefault("TrackPatternRecoInfo", 'SiSPSeededFinder')
 
     if flags.ITk.doStoreTrackSeeds:
-        ITkSeedToTrackConversion = CompFactory.InDet.SeedToTrackConversionTool(  name = "ITkSeedToTrackConversion",
-                                                                                 OutputName = 'SiSPSeedSegments' + flags.ITk.Tracking.extension)
+        from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+        extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+        acc.addPublicTool(extrapolator)  # TODO: migrate to private?
+
+        ITkSeedToTrackConversion = CompFactory.InDet.SeedToTrackConversionTool(name="ITkSeedToTrackConversion",
+                                                                               OutputName=f"SiSPSeedSegments{flags.ITk.Tracking.extension}",
+                                                                               Extrapolator=extrapolator)
         acc.setPrivateTools(ITkSeedToTrackConversion)
         kwargs.setdefault("SeedToTrackConversion", ITkSeedToTrackConversion)
         kwargs.setdefault("SeedSegmentsWrite", True)
@@ -257,7 +262,7 @@ def ITkSiSPSeededTrackFinderCfg(flags, name="ITkSiSpTrackFinder", InputCollectio
                                                                  InputCollections = InputCollections ))
     from TrkConfig.AtlasExtrapolatorToolsConfig import ITkPropagatorCfg
     ITkPropagator = acc.getPrimaryAndMerge(ITkPropagatorCfg(flags))
-    ITkTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(TC.ITkTrackSummaryToolNoHoleSearchCfg(flags))
+    ITkTrackSummaryToolNoHoleSearch = acc.getPrimaryAndMerge(TC.ITkTrackSummaryToolNoHoleSearchCfg(flags))
     ITkSiSpacePointsSeedMaker = acc.popToolsAndMerge(ITkSiSpacePointsSeedMakerCfg(flags,
                                                                                   InputCollections = InputCollections ))
 
@@ -307,7 +312,6 @@ def ITkSiSPSeededTrackFinderROIConvCfg(flags, name="ITkSiSpTrackFinderROIConv",
 
     from RegionSelector.RegSelToolConfig import regSelTool_ITkStrip_Cfg
     RegSelTool_ITkStrip   = acc.popToolsAndMerge(regSelTool_ITkStrip_Cfg(flags))
-    acc.addPublicTool(RegSelTool_ITkStrip)
 
     kwargs.setdefault("RegSelTool_Strip", RegSelTool_ITkStrip)
     kwargs.setdefault("useITkConvSeeded", True)
@@ -386,7 +390,7 @@ def ITkAmbiTrackSelectionToolCfg(flags, name="ITkAmbiTrackSelectionTool", **kwar
         AmbiTrackSelectionTool = CompFactory.InDet.InDetAmbiTrackSelectionTool
 
     ITkAmbiTrackSelectionTool = AmbiTrackSelectionTool(name = name+flags.ITk.Tracking.extension, **kwargs)
-    acc.addPublicTool(ITkAmbiTrackSelectionTool, primary=True)
+    acc.setPrivateTools(ITkAmbiTrackSelectionTool)
     return acc
 
 def ITkDenseEnvironmentsAmbiguityScoreProcessorToolCfg(flags, name = "ITkAmbiguityScoreProcessor", ClusterSplitProbContainer='', **kwargs) :
@@ -395,12 +399,12 @@ def ITkDenseEnvironmentsAmbiguityScoreProcessorToolCfg(flags, name = "ITkAmbigui
     # --- set up different Scoring Tool for collisions and cosmics
     #
     if flags.Beam.Type == 'cosmics':
-        ITkAmbiScoringTool = acc.getPrimaryAndMerge(TC.ITkCosmicsScoringToolCfg(flags))
+        ITkAmbiScoringTool = acc.popToolsAndMerge(TC.ITkCosmicsScoringToolCfg(flags))
     else:
-        ITkAmbiScoringTool = acc.getPrimaryAndMerge(TC.ITkAmbiScoringToolCfg(flags))
+        ITkAmbiScoringTool = acc.popToolsAndMerge(TC.ITkAmbiScoringToolCfg(flags))
 
     from InDetConfig.ITkSiliconPreProcessing import ITkNnPixelClusterSplitProbToolCfg
-    ITkNnPixelClusterSplitProbTool = acc.getPrimaryAndMerge(ITkNnPixelClusterSplitProbToolCfg(flags))
+    ITkNnPixelClusterSplitProbTool = acc.popToolsAndMerge(ITkNnPixelClusterSplitProbToolCfg(flags))
     ITkPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.ITkPRDtoTrackMapToolGangedPixelsCfg(flags))
     ITkPRDtoTrackMapTool = acc.popToolsAndMerge(TC.ITkPRDtoTrackMapToolCfg(flags))
 
@@ -440,9 +444,9 @@ def ITkDenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "ITkAmbiguityPro
     # --- set up different Scoring Tool for collisions and cosmics
     #
     if flags.Beam.Type == 'cosmics':
-        ITkAmbiScoringTool = acc.getPrimaryAndMerge(TC.ITkCosmicsScoringToolCfg(flags))
+        ITkAmbiScoringTool = acc.popToolsAndMerge(TC.ITkCosmicsScoringToolCfg(flags))
     else:
-        ITkAmbiScoringTool = acc.getPrimaryAndMerge(TC.ITkAmbiScoringToolCfg(flags))
+        ITkAmbiScoringTool = acc.popToolsAndMerge(TC.ITkAmbiScoringToolCfg(flags))
 
     fitter_args = {}
     fitter_args.setdefault("nameSuffix", 'Ambi'+flags.ITk.Tracking.extension)
@@ -476,15 +480,16 @@ def ITkDenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "ITkAmbiguityPro
 
     ITkPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.ITkPRDtoTrackMapToolGangedPixelsCfg(flags))
 
-    ambi_track_summary_tool = acc.popToolsAndMerge(TC.ITkTrackSummaryToolCfg( flags,
-                                                                              namePrefix                  = 'ITkAmbiguityProcessorSplitProb',
-                                                                              nameSuffix                  = flags.ITk.Tracking.extension,
-                                                                              ClusterSplitProbabilityName = 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension))
+    ambi_track_summary_tool = acc.getPrimaryAndMerge(TC.ITkTrackSummaryToolCfg( flags,
+                                                                                namePrefix                  = 'ITkAmbiguityProcessorSplitProb',
+                                                                                nameSuffix                  = flags.ITk.Tracking.extension,
+                                                                                ClusterSplitProbabilityName = 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension))
 
-    ITkAmbiTrackSelectionTool = acc.getPrimaryAndMerge(ITkAmbiTrackSelectionToolCfg(flags))
+    ITkAmbiTrackSelectionTool = acc.popToolsAndMerge(ITkAmbiTrackSelectionToolCfg(flags))
 
-    from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-    Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+    extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+    acc.addPublicTool(extrapolator)  # TODO: migrate to private?
 
     kwargs.setdefault("Fitter", fitter_list)
     kwargs.setdefault("AssociationTool", ITkPRDtoTrackMapToolGangedPixels)
@@ -492,7 +497,7 @@ def ITkDenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "ITkAmbiguityPro
     kwargs.setdefault("TrackSummaryTool", ambi_track_summary_tool)
     kwargs.setdefault("ScoringTool", ITkAmbiScoringTool)
     kwargs.setdefault("SelectionTool", ITkAmbiTrackSelectionTool)
-    kwargs.setdefault("TrackExtrapolator", Extrapolator)
+    kwargs.setdefault("TrackExtrapolator", extrapolator)
     kwargs.setdefault("InputClusterSplitProbabilityName", 'SplitProb'+flags.ITk.Tracking.extension)
     kwargs.setdefault("OutputClusterSplitProbabilityName", 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension)
     kwargs.setdefault("SuppressHoleSearch", False)
@@ -523,12 +528,12 @@ def ITkSimpleAmbiguityProcessorToolCfg(flags, name = "ITkAmbiguityProcessor", Cl
     ITkTrackFitter = acc.popToolsAndMerge(TC.ITkTrackFitterCfg(flags))
     ITkPRDtoTrackMapToolGangedPixels = TC.ITkPRDtoTrackMapToolGangedPixelsCfg(flags)
 
-    ambi_track_summary_tool = acc.popToolsAndMerge(TC.ITkTrackSummaryToolCfg( flags,
-                                                                              namePrefix                  = 'ITkAmbiguityProcessorSplitProb',
-                                                                              nameSuffix                  = flags.ITk.Tracking.extension,
-                                                                              ClusterSplitProbabilityName = 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension))
+    ambi_track_summary_tool = acc.getPrimaryAndMerge(TC.ITkTrackSummaryToolCfg( flags,
+                                                                                namePrefix                  = 'ITkAmbiguityProcessorSplitProb',
+                                                                                nameSuffix                  = flags.ITk.Tracking.extension,
+                                                                                ClusterSplitProbabilityName = 'ITkAmbiguityProcessorSplitProb'+flags.ITk.Tracking.extension))
 
-    ITkAmbiTrackSelectionTool = acc.getPrimaryAndMerge(ITkAmbiTrackSelectionToolCfg(flags))
+    ITkAmbiTrackSelectionTool = acc.popToolsAndMerge(ITkAmbiTrackSelectionToolCfg(flags))
 
     kwargs.setdefault("Fitter", ITkTrackFitter)
     kwargs.setdefault("AssociationTool", ITkPRDtoTrackMapToolGangedPixels)
diff --git a/InnerDetector/InDetConfig/python/InDetRecToolConfig.py b/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
index 9d97c52e294ee89f702d2e2a7aa2694661c88436..a262b30104b1af6267325a2c1d420b42319f34db 100644
--- a/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
+++ b/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
@@ -79,7 +79,7 @@ def InDetBoundaryCheckToolCfg(flags, name='InDetBoundaryCheckTool', **kwargs):
       kwargs.setdefault("SctSummaryTool", None)
 
   if 'PixelLayerTool' not in kwargs :
-    kwargs.setdefault("PixelLayerTool", result.getPrimaryAndMerge(InDetTestPixelLayerToolCfg(flags)))
+    kwargs.setdefault("PixelLayerTool", result.popToolsAndMerge(InDetTestPixelLayerToolCfg(flags)))
 
   kwargs.setdefault("UsePixel", flags.Detector.EnablePixel)
   kwargs.setdefault("UseSCT", flags.Detector.EnableSCT)
@@ -127,7 +127,7 @@ def InDetTestPixelLayerToolCfg(flags, name = "InDetTestPixelLayerTool", **kwargs
   kwargs.setdefault("CheckDisabledFEs", flags.InDet.checkDeadElementsOnTrack)
 
   tool = CompFactory.InDet.InDetTestPixelLayerTool( name = the_name, **kwargs)
-  result.addPublicTool( tool, primary=True )
+  result.setPrivateTools( tool )
   return result
 
 def splitDefaultPrefix(name) :
diff --git a/InnerDetector/InDetConfig/python/SiliconPreProcessing.py b/InnerDetector/InDetConfig/python/SiliconPreProcessing.py
index a1c4700b3adea25deb5c6217c1e334ba6dd0a8d7..dd1a1decf0d33ea4d4a2d4b12cddc6797c3effc9 100644
--- a/InnerDetector/InDetConfig/python/SiliconPreProcessing.py
+++ b/InnerDetector/InDetConfig/python/SiliconPreProcessing.py
@@ -35,7 +35,6 @@ def InDetSiTrackerSpacePointFinderCfg(flags, name = "InDetSiTrackerSpacePointFin
     acc = SCT_ReadoutGeometryCfg(flags)
 
     InDetSiSpacePointMakerTool = acc.popToolsAndMerge(SiSpacePointMakerToolCfg(flags))
-    acc.addPublicTool(InDetSiSpacePointMakerTool) ## I decided to merge it
 
     kwargs.setdefault("SiSpacePointMakerTool", InDetSiSpacePointMakerTool)
     kwargs.setdefault("PixelsClustersName", 'PixelClusters') # InDetKeys.PixelClusters
@@ -187,47 +186,11 @@ def InDetRecPreProcessingSiliconCfg(flags, **kwargs):
             from InDetConfig.TrackRecoConfig import BCM_ZeroSuppressionCfg
             acc.merge(BCM_ZeroSuppressionCfg(flags))
         
-        if flags.Detector.EnablePixel or flags.Detector.EnableSCT:
-            #
-            # --- SiLorentzAngleTool
-            #
-            from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleCfg
-            PixelLorentzAngleTool = acc.popToolsAndMerge(PixelLorentzAngleCfg(flags))
-            acc.addPublicTool(PixelLorentzAngleTool)
-
-            from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
-            SCTLorentzAngleTool = acc.popToolsAndMerge( SCT_LorentzAngleCfg(flags) )    
-            acc.addPublicTool(SCTLorentzAngleTool)
-            #
-            # --- ClusterMakerTool (public), needed by Pixel and SCT Clusterization
-            #
-            from InDetConfig.TrackRecoConfig import ClusterMakerToolCfg
-            acc.merge(ClusterMakerToolCfg(flags, PixelLorentzAngleTool=PixelLorentzAngleTool, SCTLorentzAngleTool=SCTLorentzAngleTool))
         #
         # -- Pixel Clusterization
         #
         if (flags.Detector.EnablePixel and flags.InDet.doPixelPRDFormation) or redoPatternRecoAndTracking:
             #
-            # --- do we use new splittig or not ?
-            #
-            if flags.InDet.doPixelClusterSplitting:
-                #
-                # --- Neutral Network version ?
-                #
-                if flags.InDet.pixelClusterSplittingType == 'NeuralNet':
-                    NnPixelClusterSplitProbTool = acc.popToolsAndMerge(NnPixelClusterSplitProbToolCfg(flags))
-                    acc.addPublicTool(NnPixelClusterSplitProbTool)
-                
-                    NnPixelClusterSplitter = acc.popToolsAndMerge(NnPixelClusterSplitterCfg(flags))
-                    acc.addPublicTool(NnPixelClusterSplitter)
-                #
-                # --- Neutral Network version ?
-                #
-                elif flags.InDet.pixelClusterSplittingType == 'AnalogClus':      
-                    # new splitter tool
-                    TotPixelClusterSplitter=CompFactory.InDet.TotPixelClusterSplitter (name="TotPixelClusterSplitter")
-                    acc.addPublicTool(TotPixelClusterSplitter)
-            #
             # --- PixelClusterization algorithm
             #
             from InDetConfig.TrackRecoConfig import PixelClusterizationCfg
diff --git a/InnerDetector/InDetConfig/python/TRTExtensionConfig.py b/InnerDetector/InDetConfig/python/TRTExtensionConfig.py
index 7a4834f3f7df31a5f39ef3b48f666d6e9f44b096..d750ce310b27004bed4302f75c4244245905eee0 100644
--- a/InnerDetector/InDetConfig/python/TRTExtensionConfig.py
+++ b/InnerDetector/InDetConfig/python/TRTExtensionConfig.py
@@ -89,8 +89,7 @@ def InDetExtensionProcessorCfg(flags, SiTrackCollection=None, ExtendedTrackColle
     #
     # --- get configured track extension processor
     #
-    InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     if flags.InDet.materialInteractions:
         kwargs.setdefault("matEffects", flags.InDet.materialInteractionsType)
diff --git a/InnerDetector/InDetConfig/python/TRTPhaseConfig.py b/InnerDetector/InDetConfig/python/TRTPhaseConfig.py
index 1b2d247c03f0f54cbaebb61f7650c3f4455d8bdd..387249dabdbb12a437ffd43f4003e7380c20a012 100644
--- a/InnerDetector/InDetConfig/python/TRTPhaseConfig.py
+++ b/InnerDetector/InDetConfig/python/TRTPhaseConfig.py
@@ -98,8 +98,7 @@ def InDetCosmicsEventPhaseCfg(flags, InputTrackCollections, name = 'InDetCosmics
     InDetFixedWindowTrackTimeTool  = acc.popToolsAndMerge(InDetFixedWindowTrackTimeToolCfg(flags))
     acc.addPublicTool(InDetFixedWindowTrackTimeTool )
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     # CalDb tool
     from TRT_ConditionsServices.TRT_ConditionsServicesConfig import TRT_CalDbToolCfg
diff --git a/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py b/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
index 6c633dc256d8a4f37410de5c211d1e61da5d5a71..282cce021eff8ad1a16f6b29652ee6d3c994ede2 100644
--- a/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
+++ b/InnerDetector/InDetConfig/python/TRTStandaloneConfig.py
@@ -9,8 +9,7 @@ def InDetTrtTrackScoringToolCfg(flags, name ='InDetTRT_StandaloneScoringTool', e
     #
     # --- set up special Scoring Tool for standalone TRT tracks
     #
-    InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     InDetTRTDriftCircleCut = TC.InDetTRTDriftCircleCutForPatternRecoCfg(flags)
     acc.addPublicTool(InDetTRTDriftCircleCut)
@@ -55,8 +54,7 @@ def TRT_SegmentToTrackToolCfg(flags, name ='InDetTRT_SegmentToTrackTool', extens
     InDetTrackFitterTRT = acc.popToolsAndMerge(TC.InDetTrackFitterTRTCfg(flags))
     acc.addPublicTool(InDetTrackFitterTRT)
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg(flags))
 
     from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
     InDetExtrapolator = acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags))
diff --git a/InnerDetector/InDetConfig/python/TrackRecoConfig.py b/InnerDetector/InDetConfig/python/TrackRecoConfig.py
index 41785e9080ec9587ff615b3f2698307bcca34add..579c38eae30f19cd006523326b53a2aff488153c 100644
--- a/InnerDetector/InDetConfig/python/TrackRecoConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackRecoConfig.py
@@ -14,8 +14,8 @@ def BCM_ZeroSuppressionCfg(flags, name="InDetBCM_ZeroSuppression", **kwargs):
 ##------------------------------------------------------------------------------
 def PixelClusterizationCfg(flags, name = "InDetPixelClusterization", **kwargs) :
     acc = ComponentAccumulator()
-    merged_pixels_tool = acc.getPrimaryAndMerge(MergedPixelsToolCfg(flags, **kwargs))
-    ambi_finder = acc.getPrimaryAndMerge(PixelGangedAmbiguitiesFinderCfg(flags))
+    merged_pixels_tool = acc.popToolsAndMerge(MergedPixelsToolCfg(flags, **kwargs))
+    ambi_finder = acc.popToolsAndMerge(PixelGangedAmbiguitiesFinderCfg(flags))
 
     # Region selector tools for Pixel
     from RegionSelector.RegSelToolConfig import regSelTool_Pixel_Cfg
@@ -47,7 +47,7 @@ def SCTClusterizationCfg(flags, name="InDetSCT_Clusterization", **kwargs) :
     InDetSCT_ConditionsSummaryToolWithoutFlagged = acc.popToolsAndMerge(SCT_ConditionsSummaryToolCfg(flags, withFlaggedCondTool=False))
 
     #### Clustering tool ######
-    InDetClusterMakerTool = acc.getPrimaryAndMerge(ClusterMakerToolCfg(flags))
+    InDetClusterMakerTool = acc.popToolsAndMerge(ClusterMakerToolCfg(flags))
     InDetSCT_ClusteringTool = CompFactory.InDet.SCT_ClusteringTool( name           = "InDetSCT_ClusteringTool",
                                                                     globalPosAlg   = InDetClusterMakerTool,
                                                                     conditionsTool = InDetSCT_ConditionsSummaryToolWithoutFlagged)
@@ -81,14 +81,14 @@ def PixelGangedAmbiguitiesFinderCfg(flags) :
     acc = PixelReadoutGeometryCfg(flags)
 
     InDetPixelGangedAmbiguitiesFinder = CompFactory.InDet.PixelGangedAmbiguitiesFinder( name = "InDetPixelGangedAmbiguitiesFinder")
-    acc.addPublicTool( InDetPixelGangedAmbiguitiesFinder, primary=True)
+    acc.setPrivateTools( InDetPixelGangedAmbiguitiesFinder )
     return acc
 
 ##------------------------------------------------------------------------------
 def MergedPixelsToolCfg(flags, **kwargs) :
       acc = ComponentAccumulator()
       # --- now load the framework for the clustering
-      kwargs.setdefault("globalPosAlg", acc.getPrimaryAndMerge(ClusterMakerToolCfg(flags)) )
+      kwargs.setdefault("globalPosAlg", acc.popToolsAndMerge(ClusterMakerToolCfg(flags)) )
 
       # PixelClusteringToolBase uses PixelConditionsSummaryTool
       from PixelConditionsTools.PixelConditionsSummaryConfig import PixelConditionsSummaryCfg
@@ -100,30 +100,32 @@ def MergedPixelsToolCfg(flags, **kwargs) :
 
       InDetMergedPixelsTool = CompFactory.InDet.MergedPixelsTool(  name = "InDetMergedPixelsTool", **kwargs)
      
-      acc.addPublicTool(InDetMergedPixelsTool, primary=True)
+      acc.setPrivateTools(InDetMergedPixelsTool)
       return acc
 
 ##------------------------------------------------------------------------------
 def ClusterMakerToolCfg(flags, name="InDetClusterMakerTool", **kwargs) :
-    from PixelConditionsAlgorithms.PixelConditionsConfig import (PixelChargeCalibCondAlgCfg, PixelConfigCondAlgCfg, PixelDeadMapCondAlgCfg, 
-                                                                 PixelOfflineCalibCondAlgCfg, PixelCablingCondAlgCfg, PixelReadoutSpeedAlgCfg)
-
     acc = ComponentAccumulator()
+
     # This directly needs the following Conditions data:
-    # PixelModuleData & PixelChargeCalibCondData
-    acc.merge( PixelConfigCondAlgCfg(flags))
-    acc.merge(PixelDeadMapCondAlgCfg(flags))
-    acc.merge( PixelChargeCalibCondAlgCfg(flags))
+    # PixelChargeCalibCondData & PixelOfflineCalibData
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelChargeCalibCondAlgCfg, PixelOfflineCalibCondAlgCfg
+    acc.merge(PixelChargeCalibCondAlgCfg(flags))
     acc.merge(PixelOfflineCalibCondAlgCfg(flags))
-    acc.merge(PixelCablingCondAlgCfg(flags))
-    acc.merge(PixelReadoutSpeedAlgCfg(flags))
 
-    InDetClusterMakerTool = CompFactory.InDet.ClusterMakerTool(name = name, **kwargs)
+    from PixelReadoutGeometry.PixelReadoutGeometryConfig import PixelReadoutManagerCfg
+    acc.merge(PixelReadoutManagerCfg(flags))
 
+    from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleCfg
+    PixelLorentzAngleTool = acc.popToolsAndMerge(PixelLorentzAngleCfg(flags))
     from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
     SCTLorentzAngleTool = acc.popToolsAndMerge( SCT_LorentzAngleCfg(flags) )    
-    acc.addPublicTool(SCTLorentzAngleTool)
-    acc.addPublicTool(InDetClusterMakerTool, primary=True)
+
+    kwargs.setdefault("PixelLorentzAngleTool", PixelLorentzAngleTool)
+    kwargs.setdefault("SCTLorentzAngleTool", SCTLorentzAngleTool)
+
+    InDetClusterMakerTool = CompFactory.InDet.ClusterMakerTool(name = name, **kwargs)
+    acc.setPrivateTools(InDetClusterMakerTool)
     return acc
 
 
@@ -144,8 +146,7 @@ def TrackParticleCreatorToolCfg(flags, name="TrackParticleCreatorTool", **kwargs
         kwargs["TrackToVertex"] = result.popToolsAndMerge(TrackToVertexCfg(flags))
     if "TrackSummaryTool" not in kwargs:
         from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolSharedHitsCfg
-        TrackSummaryTool = result.popToolsAndMerge(InDetTrackSummaryToolSharedHitsCfg(flags))
-        result.addPublicTool(TrackSummaryTool)
+        TrackSummaryTool = result.getPrimaryAndMerge(InDetTrackSummaryToolSharedHitsCfg(flags))
         kwargs["TrackSummaryTool"] = TrackSummaryTool
     p_expr = flags.InDet.perigeeExpression
     kwargs.setdefault("BadClusterID", flags.InDet.pixelClusterBadClusterID)
@@ -199,38 +200,15 @@ def TrackRecoCfg(flags):
     """Configures complete ID tracking """
     result = ComponentAccumulator()
 
-    from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
-    result.merge( PixelReadoutGeometryCfg(flags))
-
-    from SCT_GeoModel.SCT_GeoModelConfig import SCT_ReadoutGeometryCfg
-    result.merge( SCT_ReadoutGeometryCfg(flags))
-
-    from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg
-    result.merge(TRT_ReadoutGeometryCfg(flags))
-
-    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
-    result.merge(BeamPipeGeometryCfg(flags))
-
-    #TODO move these to a more appropriate place
-
-    from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
-    result.merge(BeamSpotCondAlgCfg(flags))
-
     from PixelConditionsAlgorithms.PixelConditionsConfig import (PixelChargeCalibCondAlgCfg, PixelOfflineCalibCondAlgCfg, PixelDistortionAlgCfg)
     result.merge(PixelChargeCalibCondAlgCfg(flags))
     result.merge(PixelOfflineCalibCondAlgCfg(flags))
     result.merge(PixelDistortionAlgCfg(flags))
+
     from InDetConfig.TrackingCommonConfig import PixelClusterNnCondAlgCfg, PixelClusterNnWithTrackCondAlgCfg
     result.merge(PixelClusterNnCondAlgCfg(flags))    
     result.merge(PixelClusterNnWithTrackCondAlgCfg(flags))
 
-    from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleTool, PixelLorentzAngleCfg
-    result.addPublicTool(PixelLorentzAngleTool(flags))
-    result.addPublicTool(result.popToolsAndMerge(PixelLorentzAngleCfg(flags)))
-
-    from SiLorentzAngleTool.SCT_LorentzAngleConfig import SCT_LorentzAngleCfg
-    result.addPublicTool(result.popToolsAndMerge(SCT_LorentzAngleCfg(flags)))
-
     from PixelConditionsAlgorithms.PixelConditionsConfig import PixelHitDiscCnfgAlgCfg
     result.merge(PixelHitDiscCnfgAlgCfg(flags))
     if flags.Input.Format == "BS":
@@ -269,7 +247,7 @@ def TrackRecoCfg(flags):
 
     if flags.InDet.doTruth:
         from InDetConfig.TrackTruthConfig import InDetTrackTruthCfg
-        result.merge(InDetTrackTruthCfg(flags, Tracks = "ExtendTracks", DetailedTruth = "ExtendTracksDetailedTruth", TracksTruth = "ExtendTracksTruthCollection"))
+        result.merge(InDetTrackTruthCfg(flags, Tracks = "ExtendedTracks", DetailedTruth = "ExtendedTracksDetailedTruth", TracksTruth = "ExtendedTracksTruthCollection"))
 
     # TODO add followup algs
     result.merge(TrackParticleCnvAlgCfg(flags, TrackContainerName="ExtendedTracks"))
@@ -320,6 +298,9 @@ if __name__ == "__main__":
         from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
         top_acc.merge(EventInfoCnvAlgCfg(ConfigFlags))
 
+    if ConfigFlags.Input.isMC:
+        from xAODTruthCnv.xAODTruthCnvConfigNew import GEN_AOD2xAODCfg
+        top_acc.merge(GEN_AOD2xAODCfg(ConfigFlags))
 
     top_acc.merge(TrackRecoCfg(ConfigFlags))
     from AthenaCommon.Constants import DEBUG
diff --git a/InnerDetector/InDetConfig/python/TrackTruthConfig.py b/InnerDetector/InDetConfig/python/TrackTruthConfig.py
index 327464e4210e58b832399584a8b723725f93433d..8e7b8b544bb36c420ecdf0d279b876965c6ed94d 100644
--- a/InnerDetector/InDetConfig/python/TrackTruthConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackTruthConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory     import CompFactory
 # -------------------------------------------------------------------------
@@ -47,7 +47,6 @@ def TrackTruthSimilaritySelectorCfg(flags, DetailedTruth, TracksTruth, name='Sel
     acc = ComponentAccumulator()
 
     InDetTruthMatchSimilarityTool = acc.popToolsAndMerge(InDetTruthMatchToolCfg(flags))
-    acc.addPublicTool(InDetTruthMatchSimilarityTool)
 
     kwargs.setdefault("DetailedTrackTruthName", DetailedTruth)
     kwargs.setdefault("OutputName", TracksTruth)
@@ -100,28 +99,11 @@ if __name__ == "__main__":
 
     ####################### Aditional Configurations #########################
 
-    from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
-    top_acc.merge( PixelReadoutGeometryCfg(ConfigFlags) )
-
-    from SCT_GeoModel.SCT_GeoModelConfig import SCT_ReadoutGeometryCfg
-    top_acc.merge(SCT_ReadoutGeometryCfg(ConfigFlags))
-
-    from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg
-    top_acc.merge(TRT_ReadoutGeometryCfg( ConfigFlags ))
-
     from BeamSpotConditions.BeamSpotConditionsConfig import BeamSpotCondAlgCfg
     top_acc.merge(BeamSpotCondAlgCfg(ConfigFlags))
 
-    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelDistortionAlgCfg, PixelHitDiscCnfgAlgCfg
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelDistortionAlgCfg
     top_acc.merge(PixelDistortionAlgCfg(ConfigFlags))
-    top_acc.merge(PixelHitDiscCnfgAlgCfg(ConfigFlags))
-
-    from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleTool, PixelLorentzAngleCfg
-    top_acc.addPublicTool(PixelLorentzAngleTool(ConfigFlags))
-    top_acc.addPublicTool(top_acc.popToolsAndMerge(PixelLorentzAngleCfg(ConfigFlags)))
-
-    from PixelRawDataByteStreamCnv.PixelRawDataByteStreamCnvConfig import PixelRawDataProviderAlgCfg
-    top_acc.merge(PixelRawDataProviderAlgCfg(ConfigFlags))
 
     ################## SiliconPreProcessing Configurations ###################
     from InDetConfig.SiliconPreProcessing import InDetRecPreProcessingSiliconCfg
diff --git a/InnerDetector/InDetConfig/python/TrackingCommonConfig.py b/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
index 24e4ec9124eaedfa6f1d47b011b3965e6760f51f..87c304b376e12477965772ffc53a4914087454bb 100644
--- a/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackingCommonConfig.py
@@ -52,7 +52,6 @@ def PixelClusterNnCondAlgCfg(flags, **kwargs):
     if 'NetworkToHistoTool' not in kwargs :
         NeuralNetworkToHistoTool = acc.popToolsAndMerge(NeuralNetworkToHistoToolCfg(name = "NeuralNetworkToHistoTool"))
         kwargs.setdefault("NetworkToHistoTool", NeuralNetworkToHistoTool)
-        acc.addPublicTool(NeuralNetworkToHistoTool)
 
     acc.addCondAlgo(CompFactory.InDet.TTrainedNetworkCondAlg(kwargs.pop("name", 'PixelClusterNnCondAlg'), **kwargs))
     return acc
@@ -82,7 +81,6 @@ def NnClusterizationFactoryCfg(flags, name = 'NnClusterizationFactory', **kwargs
     if 'PixelLorentzAngleTool' not in kwargs :
         from SiLorentzAngleTool.PixelLorentzAngleConfig import PixelLorentzAngleTool
         PixelLorentzAngleTool = PixelLorentzAngleTool(flags, name="PixelLorentzAngleTool", **kwargs)
-        acc.addPublicTool(PixelLorentzAngleTool)
         kwargs.setdefault("PixelLorentzAngleTool", PixelLorentzAngleTool)
 
     useTTrainedNetworks = flags.InDet.useNNTTrainedNetworks
@@ -107,13 +105,16 @@ def NnClusterizationFactoryCfg(flags, name = 'NnClusterizationFactory', **kwargs
     kwargs.setdefault("NnCollectionJSONReadKey", '' if useTTrainedNetworks else 'PixelClusterNNJSON')
 
     NnClusterizationFactory = CompFactory.InDet.NnClusterizationFactory( name = the_name, **kwargs )
-    acc.addPublicTool( NnClusterizationFactory, primary=True)
+    acc.setPrivateTools( NnClusterizationFactory )
     return acc
 
 def InDetPixelClusterOnTrackToolBaseCfg(flags, name="PixelClusterOnTrackTool", **kwargs):
     acc = ComponentAccumulator()
     the_name = makeName(name, kwargs)
 
+    from PixelConditionsAlgorithms.PixelConditionsConfig import PixelOfflineCalibCondAlgCfg
+    acc.merge(PixelOfflineCalibCondAlgCfg(flags))
+
     split_cluster_map_extension = kwargs.pop('SplitClusterMapExtension','')
     if (flags.Beam.Type == "cosmics") or flags.InDet.doDBMstandalone:
         kwargs.setdefault("ErrorStrategy", 0)
@@ -154,7 +155,7 @@ def InDetPixelClusterOnTrackToolNNSplittingCfg(flags, name='InDetPixelClusterOnT
 
     if flags.InDet.doPixelClusterSplitting and flags.InDet.pixelClusterSplittingType == 'NeuralNet':
         if 'NnClusterizationFactory' not in kwargs :
-            NnClusterizationFactory = acc.getPrimaryAndMerge(NnClusterizationFactoryCfg(flags))
+            NnClusterizationFactory = acc.popToolsAndMerge(NnClusterizationFactoryCfg(flags))
             kwargs.setdefault("NnClusterizationFactory", NnClusterizationFactory)
 
     tool = acc.popToolsAndMerge(InDetPixelClusterOnTrackToolBaseCfg(flags, name=name, **kwargs))
@@ -250,13 +251,13 @@ def InDetTRT_DriftCircleOnTrackToolCfg(flags, name='TRT_DriftCircleOnTrackTool',
     tmpAcc, LuminosityOutputKey = LumiCondDataKeyForTRTMuScalingCfg(flags)
     acc.merge(tmpAcc)
     kwargs.setdefault("LumiDataKey", LuminosityOutputKey)
-    acc.addPublicTool(CompFactory.InDet.TRT_DriftCircleOnTrackTool(name = the_name, **kwargs), primary = True)
+    acc.setPrivateTools(CompFactory.InDet.TRT_DriftCircleOnTrackTool(name = the_name, **kwargs))
     return acc
 
 def InDetBroadTRT_DriftCircleOnTrackToolCfg(name='InDetBroadTRT_DriftCircleOnTrackTool', **kwargs):
     acc = ComponentAccumulator()
     the_name = makeName( name, kwargs)
-    acc.addPublicTool(CompFactory.InDet.TRT_DriftCircleOnTrackNoDriftTimeTool(the_name, **kwargs), primary = True)
+    acc.setPrivateTools(CompFactory.InDet.TRT_DriftCircleOnTrackNoDriftTimeTool(the_name, **kwargs))
     return acc
 
 def InDetRotCreatorCfg(flags, name='InDetRotCreator', **kwargs):
@@ -276,7 +277,6 @@ def InDetRotCreatorCfg(flags, name='InDetRotCreator', **kwargs):
             ToolPixelCluster= acc.popToolsAndMerge(InDetBroadPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args))
         else:
             ToolPixelCluster= acc.popToolsAndMerge(InDetPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(ToolPixelCluster)
         kwargs.setdefault("ToolPixelCluster", ToolPixelCluster)
 
     if 'ToolSCT_Cluster' not in kwargs :
@@ -285,10 +285,9 @@ def InDetRotCreatorCfg(flags, name='InDetRotCreator', **kwargs):
         else :
             ToolSCT_Cluster = acc.popToolsAndMerge(InDetSCT_ClusterOnTrackToolCfg(flags))
         kwargs.setdefault("ToolSCT_Cluster", ToolSCT_Cluster)
-        acc.addPublicTool(ToolSCT_Cluster)
 
     if 'ToolTRT_DriftCircle' not in kwargs :
-        kwargs.setdefault("ToolTRT_DriftCircle", acc.getPrimaryAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
+        kwargs.setdefault("ToolTRT_DriftCircle", acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
 
     kwargs.setdefault('Mode', 'indet')
     acc.setPrivateTools(CompFactory.Trk.RIO_OnTrackCreator(name=the_name, **kwargs))
@@ -300,10 +299,10 @@ def InDetTRT_DriftCircleOnTrackUniversalToolCfg(name='InDetTRT_RefitRotCreator',
     default_ScaleHitUncertainty = 2.5
 
     if 'RIOonTrackToolDrift' not in kwargs :
-        RIOonTrackToolDrift = acc.getPrimaryAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
+        RIOonTrackToolDrift = acc.popToolsAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
         kwargs.setdefault("RIOonTrackToolDrift", RIOonTrackToolDrift)
     if 'RIOonTrackToolTube' not in kwargs :
-        RIOonTrackToolTube = acc.getPrimaryAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
+        RIOonTrackToolTube = acc.popToolsAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
         kwargs.setdefault("RIOonTrackToolTube", RIOonTrackToolTube)
     kwargs.setdefault("ScaleHitUncertainty", default_ScaleHitUncertainty) 
     acc.setPrivateTools(CompFactory.InDet.TRT_DriftCircleOnTrackUniversalTool(name = the_name, **kwargs))
@@ -317,7 +316,6 @@ def InDetRefitRotCreatorCfg(flags, name='InDetRefitRotCreator', **kwargs):
         if 'ToolTRT_DriftCircle' not in kwargs :
             ToolTRT_DriftCircle = acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackUniversalToolCfg(ScaleHitUncertainty = ScaleHitUncertainty))
             kwargs.setdefault("ToolTRT_DriftCircle", ToolTRT_DriftCircle)
-            acc.addPublicTool(ToolTRT_DriftCircle)
     InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name = name, **kwargs))
     acc.setPrivateTools(InDetRotCreator)
     return acc
@@ -356,13 +354,10 @@ def InDetTRTDriftCircleCutForPatternRecoCfg(flags, name='InDetTRTDriftCircleCutF
     return result
 
 def InDetSummaryHelperNoHoleSearchCfg(flags, name='InDetSummaryHelperNoHoleSearch', **kwargs):
-    acc = ComponentAccumulator()
     if 'HoleSearch' not in kwargs :
         kwargs.setdefault("HoleSearch", None)
     from  InDetConfig.InDetRecToolConfig import InDetTrackSummaryHelperToolCfg
-    InDetSummaryHelper = acc.getPrimaryAndMerge(InDetTrackSummaryHelperToolCfg(flags, name = name, **kwargs))
-    acc.setPrivateTools( InDetSummaryHelper)
-    return acc
+    return InDetTrackSummaryHelperToolCfg(flags, name = name, **kwargs)
 
 def InDetTrackSummaryToolCfg(flags, name='InDetTrackSummaryTool', **kwargs):
     acc = ComponentAccumulator()
@@ -381,8 +376,7 @@ def InDetTrackSummaryToolCfg(flags, name='InDetTrackSummaryTool', **kwargs):
             from  InDetConfig.InDetRecToolConfig import InDetTrackSummaryHelperToolCfg
             InDetSummaryHelperTool = acc.getPrimaryAndMerge(InDetTrackSummaryHelperToolCfg(flags, **id_helper_args))
         else:
-            InDetSummaryHelperTool = acc.popToolsAndMerge(InDetSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
-            acc.addPublicTool(InDetSummaryHelperTool)
+            InDetSummaryHelperTool = acc.getPrimaryAndMerge(InDetSummaryHelperNoHoleSearchCfg(flags, **id_helper_args))
         kwargs.setdefault("InDetSummaryHelperTool", InDetSummaryHelperTool)
 
     #
@@ -392,7 +386,7 @@ def InDetTrackSummaryToolCfg(flags, name='InDetTrackSummaryTool', **kwargs):
     kwargs.setdefault("doHolesInDet", do_holes)
     kwargs.setdefault("TRT_ElectronPidTool", None) # we don't want to use those tools during pattern
     kwargs.setdefault("PixelToTPIDTool", None) # we don't want to use those tools during pattern
-    acc.setPrivateTools(CompFactory.Trk.TrackSummaryTool(name = the_name, **kwargs))
+    acc.addPublicTool(CompFactory.Trk.TrackSummaryTool(name = the_name, **kwargs), primary=True)
     return acc
 
 def PixeldEdxAlg(flags, name = "PixeldEdxAlg", **kwargs):
@@ -436,14 +430,12 @@ def InDetSummaryHelperSharedHitsCfg(flags, name='InDetSummaryHelperSharedHits',
     acc = ComponentAccumulator()
     if 'PixelToTPIDTool' not in kwargs :
         InDetPixelToTPIDTool = acc.popToolsAndMerge(InDetPixelToTPIDToolCfg(flags))
-        acc.addPublicTool(InDetPixelToTPIDTool)
         kwargs.setdefault("PixelToTPIDTool", InDetPixelToTPIDTool)
 
     if 'TestBLayerTool' not in kwargs :
         testBLayerToolAcc = InDetRecTestBLayerToolCfg(flags)
         if testBLayerToolAcc is not None:
             InDetRecTestBLayerTool = acc.popToolsAndMerge(testBLayerToolAcc)
-            acc.addPublicTool(InDetRecTestBLayerTool)
         else:
             InDetRecTestBLayerTool = None
         kwargs.setdefault("TestBLayerTool", InDetRecTestBLayerTool)
@@ -471,7 +463,6 @@ def InDetTrackSummaryToolSharedHitsCfg(flags, name='InDetTrackSummaryToolSharedH
         kwargs.pop('ClusterSplitProbabilityName',None)
 
         InDetSummaryHelperSharedHits = acc.popToolsAndMerge(InDetSummaryHelperSharedHitsCfg(flags, **id_helper_args))
-        acc.addPublicTool(InDetSummaryHelperSharedHits)
         kwargs.setdefault("InDetSummaryHelperTool", InDetSummaryHelperSharedHits)
 
     if 'TRT_ElectronPidTool' not in kwargs:
@@ -484,13 +475,12 @@ def InDetTrackSummaryToolSharedHitsCfg(flags, name='InDetTrackSummaryToolSharedH
 
     if 'PixelToTPIDTool' not in kwargs :
         InDetPixelToTPIDTool = acc.popToolsAndMerge(InDetPixelToTPIDToolCfg(flags))
-        acc.addPublicTool(InDetPixelToTPIDTool)
         kwargs.setdefault( "PixelToTPIDTool", InDetPixelToTPIDTool)
 
     kwargs.setdefault( "doSharedHits", flags.InDet.doSharedHits)
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags, name, **kwargs))
-    acc.setPrivateTools(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags, name, **kwargs))
+    acc.addPublicTool(InDetTrackSummaryTool, primary=True)
     return acc
 
 def InDetUpdatorCfg(flags, name = 'InDetUpdator', **kwargs):
@@ -509,7 +499,7 @@ def InDetUpdatorCfg(flags, name = 'InDetUpdator', **kwargs):
     else :
         tool = CompFactory.Trk.KalmanUpdator(name = the_name, **kwargs)
 
-    acc.addPublicTool(tool, primary = True)
+    acc.setPrivateTools(tool)
     return acc
 
 def InDetMultipleScatteringUpdatorCfg(name = "InDetMultipleScatteringUpdator", **kwargs):
@@ -530,14 +520,11 @@ def InDetMeasRecalibSTCfg(flags, name='InDetMeasRecalibST', **kwargs) :
     if 'BroadPixelClusterOnTrackTool' not in kwargs :
         InDetBroadPixelClusterOnTrackTool = acc.popToolsAndMerge(InDetBroadPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args))
         kwargs.setdefault('BroadPixelClusterOnTrackTool', InDetBroadPixelClusterOnTrackTool)
-        acc.addPublicTool(InDetBroadPixelClusterOnTrackTool)
     if 'BroadSCT_ClusterOnTrackTool' not in kwargs :
         InDetBroadSCT_ClusterOnTrackTool = acc.popToolsAndMerge(InDetBroadSCT_ClusterOnTrackToolCfg(flags))
-        acc.addPublicTool(InDetBroadSCT_ClusterOnTrackTool)
         kwargs.setdefault('BroadSCT_ClusterOnTrackTool', InDetBroadSCT_ClusterOnTrackTool)
     if 'CommonRotCreator' not in kwargs :
         InDetRefitRotCreator = acc.popToolsAndMerge(InDetRefitRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRefitRotCreator)
         kwargs.setdefault('CommonRotCreator', InDetRefitRotCreator)
 
     MeasRecalibSteeringTool = CompFactory.Trk.MeasRecalibSteeringTool(name, **kwargs)
@@ -556,10 +543,9 @@ def InDetKalmanTrackFitterBaseCfg(flags, name='InDetKalmanTrackFitterBase',**kwa
 
     if 'RIO_OnTrackCreatorHandle' not in kwargs :
         InDetRefitRotCreator = acc.popToolsAndMerge(InDetRefitRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRefitRotCreator)
         kwargs.setdefault("RIO_OnTrackCreatorHandle", InDetRefitRotCreator)
 
-    InDetUpdator = acc.getPrimaryAndMerge(InDetUpdatorCfg(flags))
+    InDetUpdator = acc.popToolsAndMerge(InDetUpdatorCfg(flags))
     kwargs.setdefault('MeasurementUpdatorHandle', InDetUpdator)
     kwargs.setdefault('KalmanSmootherHandle', InDetBKS())
     kwargs.setdefault('KalmanOutlierLogicHandle', InDetKOL())
@@ -571,11 +557,9 @@ def InDetKalmanTrackFitterBaseCfg(flags, name='InDetKalmanTrackFitterBase',**kwa
         if 'RecalibratorHandle' not in kwargs :
             the_tool_name = 'InDetMeasRecalibST'
             InDetMeasRecalibST = acc.popToolsAndMerge(InDetMeasRecalibSTCfg(flags, name=the_tool_name+nameSuffix, **pix_cluster_on_track_args))
-            acc.addPublicTool(InDetMeasRecalibST)
             kwargs.setdefault('RecalibratorHandle', InDetMeasRecalibST)
     else :
         InDetMeasRecalibST = acc.popToolsAndMerge(InDetMeasRecalibSTCfg(flags))
-        acc.addPublicTool(InDetMeasRecalibST)
         kwargs.setdefault('RecalibratorHandle', InDetMeasRecalibST)
 
     KalmanFitter = CompFactory.Trk.KalmanFitter(name=name, **kwargs)
@@ -630,17 +614,15 @@ def InDetBroadRotCreatorCfg(flags, name='InDetBroadInDetRotCreator', **kwargs) :
     if 'ToolPixelCluster' not in kwargs :
         pix_cluster_on_track_args = copyArgs(kwargs,['SplitClusterMapExtension','ClusterSplitProbabilityName','nameSuffix'])
         InDetBroadPixelClusterOnTrackTool = acc.popToolsAndMerge(InDetBroadPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetBroadPixelClusterOnTrackTool)
         kwargs.setdefault('ToolPixelCluster', InDetBroadPixelClusterOnTrackTool)
 
     if 'ToolSCT_Cluster' not in kwargs :
         InDetBroadSCT_ClusterOnTrackTool = acc.popToolsAndMerge(InDetBroadSCT_ClusterOnTrackToolCfg(flags))
-        acc.addPublicTool(InDetBroadSCT_ClusterOnTrackTool)
         kwargs.setdefault('ToolSCT_Cluster', InDetBroadSCT_ClusterOnTrackTool)
 
     if flags.Detector.EnableTRT:
         if 'ToolTRT_DriftCircle' not in kwargs :
-            InDetBroadTRT_DriftCircleOnTrackTool = acc.getPrimaryAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
+            InDetBroadTRT_DriftCircleOnTrackTool = acc.popToolsAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
             kwargs.setdefault('ToolTRT_DriftCircle', InDetBroadTRT_DriftCircleOnTrackTool)
 
     InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name = name, **kwargs))
@@ -698,7 +680,6 @@ def DistributedKalmanFilterCfg(flags, name="DistributedKalmanFilter", **kwargs)
 
     if 'ROTcreator' not in kwargs :
         InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRotCreator)
         kwargs.setdefault('ROTcreator', InDetRotCreator)
 
     DistributedKalmanFilter = CompFactory.Trk.DistributedKalmanFilter(name = name, **kwargs)
@@ -714,14 +695,12 @@ def InDetGlobalChi2FitterCfg(flags, name='InDetGlobalChi2Fitter', **kwargs) :
 
     if 'RotCreatorTool' not in kwargs :
         InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRotCreator)
         kwargs.setdefault('RotCreatorTool', InDetRotCreator)
 
     use_broad_cluster_any = flags.InDet.useBroadClusterErrors and (not flags.InDet.doDBMstandalone)
 
     if 'BroadRotCreatorTool' not in kwargs and  not flags.InDet.doRefit:
         InDetBroadRotCreator = acc.popToolsAndMerge(InDetBroadRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetBroadRotCreator)
         kwargs.setdefault('BroadRotCreatorTool', InDetBroadRotCreator)
 
     if flags.InDet.doDBMstandalone:
@@ -797,12 +776,10 @@ def GaussianSumFitterCfg(flags, name='GaussianSumFitter', **kwargs) :
 
     if 'ToolForROTCreation' not in kwargs :
         InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRotCreator)
         kwargs.setdefault('ToolForROTCreation', InDetRotCreator)
 
     if 'ToolForExtrapolation' not in kwargs :
         InDetGsfExtrapolator = acc.popToolsAndMerge(InDetGsfExtrapolatorCfg(flags))
-        acc.addPublicTool(InDetGsfExtrapolator)
         kwargs.setdefault('ToolForExtrapolation', InDetGsfExtrapolator)
     
     kwargs.setdefault('ReintegrateOutliers', False)
@@ -847,7 +824,6 @@ def InDetGlobalChi2FitterBaseCfg(flags, name='GlobalChi2FitterBase', **kwargs):
 
     InDetMultipleScatteringUpdator = acc.popToolsAndMerge(
         InDetMultipleScatteringUpdatorCfg())
-    acc.addPublicTool(InDetMultipleScatteringUpdator)
 
     InDetMaterialEffectsUpdator = acc.getPrimaryAndMerge(
         InDetMaterialEffectsUpdatorCfg(flags))
@@ -885,7 +861,6 @@ def InDetGlobalChi2FitterTRTCfg(flags, name='InDetGlobalChi2FitterTRT', **kwargs
 
     if 'RotCreatorTool' not in kwargs :
         InDetRefitRotCreator = acc.popToolsAndMerge(InDetRefitRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRefitRotCreator)
         kwargs.setdefault("RotCreatorTool", InDetRefitRotCreator)
 
     kwargs.setdefault("MaterialUpdateTool", '')
@@ -928,12 +903,10 @@ def InDetGlobalChi2FitterLowPtCfg(flags, name='InDetGlobalChi2FitterLowPt', **kw
 
     if 'RotCreatorTool' not in kwargs :
         InDetRotCreator = acc.popToolsAndMerge(InDetRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetRotCreator)
         kwargs.setdefault('RotCreatorTool', InDetRotCreator)
 
     if 'BroadRotCreatorTool' not in kwargs and  not flags.InDet.doRefit:
         InDetBroadRotCreator = acc.popToolsAndMerge(InDetBroadRotCreatorCfg(flags, **pix_cluster_on_track_args))
-        acc.addPublicTool(InDetBroadRotCreator)
         kwargs.setdefault('BroadRotCreatorTool', InDetBroadRotCreator)
 
     kwargs.setdefault('OutlierCut', 5.0)
@@ -1020,8 +993,7 @@ def InDetTRT_ExtensionToolCosmicsCfg(flags, name='InDetTRT_ExtensionToolCosmics'
 
     if 'Propagator' not in kwargs :
         from TrkConfig.AtlasExtrapolatorToolsConfig import InDetPropagatorCfg
-        InDetPropagator = acc.popToolsAndMerge(InDetPropagatorCfg(flags))
-        acc.addPublicTool(InDetPropagator)
+        InDetPropagator = acc.getPrimaryAndMerge(InDetPropagatorCfg(flags))
         kwargs.setdefault("Propagator", InDetPropagator)
 
     if 'Extrapolator' not in kwargs :
@@ -1030,12 +1002,10 @@ def InDetTRT_ExtensionToolCosmicsCfg(flags, name='InDetTRT_ExtensionToolCosmics'
 
     if 'RIOonTrackToolYesDr' not in kwargs :
         InDetTRT_DriftCircleOnTrackUniversalToolCosmics = acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackUniversalToolCosmicsCfg())
-        acc.addPublicTool(InDetTRT_DriftCircleOnTrackUniversalToolCosmics)
         kwargs.setdefault("RIOonTrackToolYesDr", InDetTRT_DriftCircleOnTrackUniversalToolCosmics)
 
     if 'RIOonTrackToolNoDr' not in kwargs :
-        InDetBroadTRT_DriftCircleOnTrackTool = acc.getPrimaryAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
-        acc.addPublicTool(InDetBroadTRT_DriftCircleOnTrackTool)
+        InDetBroadTRT_DriftCircleOnTrackTool = acc.popToolsAndMerge(InDetBroadTRT_DriftCircleOnTrackToolCfg())
         kwargs.setdefault("RIOonTrackToolNoDr", InDetBroadTRT_DriftCircleOnTrackTool)
 
     kwargs.setdefault("TRT_ClustersContainer", 'TRT_DriftCircles') # InDetKeys.TRT_DriftCircles()
@@ -1068,11 +1038,10 @@ def InDetTRT_TrackExtensionTool_xkCfg(flags, name='InDetTRT_ExtensionTool', **kw
         kwargs.setdefault("DriftCircleCutTool", InDetTRTDriftCircleCutForPatternReco)
 
     if 'RIOonTrackToolYesDr' not in kwargs :
-        kwargs.setdefault("RIOonTrackToolYesDr", acc.getPrimaryAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
+        kwargs.setdefault("RIOonTrackToolYesDr", acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
 
     if 'RoadTool' not in kwargs :
         InDetTRT_RoadMaker = acc.popToolsAndMerge(InDetTRT_RoadMakerCfg(flags))
-        acc.addPublicTool(InDetTRT_RoadMaker)
         kwargs.setdefault("RoadTool", InDetTRT_RoadMaker)
 
     kwargs.setdefault("TRT_ClustersContainer", 'TRT_DriftCircles') # InDetKeys.TRT_DriftCircles()
@@ -1096,7 +1065,7 @@ def InDetTRT_TrackExtensionTool_xkCfg(flags, name='InDetTRT_ExtensionTool', **kw
 def InDetWeightCalculatorCfg(name='InDetWeightCalculator', **kwargs):
     acc = ComponentAccumulator()
     the_name = makeName( name, kwargs)
-    acc.addPublicTool(CompFactory.Trk.DAF_SimpleWeightCalculator(name = the_name, **kwargs), primary = True)
+    acc.setPrivateTools(CompFactory.Trk.DAF_SimpleWeightCalculator(name = the_name, **kwargs))
     return acc
 
 def InDetCompetingTRT_DC_ToolCfg(flags, name='InDetCompetingTRT_DC_Tool', **kwargs):
@@ -1108,11 +1077,11 @@ def InDetCompetingTRT_DC_ToolCfg(flags, name='InDetCompetingTRT_DC_Tool', **kwar
         kwargs.setdefault("Extrapolator", acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags)))
 
     if 'ToolForWeightCalculation' not in kwargs :
-        InDetWeightCalculator = acc.getPrimaryAndMerge(InDetWeightCalculatorCfg())
+        InDetWeightCalculator = acc.popToolsAndMerge(InDetWeightCalculatorCfg())
         kwargs.setdefault("ToolForWeightCalculation", InDetWeightCalculator)
 
     if 'ToolForTRT_DriftCircleOnTrackCreation' not in kwargs :
-        kwargs.setdefault("ToolForTRT_DriftCircleOnTrackCreation", acc.getPrimaryAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
+        kwargs.setdefault("ToolForTRT_DriftCircleOnTrackCreation", acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackToolCfg(flags)))
 
     acc.setPrivateTools(CompFactory.InDet.CompetingTRT_DriftCirclesOnTrackTool( the_name, **kwargs))
     return acc
@@ -1133,7 +1102,6 @@ def InDetTRT_TrackExtensionTool_DAFCfg(flags, name='TRT_TrackExtensionTool_DAF',
 
     if 'CompetingDriftCircleTool' not in kwargs :
         InDetCompetingTRT_DC_Tool = acc.popToolsAndMerge(InDetCompetingTRT_DC_ToolCfg(flags))
-        acc.addPublicTool(InDetCompetingTRT_DC_Tool)
         kwargs.setdefault("CompetingDriftCircleTool", InDetCompetingTRT_DC_Tool)
 
     if 'PropagatorTool' not in kwargs :
@@ -1142,7 +1110,6 @@ def InDetTRT_TrackExtensionTool_DAFCfg(flags, name='TRT_TrackExtensionTool_DAF',
 
     if 'RoadTool' not in kwargs :
         InDetTRT_RoadMaker = acc.popToolsAndMerge(InDetTRT_RoadMakerCfg(flags)) 
-        acc.addPublicTool(InDetTRT_RoadMaker)
         kwargs.setdefault("RoadTool", InDetTRT_RoadMaker)
 
     kwargs.setdefault("TRT_DriftCircleContainer", 'TRT_DriftCircles') # InDetKeys.TRT_DriftCircles()
@@ -1176,7 +1143,6 @@ def InDetRotCreatorDigitalCfg(flags, name='InDetRotCreatorDigital', **kwargs) :
 
         ToolPixelCluster = acc.popToolsAndMerge(InDetPixelClusterOnTrackToolDigitalCfg(flags, **pix_cluster_on_track_args))
         kwargs.setdefault('ToolPixelCluster', ToolPixelCluster)
-        acc.addPublicTool(ToolPixelCluster)
 
     acc.setPrivateTools(acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name=name, **kwargs)))
     return acc
@@ -1184,7 +1150,7 @@ def InDetRotCreatorDigitalCfg(flags, name='InDetRotCreatorDigital', **kwargs) :
 def InDetTrackSummaryToolNoHoleSearchCfg(flags, name='InDetTrackSummaryToolNoHoleSearch',**kwargs) :
     acc = ComponentAccumulator()
     kwargs.setdefault('doHolesInDet', False)
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags, name=name, **kwargs))
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags, name=name, **kwargs))
     acc.setPrivateTools(InDetTrackSummaryTool)
     return acc
 
@@ -1202,8 +1168,7 @@ def InDetAmbiScoringToolBaseCfg(flags, name='InDetAmbiScoringTool', **kwargs) :
     from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
     kwargs.setdefault("Extrapolator", acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags)))
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
 
     if 'DriftCircleCutTool' not in kwargs :
         InDetTRTDriftCircleCutForPatternReco = acc.getPrimaryAndMerge(InDetTRTDriftCircleCutForPatternRecoCfg(flags))
@@ -1229,8 +1194,7 @@ def InDetCosmicsScoringToolBaseCfg(flags, name='InDetCosmicsScoringTool', **kwar
     acc = ComponentAccumulator()
     the_name=makeName(name, kwargs)
 
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
-    acc.setPrivateTools(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
 
     kwargs.setdefault("nWeightedClustersMin", flags.InDet.Tracking.nWeightedClustersMin )
     kwargs.setdefault("minTRTHits", 0 )
@@ -1242,7 +1206,6 @@ def InDetCosmicsScoringToolBaseCfg(flags, name='InDetCosmicsScoringTool', **kwar
 def InDetTRT_ExtensionToolPhaseCfg(flags, name='InDetTRT_ExtensionToolPhase', **kwargs) :
     acc = ComponentAccumulator()
     InDetTRT_DriftCircleOnTrackUniversalTool = acc.popToolsAndMerge(InDetTRT_DriftCircleOnTrackUniversalToolCfg())
-    acc.addPublicTool(InDetTRT_DriftCircleOnTrackUniversalTool)
     if 'RIOonTrackToolYesDr' not in kwargs :
         kwargs.setdefault("RIOonTrackToolYesDr", InDetTRT_DriftCircleOnTrackUniversalTool)
 
@@ -1269,7 +1232,6 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name='InDetSiComTrackFinder', **kwar
 
     from  InDetConfig.InDetRecToolConfig import InDetBoundaryCheckToolCfg
     InDetBoundaryCheckTool = acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags))
-    acc.addPublicTool(InDetBoundaryCheckTool)
 
     kwargs.setdefault("PropagatorTool",  InDetPatternPropagator)
     kwargs.setdefault("UpdatorTool", InDetPatternUpdator)
@@ -1287,7 +1249,6 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name='InDetSiComTrackFinder', **kwar
 def InDetCosmicScoringTool_TRTCfg(flags, name='InDetCosmicExtenScoringTool',**kwargs) :
     acc = ComponentAccumulator()
     InDetTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(InDetTrackSummaryToolNoHoleSearchCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryToolNoHoleSearch)
 
     kwargs.setdefault("minTRTHits", flags.InDet.Tracking.minSecondaryTRTonTrk)
     kwargs.setdefault("SummaryTool", InDetTrackSummaryToolNoHoleSearch)
@@ -1368,11 +1329,9 @@ def InDetRotCreatorDBMCfg(flags, name='InDetRotCreatorDBM', **kwargs) :
 
         if flags.Detector.EnablePixel and flags.InDet.loadRotCreator:
             ToolPixelCluster = InDetPixelClusterOnTrackToolDBMCfg(flags, pix_cluster_on_track_args)
-            acc.addPublicTool(ToolPixelCluster)
             kwargs.setdefault('ToolPixelCluster', ToolPixelCluster)
         else :
             ToolPixelCluster= InDetPixelClusterOnTrackToolCfg(flags, **pix_cluster_on_track_args)
-            acc.addPublicTool(ToolPixelCluster)
             kwargs.setdefault('ToolPixelCluster', ToolPixelCluster)
 
     acc.setPrivateTools(acc.popToolsAndMerge(InDetRotCreatorCfg(flags, name=name, **kwargs)))
@@ -1381,7 +1340,7 @@ def InDetRotCreatorDBMCfg(flags, name='InDetRotCreatorDBM', **kwargs) :
 def PRDtoTrackMapToolCfg(name='PRDtoTrackMapTool',**kwargs) :
     acc = ComponentAccumulator()
     the_name = makeName( name, kwargs)
-    acc.addPublicTool(CompFactory.Trk.PRDtoTrackMapTool( name=the_name, **kwargs), primary=True)
+    acc.setPrivateTools(CompFactory.Trk.PRDtoTrackMapTool( name=the_name, **kwargs))
     return acc
 
 def InDetNNScoringToolBaseCfg(flags, name='InDetNNScoringTool', **kwargs) :
@@ -1396,9 +1355,7 @@ def InDetNNScoringToolBaseCfg(flags, name='InDetNNScoringTool', **kwargs) :
 
     from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
     InDetExtrapolator = acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags))
-
-    InDetTrackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryTool)
+    InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
 
     if 'DriftCircleCutTool' not in kwargs :
         InDetTRTDriftCircleCutForPatternReco = acc.getPrimaryAndMerge(InDetTRTDriftCircleCutForPatternRecoCfg(flags))
diff --git a/InnerDetector/InDetConfig/python/TrackingCutsFlags.py b/InnerDetector/InDetConfig/python/TrackingCutsFlags.py
index b8a03642b3de2acb62822710b9bd968778af3206..f5a05909f9e945c69af136b773a122e494a0b78f 100644
--- a/InnerDetector/InDetConfig/python/TrackingCutsFlags.py
+++ b/InnerDetector/InDetConfig/python/TrackingCutsFlags.py
@@ -377,6 +377,7 @@ def createITkTrackingFlags():
     icf.extension               = ""
 
     icf.useEtaDepCuts           = True
+    icf.maxEta                  = 4.0
     icf.etaBins                 = [-1.0, 2.0, 2.6, 4.0]
     icf.minPT                   = [0.9 * Units.GeV, 0.4 * Units.GeV, 0.4 * Units.GeV]
 
diff --git a/InnerDetector/InDetConfig/python/TrackingSiPatternConfig.py b/InnerDetector/InDetConfig/python/TrackingSiPatternConfig.py
index 78636d0e78893bbc47822c18e8ac0be85492719b..18f8620154e392a96cafd20893d39bcd2187f3e4 100644
--- a/InnerDetector/InDetConfig/python/TrackingSiPatternConfig.py
+++ b/InnerDetector/InDetConfig/python/TrackingSiPatternConfig.py
@@ -112,7 +112,6 @@ def SiZvertexMaker_xkCfg(flags, name="InDetZvertexMaker", InputCollections = Non
     
     InDetSiSpacePointsSeedMaker = acc.popToolsAndMerge(SiSpacePointsSeedMakerCfg(flags, 
                                                                                  InputCollections = InputCollections ))
-    acc.addPublicTool(InDetSiSpacePointsSeedMaker)
 
     kwargs.setdefault("SeedMakerTool", InDetSiSpacePointsSeedMaker)
     if flags.InDet.doHeavyIon:
@@ -160,7 +159,6 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name="InDetSiComTrackFinder", **kwar
 
     from  InDetConfig.InDetRecToolConfig import InDetBoundaryCheckToolCfg
     boundary_check_tool = acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags))
-    acc.addPublicTool(boundary_check_tool)
 
     kwargs.setdefault("PropagatorTool", InDetPatternPropagator)
     kwargs.setdefault("UpdatorTool", InDetPatternUpdator)
@@ -180,7 +178,6 @@ def SiCombinatorialTrackFinder_xkCfg(flags, name="InDetSiComTrackFinder", **kwar
 
     if flags.Detector.EnableSCT:
         InDetSCT_ConditionsSummaryTool = CompFactory.SCT_ConditionsSummaryTool(name = 'InDetSCT_ConditionsSummaryTool')
-        acc.addPublicTool(InDetSCT_ConditionsSummaryTool)
         kwargs.setdefault("SctSummaryTool", InDetSCT_ConditionsSummaryTool)
     else:
         kwargs.setdefault("SctSummaryTool", None)
@@ -193,7 +190,6 @@ def SiTrackMaker_xkCfg(flags, name="InDetSiTrackMaker", InputCollections = None,
     acc = ComponentAccumulator()
     useBremMode = flags.InDet.Tracking.extension == "Offline" or flags.InDet.Tracking.extension == "DBM"
     InDetSiDetElementsRoadMaker = acc.popToolsAndMerge(SiDetElementsRoadMaker_xkCfg(flags))
-    acc.addPublicTool(InDetSiDetElementsRoadMaker)
 
     if flags.InDet.Tracking.usePixel:
         acc.addCondAlgo( CompFactory.InDet.SiDetElementBoundaryLinksCondAlg_xk( name = "InDetSiDetElementBoundaryLinksPixelCondAlg",
@@ -207,7 +203,6 @@ def SiTrackMaker_xkCfg(flags, name="InDetSiTrackMaker", InputCollections = None,
                                                                                 WriteKey = "SCT_DetElementBoundaryLinks_xk") )
 
     track_finder = acc.popToolsAndMerge(SiCombinatorialTrackFinder_xkCfg(flags))
-    acc.addPublicTool(track_finder)
 
     #
     # --- decide if use the association tool
@@ -282,7 +277,7 @@ def SiTrackMaker_xkCfg(flags, name="InDetSiTrackMaker", InputCollections = None,
     if flags.InDet.doStoreTrackSeeds:
         InDet_SeedToTrackConversion = CompFactory.InDet.SeedToTrackConversionTool(  name = "InDet_SeedToTrackConversion",
                                                                                     OutputName = 'SiSPSeedSegments' + flags.InDet.Tracking.extension)
-        acc.addPublicTool(InDet_SeedToTrackConversion)
+        acc.setPrivateTools(InDet_SeedToTrackConversion)
         kwargs.setdefault("SeedToTrackConversion", InDet_SeedToTrackConversion)
         kwargs.setdefault("SeedSegmentsWrite", True)
 
@@ -312,14 +307,11 @@ def SiSPSeededTrackFinderCfg(flags, name="InDetSiSpTrackFinder", InputCollection
 
     InDetSiTrackMaker = acc.popToolsAndMerge(SiTrackMaker_xkCfg(flags,
                                                                 InputCollections = InputCollections ))
-    acc.addPublicTool(InDetSiTrackMaker)
  
-    InDetTrackSummaryToolNoHoleSearch = acc.popToolsAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
-    acc.addPublicTool(InDetTrackSummaryToolNoHoleSearch)
+    InDetTrackSummaryToolNoHoleSearch = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolNoHoleSearchCfg(flags))
 
     InDetSiSpacePointsSeedMaker = acc.popToolsAndMerge(SiSpacePointsSeedMakerCfg(flags, 
                                                                                  InputCollections = InputCollections ))
-    acc.addPublicTool(InDetSiSpacePointsSeedMaker)
 
     #
     # --- Z-coordinates primary vertices finder (only for collisions)
@@ -327,7 +319,6 @@ def SiSPSeededTrackFinderCfg(flags, name="InDetSiSpTrackFinder", InputCollection
     if flags.InDet.useZvertexTool and flags.InDet.Tracking.extension != "DBM":
         InDetZvertexMaker = acc.popToolsAndMerge(SiZvertexMaker_xkCfg(flags,
                                                  InputCollections = InputCollections))
-        acc.addPublicTool(InDetZvertexMaker)
     else:
         InDetZvertexMaker = None
 
@@ -394,7 +385,6 @@ def InDetAmbiTrackSelectionToolCfg(flags, name="InDetAmbiTrackSelectionTool", **
         kwargs.setdefault("DriftCircleCutTool", InDetTRTDriftCircleCut)
 
     InDetPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags))
-    acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
 
     kwargs.setdefault("AssociationTool" , InDetPRDtoTrackMapToolGangedPixels)
     kwargs.setdefault("minHits"         , flags.InDet.Tracking.minClusters)
@@ -454,17 +444,13 @@ def DenseEnvironmentsAmbiguityScoreProcessorToolCfg(flags, name = "InDetAmbiguit
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetNNScoringToolSiCfg(flags))
     else:
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetAmbiScoringToolSiCfg(flags))
-    acc.addPublicTool(InDetAmbiScoringTool)
-
 
     from InDetConfig.SiliconPreProcessing import NnPixelClusterSplitProbToolCfg
     NnPixelClusterSplitProbTool = acc.popToolsAndMerge(NnPixelClusterSplitProbToolCfg(flags))
-    acc.addPublicTool(NnPixelClusterSplitProbTool)
 
     InDetPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags))
-    acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
 
-    PRDtoTrackMapTool = acc.getPrimaryAndMerge(TC.PRDtoTrackMapToolCfg())
+    PRDtoTrackMapTool = acc.popToolsAndMerge(TC.PRDtoTrackMapToolCfg())
 
     prob1 = flags.InDet.pixelClusterSplitProb1
     prob2 = flags.InDet.pixelClusterSplitProb2
@@ -513,7 +499,6 @@ def DenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProc
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetNNScoringToolSiCfg(flags))
     else:
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetAmbiScoringToolSiCfg(flags))
-    acc.addPublicTool(InDetAmbiScoringTool)
 
     use_low_pt_fitter =  True if flags.InDet.Tracking.extension == "LowPt" or flags.InDet.Tracking.extension == "VeryLowPt" or (flags.InDet.Tracking.extension == "Pixel" and flags.InDet.doMinBias) else False
     
@@ -526,17 +511,14 @@ def DenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProc
         fitter_args.setdefault("DoHoleSearch", True)
         from  InDetConfig.InDetRecToolConfig import InDetBoundaryCheckToolCfg
         InDetBoundaryCheckTool = acc.popToolsAndMerge(InDetBoundaryCheckToolCfg(flags))
-        acc.addPublicTool(InDetBoundaryCheckTool)
         fitter_args.setdefault("BoundaryCheckTool", InDetBoundaryCheckTool)
 
     fitter_list=[]
     if not use_low_pt_fitter:
         InDetTrackFitterAmbi = acc.popToolsAndMerge(TC.InDetTrackFitterCfg(flags, name='InDetTrackFitter'+'Ambi'+flags.InDet.Tracking.extension, **fitter_args))
-        acc.addPublicTool(InDetTrackFitterAmbi)
         fitter_list.append(InDetTrackFitterAmbi)
     else:
         InDetTrackFitterLowPt = acc.popToolsAndMerge(TC.InDetTrackFitterLowPt(flags, name='InDetTrackFitterLowPt'+flags.InDet.Tracking.extension, **fitter_args))
-        acc.addPublicTool(InDetTrackFitterLowPt)
         fitter_list.append(InDetTrackFitterLowPt)
 
     if flags.InDet.doRefitInvalidCov: 
@@ -544,32 +526,25 @@ def DenseEnvironmentsAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProc
             fitter_args = {}
             fitter_args.setdefault("SplitClusterMapExtension", flags.InDet.Tracking.extension)
             KalmanFitter = acc.popToolsAndMerge(TC.KalmanFitterCfg(flags, name='KalmanFitter'+flags.InDet.Tracking.extension, **fitter_args))
-            acc.addPublicTool(KalmanFitter)
             fitter_list.append(KalmanFitter)
 
             ReferenceKalmanFitter = acc.popToolsAndMerge(TC.ReferenceKalmanFitterCfg(flags, name='ReferenceKalmanFitter'+flags.InDet.Tracking.extension, **fitter_args))
-            acc.addPublicTool(ReferenceKalmanFitter)
             fitter_list.append(ReferenceKalmanFitter)
         else:
             KalmanFitter = acc.popToolsAndMerge(TC.KalmanFitterCfg(flags))
-            acc.addPublicTool(KalmanFitter)
             fitter_list.append(KalmanFitter)
 
             ReferenceKalmanFitter = acc.popToolsAndMerge(TC.ReferenceKalmanFitterCfg(flags))
-            acc.addPublicTool(ReferenceKalmanFitter)
             fitter_list.append(ReferenceKalmanFitter)
 
     InDetPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags))
-    acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
 
-    ambi_track_summary_tool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg( flags,
-                                                                                namePrefix                  = 'InDetAmbiguityProcessorSplitProb',
-                                                                                nameSuffix                  = flags.InDet.Tracking.extension,
-                                                                                ClusterSplitProbabilityName = 'InDetAmbiguityProcessorSplitProb'+flags.InDet.Tracking.extension))
-    acc.addPublicTool(ambi_track_summary_tool)
+    ambi_track_summary_tool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg( flags,
+                                                                                  namePrefix                  = 'InDetAmbiguityProcessorSplitProb',
+                                                                                  nameSuffix                  = flags.InDet.Tracking.extension,
+                                                                                  ClusterSplitProbabilityName = 'InDetAmbiguityProcessorSplitProb'+flags.InDet.Tracking.extension))
 
     InDetAmbiTrackSelectionTool = acc.popToolsAndMerge(InDetAmbiTrackSelectionToolCfg(flags))
-    acc.addPublicTool(InDetAmbiTrackSelectionTool)
 
     kwargs.setdefault("Fitter", fitter_list)
     kwargs.setdefault("AssociationTool", InDetPRDtoTrackMapToolGangedPixels)
@@ -606,22 +581,17 @@ def SimpleAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProcessor", Clu
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetNNScoringToolSiCfg(flags))
     else:
         InDetAmbiScoringTool = acc.popToolsAndMerge(TC.InDetAmbiScoringToolSiCfg(flags))
-    acc.addPublicTool(InDetAmbiScoringTool)
 
     InDetTrackFitter = acc.popToolsAndMerge(TC.InDetTrackFitterCfg(flags))
-    acc.addPublicTool(InDetTrackFitter)
 
     InDetPRDtoTrackMapToolGangedPixels = acc.popToolsAndMerge(TC.InDetPRDtoTrackMapToolGangedPixelsCfg(flags))
-    acc.addPublicTool(InDetPRDtoTrackMapToolGangedPixels)
 
-    ambi_track_summary_tool = acc.popToolsAndMerge(TC.InDetTrackSummaryToolCfg( flags,
+    ambi_track_summary_tool = acc.getPrimaryAndMerge(TC.InDetTrackSummaryToolCfg( flags,
                                                                                 namePrefix                  = 'InDetAmbiguityProcessorSplitProb',
                                                                                 nameSuffix                  = flags.InDet.Tracking.extension,
                                                                                 ClusterSplitProbabilityName = 'InDetAmbiguityProcessorSplitProb'+flags.InDet.Tracking.extension))
-    acc.addPublicTool(ambi_track_summary_tool)
 
     InDetAmbiTrackSelectionTool = acc.popToolsAndMerge(InDetAmbiTrackSelectionToolCfg(flags))
-    acc.addPublicTool(InDetAmbiTrackSelectionTool)
 
     kwargs.setdefault("Fitter", InDetTrackFitter)
     kwargs.setdefault("AssociationTool", InDetPRDtoTrackMapToolGangedPixels)
@@ -646,7 +616,6 @@ def SimpleAmbiguityProcessorToolCfg(flags, name = "InDetAmbiguityProcessor", Clu
             pass
         else:
             InDetTrackFitterLowPt = acc.popToolsAndMerge(TC.InDetTrackFitterLowPt(flags))
-            acc.addPublicTool(InDetTrackFitterLowPt)
             kwargs.setdefault("Fitter", InDetTrackFitterLowPt)
 
     if flags.InDet.materialInteractions:
@@ -667,7 +636,6 @@ def TrkAmbiguityScoreCfg(flags, name="InDetAmbiguityScore", SiSPSeededTrackColle
 
     if flags.InDet.doTIDE_Ambi and not (flags.InDet.Tracking.extension == "ForwardTracks" or flags.InDet.Tracking.extension == "DBM"):
         InDetAmbiguityScoreProcessor = acc.popToolsAndMerge(DenseEnvironmentsAmbiguityScoreProcessorToolCfg(flags))
-        acc.addPublicTool(InDetAmbiguityScoreProcessor)
     else:
         InDetAmbiguityScoreProcessor = None
 
@@ -690,11 +658,9 @@ def TrkAmbiguitySolverCfg(flags, name="InDetAmbiguitySolver", ResolvedTrackColle
     # DenseEnvironmentsAmbiguityProcessorTool
         InDetAmbiguityProcessor = acc.popToolsAndMerge(DenseEnvironmentsAmbiguityProcessorToolCfg(  flags,
                                                                                                     ClusterSplitProbContainer=ClusterSplitProbContainer))
-        acc.addPublicTool(InDetAmbiguityProcessor)
     else:
         InDetAmbiguityProcessor = acc.popToolsAndMerge(SimpleAmbiguityProcessorToolCfg( flags,
                                                                                         ClusterSplitProbContainer=ClusterSplitProbContainer))
-        acc.addPublicTool(InDetAmbiguityProcessor)
     
     #
     # --- configure Ambiguity solver
diff --git a/InnerDetector/InDetConfig/python/VertexFindingConfig.py b/InnerDetector/InDetConfig/python/VertexFindingConfig.py
index 2072cd78b116e8ba0f6b2e95283e7144d25199b7..bbe12511c263033a9389e83fdbed499b83fa8b48 100644
--- a/InnerDetector/InDetConfig/python/VertexFindingConfig.py
+++ b/InnerDetector/InDetConfig/python/VertexFindingConfig.py
@@ -23,8 +23,7 @@ def primaryVertexFindingCfg(flags):
     acc.merge(actsGeoAcc)
 
     trackExtrapolator = acc.getPrimaryAndMerge(ActsExtrapolationToolCfg(flags))
-
-    trackSummaryTool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
+    trackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
 
     # TODO find out which of the settings below need to be picked from flags
     trackSelector = CompFactory.InDet.InDetTrackSelectionTool(
diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
index be06c20fc52f2cd3d948871b1204bd1a3c980999..c73530757ca323d26cfe30dba9f3f947e2274f26 100644
--- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
+++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/src/SiDetectorElement.cxx
@@ -475,26 +475,28 @@ namespace InDetDD {
     //Since these are barrel, endcap, sensor-type, specific, might be better for these to be calculated in the design()
     //However, not clear how one could do that for the annulus calculation which uses global frame
     double sinStereo = 0.;
+    auto designShape = m_siDesign->shape();
     if (isBarrel()) {
       sinStereo = this->phiAxis().z();
     } else { // endcap
-      if (m_siDesign->shape() == InDetDD::Annulus) { //built-in Stereo angle for Annulus shape sensor
-	Amg::Vector3D sensorCenter = m_siDesign->sensorCenter();
-	//Below retrieved method will return -sin(m_Stereo), thus sinStereolocal = sin(m_Stereo)
-	double sinStereoReco = - (m_siDesign->sinStripAngleReco(sensorCenter[1], sensorCenter[0]));
-	double cosStereoReco = sqrt(1-sinStereoReco*sinStereoReco); 
-	double radialShift = sensorCenter[0]; 
-	//The focus of all strips in the local reco frame
-	Amg::Vector2D localfocus(-radialShift*sinStereoReco, radialShift - radialShift*cosStereoReco);
-	//The focus of all strips in the global frame
-	Amg::Vector3D globalfocus(globalPosition(localfocus));
-	//The direction of x-axis of the Strip frame in the global frame
-        const Amg::Vector3D& center = this->center();
-	Amg::Vector3D globalSFxAxis =(center - globalfocus)/radialShift;
-	//Stereo angle is the angle between global radial direction and the x-axis of the Strip frame in the global frame 
-	sinStereo = (center.y() * globalSFxAxis.x() - center.x() * globalSFxAxis.y()) / center.perp();   
+      if (designShape == InDetDD::Annulus) { //built-in Stereo angle for Annulus shape sensor
+        Amg::Vector3D sensorCenter = m_siDesign->sensorCenter();
+        //Below retrieved method will return -sin(m_Stereo), thus sinStereolocal = sin(m_Stereo)
+        double sinStereoReco = - (m_siDesign->sinStripAngleReco(sensorCenter[1], sensorCenter[0]));
+        double cosStereoReco = sqrt(1-sinStereoReco*sinStereoReco); 
+        double radialShift = sensorCenter[0]; 
+        //The focus of all strips in the local reco frame
+        Amg::Vector2D localfocus(-radialShift*sinStereoReco, radialShift - radialShift*cosStereoReco);
+        //The focus of all strips in the global frame
+        Amg::Vector3D globalfocus(globalPosition(localfocus));
+        //The direction of x-axis of the Strip frame in the global frame
+              const Amg::Vector3D& center = this->center();
+        Amg::Vector3D globalSFxAxis =(center - globalfocus)/radialShift;
+        //Stereo angle is the angle between global radial direction and the x-axis of the Strip frame in the global frame 
+        sinStereo = (center.y() * globalSFxAxis.x() - center.x() * globalSFxAxis.y()) / center.perp();   
       }
-      else {
+      // else if (designShape == InDetDD::PolarAnnulus) {} // Polar specialisation in future
+      else { // barrel
         const Amg::Vector3D& etaAxis = this->etaAxis();
         const Amg::Vector3D& center = this->center();
         sinStereo = (center.y() * etaAxis.x() - center.x() * etaAxis.y()) / center.perp();
diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/InDetTrackingGeometry/StagedTrackingGeometryBuilderCond.h b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/InDetTrackingGeometry/StagedTrackingGeometryBuilderCond.h
index 94686369065212e59d53f6777e1525ef0d44c14d..16ca9f3684988592fbdce6ab1c669d2789ff8340 100644
--- a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/InDetTrackingGeometry/StagedTrackingGeometryBuilderCond.h
+++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/InDetTrackingGeometry/StagedTrackingGeometryBuilderCond.h
@@ -267,8 +267,11 @@ struct LayerSetupCond
       // ID container                                                            
       std::string                                    m_exitVolume;                //!< the final ID container             
       
-      // remove HGTD volume from ID tracking geometry
+      // Make room for HGTD (3420 mm < |z| < 3545 mm) within the ID tracking geometry volume
+      // This will be filled by the dedicated HGTD Tracking Geometry Builder 
+      // and volumes will be glued when the combined tracking geometry is built
       bool                                           m_removeHGTD;
+      float                                          m_zMinHGTD;
   };
 
   inline void StagedTrackingGeometryBuilderCond::checkForInsert(std::vector<double>& radii, double radius) const {
diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/StagedTrackingGeometryBuilderCond.cxx b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/StagedTrackingGeometryBuilderCond.cxx
index c7cb7dd949dbfc938841f6d7b2c77548587617ba..5bab69eb93c27fc08ef8a4c4efaabc14348d5107 100644
--- a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/StagedTrackingGeometryBuilderCond.cxx
+++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/StagedTrackingGeometryBuilderCond.cxx
@@ -50,7 +50,8 @@ InDet::StagedTrackingGeometryBuilderCond::StagedTrackingGeometryBuilderCond(cons
   m_ringTolerance(10*Gaudi::Units::mm),
   m_namespace("InDet::"),
   m_exitVolume("InDet::Containers::InnerDetector"),
-  m_removeHGTD(false)
+  m_removeHGTD(false),
+  m_zMinHGTD(3420.0)
 {
   declareInterface<Trk::IGeometryBuilderCond>(this);  
   // layer builders and their configurations
@@ -79,6 +80,7 @@ InDet::StagedTrackingGeometryBuilderCond::StagedTrackingGeometryBuilderCond(cons
   declareProperty("ExitVolumeName",                   m_exitVolume);
   // Remove HGTD volume from ID tracking geometry
   declareProperty("RemoveHGTD",                       m_removeHGTD);
+  declareProperty("ZminHGTD",                         m_zMinHGTD);
 }
 
 // destructor
@@ -153,17 +155,7 @@ InDet::StagedTrackingGeometryBuilderCond::trackingGeometry ATLAS_NOT_THREAD_SAFE
      // If running with the HGTD, we don't want to include its volume
      // as it will be included in another tracking geometry.
      // re-evaluating the ID envelope dimension
-     float envelopeVolumeHalfZatBp = envelopeVolumeHalfZ;
-     // now scan the beampipe envelopes, if there is something smalles, pick it.
-     const RZPairVector& envelopeBeamPipeDefs = m_enclosingEnvelopeSvc->getBeamPipeRZBoundary();
-     float beampipeR = envelopeDefs[0].first;
-     for (const auto & bounds : envelopeBeamPipeDefs) {
-       if (float(bounds.first) == beampipeR and std::abs(bounds.second)<envelopeVolumeHalfZatBp) {
-         envelopeVolumeHalfZatBp = std::abs(bounds.second);
-       }
-     }
-     if (envelopeVolumeHalfZatBp<envelopeVolumeHalfZ)
-       envelopeVolumeHalfZ = envelopeVolumeHalfZatBp; 
+     envelopeVolumeHalfZ = m_zMinHGTD; 
    }
    
    ATH_MSG_VERBOSE("       -> envelope R/Z defined as : " << envelopeVolumeRadius << " / " << envelopeVolumeHalfZ );
diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/TRT_LayerBuilder.cxx b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/TRT_LayerBuilder.cxx
index f5b98f68e1256d4cdc1331a6a3c6eee89ffcdc00..85018e76729724d2b522c8284503733040263201 100644
--- a/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/TRT_LayerBuilder.cxx
+++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometry/src/TRT_LayerBuilder.cxx
@@ -37,7 +37,7 @@
 #include <map>
 
 namespace {
- //cppcheck-ignore ctuOneDefinitionRuleViolation
+ // cppcheck-suppress ctuOneDefinitionRuleViolation
   template <class T>
   class PtrVectorWrapper
   {
diff --git a/InnerDetector/InDetDetDescr/PLRGeoModelXml/src/PLRGmxInterface.cxx b/InnerDetector/InDetDetDescr/PLRGeoModelXml/src/PLRGmxInterface.cxx
index 84f8ac7a86b950aa51970372e28d18a6cf7c3e7e..7acc67dce4e07123084c51326ccdb6e7713b8e77 100644
--- a/InnerDetector/InDetDetDescr/PLRGeoModelXml/src/PLRGmxInterface.cxx
+++ b/InnerDetector/InDetDetDescr/PLRGeoModelXml/src/PLRGmxInterface.cxx
@@ -24,9 +24,9 @@ PLRGmxInterface::PLRGmxInterface(PixelDetectorManager *detectorManager,
 {}
 
 
-void PLRGmxInterface::addSensorType(std::string clas,
-                                    std::string typeName,
-                                    std::map<std::string, std::string> parameters)
+void PLRGmxInterface::addSensorType(const std::string& clas,
+                                    const std::string& typeName,
+                                    const std::map<std::string, std::string>& parameters)
 {
   ATH_MSG_DEBUG("addSensorType called for class " << clas << ", typeName " << typeName);
   // only load the sensor type that the PLR will use
diff --git a/InnerDetector/InDetDetDescr/PLRGeoModelXml/src/PLRGmxInterface.h b/InnerDetector/InDetDetDescr/PLRGeoModelXml/src/PLRGmxInterface.h
index 3528a1701e0e853c67d02919f4a3afe67f3e58b5..986e04582f8f09fa2f36d72759d5e70d02ca3e8a 100644
--- a/InnerDetector/InDetDetDescr/PLRGeoModelXml/src/PLRGmxInterface.h
+++ b/InnerDetector/InDetDetDescr/PLRGeoModelXml/src/PLRGmxInterface.h
@@ -28,9 +28,9 @@ public:
                   SiCommonItems *commonItems,
                   WaferTree *moduleTree);
 
-  virtual void addSensorType(std::string clas,
-                             std::string typeName,
-                             std::map<std::string, std::string> parameters) override final;
+  virtual void addSensorType(const std::string& clas,
+                             const std::string& typeName,
+                             const std::map<std::string, std::string>& parameters) override final;
 
 private:
   void makePLRModule(const std::string& typeName,
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModelXml/PixelGeoModelXml/PixelGmxInterface.h b/InnerDetector/InDetDetDescr/PixelGeoModelXml/PixelGeoModelXml/PixelGmxInterface.h
index 89e2bf055b9e0bc408183497cdc0f9bc1e5d010c..10fa52d180bb825933fe270864d987a7a77aed0d 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModelXml/PixelGeoModelXml/PixelGmxInterface.h
+++ b/InnerDetector/InDetDetDescr/PixelGeoModelXml/PixelGeoModelXml/PixelGmxInterface.h
@@ -30,10 +30,10 @@ public:
                     WaferTree *moduleTree);
 
   virtual int sensorId(std::map<std::string, int> &index) const override final;
-  virtual void addSensorType(std::string clas,
-                             std::string typeName,
-                             std::map<std::string, std::string> parameters) override;
-  virtual void addSensor(std::string typeName,
+  virtual void addSensorType(const std::string& clas,
+                             const std::string& typeName,
+                             const std::map<std::string, std::string>& parameters) override;
+  virtual void addSensor(const std::string& typeName,
                          std::map<std::string, int> &index,
                          int sequentialId,
                          GeoVFullPhysVol *fpv) override final;
@@ -43,12 +43,12 @@ public:
   //                           GeoAlignableTransform *transform) override final;
 
   std::shared_ptr<const PixelDiodeMatrix> buildMatrix(double phiPitch, double etaPitch,
-                                                      double phiPitchLong, double phiPitchEnd,
-                                                      double etaPitchLong, double etaPitchEnd,
-                                                      int nPhiLong, int nPhiEnd,
-                                                      int nEtaLong, int nEtaEnd,
-                                                      int circuitsPhi, int circuitsEta,
-                                                      int diodeColPerCirc, int diodeRowPerCirc) const;
+						      double phiPitchLong, double phiPitchEnd,
+						      double etaPitchLong, double etaPitchEnd,
+						      int nPhiLong, int nPhiEnd,
+						      int nEtaLong, int nEtaEnd,
+						      int circuitsPhi, int circuitsEta,
+						      int diodeColPerCirc, int diodeRowPerCirc) const;
 
 protected:
   std::map<std::string, int> m_geometryMap;
diff --git a/InnerDetector/InDetDetDescr/PixelGeoModelXml/src/PixelGmxInterface.cxx b/InnerDetector/InDetDetDescr/PixelGeoModelXml/src/PixelGmxInterface.cxx
index 7ab37b3869482b71c0a694f21030365a288d97c9..1bc98f01214983e0ed32d03237a27d0c7e3754fb 100644
--- a/InnerDetector/InDetDetDescr/PixelGeoModelXml/src/PixelGmxInterface.cxx
+++ b/InnerDetector/InDetDetDescr/PixelGeoModelXml/src/PixelGmxInterface.cxx
@@ -74,9 +74,9 @@ int PixelGmxInterface::sensorId(std::map<std::string, int> &index) const
 }
 
 
-void PixelGmxInterface::addSensorType(std::string clas,
-                                      std::string typeName,
-                                      std::map<std::string, std::string> parameters)
+void PixelGmxInterface::addSensorType(const std::string& clas,
+                                      const std::string& typeName,
+                                      const std::map<std::string, std::string>& parameters)
 {
   ATH_MSG_DEBUG("addSensorType called for class " << clas << ", typeName " << typeName);
 
@@ -182,7 +182,7 @@ void PixelGmxInterface::makePixelModule(const std::string &typeName,
 }
 
 
-void PixelGmxInterface::addSensor(std::string typeName,
+void PixelGmxInterface::addSensor(const std::string& typeName,
                                   std::map<std::string, int> &index,
                                   int /*sensitiveId*/,
                                   GeoVFullPhysVol *fpv)
diff --git a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/StripStereoAnnulusDesign.cxx b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/StripStereoAnnulusDesign.cxx
index 91aced7afe6f31120ec01df604f94154c1995267..b4356af7e9e91d3113f84126ca4078fc4883f65b 100644
--- a/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/StripStereoAnnulusDesign.cxx
+++ b/InnerDetector/InDetDetDescr/SCT_ReadoutGeometry/src/StripStereoAnnulusDesign.cxx
@@ -456,7 +456,8 @@ void StripStereoAnnulusDesign::distanceToDetectorEdge(SiLocalPosition const & po
 
 DetectorShape StripStereoAnnulusDesign::shape() const
  {
-   return InDetDD::Annulus;
+   if (m_usePC) return InDetDD::PolarAnnulus;
+   else         return InDetDD::Annulus;
  }
 
 double StripStereoAnnulusDesign::stripLength(const InDetDD::SiCellId &cellId) const
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.cxx b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.cxx
index f1a0f3bf516acfde6d70bc6e41b0c4f509f4556d..f456535199ae4e5eb58c576477bb5b34f279510b 100644
--- a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.cxx
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.cxx
@@ -96,9 +96,9 @@ int StripGmxInterface::splitSensorId(std::map<std::string, int> &index,
 }
 
 
-void StripGmxInterface::addSensorType(std::string clas,
-                                      std::string typeName,
-                                      std::map<std::string, std::string> parameters)
+void StripGmxInterface::addSensorType(const std::string& clas,
+                                      const std::string& typeName,
+                                      const std::map<std::string, std::string>& parameters)
 {
   ATH_MSG_DEBUG("addSensorType called for class " << clas << ", typeName " << typeName);
 
@@ -439,7 +439,7 @@ void StripGmxInterface::makeStereoAnnulus(const std::string &typeName,
   }
 }
 
-void StripGmxInterface::addSplitSensor(std::string typeName,
+void StripGmxInterface::addSplitSensor(const std::string& typeName,
                                        std::map<std::string, int> &index,
                                        std::pair<std::string, int> &extraIndex,
                                        int /* hitIdOfWafer */,
@@ -510,7 +510,7 @@ void StripGmxInterface::addSplitSensor(std::string typeName,
 }
 
 
-void StripGmxInterface::addSensor(std::string typeName,
+void StripGmxInterface::addSensor(const std::string& typeName,
                                   std::map<std::string, int> &index,
                                   int /* sensitiveId */,
                                   GeoVFullPhysVol *fpv)
diff --git a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.h b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.h
index b824965eff10b5f378e48d15e4802ddc560cd6ea..8ccc6d16395188dc2b6148f9361a69872c69ad7b 100644
--- a/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.h
+++ b/InnerDetector/InDetDetDescr/StripGeoModelXml/src/StripGmxInterface.h
@@ -36,14 +36,14 @@ public:
   virtual int splitSensorId(std::map<std::string, int> &index,
                             std::pair<std::string, int> &extraIndex,
                             std::map<std::string, int> &updatedIndex) const override final;
-  virtual void addSensorType(std::string clas,
-                             std::string typeName,
-                             std::map<std::string, std::string> parameters) override final;
-  void addSensor(std::string typeName,
+  virtual void addSensorType(const std::string& clas,
+                             const std::string& typeName,
+                             const std::map<std::string, std::string>& parameters) override final;
+  void addSensor(const std::string& typeName,
                  std::map<std::string, int> &index,
                  int sequentialId,
                  GeoVFullPhysVol *fpv) override final;
-  void addSplitSensor(std::string typeName,
+  void addSplitSensor(const std::string& typeName,
                       std::map<std::string, int> &index,
                       std::pair<std::string, int> &extraIndex,
                       int sequentialId,
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
index f0b645d6cc1d020a0ae976415737dd7b9d2bca83..2cf68c9ef00d9b5417441bd8701e10030e7e7a9a 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SensorSimPlanarTool.cxx
@@ -35,7 +35,7 @@ SensorSimPlanarTool::SensorSimPlanarTool(const std::string& type, const std::str
 
   // This is a waste in some cases, but we need at most 3x3 elements
   // Reserving 9 removes the need to allocate new memory multipe time thus speeding up the code a bit
-  m_centrePixelNNEtaPhi.reserve(9);
+  m_centrePixelNNEtaPhi.resize(9);
 }
 
 SensorSimPlanarTool::~SensorSimPlanarTool() { }
@@ -259,7 +259,7 @@ StatusCode SensorSimPlanarTool::induceCharge(const TimedHitPtr<SiHit>& phit,
   //*** Now diffuse charges to surface *** //
   //**************************************//
   // pre-make HepMcParticleLink
-  auto particleLink = HepMcParticleLink(phit->trackNumber(), phit.eventId(), evColl, idxFlag, ctx);
+  const auto particleLink = HepMcParticleLink(phit->trackNumber(), phit.eventId(), evColl, idxFlag, ctx);
   const double pHitTime = hitTime(phit);
 
   const double halfEtaPitch = 0.5*Module.etaPitch();
@@ -276,9 +276,15 @@ StatusCode SensorSimPlanarTool::induceCharge(const TimedHitPtr<SiHit>& phit,
       trappingTimes = m_radDamageUtil->getTrappingTimes(fluenceData->getFluenceLayer(layer));
     }
 
+    const PixelHistoConverter& distanceMap_e    = m_doInterpolateEfield ? m_distanceMap_e[layer] : fluenceData->getDistanceMap_e(layer);
+    const PixelHistoConverter& distanceMap_h    = m_doInterpolateEfield ? m_distanceMap_h[layer] : fluenceData->getDistanceMap_h(layer);
+    const PixelHistoConverter& lorentzMap_e     = m_doInterpolateEfield ? m_lorentzMap_e[layer] : fluenceData->getLorentzMap_e(layer);
+    const PixelHistoConverter& lorentzMap_h     = m_doInterpolateEfield ? m_lorentzMap_h[layer] : fluenceData->getLorentzMap_h(layer);
+    const PixelHistoConverter& ramoPotentialMap = m_doInterpolateEfield ? m_ramoPotentialMap[layer] : fluenceData->getRamoPotentialMap(layer);
+
+    std::map<unsigned, std::pair<SiLocalPosition, double>> cachedChargeMap; 
     std::map<unsigned, SiCellId> diodeCellMap;
-    for (size_t i = 0; i < trfHitRecord.size(); i++) {
-      std::pair<double, double> const& iHitRecord = trfHitRecord[i];
+    for (const auto& iHitRecord : trfHitRecord) {
 
       double eta_i = eta_0;
       double phi_i = phi_0;
@@ -311,12 +317,6 @@ StatusCode SensorSimPlanarTool::induceCharge(const TimedHitPtr<SiHit>& phit,
 
       std::array<double, 3> sensorScales{};
 
-      const PixelHistoConverter& distanceMap_e    = m_doInterpolateEfield ? m_distanceMap_e[layer] : fluenceData->getDistanceMap_e(layer);
-      const PixelHistoConverter& distanceMap_h    = m_doInterpolateEfield ? m_distanceMap_h[layer] : fluenceData->getDistanceMap_h(layer);
-      const PixelHistoConverter& lorentzMap_e     = m_doInterpolateEfield ? m_lorentzMap_e[layer] : fluenceData->getLorentzMap_e(layer);
-      const PixelHistoConverter& lorentzMap_h     = m_doInterpolateEfield ? m_lorentzMap_h[layer] : fluenceData->getLorentzMap_h(layer);
-      const PixelHistoConverter& ramoPotentialMap = m_doInterpolateEfield ? m_ramoPotentialMap[layer] : fluenceData->getRamoPotentialMap(layer);
-
       const std::size_t distance_f_e_bin_x = distanceMap_e.getBinX(dist_electrode);
       const std::size_t distance_f_h_bin_x = distanceMap_h.getBinX(dist_electrode);
       const std::size_t tanLorentz_e_bin_x = lorentzMap_e.getBinX(dist_electrode);
@@ -466,29 +466,33 @@ StatusCode SensorSimPlanarTool::induceCharge(const TimedHitPtr<SiHit>& phit,
             // this variable ^ can be used to apply some cut to skip the loop
             const double induced_charge = potentialDiff * energy_per_step * eleholePairEnergy;
 
-            //Collect charge in centre of each pixel, since location within pixel doesn't matter for record
-            const SiLocalPosition& chargePos = Module.hitLocalToLocal(centrePixelNN.first, centrePixelNN.second);
-
-            //The following lines are adapted from SiDigitization's Inserter class
-            const SiSurfaceCharge scharge(
-              chargePos,
-              SiCharge(induced_charge, pHitTime, SiCharge::track, particleLink)
-              );
-
             unsigned key = (static_cast<unsigned>(pixel_eta-p) << 16) | static_cast<unsigned>(pixel_phi-q);
-            auto diodeIterator = diodeCellMap.find(key);
-            if(diodeIterator == diodeCellMap.end()) diodeIterator = diodeCellMap.insert(std::make_pair(key, Module.cellIdOfPosition(scharge.position()))).first;
-            const SiCellId& diode = diodeIterator->second;
-
-            if (diode.isValid()) {
-              const SiCharge& charge = scharge.charge();
-              chargedDiodes.add(diode, charge);
-            } //IF
-
+            auto cacheIterator = cachedChargeMap.find(key);
+            if(cacheIterator == cachedChargeMap.end()) {
+              cachedChargeMap.insert(std::make_pair(key, std::make_pair(Module.hitLocalToLocal(centrePixelNN.first, centrePixelNN.second), induced_charge)));
+            } else {
+              cacheIterator->second.second += induced_charge;
+            }
           } //For q
         } //for p
       }//end cycle for charge
     } //trfHitRecord.size()
+
+    std::for_each(cachedChargeMap.begin(), cachedChargeMap.end(), [&diodeCellMap, &Module, &chargedDiodes, &pHitTime, &particleLink](auto& pos_charge_pair){
+      auto& key = pos_charge_pair.first;
+      auto& chargePos = pos_charge_pair.second.first;
+      auto& charge_value = pos_charge_pair.second.second;
+
+      const SiSurfaceCharge scharge(chargePos, SiCharge(charge_value, pHitTime, SiCharge::track, particleLink));
+      auto diodeIterator = diodeCellMap.find(key);
+      if(diodeIterator == diodeCellMap.end()) diodeIterator = diodeCellMap.insert(std::make_pair(key, Module.cellIdOfPosition(scharge.position()))).first;
+      const SiCellId& thisDiode = diodeIterator->second;
+      if (thisDiode.isValid()) {
+        const SiCharge& charge = scharge.charge();
+        chargedDiodes.add(thisDiode, charge);
+      }
+    });
+
   } 
   else { //If no radDamage, run original
     for (size_t i = 0; i < trfHitRecord.size(); i++) {
diff --git a/InnerDetector/InDetDigitization/SiDigitization/SiDigitization/InducedChargeModel.h b/InnerDetector/InDetDigitization/SiDigitization/SiDigitization/InducedChargeModel.h
index aef862e485f3bf369d8899daec3645bce74dff5a..de42bf536146c341ef10191a08c3231012d99ac2 100644
--- a/InnerDetector/InDetDigitization/SiDigitization/SiDigitization/InducedChargeModel.h
+++ b/InnerDetector/InDetDigitization/SiDigitization/SiDigitization/InducedChargeModel.h
@@ -13,7 +13,6 @@
 //-----------------------------------------------
 
 // Athena
-#include "AthenaKernel/IAtRndmGenSvc.h"
 #include "AthenaKernel/MsgStreamMember.h"
 #include "Identifier/IdentifierHash.h"
 #include "InDetConditionsSummaryService/ISiliconConditionsTool.h"
@@ -69,12 +68,12 @@ class InducedChargeModel {
                                const EFieldModel model,
                                const ToolHandle<ISiliconConditionsTool> siConditionsTool,
                                CLHEP::HepRandomEngine* rndmEngine,
-                               const EventContext& ctx) {
-      m_VD = vdepl; // full depletion voltage [Volt] negative for type-P
-      m_VB = vbias; // applied bias voltage [Volt]
-      m_element = element;
-      m_magneticField = magneticField;
-
+                               const EventContext& ctx) :
+      m_VD (vdepl), // full depletion voltage [Volt] negative for type-P
+      m_VB (vbias), // applied bias voltage [Volt]
+      m_element (element),
+      m_magneticField (magneticField)
+    {
       //------------ find delepletion deph for model=0 and 1 -------------
       m_depletion_depth = bulk_depth;
       // for type N (before type inversion)
diff --git a/InnerDetector/InDetDigitization/SiDigitization/SiDigitization/SiHelper.h b/InnerDetector/InDetDigitization/SiDigitization/SiDigitization/SiHelper.h
index af65b4e784ad134cb020e195f02c85c5a6b71a0c..63f5fbeffd69634ce42690a5ca00e3eed1e6de75 100755
--- a/InnerDetector/InDetDigitization/SiDigitization/SiDigitization/SiHelper.h
+++ b/InnerDetector/InDetDigitization/SiDigitization/SiDigitization/SiHelper.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /*************************************************************************
@@ -153,7 +153,7 @@ inline void SiHelper::SetTimeBin(SiChargedDiode& chDiode, int time, MsgStream* l
   if (time > 0xf) {
     if (log) (*log) << MSG::ERROR << "TimeBin not allowed" << endmsg;
   }
-  chDiode.m_word = chDiode.m_word | ( (time&0xf) <<28 )  ;
+  chDiode.m_word = chDiode.m_word | ( (static_cast<unsigned int>(time)&0xf) <<28 )  ;
 }
 
 ////////////////////////////////////////////////////////////
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
index c00d442b6d1652e8e0174483e003ae7d2dd3e284..2434f0fa592bf354cf258aca63beed892d8c41b4 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
@@ -20,7 +20,7 @@
 //#define PIXEL_DEBUG ;
 namespace {
   constexpr unsigned long long operator"" _BIT(unsigned long long bitPosition){
-    return 1 << bitPosition;
+    return 1ull << bitPosition;
   }
 }
 
@@ -168,11 +168,11 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
         Definition of the status words in a ROB fragment header is found in
            https://twiki.cern.ch/twiki/bin/view/Atlas/ROBINFragmentErrors#Definition_of_the_first_status_e
       */
-      if ((*rob_status) & (0x1 << 27)) {
+      if ((*rob_status) & (0x1u << 27)) {
          propagateROBErrorsToModules(pixCabling.cptr(),robId,bsErrWord,decodingErrors,PixelByteStreamErrors::TruncatedROB, "data truncation");
          return StatusCode::RECOVERABLE;
       }
-      if ((*rob_status) & (0x1 << 31)) {
+      if ((*rob_status) & (0x1u << 31)) {
          propagateROBErrorsToModules(pixCabling.cptr(),robId,bsErrWord,decodingErrors,PixelByteStreamErrors::MaskedROB, "resource was masked off");
          return StatusCode::RECOVERABLE;
       }
@@ -538,6 +538,10 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
             // computing the FE number on the silicon wafer for IBL ( mFE is = 0 for IBL 3D and the lower-eta FE on the planar sensor,
             // while is = 1 for the higher-eta FE on the planar sensor)
             mFE = getLocalFEI4(fe_IBLheader, onlineId);
+            if (m_pixelReadout->getModuleType(pixCabling->find_entry_onoff(onlineId))==InDetDD::PixelModuleType::IBL_3D) {
+              mFE = 0;
+            }
+
           } // end of the if (isIBLModule || isDBMModule)
           else { // Pixel Hit Case
 
diff --git a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py
index 5025bb19b40385f0a7f162edd071ec7712eb49b0..c48f4e15ccfeea280f489498323b695e6be877ec 100644
--- a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py
@@ -587,8 +587,6 @@ class  ConfiguredNewTrackingSiPattern:
               InDetAmbiguityScoreProcessor.sharedProbCut2            = prob2
               if NewTrackingCuts.extension() == "":
                  InDetAmbiguityScoreProcessor.SplitClusterMap_old  = ""
-              elif NewTrackingCuts.extension() == "Disappearing":
-                 InDetAmbiguityScoreProcessor.SplitClusterMap_old  = InDetKeys.SplitClusterAmbiguityMap()
               InDetAmbiguityScoreProcessor.SplitClusterMap_new  = InDetKeys.SplitClusterAmbiguityMap()+NewTrackingCuts.extension()
 
          if NewTrackingCuts.mode() == "Pixel" or NewTrackingCuts.mode() == "DBM":
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalBCMTool.h b/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalBCMTool.h
index a8683abc6cb2d44c9307694916b4bec303d35b0f..816599a923cdc0aadeccd3af7198a4b8955eb89c 100755
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalBCMTool.h
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoring/src/InDetGlobalBCMTool.h
@@ -137,7 +137,7 @@ private:
     //LB
     unsigned int m_current_LB{};
 };
-    //cppcheck-ignore ctuOneDefinitionRuleViolation
+    //cppcheck-suppress ctuOneDefinitionRuleViolation
     class deltat_data{
     public: 
       unsigned int bcid;
diff --git a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
index b5759b35013d24f05e7559e8b6bd13f9211bf8c2..98efaaf9956675d57fdd58e4ed4fa788ec52bb7f 100644
--- a/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
+++ b/InnerDetector/InDetMonitoring/InDetGlobalMonitoringRun3Test/python/InDetGlobalMonitoringRun3TestConfig.py
@@ -48,10 +48,8 @@ def InDetGlobalMonitoringRun3TestConfig(flags):
         inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.CutLevel         = "TightPrimary"
         inDetGlobalTrackMonAlg.Tight_TrackSelectionTool.minPt            = 5000
         
-
-        # Run 3 configs - stolen from SCT
-        from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-        InDetTrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags))
+        from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+        InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
         inDetGlobalTrackMonAlg.TrackSummaryTool = InDetTrackSummaryTool
         inDetGlobalTrackMonAlg.TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool
         inDetGlobalTrackMonAlg.TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
@@ -84,10 +82,8 @@ def InDetGlobalMonitoringRun3TestConfig(flags):
         inDetGlobalLRTMonAlg.TrackSelectionTool.maxNPixelHoles   = 1
         inDetGlobalLRTMonAlg.TrackSelectionTool.minPt            = 5000
         
-
-        # Run 3 configs - stolen from SCT
-        from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-        InDetTrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags))
+        from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+        InDetTrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
         inDetGlobalLRTMonAlg.TrackSummaryTool = InDetTrackSummaryTool
         inDetGlobalLRTMonAlg.TrackSelectionTool.TrackSummaryTool = InDetTrackSummaryTool
         inDetGlobalLRTMonAlg.TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/python/PixelMonitoringConfig.py b/InnerDetector/InDetMonitoring/PixelMonitoring/python/PixelMonitoringConfig.py
index a851454434c74c9e06df3b175fe4f798573997c0..2f5de62a66b641b54d8260c485321f82080413fe 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/python/PixelMonitoringConfig.py
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/python/PixelMonitoringConfig.py
@@ -52,9 +52,8 @@ def PixelMonitoringConfig(flags):
         pixelAthClusterMonAlg.TrackSelectionTool.maxD0            = 2
         pixelAthClusterMonAlg.TrackSelectionTool.maxZ0            = 150
 
-        # Run 3 configs - stolen from SCT
-        from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-        pixelAthClusterMonAlg.TrackSelectionTool.TrackSummaryTool = acc.popToolsAndMerge(TrackSummaryToolWorkaround(flags))
+        from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+        pixelAthClusterMonAlg.TrackSelectionTool.TrackSummaryTool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
         pixelAthClusterMonAlg.TrackSelectionTool.Extrapolator     = acc.getPublicTool("InDetExtrapolator")
         
         
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTErrMonAlg.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTErrMonAlg.py
index 211a50a9c7c7fe4cebf929e912ff3057d7120fb4..4dfcfe87808e4c9a43abcf7a5add1fa6f2a93416 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTErrMonAlg.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTErrMonAlg.py
@@ -24,6 +24,9 @@ def SCTErrMonAlgConfig(inputFlags):
     from SCT_ConditionsTools.SCT_ConditionsToolsConfig import SCT_ConditionsSummaryToolCfg
     myMonAlg.SCT_ConditionsSummaryTool = result.popToolsAndMerge( SCT_ConditionsSummaryToolCfg(inputFlags) )
 
+    # Pass the InDet.useDCS flag to the algorithm
+    myMonAlg.UseDCS = inputFlags.InDet.useDCS
+
     ## The following does not work when running Reco_tf.py
     ## because it configures condition algorithms
     ## and they conflict with ones configured in the old framework.
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTLorentzMonAlg.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTLorentzMonAlg.py
index 71b4c2175a239fd3b393f22a892c4e66c59cfce8..7dc2155ecbc7b4e70c193b69edd6f9b039fd79f8 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTLorentzMonAlg.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTLorentzMonAlg.py
@@ -46,8 +46,8 @@ def SCTLorentzMonAlgConfig(inputFlags):
     # myMonAlg.RandomHist = True
 
     # Set InDetTrackSummaryTool to TrackSummaryTool of SCTLorentzMonAlg
-    from .TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-    myMonAlg.TrackSummaryTool = result.popToolsAndMerge(TrackSummaryToolWorkaround(inputFlags))
+    from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+    myMonAlg.TrackSummaryTool = result.getPrimaryAndMerge(InDetTrackSummaryToolCfg(inputFlags))
 
     ### STEP 4 ###
     # Add some tools. N.B. Do not use your own trigger decion tool. Use the
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTTracksMonAlg.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTTracksMonAlg.py
index 327e5736d23c1ca5a3406aa8e0a66fe839fb5262..90132c5a100779bc548272d8d6b0f1f75945443e 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTTracksMonAlg.py
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/SCTTracksMonAlg.py
@@ -51,9 +51,8 @@ def SCTTracksMonAlgConfig(inputFlags):
     myMonAlg.TriggerChain = ''
     # myMonAlg.RandomHist = True
 
-    # Set InDetTrackSummaryTool to TrackSummaryTool of SCTLorentzMonAlg
-    from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-    myMonAlg.TrackSummaryTool = result.popToolsAndMerge(TrackSummaryToolWorkaround(inputFlags))
+    from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+    myMonAlg.TrackSummaryTool = result.getPrimaryAndMerge(InDetTrackSummaryToolCfg(inputFlags))
 
     ### STEP 4 ###
     # Add some tools. N.B. Do not use your own trigger decion tool. Use the
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py b/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py
deleted file mode 100644
index e88e0e5a7595b5857885e8caecb94e83f194cb8b..0000000000000000000000000000000000000000
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/python/TrackSummaryToolWorkaround.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-#
-
-'''@file TrackingConfigurationWorkaround.py
-@author Peter Onyisi
-@date 2019-12-17
-@brief Centralize the DQ workarounds for setting up ID tracking tools in new-style config, until this is provided centrally
-'''
-from AthenaConfiguration.ComponentFactory import CompFactory
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from InDetConfig import TrackingCommonConfig
-
-def TrackSummaryToolWorkaround(flags):
-    result = ComponentAccumulator()
-    result.setPrivateTools( result.popToolsAndMerge(TrackingCommonConfig.InDetTrackSummaryToolCfg(flags) ) )
-
-    # To run job only with ID
-    if hasattr(flags, "Detector") and hasattr(flags.Detector, "GeometryMuon") and hasattr(flags.Detector, "GeometryID"):
-        TrkEventCnvSuperTool = CompFactory.Trk.EventCnvSuperTool(name = "EventCnvSuperTool",
-                                                                 DoMuons = flags.Detector.GeometryMuon,
-                                                                 DoID = flags.Detector.GeometryID)
-        result.addPublicTool(TrkEventCnvSuperTool)
-
-    return result
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py
index 4dadf06bdf7583fd6e7164c8fd0b267e1acea57a..07f9f30bbdf46a5fefabf717275e9dab5fa39148 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3ESD_Alg.py
@@ -35,10 +35,8 @@ def TRTMonitoringRun3ESD_AlgConfig(inputFlags):
     result.merge(addFoldersSplitOnline(inputFlags, "TRT","/TRT/Onl/Calib/RT","/TRT/Calib/RT",className="TRTCond::RtRelationMultChanContainer"))
     result.merge(addFoldersSplitOnline(inputFlags, "TRT","/TRT/Onl/Calib/T0","/TRT/Calib/T0",className="TRTCond::StrawT0MultChanContainer"))
 
-    ############################## WORKAROUND (START) ##########################
-    from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-    algTRTMonitoringRun3ESD.TrackSummaryTool = result.popToolsAndMerge(TrackSummaryToolWorkaround(inputFlags))
-    ############################## WORKAROUND (END) ############################
+    from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+    algTRTMonitoringRun3ESD.TrackSummaryTool = result.getPrimaryAndMerge(InDetTrackSummaryToolCfg(inputFlags))
 
 #     # To run job only with ID
 #    if hasattr(inputFlags, "Detector") and hasattr(inputFlags.Detector, "GeometryMuon") and hasattr(inputFlags.Detector, "GeometryID"):
@@ -230,7 +228,7 @@ if __name__ == '__main__':
 
     # Set the Athena configuration flags
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
-    nightly = '/afs/cern.ch/work/n/nbelyaev/DQ/Datafiles/'
+    nightly = '/afs/cern.ch/work/n/nbelyaev/public/Datafiles/'
     file = 'data18_13TeV.00349944.physics_Main.daq.ESD._lb0244._f1138._0001.root'
     ConfigFlags.Input.Files = [nightly+file]
     ConfigFlags.Input.isMC = False
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
index 394ffb603e7698f437c5ed9787c73bf62921b465..25dd54b10d2957346c7f592c31f3cbc5c5cf9abb 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py
@@ -48,8 +48,8 @@ def TRTMonitoringRun3RAW_AlgConfig(inputFlags):
 
     # @TODO really run the TRT hole search ? Hole search still seems to use a condition service
     if isRun3Cfg():
-        from SCT_Monitoring.TrackSummaryToolWorkaround import TrackSummaryToolWorkaround
-        algTRTMonitoringRun3RAW.TrackSummaryTool = rv.popToolsAndMerge(TrackSummaryToolWorkaround(inputFlags))
+        from InDetConfig.TrackingCommonConfig import InDetTrackSummaryToolCfg
+        algTRTMonitoringRun3RAW.TrackSummaryTool = rv.getPrimaryAndMerge(InDetTrackSummaryToolCfg(inputFlags))
         algTRTMonitoringRun3RAW.trt_hole_search= rv.popToolsAndMerge( TRTHoleSearchCfg(inputFlags) )
     else :
         algTRTMonitoringRun3RAW.trt_hole_search=TRTHoleSearch()
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTPostProcessing.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTPostProcessing.py
index 94c2d45b494b2dda30ab98cd69f185670c9f4231..ba9c524f1e68d5cab6689d62c3e85cc37690de1c 100644
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTPostProcessing.py
+++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTPostProcessing.py
@@ -76,4 +76,45 @@ def hHitOnTrackVsAll(inputs):
                         rh.SetBinContent(j + 1, plot2.GetBinContent(j + 1)/(plot0.GetBinContent(j + 1)*plot1.GetBinContent(j + 1)))
                     else:
                         rh.SetBinContent(j + 1, 0)
+    return [rh]
+
+def hEfficiency(inputs):
+    import ROOT
+    region = inputs[0][0]['region']
+    side = inputs[0][0]['side']
+    if region == 'Barrel':
+        name  = 'hEfficiencyBarrel' + str(side)
+    if region == 'Endcap':
+        name  = 'hEfficiencyEndCap' + str(side)
+    rh = ROOT.TH1F(name, 'Straw Efficiency (' + name[11:] + ')', 500, -0.01, 1.01)
+    rh.GetXaxis().SetTitle('Efficiency')
+    rh.GetYaxis().SetTitle('Number of Straws')
+    for i in range(len(inputs[0][1])):
+        plots = [_[1][i] for _ in inputs]
+        for plot in plots:
+            for nStraw in range(plot.GetXaxis().GetNbins()):
+                rh.Fill(plot.GetBinContent(nStraw + 1))
+    return [rh]
+
+def hEfficiencyIntegral(inputs):
+    import ROOT
+    region = inputs[0][0]['region']
+    side = inputs[0][0]['side']
+    if region == 'Barrel':
+        name  = 'hEfficiencyBarrel' + str(side)
+    if region == 'Endcap':
+        name  = 'hEfficiencyEndCap' + str(side)
+    rh = ROOT.TH1F(name, 'Straw Efficiency (' + name[11:] + ')', 500, -0.01, 1.01)
+    rh.GetXaxis().SetTitle('Efficiency')
+    rh.GetYaxis().SetTitle('Fraction of Straws')
+    for i in range(len(inputs[0][1])):
+        plots = [_[1][i] for _ in inputs]
+        for plot in plots:
+            for nStraw in range(plot.GetXaxis().GetNbins()):
+                rh.Fill(plot.GetBinContent(nStraw + 1))
+    totalEntries = 0.
+    entries = rh.GetEntries()
+    for nStraw in range(rh.GetXaxis().GetNbins()):
+        totalEntries += rh.GetBinContent(nStraw + 1)
+        rh.SetBinContent(nStraw + 1, totalEntries/float(entries))
     return [rh]
\ No newline at end of file
diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TrackSummaryToolWorkaround.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TrackSummaryToolWorkaround.py
deleted file mode 100644
index 85b0035e06528072fccc0b60f95613f70af91534..0000000000000000000000000000000000000000
--- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TrackSummaryToolWorkaround.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-#
-
-'''@file TrackingConfigurationWorkaround.py
-@author Peter Onyisi
-@date 2019-12-17
-@brief Centralize the DQ workarounds for setting up ID tracking tools in new-style config, until this is provided centrally
-'''
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from InDetConfig import TrackingCommonConfig
-
-def TrackSummaryToolWorkaround(flags):
-    result = ComponentAccumulator()
-    result.setPrivateTools( result.popToolsAndMerge(TrackingCommonConfig.InDetTrackSummaryToolCfg(flags) ) )
-    return result
diff --git a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/InDetBoundaryCheckTool/InDetBoundaryCheckTool.h b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/InDetBoundaryCheckTool/InDetBoundaryCheckTool.h
index 4ca60caf55505839a7a05a3519b14fe8565f238b..72b8f3ab22faa75999d49b703e8f9d6ee3828493 100644
--- a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/InDetBoundaryCheckTool/InDetBoundaryCheckTool.h
+++ b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/InDetBoundaryCheckTool/InDetBoundaryCheckTool.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+ * Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
  */
 
 #ifndef ATHENA_INNERDETECTOR_TOOLS_BOUNDARYCHECKTOOL
@@ -61,7 +61,13 @@ namespace InDet {
                 "SCT_ConditionsSummaryTool/InDetSCT_ConditionsSummaryTool",
                 "Tool to retrieve SCT Conditions summary"
             };
-            ToolHandle<IInDetTestPixelLayerTool> m_pixelLayerTool;
+
+            ToolHandle<IInDetTestPixelLayerTool> m_pixelLayerTool{
+                this,
+                "PixelLayerTool",
+		"InDet::InDetTestPixelLayerTool",
+		"Tool to retrieve pixel conditions summary"
+	    };
 
             const AtlasDetectorID *m_atlasId;
 
diff --git a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/src/InDetBoundaryCheckTool.cxx b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/src/InDetBoundaryCheckTool.cxx
index 4d71c8d5fa1e0eb441e86efb9aed491c01ef18e9..f34cf63e67e5d6663ca6bf3d9ae4f54479fa31b6 100644
--- a/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/src/InDetBoundaryCheckTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetBoundaryCheckTool/src/InDetBoundaryCheckTool.cxx
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+ * Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
  */
 
 #include "TrkToolInterfaces/IBoundaryCheckTool.h"
@@ -14,12 +14,10 @@ InDet::InDetBoundaryCheckTool::InDetBoundaryCheckTool(
 ):
     AthAlgTool(t, n, p),
     m_geoModelSvc("GeoModelSvc", n),
-    m_pixelLayerTool("InDet::InDetTestPixelLayerTool"),
     m_atlasId(nullptr)
 {
     declareInterface<IBoundaryCheckTool>(this);
     declareProperty("GeoModelService", m_geoModelSvc);
-    declareProperty("PixelLayerTool", m_pixelLayerTool);
 }
 
 StatusCode InDet::InDetBoundaryCheckTool::initialize() {
diff --git a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/InDetCompetingRIOsOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool.h b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/InDetCompetingRIOsOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool.h
index 77b327196b487753a5489c38e7520dc3b1ea901f..cb7ddb87ec2cda5deab291ecd5edc1df23324171 100755
--- a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/InDetCompetingRIOsOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool.h
+++ b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/InDetCompetingRIOsOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool.h
@@ -30,13 +30,15 @@
 #include "EventPrimitives/EventPrimitives.h"
 #include "GeoPrimitives/GeoPrimitives.h"
 
+// interfaces
+#include "TrkExInterfaces/IExtrapolator.h"
+#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
+#include "TrkToolInterfaces/IWeightCalculator.h"
+
 namespace Trk {
   class LocalParameters;
   class Surface;
   class PrepRawData;
-  class IRIO_OnTrackCreator;
-  class IWeightCalculator;
-  class IExtrapolator;
 }
 
 
@@ -129,14 +131,17 @@ private:
     // Private data:
     ///////////////////////////////////////////////////////////////////
 
-    ToolHandle< Trk::IRIO_OnTrackCreator >  m_TRT_ROTCreator;   //!< Det-specific ROT creation for TRT
+    ToolHandle< Trk::IRIO_OnTrackCreator >  m_TRT_ROTCreator
+      {this, "ToolForTRT_DriftCircleOnTrackCreation", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool", "TRT_DriftCircleOnTrackCreator needed for the creation of CompetingPixelClustersOnTrack"};   //!< Det-specific ROT creation for TRT
 
-    ToolHandle< Trk::IWeightCalculator >    m_weightCalculator; //!< Weight calculator tool for assignment probabilities
+    ToolHandle< Trk::IWeightCalculator >    m_weightCalculator
+      {this, "ToolForWeightCalculation", "Trk::DAF_SimpleWeightCalculator/DAF_WeightCalculator", "Tool for weight (assignment probability) calculation"}; //!< Weight calculator tool for assignment probabilities
 
     double m_jo_EndCapCutValue;                                  //!< job option set cutValue of assignment probabilities for TRT end-cap
     double m_jo_BarrelCutValue;                                  //!< job option set cutValue of assignment probabilities for barrel TRT
 
-    ToolHandle< Trk::IExtrapolator >        m_extrapolator;     //!<  the Extrapolator tool
+    PublicToolHandle< Trk::IExtrapolator >        m_extrapolator
+      {this, "Extrapolator", "Trk::Extrapolator/AtlasExtrapolator", "Extrapolator tool"};     //!<  the Extrapolator tool
 
     ///////////////////////////////////////////////////////////////////
     // Private functions:
diff --git a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/src/CompetingTRT_DriftCirclesOnTrackTool.cxx b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/src/CompetingTRT_DriftCirclesOnTrackTool.cxx
index 1c0f018dabcbf01f3932dee8fc0708e289a6cd8f..cef6454ee6df9ba4d2e979f27c967edb91c8b2a5 100755
--- a/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/src/CompetingTRT_DriftCirclesOnTrackTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetCompetingRIOsOnTrackTool/src/CompetingTRT_DriftCirclesOnTrackTool.cxx
@@ -23,11 +23,6 @@
 #include "InDetPrepRawData/TRT_DriftCircle.h"
 #include "InDetCompetingRIOsOnTrack/CompetingTRT_DriftCirclesOnTrack.h"
 
-// interfaces
-#include "TrkExInterfaces/IExtrapolator.h"
-#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
-#include "TrkToolInterfaces/IWeightCalculator.h"
-
 //
 #include <cmath>
 
@@ -39,18 +34,12 @@ InDet::CompetingTRT_DriftCirclesOnTrackTool::CompetingTRT_DriftCirclesOnTrackToo
     const std::string& ty,
     const std::string& na,
     const IInterface* pa ) :
-        AthAlgTool(ty,na,pa),
-        m_TRT_ROTCreator("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"),
-        m_weightCalculator("Trk::DAF_SimpleWeightCalculator/DAF_WeightCalculator"),
-        m_extrapolator("Trk::Extrapolator/AtlasExtrapolator")
+        AthAlgTool(ty,na,pa)
 {
     declareInterface<ICompetingTRT_DriftCirclesOnTrackCreator>(this);
     declareInterface<ICompetingRIOsOnTrackTool>(this);
-    declareProperty("ToolForTRT_DriftCircleOnTrackCreation",m_TRT_ROTCreator,           "TRT_DriftCircleOnTrackCreator needed for the creation of CompetingPixelClustersOnTrack");
-    declareProperty("ToolForWeightCalculation",             m_weightCalculator,         "Tool for weight (assignment probability) calculation");
     declareProperty("WeightCutValueBarrel",                 m_jo_BarrelCutValue=6.66,    "lambda parameter (intrinsic roadwidth) for measurements in the Barrel part");
     declareProperty("WeightCutValueEndCap",                 m_jo_EndCapCutValue=6.66,    "lambda parameter (intrinsic roadwidth) for measurements in the EndCap part");
-    declareProperty("Extrapolator",                         m_extrapolator,             "Extrapolator tool");
 }
 
 ///////////////////////////////////////////////////////////////////
diff --git a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/python/InDetVKalVxInJetFinder.py b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/python/InDetVKalVxInJetFinder.py
index 6b1e538af3354f5bf7ab810936fe24d52b47f676..4571c7ced4b3844d6d6764bd31a124c331ba4f28 100644
--- a/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/python/InDetVKalVxInJetFinder.py
+++ b/InnerDetector/InDetRecTools/InDetVKalVxInJetTool/python/InDetVKalVxInJetFinder.py
@@ -31,15 +31,13 @@ class InDetVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ):
           from TrkParticleCreator.TrkParticleCreatorConf     import Trk__TrackParticleCreatorTool
           if hasattr(ToolSvc,'InDetTrackSummaryTool'):
             SVParticleCreatorTool = Trk__TrackParticleCreatorTool(name="SVParticleCreatorTool",
-                                                                  TrackSummaryTool="InDetTrackSummaryTool",
-                                                                  UseTrackSummaryTool=False )
+                                                                  TrackSummaryTool="" )
           else:
             from TrkTrackSummaryTool.AtlasTrackSummaryTool import AtlasTrackSummaryTool
             SVTrackSummaryTool = AtlasTrackSummaryTool(name="SVTrackSummaryTool")
             ToolSvc += SVTrackSummaryTool
             SVParticleCreatorTool = Trk__TrackParticleCreatorTool(name="SVParticleCreatorTool",
-                                                                  TrackSummaryTool=SVTrackSummaryTool,
-                                                                  UseTrackSummaryTool=False )
+                                                                  TrackSummaryTool="" )
           ToolSvc += SVParticleCreatorTool
           InDet__InDetVKalVxInJetTool.__init__( self, name = name,
                                                 VertexFitterTool     = SVertexFitterTool,
@@ -70,8 +68,7 @@ class AtlasVKalVxInJetFinder( InDet__InDetVKalVxInJetTool ):
         #
         from TrkParticleCreator.TrkParticleCreatorConf     import Trk__TrackParticleCreatorTool
         SVParticleCreatorTool = Trk__TrackParticleCreatorTool(name="SVParticleCreatorTool",
-                                                              TrackSummaryTool=SVAtlasTrackSummaryTool,
-                                                              UseTrackSummaryTool=False
+                                                              TrackSummaryTool=""
                                                              )
         ToolSvc += SVParticleCreatorTool
         #----------------------
diff --git a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/src/ITkStripClusterOnTrackTool.cxx b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/src/ITkStripClusterOnTrackTool.cxx
index 0906c8a557a11bc2e411b9f821b8e98b16edc0da..d020dd08b07d4e9a2369a1eb7f07824475cf9ad8 100755
--- a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/src/ITkStripClusterOnTrackTool.cxx
+++ b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/src/ITkStripClusterOnTrackTool.cxx
@@ -121,6 +121,8 @@ ITk::StripClusterOnTrackTool::correct
   const Trk::SurfaceBounds *bounds = &trackPar.associatedSurface().bounds();
   Trk::SurfaceBounds::BoundsType boundsType = bounds->type();
 
+  auto designShape = EL->design().shape();
+
   // Get local position of track
   //
   Amg::Vector2D loct = trackPar.localPosition();
@@ -231,7 +233,7 @@ ITk::StripClusterOnTrackTool::correct
     }
 
     // rotation for endcap ITkStrip
-    if (EL->design().shape() == InDetDD::Trapezoid || EL->design().shape() == InDetDD::Annulus) {
+    if (designShape == InDetDD::Trapezoid || designShape == InDetDD::Annulus) {
       double sn = EL->sinStereoLocal(SC->localPosition());
       double sn2 = sn * sn;
       double cs2 = 1. - sn2;
@@ -245,9 +247,12 @@ ITk::StripClusterOnTrackTool::correct
     }
     oldcov = mat;
   }
+  // else if (designShape == InDetDD::PolarAnnulus) {// polar rotation for endcap}
 
   Amg::MatrixX cov(oldcov);
-  if (EL->design().shape() != InDetDD::Trapezoid && EL->design().shape()!=InDetDD::Annulus) {                     // barrel
+  // barrel
+  // if (designShape != InDetDD::Trapezoid && designShape!=InDetDD::Annulus && designShape != InDetDD::PolarAnnulus) { 
+  if (designShape == InDetDD::Box) {
     Trk::DefinedParameter lpos1dim(SC->localPosition().x(), Trk::locX);
     locpar = (m_option_make2dimBarrelClusters)       ?
              Trk::LocalParameters(SC->localPosition()) :// PRDformation does 2-dim
@@ -261,9 +266,8 @@ ITk::StripClusterOnTrackTool::correct
       SG::ReadCondHandle<RIO_OnTrackErrorScaling> error_scaling( m_stripErrorScalingKey );
       cov = check_cast<SCTRIO_OnTrackErrorScaling>(*error_scaling)->getScaledCovariance( cov,  false, 0.0);
     }
-  } 
-
-  else {                                           // endcap
+  // } else if (designShape == InDetDD::PolarAnnulus) { // polar specialisation
+  } else {                                           // endcap
     locpar = Trk::LocalParameters(SC->localPosition());
     if (!m_stripErrorScalingKey.key().empty()) {
       SG::ReadCondHandle<RIO_OnTrackErrorScaling> error_scaling( m_stripErrorScalingKey );
diff --git a/InnerDetector/InDetRecTools/SiClusterizationTool/src/ClusterMakerTool.cxx b/InnerDetector/InDetRecTools/SiClusterizationTool/src/ClusterMakerTool.cxx
index 749fa29c77da87dfc0d88ef0640d02aad9970bc4..fef18a322a5237ec40953e2e4fb990e28e6a5ad7 100644
--- a/InnerDetector/InDetRecTools/SiClusterizationTool/src/ClusterMakerTool.cxx
+++ b/InnerDetector/InDetRecTools/SiClusterizationTool/src/ClusterMakerTool.cxx
@@ -536,8 +536,9 @@ ClusterMakerTool::sctCluster(const Identifier& clusterID,
 	  break;
 	}
 
+    auto designShape = element->design().shape();
 	// rotation for endcap SCT
-	if(element->design().shape() == InDetDD::Trapezoid || element->design().shape() == InDetDD::Annulus) {
+	if(designShape == InDetDD::Trapezoid || designShape == InDetDD::Annulus) {
           double sn      = element->sinStereoLocal(localPos); 
           double sn2     = sn*sn;
           double cs2     = 1.-sn2;
@@ -547,7 +548,7 @@ ClusterMakerTool::sctCluster(const Identifier& clusterID,
           errorMatrix.fillSymmetric(0,0,cs2*v0+sn2*v1);
           errorMatrix.fillSymmetric(0,1,sn*sqrt(cs2)*(v0-v1));
           errorMatrix.fillSymmetric(1,1,sn2*v0+cs2*v1);
-	}
+	} //else if (designShape == InDetDD::PolarAnnulus) {// Polar rotation for endcap}
 
         SCT_Cluster* newCluster = new SCT_Cluster(
           clusterID, locpos, rdoList, width, element, std::move(errorMatrix));
diff --git a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx
index a1c3f3d8fdafc030e6659ac82d9216031f1f9a7d..3665d411d5b4fc80e5969782771ff35b2c6952ef 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx
+++ b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx
@@ -427,6 +427,7 @@ namespace InDet {
     const Amg::Transform3D& T2 = element2->transform();
     Amg::Vector3D           C  = element1->center() ;
     bool isAnnulus = (element1->design().shape() == InDetDD::Annulus);
+    // bool isPolar = (element1->design().shape() == InDetDD::PolarAnnulus);
 
     double x12 = T1(0,0)*T2(0,0)+T1(1,0)*T2(1,0)+T1(2,0)*T2(2,0)                              ;
     double r   = isAnnulus ? std::sqrt(C[0]*C[0]+C[1]*C[1]) : std::sqrt(T1(0,3)*T1(0,3)+T1(1,3)*T1(1,3));
diff --git a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/ITkSiSpacePointsSeedMaker.h b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/ITkSiSpacePointsSeedMaker.h
index 2218aa1add6b6888b91e241c00acf613bb849aab..6413354b06fa564f184e55efffab60e45a5a3c64 100644
--- a/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/ITkSiSpacePointsSeedMaker.h
+++ b/InnerDetector/InDetRecTools/SiSpacePointsSeedTool_xk/SiSpacePointsSeedTool_xk/ITkSiSpacePointsSeedMaker.h
@@ -247,7 +247,6 @@ namespace ITk
     FloatProperty m_r2max{this, "maxRadius2", 600.};
     FloatProperty m_r3min{this, "minRadius3", 0.};
     FloatProperty m_r3max{this, "maxRadius3", 600.};
-    FloatProperty m_rapcut{this, "RapidityCut", 2.7};
     FloatProperty m_diverpps{this, "maxdImpactPPS", 1.7};
     //@}
 
diff --git a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackUniversalTool.h b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackUniversalTool.h
index 704461ee04d5b40b77e55160b9eb31b8db1cced5..9e144dbcc8d9ab5b05b0da15b113453ffe371a8a 100755
--- a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackUniversalTool.h
+++ b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackUniversalTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -50,8 +50,10 @@ public:
   // Private data:
   ///////////////////////////////////////////////////////////////////
 
-  ToolHandle<Trk::IRIO_OnTrackCreator> m_riontrackDrift ; 
-  ToolHandle<Trk::IRIO_OnTrackCreator> m_riontrackTube  ; 
+  ToolHandle<Trk::IRIO_OnTrackCreator> m_riontrackDrift
+    {this, "RIOonTrackToolDrift", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"};
+  ToolHandle<Trk::IRIO_OnTrackCreator> m_riontrackTube
+    {this, "RIOonTrackToolTube", "InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"};
   double                               m_scalefactor; //scale factor for hit uncertainty
 };
 
diff --git a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/src/TRT_DriftCircleOnTrackUniversalTool.cxx b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/src/TRT_DriftCircleOnTrackUniversalTool.cxx
index c0075098ef2aea46b38b0c3ab49be8a2fbc34dc7..44386a14493a24fe6d4d2da1cb5c55ea069f2f79 100755
--- a/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/src/TRT_DriftCircleOnTrackUniversalTool.cxx
+++ b/InnerDetector/InDetRecTools/TRT_DriftCircleOnTrackTool/src/TRT_DriftCircleOnTrackUniversalTool.cxx
@@ -21,13 +21,9 @@
 InDet::TRT_DriftCircleOnTrackUniversalTool::TRT_DriftCircleOnTrackUniversalTool
 (const std::string& ty,const std::string& na,const IInterface* pa)
   : AthAlgTool(ty,na,pa),
-    m_riontrackDrift("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"                      ),
-    m_riontrackTube("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"),
     m_scalefactor(2.)
 {
   declareInterface<IRIO_OnTrackCreator>(this);
-  declareProperty("RIOonTrackToolDrift"  ,m_riontrackDrift );
-  declareProperty("RIOonTrackToolTube"   ,m_riontrackTube  );
   declareProperty("ScaleHitUncertainty"  ,m_scalefactor    );    
 }
 
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
index e988846479d25a5b257679635c958406b43b7c3e..c0c7c3a83e5e9d5ad8dc370ed44d2efc71d1b201 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
@@ -32,18 +32,19 @@
 #include "MagFieldConditions/AtlasFieldCacheCondObj.h"
 #include "MagFieldElements/AtlasFieldCache.h"
 
+// tools:
+#include "TrkExInterfaces/IPropagator.h"
+#include "InDetRecToolInterfaces/ITRT_DetElementsRoadMaker.h"
+#include "InDetCompetingRIOsOnTrackTool/ICompetingTRT_DriftCirclesOnTrackCreator.h"
+
 class MsgStream;
 class TRT_ID;
 
 namespace Trk {
     class Surface;
-    //class MagneticFieldProperties;
-    class IPropagator;
 }
 
 namespace InDet {
-    class ITRT_DetElementsRoadMaker;
-    class ICompetingTRT_DriftCirclesOnTrackCreator;
 
 /**
 @class TRT_TrackExtensionTool_DAF
@@ -141,12 +142,24 @@ protected:
     ///////////////////////////////////////////
     // the different tools and their jobOptions
     ///////////////////////////////////////////
-    ToolHandle< InDet::ICompetingTRT_DriftCirclesOnTrackCreator >   m_compROTcreator;       //!< the instance of the CompetingTRT_DriftCirclesOnTrackCreator tool
+    ToolHandle< InDet::ICompetingTRT_DriftCirclesOnTrackCreator >   m_compROTcreator
+      {this,
+       "CompetingDriftCircleTool",
+       "InDet::CompetingTRT_DriftCirclesOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool",
+       "Tool for the creation of CompetingTRT_DriftCirclesOnTrack"};       //!< the instance of the CompetingTRT_DriftCirclesOnTrackCreator tool
     double                                                          m_jo_annealingFactor;    //!< jobOption: The annealing factor used for Trk::CompetingRIOsOnTrack creation
 
-    ToolHandle< InDet::ITRT_DetElementsRoadMaker >                  m_roadtool;             //!<  instance of the TRT road maker tool
-
-    ToolHandle< Trk::IPropagator >                                  m_propagator;           //!<  the Propagator tool
+    ToolHandle< InDet::ITRT_DetElementsRoadMaker >                  m_roadtool
+      {this,
+       "RoadTool",
+       "InDet::TRT_DetElementsRoadMaker_xk/TRT_DetElementsRoadMaker",
+       "TRT Road Tool for the search of Detector Elements"};             //!<  instance of the TRT road maker tool
+
+    PublicToolHandle< Trk::IPropagator >                                  m_propagator
+      {this,
+       "PropagatorTool",
+       "Trk::RungeKuttaPropagator/Propagator",
+       "Propagator tool"};           //!<  the Propagator tool
 
     SG::ReadCondHandleKey<AtlasFieldCacheCondObj>                   m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
index 6c3f92550a6d76ae463f07d0dca4b21aeaebc61c..1a1bd2c32b1a29d2388f5de1907b13db6b68f8e2 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
@@ -14,12 +14,6 @@
 
 #include "TrkParameters/TrackParameters.h"
 
-// tools:
-#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
-#include "TrkExInterfaces/IPropagator.h"
-#include "InDetRecToolInterfaces/ITRT_DetElementsRoadMaker.h"
-#include "InDetCompetingRIOsOnTrackTool/ICompetingTRT_DriftCirclesOnTrackCreator.h"
-
 #include "TrkTrack/Track.h"
 #include "TrkMeasurementBase/MeasurementBase.h"
 
@@ -56,10 +50,7 @@ InDet::TRT_TrackExtensionTool_DAF::TRT_TrackExtensionTool_DAF
             m_jo_simpleExtension(true),
             m_jo_maxGroupDistance(5.),
             m_jo_minGroupDistance(1.),
-            m_compROTcreator("InDet::CompetingTRT_DriftCirclesOnTrackTool/CompetingTRT_DriftCirclesOnTrackTool"),
             m_jo_annealingFactor(81.),
-            m_roadtool("InDet::TRT_DetElementsRoadMaker_xk/TRT_DetElementsRoadMaker"),
-            m_propagator("Trk::RungeKuttaPropagator/Propagator"),
             m_fieldmode("MapSolenoid"),
             m_trtID(nullptr)
 {
@@ -67,9 +58,6 @@ InDet::TRT_TrackExtensionTool_DAF::TRT_TrackExtensionTool_DAF
     declareInterface<ITRT_TrackExtensionTool>(this);
 
     declareProperty("MagneticFieldMode",        m_fieldmode,          "field mode of the field tool");
-    declareProperty("PropagatorTool",           m_propagator,           "Propagator tool");
-    declareProperty("CompetingDriftCircleTool", m_compROTcreator,       "Tool for the creation of CompetingTRT_DriftCirclesOnTrack");
-    declareProperty("RoadTool",                 m_roadtool,             "TRT Road Tool for the search of Detector Elements");
     declareProperty("TRT_DriftCircleContainer", m_jo_trtcontainername,   "Name of the container of TRT measurements (TRT_DriftCircles)");
     declareProperty("InitialAnnealingFactor",   m_jo_annealingFactor,    "Annealing factor (temperature) used to calculate the initial assignment probabilities of a group of competing TRT measurements. Should be choosen identical to the first entry of the annealing schedule of the Deterministic Annealing Filter");
     declareProperty("SimpleElementWiseExtension", m_jo_simpleExtension,  "Do simple element wise extension or do sophisticated grouping of measurements?");
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
index f55246aad26cfc05b55fe29b6a2314e0ee2fb3a1..fc3d082fb553fa955ac9296399e430235815b1e5 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
@@ -22,6 +22,8 @@
 #include "InDetRecToolInterfaces/ITRT_TrackExtensionTool.h"
 #include "InDetPrepRawData/TRT_DriftCircleContainer.h"
 #include "TrkEventUtils/EventDataBase.h"
+#include "TrkExInterfaces/IPropagator.h"
+#include "TrkExInterfaces/IExtrapolator.h"
 
 #include "StoreGate/ReadHandleKey.h"
 #include <iosfwd>
@@ -33,10 +35,7 @@ class AtlasDetectorID;
 class PropDirection;
 
 namespace Trk{
-
   class Surface;
-  class IExtrapolator;
-  class IPropagator;
 }
 
 namespace InDet {
@@ -106,10 +105,14 @@ namespace InDet {
       // Protected Data
       ///////////////////////////////////////////////////////////////////
 
-      ToolHandle<Trk::IExtrapolator>        m_extrapolator;
-      ToolHandle<Trk::IPropagator>          m_propagator  ;
-      ToolHandle<Trk::IRIO_OnTrackCreator>  m_riontrackD  ; //
-      ToolHandle<Trk::IRIO_OnTrackCreator>  m_riontrackN  ; //
+      PublicToolHandle<Trk::IExtrapolator>        m_extrapolator
+        {this, "Extrapolator", "Trk::Extrapolator/InDetExtrapolator"};
+      PublicToolHandle<Trk::IPropagator>          m_propagator
+        {this, "Propagator", "Trk::RungeKuttaPropagator"};
+      ToolHandle<Trk::IRIO_OnTrackCreator>  m_riontrackD
+	{this, "RIOonTrackToolYesDr", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackToolUniversal"};
+      ToolHandle<Trk::IRIO_OnTrackCreator>  m_riontrackN
+	{this, "RIOonTrackToolNoDr", "InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"}; //
 
       int                              m_outputlevel{}    ; // Print level
       int                              m_nprint{}         ; // Kind of print
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
index c82fce24f67a8e18d8b605b77e67f6d73807125b..5f2c6276bbeca31cfedba038f78593bce11634df 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
@@ -21,6 +21,8 @@
 #include "GaudiKernel/ToolHandle.h"
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "InDetRecToolInterfaces/ITRT_TrackExtensionTool.h"
+#include "InDetRecToolInterfaces/ITrtDriftCircleCutTool.h"
+#include "InDetRecToolInterfaces/ITRT_DetElementsRoadMaker.h"
 #include "TrkEventUtils/EventDataBase.h"
 #include "TRT_TrackExtensionTool_xk/TRT_Trajectory_xk.h"
 #include "InDetPrepRawData/TRT_DriftCircleContainer.h"
@@ -37,9 +39,6 @@ class TRT_ID;
 
 namespace InDet{
 
-  class ITrtDriftCircleCutTool;
-  class ITRT_DetElementsRoadMaker;
-
   /**
   @class TRT_TrackExtensionTool_xk
 
@@ -119,12 +118,18 @@ namespace InDet{
       ///////////////////////////////////////////////////////////////////
 
       const TRT_ID                          *m_trtid{};
-      ToolHandle<ITRT_DetElementsRoadMaker>         m_roadtool   ; // TRT road maker tool
-      ToolHandle<Trk::IPatternParametersPropagator> m_proptool   ; //
-      ToolHandle<Trk::IPatternParametersUpdator>    m_updatortool; //
-      ToolHandle<ITrtDriftCircleCutTool>            m_selectortool;// Segment selector tool
-      ToolHandle<Trk::IRIO_OnTrackCreator>          m_riontrackD ; //
-      ToolHandle<Trk::IRIO_OnTrackCreator>          m_riontrackN ; //
+      ToolHandle<ITRT_DetElementsRoadMaker>         m_roadtool
+	{this, "RoadTool", "InDet::TRT_DetElementsRoadMaker_xk"}; // TRT road maker tool
+      PublicToolHandle<Trk::IPatternParametersPropagator> m_proptool
+	{this, "PropagatorTool", "Trk::RungeKuttaPropagator"};
+      PublicToolHandle<Trk::IPatternParametersUpdator>    m_updatortool
+	{this, "UpdatorTool", "Trk::KalmanUpdator_xk"};
+      PublicToolHandle<ITrtDriftCircleCutTool>            m_selectortool
+	{this, "DriftCircleCutTool", "InDet::InDetTrtDriftCircleCutTool"};// Segment selector tool
+      ToolHandle<Trk::IRIO_OnTrackCreator>          m_riontrackD
+	{this, "RIOonTrackToolYesDr", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"};
+      ToolHandle<Trk::IRIO_OnTrackCreator>          m_riontrackN
+	{this, "RIOonTrackToolNoDr", "InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool"};
 
       SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
 
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
index b0f3d03bc1943529ec8fe5e5571b377e3ec7f73c..6a6398a1b2de9e65ed3b65a5f2ddbc4f1b6f747f 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
@@ -14,8 +14,6 @@
 
 #include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
 #include "TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h"
-#include "TrkExInterfaces/IExtrapolator.h"
-#include "TrkExInterfaces/IPropagator.h"
 #include "TrkSurfaces/CylinderSurface.h"
 #include "TrkSurfaces/DiscSurface.h"
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
@@ -32,9 +30,7 @@
 
 InDet::TRT_TrackExtensionToolCosmics::TRT_TrackExtensionToolCosmics
 (const std::string& t,const std::string& n,const IInterface* p)
-  : AthAlgTool(t,n,p),
-    m_riontrackD("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackToolUniversal"                      ),
-    m_riontrackN("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool")
+  : AthAlgTool(t,n,p)
 {
   m_trtmanager      = "TRT"             ;
   m_minNumberDCs    = 9                 ;
@@ -43,11 +39,6 @@ InDet::TRT_TrackExtensionToolCosmics::TRT_TrackExtensionToolCosmics
 
   declareInterface<ITRT_TrackExtensionTool>(this);
 
-  declareProperty("RIOonTrackToolYesDr"  ,m_riontrackD     );
-  declareProperty("RIOonTrackToolNoDr"   ,m_riontrackN     );
-  declareProperty("Extrapolator"         ,m_extrapolator   );
-  declareProperty("Propagator"           ,m_propagator     );
-
   declareProperty("TrtManagerLocation"   ,m_trtmanager     );
   declareProperty("RoadWidth"            ,m_roadwidth      );
   declareProperty("BoundaryLocZTolerance",m_roadwidth_locz );
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
index df6e5113a0e167d61f5767820b46cb13f3d35c08..725348f72874ac6d0e74bc75586c47f8c3d9e0fc 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
@@ -13,9 +13,7 @@
 
 
 #include "AthenaPoolUtilities/CondAttrListCollection.h"
-#include "InDetRecToolInterfaces/ITRT_DetElementsRoadMaker.h"
 #include "TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h"
-#include "InDetRecToolInterfaces/ITrtDriftCircleCutTool.h"
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
 #include "InDetPrepRawData/SCT_Cluster.h"
 #include "TrkTrack/Track.h"
@@ -46,13 +44,7 @@ namespace{
 
 InDet::TRT_TrackExtensionTool_xk::TRT_TrackExtensionTool_xk
 (const std::string& t,const std::string& n,const IInterface* p)
-  : AthAlgTool(t,n,p),
-    m_roadtool  ("InDet::TRT_DetElementsRoadMaker_xk"                                                ),
-    m_proptool    ("Trk::RungeKuttaPropagator"                                                       ),
-    m_updatortool ("Trk::KalmanUpdator_xk"                                                           ),
-    m_selectortool("InDet::InDetTrtDriftCircleCutTool"                                               ),
-    m_riontrackD("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"                      ),
-    m_riontrackN("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_DriftCircleOnTrackNoDriftTimeTool")
+  : AthAlgTool(t,n,p)
 {
   m_fieldmode       = "MapSolenoid"      ;
   m_trtmanager      = "TRT"              ;
@@ -68,12 +60,6 @@ InDet::TRT_TrackExtensionTool_xk::TRT_TrackExtensionTool_xk
   m_parameterization= true               ;
   m_scale_error     = 2.                 ;
   declareInterface<ITRT_TrackExtensionTool>(this);
-  declareProperty("RoadTool"               ,m_roadtool        );
-  declareProperty("PropagatorTool"         ,m_proptool        );
-  declareProperty("UpdatorTool"            ,m_updatortool     );
-  declareProperty("DriftCircleCutTool"     ,m_selectortool    );
-  declareProperty("RIOonTrackToolYesDr"    ,m_riontrackD      );
-  declareProperty("RIOonTrackToolNoDr"     ,m_riontrackN      );
   declareProperty("TrtManagerLocation"     ,m_trtmanager      );
   declareProperty("RoadWidth"              ,m_roadwidth       );
   declareProperty("ZVertexHalfWidth"       ,m_zVertexWidth    );
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValDecorationConfig.py b/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValDecorationConfig.py
index e1f7e3f6b1151041096010eac5669a72012b8327..19ac6cfb2d7ed59a468012eedfaef0b782d9e5de 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValDecorationConfig.py
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValDecorationConfig.py
@@ -148,14 +148,10 @@ def InDetPhysValTruthDecoratorAlgCfg(flags, **kwargs):
     '''
     acc = ComponentAccumulator()
 
-    Extrapolator = None
-    if flags.Detector.GeometryITk:
-        from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-        Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-    else:
-        from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
-        Extrapolator = acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags))
-    kwargs.setdefault("Extrapolator", Extrapolator)
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+    extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+    acc.addPublicTool(extrapolator)  # TODO: migrate to private?
+    kwargs.setdefault("Extrapolator", extrapolator)
 
     acc.merge(createExtendNameIfNotDefaultCfg(CompFactory.InDetPhysValTruthDecoratorAlg,
                                               'TruthParticleContainerName', 'TruthParticles',
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValMonitoringConfig.py b/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValMonitoringConfig.py
index e78e0063e71f153de5fff46e53facdd5b3eff7f8..860bcea47d595328b8562c3e14aa6e80fd211bac 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValMonitoringConfig.py
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/python/InDetPhysValMonitoringConfig.py
@@ -35,14 +35,10 @@ def InDetRttTruthSelectionToolCfg(flags, name="InDetRttTruthSelectionTool", **kw
         kwargs.setdefault("maxEta", 2.5)
     kwargs.setdefault("minPt", 500.)
 
-    Extrapolator = None
-    if flags.Detector.GeometryITk:
-        from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-        Extrapolator = acc.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags))
-    else:
-        from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
-        Extrapolator = acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags))
-    kwargs.setdefault("Extrapolator", Extrapolator)
+    from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
+    extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
+    acc.addPublicTool(extrapolator)  # TODO: migrate to private?
+    kwargs.setdefault("Extrapolator", extrapolator)
 
     tool = CompFactory.AthTruthSelectionTool(name = name, **kwargs)
     acc.setPrivateTools(tool)
diff --git a/LArCalorimeter/LArBadChannelTool/python/LArBadFebsConfig.py b/LArCalorimeter/LArBadChannelTool/python/LArBadFebsConfig.py
index f858414092167a66cadc2ee1585474123224812d..2b732cda56193cd6b78775893f336e50f87a407e 100644
--- a/LArCalorimeter/LArBadChannelTool/python/LArBadFebsConfig.py
+++ b/LArCalorimeter/LArBadChannelTool/python/LArBadFebsConfig.py
@@ -10,6 +10,8 @@ def LArKnownBadFebCfg(configFlags, tag=None):
 
     if configFlags.GeoModel.Run == "RUN1":
         rekey=""
+    elif configFlags.GeoModel.Run == "RUN4":  # TODO: remove when conditions tag is updated
+        rekey=""
     else:    
         rekey="/LAR/BadChannels/KnownBADFEBs"
         result.merge(addFoldersSplitOnline(configFlags,"LAR","/LAR/BadChannels/KnownBADFEBs",
@@ -24,6 +26,8 @@ def LArKnownMNBFebCfg(configFlags, tag=None):
 
     if configFlags.GeoModel.Run == "RUN1":
         rekey=""
+    elif configFlags.GeoModel.Run == "RUN4":  # TODO: remove when conditions tag is updated
+        rekey=""
     else:
         rekey="/LAR/BadChannels/KnownMNBFEBs"
         result.merge(addFoldersSplitOnline(configFlags,"LAR","/LAR/BadChannels/KnownMNBFEBs",
diff --git a/LArCalorimeter/LArBadChannelTool/src/LArBadChanBlobUtils.cxx b/LArCalorimeter/LArBadChannelTool/src/LArBadChanBlobUtils.cxx
index 0724ba4fe4e6ed0317cc8e5e19d3bb64a9703184..4acb7588d69965c28aca379f205393a3007c767d 100644
--- a/LArCalorimeter/LArBadChannelTool/src/LArBadChanBlobUtils.cxx
+++ b/LArCalorimeter/LArBadChannelTool/src/LArBadChanBlobUtils.cxx
@@ -20,7 +20,7 @@ namespace LArBadChanBlobUtils {
     blob.resize(nbytes);
     void* adr = blob.startingAddress();
     for ( std::vector<HWIdentifier>::const_iterator i=vec.begin();
-	  i != vec.end(); i++) {
+	  i != vec.end(); ++i) {
       Channel* ch = static_cast<Channel*>( adr);
       *ch = i->get_identifier32().get_compact(); // assign channel
       adr = static_cast<void*>(ch+1); //  points just after channel
diff --git a/LArCalorimeter/LArBadChannelTool/src/LArBadChanContainerHashed.cxx b/LArCalorimeter/LArBadChannelTool/src/LArBadChanContainerHashed.cxx
index b4af80ad5cd31c7f3adc717aa34378633c8cd207..16ccf576cf37ce52519bc9dd1b82afaa11fa09ff 100644
--- a/LArCalorimeter/LArBadChannelTool/src/LArBadChanContainerHashed.cxx
+++ b/LArCalorimeter/LArBadChannelTool/src/LArBadChanContainerHashed.cxx
@@ -34,7 +34,7 @@ void LArBadChanContainerHashed::setBadFEBs( const std::vector<BadFebEntry>& badF
   for ( unsigned int i=0; i< m_hasher.maxFEBHash(); i++) m_febVec[i].resetBad();
 
   for (std::vector<BadFebEntry>::const_iterator i=badFebs.begin(); 
-       i!=badFebs.end(); i++) {
+       i!=badFebs.end(); ++i) {
     m_febVec.at(  m_hasher.hashFEB(i->first)).setFebStatus(i->second);
   }
 }
diff --git a/LArCalorimeter/LArBadChannelTool/src/LArBadChannelDecoder.cxx b/LArCalorimeter/LArBadChannelTool/src/LArBadChannelDecoder.cxx
index 64e989a70db3d9d4b77d98874c750d8ed6d6d14c..e2b03f7d7b295fadf2238658b280262f8d5167a0 100644
--- a/LArCalorimeter/LArBadChannelTool/src/LArBadChannelDecoder.cxx
+++ b/LArCalorimeter/LArBadChannelTool/src/LArBadChannelDecoder.cxx
@@ -28,7 +28,7 @@ LArBadChannelDecoder::readASCII( const std::string& fname,
   m_log << MSG::INFO << "Parsed " << parsed.size() << " lines from file " << fname << endmsg;
 
   for (std::vector<ParsedLine>::const_iterator i=parsed.begin();
-       i != parsed.end(); i++) {
+       i != parsed.end(); ++i) {
     HWIdentifier hwid = constructChannelId( i->first, coolChan, m_log);
     if (hwid.is_valid()) {
       std::pair<bool,LArBadChannel> badCh = constructStatus( i->second, m_log);
@@ -56,7 +56,7 @@ LArBadChannelDecoder::readFebASCII( const std::string& fname) const
   typedef std::pair<std::vector<int>, std::vector<ParseType> > ParsedLine;
   std::vector<ParsedLine> parsed = parser.parseFile<ParseType>();
   for (std::vector<ParsedLine>::const_iterator i=parsed.begin();
-       i != parsed.end(); i++) {
+       i != parsed.end(); ++i) {
     std::vector<HWIdentifier> hwid = constructFebId( i->first, m_log);
     if (!hwid.empty()) {
       // BEFORE: result.insert( result.end(), hwid.begin(), hwid.end());
diff --git a/LArCalorimeter/LArBadChannelTool/src/LArBadChannelState.cxx b/LArCalorimeter/LArBadChannelTool/src/LArBadChannelState.cxx
index 3f6b4e3da29a9ba91248300e7a48a22fbda3e572..d4023c987b66df05fafc727f14398489c3b92ffd 100644
--- a/LArCalorimeter/LArBadChannelTool/src/LArBadChannelState.cxx
+++ b/LArCalorimeter/LArBadChannelTool/src/LArBadChannelState.cxx
@@ -84,8 +84,8 @@ void LArBadChannelState::CoolChannelData::resolveDuplicateEntries()
   typedef std::vector<BadChanEntry>::iterator   Iter;
 
   std::multiset<Iter> toDelete;
-  for (Iter i = m_entries.begin(); i != m_entries.end(); i++) {
-    for (Iter j = i+1; j != m_entries.end(); j++) {    
+  for (Iter i = m_entries.begin(); i != m_entries.end(); ++i) {
+    for (Iter j = i+1; j != m_entries.end(); ++j) {    
       if (i->first == j->first) {
 	mergeFlags( *i, *j);  // j's flags are added to i's flags
 	toDelete.insert(j);
@@ -96,7 +96,7 @@ void LArBadChannelState::CoolChannelData::resolveDuplicateEntries()
   // We make a copy of the vector to avoid erasing elements
   std::vector<BadChanEntry> tmp;
   tmp.reserve( m_entries.size() - toDelete.size());
-  for (Iter i = m_entries.begin(); i != m_entries.end(); i++) {
+  for (Iter i = m_entries.begin(); i != m_entries.end(); ++i) {
     if (toDelete.find(i) == toDelete.end()) {
       tmp.push_back(*i); // not one of the duplicates
     }
diff --git a/LArCalorimeter/LArBadChannelTool/src/LArBadChannelTimingAlg.cxx b/LArCalorimeter/LArBadChannelTool/src/LArBadChannelTimingAlg.cxx
index daee235365d14e1bcdffbd2acfe1f7fcf3e2bedb..16c3867b4b5a40055fe2cc9c444ee11b8e1dc24e 100644
--- a/LArCalorimeter/LArBadChannelTool/src/LArBadChannelTimingAlg.cxx
+++ b/LArCalorimeter/LArBadChannelTool/src/LArBadChannelTimingAlg.cxx
@@ -20,6 +20,7 @@
 // DEBUG only
 #include <iostream>
 #include <fstream>
+#include <iterator>//for distance between iterators
 using namespace std;
 
 LArBadChannelTimingAlg::LArBadChannelTimingAlg(const std::string& name, ISvcLocator* pSvcLocator) :
@@ -65,7 +66,7 @@ StatusCode LArBadChannelTimingAlg::execute()
 
 void LArBadChannelTimingAlg::timeOnlineAccess() 
 {
-  long factor = ~(1<<31); 
+  unsigned long factor = ~(1ul<<31); 
   factor = factor / m_onlineID->channelHashMax() + 1; 
   ATH_MSG_INFO( "online random scaling factor " << factor );
 
@@ -80,7 +81,7 @@ void LArBadChannelTimingAlg::timeOnlineAccess()
   {
     Chrono chrono( chronoSvc() , "OnlineBadChan" );
     for (int i =0; i<testsPerEvent(); i++) {
-      long rnd = random() / factor; // int arythmetic for speed to get a rnd channel hash
+      unsigned long rnd = random() / factor; // int arythmetic for speed to get a rnd channel hash
       HWIdentifier hid( m_hwarray.at(rnd));
       if ( m_reallyCheck) {
 	if (!bcCont->status(hid).good()) nbad++;
@@ -119,7 +120,7 @@ void LArBadChannelTimingAlg::timeOfflineAccess()
   // get reference to vector of all LArEM IDs (skip HEC & FCAL for now)
   const std::vector<Identifier>& allIDs = m_emID->channel_ids();
 
-  long factor = ~(1<<31); 
+  unsigned long factor = ~(1ul<<31); 
   factor = factor / allIDs.size() + 1; 
   ATH_MSG_INFO( "connected offline IDs " << allIDs.size() << " offline random scaling factor " << factor );
   SG::ReadCondHandle<LArBadChannelCont> readHandle{m_BCKey};
@@ -134,7 +135,7 @@ void LArBadChannelTimingAlg::timeOfflineAccess()
   {
     Chrono chrono( chronoSvc() , "OfflineBadChan" );
     for (int i =0; i<testsPerEvent(); i++) {
-      long rnd = random() / factor; // int arythmetic for speed to get a rnd channel hash
+      unsigned long rnd = random() / factor; // int arythmetic for speed to get a rnd channel hash
       Identifier id( allIDs.at(rnd));
       if ( m_reallyCheck) {
 	if (!bcCont->offlineStatus(id).good()) nbad++;
@@ -150,13 +151,14 @@ void LArBadChannelTimingAlg::timeOfflineAccess()
 
 void LArBadChannelTimingAlg::timeFEBAccess() 
 {
-  std::vector<HWIdentifier> febVec( m_onlineID->feb_end() - m_onlineID->feb_end());
+  std::vector<HWIdentifier> febVec;
+  febVec.reserve( std::distance(m_onlineID->feb_begin(),m_onlineID->feb_end()));
   for (std::vector<HWIdentifier>::const_iterator feb = m_onlineID->feb_begin(); 
        feb != m_onlineID->feb_end(); ++feb) {
     febVec.push_back(*feb);
   }
 
-  long factor = ~(1<<31); 
+  unsigned long factor = ~(1ul<<31); 
   factor = factor / febVec.size() + 1; 
 
   SG::ReadCondHandle<LArBadChannelCont> readHandle{m_BCKey};
@@ -170,7 +172,7 @@ void LArBadChannelTimingAlg::timeFEBAccess()
   {
     Chrono chrono( chronoSvc() , "BadChanByFEB" );
     for (int i =0; i<testsPerEvent(); i++) {
-      long rnd = random(); // all 31 bits random
+      unsigned long rnd = random(); // all 31 bits random
       int rndFEB = rnd / factor; // int arythmetic for speed to get a rnd channel hash
 
       if ( m_reallyCheck) {
diff --git a/LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py b/LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py
index e0f03e161930353ee168e602710d07ebe2abcee9..7f840b048180e1a367eb1af9295b7696b238cc1d 100644
--- a/LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py
+++ b/LArCalorimeter/LArCalibUtils/python/LArHVScaleConfig.py
@@ -7,7 +7,7 @@ def LArHVScaleCfg(configFlags):
     result=ComponentAccumulator()
 
     from IOVDbSvc.IOVDbSvcConfig import addFolders
-    #result.merge(IOVDbSvcCfg(configFlags))
+    LArHVCondAlg=CompFactory.LArHVCondAlg
 
     if configFlags.Input.isMC:
         result.merge(addFolders(configFlags,["/LAR/Identifier/HVLineToElectrodeMap<tag>LARHVLineToElectrodeMap-001</tag>"], "LAR_OFL", className="AthenaAttributeList"))
@@ -16,6 +16,7 @@ def LArHVScaleCfg(configFlags):
         hvmapalg = LArHVIdMappingAlg(ReadKey="/LAR/Identifier/HVLineToElectrodeMap",WriteKey="LArHVIdMap")
         result.addCondAlgo(hvmapalg)
 
+        result.addCondAlgo(LArHVCondAlg(doHV=False, doAffectedHV=False))
 
     elif not configFlags.Common.isOnline:
         result.merge(addFolders(configFlags,["/LAR/DCS/HV/BARREl/I16"], "DCS_OFL", className="CondAttrListCollection"))
@@ -42,7 +43,6 @@ def LArHVScaleCfg(configFlags):
         from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDbCfg
         result.merge(LArElecCalibDbCfg(configFlags,["HVScaleCorr",]))
 
-        LArHVCondAlg=CompFactory.LArHVCondAlg
         if configFlags.GeoModel.Run != "RUN1":
            hvcond = LArHVCondAlg(HVPathologies="LArHVPathology")
         else:   
diff --git a/LArCalorimeter/LArCellRec/python/LArNoisyROSummaryConfig.py b/LArCalorimeter/LArCellRec/python/LArNoisyROSummaryConfig.py
index 813e1cd133cce5302e648805c2bbd754274cc82c..99141672fcdbf1755968112e7be81ba93cbaec15 100755
--- a/LArCalorimeter/LArCellRec/python/LArNoisyROSummaryConfig.py
+++ b/LArCalorimeter/LArCellRec/python/LArNoisyROSummaryConfig.py
@@ -10,8 +10,11 @@ def LArNoisyROSummaryCfg(configFlags):
 
    result=ComponentAccumulator()
 
-   result.merge(LArKnownBadFebCfg(configFlags))
-   result.merge(LArKnownMNBFebCfg(configFlags))
+   isMC=configFlags.Input.isMC
+
+   if not isMC:
+      result.merge(LArKnownBadFebCfg(configFlags))
+      result.merge(LArKnownMNBFebCfg(configFlags))
 
    # now configure the algorithm
    try:        
@@ -29,9 +32,8 @@ def LArNoisyROSummaryCfg(configFlags):
                                     MNBTight_PsVetoCut=larNoisyROFlags.MNBTight_PsVetoCut()
                                     )
 
-   result.setPrivateTools(theLArNoisyROTool)
-   theLArNoisyROAlg=LArNoisyROAlg()
-   theLArNoisyROAlg.Tool=result.popPrivateTools()
+   theLArNoisyROAlg=LArNoisyROAlg(isMC=isMC)
+   theLArNoisyROAlg.Tool=theLArNoisyROTool
    result.addEventAlgo(theLArNoisyROAlg)
 
    return result
diff --git a/LArCalorimeter/LArCellRec/src/LArNoisyROAlg.cxx b/LArCalorimeter/LArCellRec/src/LArNoisyROAlg.cxx
index 0920fde705f7b2dda242aa5c46c481edd91ede7b..b964dfc2380187bc6a3a789fe473f32a8fe406cb 100644
--- a/LArCalorimeter/LArCellRec/src/LArNoisyROAlg.cxx
+++ b/LArCalorimeter/LArCellRec/src/LArNoisyROAlg.cxx
@@ -28,8 +28,8 @@ StatusCode LArNoisyROAlg::initialize() {
   ATH_CHECK(m_CaloCellContainerName.initialize());
   ATH_CHECK(m_outputKey.initialize());
   ATH_CHECK(m_eventInfoKey.initialize());
-  ATH_CHECK(m_knownBadFEBsVecKey.initialize() );
-  ATH_CHECK(m_knownMNBFEBsVecKey.initialize() );
+  ATH_CHECK(m_knownBadFEBsVecKey.initialize(!m_isMC) );
+  ATH_CHECK(m_knownMNBFEBsVecKey.initialize(!m_isMC) );
 
   return StatusCode::SUCCESS;
 }
@@ -51,44 +51,45 @@ StatusCode LArNoisyROAlg::execute (const EventContext& ctx) const
   
   std::set<unsigned int> bf;
   std::vector<HWIdentifier> MNBfeb;
-  SG::ReadCondHandle<LArBadFebCont> badHdl(m_knownBadFEBsVecKey, ctx);
-  const LArBadFebCont* badCont=*badHdl;
-  if(badCont) {
-     for(LArBadFebCont::BadChanVec::const_iterator i = badCont->begin(); i!=badCont->end(); ++i) {
+  if (! m_isMC) {
+    SG::ReadCondHandle<LArBadFebCont> badHdl(m_knownBadFEBsVecKey, ctx);
+    const LArBadFebCont* badCont=*badHdl;
+    if(badCont) {
+      for(LArBadFebCont::BadChanVec::const_iterator i = badCont->begin(); i!=badCont->end(); ++i) {
         bf.insert(i->first);
-     }
-     if(bf.size() == 0) {
+      }
+      if(bf.size() == 0) {
         if(m_isMC) {
           ATH_MSG_DEBUG("Empty ist of known Bad FEBs as expected ");
         } else {   
           ATH_MSG_WARNING("List of known Bad FEBs empty !? ");
         }
-     }
-  }
+      }
+    }
   
-  SG::ReadCondHandle<LArBadFebCont> MNBHdl(m_knownMNBFEBsVecKey, ctx);
-  const LArBadFebCont* MNBCont=*MNBHdl;
-  if(MNBCont) {
-     for(LArBadFebCont::BadChanVec::const_iterator i = MNBCont->begin(); i!=MNBCont->end(); ++i) {
+    SG::ReadCondHandle<LArBadFebCont> MNBHdl(m_knownMNBFEBsVecKey, ctx);
+    const LArBadFebCont* MNBCont=*MNBHdl;
+    if(MNBCont) {
+      for(LArBadFebCont::BadChanVec::const_iterator i = MNBCont->begin(); i!=MNBCont->end(); ++i) {
         MNBfeb.push_back(HWIdentifier(i->first));
-     } 
-     if(MNBfeb.size() == 0) {
+      } 
+      if(MNBfeb.size() == 0) {
         if(m_isMC) {
           ATH_MSG_DEBUG("Empty ist of known Bad FEBs as expected ");
         } else {   
           ATH_MSG_WARNING("List of known MNB FEBs empty !? ");
         }
-     } 
+      } 
+    }
   }
-  const std::set<unsigned int> knownBadFEBs(bf);
-  ATH_MSG_DEBUG("Number of known Bad FEBs: "<<knownBadFEBs.size());
-  const std::vector<HWIdentifier> knownMNBFEBs(MNBfeb);
-  ATH_MSG_DEBUG("Number of known MNB FEBs: "<<knownMNBFEBs.size());
+
+  ATH_MSG_DEBUG("Number of known Bad FEBs: "<<bf.size());
+  ATH_MSG_DEBUG("Number of known MNB FEBs: "<<MNBfeb.size());
 
 
 
   SG::WriteHandle<LArNoisyROSummary> noisyRO(m_outputKey, ctx);
-  ATH_CHECK(noisyRO.record(m_noisyROTool->process(cellContainer.cptr(), &knownBadFEBs, &knownMNBFEBs)));
+  ATH_CHECK(noisyRO.record(m_noisyROTool->process(cellContainer.cptr(), &bf, &MNBfeb)));
 
 
   bool badFEBFlag=noisyRO->BadFEBFlaggedPartitions();
diff --git a/LArCalorimeter/LArCellRec/src/LArRAWtoSuperCell.cxx b/LArCalorimeter/LArCellRec/src/LArRAWtoSuperCell.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..11223fa60fb67d190e5b46696c786dd770121519
--- /dev/null
+++ b/LArCalorimeter/LArCellRec/src/LArRAWtoSuperCell.cxx
@@ -0,0 +1,81 @@
+/*
+ *   Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+ *
+ * Name :       LArRAWtoSuperCell.cxx
+ * PACKAGE :    LArCalorimeter/LArCell/LArRAWtoSuperCell
+ *
+ * AUTHOR :     Denis Oliveira Damazio
+ *
+ * PURPOSE :    prepares SuperCellContainer in CaloCellContainer formar from LArRawSCContainer
+ *
+ * **/
+
+#include "LArRAWtoSuperCell.h"
+#include "LArIdentifier/LArOnline_SuperCellID.h"
+#include "CaloDetDescr/CaloDetDescrManager.h"
+#include "LArCabling/LArOnOffIdMapping.h"
+#include "xAODEventInfo/EventInfo.h"
+
+LArRAWtoSuperCell::LArRAWtoSuperCell( const std::string& name, ISvcLocator* pSvcLocator)
+  : AthReentrantAlgorithm( name, pSvcLocator)//, m_sem_mgr(0)
+{
+}
+
+StatusCode
+LArRAWtoSuperCell::initialize()
+{
+
+        ATH_CHECK( m_sCellContainerInKey.initialize() );
+        ATH_CHECK( m_sCellContainerOutKey.initialize() );
+	ATH_CHECK(detStore()->retrieve(m_laronline_id,"LArOnline_SuperCellID"));
+	ATH_CHECK( m_caloMgrKey.initialize());
+        return StatusCode::SUCCESS;
+}
+
+StatusCode
+LArRAWtoSuperCell::execute(const EventContext& context) const
+{
+
+	SG::ReadCondHandle<CaloSuperCellDetDescrManager> caloMgrHandle{m_caloMgrKey, context};
+        const CaloSuperCellDetDescrManager* sem_mgr = *caloMgrHandle;;
+	
+        auto cellsHandle = SG::makeHandle( m_sCellContainerInKey, context );
+        if ( not cellsHandle.isValid() ) {
+          ATH_MSG_ERROR("Did not get CaloCellContainer input");
+          return StatusCode::FAILURE;
+        }
+        
+        const LArRawSCContainer* scells_from_sg = cellsHandle.cptr();
+        ATH_MSG_DEBUG("Got a CaloCellContainer input with size : "<<scells_from_sg->size());
+
+        SG::WriteHandle<CaloCellContainer> scellContainerHandle( m_sCellContainerOutKey, context);
+        auto new_scell_cont = std::make_unique<CaloCellContainer> ();
+
+	const EventIDBase& EIHandle = context.eventID();
+        const unsigned int bcid = EIHandle.bunch_crossing_id();
+        
+        new_scell_cont->reserve(scells_from_sg->size());
+
+        for(auto sc : *scells_from_sg){
+                if ( !sc ) continue;
+                // calculate the BCID for all the cells associated to the SC
+                // since this is emulation
+                IdentifierHash hash_id = m_laronline_id->channel_Hash(sc->hardwareID()); 
+                const CaloDetDescrElement* dde = sem_mgr ->get_element(hash_id);
+		CaloCell* cell = new CaloCell();
+		cell->setCaloDDE(dde);
+		const std::vector< unsigned short >& bcids = sc->bcids();
+		const std::vector< int >& energies = sc->energies();
+		const std::vector< bool>& satur = sc->satur();
+		float energy(0.);
+		bool saturation(false);
+		for(unsigned int i=0;i<bcids.size();i++) if ( bcids[i]==bcid ) {energy=energies[i]; saturation = satur[i];}
+                cell->setEnergy( energy );
+		// we probably should soon associate some quality information to the saturation, maybe the bcid to provenance
+		cell->setQuality((unsigned short)saturation);
+                new_scell_cont->push_back( std::move(cell) );
+        }
+	ATH_CHECK( scellContainerHandle.record( std::move(new_scell_cont) ) );
+
+        return StatusCode::SUCCESS;
+}
diff --git a/LArCalorimeter/LArCellRec/src/LArRAWtoSuperCell.h b/LArCalorimeter/LArCellRec/src/LArRAWtoSuperCell.h
new file mode 100644
index 0000000000000000000000000000000000000000..ced43d0a9a72af1dc924183af76a488e0a126b77
--- /dev/null
+++ b/LArCalorimeter/LArCellRec/src/LArRAWtoSuperCell.h
@@ -0,0 +1,63 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+/**
+ * Name :       LArRAWtoSuperCell.h
+ * PACKAGE :    LArCalorimeter/LArROD
+ *
+ * AUTHOR :     Denis Oliveira Damazio
+ *
+ * PURPOSE :    prepares SuperCellContainer in CaloCellContainer type from RAW SC type
+ *
+ * **/
+
+#ifndef LARCELL_LARRAWTOSUPERCELL
+#define LARCELL_LARRAWTOSUPERCELL
+
+#include "AthenaBaseComps/AthReentrantAlgorithm.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "StoreGate/ReadCondHandleKey.h"
+#include "StoreGate/WriteHandleKey.h"
+#include "CaloEvent/CaloCellContainer.h"
+#include "LArRawEvent/LArRawSCContainer.h"
+
+
+class LArOnline_SuperCellID;
+class LArOnOffIdMapping;
+class CaloSuperCellDetDescrManager;
+
+class LArRAWtoSuperCell : public AthReentrantAlgorithm
+{
+
+public :
+        LArRAWtoSuperCell( const std::string& name, ISvcLocator* pSvcLocator);
+        virtual ~LArRAWtoSuperCell() { }
+        StatusCode initialize();
+        StatusCode finalize() { return StatusCode::SUCCESS;}
+        StatusCode execute(const EventContext& context) const;
+
+private:
+
+  /// Property: SG key for the input calorimeter cell container.
+  SG::ReadHandleKey<LArRawSCContainer> m_sCellContainerInKey
+        { this, "SCellContainerIn", "SC_ET",
+                "SG key for the input supercell LAr channel container"};
+
+  /// Property: SG key for the output supercell LAr channel container.
+  SG::WriteHandleKey<CaloCellContainer> m_sCellContainerOutKey
+        { this, "SCellContainerOut", "SCell_ET",
+                "SG key for the output supercell LAr channel container"};
+
+  /// Geometry manager.
+  SG::ReadCondHandleKey<CaloSuperCellDetDescrManager> m_caloMgrKey
+        {this, "CaloSuperCellDetDescrManager", "CaloSuperCellDetDescrManager", "SG Key for CaloDetDescrManager in the Condition Store" };
+
+  //Identifier helper
+  const LArOnline_SuperCellID* m_laronline_id = nullptr;
+
+};
+
+#endif
diff --git a/LArCalorimeter/LArCellRec/src/components/LArCellRec_entries.cxx b/LArCalorimeter/LArCellRec/src/components/LArCellRec_entries.cxx
index 3cd0e277522263fdada67e82359c680e6d2a48df..f9a119d3c48ce3dd078c54c0ccb1463c25bc3156 100644
--- a/LArCalorimeter/LArCellRec/src/components/LArCellRec_entries.cxx
+++ b/LArCalorimeter/LArCellRec/src/components/LArCellRec_entries.cxx
@@ -14,6 +14,7 @@
 #include "../LArTimeVetoAlg.h"
 #include "../LArCellContHVCorrTool.h"
 #include "../LArHVFraction.h"
+#include "../LArRAWtoSuperCell.h"
 
 DECLARE_COMPONENT( LArNoisyROAlg )
 DECLARE_COMPONENT( LArNonLinearity )
@@ -31,3 +32,4 @@ DECLARE_COMPONENT( LArCollisionTimeAlg )
 DECLARE_COMPONENT( LArTimeVetoAlg )
 DECLARE_COMPONENT( LArCellContHVCorrTool )
 DECLARE_COMPONENT( LArHVFraction )
+DECLARE_COMPONENT( LArRAWtoSuperCell )
diff --git a/LArCalorimeter/LArExample/LArConditionsCommon/python/LArAlignable.py b/LArCalorimeter/LArExample/LArConditionsCommon/python/LArAlignable.py
index cac079bb3ff6f3c8588af7190c4982225e1985ba..ef954d398353561e540398c5b63932ddc0298461 100755
--- a/LArCalorimeter/LArExample/LArConditionsCommon/python/LArAlignable.py
+++ b/LArCalorimeter/LArExample/LArConditionsCommon/python/LArAlignable.py
@@ -29,7 +29,10 @@ if activateCondAlgs:
     condSeq += LArAlignCondAlg("LArAlignCondAlg")
     from CaloAlignmentAlgs.CaloAlignmentAlgsConf import CaloAlignCondAlg
     condSeq += CaloAlignCondAlg("CaloAlignCondAlg")
-    if DetFlags.detdescr.Tile_on():
-      #Calo super cell building works only if both LAr and Tile are present
+    # Configure Super Cell Alignment condition algorithm
+    # Calo super cell building works only if both LAr and Tile are present
+    # And we need to make sure this is a Run3 geometry layout
+    from AtlasGeoModel.CommonGMJobProperties import CommonGeometryFlags as commonGeoFlags
+    if commonGeoFlags.Run() == "RUN3" and DetFlags.detdescr.Tile_on():
       from CaloAlignmentAlgs.CaloAlignmentAlgsConf import CaloSuperCellAlignCondAlg
       condSeq += CaloSuperCellAlignCondAlg("CaloSuperCellAlignCondAlg")
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/python/LArGMConfig.py b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/python/LArGMConfig.py
index 402641c9316413a0f369457de53d221fb0a50373..f3ae20e3c090bc4a50d5e772be19040860def17e 100644
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/python/LArGMConfig.py
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/python/LArGMConfig.py
@@ -10,6 +10,7 @@ def LArGMCfg(configFlags):
     result=GeoModelCfg(configFlags)
 
     doAlignment=configFlags.LAr.doAlign
+    activateCondAlgs = not configFlags.GeoModel.Align.LegacyConditionsAccess
 
     tool = CompFactory.LArDetectorToolNV(ApplyAlignments=doAlignment, EnableMBTS=configFlags.Detector.GeometryMBTS)
     if configFlags.Common.ProductionStep != ProductionStep.Simulation and configFlags.Common.ProductionStep != ProductionStep.FastChain:
@@ -32,17 +33,17 @@ def LArGMCfg(configFlags):
                 result.merge(addFolders(configFlags,"/LAR/Align","LAR_ONL",className="DetCondKeyTrans"))
                 result.merge(addFolders(configFlags,"/LAR/LArCellPositionShift","LAR_ONL",className="CaloRec::CaloCellPositionShift"))
 
-        if configFlags.Common.Project != 'AthSimulation':
+        if activateCondAlgs:
             result.addCondAlgo(CompFactory.LArAlignCondAlg())
             result.addCondAlgo(CompFactory.CaloAlignCondAlg())
-            if configFlags.Detector.GeometryTile:
+            if configFlags.GeoModel.Run == 'RUN3' and configFlags.Detector.GeometryTile:
                 #Calo super cell building works only if both LAr and Tile are present
                 result.addCondAlgo(CompFactory.CaloSuperCellAlignCondAlg())
     else:
         # Build unalinged CaloDetDescrManager instance in the Condition Store
-        if configFlags.Common.Project != 'AthSimulation':
+        if activateCondAlgs:
             result.addCondAlgo(CompFactory.CaloAlignCondAlg(LArAlignmentStore="",CaloCellPositionShiftFolder=""))
-            if configFlags.Detector.GeometryTile:
+            if configFlags.GeoModel.Run == 'RUN3' and configFlags.Detector.GeometryTile:
                 result.addCondAlgo(CompFactory.CaloSuperCellAlignCondAlg())
             
     return result
diff --git a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
index 7fe8cfba75971c3a588ef17bcb66a6c2621aa13f..4e2fa062f93e5748ea13db547ea7b729037362c2 100755
--- a/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
+++ b/LArCalorimeter/LArGeoModel/LArGeoAlgsNV/src/LArDetectorTool.cxx
@@ -8,6 +8,7 @@
 #include "LArDetectorFactory.h"
 #include "LArDetectorFactoryLite.h"
 #include "LArGeoCode/VDetectorParameters.h"
+#include "LArGeoRAL/RAL.h"
 #include "GeoModelUtilities/GeoModelExperiment.h"
 #include "GaudiKernel/IService.h"
 #include "GaudiKernel/ISvcLocator.h"
@@ -146,6 +147,9 @@ StatusCode LArDetectorToolNV::create()
     theLArFactoryLite.setBarrelSagging(m_barrelSaggingOn);
     theLArFactoryLite.create(world);
     m_manager = theLArFactoryLite.getDetectorManager();
+
+    std::unique_ptr<LArGeo::VDetectorParameters> params = std::make_unique<LArGeo::RAL>();
+    LArGeo::VDetectorParameters::SetInstance(std::move(params));
   }
   else {
     // Geometry is constructed from the Geometry DB
diff --git a/LArCalorimeter/LArL1Sim/LArL1Sim/LArTTL1Maker.h b/LArCalorimeter/LArL1Sim/LArL1Sim/LArTTL1Maker.h
index b18aa7520a22f8d52326bd6ef87f8b689e77993a..1d75f11aabf66a646e9bc42db83ceaaacfb89deb 100755
--- a/LArCalorimeter/LArL1Sim/LArL1Sim/LArTTL1Maker.h
+++ b/LArCalorimeter/LArL1Sim/LArL1Sim/LArTTL1Maker.h
@@ -23,7 +23,6 @@
 #include "LArElecCalib/ILArfSampl.h"
 
 #include "AthenaKernel/IAthRNGSvc.h"
-#include "AthenaKernel/IAtRndmGenSvc.h"
 
 #include "StoreGate/ReadCondHandleKey.h"
 #include "StoreGate/ReadHandleKey.h"
diff --git a/LArCalorimeter/LArMonitoring/python/LArHVDBConfig.py b/LArCalorimeter/LArMonitoring/python/LArHVDBConfig.py
deleted file mode 100644
index 9c46927804017c7060722ce69b7f0e2bfce61f15..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArMonitoring/python/LArHVDBConfig.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-# python fragment to configure LAr HV conditions chain
-
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from IOVDbSvc.IOVDbSvcConfig import IOVDbSvcCfg,addFolders
-
-def LArHVDBCfg(configFlags):
-
-   result=ComponentAccumulator()
-   result.merge(IOVDbSvcCfg(configFlags))
-
-   isMC=configFlags.Input.isMC
-   isOnline=configFlags.Common.isOnline
-
-   if not isMC and not isOnline:
-      result.merge(addFolders(configFlags,["/LAR/DCS/HV/BARREl/I16","/LAR/DCS/HV/BARREL/I8"],detDb="DCS_OFL",className="CondAttrListCollection"))
-      result.merge(addFolders(configFlags,["/LAR/IdentifierOfl/HVLineToElectrodeMap","/LAR/HVPathologiesOfl/Pathologies"],detDb="LAR_OFL",className="AthenaAttributeList"))
-      if configFlags.GeoModel.Run != "RUN1": 
-         result.merge(addFolders(configFlags,["/LAR/HVPathologiesOfl/Rvalues"],detDb="LAR_OFL",className="AthenaAttributeList"))
- 
-      from LArRecUtils.LArRecUtilsConf import LArHVIdMappingAlg
-      result.addCondAlgo(LArHVIdMappingAlg(ReadKey="/LAR/IdentifierOfl/HVLineToElectrodeMap",WriteKey="LArHVIdMap"))
- 
-      from LArRecUtils.LArRecUtilsConf import LArHVPathologyDbCondAlg
-      result.addCondAlgo(LArHVPathologyDbCondAlg(PathologyFolder="/LAR/HVPathologiesOfl/Pathologies",HVMappingKey="LArHVIdMap", HVPAthologyKey="LArHVPathology"))
- 
-      from LArRecUtils.LArRecUtilsConf import LArHVCondAlg
-      if configFlags.GeoModel.Run == "RUN1": 
-         result.addCondAlgo(LArHVCondAlg(HVPathologies="LArHVPathology",OutputHVData="LArHVData",doR=False))
-      else:   
-         result.addCondAlgo(LArHVCondAlg(HVPathologies="LArHVPathology",OutputHVData="LArHVData"))
- 
-      from LArRecUtils.LArRecUtilsConf import LArHVScaleCorrCondAlg
-      hvscale = LArHVScaleCorrCondAlg(keyHVdata="LArHVData",keyOutputCorr="LArHVScaleCorrRecomputed")
-      hvscale.UndoOnlineHVCorr=True
-      result.addCondAlgo(hvscale)
-
-   if isMC:
-      result.merge(addFolders(configFlags,detDb="LAR_OFL",folders=["/LAR/Identifier/HVLineToElectrodeMap<tag>LARHVLineToElectrodeMap-001</tag>"],className="AthenaAttributeList"))
-
-   return result
-
-if __name__=="__main__":
-    from AthenaConfiguration.AllConfigFlags import ConfigFlags
-    from AthenaCommon.Logging import log
-    from AthenaCommon.Constants import DEBUG
-    from AthenaCommon.Configurable import Configurable
-    Configurable.configurableRun3Behavior=1
-    log.setLevel(DEBUG)
-
-    from AthenaConfiguration.TestDefaults import defaultTestFiles
-    ConfigFlags.Input.Files = defaultTestFiles.RAW
-    ConfigFlags.lock()
-
-    cfg=ComponentAccumulator()
-    from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg
-    cfg.merge( ByteStreamReadCfg(ConfigFlags) )
-
-    from LArGeoAlgsNV.LArGMConfig import LArGMCfg
-    cfg.merge(LArGMCfg(ConfigFlags))
- 
-
-    cfg.merge(LArHVDBCfg(ConfigFlags))
-    f=open("LArHVDBConfig.pkl","wb")
-    cfg.store(f)
-    f.close()
diff --git a/LArCalorimeter/LArROD/python/LArFebErrorSummaryMakerConfig.py b/LArCalorimeter/LArROD/python/LArFebErrorSummaryMakerConfig.py
index 9daf99458c9942c6fbd0ba8c677411f58a093471..27bfeb0c09ded13b10f0bd43e49c939d3edc9124 100644
--- a/LArCalorimeter/LArROD/python/LArFebErrorSummaryMakerConfig.py
+++ b/LArCalorimeter/LArROD/python/LArFebErrorSummaryMakerConfig.py
@@ -6,8 +6,11 @@ from LArBadChannelTool.LArBadChannelConfig import LArBadFebCfg
 def LArFebErrorSummaryMakerCfg(configFlags):
 
     febSummaryMaker =LArFebErrorSummaryMaker()
-    from RecExConfig.RecFlags import rec
-    if int(rec.projectName()[4:6]) > 20:
+    projectName=configFlags.Input.ProjectName
+    
+    yearNumber=int(projectName[4:6])
+
+    if yearNumber > 20:
        febSummaryMaker.MaskFebScacStatus = [0x38680000,0x38720000]
        febSummaryMaker.MaskFebEvtId      = [0x38680000]
     else:
diff --git a/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolAverage.cxx b/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolAverage.cxx
index 161146b89cca021b06af175210ee1131171d1ece..ec16aca380378e8f50fc2dee3baf7b7cd05ba2e6 100755
--- a/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolAverage.cxx
+++ b/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolAverage.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -137,7 +137,15 @@ bool LArRawChannelBuilderToolAverage::buildRawChannel(const LArDigit* digit,
   if (energy<fMAXINT2) energy=fMAXINT2;
 
   
+      // Suppress false positive seen wth gcc11.
+#if __GNUC__ == 11
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
   (this->*m_buildIt)((int)(floor(energy+0.5)),time,iquality,iprovenance,digit);  
+#if __GNUC__ == 11
+# pragma GCC diagnostic pop
+#endif
 
   m_helper->incrementErrorCount(0);
   
diff --git a/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolCubic.cxx b/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolCubic.cxx
index dc0fac65194d60faf6565a722f28d7f767566378..97c5535340ca33ddea6d2939d88e72fe60b2d7b9 100755
--- a/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolCubic.cxx
+++ b/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolCubic.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -195,7 +195,16 @@ bool LArRawChannelBuilderToolCubic::buildRawChannel(const LArDigit* digit,
   if (energy<fMAXINT2) energy=fMAXINT2;
   
   
+  // Suppress false positive seen wth gcc11.
+#if __GNUC__ == 11
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
   (this->*m_buildIt)((int)(floor(energy+0.5)),(int)floor(time+0.5),iquality,iprovenance,digit);
+#if __GNUC__ == 11
+# pragma GCC diagnostic pop
+#endif
+
   m_helper->incrementErrorCount(0);
   
   return true;
diff --git a/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolOFCIter.cxx b/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolOFCIter.cxx
index f8b464dacd8644f9e7cc25014dc69ecaf1305da5..bc8dce75af88ae387097b1aa6b229e6a3cf297da 100755
--- a/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolOFCIter.cxx
+++ b/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolOFCIter.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -286,7 +286,15 @@ bool LArRawChannelBuilderToolOFCIter::buildRawChannel(const LArDigit* digit,
   if (energy<fMAXINT2) energy=fMAXINT2;
 
 
+  // Suppress false positive seen wth gcc11.
+#if __GNUC__ == 11
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
   (this->*m_buildIt)((int)(floor(energy+0.5)),(int)floor(time+0.5),iquality,iprovenance,digit);
+#if __GNUC__ == 11
+# pragma GCC diagnostic pop
+#endif
    
   
   m_helper->incrementErrorCount(0);
diff --git a/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolParabola.cxx b/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolParabola.cxx
index dfa62e6148df4598eff03c8dc2df301acae17c80..d1c7b45f02ae2a84fd703fd894408c6960efc853 100755
--- a/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolParabola.cxx
+++ b/LArCalorimeter/LArROD/src/LArRawChannelBuilderToolParabola.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 
@@ -89,8 +89,16 @@ bool LArRawChannelBuilderToolParabola::buildRawChannel(const LArDigit* digit,
   if (energy<fMAXINT2) energy=fMAXINT2;
 
   
-  
+  // Suppress false positive seen wth gcc11.
+#if __GNUC__ == 11
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
   (this->*m_buildIt)((int)(floor(energy+0.5)),time,iquality,iprovenance,digit);
+#if __GNUC__ == 11
+# pragma GCC diagnostic pop
+#endif
+
   m_helper->incrementErrorCount(0);
   
   return true;
diff --git a/LArCalorimeter/LArRecUtils/share/LArFCalTowerBuilderTool.ref b/LArCalorimeter/LArRecUtils/share/LArFCalTowerBuilderTool.ref
index 43e355d5ea183c8cb91dc9cc33c78f76275015eb..d8c699edf7e0735c155d001875f611263305691d 100644
--- a/LArCalorimeter/LArRecUtils/share/LArFCalTowerBuilderTool.ref
+++ b/LArCalorimeter/LArRecUtils/share/LArFCalTowerBuilderTool.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:34:52 CET 2021
+Wed Nov 17 09:54:50 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "LArRecUtils/LArFCalTowerBuilderTool_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "CaloIdCnv/CaloIdCnv_joboptions.py"
 Py:Athena            INFO including file "CaloConditions/CaloConditions_jobOptions.py"
@@ -26,20 +21,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:35:14 2021
+                                          running on pcaz004 on Wed Nov 17 09:54:55 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 3378 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 3427 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -159,7 +154,7 @@ BarrelConstruction   INFO   Use sagging in geometry  ? 0
 EMECConstruction     INFO multi-layered version of absorbers activated, parameter value is 1
 EMECConstruction     INFO activating LAr::EMEC::Pos::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Pos::OuterWheel
-ClassIDSvc           INFO getRegistryEntries: read 6066 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 5930 CLIDRegistry entries for module ALL
 CaloIDHelper_ID...   INFO in createObj: creating a TileTBID helper object in the detector store
 TileTBID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -177,7 +172,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -189,9 +184,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -208,23 +203,7 @@ CondInputLoader      INFO Adding base classes:
 CondInputLoader      INFO Will create WriteCondHandle dependencies for the following DataObjects:
     +  ( 'CaloRec::CaloCellPositionShift' , 'ConditionStore+LArCellPositionShift' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
-ClassIDSvc           INFO getRegistryEntries: read 6022 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6027 CLIDRegistry entries for module ALL
 ToolSvc.LArFCal...   INFO CaloTowerBuilder for the FCal initiated
 ApplicationMgr       INFO Application Manager Initialized successfully
 CondInputLoader      INFO created CondCont<CaloRec::CaloCellPositionShift> with key 'ConditionStore+LArCellPositionShift'
@@ -255,6 +234,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -265,7 +258,6 @@ IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
 test1
 towers
 0 1 1 0 
@@ -6678,25 +6670,25 @@ Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All]
 ApplicationMgr       INFO Application Manager Stopped successfully
 CondInputLoader      INFO Finalizing CondInputLoader...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.05 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.04 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnAttrIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnOffIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTPpmRxIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.02 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 1/0 objs/chan/bytes 1/1/173 ((     0.02 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.04 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 1/0 objs/chan/bytes 1/1/173 ((     0.03 ))s
 IOVDbFolder       WARNING Folder /LAR/Identifier/LArTTCellMapAtlas is requested but no data retrieved
-IOVDbSvc             INFO  bytes in ((      0.10 ))s
+IOVDbSvc             INFO  bytes in ((      0.11 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 3 ReadTime: ((     0.10 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 3 ReadTime: ((     0.11 ))s
 IOVDbSvc             INFO Connection COOLOFL_CALO/OFLP200 : nConnect: 1 nFolders: 3 ReadTime: ((     0.00 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      25(+-    43.3)/       0/     100 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    32.5(+-    50.7)/       0/     120 [ms] #=  4
-ChronoStatSvc        INFO Time User   : Tot= 1.67  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   80 [ms] Ave/Min/Max=      20(+-    34.6)/       0/      80 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      30(+-    46.4)/       0/     110 [ms] #=  4
+ChronoStatSvc        INFO Time User   : Tot=  1.1  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/LArCalorimeter/LArSamplesMon/LArSamplesMon/LArShapeCompleteMaker.h b/LArCalorimeter/LArSamplesMon/LArSamplesMon/LArShapeCompleteMaker.h
index 62ef18b84a1183df4b9b375b9fe1b72a4b25d0c6..f9df33611529e617552f5dafd0d89f02646b9e69 100755
--- a/LArCalorimeter/LArSamplesMon/LArSamplesMon/LArShapeCompleteMaker.h
+++ b/LArCalorimeter/LArSamplesMon/LArSamplesMon/LArShapeCompleteMaker.h
@@ -25,11 +25,9 @@
 
 class MsgStream;
 class StoreGateSvc;
-class CaloDetDescrManager;
 class ILArShape;
 class HWIdentifier;
 class Identifier;
-class CaloDetDescrElement;
 class LArOnlineID;
 
 class LArShapeCompleteMaker : public AthAlgorithm
@@ -39,9 +37,9 @@ class LArShapeCompleteMaker : public AthAlgorithm
   ~LArShapeCompleteMaker();
 
   //standart algorithm methods
-  virtual StatusCode initialize();
-  virtual StatusCode execute();
-  virtual StatusCode finalize();
+  virtual StatusCode initialize() override;
+  virtual StatusCode execute() override;
+  virtual StatusCode finalize() override;
   
  private:
    
diff --git a/LArCalorimeter/LArSamplesMon/LArSamplesMon/LArShapeCompleteMakerAlg.h b/LArCalorimeter/LArSamplesMon/LArSamplesMon/LArShapeCompleteMakerAlg.h
index 05e6c119c1dd7af21fcd03cd2c0cc9815d5269fe..69c4d0cc145ea20329aef110edde3d763e13c771 100644
--- a/LArCalorimeter/LArSamplesMon/LArSamplesMon/LArShapeCompleteMakerAlg.h
+++ b/LArCalorimeter/LArSamplesMon/LArSamplesMon/LArShapeCompleteMakerAlg.h
@@ -29,11 +29,9 @@
 
 class MsgStream;
 class StoreGateSvc;
-class CaloDetDescrManager;
 class ILArShape;
 class HWIdentifier;
 class Identifier;
-class CaloDetDescrElement;
 class LArOnlineID;
 
 class LArShapeCompleteMakerAlg : public AthAlgorithm
diff --git a/LArCalorimeter/LArTest/LArCalibTest/LArCalibTest/LArFakeCellFactor.h b/LArCalorimeter/LArTest/LArCalibTest/LArCalibTest/LArFakeCellFactor.h
deleted file mode 100755
index e03a743a65756d940ff538b9a42cc2e665dc05fb..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArTest/LArCalibTest/LArCalibTest/LArFakeCellFactor.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-//Dear emacs, this is -*-c++-*-
-#ifndef LARCALIBTEST_LARFAKECELLFACTOR
-#define LARCALIBTEST_LARFAKECELLFACTOR
-
-#include "AthenaBaseComps/AthAlgorithm.h"
-#include <string>
-
-
-class LArFakeCellFactor : public AthAlgorithm
-{
- public:
-  LArFakeCellFactor(const std::string & name, ISvcLocator * pSvcLocator);
-  ~LArFakeCellFactor();
-
-  StatusCode initialize(); 
-  StatusCode execute();
-  StatusCode finalize();
-
- private:
-  std::string m_key;
-  std::string m_fileName;
-  struct FileEntry {
-    float eta;
-    float phi;
-    float value;
-  };
-
-};
-
-#endif
diff --git a/LArCalorimeter/LArTest/LArCalibTest/share/ReadLArCellFactors.py b/LArCalorimeter/LArTest/LArCalibTest/share/ReadLArCellFactors.py
deleted file mode 100755
index 9dac19967e66e3bcbece70c06f9a5277aff7fabd..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArTest/LArCalibTest/share/ReadLArCellFactors.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#from AthenaCommon.GlobalFlags import GlobalFlags
-#GlobalFlags.DetGeo.set_atlas() 
-#GlobalFlags.Luminosity.set_zero()
-#GlobalFlags.DataSource.set_geant4()
-#GlobalFlags.InputFormat.set_pool()
-
-
-include( "RecExCond/RecExCommon_flags.py" )
-
-# Set local flags - only need LAr DetDescr
-DetFlags.detdescr.ID_setOff()
-DetFlags.detdescr.Tile_setOff()
-DetFlags.detdescr.Muon_setOff()
-
-include( "AthenaCommon/Atlas.UnixStandardJob.py" )
-
-include( "DetDescrCnvSvc/DetStore_joboptions.py" )
-
-include ("RecExCond/AllDet_detDescr.py")
-
-DetDescrCnvSvc = Service( "DetDescrCnvSvc" )
-#DetDescrCnvSvc.DetectorManagers+= ["CaloTTDescrManager"]
-#DetDescrCnvSvc.DetectorManagers += [ "CaloMgr" ]
-
-include( "LArDetMgrDetDescrCnv/LArDetMgrDetDescrCnv_joboptions.py" )
-theApp.Dlls+=["LArCalibTest"]
-theApp.TopAlg+=["LArFakeCellFactor"]
-
-LArFakeCellFactor=Algorithm("LArFakeCellFactor");
-LArFakeCellFactor.CorrectionKey="ZeeCalib"
-LArFakeCellFactor.InputFileName="zone2zoneCorrFactors.out"
-#LArFakeCellFactor.OutputLevel=DEBUG
-
-
-# -------- Service tuning -----------
-DetDescrCnvSvc = Service( "DetDescrCnvSvc" )
-DetDescrCnvSvc.DoIdChecks
-
-ToolSvc = Service( "ToolSvc" )
-
-# Number of events to be processed (default is 10)
-theApp.EvtMax = 0
-
-# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL )
-MessageSvc = Service( "MessageSvc" )
-MessageSvc.OutputLevel = INFO
-MessageSvc.defaultLimit=1000000
-# Don't print event number each event
-#AthenaEventLoopMgr = Service( "AthenaEventLoopMgr" )
-#AthenaEventLoopMgr.OutputLevel = INFO
-
-# For dumping SG
-## StoreGateSvc = Service( "StoreGateSvc" )
-## StoreGateSvc.Dump = TRUE
-## StoreGateSvc.OutputLevel = INFO
-
-## DetectorStore = Service( "DetectorStore" )
-## DetectorStore.Dump = TRUE
-## DetectorStore.OutputLevel = INFO
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/LArCalorimeter/LArTest/LArCalibTest/src/LArFakeCellFactor.cxx b/LArCalorimeter/LArTest/LArCalibTest/src/LArFakeCellFactor.cxx
deleted file mode 100755
index d5d162f34b332ffe10d5fe26ff17e456b82c0c5f..0000000000000000000000000000000000000000
--- a/LArCalorimeter/LArTest/LArCalibTest/src/LArFakeCellFactor.cxx
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "LArCalibTest/LArFakeCellFactor.h"
-#include "GaudiKernel/MsgStream.h"
-#include "CaloConditions/CaloCellFactor.h"
-#include "CaloIdentifier/CaloCell_ID.h"
-#include "CaloDetDescr/CaloDetDescrManager.h"
-#include "CaloDetDescr/CaloDetDescrElement.h"
-#include "StoreGate/StoreGateSvc.h"
-#include <iostream>
-#include <fstream>
-
-LArFakeCellFactor::LArFakeCellFactor(const std::string & name, 
-				   ISvcLocator * pSvcLocator) : 
-  AthAlgorithm(name,pSvcLocator) {
-  declareProperty("CorrectionKey",m_key="FakeScale",
-		  "Key of the CaloCellFactor object to produced");
-  declareProperty("InputFileName",m_fileName="",
-		  "Text file containing the correction");
-
-}
-
-
-LArFakeCellFactor::~LArFakeCellFactor() {}
-
-                            
-StatusCode LArFakeCellFactor::initialize() {
-  ATH_MSG_INFO ( " Building fake CellFactor object " );
-  const CaloCell_ID* cellID = nullptr;
-  ATH_CHECK( detStore()->retrieve(cellID) );
-  // Get hash range
-  IdentifierHash emMin, emMax;//, hecMin, hecMax, fcalMin, fcalMax;
-  cellID->calo_cell_hash_range(CaloCell_ID::LAREM,emMin,emMax);
-  ATH_MSG_DEBUG ( "Hash range LArEM: " << emMin << " - " << emMax  );
-  
-  //Build new CaloCellFactor object
-  CaloRec::CaloCellFactor* newScale=new CaloRec::CaloCellFactor(emMax);
-  ATH_CHECK( detStore()->record(newScale,m_key) );
-
-  if (m_fileName.size()>0) { //Have input file
-    //Helper values to interpret the file
-    const float etaHalfSize=0.1;
-    const float phiHalfSize=0.196349546; //pi/8
-    struct FileEntry entry{};
-    std::vector<FileEntry> valueList;
-    unsigned num; //Not really used....
-    std::ifstream infile(m_fileName.c_str());
-    if (!infile.good()) {
-      ATH_MSG_ERROR( "Could not open file " << m_fileName );
-      return StatusCode::FAILURE;
-    }
-    while(infile.good()) {
-      infile >> num >> entry.eta >> entry.phi >> entry.value;
-      ATH_MSG_DEBUG ( "Read: " << num << " "<< entry.eta << " "
-                      << entry.phi << " " << entry.value );
-      valueList.push_back(entry);
-    }
-    ATH_MSG_DEBUG ( "Read " << valueList.size() << " factors from file " 
-                    << m_fileName );
-    //Get DetDescrManager:
-    const CaloDetDescrManager* caloDetDescrMan = CaloDetDescrManager::instance();
-    unsigned filled=0;
-    unsigned notFilled=0;
-    //Now fill CaloCellFactor object
-    for (unsigned i=emMin;i<emMax;i++) {
-      //const CaloIdentifier cellId=cell_id(i);
-      const CaloDetDescrElement* caloDDE=caloDetDescrMan->get_element(i);
-      float etaCell=caloDDE->eta();
-      float phiCell=caloDDE->phi();
-      //Search eta/phi in list of values
-      //In principle this could be done much faster if we assume that the list
-      //is ordered.
-      std::vector<FileEntry>::const_iterator it=valueList.begin();
-      std::vector<FileEntry>::const_iterator it_e=valueList.end();
-      for(;it!=it_e;++it) {
-	if (etaCell<it->eta+etaHalfSize && etaCell>it->eta-etaHalfSize && 
-	    phiCell<it->phi+phiHalfSize && phiCell>it->phi-phiHalfSize) {
-	  if ((*newScale)[i] != 1.0) 
-	    ATH_MSG_WARNING ( " Value for eta=" << etaCell  
-                              << ", phi= " << phiCell << " already filled (" << 
-                              (*newScale)[i] <<  ")!" );
-	  (*newScale)[i]=it->value+1.0;
-	  filled++;
-	  ATH_MSG_DEBUG ( "Found value " << it->value 
-                          << " for eta=" << etaCell  << ", phi= " << phiCell 
-                          << " found in file " << m_fileName );
-	  break;
-	}
-      }// end loop searching for value in valueList
-      if (it==it_e) {
-	notFilled++;
-	ATH_MSG_DEBUG ( "No value for eta=" << etaCell 
-                        << ", phi= " << phiCell << " found in file " << m_fileName 
-                        );
-      }
-    }//End loop over all cells.
-    ATH_MSG_INFO ( "Found values for " << filled << " cells. " 
-                   << notFilled << " cells not found, used default value" );
-    //Lock object here?
-  }//end if fileName.size()>0
-  return StatusCode::SUCCESS;
-}
-
-
-StatusCode  LArFakeCellFactor::execute() 
-{ 
-  return StatusCode::SUCCESS;
-}
-
-StatusCode  LArFakeCellFactor::finalize() 
-{ 
-  return StatusCode::SUCCESS;
-}
diff --git a/LArCalorimeter/LArTest/LArCalibTest/src/components/LArCalibTest_entries.cxx b/LArCalorimeter/LArTest/LArCalibTest/src/components/LArCalibTest_entries.cxx
index 1944782279e4bb9a0c0ee6fdcabe7a69ec7bc896..9bd8e0a11b49e284d027770b13ff64d956219316 100644
--- a/LArCalorimeter/LArTest/LArCalibTest/src/components/LArCalibTest_entries.cxx
+++ b/LArCalorimeter/LArTest/LArCalibTest/src/components/LArCalibTest_entries.cxx
@@ -1,9 +1,7 @@
 #include "LArCalibTest/LArCablingChecker.h"
-#include "LArCalibTest/LArFakeCellFactor.h"
 #include "LArCalibTest/LArReadHadDMCoeffFile.h"
 #include "LArCalibTest/LArReadHadDMCoeffFile2.h"
 #include "LArCalibTest/DumpCaloBadChannels.h"
-//#include "LArCalibTest/FixLArIdMap.h"
 #include "LArCalibTest/LArFecLvTempDcsTest.h"
 #include "LArCalibTest/FixLArElecCalib.h"
 #include "LArCalibTest/LArIdMapConvert.h"
@@ -17,9 +15,7 @@
 DECLARE_COMPONENT( LArCablingChecker )
 DECLARE_COMPONENT( LArReadHadDMCoeffFile )
 DECLARE_COMPONENT( LArReadHadDMCoeffFile2 )
-DECLARE_COMPONENT( LArFakeCellFactor )
 DECLARE_COMPONENT( DumpCaloBadChannels )
-//DECLARE_COMPONENT( FixLArIdMap )
 DECLARE_COMPONENT( LArFecLvTempDcsTest )
 DECLARE_COMPONENT( FixLArElecCalib )
 DECLARE_COMPONENT( LArIdMapConvert )
diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest.ref b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest.ref
index 210693f02fe88ceadec17e11d01d26cbc5c01d2c..1ba95a2d81754cffbc32ee2d9c4941b23c49c293 100644
--- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest.ref
+++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTest.ref
@@ -1,134 +1,17 @@
-Mon Nov  1 22:12:33 CET 2021
-Preloading tcmalloc_minimal.so
-Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
-Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
-Py:Athena            INFO including file "AthenaCommon/Execution.py"
-Py:Athena            INFO including file "LArConditionsTest/LArConditionsTest_jobOptions.py"
-Py:Athena            INFO including file "AthenaCommon/Atlas_Gen.UnixStandardJob.py"
-Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
-Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
-Py:Athena            INFO including file "LArRawConditions/LArIdMap_ATLAS_jobOptions.py"
-Py:Athena            INFO including file "LArConditionsCommon/LArIdMap_MC_jobOptions.py"
 Py:JobPropertyContainer::    INFO  setting folder /LAR/Identifier/OnOffIdMap with tag LARIdentifierOnOffIdMap-012
 Py:JobPropertyContainer::    INFO  setting folder /LAR/Identifier/CalibIdMap with tag LARIdentifierCalibIdMap-012
 Py:JobPropertyContainer::    INFO  setting folder /LAR/Identifier/FebRodMap with tag LARIdentifierFebRodMap-005
-Py:Athena            INFO including file "LArIdCnv/LArIdCnv_joboptions.py"
-Py:Athena            INFO including file "LArTools/LArTools_jobOptions.py"
-Py:Athena            INFO including file "CaloIdCnv/CaloIdCnv_joboptions.py"
-Py:Athena            INFO including file "CaloConditions/CaloConditions_jobOptions.py"
-Py:Athena            INFO including file "CaloConditions/LArTTCellMap_ATLAS_jobOptions.py"
-Py:Athena            INFO including file "CaloConditions/CaloTTIdMap_ATLAS_jobOptions.py"
-Py:Athena            INFO including file "CaloDetMgrDetDescrCnv/CaloDetMgrDetDescrCnv_joboptions.py"
-Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:Athena            INFO including file "LArCondAthenaPool/LArCondAthenaPool_joboptions.py"
-Py:Athena            INFO including file "AthenaCommon/runbatch.py"
-ApplicationMgr    SUCCESS 
-====================================================================================================================================
-                                                   Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:12:41 2021
-====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 3378 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
-MetaDataSvc          INFO Initializing MetaDataSvc
-PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
-PoolSvc              INFO Frontier compression level set to 5
-DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
-PoolSvc              INFO Successfully setup replica sorting algorithm
-PoolSvc              INFO Setting up APR FileCatalog and Streams
-PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
-PoolSvc              INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml
-PoolSvc              INFO POOL WriteCatalog is file:Catalog1.xml
-DbSession            INFO     Open     DbSession    
-Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
-MetaDataSvc          INFO Found MetaDataTools = PublicToolHandleArray([])
-IOVDbSvc             INFO Only 5 POOL conditions files will be open at once
-IOVDbSvc             INFO Cache alignment will be done in 3 slices
-IOVDbSvc             INFO Global tag: OFLCOND-CSC-00-01-00 set from joboptions
-IOVDbSvc             INFO Folder /LAR/Identifier/OnOffIdMap, adding new key tag with value LARIdentifierOnOffIdMap-012
-IOVDbSvc             INFO Folder /LAR/Identifier/CalibIdMap, adding new key tag with value LARIdentifierCalibIdMap-012
-IOVDbSvc             INFO Folder /LAR/Identifier/FebRodMap, adding new key tag with value LARIdentifierFebRodMap-005
 IOVDbFolder          INFO Read from meta data only for folder /TagInfo
-IOVDbSvc             INFO Initialised with 3 connections and 10 folders
-IOVDbSvc             INFO Service IOVDbSvc initialised successfully
-IOVDbSvc             INFO   AlgTool: ToolSvc.IOVDbMetaDataTool
-TagInfoMgr           INFO   AlgTool: TagInfoMgr.IOVDbMetaDataTool
-ClassIDSvc           INFO getRegistryEntries: read 1513 CLIDRegistry entries for module ALL
-IOVDbSvc             INFO preLoadAddresses: Removing folder /TagInfo. It should only be in the file meta data and was not found.
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
-IOVSvc.IOVSvcTool    INFO IOVRanges will be checked at every Event
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_CALO/OFLP200
-IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Disconnecting from COOLOFL_CALO/OFLP200
-IOVDbSvc             INFO Added taginfo remove for /LAR/Align
-IOVDbSvc             INFO Added taginfo remove for /LAR/Identifier/CalibIdMap
-IOVDbSvc             INFO Added taginfo remove for /LAR/Identifier/FebRodMap
-IOVDbSvc             INFO Added taginfo remove for /LAR/Identifier/OnOffIdMap
-IOVDbSvc             INFO Added taginfo remove for /CALO/Ofl/Identifier/CaloTTOnAttrIdMapAtlas
-IOVDbSvc             INFO Added taginfo remove for /CALO/Ofl/Identifier/CaloTTOnOffIdMapAtlas
-IOVDbSvc             INFO Added taginfo remove for /CALO/Ofl/Identifier/CaloTTPpmRxIdMapAtlas
-IOVDbSvc             INFO Added taginfo remove for /LAR/LArCellPositionShift
-IOVDbSvc             INFO Added taginfo remove for /LAR/Identifier/LArTTCellMapAtlas
-ClassIDSvc           INFO getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 212 CLIDRegistry entries for module ALL
 DetDescrCnvSvc       INFO  initializing 
 DetDescrCnvSvc       INFO Found DetectorStore service
 DetDescrCnvSvc       INFO  filling proxies for detector managers 
-DetDescrCnvSvc       INFO  filling address for CaloTTMgr with CLID 117659265 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for CaloMgr with CLID 4548337 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for CaloSuperCellMgr with CLID 241807251 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for CaloIdManager with CLID 125856940 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for IdDict with CLID 2411 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for AtlasID with CLID 164875623 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for PixelID with CLID 2516 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for SCT_ID with CLID 2517 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for TRT_ID with CLID 2518 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for HGTD_ID with CLID 79264207 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for SiliconID with CLID 129452393 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArEM_ID with CLID 163583365 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArEM_SuperCell_ID with CLID 99488227 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArHEC_ID with CLID 3870484 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArHEC_SuperCell_ID with CLID 254277678 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArFCAL_ID with CLID 45738051 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArFCAL_SuperCell_ID with CLID 12829437 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArMiniFCAL_ID with CLID 79264204 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArOnlineID with CLID 158698068 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for TTOnlineID with CLID 38321944 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArOnline_SuperCellID with CLID 115600394 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArHVLineID with CLID 27863673 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for LArElectrodeID with CLID 80757351 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for TileID with CLID 2901 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for Tile_SuperCell_ID with CLID 49557789 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for TileHWID with CLID 2902 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for TileTBID with CLID 2903 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for MDTIDHELPER with CLID 4170 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for CSCIDHELPER with CLID 4171 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for RPCIDHELPER with CLID 4172 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for TGCIDHELPER with CLID 4173 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for CaloLVL1_ID with CLID 108133391 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for CaloCell_ID with CLID 123500438 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for CaloCell_SuperCell_ID with CLID 128365736 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for CaloDM_ID with CLID 167756483 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for ZdcID with CLID 190591643 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for JTower_ID with CLID 218674799 and storage type 68 to detector store 
-DetDescrCnvSvc       INFO  filling address for GTower_ID with CLID 49678914 and storage type 68 to detector store 
 GeoModelSvc::RD...WARNING  Getting PixTBMatComponents with default tag
 GeoModelSvc::RD...WARNING  Getting PixTBMaterials with default tag
 GeoModelSvc::RD...WARNING  Getting InDetMatComponents with default tag
@@ -171,13 +54,11 @@ LArHVLineID          INFO [initialize_from_dictionary] >  HV line range -> 11/1/
 LArHVLineID          INFO [init_hashes()] > Hvline_size= 5008
 LAr::BarrelCryo...   INFO  new description with barrel croystat bolts
 LAr::BarrelCryo...   INFO  new coil bumper description 
-BarrelConstruction   INFO Getting primary numbers for ATLAS, ATLAS-R2-2016-01-00-01
 BarrelConstruction   INFO   Makes detailed absorber sandwich  ? 1 1
 BarrelConstruction   INFO   Use sagging in geometry  ? 0
 EMECConstruction     INFO multi-layered version of absorbers activated, parameter value is 1
 EMECConstruction     INFO activating LAr::EMEC::Pos::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Pos::OuterWheel
-ClassIDSvc           INFO getRegistryEntries: read 6176 CLIDRegistry entries for module ALL
 CaloIDHelper_ID...   INFO in createObj: creating a TileTBID helper object in the detector store
 TileTBID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -186,7 +67,6 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
 TileDddbManager      INFO n_timod = 320
 TileDddbManager      INFO n_cuts = 9
@@ -195,11 +75,9 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-ClassIDSvc           INFO getRegistryEntries: read 55 CLIDRegistry entries for module ALL
 CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_ID helper object in the detector store
 CaloIDHelper_ID...   INFO in createObj: creating a LArEM_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -207,21 +85,12 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 TileDetDescrMan...   INFO Entering create_elements()
-ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr
-ClassIDSvc           INFO getRegistryEntries: read 444 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 222 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 6022 CLIDRegistry entries for module ALL
-CondInputLoader      INFO Initializing CondInputLoader...
-ClassIDSvc           INFO getRegistryEntries: read 12 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Adding base classes:
   +  ( 'AthenaAttributeList' , 'ConditionStore+/LAR/Identifier/CalibIdMap' )   ->
   +  ( 'AthenaAttributeList' , 'ConditionStore+/LAR/Identifier/FebRodMap' )   ->
@@ -234,28 +103,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'AthenaAttributeList' , 'ConditionStore+/LAR/Identifier/OnOffIdMap' ) 
     +  ( 'CaloRec::CaloCellPositionShift' , 'ConditionStore+LArCellPositionShift' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
-ClassIDSvc           INFO getRegistryEntries: read 452 CLIDRegistry entries for module ALL
-xAODMaker::Even...   INFO Initializing xAODMaker::EventInfoCnvAlg
-ClassIDSvc           INFO getRegistryEntries: read 342 CLIDRegistry entries for module ALL
-xAODMaker::Even...   INFO Beam conditions service not available
-xAODMaker::Even...   INFO Will not fill beam spot information into xAOD::EventInfo
-LArConditionsTe...  DEBUG Property update for OutputLevel : new value = 2
 LArConditionsTe...  DEBUG  TestCondObjs flag         =  'TestCondObjs':True
 LArConditionsTe...  DEBUG  ReadCondObjs flag         =  'ReadCondObjs':False
 LArConditionsTe...  DEBUG  WriteCondObjs flag        =  'WriteCondObjs':True
@@ -268,9 +115,6 @@ LArOnlineIDDetD...   INFO in createObj: creating a LArOnlineID helper object in
 LArOnlineID          INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArConditionsTe...  DEBUG initialize done
-LArConditionsTe...  DEBUG input handles: 0
-LArConditionsTe...  DEBUG output handles: 0
-LArConditionsTe...  DEBUG Data Deps for LArConditionsTestAlg
 EventSelector        INFO  Enter McEventSelector Initialization 
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
 ApplicationMgr       INFO Application Manager Initialized successfully
@@ -281,23 +125,8 @@ CondInputLoader      INFO created CondCont<CaloRec::CaloCellPositionShift> with
 CondInputLoader      INFO created CondCont<DetCondKeyTrans> with key 'ConditionStore+/LAR/Align'
 ApplicationMgr       INFO Application Manager Started successfully
 AthenaEventLoopMgr   INFO   ===>>>  start of run 0    <<<===
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
-IOVDbFolder          INFO HVS tag OFLCOND-CSC-00-01-00 resolved to LARAlign_CSC_01 for folder /LAR/Align
-IOVDbFolder          INFO HVS tag OFLCOND-CSC-00-01-00 resolved to LArCellPositionShift-ideal for folder /LAR/LArCellPositionShift
-IOVDbFolder          INFO HVS tag OFLCOND-CSC-00-01-00 resolved to LARIdentifierLArTTCellMapAtlas-HadFcalFix for folder /LAR/Identifier/LArTTCellMapAtlas
-IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Opened read transaction for POOL PersistencySvc
-EventPersistenc...   INFO Added successfully Conversion service:AthenaPoolCnvSvc
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
-DbSession            INFO     Open     DbSession    
-Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
-Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] E01BD448-BF95-DB11-983E-0015C5098AA3
-Domain[ROOT_All]     INFO                           /cvmfs/atlas-condb.cern.ch/repo/conditions/oflcond/oflcond.000002.conditions.simul.pool.v0000/oflcond.000002.conditions.simul.pool.v0000._0058.pool.root
-RootDatabase.open    INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/oflcond/oflcond.000002.conditions.simul.pool.v0000/oflcond.000002.conditions.simul.pool.v0000._0058.pool.root File version:51304
 CaloMgrDetDescrCnv   INFO in createObj: creating a Calo Detector Manager object in the detector store
 CaloIdMgrDetDes...   INFO in createObj: creating a CaloDescrManager object in the detector store
-ClassIDSvc           INFO getRegistryEntries: read 187 CLIDRegistry entries for module ALL
 CaloIDHelper_ID...   INFO in createObj: creating a CaloDM_ID helper object in the detector store
 CaloDM_ID            INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -307,25 +136,21 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
-Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
-Domain[ROOT_All]     INFO                           /cvmfs/atlas-condb.cern.ch/repo/conditions/cond08/cond08_mc.000003.gen.COND/cond08_mc.000003.gen.COND._0064.pool.root
-RootDatabase.open    INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond08/cond08_mc.000003.gen.COND/cond08_mc.000003.gen.COND._0064.pool.root File version:52200
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #0, run #0 0 events processed so far  <<<===
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
-IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
 LArOnOffMappingAlg   INFO Done reading online/offline identifier mapping
 LArOnOffMappingAlg   INFO Found 195072 online identifier and 182468 offline identifier. 12604 disconnected channels.
 LArOnOffMappingAlg   INFO recorded new LArOnOffIdMap with range {[0,l:0] - [INVALID]} into Conditions Store
@@ -6911,37 +6736,14 @@ LArConditionsTe...  DEBUG Total number of conditions objects 25088
 LArConditionsTe...  DEBUG Total number of correction objects 20
 LArConditionsTe...  DEBUG End of testCondObjects 
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #0 1 events processed so far  <<<===
-/cvmfs/atlas-co...   INFO Database being retired...
-Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] E01BD448-BF95-DB11-983E-0015C5098AA3
-/cvmfs/atlas-co...   INFO Database being retired...
-Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
-Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
-Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr       INFO Application Manager Stopped successfully
-CondInputLoader      INFO Finalizing CondInputLoader...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 7/2 objs/chan/bytes 7/1/1176 ((     0.09 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/CalibIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/10641036 ((     0.05 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/FebRodMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/42700 ((     0.02 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/OnOffIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/5462044 ((     0.08 ))s
-IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnAttrIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnOffIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTPpmRxIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 4/2 objs/chan/bytes 4/1/780 ((     0.02 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 7/0 objs/chan/bytes 7/1/1211 ((     0.03 ))s
 IOVDbFolder       WARNING Folder /LAR/Identifier/LArTTCellMapAtlas is requested but no data retrieved
-IOVDbSvc             INFO  bytes in ((      0.29 ))s
-IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 8 nFolders: 6 ReadTime: ((     0.29 ))s
-IOVDbSvc             INFO Connection COOLOFL_CALO/OFLP200 : nConnect: 1 nFolders: 3 ReadTime: ((     0.00 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  110 [ms] Ave/Min/Max=    27.5(+-    42.1)/       0/     100 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    18.6(+-      38)/       0/     110 [ms] #=  7
-ChronoStatSvc        INFO Time User   : Tot= 2.13  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg.ref b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg.ref
index 4f7a5a14a518e48b293f1505a0eba031d45d35f1..c21487fca481df83c5f0e9942e2fdb5ff12fc173 100644
--- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg.ref
+++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestReadNoReg.ref
@@ -1,7 +1,7 @@
-Mon Nov  1 22:12:33 CET 2021
+Wed Nov 17 09:55:39 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
@@ -9,14 +9,9 @@ Py:Athena            INFO including file "LArConditionsTest/LArConditionsTestRea
 Py:Athena            INFO including file "AthenaCommon/Atlas_Gen.UnixStandardJob.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "LArRawConditions/LArIdMap_ATLAS_jobOptions.py"
 Py:Athena            INFO including file "LArConditionsCommon/LArIdMap_MC_jobOptions.py"
@@ -38,19 +33,19 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:12:41 2021
+                                          running on pcaz004 on Wed Nov 17 09:55:44 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 3378 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 3427 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -91,11 +86,11 @@ Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] 99993A5
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 DbSession            INFO     Open     DbSession    
 Domain[ROOT_All]     INFO >   Access   DbDomain     READ      [ROOT_All] 
-Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 27C3CD83-94B9-B644-8855-1590EFA507A9
+Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] C03E9993-D83F-D74E-AA59-23F405188BBB
 Domain[ROOT_All]     INFO                           LarCondTestNoReg.root
 RootDatabase.open    INFO LarCondTestNoReg.root File version:62406
 TagInfoMgr           INFO   AlgTool: TagInfoMgr.IOVDbMetaDataTool
-ClassIDSvc           INFO getRegistryEntries: read 3486 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 3353 CLIDRegistry entries for module ALL
 IOVDbSvc             INFO preLoadAddresses: Removing folder /TagInfo. It should only be in the file meta data and was not found.
 IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
@@ -224,7 +219,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -236,9 +231,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -248,7 +243,7 @@ ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr
 ClassIDSvc           INFO getRegistryEntries: read 444 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO getRegistryEntries: read 222 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 4862 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 4864 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Initializing CondInputLoader...
 CondInputLoader      INFO Adding base classes:
   +  ( 'AthenaAttributeList' , 'ConditionStore+/LAR/Identifier/CalibIdMap' )   ->
@@ -262,22 +257,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'AthenaAttributeList' , 'ConditionStore+/LAR/Identifier/OnOffIdMap' ) 
     +  ( 'CaloRec::CaloCellPositionShift' , 'ConditionStore+LArCellPositionShift' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 ClassIDSvc           INFO getRegistryEntries: read 452 CLIDRegistry entries for module ALL
 xAODMaker::Even...   INFO Initializing xAODMaker::EventInfoCnvAlg
 ClassIDSvc           INFO getRegistryEntries: read 342 CLIDRegistry entries for module ALL
@@ -332,6 +311,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -350,7 +343,6 @@ IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
 LArOnOffMappingAlg   INFO Done reading online/offline identifier mapping
 LArOnOffMappingAlg   INFO Found 195072 online identifier and 182468 offline identifier. 12604 disconnected channels.
 LArOnOffMappingAlg   INFO recorded new LArOnOffIdMap with range {[0,l:0] - [INVALID]} into Conditions Store
@@ -622,7 +614,7 @@ LArConditionsTe...  DEBUG New        : chan id, gain, ramps [4.4.1.1.24.5.86.0]
 LArConditionsTe...  DEBUG Corrections: chan id, gain, ramps [4.4.1.1.24.5.86.0] 2 -582 -583 -584  Compare = 1
 LArConditionsTe...  DEBUG Iteration check OK 
 LArConditionsTe...  DEBUG Find check OK 
-Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 27C3CD83-94B9-B644-8855-1590EFA507A9
+Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] C03E9993-D83F-D74E-AA59-23F405188BBB
 Domain[ROOT_All]     INFO                           LarCondTestNoReg.root
 RootDatabase.open    INFO LarCondTestNoReg.root File version:62406
 LArConditionsTe...   INFO Retrieved ramps for LArRampsSingleGroup 
@@ -6282,31 +6274,31 @@ LArConditionsTe...  DEBUG Total number of correction objects 20
 LArConditionsTe...  DEBUG End of testCondObjects 
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #0 1 events processed so far  <<<===
 LarCondTestNoRe...   INFO Database being retired...
-Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] 27C3CD83-94B9-B644-8855-1590EFA507A9
+Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] C03E9993-D83F-D74E-AA59-23F405188BBB
 /cvmfs/atlas-co...   INFO Database being retired...
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] E01BD448-BF95-DB11-983E-0015C5098AA3
 /cvmfs/atlas-co...   INFO Database being retired...
 Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 LarCondTestNoRe...   INFO Database being retired...
-Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] 27C3CD83-94B9-B644-8855-1590EFA507A9
+Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   READ      [ROOT_All] C03E9993-D83F-D74E-AA59-23F405188BBB
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr       INFO Application Manager Stopped successfully
 CondInputLoader      INFO Finalizing CondInputLoader...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 7/2 objs/chan/bytes 7/1/1176 ((     0.11 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/CalibIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/10641036 ((     0.06 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 7/2 objs/chan/bytes 7/1/1176 ((     0.12 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/CalibIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/10641036 ((     0.07 ))s
 IOVDbFolder          INFO Folder /LAR/Identifier/FebRodMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/42700 ((     0.03 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/OnOffIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/5462044 ((     0.08 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/OnOffIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/5462044 ((     0.13 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnAttrIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnOffIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTPpmRxIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 4/2 objs/chan/bytes 4/1/780 ((     0.04 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 7/0 objs/chan/bytes 7/1/1211 ((     0.04 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 7/0 objs/chan/bytes 7/1/1211 ((     0.06 ))s
 IOVDbFolder       WARNING Folder /LAR/Identifier/LArTTCellMapAtlas is requested but no data retrieved
-IOVDbSvc             INFO  bytes in ((      0.35 ))s
+IOVDbSvc             INFO  bytes in ((      0.45 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 8 nFolders: 6 ReadTime: ((     0.35 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 8 nFolders: 6 ReadTime: ((     0.45 ))s
 IOVDbSvc             INFO Connection COOLOFL_CALO/OFLP200 : nConnect: 1 nFolders: 3 ReadTime: ((     0.00 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
@@ -6314,8 +6306,8 @@ ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
 cObjR_ALL            INFO Time User   : Tot=   30 [ms] Ave/Min/Max=   0.116(+-    1.07)/       0/      10 [ms] #=259
-cObj_ALL             INFO Time User   : Tot=   70 [ms] Ave/Min/Max=    6.36(+-    9.79)/       0/      30 [ms] #= 11
-ChronoStatSvc        INFO Time User   : Tot= 2.33  [s]  #=  1
+cObj_ALL             INFO Time User   : Tot=   60 [ms] Ave/Min/Max=    5.45(+-    7.82)/       0/      20 [ms] #= 11
+ChronoStatSvc        INFO Time User   : Tot= 1.89  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg.ref b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg.ref
index 3e2624d0d8e71d96c095143d51b784b0f3d043e8..be93d370883d78212eefc6685aa95fcb89764cdf 100644
--- a/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg.ref
+++ b/LArCalorimeter/LArTest/LArConditionsTest/share/LArConditionsTestWriteNoReg.ref
@@ -1,7 +1,7 @@
-Mon Nov  1 22:11:59 CET 2021
+Wed Nov 17 09:55:26 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
@@ -9,14 +9,9 @@ Py:Athena            INFO including file "LArConditionsTest/LArConditionsTestWri
 Py:Athena            INFO including file "AthenaCommon/Atlas_Gen.UnixStandardJob.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "LArRawConditions/LArIdMap_ATLAS_jobOptions.py"
 Py:Athena            INFO including file "LArConditionsCommon/LArIdMap_MC_jobOptions.py"
@@ -37,19 +32,19 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:12:12 2021
+                                          running on pcaz004 on Wed Nov 17 09:55:32 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 3378 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 3427 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -178,7 +173,7 @@ BarrelConstruction   INFO   Use sagging in geometry  ? 0
 EMECConstruction     INFO multi-layered version of absorbers activated, parameter value is 1
 EMECConstruction     INFO activating LAr::EMEC::Pos::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Pos::OuterWheel
-ClassIDSvc           INFO getRegistryEntries: read 6176 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6040 CLIDRegistry entries for module ALL
 CaloIDHelper_ID...   INFO in createObj: creating a TileTBID helper object in the detector store
 TileTBID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -196,7 +191,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -208,9 +203,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -220,7 +215,7 @@ ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr
 ClassIDSvc           INFO getRegistryEntries: read 444 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO getRegistryEntries: read 222 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 6022 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6027 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Initializing CondInputLoader...
 ClassIDSvc           INFO getRegistryEntries: read 12 CLIDRegistry entries for module ALL
 CondInputLoader      INFO Adding base classes:
@@ -235,22 +230,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'AthenaAttributeList' , 'ConditionStore+/LAR/Identifier/OnOffIdMap' ) 
     +  ( 'CaloRec::CaloCellPositionShift' , 'ConditionStore+LArCellPositionShift' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 ClassIDSvc           INFO getRegistryEntries: read 452 CLIDRegistry entries for module ALL
 xAODMaker::Even...   INFO Initializing xAODMaker::EventInfoCnvAlg
 ClassIDSvc           INFO getRegistryEntries: read 506 CLIDRegistry entries for module ALL
@@ -309,6 +288,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -327,7 +320,6 @@ IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 IOVDbSvc             INFO Disconnecting from COOLOFL_LAR/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [INVALID]}
 LArOnOffMappingAlg   INFO Done reading online/offline identifier mapping
 LArOnOffMappingAlg   INFO Found 195072 online identifier and 182468 offline identifier. 12604 disconnected channels.
 LArOnOffMappingAlg   INFO recorded new LArOnOffIdMap with range {[0,l:0] - [INVALID]} into Conditions Store
@@ -6924,7 +6916,7 @@ CondInputLoader      INFO Finalizing CondInputLoader...
 OutputCondition...   INFO Finalize: preparing to write conditions objects 
 DbSession            INFO     Open     DbSession    
 Domain[ROOT_All]     INFO >   Access   DbDomain     UPDATE    [ROOT_All] 
-Domain[ROOT_All]     INFO ->  Access   DbDatabase   CREATE    [ROOT_All] 27C3CD83-94B9-B644-8855-1590EFA507A9
+Domain[ROOT_All]     INFO ->  Access   DbDatabase   CREATE    [ROOT_All] C03E9993-D83F-D74E-AA59-23F405188BBB
 Domain[ROOT_All]     INFO                           LarCondTestNoReg.root
 RootDatabase.open    INFO LarCondTestNoReg.root File version:62406
 ClassIDSvc           INFO getRegistryEntries: read 35 CLIDRegistry entries for module ALL
@@ -6943,7 +6935,7 @@ StorageSvc           INFO DataHeaderForm_p6 [7BE56CEF-C866-4BEE-9348-A5F34B5F1DA
 OutputCondition...   INFO Written 3 objects to output stream
 OutputCondition...   INFO Register objects in IOV database, interval of validity [run,LB] from [0,0] to [2147483647,4294967295]
 OutputCondition...   INFO Register object LArRampMC#/LArCalorimeter/LArTests/LArRampsSingleGroup in IOV database folder /LArCalorimeter/LArTests/LArRampsSingleGroup without tagging
-ClassIDSvc           INFO getRegistryEntries: read 560 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 566 CLIDRegistry entries for module ALL
 IOVDbSvc             INFO Opening COOL connection for sqlite://;schema=mycool.db;dbname=OFLP200
 IOVDbSvc             INFO *** COOL  exception caught: The database does not exist
 IOVDbSvc             INFO Create a new conditions database: sqlite://;schema=mycool.db;dbname=OFLP200
@@ -6951,23 +6943,23 @@ OutputCondition...   INFO Register object LArRampMC#/LArCalorimeter/LArTests/LAr
 OutputCondition...   INFO Register object LArRampMC#/LArCalorimeter/LArTests/LArRampsFeedThroughGrouping in IOV database folder /LArCalorimeter/LArTests/LArRampsFeedThroughGrouping without tagging
 OutputCondition...   INFO Registered 3 objects in IOV database
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 7/2 objs/chan/bytes 7/1/1176 ((     0.10 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/CalibIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/10641036 ((     0.05 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/FebRodMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/42700 ((     0.02 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/OnOffIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/5462044 ((     0.07 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 7/2 objs/chan/bytes 7/1/1176 ((     0.14 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/CalibIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/10641036 ((     0.07 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/FebRodMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/42700 ((     0.04 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/OnOffIdMap (AttrList) db-read 7/1 objs/chan/bytes 7/1/5462044 ((     0.12 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnAttrIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTOnOffIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
 IOVDbFolder          INFO Folder /CALO/Ofl/Identifier/CaloTTPpmRxIdMapAtlas (PoolRef) db-read 0/0 objs/chan/bytes 0/1/0 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 4/2 objs/chan/bytes 4/1/780 ((     0.03 ))s
-IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 7/0 objs/chan/bytes 7/1/1211 ((     0.04 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 4/2 objs/chan/bytes 4/1/780 ((     0.04 ))s
+IOVDbFolder          INFO Folder /LAR/Identifier/LArTTCellMapAtlas (PoolRef) db-read 7/0 objs/chan/bytes 7/1/1211 ((     0.06 ))s
 IOVDbFolder       WARNING Folder /LAR/Identifier/LArTTCellMapAtlas is requested but no data retrieved
-IOVDbSvc             INFO  bytes in ((      0.31 ))s
+IOVDbSvc             INFO  bytes in ((      0.48 ))s
 IOVDbSvc             INFO Disconnecting from sqlite://;schema=mycool.db;dbname=OFLP200
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 1 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 8 nFolders: 6 ReadTime: ((     0.31 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 8 nFolders: 6 ReadTime: ((     0.48 ))s
 IOVDbSvc             INFO Connection COOLOFL_CALO/OFLP200 : nConnect: 1 nFolders: 3 ReadTime: ((     0.00 ))s
 LarCondTestNoRe...   INFO Database being retired...
-Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   CREATE    [ROOT_All] 27C3CD83-94B9-B644-8855-1590EFA507A9
+Domain[ROOT_All]     INFO ->  Deaccess DbDatabase   CREATE    [ROOT_All] C03E9993-D83F-D74E-AA59-23F405188BBB
 Domain[ROOT_All]     INFO >   Deaccess DbDomain     UPDATE    [ROOT_All] 
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
@@ -6975,12 +6967,12 @@ ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
 commitOutput         INFO Time User   : Tot=    0 [us]  #=  1
-fRep_ALL             INFO Time User   : Tot=   10 [ms] Ave/Min/Max=     2.5(+-    4.33)/       0/      10 [ms] #=  4
-cRepR_ALL            INFO Time User   : Tot=   10 [ms] Ave/Min/Max=  0.0392(+-   0.625)/       0/      10 [ms] #=255
+fRep_ALL             INFO Time User   : Tot=    0 [us] Ave/Min/Max=       0(+-       0)/       0/       0 [us] #=  4
+cRepR_ALL            INFO Time User   : Tot=    0 [us] Ave/Min/Max=       0(+-       0)/       0/       0 [us] #=255
 cRep_ALL             INFO Time User   : Tot=   40 [ms] Ave/Min/Max=      10(+-    17.3)/       0/      40 [ms] #=  4
-cObjR_ALL            INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      30(+-    46.4)/       0/     110 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    18.6(+-    41.6)/       0/     120 [ms] #=  7
-ChronoStatSvc        INFO Time User   : Tot= 2.56  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   90 [ms] Ave/Min/Max=    22.5(+-    33.4)/       0/      80 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=  100 [ms] Ave/Min/Max=    14.3(+-    31.1)/       0/      90 [ms] #=  7
+ChronoStatSvc        INFO Time User   : Tot= 2.88  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py b/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
index 2e22186408d559ea74fa8774fe96fb3e4ce8a18c..94bffb15398d8966b475e74092960611e422c8c1 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
@@ -13,9 +13,10 @@ class MuonPrdCacheNames(object):
     TgcCache       = "TgcPrdCache"
     sTgcCache      = "sTgcPrdCache"
     MmCache        = "MmPrdCache"
-    RpcCoinCache   = "RpcCoinCache"  
+    RpcCoinCache   = "RpcCoinCache"
     TgcCoinCache   = "TgcCoinCache"
 
+
 ## This configuration function creates the IdentifiableCaches for PRD
 #
 # The function returns a ComponentAccumulator which should be loaded first
@@ -45,161 +46,181 @@ def MuonPrdCacheCfg():
 ## This configuration function sets up everything for decoding RPC RDO to PRD conversion
 #
 # The function returns a ComponentAccumulator and the data-converting algorithm, which should be added to the right sequence by the user
-def RpcRDODecodeCfg(flags, name="RpcRdoToRpcPrepData"):
-    from MuonConfig.MuonCondAlgConfig import RpcCondDbAlgCfg # MT-safe conditions access
-    acc = RpcCondDbAlgCfg(flags)
-
-    # We need the RPC cabling to be setup
-    from MuonConfig.MuonCablingConfig import RPCCablingConfigCfg
-    acc.merge( RPCCablingConfigCfg(flags) )
+def RpcRDODecodeCfg(flags, name="RpcRdoToRpcPrepData", **kwargs):
+    acc = ComponentAccumulator()
 
     # Make sure muon geometry is configured
     from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
     acc.merge(MuonGeoModelCfg(flags))
 
+    # We need the RPC cabling to be setup
+    from MuonConfig.MuonCablingConfig import RPCCablingConfigCfg
+    acc.merge( RPCCablingConfigCfg(flags))
+
+    # Conditions not needed for online
+    if not flags.Common.isOnline:
+        from MuonConfig.MuonCondAlgConfig import RpcCondDbAlgCfg
+        acc.merge(RpcCondDbAlgCfg(flags))
+
     # Get the RDO -> PRD tool
-    Muon__RpcRdoToPrepDataToolMT=CompFactory.Muon.RpcRdoToPrepDataToolMT
-    RpcRdoToRpcPrepDataTool = Muon__RpcRdoToPrepDataToolMT(name = "RpcRdoToRpcPrepDataTool")
-    if flags.Common.isOnline: 
-        RpcRdoToRpcPrepDataTool.ReadKey = "" ## cond data not needed online
+    kwargs.setdefault("DecodingTool", CompFactory.Muon.RpcRdoToPrepDataToolMT(name="RpcRdoToRpcPrepDataTool",
+                                                                              ReadKey="RpcCondDbData" if not flags.Common.isOnline else "",
+                                                                              RpcPrdContainerCacheKey=MuonPrdCacheNames.RpcCache if flags.Muon.MuonTrigger else "",
+                                                                              RpcCoinDataContainerCacheKey=MuonPrdCacheNames.RpcCoinCache if flags.Muon.MuonTrigger else ""))
 
-    if flags.Muon.MuonTrigger:
-        RpcRdoToRpcPrepDataTool.RpcPrdContainerCacheKey      = MuonPrdCacheNames.RpcCache
-        RpcRdoToRpcPrepDataTool.RpcCoinDataContainerCacheKey = MuonPrdCacheNames.RpcCoinCache
-
-    # Get the RDO -> PRD alorithm
-    RpcRdoToRpcPrepData=CompFactory.RpcRdoToRpcPrepData
-    RpcRdoToRpcPrepData = RpcRdoToRpcPrepData(name          = name,
-                                              DecodingTool  = RpcRdoToRpcPrepDataTool,
-                                              PrintPrepData = False )
     # add RegSelTool
     from RegionSelector.RegSelToolConfig import regSelTool_RPC_Cfg
-    RpcRdoToRpcPrepData.RegSel_RPC = acc.popToolsAndMerge( regSelTool_RPC_Cfg( flags ) )
+    kwargs.setdefault("RegSel_RPC", acc.popToolsAndMerge(regSelTool_RPC_Cfg(flags)))
 
     if flags.Muon.MuonTrigger:
         # Set the algorithm to RoI mode
-        RpcRdoToRpcPrepData.DoSeededDecoding = True
+        kwargs.setdefault("DoSeededDecoding", True)
         from HLTSeeding.HLTSeedingConfig import mapThresholdToL1RoICollection
-        RpcRdoToRpcPrepData.RoIs = mapThresholdToL1RoICollection("MU")
+        kwargs.setdefault("RoIs", mapThresholdToL1RoICollection("MU"))
 
-    acc.addEventAlgo(RpcRdoToRpcPrepData)
+    # Add the RDO -> PRD alorithm
+    acc.addEventAlgo(CompFactory.RpcRdoToRpcPrepData(name, **kwargs))
     return acc
 
-def TgcRDODecodeCfg(flags, name="TgcRdoToTgcPrepData"):
-    acc = ComponentAccumulator()
 
-    # We need the TGC cabling to be setup
-    from MuonConfig.MuonCablingConfig import TGCCablingConfigCfg
-    acc.merge( TGCCablingConfigCfg(flags) )
+def TgcRDODecodeCfg(flags, name="TgcRdoToTgcPrepData", **kwargs):
+    acc = ComponentAccumulator()
 
     # Make sure muon geometry is configured
     from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
     acc.merge(MuonGeoModelCfg(flags))
 
+    # We need the TGC cabling to be setup
+    from MuonConfig.MuonCablingConfig import TGCCablingConfigCfg
+    acc.merge(TGCCablingConfigCfg(flags))
+
     # Get the RDO -> PRD tool
-    Muon__TgcRdoToPrepDataToolMT=CompFactory.Muon.TgcRdoToPrepDataToolMT
-    TgcRdoToTgcPrepDataTool = Muon__TgcRdoToPrepDataToolMT(name           = "TgcRdoToTgcPrepDataTool")
-    
-    # Get the RDO -> PRD alorithm
-    TgcRdoToTgcPrepData=CompFactory.TgcRdoToTgcPrepData
-    TgcRdoToTgcPrepData = TgcRdoToTgcPrepData(name          = name,
-                                              DecodingTool  = TgcRdoToTgcPrepDataTool,
-                                              PrintPrepData = False )
+    kwargs.setdefault("DecodingTool", CompFactory.Muon.TgcRdoToPrepDataToolMT(name="TgcRdoToTgcPrepDataTool"))
+
     # add RegSelTool
     from RegionSelector.RegSelToolConfig import regSelTool_TGC_Cfg
-    TgcRdoToTgcPrepData.RegSel_TGC = acc.popToolsAndMerge( regSelTool_TGC_Cfg( flags ) )
+    kwargs.setdefault("RegSel_TGC", acc.popToolsAndMerge(regSelTool_TGC_Cfg(flags)))
 
     if flags.Muon.MuonTrigger:
         # Set the algorithm to RoI mode
-        TgcRdoToTgcPrepData.DoSeededDecoding = True
+        kwargs.setdefault("DoSeededDecoding", True)
         from HLTSeeding.HLTSeedingConfig import mapThresholdToL1RoICollection
-        TgcRdoToTgcPrepData.RoIs = mapThresholdToL1RoICollection("MU")
+        kwargs.setdefault("RoIs", mapThresholdToL1RoICollection("MU"))
 
-    acc.addEventAlgo(TgcRdoToTgcPrepData)
+    # Add the RDO -> PRD alorithm
+    acc.addEventAlgo(CompFactory.TgcRdoToTgcPrepData(name, **kwargs))
     return acc
 
-def MdtRDODecodeCfg(flags, name="MdtRdoToMdtPrepData"):
+
+def StgcRDODecodeCfg(flags, name="StgcRdoToStgcPrepData", **kwargs):
     acc = ComponentAccumulator()
-    from MuonConfig.MuonCalibrationConfig import MdtCalibrationToolCfg
 
-    # We need the MDT cabling to be setup
-    from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg
-    acc.merge( MDTCablingConfigCfg(flags) )
+    # Make sure muon geometry is configured
+    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
+    acc.merge(MuonGeoModelCfg(flags))
+
+    # Get the RDO -> PRD tool
+    kwargs.setdefault("DecodingTool", CompFactory.Muon.sTgcRdoToPrepDataToolMT(name="sTgcRdoToTgcPrepDataTool"))
+
+    # add RegSelTool
+    # from RegionSelector.RegSelToolConfig import regSelTool_STGC_Cfg
+    # kwargs.setdefault("RegSel_STGC", acc.popToolsAndMerge(regSelTool_STGC_Cfg(flags)))
+
+    # Add the RDO -> PRD alorithm
+    acc.addEventAlgo(CompFactory.StgcRdoToStgcPrepData(name, **kwargs))
+    return acc
+
+
+def MMRDODecodeCfg(flags, name="MM_RdoToMM_PrepData", **kwargs):
+    acc = ComponentAccumulator()
+
+    # Make sure muon geometry is configured
+    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
+    acc.merge(MuonGeoModelCfg(flags))
+
+    # Get the RDO -> PRD tool
+    kwargs.setdefault("DecodingTool", CompFactory.Muon.MmRdoToPrepDataToolMT(name="MmRdoToPrepDataTool"))
+
+    # add RegSelTool
+    # from RegionSelector.RegSelToolConfig import regSelTool_MM_Cfg
+    # kwargs.setdefault("RegSel_MM", acc.popToolsAndMerge(regSelTool_MM_Cfg(flags)))
 
-    from MuonConfig.MuonCalibrationConfig import MdtCalibDbAlgCfg
-    acc.merge (MdtCalibDbAlgCfg(flags))
+    # Add the RDO -> PRD alorithm
+    acc.addEventAlgo(CompFactory.MM_RdoToMM_PrepData(name, **kwargs))
+    return acc
+
+
+def MdtRDODecodeCfg(flags, name="MdtRdoToMdtPrepData", **kwargs):
+    acc = ComponentAccumulator()
+    from MuonConfig.MuonCalibrationConfig import MdtCalibrationToolCfg
 
     # Make sure muon geometry is configured
     from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
     acc.merge(MuonGeoModelCfg(flags))
 
+    # We need the MDT cabling to be setup
+    from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg
+    acc.merge(MDTCablingConfigCfg(flags))
+
     # Get the RDO -> PRD tool
-    Muon__MdtRdoToPrepDataToolMT=CompFactory.Muon.MdtRdoToPrepDataToolMT
-    calibTool =  acc.popToolsAndMerge( MdtCalibrationToolCfg(flags)) 
-    MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataToolMT(name = "MdtRdoToMdtPrepDataTool", CalibrationTool = calibTool)
-
-    # Get the RDO -> PRD alorithm
-    MdtRdoToMdtPrepData=CompFactory.MdtRdoToMdtPrepData
-    MdtRdoToMdtPrepData = MdtRdoToMdtPrepData(name          = name,
-                                              DecodingTool  = MdtRdoToMdtPrepDataTool,
-                                              PrintPrepData = False)
+    kwargs.setdefault("DecodingTool", CompFactory.Muon.MdtRdoToPrepDataToolMT(name="MdtRdoToMdtPrepDataTool",
+                                                                              CalibrationTool=acc.popToolsAndMerge(MdtCalibrationToolCfg(flags))))
+
     # add RegSelTool
     from RegionSelector.RegSelToolConfig import regSelTool_MDT_Cfg
-    MdtRdoToMdtPrepData.RegSel_MDT = acc.popToolsAndMerge( regSelTool_MDT_Cfg( flags ) )
+    kwargs.setdefault("RegSel_MDT", acc.popToolsAndMerge(regSelTool_MDT_Cfg(flags)))
 
     if flags.Muon.MuonTrigger:
         # Set the algorithm to RoI mode
-        MdtRdoToMdtPrepData.DoSeededDecoding = True
+        kwargs.setdefault("DoSeededDecoding", True)
         from HLTSeeding.HLTSeedingConfig import mapThresholdToL1RoICollection
-        MdtRdoToMdtPrepData.RoIs = mapThresholdToL1RoICollection("MU")
+        kwargs.setdefault("RoIs", mapThresholdToL1RoICollection("MU"))
 
-    acc.addEventAlgo(MdtRdoToMdtPrepData) 
+    # Add the RDO -> PRD alorithm
+    acc.addEventAlgo(CompFactory.MdtRdoToMdtPrepData(name, **kwargs))
     return acc
 
 
-def CscRDODecodeCfg(flags, name="CscRdoToCscPrepData"):
+def CscRDODecodeCfg(flags, name="CscRdoToCscPrepData", **kwargs):
     acc = ComponentAccumulator()
 
+    # Make sure muon geometry is configured
+    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
+    acc.merge(MuonGeoModelCfg(flags))
+
     # We need the CSC cabling to be setup
     from MuonConfig.MuonCablingConfig import CSCCablingConfigCfg # Not yet been prepared
-    acc.merge( CSCCablingConfigCfg(flags) )
+    acc.merge(CSCCablingConfigCfg(flags))
 
     from MuonConfig.MuonCondAlgConfig import CscCondDbAlgCfg
-    acc.merge( CscCondDbAlgCfg(flags)  )
-
-    # Make sure muon geometry is configured
-    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
-    acc.merge(MuonGeoModelCfg(flags))
+    acc.merge(CscCondDbAlgCfg(flags))
 
     # Get the RDO -> PRD tool
-    Muon__CscRdoToCscPrepDataToolMT=CompFactory.Muon.CscRdoToCscPrepDataToolMT
-    CscRdoToCscPrepDataTool = Muon__CscRdoToCscPrepDataToolMT(name           = "CscRdoToCscPrepDataTool")
-    
-    # Get the RDO -> PRD alorithm
-    CscRdoToCscPrepData=CompFactory.CscRdoToCscPrepData
-    CscRdoToCscPrepData = CscRdoToCscPrepData(name                    = name,
-                                              CscRdoToCscPrepDataTool = CscRdoToCscPrepDataTool,
-                                              PrintPrepData           = False )
+    # TODO: setup dependencies properly
+    kwargs.setdefault("CscRdoToCscPrepDataTool", CompFactory.Muon.CscRdoToCscPrepDataToolMT(name="CscRdoToCscPrepDataTool"))
+
     # add RegSelTool
     from RegionSelector.RegSelToolConfig import regSelTool_CSC_Cfg
-    CscRdoToCscPrepData.RegSel_CSC = acc.popToolsAndMerge( regSelTool_CSC_Cfg( flags ) )
+    kwargs.setdefault("RegSel_CSC", acc.popToolsAndMerge(regSelTool_CSC_Cfg(flags)))
 
     if flags.Muon.MuonTrigger:
         # Set the algorithm to RoI mode
-        CscRdoToCscPrepData.DoSeededDecoding = True
+        kwargs.setdefault("DoSeededDecoding", True)
         from HLTSeeding.HLTSeedingConfig import mapThresholdToL1RoICollection
-        CscRdoToCscPrepData.RoIs = mapThresholdToL1RoICollection("MU")
+        kwargs.setdefault("RoIs", mapThresholdToL1RoICollection("MU"))
 
-    acc.addEventAlgo(CscRdoToCscPrepData)
+    # Add the RDO -> PRD alorithm
+    acc.addEventAlgo(CompFactory.CscRdoToCscPrepData(name, **kwargs))
     return acc
 
-def CscClusterBuildCfg(flags, name= "CscThresholdClusterBuilder"):
+
+def CscClusterBuildCfg(flags, name="CscThresholdClusterBuilder"):
     acc = ComponentAccumulator()
 
     # Get cluster creator tool
     CscThresholdClusterBuilderTool=CompFactory.CscThresholdClusterBuilderTool
     CscClusterBuilderTool = CscThresholdClusterBuilderTool(name = "CscThresholdClusterBuilderTool" )
-  
+
     #CSC cluster building
     CscThresholdClusterBuilder=CompFactory.CscThresholdClusterBuilder
     CscClusterBuilder = CscThresholdClusterBuilder(name            = name,
@@ -208,26 +229,43 @@ def CscClusterBuildCfg(flags, name= "CscThresholdClusterBuilder"):
 
     return acc
 
+
+def MuonPRD_MultiTruthMakerCfg(flags, name="MuonPRD_MultiTruthMaker", **kwargs):
+    acc = ComponentAccumulator()
+    # TODO: properly declare dependencies
+    acc.addEventAlgo(CompFactory.MuonPRD_MultiTruthMaker(name, **kwargs))
+    return acc
+
+
 def MuonRDOtoPRDConvertorsCfg(flags):
-    # Schedule RDO conversion 
+    # Schedule RDO conversion
     acc = ComponentAccumulator()
 
-    rpcdecodingAcc  = RpcRDODecodeCfg( flags )
-    acc.merge(rpcdecodingAcc)
+    if flags.Detector.GeometryRPC:
+        acc.merge(RpcRDODecodeCfg(flags))
+
+    if flags.Detector.GeometryTGC:
+        acc.merge(TgcRDODecodeCfg(flags))
+
+    if flags.Detector.GeometrysTGC:
+        acc.merge(StgcRDODecodeCfg(flags))
+
+    if flags.Detector.GeometryMM:
+        acc.merge(MMRDODecodeCfg(flags))
 
-    tgcdecodingAcc = TgcRDODecodeCfg( flags )
-    acc.merge(tgcdecodingAcc)
+    if flags.Detector.GeometryMDT:
+        acc.merge(MdtRDODecodeCfg(flags))
 
-    mdtdecodingAcc = MdtRDODecodeCfg( flags )
-    acc.merge(mdtdecodingAcc)
+    if flags.Detector.GeometryCSC:
+        acc.merge(CscRDODecodeCfg(flags))
+        acc.merge(CscClusterBuildCfg(flags))
 
-    cscdecodingAcc = CscRDODecodeCfg( flags )
-    acc.merge(cscdecodingAcc)
+    if flags.Input.isMC:
+        acc.merge(MuonPRD_MultiTruthMakerCfg(flags))
 
-    cscbuildingAcc = CscClusterBuildCfg( flags )
-    acc.merge(cscbuildingAcc)
     return acc
 
+
 # This function runs the decoding on a data file
 def muonRdoDecodeTestData( forTrigger = False ):
     from AthenaCommon.Configurable import Configurable
@@ -236,7 +274,7 @@ def muonRdoDecodeTestData( forTrigger = False ):
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
     from AthenaConfiguration.TestDefaults import defaultTestFiles
     ConfigFlags.Input.Files = defaultTestFiles.RAW
-    
+
     # Set global tag by hand for now
     ConfigFlags.IOVDb.GlobalTag = "CONDBR2-BLKPA-2018-13"#"CONDBR2-BLKPA-2015-17"
     ConfigFlags.GeoModel.AtlasVersion = "ATLAS-R2-2016-01-00-01"#"ATLAS-R2-2015-03-01-00"
@@ -248,7 +286,7 @@ def muonRdoDecodeTestData( forTrigger = False ):
 
     log.setLevel(INFO)
     log.info('About to setup Raw data decoding')
-    
+
     cfg=ComponentAccumulator()
 
 
@@ -305,7 +343,7 @@ def muonRdoDecodeTestMC():
     from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
     cfg.merge(PoolReadCfg(ConfigFlags))
 
-    # Schedule RDO conversion 
+    # Schedule RDO conversion
     cfg.merge( MuonRDOtoPRDConvertorsCfg( ConfigFlags) )
 
     log.info('Print Config')
@@ -317,9 +355,9 @@ def muonRdoDecodeTestMC():
         cfg.store(f)
         f.close()
     return cfg
-    
+
 if __name__=="__main__":
-    # To run this, do e.g. 
+    # To run this, do e.g.
     # python ../athena/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
     cfg = muonRdoDecodeTestData()
     #muonRdoDecodeTestMC()
diff --git a/MuonSpectrometer/MuonConfig/python/MuonRecToolsConfig.py b/MuonSpectrometer/MuonConfig/python/MuonRecToolsConfig.py
index 53e25f4980ee38e87046d81ccab59d9f04fb66da..2859154d8e4c867faf00f7771ce28ba1717cb649 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonRecToolsConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonRecToolsConfig.py
@@ -406,19 +406,18 @@ def MuonPhiHitSelector(flags, name="MuonPhiHitSelector",**kwargs):
 
 
 def MuPatHitToolCfg(flags, name="MuPatHitTool",**kwargs):
-    Muon__MuPatHitTool=CompFactory.Muon.MuPatHitTool
-    from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg,MdtDriftCircleOnTrackCreatorCfg
-    
+    from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg
     result = MdtDriftCircleOnTrackCreatorCfg(flags)
     mdt_creator=result.getPrimary()
     kwargs.setdefault("MdtRotCreator", mdt_creator)
-    
-    acc = CscClusterOnTrackCreatorCfg(flags)
-    csc_cluster_creator = acc.popPrivateTools()
-    result.merge(acc)
-    kwargs.setdefault("CscRotCreator", csc_cluster_creator)
-    
-    result.setPrivateTools(Muon__MuPatHitTool(name,**kwargs))
+
+    if flags.Detector.GeometryCSC:
+        from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg
+        kwargs.setdefault("CscRotCreator", result.popToolsAndMerge(CscClusterOnTrackCreatorCfg(flags)))
+    else:
+        kwargs.setdefault("CscRotCreator", "")
+
+    result.setPrivateTools(CompFactory.Muon.MuPatHitTool(name,**kwargs))
     return result
 
 
diff --git a/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py b/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py
index 3c1c1ed7a860a46ce3ea328a6608cc0de2fcf4d2..6370e44d64e59065e080f8c7323a761f3b990ebc 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonSegmentFindingConfig.py
@@ -616,27 +616,31 @@ def MooSegmentFinderAlgCfg(flags, name = "MuonSegmentMaker",  **kwargs):
 
 def MooSegmentFinderAlg_NCBCfg(flags, name = "MuonSegmentMaker_NCB", **kwargs):
     result = ComponentAccumulator()
-    
+
     # Configure NCB MooSegmentFinder
-    acc = CscSegmentUtilToolCfg(flags, name='CscSegmentUtilTool_NCB', TightenChi2 = False, IPconstraint=False)
-    csc_segment_util_tool = acc.getPrimary()
-    result.merge(acc)
-    
-    acc = Csc2dSegmentMakerCfg(flags, name='Csc2dSegmentMaker_NCB', segmentTool=csc_segment_util_tool)
-    csc_2d_segment_maker = acc.getPrimary() 
-    result.merge(acc)
-    
-    acc = Csc4dSegmentMakerCfg(flags, name='Csc4dSegmentMaker_NCB', segmentTool=csc_segment_util_tool)
-    csc_4d_segment_maker = acc.getPrimary()
-    result.merge(acc)
-    
+    if flags.Detector.GeometryCSC:
+        acc = CscSegmentUtilToolCfg(flags, name='CscSegmentUtilTool_NCB', TightenChi2 = False, IPconstraint=False)
+        csc_segment_util_tool = acc.getPrimary()
+        result.merge(acc)
+        
+        acc = Csc2dSegmentMakerCfg(flags, name='Csc2dSegmentMaker_NCB', segmentTool=csc_segment_util_tool)
+        csc_2d_segment_maker = acc.getPrimary() 
+        result.merge(acc)
+        
+        acc = Csc4dSegmentMakerCfg(flags, name='Csc4dSegmentMaker_NCB', segmentTool=csc_segment_util_tool)
+        csc_4d_segment_maker = acc.getPrimary()
+        result.merge(acc)
+    else:
+        csc_2d_segment_maker = ""
+        csc_4d_segment_maker = ""
+
     acc  = MooSegmentFinderCfg(flags, name='MooSegmentFinder_NCB', Csc2dSegmentMaker=csc_2d_segment_maker, 
                                Csc4dSegmentMaker=csc_4d_segment_maker, 
                                DoMdtSegments=False,DoSegmentCombinations=False,DoSegmentCombinationCleaning=False)
     segment_finder_tool=(acc.popPrivateTools())
     result.addPublicTool(segment_finder_tool)
     result.merge(acc)
-    
+
     kwargs.setdefault('SegmentFinder', segment_finder_tool)
 
     # Now set other NCB properties
@@ -651,7 +655,7 @@ def MooSegmentFinderAlg_NCBCfg(flags, name = "MuonSegmentMaker_NCB", **kwargs):
     kwargs.setdefault('UseTGCNextBC', False)
     kwargs.setdefault('doTGCClust', False)
     kwargs.setdefault('doRPCClust', False)
-        
+
     acc = MooSegmentFinderAlgCfg(flags, name=name, **kwargs)
     result.merge(acc)
     return result
@@ -672,7 +676,7 @@ def MuonSegmentFindingCfg(flags, cardinality=1):
         from MuonConfig.MuonBytestreamDecodeConfig import MuonByteStreamDecodersCfg
         result.merge( MuonByteStreamDecodersCfg(flags) )
 
-    if flags.Input.Format == 'BS' or 'StreamRDO' in flags.Input.ProcessingTags:
+    if flags.Input.Format == 'BS' or 'StreamRDO' in flags.Input.ProcessingTags or 'OutputStreamRDO' in flags.Input.ProcessingTags:
         from MuonConfig.MuonRdoDecodeConfig import MuonRDOtoPRDConvertorsCfg
         result.merge( MuonRDOtoPRDConvertorsCfg(flags) )
 
diff --git a/MuonSpectrometer/MuonConfig/python/MuonTrackBuildingConfig.py b/MuonSpectrometer/MuonConfig/python/MuonTrackBuildingConfig.py
index ccf6f718a0c1862e9708bb01c34700ccc84ee2cd..275dfe05d4d03080c05b077daf59ba9410468b14 100644
--- a/MuonSpectrometer/MuonConfig/python/MuonTrackBuildingConfig.py
+++ b/MuonSpectrometer/MuonConfig/python/MuonTrackBuildingConfig.py
@@ -209,12 +209,8 @@ def MooCandidateMatchingToolCfg(flags, name="MooCandidateMatchingTool", doSegmen
 
     # Won't explicitly configure MuonEDMHelperSvc
     kwargs.setdefault("MuonPrinterTool", MuonEDMPrinterTool(flags) )
+    kwargs.setdefault("Extrapolator", result.popToolsAndMerge(AtlasExtrapolatorCfg(flags)))
 
-    acc = AtlasExtrapolatorCfg(flags)
-    extrap = acc.getPrimary()
-    result.merge(acc)
-    kwargs.setdefault("Extrapolator", extrap)
-    
     acc = MuonSegmentMatchingToolCfg(flags, doPhiMatching = doSegmentPhiMatching)
     muon_seg_matching = acc.getPrimary()
     result.merge(acc)
@@ -333,42 +329,36 @@ def MuonSegmentRegionRecoveryToolCfg(flags, name="MuonSegmentRegionRecoveryTool"
     return result
     
 def MuPatCandidateToolCfg(flags, name="MuPatCandidateTool", **kwargs):
-    Muon__MuPatCandidateTool=CompFactory.Muon.MuPatCandidateTool
     # https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuPatTools.py#L32
-    from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg,MdtDriftCircleOnTrackCreatorCfg
-    from MuonConfig.MuonRecToolsConfig import MuPatHitToolCfg
-
+    
+    from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg
     result = MdtDriftCircleOnTrackCreatorCfg(flags)
     mdt_dcot_creator = result.getPrimary()
     kwargs.setdefault("MdtRotCreator", mdt_dcot_creator)
-    
-    acc = CscClusterOnTrackCreatorCfg(flags)
-    csc_cluster_creator = acc.popPrivateTools()
-    result.merge(acc)
-    kwargs.setdefault("CscRotCreator", csc_cluster_creator)
-        
+
+    if flags.Detector.GeometryCSC:
+        from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg
+        kwargs.setdefault("CscRotCreator", result.popToolsAndMerge(CscClusterOnTrackCreatorCfg(flags)))
+    else:
+        kwargs.setdefault("CscRotCreator", "")
+
     kwargs.setdefault("MuonPrinterTool", MuonEDMPrinterTool(flags) )
 
-    acc = MuPatHitToolCfg(flags)
-    mu_pat_hit_tool = acc.getPrimary()
-    result.merge(acc)
-    kwargs.setdefault("HitTool",          mu_pat_hit_tool)
+    from MuonConfig.MuonRecToolsConfig import MuPatHitToolCfg
+    kwargs.setdefault("HitTool", result.getPrimaryAndMerge(MuPatHitToolCfg(flags)))
 
-    mu_pat_cand_tool = Muon__MuPatCandidateTool(name, **kwargs)
-    result.setPrivateTools(mu_pat_cand_tool)
+    result.setPrivateTools(CompFactory.Muon.MuPatCandidateTool(name, **kwargs))
     return result
     
 def MuonChamberHoleRecoveryToolCfg(flags, name="MuonChamberHoleRecoveryTool", **kwargs):
-    from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg,MdtDriftCircleOnTrackCreatorCfg
-    from MuonConfig.MuonRecToolsConfig import MuonExtrapolatorCfg
-
-    Muon__MuonChamberHoleRecoveryTool=CompFactory.Muon.MuonChamberHoleRecoveryTool
     result=ComponentAccumulator()
     # Not setting explicitly MuonStationIntersectSvc
 
+    from MuonConfig.MuonRecToolsConfig import MuonExtrapolatorCfg
     acc = MuonExtrapolatorCfg(flags)
     kwargs.setdefault("Extrapolator", result.popToolsAndMerge(acc))
 
+    from MuonConfig.MuonRIO_OnTrackCreatorConfig import MdtDriftCircleOnTrackCreatorCfg
     acc = MdtDriftCircleOnTrackCreatorCfg(flags)
     mdt_dcot_creator = acc.getPrimary()
     kwargs.setdefault("MdtRotCreator", mdt_dcot_creator)
@@ -379,10 +369,8 @@ def MuonChamberHoleRecoveryToolCfg(flags, name="MuonChamberHoleRecoveryTool", **
         extrakwargs={}
         if flags.Muon.enableErrorTuning or not flags.Input.isMC:
             extrakwargs["ErrorScalerBeta"] = 0.200
-        acc = CscClusterOnTrackCreatorCfg(flags, **extrakwargs)
-        csc_cluster_creator = acc.popPrivateTools()
-        result.merge(acc)
-        kwargs.setdefault("CscRotCreator", csc_cluster_creator)
+        from MuonConfig.MuonRIO_OnTrackCreatorConfig import CscClusterOnTrackCreatorCfg
+        kwargs.setdefault("CscRotCreator", result.popToolsAndMerge(CscClusterOnTrackCreatorCfg(flags, **extrakwargs)))
     else:
         kwargs["CscRotCreator"] = None
         kwargs.setdefault("CscPrepDataContainer","")
@@ -397,8 +385,7 @@ def MuonChamberHoleRecoveryToolCfg(flags, name="MuonChamberHoleRecoveryTool", **
     if flags.Common.isOnline:
         kwargs.setdefault("MdtCondKey","")
 
-    hole_rec_tool = Muon__MuonChamberHoleRecoveryTool(name, **kwargs)
-    result.setPrivateTools(hole_rec_tool)
+    result.setPrivateTools(CompFactory.Muon.MuonChamberHoleRecoveryTool(name, **kwargs))
     return result
     
 
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx
index 75bb29ac3ae1d844117b38ec73537790ad4236f9..f8f92f8687a1e3ce07667bfc47f862c11becf47f 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MdtReadoutElement.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /***************************************************************************
@@ -1540,12 +1540,12 @@ namespace MuonGM {
 #endif
 
 #ifndef NDEBUG
-        Trk::PlaneSurface* tmpSurface = (Trk::PlaneSurface*)&surface();  //<! filling m_associatedSurface
-        Trk::SurfaceBounds* tmpBounds = nullptr;                         //<! filling m_associatedBounds
+        const Trk::PlaneSurface* tmpSurface = dynamic_cast<const Trk::PlaneSurface*>(&surface());  //<! filling m_associatedSurface
+        const Trk::SurfaceBounds* tmpBounds = nullptr;                         //<! filling m_associatedBounds
         if (MuonReadoutElement::barrel())
-            tmpBounds = (Trk::RectangleBounds*)&bounds();
+            tmpBounds = dynamic_cast<const Trk::RectangleBounds*>(&bounds());
         else
-            tmpBounds = (Trk::TrapezoidBounds*)&bounds();
+            tmpBounds = dynamic_cast<const Trk::TrapezoidBounds*>(&bounds());
         if (log.level() <= MSG::VERBOSE) {
             log << MSG::VERBOSE << "global Surface / Bounds pointers " << tmpSurface << " " << tmpBounds << endmsg;
             log << MSG::VERBOSE << "global Normal " << normal() << endmsg;
diff --git a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorElement.cxx b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorElement.cxx
index dc3592f3decc171cec38bc0740c4d5d14d1aecaa..868a314f234765cdc288269ea469c792f8a3f320 100644
--- a/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorElement.cxx
+++ b/MuonSpectrometer/MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorElement.cxx
@@ -13,10 +13,11 @@ class GeoVFullPhysVol;
 namespace MuonGM {
 
     MuonDetectorElement::MuonDetectorElement(GeoVFullPhysVol* pv, MuonDetectorManager* mgr, Identifier id, IdentifierHash idHash) :
-        TrkDetElementBase(pv) {
-        m_muon_mgr = mgr;
-        m_id = id;
-        m_idhash = idHash;
+      TrkDetElementBase(pv),
+      m_id (id),
+      m_idhash (idHash),
+      m_muon_mgr (mgr)
+    {
     }
 
     MuonDetectorElement::~MuonDetectorElement() = default;
diff --git a/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.cxx
index e17d00b2c679843fe1fdb191243d1f684a482a81..5e566380f2fd9353fb06303a5a44723d87c2abbb 100644
--- a/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.cxx
+++ b/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.cxx
@@ -264,7 +264,7 @@ StatusCode TgcDigitizationTool::getNextEvent(const EventContext& ctx)
   return StatusCode::SUCCESS;
 }
 
-StatusCode TgcDigitizationTool::digitizeCore(const EventContext& ctx) const {
+StatusCode TgcDigitizationTool::digitizeCore(const EventContext& ctx) {
 
   ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this);
   rngWrapper->setSeed( name(), ctx );
diff --git a/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.h b/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.h
index 73b5ded5e4da0d57876d3c91ef61bcf13942bf1c..e09554a1ea556a285d61c3309d64913e7bde1ad9 100644
--- a/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.h
+++ b/MuonSpectrometer/MuonDigitization/TGC_Digitization/src/TgcDigitizationTool.h
@@ -75,7 +75,7 @@ private:
   /** Get next event and extract collection of hit collections */
   StatusCode getNextEvent(const EventContext& ctx);
   /** Core part of digitization used by processAllSubEvents and mergeEvent */
-  StatusCode digitizeCore(const EventContext& ctx) const;
+  StatusCode digitizeCore(const EventContext& ctx);
 
 protected:
   ServiceHandle<PileUpMergeSvc> m_mergeSvc{this, "PileUpMergeSvc", "PileUpMergeSvc", ""}; // Pile up service
diff --git a/MuonSpectrometer/MuonGeoModel/src/MuonDetectorFactory001.cxx b/MuonSpectrometer/MuonGeoModel/src/MuonDetectorFactory001.cxx
index cf52406babf471f982abc8869ff744cd9a9e5b81..c8b11314277ad370dd9f9aaca97d24deb2f0856b 100644
--- a/MuonSpectrometer/MuonGeoModel/src/MuonDetectorFactory001.cxx
+++ b/MuonSpectrometer/MuonGeoModel/src/MuonDetectorFactory001.cxx
@@ -73,8 +73,8 @@ using namespace GeoXF;
 namespace MuonGM {
 
     MuonDetectorFactory001::MuonDetectorFactory001(StoreGateSvc *pDetStore):
+        m_muon (std::make_unique< MuonSystemDescription>("MuonSystem")),
         m_pDetStore{pDetStore} {
-        m_muon = std::make_unique< MuonSystemDescription>("MuonSystem");
         m_muon->barrelInnerRadius = 4.30 * Gaudi::Units::m;
         m_muon->innerRadius = 0.07 * Gaudi::Units::m;
         m_muon->outerRadius = 13.00 * Gaudi::Units::m;
diff --git a/MuonSpectrometer/MuonRDO/MuonRDO/NSW_TrigRawData.h b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_TrigRawData.h
index 14a2e65e52c9a360c4a22abb7f570e39fea38944..67a1ea0a3a52c98cf1b13ccbd5e3892e64a82296 100644
--- a/MuonSpectrometer/MuonRDO/MuonRDO/NSW_TrigRawData.h
+++ b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_TrigRawData.h
@@ -22,9 +22,9 @@ class NSW_TrigRawData : public DataVector<Muon::NSW_TrigRawDataSegment>
 
   ~NSW_TrigRawData() { };
 
-  uint16_t sectorId() {return m_sectorId;}
-  char sectorSide() {return m_sectorSide;}
-  uint16_t bcId() {return m_bcId;}
+  uint16_t sectorId() const {return m_sectorId;}
+  char sectorSide() const {return m_sectorSide;}
+  uint16_t bcId() const {return m_bcId;}
 
  private:
 
diff --git a/MuonSpectrometer/MuonRDO/MuonRDO/NSW_TrigRawDataSegment.h b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_TrigRawDataSegment.h
index d94a155c70c0d932a6b07b4707c522dbaeb594a5..6c51b2ffcd0aa7feb4e43fd4dc523c361824ee19 100644
--- a/MuonSpectrometer/MuonRDO/MuonRDO/NSW_TrigRawDataSegment.h
+++ b/MuonSpectrometer/MuonRDO/MuonRDO/NSW_TrigRawDataSegment.h
@@ -24,14 +24,14 @@ class NSW_TrigRawDataSegment
 
   ~NSW_TrigRawDataSegment() { };
 
-  uint8_t deltaTheta() {return m_deltaTheta;}
-  uint8_t phiIndex() {return m_phiIndex;}
-  uint8_t rIndex() {return m_rIndex;}
-  uint8_t spare() {return m_spare;}
-
-  bool lowRes()   {return m_lowRes;}
-  bool phiRes()   {return m_phiRes;}
-  bool monitor()  {return m_monitor;}
+  uint8_t deltaTheta() const {return m_deltaTheta;}
+  uint8_t phiIndex() const {return m_phiIndex;}
+  uint8_t rIndex() const {return m_rIndex;}
+  uint8_t spare() const {return m_spare;}
+
+  bool lowRes() const  {return m_lowRes;}
+  bool phiRes() const  {return m_phiRes;}
+  bool monitor() const  {return m_monitor;}
 
   void setDeltaTheta(uint8_t deltaTheta) { m_deltaTheta=deltaTheta; }
   void setPhiIndex(uint8_t phiIndex)     { m_phiIndex=phiIndex; }
diff --git a/MuonSpectrometer/MuonReconstruction/MuonPatternFinders/MuonPatternFinderTools/MuonHoughPatternTools/MuonHoughPatternTools/MuonHoughPatternFinderTool.h b/MuonSpectrometer/MuonReconstruction/MuonPatternFinders/MuonPatternFinderTools/MuonHoughPatternTools/MuonHoughPatternTools/MuonHoughPatternFinderTool.h
index 4181502687689f6b4bbd824d08e2f496684ec871..be13bbe8296ddb49928ead94acb9fdf8cc37a863 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonPatternFinders/MuonPatternFinderTools/MuonHoughPatternTools/MuonHoughPatternTools/MuonHoughPatternFinderTool.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonPatternFinders/MuonPatternFinderTools/MuonHoughPatternTools/MuonHoughPatternTools/MuonHoughPatternFinderTool.h
@@ -38,9 +38,9 @@ namespace Muon {
         virtual ~MuonHoughPatternFinderTool();
 
         /** initialize */
-        virtual StatusCode initialize();
+        virtual StatusCode initialize() override;
         /** finalize */
-        virtual StatusCode finalize();
+        virtual StatusCode finalize() override;
 
         /** find patterns for a give set of MuonPrepData collections + optionally CSC
          * segment combinations */
diff --git a/MuonSpectrometer/MuonReconstruction/MuonPatternFinders/MuonPatternFinderTools/MuonHoughPatternTools/MuonHoughPatternTools/MuonHoughPatternTool.h b/MuonSpectrometer/MuonReconstruction/MuonPatternFinders/MuonPatternFinderTools/MuonHoughPatternTools/MuonHoughPatternTools/MuonHoughPatternTool.h
index e683dc4d323dfc08d533fe053351ca938ac763ec..1e4be7f865e72c8ec6174eeddb60654c36ddf36c 100755
--- a/MuonSpectrometer/MuonReconstruction/MuonPatternFinders/MuonPatternFinderTools/MuonHoughPatternTools/MuonHoughPatternTools/MuonHoughPatternTool.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonPatternFinders/MuonPatternFinderTools/MuonHoughPatternTools/MuonHoughPatternTools/MuonHoughPatternTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef MUONHOUGHPATTERNTOOLS_MUONHOUGHPATTERNTOOL_H
@@ -37,7 +37,7 @@ public:
     virtual std::unique_ptr<MuonPrdPatternCollection> getEtaMuonPatterns(MuonHoughPatternContainerShip& houghpatterns) const override;
 
     /** creates houghpatterns, called from FinderTool */
-    MuonHoughPatternContainerShip emptyHoughPattern() const;
+    virtual MuonHoughPatternContainerShip emptyHoughPattern() const override;
 
 private:
     /** method that builds the patterns */
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py
index 4c191f7ebf80f6eb9bfed0cda1e1696d4d8bd60a..b6112417b621bf8bfe7e8d498401cc6d815600c9 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonRecTools.py
@@ -278,7 +278,8 @@ def MuonParticleCreatorTool(name="MuonParticleCreatorTool",**kwargs):
     from TrkParticleCreator.TrkParticleCreatorConf import Trk__TrackParticleCreatorTool
     kwargs.setdefault("TrackSummaryTool", "MuonTrackSummaryTool" )
     kwargs.setdefault("KeepAllPerigee", True )
-    kwargs.setdefault("UseMuonSummaryTool", True)
+    from MuonTrackSummaryHelperTool.MuonTrackSummaryHelperToolConf import Muon__MuonHitSummaryTool
+    kwargs.setdefault("MuonSummaryTool", Muon__MuonHitSummaryTool("MuonHitSummaryTool"))
     kwargs.setdefault("PerigeeExpression", "Origin" )
     return Trk__TrackParticleCreatorTool(name, **kwargs)
 # end of class MuonParticleCreatorTool
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonStandalone.py b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonStandalone.py
index be4040f6f1774f1664b5d49008a564b6cf4c2f8c..b97c0d4d5907c93110a4fd91acff5b072991f44b 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonStandalone.py
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonStandalone.py
@@ -83,6 +83,12 @@ def MooSegmentFinderAlg( name="MuonSegmentMaker",**kwargs ):
         kwargs.setdefault("Key_MuonLayerHoughToolHoughDataPerSectorVec","")
     return CfgMgr.MooSegmentFinderAlg(name,**kwargs)
 
+#
+def MuonSegmentFilterAlg(name="MuonSegmentFilterAlg", **kwargs):
+    kwargs.setdefault("SegmentCollectionName", "TrackMuonSegments")
+    return CfgMgr.MuonSegmentFilterAlg(name, **kwargs)
+
+
 def MooSegmentFinderNCBAlg( name="MuonSegmentMaker_NCB",**kwargs ):
     reco_cscs = muonRecFlags.doCSCs() and MuonGeometryFlags.hasCSC()
     kwargs.setdefault("SegmentFinder",getPublicToolClone("MooSegmentFinder_NCB","MuonSegmentFinder",
@@ -159,7 +165,7 @@ def MuonStandaloneTrackParticleCnvAlg( name="MuonStandaloneTrackParticleCnvAlg",
     kwargs.setdefault("ConvertTrackParticles", False)
     kwargs.setdefault("ConvertTracks", True)
 
-    return xAODMaker__TrackParticleCnvAlg( name = "MuonStandaloneTrackParticleCnvAlg",**kwargs)
+    return xAODMaker__TrackParticleCnvAlg(name,**kwargs)
 
 #
 # The top level configurator
@@ -213,7 +219,33 @@ class MuonStandalone(ConfiguredMuonRec):
                                                 TrackSteering=getPublicTool("MuonTrackSteering"), 
                                                 SpectrometerTrackOutputLocation="MuonSpectrometerTracks", 
                                                 MuonSegmentCollection="TrackMuonSegments")
+
         self.addAlg( TrackBuilder )
+        #### Add a segment collection only containing only EM and EO hits
+        if reco_cscs or reco_stgc:
+            self.addAlg(MuonSegmentFilterAlg(FilteredCollectionName="TrackMuonSegmentsEMEO"))
+  
+            chamberRecovery_EMEO = getPublicToolClone("MuonChamberRecovery_EMEO", "MuonChamberHoleRecoveryTool", 
+                                                               sTgcPrepDataContainer="",
+                                                               MMPrepDataContainer="")
+
+            MooTrackBuilder_EMEO = getPublicToolClone("MooMuonTrackBuilder_EMEO", 
+                                               "MooTrackBuilderTemplate",
+                                                ChamberHoleRecoveryTool = chamberRecovery_EMEO)
+            TrackSteeringTool_EMEO = getPublicToolClone("MuonTrackSteering_EMEO", "MuonTrackSteering", TrackBuilderTool = MooTrackBuilder_EMEO)
+            
+            
+            TrackBuilder_EMEO = CfgMgr.MuPatTrackBuilder("MuPatTrackBuilder_EMEO", 
+                                                TrackSteering=TrackSteeringTool_EMEO, 
+                                                SpectrometerTrackOutputLocation="EMEO_MuonSpectrometerTracks", 
+                                                MuonSegmentCollection="TrackMuonSegmentsEMEO")
+            self.addAlg(TrackBuilder_EMEO)
+            if muonStandaloneFlags.createTrackParticles():
+                xAODTrackParticleCnvAlg_EMEO = MuonStandaloneTrackParticleCnvAlg("MuonStandaloneTrackParticleCnvAlg_EMEO",
+                                                                           TrackContainerName = "EMEO_MuonSpectrometerTracks",
+                                                                           xAODTrackParticlesFromTracksContainerName="EMEO_MuonSpectrometerTrackParticles")
+                self.addAlg( xAODTrackParticleCnvAlg_EMEO )
+               
 
         if muonStandaloneFlags.createTrackParticles():
             xAODTrackParticleCnvAlg = MuonStandaloneTrackParticleCnvAlg("MuonStandaloneTrackParticleCnvAlg")
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecExample/share/MuonRecOutputItemList_jobOptions.py b/MuonSpectrometer/MuonReconstruction/MuonRecExample/share/MuonRecOutputItemList_jobOptions.py
index ed50b6477aaf7b3f14c8676178a809028292c4f8..b6af83e0ac5f69630bb549212fdc59050de6e879 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonRecExample/share/MuonRecOutputItemList_jobOptions.py
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecExample/share/MuonRecOutputItemList_jobOptions.py
@@ -16,7 +16,10 @@ if DetFlags.detdescr.Muon_on() and (rec.doWriteAOD() or rec.doWriteESD()):
 
    MuonAODList+=[ "xAOD::MuonSegmentContainer#NCB_MuonSegments" ]
    MuonAODList+=[ "xAOD::MuonSegmentAuxContainer#NCB_MuonSegmentsAux." ]
-
+   if MuonGeometryFlags.hasMM() or MuonGeometryFlags.hasSTGC():
+      MuonAODList+=[ "xAOD::TrackParticleContainer#EMEO_MuonSpectrometerTrackParticles" ]
+      MuonAODList+=[ "xAOD::TrackParticleAuxContainer#EMEO_MuonSpectrometerTrackParticlesAux." ]
+      
    # TrackParticles 
    MuonAODList+=[ "xAOD::TrackParticleContainer#MuonSpectrometerTrackParticles" ]
    MuonAODList+=[ "xAOD::TrackParticleAuxContainer#MuonSpectrometerTrackParticlesAux." ]
@@ -87,6 +90,9 @@ if DetFlags.detdescr.Muon_on() and rec.doWriteESD():
 
    # Tracks
    MuonESDList+=["TrackCollection#MuonSpectrometerTracks"] 
+   if MuonGeometryFlags.hasSTGC() or MuonGeometryFlags.hasMM():
+      MuonESDList+=["TrackCollection#EMEO_MuonSpectrometerTracks"] 
+      
 
    # Truth
    if rec.doTruth():
diff --git a/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/MuonSegmentFilterAlg.cxx b/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/MuonSegmentFilterAlg.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..a5e2cd85832d0d5a200f4a26203a842eb0984b7d
--- /dev/null
+++ b/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/MuonSegmentFilterAlg.cxx
@@ -0,0 +1,75 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "MuonSegmentFilterAlg.h"
+#include "TrkSurfaces/Surface.h"
+MuonSegmentFilterAlg::MuonSegmentFilterAlg(const std::string& name, ISvcLocator* pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator) {}
+
+StatusCode MuonSegmentFilterAlg::initialize() {
+    ATH_CHECK(m_idHelperSvc.retrieve());
+    ATH_CHECK(m_outKey.initialize());
+
+    ATH_CHECK(m_inKey.initialize());
+
+    return StatusCode::SUCCESS;
+}
+
+StatusCode MuonSegmentFilterAlg::execute(const EventContext& ctx) const {
+    
+    SG::ReadHandle<Trk::SegmentCollection> segment_container(m_inKey, ctx);
+    if (!segment_container.isValid()){
+        ATH_MSG_FATAL("Failed to retrieve segment container "<<m_inKey.fullKey());
+    }
+
+    
+    SG::WriteHandle<ConstDataVector<Trk::SegmentCollection>> out_handle{m_outKey, ctx};
+    ATH_CHECK(out_handle.record(std::make_unique<ConstDataVector<Trk::SegmentCollection>>(SG::VIEW_ELEMENTS)));
+    for (const Trk::Segment* seg : *segment_container){
+        if (keep_segment(seg)) out_handle->push_back(seg);
+    }
+    if (m_trash_unfiltered && !segment_container->empty() && out_handle->size() == segment_container->size()){
+        ATH_MSG_DEBUG("The input and output container are the same. Clear output container");
+        out_handle->clear();
+    }
+
+    
+
+    return StatusCode::SUCCESS;
+}
+bool MuonSegmentFilterAlg::keep_segment(const Trk::Segment* segment) const {
+    for (const Trk::MeasurementBase* meas : segment->containedMeasurements()){
+         /// First find the identifier
+         const Identifier id = meas->associatedSurface().associatedDetectorElementIdentifier();        
+         if (!m_thin_stations.empty()){
+              const StIdx::StIndex  stationIndex = m_idHelperSvc->stationIndex(id);
+              if (std::find_if(m_thin_stations.begin(), m_thin_stations.end(), [stationIndex](const int idx){
+                    return idx == stationIndex;
+              }) != m_thin_stations.end() ) return false;
+         }
+         if (!m_thin_layers.empty()){
+             const StIdx::LayerIndex  layerIndex = m_idHelperSvc->layerIndex(id);
+             if (std::find_if(m_thin_layers.begin(),m_thin_layers.end(),[layerIndex](const int idx)
+                        {return idx == layerIndex;})!= m_thin_layers.end()) return false;
+         }
+         if (!m_thin_technology.empty()){
+             const StIdx::TechnologyIndex technologyIndex = m_idHelperSvc->technologyIndex(id);
+             if (std::find_if(m_thin_technology.begin(),m_thin_technology.end(),[technologyIndex](const int idx ){
+                return idx == technologyIndex;
+             })!= m_thin_technology.end()) return false;
+         }
+         if (!m_thin_region.empty()){
+             const StIdx::DetectorRegionIndex regionIndex = m_idHelperSvc->regionIndex(id);
+             if (std::find_if(m_thin_region.begin(),m_thin_region.end(),[regionIndex](const int idx){
+                    return regionIndex == idx;
+             }) != m_thin_region.end() ) return false;
+         }
+         ///
+         if (!m_thin_chamber_idx.empty()){
+             const StIdx::ChIndex  chamberIdx = m_idHelperSvc->chamberIndex(id);
+             if (std::find_if(m_thin_chamber_idx.begin(),m_thin_chamber_idx.end(),[chamberIdx](const int idx){
+                    return idx == chamberIdx;}) != m_thin_chamber_idx.end()) return false;
+         }        
+    }
+    return true;    
+}
\ No newline at end of file
diff --git a/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/MuonSegmentFilterAlg.h b/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/MuonSegmentFilterAlg.h
new file mode 100644
index 0000000000000000000000000000000000000000..bd5922f3589ceb4a08b28bb830de996daf88314b
--- /dev/null
+++ b/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/MuonSegmentFilterAlg.h
@@ -0,0 +1,64 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef MOOSEGMENTFINDERS_MUONSEGMENTFILTERALG_H
+#define MOOSEGMENTFINDERS_MUONSEGMENTFILTERALG_H
+
+#include "AthenaBaseComps/AthReentrantAlgorithm.h"
+#include "MuonIdHelpers/IMuonIdHelperSvc.h"
+#include "TrkSegment/Segment.h"
+#include "TrkSegment/SegmentCollection.h"
+
+#include "AthContainers/ConstDataVector.h"
+
+///  The muon segment filter alg thins all segments coming from a certain detector technology,
+///  or in a certain region of the muon spectrometer, e.g. BI, BIS, Barrel, Middle, etc... 
+///  The pointers of the TrackSegements passing the filter are added to a SG::VIEW_ELEMENTS container.
+class MuonSegmentFilterAlg : public AthReentrantAlgorithm {
+public:
+    MuonSegmentFilterAlg(const std::string& name, ISvcLocator* pSvcLocator);
+
+    virtual ~MuonSegmentFilterAlg() = default;
+
+    virtual StatusCode initialize() override;
+    virtual StatusCode execute(const EventContext& ctx) const override;
+
+private:
+    bool keep_segment(const Trk::Segment* segment) const;
+    ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{
+        this,
+        "MuonIdHelperSvc",
+        "Muon::MuonIdHelperSvc/MuonIdHelperSvc",
+    };
+    // the following Trk::SegmentCollection MuonSegments are standard MuonSegments, the MuGirl segments are stored in MuonCreatorAlg.h
+    SG::WriteHandleKey<ConstDataVector<Trk::SegmentCollection>> m_outKey{
+        this,
+        "FilteredCollectionName",
+        "FilteredMuonSegments",
+        "Output container",
+    };
+    SG::ReadHandleKey<Trk::SegmentCollection> m_inKey{
+        this,
+        "SegmentCollectionName",
+        "TrackMuonSegments",
+        "Input container",
+    };
+
+    
+  
+    using  StIdx = Muon::MuonStationIndex;
+
+    Gaudi::Property<std::vector<int>> m_thin_stations{this, "ThinStations", {StIdx::BI, StIdx::BM, StIdx::BO, StIdx::BE, StIdx::EI}, "Removes sgements in a given Muon station" };
+    Gaudi::Property<std::vector<int>> m_thin_layers{this, "ThinLayers", {}, "Removes segments in a given layer of the MuonSpectrometer "};
+    Gaudi::Property<std::vector<int>> m_thin_technology{this, "ThinTechnology", {StIdx::STGC, StIdx::MM}, "Removes segments from a given chamber technology"};
+    Gaudi::Property<std::vector<int>> m_thin_region{this, "ThinDetRegion", {}, "Removes all segments form Barrel / EndcapA / EndcapC"};
+    Gaudi::Property<std::vector<int>> m_thin_chamber_idx{this, "ThinChamberIndex", {}, "Removes all segments from a BIS/BIL/BMS/.."};
+    
+    /// If no segments are removed from the container then empty the entire container as the 
+    /// algoritihms depending on the filtered container will give the same as the vanilla chain
+    Gaudi::Property<bool> m_trash_unfiltered{this, "TrashUnFiltered", true };
+
+};
+
+#endif
diff --git a/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/components/MooSegmentFinder_entries.cxx b/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/components/MooSegmentFinder_entries.cxx
index 7b5dea7b697ad252c4baa8ac18f3048608de9fa8..fc1044de2e3a6b76c48616087bab834bd06f01c9 100644
--- a/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/components/MooSegmentFinder_entries.cxx
+++ b/MuonSpectrometer/MuonReconstruction/MuonSegmentCombiners/MuonSegmentCombinerTools/MooSegmentCombinationFinder/src/components/MooSegmentFinder_entries.cxx
@@ -2,8 +2,11 @@
 #include "../MooSegmentFinderAlg.h"
 #include "../MuonSegmentFinderAlg.h"
 #include "../NSWSectorRoadFinderAlg.h"
+#include "../MuonSegmentFilterAlg.h"
+
 
 DECLARE_COMPONENT(MooSegmentFinderAlg)
 DECLARE_COMPONENT(MuonSegmentFinderAlg)
+DECLARE_COMPONENT(MuonSegmentFilterAlg)
 DECLARE_COMPONENT(NSWSectorRoadFinderAlg)
 DECLARE_COMPONENT(Muon::MooSegmentCombinationFinder)
diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/RpcRawDataMonitoring/CMakeLists.txt b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/RpcRawDataMonitoring/CMakeLists.txt
index 3f21a05dd48eda72b991c0d4e7f1d6ad6c246b0f..0031069f63312f2b1b092434be32473740ac8167 100644
--- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/RpcRawDataMonitoring/CMakeLists.txt
+++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/RpcRawDataMonitoring/CMakeLists.txt
@@ -13,8 +13,8 @@ atlas_add_component( RpcRawDataMonitoring
                      src/*.cxx
                      src/components/*.cxx
 
-                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${EIGEN_LIBRARIES} 
+                     INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${ROOT_LIBRARIES}
                      AthenaMonitoringLib AthenaMonitoringKernelLib
                      StoreGateLib SGtests
                      LumiBlockData
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/AsgAnalysisAlgorithms/PMGTruthWeightAlg.h b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/AsgAnalysisAlgorithms/PMGTruthWeightAlg.h
index 6cec22633d47f3589a9b5e07b32a3d6ceea4b35d..6b6f4c9c5e49133f36750e4dfe8948acc7c429a5 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/AsgAnalysisAlgorithms/PMGTruthWeightAlg.h
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/AsgAnalysisAlgorithms/PMGTruthWeightAlg.h
@@ -8,12 +8,12 @@
 #ifndef ASG_ANALYSIS_ALGORITHMS__PMG_TRUTH_WEIGHT_ALG_H
 #define ASG_ANALYSIS_ALGORITHMS__PMG_TRUTH_WEIGHT_ALG_H
 
-#include <xAODEventInfo/EventInfo.h>
 #include <AnaAlgorithm/AnaAlgorithm.h>
 #include <PMGAnalysisInterfaces/IPMGTruthWeightTool.h>
 #include <SystematicsHandles/SysReadHandle.h>
 #include <SystematicsHandles/SysWriteDecorHandle.h>
 #include <SystematicsHandles/SysListHandle.h>
+#include <xAODEventInfo/EventInfo.h>
 
 namespace CP
 {
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/AsgAnalysisAlgorithms/PileupReweightingAlg.h b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/AsgAnalysisAlgorithms/PileupReweightingAlg.h
index 57846bf217a5c4014b044c68c54fa8f0ca911cca..0b7d5aff0a36733d07a2e1b87006940881bac5d7 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/AsgAnalysisAlgorithms/PileupReweightingAlg.h
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/AsgAnalysisAlgorithms/PileupReweightingAlg.h
@@ -12,8 +12,9 @@
 #include <AnaAlgorithm/AnaAlgorithm.h>
 #include <AsgAnalysisInterfaces/IPileupReweightingTool.h>
 #include <SelectionHelpers/OutOfValidityHelper.h>
-#include <SystematicsHandles/SysCopyHandle.h>
+#include <SystematicsHandles/SysReadHandle.h>
 #include <SystematicsHandles/SysListHandle.h>
+#include <SystematicsHandles/SysWriteDecorHandle.h>
 
 namespace CP
 {
@@ -43,10 +44,19 @@ namespace CP
   private:
     SysListHandle m_systematicsList {this};
 
-    /// \brief the jet collection we run on
+    /// \brief the decoration for the pileup weight
   private:
-    SysCopyHandle<xAOD::EventInfo> m_eventInfoHandle {
-      this, "eventInfo", "EventInfo", "the event info object to run on"};
+    CP::SysWriteDecorHandle<float> m_weightDecorator{
+        this, "pileupWeightDecoration", "PileupWeight_%SYS%", "the decoration for the pileup weight"};
+
+    /// \brief the name of the event info object
+  private:
+    CP::SysReadHandle<xAOD::EventInfo> m_eventInfoHandle{
+        this, "eventInfo", "EventInfo", "the input EventInfo object"};
+
+    /// \brief the name of the original event info (this should usually be the same as eventiNfoHandle and EventInfo)
+  private:
+    std::string m_baseEventInfoName{"EventInfo"};
 
     /// \brief the decoration for the corrected and scaled average interactions per crossing
   private:
@@ -62,15 +72,15 @@ namespace CP
 
     /// \brief the accessor for \ref m_correctedScaledAverageMuDecoration
   private:
-    std::unique_ptr<const SG::AuxElement::Accessor<float> > m_correctedScaledAverageMuAccessor;
+    std::unique_ptr<const SG::AuxElement::Decorator<float>> m_correctedScaledAverageMuDecorator;
 
     /// \brief the accessor for \ref m_correctedActualMuDecoration
   private:
-    std::unique_ptr<const SG::AuxElement::Accessor<float> > m_correctedActualMuAccessor;
+    std::unique_ptr<const SG::AuxElement::Decorator<float>> m_correctedActualMuDecorator;
 
     /// \brief the accessor for \ref m_correctedScaledAverageMuDecoration
   private:
-    std::unique_ptr<const SG::AuxElement::Accessor<float> > m_correctedScaledActualMuAccessor;
+    std::unique_ptr<const SG::AuxElement::Decorator<float>> m_correctedScaledActualMuDecorator;
 
     /// \brief the helper for OutOfValidity results
   private:
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/CMakeLists.txt b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/CMakeLists.txt
index e9f6f9553ec24af93dd6b448738f65c9c04d37b9..4dc81b08632da4febbad2cc27f669c2e820c3e9e 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/CMakeLists.txt
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/CMakeLists.txt
@@ -30,6 +30,7 @@ atlas_install_joboptions( share/*_jobOptions.py )
 atlas_install_scripts( share/*_eljob.py )
 
 if( XAOD_STANDALONE )
+
    atlas_add_test( EventAlgsTestJobData
       SCRIPT EventAlgorithmsTest_eljob.py --data-type data --unit-test
       PROPERTIES TIMEOUT 600 )
@@ -54,6 +55,10 @@ if( XAOD_STANDALONE )
       SCRIPT GeneratorAlgorithmsTest_eljob.py --data-type mc --unit-test
       PROPERTIES TIMEOUT 600 )
 
+   atlas_add_test( PileupAlgsTestJobFullSim
+      SCRIPT PileupAlgorithmsTest_eljob.py --unit-test
+      PROPERTIES TIMEOUT 600 )
+
 else()
 
    atlas_add_test( EventAlgsTestJobData
@@ -73,6 +78,10 @@ else()
       SCRIPT athena.py
                AsgAnalysisAlgorithms/GeneratorAlgorithmsTest_jobOptions.py - --data-type mc
       PROPERTIES TIMEOUT 600 )
+   atlas_add_test( PileupAlgsTestJob
+      SCRIPT athena.py
+               AsgAnalysisAlgorithms/PileupAlgorithmsTest_jobOptions.py
+      PROPERTIES TIMEOUT 600 )
 
    if( NOT "${CMAKE_PROJECT_NAME}" STREQUAL "AthDerivation" )
       atlas_add_test( OverlapRemovalTestJobData
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/AsgEventScaleFactorAlg.cxx b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/AsgEventScaleFactorAlg.cxx
index 14549d19d0039c5cc1af5bdcef91c80e1991ad1a..38a1387f02027bf899971f993004ec26f8650660 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/AsgEventScaleFactorAlg.cxx
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/AsgEventScaleFactorAlg.cxx
@@ -21,8 +21,7 @@ namespace CP
   AsgEventScaleFactorAlg (const std::string& name, 
                           ISvcLocator* pSvcLocator)
     : AnaAlgorithm (name, pSvcLocator)
-  {
-  }
+  {}
 
 
 
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/PileupReweightingAlg.cxx b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/PileupReweightingAlg.cxx
index 830351ad11488fe54a344637a0329420d89bed47..a49ff9fdb5c769c8d43d3036e4d5e38594317b31 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/PileupReweightingAlg.cxx
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/Root/PileupReweightingAlg.cxx
@@ -8,8 +8,14 @@
 //
 // includes
 //
+#include "AsgAnalysisAlgorithms/PileupReweightingAlg.h"
 
-#include <AsgAnalysisAlgorithms/PileupReweightingAlg.h>
+/// Anonymous namespace for helpers
+namespace {
+  const static SG::AuxElement::Decorator<unsigned int> decRRN("RandomRunNumber");
+  const static SG::AuxElement::Decorator<unsigned int> decRLBN("RandomLumiBlockNumber");
+  const static SG::AuxElement::Decorator<unsigned long long> decHash("PRWHash");
+}
 
 //
 // method implementations
@@ -24,6 +30,11 @@ namespace CP
     , m_pileupReweightingTool ("CP::PileupReweightingTool", this)
   {
     declareProperty ("pileupReweightingTool", m_pileupReweightingTool, "the pileup reweighting tool we apply");
+    declareProperty ("baseEventInfo", m_baseEventInfoName,
+      "The name of the original event info. The non-systematic dependent decorations will be applied to this "
+      "object so it should be at least a base of the shallow copies read in by the 'eventInfo' handle. "
+      "The default (and strongly recommended behaviour) is to leave all of these pointed at the central 'EventInfo' object!"
+    );
     declareProperty ("correctedScaledAverageMuDecoration", m_correctedScaledAverageMuDecoration, "the decoration for the corrected and scaled average interactions per crossing");
     declareProperty ("correctedActualMuDecoration", m_correctedActualMuDecoration, "the decoration for the corrected actual interactions per crossing");
     declareProperty ("correctedScaledActualMuDecoration", m_correctedScaledActualMuDecoration, "the decoration for the corrected and scaled actual interactions per crossing");
@@ -36,19 +47,20 @@ namespace CP
   {
     if (!m_correctedScaledAverageMuDecoration.empty())
     {
-      m_correctedScaledAverageMuAccessor = std::make_unique<SG::AuxElement::Accessor<float> > (m_correctedScaledAverageMuDecoration);
+      m_correctedScaledAverageMuDecorator = std::make_unique<SG::AuxElement::Decorator<float> > (m_correctedScaledAverageMuDecoration);
     }
     if (!m_correctedActualMuDecoration.empty())
     {
-      m_correctedActualMuAccessor = std::make_unique<SG::AuxElement::Accessor<float> > (m_correctedActualMuDecoration);
+      m_correctedActualMuDecorator = std::make_unique<SG::AuxElement::Decorator<float> > (m_correctedActualMuDecoration);
     }
     if (!m_correctedScaledActualMuDecoration.empty())
     {
-      m_correctedScaledActualMuAccessor = std::make_unique<SG::AuxElement::Accessor<float> > (m_correctedScaledActualMuDecoration);
+      m_correctedScaledActualMuDecorator = std::make_unique<SG::AuxElement::Decorator<float> > (m_correctedScaledActualMuDecoration);
     }
 
+    ANA_CHECK (m_eventInfoHandle.initialize(m_systematicsList));
+    ANA_CHECK (m_weightDecorator.initialize(m_systematicsList, m_eventInfoHandle, SG::AllowEmpty));
     ANA_CHECK (m_pileupReweightingTool.retrieve());
-    ANA_CHECK (m_eventInfoHandle.initialize (m_systematicsList));
     ANA_CHECK (m_systematicsList.addSystematics (*m_pileupReweightingTool));
     ANA_CHECK (m_systematicsList.initialize());
     ANA_CHECK (m_outOfValidity.initialize());
@@ -60,59 +72,57 @@ namespace CP
   StatusCode PileupReweightingAlg ::
   execute ()
   {
-    unsigned int nominalRandomRunNumber{};
 
-    for (const auto& sys : m_systematicsList.systematicsVector())
+    const xAOD::EventInfo* evtInfo = nullptr;
+    ANA_CHECK(evtStore()->retrieve(evtInfo, m_baseEventInfoName));
+
+    // Add additional decorations - these apply to data (and on MC just redecorate the same value as
+    // before)
+    if (m_correctedScaledAverageMuDecorator)
     {
-      ANA_CHECK (m_pileupReweightingTool->applySystematicVariation (sys));
-      xAOD::EventInfo *eventInfo = nullptr;
-      ANA_CHECK (m_eventInfoHandle.getCopy (eventInfo, sys));
-
-      ATH_CHECK (m_pileupReweightingTool->apply (*eventInfo));
-
-      // Add additional decorations
-      if (m_correctedScaledAverageMuAccessor)
-      {
-        (*m_correctedScaledAverageMuAccessor) (*eventInfo)
-          = m_pileupReweightingTool->getCorrectedAverageInteractionsPerCrossing (*eventInfo, true);
-      }
-
-      if (m_correctedActualMuAccessor)
-      {
-        (*m_correctedActualMuAccessor) (*eventInfo)
-          = m_pileupReweightingTool->getCorrectedActualInteractionsPerCrossing (*eventInfo);
-      }
-
-      if (m_correctedScaledActualMuAccessor)
-      {
-        (*m_correctedScaledActualMuAccessor) (*eventInfo)
-          = m_pileupReweightingTool->getCorrectedActualInteractionsPerCrossing (*eventInfo, true);
-      }
-
-      //--- PRWHash to recalculate PU weights using analysis ntuples
-      //--- https://twiki.cern.ch/twiki/bin/view/AtlasProtected/ExtendedPileupReweighting#Using_PRWHash_to_change_pileup_w
-
-      if (eventInfo->eventType (xAOD::EventInfo::IS_SIMULATION))
-      {
-        eventInfo->auxdata<ULong64_t>("PRWHash")
-          = m_pileupReweightingTool->getPRWHash (*eventInfo);
-      }
-
-      // In the case of nominal systematics store the RandomRunNumber for
-      // later. Event info can not be decorated at this point as the
-      // decoration will then also be present in subsequent shallow copies.
-      if (sys.empty())
-      {
-        nominalRandomRunNumber = eventInfo->auxdecor<unsigned int> ("RandomRunNumber");
-      }
+      (*m_correctedScaledAverageMuDecorator) (*evtInfo)
+        = m_pileupReweightingTool->getCorrectedAverageInteractionsPerCrossing (*evtInfo, true);
+    }
+
+    if (m_correctedActualMuDecorator)
+    {
+      (*m_correctedActualMuDecorator) (*evtInfo)
+        = m_pileupReweightingTool->getCorrectedActualInteractionsPerCrossing (*evtInfo);
     }
 
-    // Must decorate the actual instance in the event store for
-    // the electron tool to work. The decoration is done out of the loop
-    // to avoid it being present in all subsequent shallow copies.
-    evtStore()->retrieve<const xAOD::EventInfo>("EventInfo")
-      ->auxdecor<unsigned int>("RandomRunNumber") = nominalRandomRunNumber;
+    if (m_correctedScaledActualMuDecorator)
+    {
+      (*m_correctedScaledActualMuDecorator) (*evtInfo)
+        = m_pileupReweightingTool->getCorrectedActualInteractionsPerCrossing (*evtInfo, true);
+    }
+
+    if (!evtInfo->eventType(xAOD::EventInfo::IS_SIMULATION))
+      // The rest of the PRW tool only applies to MC
+      return StatusCode::SUCCESS;
+
+    // Deal with the parts that aren't related to systematics
+    // Get random run and lumi block numbers
+    unsigned int rrn = m_pileupReweightingTool->getRandomRunNumber(*evtInfo, true);
+    // If it returns 0, try again without the mu dependence
+    if (rrn == 0)
+      rrn = m_pileupReweightingTool->getRandomRunNumber(*evtInfo, false);
+    decRRN(*evtInfo) = rrn;
+    decRLBN(*evtInfo) = (rrn == 0) ? 0 : m_pileupReweightingTool->GetRandomLumiBlockNumber(rrn);
+    // Also decorate with the hash, this can be used for rerunning PRW (but usually isn't)
+    decHash(*evtInfo) = m_pileupReweightingTool->getPRWHash(*evtInfo);
+
+    // Take care of the weight (which is the only thing depending on systematics)
+    for (const auto& sys : m_systematicsList.systematicsVector())
+    {
+      const xAOD::EventInfo* systEvtInfo = nullptr;
+      ANA_CHECK( m_eventInfoHandle.retrieve(systEvtInfo, sys));
+      ANA_CHECK (m_pileupReweightingTool->applySystematicVariation (sys));
+      if (m_weightDecorator)
+        // calculate and set the weight. The 'true' argument makes the tool treat unrepresented data
+        // correctly if the corresponding property is set
+        m_weightDecorator.set(*systEvtInfo, m_pileupReweightingTool->getCombinedWeight(*evtInfo, true), sys);
 
+    };
     return StatusCode::SUCCESS;
   }
 }
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/AsgAnalysisAlgorithmsTest.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/AsgAnalysisAlgorithmsTest.py
index 09fa02e9ed81b315af397cc3817828780b51edae..5f355ef5ea7a9d91e21fffaaa37f5fc832e6103d 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/AsgAnalysisAlgorithmsTest.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/AsgAnalysisAlgorithmsTest.py
@@ -20,10 +20,16 @@ def makeOverlapSequence (dataType) :
     sysService.sigmaRecommended = 1
 
     # Include, and then set up the pileup analysis sequence:
+    prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
+    
     from AsgAnalysisAlgorithms.PileupAnalysisSequence import \
         makePileupAnalysisSequence
-    pileupSequence = makePileupAnalysisSequence( dataType )
-    pileupSequence.configure( inputName = 'EventInfo', outputName = 'EventInfo_%SYS%' )
+    pileupSequence = makePileupAnalysisSequence(
+        dataType,
+        userPileupConfigs=prwfiles,
+        userLumicalcFiles=lumicalcfiles,
+    )
+    pileupSequence.configure( inputName = {}, outputName = {} )
     algSeq += pileupSequence
 
     # Include, and then set up the electron analysis sequence:
@@ -179,18 +185,23 @@ def makeGeneratorAlgorithmsSequence (dataType) :
     sysService = createService( 'CP::SystematicsSvc', 'SystematicsSvc', sequence = algSeq )
     sysService.sigmaRecommended = 1
 
-    # Include, and then set up the pileup analysis sequence (to make a copy):
+    # Include, and then set up the pileup analysis sequence:
+    prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
+
     from AsgAnalysisAlgorithms.PileupAnalysisSequence import \
         makePileupAnalysisSequence
-    pileupSequence = makePileupAnalysisSequence( dataType )
-    pileupSequence.configure( inputName = 'EventInfo', outputName = 'EventInfo_%SYS%' )
+    pileupSequence = makePileupAnalysisSequence(
+        dataType,
+        userPileupConfigs=prwfiles,
+        userLumicalcFiles=lumicalcfiles,
+    )
+    pileupSequence.configure( inputName = {}, outputName = {} )
     algSeq += pileupSequence
 
     # Include, and then set up the generator analysis sequence:
     from AsgAnalysisAlgorithms.GeneratorAnalysisSequence import \
         makeGeneratorAnalysisSequence
     generatorSequence = makeGeneratorAnalysisSequence( dataType, saveCutBookkeepers=True, runNumber=284500, cutBookkeepersSystematics=True )
-    generatorSequence.configure( inputName = 'EventInfo_%SYS%', outputName = {} )
     algSeq += generatorSequence
 
     # Set up an ntuple to check the job with:
@@ -200,9 +211,74 @@ def makeGeneratorAlgorithmsSequence (dataType) :
     ntupleMaker = createAlgorithm( 'CP::AsgxAODNTupleMakerAlg', 'NTupleMaker' )
     ntupleMaker.TreeName = 'events'
     ntupleMaker.Branches = [
-        'EventInfo_NOSYS.runNumber   -> runNumber',
-        'EventInfo_NOSYS.eventNumber -> eventNumber',
-        'EventInfo_NOSYS.generatorWeight_%SYS% -> generatorWeight_%SYS%',
+        'EventInfo.runNumber   -> runNumber',
+        'EventInfo.eventNumber -> eventNumber',
+        'EventInfo.generatorWeight_%SYS% -> generatorWeight_%SYS%',
+    ]
+    algSeq += ntupleMaker
+    treeFiller = createAlgorithm( 'CP::TreeFillerAlg', 'TreeFiller' )
+    treeFiller.TreeName = 'events'
+    algSeq += treeFiller
+
+    return algSeq
+
+def pileupConfigFiles(dataType):
+    """Return the PRW config files and lumicalc files for tests"""
+    if dataType == "data":
+        prwfiles = []
+        lumicalcfiles = []
+    else:
+        lumicalcfiles = [
+            # These need to be updated for release 22 data
+            # "GoodRunsLists/data15_13TeV/20170619/PHYS_StandardGRL_All_Good_25ns_276262-284484_OflLumi-13TeV-008.root",
+            # "GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_297730-311481_OflLumi-13TeV-009.root",
+        ]
+        if dataType == "mc":
+            prwfiles = [
+                # These need to be updated for release 22 data and not
+                # be taken from cvmfs
+                #"/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/dev/PileupReweighting/mc16_13TeV/pileup_mc16a_dsid410501_FS.root"
+            ]
+        else:
+            # We don't have a PRW file that works properly for the AFII file so we don't apply it in
+            # this case
+            prwfiles = []
+    return prwfiles, lumicalcfiles
+
+def makePileupSequence () :
+    # NB: test only run for MC
+
+    algSeq = AlgSequence()
+
+    # Set up the systematics loader/handler service:
+    sysService = createService( 'CP::SystematicsSvc', 'SystematicsSvc', sequence = algSeq )
+    sysService.sigmaRecommended = 1
+
+    # Include, and then set up the pileup analysis sequence:
+    prwfiles, lumicalcfiles = pileupConfigFiles("mc")
+
+    from AsgAnalysisAlgorithms.PileupAnalysisSequence import \
+        makePileupAnalysisSequence
+    pileupSequence = makePileupAnalysisSequence(
+        "mc",
+        userPileupConfigs=prwfiles,
+        userLumicalcFiles=lumicalcfiles,
+    )
+    pileupSequence.configure( inputName = {}, outputName = {} )
+    algSeq += pileupSequence
+
+
+    # Set up an ntuple to check the job with:
+    treeMaker = createAlgorithm( 'CP::TreeMakerAlg', 'TreeMaker' )
+    treeMaker.TreeName = 'events'
+    algSeq += treeMaker
+    ntupleMaker = createAlgorithm( 'CP::AsgxAODNTupleMakerAlg', 'NTupleMaker' )
+    ntupleMaker.TreeName = 'events'
+    ntupleMaker.Branches = [
+        'EventInfo.runNumber   -> runNumber',
+        'EventInfo.eventNumber -> eventNumber',
+        # we currently don't have any pileup calib files for this test
+        # 'EventInfo.PileupWeight_%SYS% -> pileupWeight_%SYS%',
     ]
     algSeq += ntupleMaker
     treeFiller = createAlgorithm( 'CP::TreeFillerAlg', 'TreeFiller' )
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/GeneratorAnalysisSequence.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/GeneratorAnalysisSequence.py
index 6841b4d76a16868b80dd6b50a972b38f0b0da4ad..244c9cb25e4ddf3555cc04b4078367f0a385dfc3 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/GeneratorAnalysisSequence.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/GeneratorAnalysisSequence.py
@@ -39,7 +39,7 @@ def makeGeneratorAnalysisSequence( dataType,
     addPrivateTool( alg, 'truthWeightTool', 'PMGTools::PMGTruthWeightTool' )
     alg.decoration = 'generatorWeight_%SYS%'
 
-    seq.append( alg, inputPropName = 'eventInfo' )
+    seq.append( alg, inputPropName = None )
 
     # Return the sequence:
     return seq
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
index 26862e54897cae4538141ebc51b1f3fd1a23d8b6..4adf8b7541faa4d69bb1eee4ee5d0b80f80320f2 100644
--- a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/python/PileupAnalysisSequence.py
@@ -4,6 +4,12 @@
 from AnaAlgorithm.AnaAlgSequence import AnaAlgSequence
 from AnaAlgorithm.DualUseConfig import createAlgorithm, addPrivateTool
 
+try:
+    from AthenaCommon.Logging import logging
+except ImportError:
+    import logging
+prwlog = logging.getLogger('makePileupAnalysisSequence')
+
 def makePileupAnalysisSequence( dataType, userPileupConfigs=[], userLumicalcFiles=[] , autoConfig=False ):
     """Create a PRW analysis algorithm sequence
 
@@ -24,8 +30,6 @@ def makePileupAnalysisSequence( dataType, userPileupConfigs=[], userLumicalcFile
         if len(muMcFiles)==0:
             muMcFiles = getMCMuFiles()
         else:
-            from AthenaCommon import Logging
-            prwlog = Logging.logging.getLogger('makePileupAnalysisSequence')
             prwlog.warning('Sent autoconfig and userPileupConfigs='+str(userPileupConfigs))
             prwlog.warning('Ignoring autoconfig and keeping user-specified files')
 
@@ -41,10 +45,13 @@ def makePileupAnalysisSequence( dataType, userPileupConfigs=[], userLumicalcFile
     alg = createAlgorithm( 'CP::PileupReweightingAlg', 'PileupReweightingAlg' )
     addPrivateTool( alg, 'pileupReweightingTool', 'CP::PileupReweightingTool' )
     alg.pileupReweightingTool.ConfigFiles = muMcFiles
+    if not muMcFiles and dataType != "data":
+        prwlog.info("No PRW config files provided. Disabling reweighting")
+        # Setting the weight decoration to the empty string disables the reweighting
+        alg.pileupWeightDecoration = ""
     alg.pileupReweightingTool.LumiCalcFiles = muDataFiles
 
-    seq.append( alg, inputPropName = 'eventInfo',
-                outputPropName = 'eventInfoOut' )
+    seq.append( alg, inputPropName = {} )
 
     # Return the sequence:
     return seq
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/PileupAlgorithmsTest_eljob.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/PileupAlgorithmsTest_eljob.py
new file mode 100755
index 0000000000000000000000000000000000000000..7cfb66b0a7885bd93395dfc00ad28d0d17621fde
--- /dev/null
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/PileupAlgorithmsTest_eljob.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+#
+# @author Jon Burr
+# adapted from GeneratorAlgorithmsTest_eljob.py
+
+# Only test on 'mc'
+# Read the submission directory as a command line argument. You can
+# extend the list of arguments with your private ones later on.
+import optparse
+parser = optparse.OptionParser()
+parser.add_option( '-s', '--submission-dir', dest = 'submission_dir',
+                   action = 'store', type = 'string', default = 'submitDir',
+                   help = 'Submission directory for EventLoop' )
+parser.add_option( '-u', '--unit-test', dest='unit_test',
+                   action = 'store_true', default = False,
+                   help = 'Run the job in "unit test mode"' )
+( options, args ) = parser.parse_args()
+
+# Set up (Py)ROOT.
+import ROOT
+ROOT.xAOD.Init().ignore()
+
+dataType = "mc"
+
+# Set up the sample handler object. See comments from the C++ macro
+# for the details about these lines.
+import os
+sh = ROOT.SH.SampleHandler()
+sh.setMetaString( 'nc_tree', 'CollectionTree' )
+sample = ROOT.SH.SampleLocal (dataType)
+sample.add (os.getenv ("ASG_TEST_FILE_MC"))
+sh.add (sample)
+sh.printContent()
+
+# Create an EventLoop job.
+job = ROOT.EL.Job()
+job.sampleHandler( sh )
+job.options().setDouble( ROOT.EL.Job.optMaxEvents, 500 )
+
+from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import makePileupSequence
+algSeq = makePileupSequence()
+print( algSeq ) # For debugging
+algSeq.addSelfToJob( job )
+
+# Set up an output file for the job:
+job.outputAdd( ROOT.EL.OutputStream( 'ANALYSIS' ) )
+
+# Find the right output directory:
+submitDir = options.submission_dir
+if options.unit_test:
+    import os
+    import tempfile
+    submitDir = tempfile.mkdtemp( prefix = 'genTest_', dir = os.getcwd() )
+    os.rmdir( submitDir )
+    pass
+
+# Run the job using the direct driver.
+driver = ROOT.EL.DirectDriver()
+driver.submit( job, submitDir )
diff --git a/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/PileupAlgorithmsTest_jobOptions.py b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/PileupAlgorithmsTest_jobOptions.py
new file mode 100644
index 0000000000000000000000000000000000000000..657bb44266ab9eb29b28651265f0280a56c3b90c
--- /dev/null
+++ b/PhysicsAnalysis/Algorithms/AsgAnalysisAlgorithms/share/PileupAlgorithmsTest_jobOptions.py
@@ -0,0 +1,20 @@
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+#
+# @author Jon Burr
+# adapted from GeneratorAlgorithmsTest_jobOptions.py
+
+# Only test on 'mc'
+import AthenaRootComps.ReadAthenaxAODHybrid
+theApp.EvtMax = 500
+svcMgr.EventSelector.InputCollections = [os.getenv("ASG_TEST_FILE_MC")]
+
+from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import makePileupSequence
+algseq = makePileupSequence()
+print(algseq)
+
+athAlgSeq += algseq
+
+svcMgr += CfgMgr.THistSvc()
+svcMgr.THistSvc.Output += [
+    "ANALYSIS DATAFILE='PileupAlgorithmsTest.hist.root' OPT='RECREATE'"
+]
\ No newline at end of file
diff --git a/PhysicsAnalysis/Algorithms/EgammaAnalysisAlgorithms/python/EgammaAnalysisAlgorithmsTest.py b/PhysicsAnalysis/Algorithms/EgammaAnalysisAlgorithms/python/EgammaAnalysisAlgorithmsTest.py
index e1b1d6a9cf339b34dddeb9d087b72229d45b5dd7..3db7e80f428b7d5bc9c7c621a3a86853b3df4762 100644
--- a/PhysicsAnalysis/Algorithms/EgammaAnalysisAlgorithms/python/EgammaAnalysisAlgorithmsTest.py
+++ b/PhysicsAnalysis/Algorithms/EgammaAnalysisAlgorithms/python/EgammaAnalysisAlgorithmsTest.py
@@ -2,6 +2,7 @@
 
 from AnaAlgorithm.AlgSequence import AlgSequence
 from AnaAlgorithm.DualUseConfig import createService
+from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import pileupConfigFiles
 
 def makeSequence (dataType, likelihood=True) :
     algSeq = AlgSequence()
@@ -10,11 +11,17 @@ def makeSequence (dataType, likelihood=True) :
     sysService = createService( 'CP::SystematicsSvc', 'SystematicsSvc', sequence = algSeq )
     sysService.sigmaRecommended = 1
 
+    prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
+
     # Include, and then set up the pileup analysis sequence:
     from AsgAnalysisAlgorithms.PileupAnalysisSequence import \
         makePileupAnalysisSequence
-    pileupSequence = makePileupAnalysisSequence( dataType )
-    pileupSequence.configure( inputName = 'EventInfo', outputName = 'EventInfo_%SYS%' )
+    pileupSequence = makePileupAnalysisSequence(
+        dataType,
+        userPileupConfigs=prwfiles,
+        userLumicalcFiles=lumicalcfiles,
+    )
+    pileupSequence.configure( inputName = {}, outputName = {} )
     algSeq += pileupSequence
 
     # Include, and then set up the electron analysis sequence:
diff --git a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetAnalysisAlgorithmsTest.py b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetAnalysisAlgorithmsTest.py
index 9338633a177ebd8378084699755a433e7d1fd3e8..eb2c6490b0968aa381c42cd774c2916aaf6d2484 100644
--- a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetAnalysisAlgorithmsTest.py
+++ b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetAnalysisAlgorithmsTest.py
@@ -4,6 +4,7 @@
 
 from AnaAlgorithm.AlgSequence import AlgSequence
 from AnaAlgorithm.DualUseConfig import createAlgorithm, createService
+from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import pileupConfigFiles
 
 def makeSequence (dataType, jetContainer="AntiKt4EMPFlowJets") :
 
@@ -17,10 +18,16 @@ def makeSequence (dataType, jetContainer="AntiKt4EMPFlowJets") :
     sysService.sigmaRecommended = 1
 
     # Include, and then set up the pileup analysis sequence:
+    prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
+
     from AsgAnalysisAlgorithms.PileupAnalysisSequence import \
         makePileupAnalysisSequence
-    pileupSequence = makePileupAnalysisSequence( dataType )
-    pileupSequence.configure( inputName = 'EventInfo', outputName = 'EventInfo_%SYS%' )
+    pileupSequence = makePileupAnalysisSequence(
+        dataType,
+        userPileupConfigs=prwfiles,
+        userLumicalcFiles=lumicalcfiles,
+    )
+    pileupSequence.configure( inputName = {}, outputName = {} )
     print( pileupSequence ) # For debugging
 
     # Include, and then set up the jet analysis algorithm sequence:
@@ -32,8 +39,7 @@ def makeSequence (dataType, jetContainer="AntiKt4EMPFlowJets") :
     # Include, and then set up the jet analysis algorithm sequence:
     from JetAnalysisAlgorithms.JetJvtAnalysisSequence import makeJetJvtAnalysisSequence
     jvtSequence = makeJetJvtAnalysisSequence( dataType, jetContainer, enableCutflow=True )
-    jvtSequence.configure( inputName = { 'eventInfo' : 'EventInfo_%SYS%',
-                                         'jets'      : 'AnalysisJetsBase_%SYS%' },
+    jvtSequence.configure( inputName = { 'jets'      : 'AnalysisJetsBase_%SYS%' },
                            outputName = { 'jets'      : 'AnalysisJets_%SYS%' } )
     print( jvtSequence ) # For debugging
 
diff --git a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetJvtAnalysisSequence.py b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetJvtAnalysisSequence.py
index c440d02c3b6909637178e0f1200f091080a3b8f3..8a16190c6a1bd7cd30d313de1078e5129a02a9cb 100644
--- a/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetJvtAnalysisSequence.py
+++ b/PhysicsAnalysis/Algorithms/JetAnalysisAlgorithms/python/JetJvtAnalysisSequence.py
@@ -45,8 +45,7 @@ def makeJetJvtAnalysisSequence( dataType, jetCollection,
         alg.scaleFactorOutputDecoration = 'jvt_effSF_%SYS%'
 
         seq.append( alg,
-                    inputPropName = { 'jets' : 'particles',
-                                      'eventInfo' : 'eventInfo' },
+                    inputPropName = { 'jets' : 'particles' },
                     dynConfig = {'preselection' : lambda meta : "&&".join (meta["selectionDecorNames"])} )
 
         if enableFJvt:
@@ -57,8 +56,7 @@ def makeJetJvtAnalysisSequence( dataType, jetCollection,
             alg.scaleFactorOutputDecoration = 'fjvt_effSF_%SYS%'
 
             seq.append( alg,
-                        inputPropName = { 'jets' : 'particles',
-                                          'eventInfo' : 'eventInfo' },
+                        inputPropName = { 'jets' : 'particles' },
                         metaConfig = {'selectionDecorNames' : ['fjvt_selection'] if runSelection else [],
                                       'selectionDecorCount' : [1] if runSelection else [] },
                         dynConfig = {'preselection' : lambda meta : "&&".join (meta["selectionDecorNames"] + ['no_fjvt'])} )
diff --git a/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/python/MuonAnalysisAlgorithmsTest.py b/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/python/MuonAnalysisAlgorithmsTest.py
index 4a39e1c0e2a2be81445ba977f5204a873003f7c3..5424512d12be41462966451f8eafce6d0ff7e5e1 100644
--- a/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/python/MuonAnalysisAlgorithmsTest.py
+++ b/PhysicsAnalysis/Algorithms/MuonAnalysisAlgorithms/python/MuonAnalysisAlgorithmsTest.py
@@ -4,6 +4,7 @@
 
 from AnaAlgorithm.AlgSequence import AlgSequence
 from AnaAlgorithm.DualUseConfig import createAlgorithm, createService
+from AsgAnalysisAlgorithms.AsgAnalysisAlgorithmsTest import pileupConfigFiles
 
 def makeSequence (dataType) :
 
@@ -13,12 +14,17 @@ def makeSequence (dataType) :
     sysService = createService( 'CP::SystematicsSvc', 'SystematicsSvc', sequence = algSeq )
     sysService.sigmaRecommended = 1
 
-
     # Include, and then set up the pileup analysis sequence:
+    prwfiles, lumicalcfiles = pileupConfigFiles(dataType)
+
     from AsgAnalysisAlgorithms.PileupAnalysisSequence import \
         makePileupAnalysisSequence
-    pileupSequence = makePileupAnalysisSequence( dataType )
-    pileupSequence.configure( inputName = 'EventInfo', outputName = 'EventInfo_%SYS%' )
+    pileupSequence = makePileupAnalysisSequence(
+        dataType,
+        userPileupConfigs=prwfiles,
+        userLumicalcFiles=lumicalcfiles,
+    )
+    pileupSequence.configure( inputName = {}, outputName = {} )
 
     # Add the pileup sequence to the job:
     algSeq += pileupSequence
diff --git a/PhysicsAnalysis/AnalysisCommon/PileupReweighting/PileupReweighting/PileupReweightingTool.h b/PhysicsAnalysis/AnalysisCommon/PileupReweighting/PileupReweighting/PileupReweightingTool.h
index b7892fa32ca5664417808f155d27dca75b69b253..ffde78eb89ba0f0705de128da85c39491f5b5455 100644
--- a/PhysicsAnalysis/AnalysisCommon/PileupReweighting/PileupReweighting/PileupReweightingTool.h
+++ b/PhysicsAnalysis/AnalysisCommon/PileupReweighting/PileupReweighting/PileupReweightingTool.h
@@ -81,12 +81,12 @@ namespace CP {
       virtual StatusCode apply ( const xAOD::EventInfo& eventInfo, bool mu_dependent );
 
       /// Return combined pileup weight
-      virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo );
+      virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo, bool correctUnrepresented );
 
       /// Same as above, but for a 'custom weight' variable
-      virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo,Double_t x, Double_t y );
+      virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo,Double_t x, Double_t y, bool correctUnrepresented );
 
-      virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo , const TString& trigger, bool mu_dependent );
+      virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo , const TString& trigger, bool mu_dependent, bool correctUnrepresented );
 
       /// return the prw hash used for fast updates of weights at the post-processing level ... see the share/makeWeightTree.C script for usage
       virtual ULong64_t getPRWHash( const xAOD::EventInfo& eventInfo );
diff --git a/PhysicsAnalysis/AnalysisCommon/PileupReweighting/Root/PileupReweightingTool.cxx b/PhysicsAnalysis/AnalysisCommon/PileupReweighting/Root/PileupReweightingTool.cxx
index 816917dd6b9641fbc7ef29ae1d3f6a6b6a0c554c..a7635f1f5de20c5fe6a5773cdf57124263bdaf9b 100644
--- a/PhysicsAnalysis/AnalysisCommon/PileupReweighting/Root/PileupReweightingTool.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/PileupReweighting/Root/PileupReweightingTool.cxx
@@ -388,12 +388,18 @@ ULong64_t PileupReweightingTool::getPRWHash( const xAOD::EventInfo& eventInfo )
 }
 
 /// Return combined pileup weight
-float PileupReweightingTool::getCombinedWeight( const xAOD::EventInfo& eventInfo ) {
-   return m_activeTool->GetCombinedWeight(   eventInfo.runNumber(), eventInfo.mcChannelNumber(), eventInfo.averageInteractionsPerCrossing() );
+float PileupReweightingTool::getCombinedWeight( const xAOD::EventInfo& eventInfo, bool correctUnrepresented ) {
+   float weight = m_activeTool->GetCombinedWeight(   eventInfo.runNumber(), eventInfo.mcChannelNumber(), eventInfo.averageInteractionsPerCrossing() );
+   if(correctUnrepresented && m_unrepresentedDataAction==2) 
+      weight *= getUnrepresentedDataWeight( eventInfo );
+   return weight;
 }
 
-float PileupReweightingTool::getCombinedWeight( const xAOD::EventInfo& eventInfo, Double_t x, Double_t y ) {
-   return m_activeTool->GetCombinedWeight(   eventInfo.runNumber(), eventInfo.mcChannelNumber(), x, y );
+float PileupReweightingTool::getCombinedWeight( const xAOD::EventInfo& eventInfo, Double_t x, Double_t y, bool correctUnrepresented ) {
+   float weight = m_activeTool->GetCombinedWeight(   eventInfo.runNumber(), eventInfo.mcChannelNumber(), x, y );
+   if(correctUnrepresented && m_unrepresentedDataAction==2) 
+      weight *= getUnrepresentedDataWeight( eventInfo );
+   return weight;
 }
 
 /// When using UnrepresentedDataAction=2, you may want to apply this additional weight to ensure sum of weights are preserved
@@ -439,7 +445,6 @@ int PileupReweightingTool::fill( const xAOD::EventInfo& eventInfo, Double_t x, D
 }
 
 StatusCode PileupReweightingTool::apply(const xAOD::EventInfo& eventInfo, bool mu_dependent) {
-
    if (eventInfo.isAvailable<unsigned int>(m_prefix+"RandomRunNumber")){
      ATH_MSG_WARNING("Attempting to run pileup reweighting, but it has already been run with prefix \"" << m_prefix << "\" - returning");
      return StatusCode::SUCCESS;
@@ -459,11 +464,10 @@ StatusCode PileupReweightingTool::apply(const xAOD::EventInfo& eventInfo, bool m
    eventInfo.auxdecor<float>(m_prefix+"corrected_averageInteractionsPerCrossing") = eventInfo.averageInteractionsPerCrossing();
 
    //decorate with standard PileupWeight 
-   if(!m_noWeightsMode) {
-      double weight =  /*m_tool->*/getCombinedWeight( eventInfo );
-      if(m_unrepresentedDataAction==2) weight *= getUnrepresentedDataWeight( eventInfo );
-      eventInfo.auxdecor<float>(m_prefix+"PileupWeight") = weight;
-   }
+
+   if(!m_noWeightsMode)
+      eventInfo.auxdecor<float>(m_prefix+"PileupWeight") = getCombinedWeight(eventInfo, true);
+      
    //decorate with random run number etc
    unsigned int rrn = getRandomRunNumber( eventInfo, mu_dependent );
    eventInfo.auxdecor<unsigned int>(m_prefix+"RandomRunNumber") = (rrn==0) ? getRandomRunNumber(eventInfo, false) : rrn;
@@ -495,8 +499,8 @@ float PileupReweightingTool::getDataWeight(const xAOD::EventInfo& eventInfo, con
 
 }
 
-float PileupReweightingTool::getCombinedWeight( const xAOD::EventInfo& eventInfo , const TString& trigger, bool mu_dependent ) {
-   float out = getCombinedWeight(eventInfo);
+float PileupReweightingTool::getCombinedWeight( const xAOD::EventInfo& eventInfo , const TString& trigger, bool mu_dependent, bool correctUnrepresented ) {
+   float out = getCombinedWeight(eventInfo, correctUnrepresented);
    if(!out) return out; //don't try to evaluate DataWeight if our PRW is 0 ... means there is no data available at that mu anyway
 
    //need to use the random run number ... only used to pick the subperiod, but in run2 so far we only have one subperiod
diff --git a/PhysicsAnalysis/AnalysisCommon/ThinningUtils/python/ThinTrkTrack.py b/PhysicsAnalysis/AnalysisCommon/ThinningUtils/python/ThinTrkTrack.py
index 1dc9bb3a58df59f6e1c1733f122c5f08b7077f99..6ff5896d23b64237f9e1877ab3c5851ecfc50075 100644
--- a/PhysicsAnalysis/AnalysisCommon/ThinningUtils/python/ThinTrkTrack.py
+++ b/PhysicsAnalysis/AnalysisCommon/ThinningUtils/python/ThinTrkTrack.py
@@ -23,7 +23,12 @@ class ThinTrkTrack(Configured):
                 PhotonsKey="Photons",
                 CombinedMuonsTrackKey="CombinedMuonTracks",
                 GSFTrackKey="GSFTracks",
-                StreamName='StreamAOD')
+                StreamName='StreamAOD',
+                ExtraInputs = [  # For P->T conversion
+                    ("InDetDD::SiDetectorElementCollection", "ConditionStore+PixelDetectorElementCollection"),
+                    ("InDetDD::SiDetectorElementCollection", "ConditionStore+SCT_DetectorElementCollection"),
+                    ("InDetDD::TRT_DetElementContainer", "ConditionStore+TRT_DetElementContainer"),
+                ])
             
             print (theTrkTrackThinner)
 
diff --git a/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTRTStandaloneTrackAlg.cxx b/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTRTStandaloneTrackAlg.cxx
index fcf97442f4343caf43bba5921c35ff113357c692..bf0e96fb2fed85a2bbbd416b92f317020e77e049 100644
--- a/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTRTStandaloneTrackAlg.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTRTStandaloneTrackAlg.cxx
@@ -145,19 +145,20 @@ ThinTRTStandaloneTrackAlg::execute(const EventContext& ctx) const
       }
     }
   }
-  if (m_doMuon) {
-    SG::ReadHandle<xAOD::MuonContainer> muons(m_inputMuonContainerKey, ctx);
-    if (!muons.isValid()) {
-      ATH_MSG_FATAL("Failed to retrieve " << m_inputMuonContainerKey.key());
-      return StatusCode::FAILURE;
-    }
-    for (const xAOD::Muon* muon : *muons) {
-      const xAOD::TrackParticle* trk =
-        muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
-      if (trk)
-        keptInDetTrackParticles[trk->index()] = true;
-    }
-  }
+   if (m_doMuon){
+     SG::ReadHandle<xAOD::MuonContainer> muons(m_inputMuonContainerKey, ctx);
+     if( !muons.isValid() ) {
+        ATH_MSG_FATAL("Failed to retrieve "<< m_inputMuonContainerKey.key());
+       return StatusCode::FAILURE;
+     }
+     for (const xAOD::Muon* muon : *muons){
+        const xAOD::TrackParticle* trk = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
+        /// SaF muons have the ID link to the InDetForwardTrackParticles
+        if (muon->muonType() != xAOD::Muon::SiliconAssociatedForwardMuon && trk) keptInDetTrackParticles[trk->index()] = true;
+     }
+   
+   
+   }
 
   // Do the thinning
   indetTrackPC.keep(keptInDetTrackParticles);
diff --git a/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTrkTrackAlg.cxx b/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTrkTrackAlg.cxx
index 34de9bf70349acc62d9f6e3ca6480512dc729b3a..5bc98ba69e96553b737cb736604f0b1e7c5a72fc 100644
--- a/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTrkTrackAlg.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTrkTrackAlg.cxx
@@ -90,11 +90,7 @@ StatusCode ThinTrkTrackAlg::initialize(){
     }
     if (m_doMuons) {
       ATH_MSG_INFO("Will thin " << m_muonsKey << " Trk::Tracks with key " << m_CombinedMuonsTracksKey);
-    }     
-
-    ATH_CHECK(m_pixelDetEleCollKey.initialize());
-    ATH_CHECK(m_SCTDetEleCollKey.initialize());
-    ATH_CHECK(m_trtDetEleContKey.initialize()); 
+    }
 
     if (m_streamName.empty()) {
       ATH_MSG_ERROR( "StreamName property was not initialized" );
diff --git a/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTrkTrackAlg.h b/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTrkTrackAlg.h
index e7860fe3dbe8463c00598ac5bf09693f425ed19c..71e61aa0104ceeaa081d2b4da8cdf9a57a281e40 100644
--- a/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTrkTrackAlg.h
+++ b/PhysicsAnalysis/AnalysisCommon/ThinningUtils/src/ThinTrkTrackAlg.h
@@ -54,13 +54,6 @@ public:
   StringProperty m_streamName
   { this, "StreamName", "", "Name of the stream being thinned" };
 
-  // For P->T converters of ID tracks with Pixel
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_pixelDetEleCollKey{this, "PixelDetEleCollKey", "PixelDetectorElementCollection", "Key of SiDetectorElementCollection for Pixel"};
-  // For P->T converters of ID tracks with SCT
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};
-  // For P->T converters of ID tracks with TRT  
-  SG::ReadCondHandleKey<InDetDD::TRT_DetElementContainer> m_trtDetEleContKey{this, "TRTDetEleContKey", "TRT_DetElementContainer", "Key of TRT_DetElementContainer"}; 
-  
   /// Should the thinning run?
   bool m_doElectrons;
   bool m_doPhotons;
diff --git a/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/CMakeLists.txt b/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/CMakeLists.txt
index 0e9043c41efc511d736ebfe25fc83af084911eca..fd41dbd9bea8ef28155b666c7614f99a67f90460 100644
--- a/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/CMakeLists.txt
+++ b/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/CMakeLists.txt
@@ -13,3 +13,9 @@ atlas_add_component( AnalysisTriggerAlgs
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
+
+atlas_add_test( RoIBResultToxAODCATest
+   SCRIPT python -m AnalysisTriggerAlgs.AnalysisTriggerAlgsCAConfig
+   POST_EXEC_SCRIPT nopost.sh )
+
+
diff --git a/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/python/AnalysisTriggerAlgsCAConfig.py b/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/python/AnalysisTriggerAlgsCAConfig.py
index 35ed8126325e55d2ef294bd1b1569f72b94c1657..35f79edb69ab45d3f5a07ebd959d65b27aa2540c 100644
--- a/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/python/AnalysisTriggerAlgsCAConfig.py
+++ b/PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerAlgs/python/AnalysisTriggerAlgsCAConfig.py
@@ -41,6 +41,15 @@ def RoIBResultToxAODCfg(flags):
         outputList += [
             (alg.xAODKeyMuon.Type,  alg.xAODKeyMuon.Path)
         ]
+        from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
+        acc.merge(MuonGeoModelCfg(flags))
+        # RPC
+        from MuonConfig.MuonCablingConfig import RPCCablingConfigCfg
+        acc.merge( RPCCablingConfigCfg(flags) )
+        #TGC
+        from MuonConfig.MuonCablingConfig import TGCCablingConfigCfg
+        acc.merge( TGCCablingConfigCfg(flags) )
+
     if alg.DoCalo:
         outputList += [
             (alg.xAODKeyEmTau.Type, alg.xAODKeyEmTau.Path),
@@ -48,5 +57,32 @@ def RoIBResultToxAODCfg(flags):
             (alg.xAODKeyJetEt.Type, alg.xAODKeyJetEt.Path),
             (alg.xAODKeyJet.Type,   alg.xAODKeyJet.Path)
         ]
+        from  TrigConfigSvc.TrigConfigSvcCfg import L1ConfigSvcCfg
+        acc.merge(L1ConfigSvcCfg(flags))
+    
 
     return acc, outputList
+
+
+if __name__ == "__main__":
+    from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+    from AthenaCommon import Configurable
+    Configurable.ConfigurableRun3Behavior = 1
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags as flags
+    from AthenaConfiguration.TestDefaults import defaultTestFiles
+
+    flags.Input.Files = defaultTestFiles.RAW
+    flags.Exec.MaxEvents = 20
+    flags.lock()
+
+    topCA = MainServicesCfg(flags)
+    from TriggerJobOpts.TriggerByteStreamConfig import ByteStreamReadCfg
+    topCA.merge(ByteStreamReadCfg(flags))
+    from TrigT1ResultByteStream.TrigT1ResultByteStreamConfig import L1TriggerByteStreamDecoderCfg
+    topCA.merge(L1TriggerByteStreamDecoderCfg(flags))
+    ca, output = RoIBResultToxAODCfg(flags)
+    topCA.merge(ca)
+    status = topCA.run()
+    if status.isFailure():
+        import sys
+        sys.exit(-1)
diff --git a/PhysicsAnalysis/D3PDTools/EventLoopTest/CMakeLists.txt b/PhysicsAnalysis/D3PDTools/EventLoopTest/CMakeLists.txt
index 72782790953068aa892462e7f6d6e082d58639fe..04ab1d214bd74665a95eb91af29dae637200f09b 100644
--- a/PhysicsAnalysis/D3PDTools/EventLoopTest/CMakeLists.txt
+++ b/PhysicsAnalysis/D3PDTools/EventLoopTest/CMakeLists.txt
@@ -15,8 +15,11 @@ atlas_add_root_dictionary( EventLoopTestLib
    EventLoopTest/UnitTestAlg4.h EventLoopTest/UnitTestTool.h Root/LinkDef.h
    EXTERNAL_PACKAGES ROOT )
 
+# have one basic library to use for most tests.  this has an explicit list
+# of files, because some files go into the next library.
 atlas_add_library( EventLoopTestLib
-   EventLoopTest/*.h EventLoopTest/*.ihh Root/*.cxx ${EventLoopTestDictSource}
+   Root/UnitTest.cxx Root/UnitTestAlg.cxx Root/UnitTestAlg1.cxx Root/UnitTestAlg2.cxx Root/UnitTestAlg3.cxx Root/UnitTestAlg4.cxx Root/UnitTestAlg5.cxx Root/UnitTestAlg6.cxx Root/UnitTestAlgXAOD.cxx Root/UnitTestConfig.cxx Root/UnitTestTool.cxx
+   ${EventLoopTestDictSource}
    PUBLIC_HEADERS EventLoopTest
    DEFINITIONS USE_CMAKE
    INCLUDE_DIRS ${GTEST_INCLUDE_DIRS}
@@ -24,6 +27,11 @@ atlas_add_library( EventLoopTestLib
    LINK_LIBRARIES ${GTEST_LIBRARIES} AnaAlgorithmLib AsgMessagingLib AsgTools EventLoop RootCoreUtils SampleHandler
    PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} xAODEventInfo xAODMetaData )
 
+# have a separate library for the Driver test fixture.  this needs to
+# be an object library to link correctly for a parametric gtest fixture.
+add_library( EventLoopTestFixtureLib OBJECT Root/UnitTestFixture.cxx)
+target_link_libraries (EventLoopTestFixtureLib PUBLIC EventLoopTestLib )
+
 atlas_add_dictionary( EventLoopTestDict
    EventLoopTest/EventLoopTestDict.h
    EventLoopTest/selection.xml
@@ -36,17 +44,24 @@ function( _add_gtest cxx_name )
    if (${slow_index} GREATER -1)
      set (EXTRA_ARGS ${EXTRA_ARGS} TIMEOUT 900)
    endif ()
+   set (EXTRA_LIBS PROPERTIES )
+   list (FIND FIXTURE_TESTS "${cxx_name}" fixture_index)
+   if (${fixture_index} GREATER -1)
+     set (EXTRA_LIBS EventLoopTestFixtureLib)
+   endif ()
    get_filename_component( test_name ${cxx_name} NAME_WE )
    atlas_add_test (${test_name}
       SOURCES test/${test_name}.cxx
       INCLUDE_DIRS ${GMOCK_INCLUDE_DIRS}
       LINK_LIBRARIES ${GMOCK_LIBRARIES} RootCoreUtils AsgTools AsgTestingLib
-      SampleHandler EventLoopTestLib xAODRootAccess ${EXTRA_ARGS})
+      SampleHandler EventLoopTestLib xAODRootAccess ${EXTRA_LIBS} ${EXTRA_ARGS})
    set_tests_properties (EventLoopTest_${test_name}_ctest PROPERTIES LABELS "EventLoopTest;EventLoop;SampleHandler;AnaAlgorithm" )
 endfunction( _add_gtest )
 
 set (MANUAL_TESTS test/gt_LSFDriver_EOS.cxx test/make_test_file.cxx test/ut_driver_direct_gridinput.cxx test/ut_driver_kubernetes.cxx test/ut_driver_local_docker.cxx test/ut_driver_grid.cxx test/ut_driver_condor.cxx test/ut_driver_ll.cxx test/ut_driver_lsf.cxx test/ut_driver_torque.cxx test/ut_xrootd_output.cxx test/ut_xrootd_input.cxx)
 
+set (FIXTURE_TESTS test/gt_DirectDriver.cxx test/gt_LSFDriver_EOS.cxx test/gt_LocalDriver.cxx)
+
 set (SLOW_TESTS test/gt_DirectDriver.cxx test/gt_LocalDriver.cxx
    test/gt_LeakChecks.cxx test/gt_UnitTestAlgXAOD.cxx)
 
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/DerivationFrameworkBPhys/Bmumu_reco_mumu.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/DerivationFrameworkBPhys/Bmumu_reco_mumu.h
index efe1ab4ee9149a6368bc8c8e5d174869315d660d..d38b82b337a6653f8067a0bacc2345797d6ac413 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/DerivationFrameworkBPhys/Bmumu_reco_mumu.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/DerivationFrameworkBPhys/Bmumu_reco_mumu.h
@@ -44,29 +44,34 @@ namespace DerivationFramework {
       Bmumu_reco_mumu(const std::string& t, const std::string& n,
 		      const IInterface* p);
 
-      StatusCode initialize();
-      StatusCode finalize();
+      StatusCode initialize() override;
       
-      virtual StatusCode addBranches() const;
+      virtual StatusCode addBranches() const override;
       
     private:
       /** tools
        */
-      ToolHandle<Trk::V0Tools>                    m_v0Tools;
-      ToolHandle<Analysis::JpsiFinder>            m_jpsiFinder;
-      ToolHandle<Analysis::PrimaryVertexRefitter> m_pvRefitter;
+      ToolHandle<Trk::V0Tools>                    m_v0Tools{this, "V0Tools", "Trk::V0Tools"};
+      ToolHandle<Analysis::JpsiFinder>            m_jpsiFinder{this,"JpsiFinder", "Analysis::JpsiFinder"};
+      ToolHandle<Analysis::PrimaryVertexRefitter> m_pvRefitter{this, "PVRefitter", "Analysis::PrimaryVertexRefitter"};
       SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };
       
       /** job options
        */
-      std::string m_outputVtxContainerName;
-      std::string m_pvContainerName;
-      std::string m_refPVContainerName;
-      bool        m_refitPV;
-      int         m_PV_max;
-      int         m_DoVertexType;
-      size_t      m_PV_minNTracks;
-      bool        m_do3d;
+      
+      SG::ReadHandleKey<xAOD::VertexContainer>  m_pvContainerKey{this, "PVContainerName", "PrimaryVertices"};
+    
+      SG::WriteHandleKey<xAOD::VertexContainer>  m_refContainerKey{this, "RefPVContainerName" , "RefittedPrimaryVertices"};
+  
+      SG::WriteHandleKey<xAOD::VertexContainer>  m_outVtxContainerKey{this, "OutputVtxContainerName" , "OniaCandidates"};
+    
+      Gaudi::Property<bool>        m_refitPV{this, "RefitPV", false};
+      Gaudi::Property<int>         m_PV_max{this, "MaxPVrefit", 1};
+      Gaudi::Property<int>         m_DoVertexType{this, "DoVertexType", 1};
+      // minimum number of tracks for PV to be considered for PV association
+      Gaudi::Property<unsigned int>m_PV_minNTracks{this, "MinNTracksInPV", 0};
+      Gaudi::Property<bool>        m_do3d{this, "Do3d", false};
+  
   }; 
 }
 
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/DerivationFrameworkBPhys/Reco_mumu.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/DerivationFrameworkBPhys/Reco_mumu.h
index 390fe7449be5e9ef83b7db1f2fd41e898b4bd12a..b3364d95181403d85745f14e1d732d6e6d87b6c0 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/DerivationFrameworkBPhys/Reco_mumu.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/DerivationFrameworkBPhys/Reco_mumu.h
@@ -35,23 +35,26 @@ namespace DerivationFramework {
     private:
       /** tools
        */
-      ToolHandle<Trk::V0Tools>                    m_v0Tools;
-      ToolHandle<Analysis::ICandidateSearch>      m_jpsiFinder;
-      ToolHandle<Analysis::PrimaryVertexRefitter> m_pvRefitter;
+      ToolHandle<Trk::V0Tools>                    m_v0Tools{this, "V0Tools", "Trk::V0Tools"};
+      ToolHandle<Analysis::JpsiFinder>            m_jpsiFinder{this,"JpsiFinder", "Analysis::JpsiFinder"};
+      ToolHandle<Analysis::PrimaryVertexRefitter> m_pvRefitter{this, "PVRefitter", "Analysis::PrimaryVertexRefitter"};
       SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };
       
-      /** job options
-       */
-      std::string m_outputVtxContainerName;
-      std::string m_pvContainerName;
-      std::string m_refPVContainerName;
-      bool        m_refitPV;
-      int         m_PV_max;
-      int         m_DoVertexType;
-      size_t      m_PV_minNTracks;
-      bool        m_do3d;
-      bool        m_checkCollections;
-      std::vector<std::string> m_CollectionsToCheck;
+      
+    // minimum number of tracks for PV to be considered for PV association
+   
+      Gaudi::Property<bool>         m_refitPV{this, "RefitPV", false};
+      Gaudi::Property<int>          m_PV_max{this, "MaxPVrefit", 1};
+      Gaudi::Property<int>          m_DoVertexType{this, "DoVertexType", 1};
+      Gaudi::Property<unsigned int> m_PV_minNTracks{this, "MinNTracksInPV", 0};
+      Gaudi::Property<bool>        m_do3d{this, "Do3d" , false};
+      Gaudi::Property<bool>        m_checkCollections{this, "CheckCollections", false};
+      
+      SG::ReadHandleKeyArray<xAOD::VertexContainer> m_CollectionsToCheck{this, "CheckVertexContainers", {}};
+      SG::ReadHandleKey<xAOD::VertexContainer> m_pvContainerKey{this,"PVContainerName", "PrimaryVertices"};
+     
+      SG::WriteHandleKey<xAOD::VertexContainer> m_refContainerKey{this, "RefPVContainerName","RefittedPrimaryVertices" };
+      SG::WriteHandleKey<xAOD::VertexContainer> m_outContainerKey{this, "OutputVtxContainerName", "OniaCandidates"};
   }; 
 }
 
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Bmumu_reco_mumu.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Bmumu_reco_mumu.cxx
index a3c06874ffae9d29728b5f5cb69b460cc504352b..53d19dae09988ad76c83e25f3d04a023fd8dee65 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Bmumu_reco_mumu.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Bmumu_reco_mumu.cxx
@@ -32,28 +32,9 @@ namespace DerivationFramework {
   Bmumu_reco_mumu::Bmumu_reco_mumu(const std::string& t,
       const std::string& n,
       const IInterface* p) : 
-    CfAthAlgTool(t,n,p),
-    m_v0Tools("Trk::V0Tools"),
-    m_jpsiFinder("Analysis::JpsiFinder"),
-    m_pvRefitter("Analysis::PrimaryVertexRefitter")
-  {
+    CfAthAlgTool(t,n,p){
     declareInterface<DerivationFramework::IAugmentationTool>(this);
     
-    // Declare tools    
-    declareProperty("V0Tools"   , m_v0Tools);
-    declareProperty("JpsiFinder", m_jpsiFinder);
-    declareProperty("PVRefitter", m_pvRefitter);
-    
-    // Declare user-defined properties
-    declareProperty("OutputVtxContainerName", m_outputVtxContainerName = "OniaCandidates");
-    declareProperty("PVContainerName"       , m_pvContainerName        = "PrimaryVertices");
-    declareProperty("RefPVContainerName"    , m_refPVContainerName     = "RefittedPrimaryVertices");
-    declareProperty("RefitPV"               , m_refitPV                = false);
-    declareProperty("MaxPVrefit"            , m_PV_max                 = 1);
-    declareProperty("DoVertexType"          , m_DoVertexType           = 1);
-    // minimum number of tracks for PV to be considered for PV association
-    declareProperty("MinNTracksInPV"        , m_PV_minNTracks          = 0);
-    declareProperty("Do3d"                  , m_do3d                   = false);
   }
 
   // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
@@ -74,31 +55,26 @@ namespace DerivationFramework {
 
     // Get the beam spot service
     CHECK( m_beamSpotKey.initialize() );
+    ATH_CHECK(m_pvContainerKey.initialize());
+    ATH_CHECK(m_refContainerKey.initialize(m_refitPV));
+    ATH_CHECK(m_outVtxContainerKey.initialize());
     
     return StatusCode::SUCCESS;
     
   }
-  
-  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
-
-  StatusCode Bmumu_reco_mumu::finalize()
-  {
-    // everything all right
-    return StatusCode::SUCCESS;
-  }
-
-  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
-  
-  StatusCode Bmumu_reco_mumu::addBranches() const
-  {
+ 
+  StatusCode Bmumu_reco_mumu::addBranches() const {
+    
+    const EventContext& ctx = Gaudi::Hive::currentContext();
     // Jpsi container and its auxilliary store
-    xAOD::VertexContainer*    vtxContainer = NULL;
-    xAOD::VertexAuxContainer* vtxAuxContainer = NULL;
+    std::unique_ptr<xAOD::VertexContainer>  vtxContainer = std::make_unique<xAOD::VertexContainer>();
+    std::unique_ptr<xAOD::VertexAuxContainer> vtxAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
+    vtxContainer->setStore(vtxAuxContainer.get());
     
     //----------------------------------------------------
     // call Jpsi finder
     //----------------------------------------------------
-    if( !m_jpsiFinder->performSearch(vtxContainer, vtxAuxContainer).isSuccess() ) {
+    if( !m_jpsiFinder->performSearch(ctx, *vtxContainer).isSuccess() ) {
       ATH_MSG_FATAL("Jpsi finder (" << m_jpsiFinder << ") failed.");
       return StatusCode::FAILURE;
     }
@@ -106,61 +82,48 @@ namespace DerivationFramework {
     //----------------------------------------------------
     // retrieve primary vertices
     //----------------------------------------------------
-    const xAOD::VertexContainer*    pvContainer = NULL;
-    CHECK( evtStore()->retrieve(pvContainer, m_pvContainerName) );
-
+    SG::ReadHandle<xAOD::VertexContainer> pvContainer{m_pvContainerKey,ctx};
+    if (!pvContainer.isValid()){
+        ATH_MSG_FATAL("Failed to retrieve "<<m_pvContainerKey);
+        return StatusCode::FAILURE;
+    }
+    
+    
     //----------------------------------------------------
     // Try to retrieve refitted primary vertices
     //----------------------------------------------------
-    bool refPvExists = false;
-    xAOD::VertexContainer*    refPvContainer = NULL;
-    xAOD::VertexAuxContainer* refPvAuxContainer = NULL;
-    if(m_refitPV) {
-      if(evtStore()->contains<xAOD::VertexContainer>(m_refPVContainerName)) {
-        // refitted PV container exists. Get it from the store gate
-        CHECK( evtStore()->retrieve(refPvContainer, m_refPVContainerName) );
-        CHECK( evtStore()->retrieve(refPvAuxContainer, m_refPVContainerName+"Aux.") );
-        refPvExists = true;
-      } else {
-        // refitted PV container does not exist. Create a new one.
-        refPvContainer = new xAOD::VertexContainer;
-        refPvAuxContainer = new xAOD::VertexAuxContainer;
-        refPvContainer->setStore(refPvAuxContainer);
-      }
-    }
+    std::unique_ptr<xAOD::VertexContainer>    refPvContainer = std::make_unique<xAOD::VertexContainer>();
+    std::unique_ptr<xAOD::VertexAuxContainer> refPvAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
+    refPvContainer->setStore(refPvAuxContainer.get());
+    
+    //m_refContainerKey
     
     // Give the helper class the ptr to v0tools and beamSpotsSvc to use
-    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
-    if(not beamSpotHandle.isValid()) ATH_MSG_ERROR("Cannot Retrieve " << m_beamSpotKey.key() );
+    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
+    if(!beamSpotHandle.isValid()) {
+        ATH_MSG_ERROR("Cannot Retrieve " << m_beamSpotKey.key() );
+        return StatusCode::FAILURE;
+    }
     BPhysPVTools helper(&(*m_v0Tools), beamSpotHandle.cptr());
     helper.SetMinNTracksInPV(m_PV_minNTracks);
     helper.SetSave3d(m_do3d);
 
-    if(m_refitPV){ 
-       if(vtxContainer->size() >0){
-        StatusCode SC = helper.FillCandwithRefittedVertices(vtxContainer,  pvContainer, refPvContainer, &(*m_pvRefitter) , m_PV_max, m_DoVertexType);
-        if(SC.isFailure()){
-            ATH_MSG_FATAL("refitting failed - check the vertices you passed");
-            return SC;
-        }
-        }
-    }else{
-        if(vtxContainer->size() >0)CHECK(helper.FillCandExistingVertices(vtxContainer, pvContainer, m_DoVertexType));
+    if(m_refitPV && vtxContainer->size()){
+        ATH_CHECK(helper.FillCandwithRefittedVertices(vtxContainer.get(),  pvContainer.cptr(), refPvContainer.get(), &(*m_pvRefitter) , m_PV_max, m_DoVertexType));
+    }else if (!m_refitPV && vtxContainer->size() >0){
+        ATH_CHECK(helper.FillCandExistingVertices(vtxContainer.get(), pvContainer.cptr(), m_DoVertexType));
     }
     
     
     //----------------------------------------------------
     // save in the StoreGate
     //----------------------------------------------------
-    if (!evtStore()->contains<xAOD::VertexContainer>(m_outputVtxContainerName))       
-      CHECK(evtStore()->record(vtxContainer, m_outputVtxContainerName));
-    
-    if (!evtStore()->contains<xAOD::VertexAuxContainer>(m_outputVtxContainerName+"Aux.")) 
-      CHECK(evtStore()->record(vtxAuxContainer, m_outputVtxContainerName+"Aux."));
+    SG::WriteHandle<xAOD::VertexContainer> outputVertices{m_outVtxContainerKey, ctx};
+    ATH_CHECK(outputVertices.record(std::move(vtxContainer), std::move(vtxAuxContainer)));
     
-    if(!refPvExists && m_refitPV) {
-      CHECK(evtStore()->record(refPvContainer   , m_refPVContainerName));
-      CHECK(evtStore()->record(refPvAuxContainer, m_refPVContainerName+"Aux."));
+    if(m_refitPV) {
+      SG::WriteHandle<xAOD::VertexContainer> refitVertices{m_refContainerKey,ctx};
+      ATH_CHECK(refitVertices.record(std::move(refPvContainer), std::move(refPvAuxContainer)));
     }
 
     // add counter for number of events seen
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Reco_Vertex.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Reco_Vertex.cxx
index b24617fb8be6ab38d11999d5690a423e136d9129..075ae5e9fa862079b59f39b1b29689ab4cb84fca 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Reco_Vertex.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Reco_Vertex.cxx
@@ -79,9 +79,10 @@ namespace DerivationFramework {
   StatusCode Reco_Vertex::addBranches() const
   {
     bool callTool = true;
+    const EventContext& ctx = Gaudi::Hive::currentContext();
     if(m_checkCollections) {
       for(const auto &str : m_CollectionsToCheck){
-         SG::ReadHandle<xAOD::VertexContainer> handle(str);
+         SG::ReadHandle<xAOD::VertexContainer> handle(str,ctx);
          ATH_CHECK(handle.isValid());
          if(handle->size() == 0) {
             callTool = false;
@@ -92,24 +93,23 @@ namespace DerivationFramework {
     }
 
     // Vertex container and its auxilliary store
-    xAOD::VertexContainer*    pVtxContainer = nullptr;
-    xAOD::VertexAuxContainer* pVtxAuxContainer = nullptr;
-    
+    std::unique_ptr<xAOD::VertexContainer>    vtxContainer = std::make_unique<xAOD::VertexContainer>();
+    std::unique_ptr<xAOD::VertexAuxContainer> vtxAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
+    vtxContainer->setStore(vtxAuxContainer.get());
+   
     if(callTool) {
     //----------------------------------------------------
     // call Tool
     //----------------------------------------------------
-    if( !m_SearchTool->performSearch(pVtxContainer, pVtxAuxContainer).isSuccess() ) {
+    if( !m_SearchTool->performSearch(ctx,*vtxContainer).isSuccess() ) {
       ATH_MSG_FATAL("Tool (" << m_SearchTool << ") failed.");
       return StatusCode::FAILURE;
     }
-    std::unique_ptr<xAOD::VertexContainer>    vtxContainer   (pVtxContainer);
-    std::unique_ptr<xAOD::VertexAuxContainer> vtxAuxContainer(pVtxAuxContainer);
-
+ 
     //----------------------------------------------------
     // retrieve primary vertices
     //----------------------------------------------------
-    SG::ReadHandle<xAOD::VertexContainer> pvContainer(m_pvContainerName);
+    SG::ReadHandle<xAOD::VertexContainer> pvContainer(m_pvContainerName,ctx);
 
     //----------------------------------------------------
     // Try to retrieve refitted primary vertices
@@ -124,7 +124,7 @@ namespace DerivationFramework {
     }
     
     // Give the helper class the ptr to v0tools and beamSpotsSvc to use
-    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
+    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
     if(not beamSpotHandle.isValid()) ATH_MSG_ERROR("Cannot Retrieve " << m_beamSpotKey.key() );
     BPhysPVTools helper(&(*m_v0Tools), beamSpotHandle.cptr());
     helper.SetMinNTracksInPV(m_PV_minNTracks);
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Reco_mumu.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Reco_mumu.cxx
index c64cb02228d9464d356e84e81d17fb41e7f95746..abdf1922d8cd51803cd7ee5d679d0b8c46f49cb8 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Reco_mumu.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkBPhys/src/Reco_mumu.cxx
@@ -22,29 +22,8 @@ namespace DerivationFramework {
   Reco_mumu::Reco_mumu(const std::string& t,
       const std::string& n,
       const IInterface* p) : 
-    AthAlgTool(t,n,p),
-    m_v0Tools("Trk::V0Tools"),
-    m_jpsiFinder("Analysis::JpsiFinder"),
-    m_pvRefitter("Analysis::PrimaryVertexRefitter") {
+    AthAlgTool(t,n,p) {
     declareInterface<DerivationFramework::IAugmentationTool>(this);
-    
-    // Declare tools    
-    declareProperty("V0Tools"   , m_v0Tools);
-    declareProperty("JpsiFinder", m_jpsiFinder);
-    declareProperty("PVRefitter", m_pvRefitter);
-    
-    // Declare user-defined properties
-    declareProperty("OutputVtxContainerName", m_outputVtxContainerName = "OniaCandidates");
-    declareProperty("PVContainerName"       , m_pvContainerName        = "PrimaryVertices");
-    declareProperty("RefPVContainerName"    , m_refPVContainerName     = "RefittedPrimaryVertices");
-    declareProperty("RefitPV"               , m_refitPV                = false);
-    declareProperty("MaxPVrefit"            , m_PV_max                 = 1);
-    declareProperty("DoVertexType"          , m_DoVertexType           = 1);
-    // minimum number of tracks for PV to be considered for PV association
-    declareProperty("MinNTracksInPV"        , m_PV_minNTracks          = 0);
-    declareProperty("Do3d"                  , m_do3d                   = false);
-    declareProperty("CheckCollections"      , m_checkCollections       = false);
-    declareProperty("CheckVertexContainers" , m_CollectionsToCheck);
   }
 
   // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
@@ -65,6 +44,11 @@ namespace DerivationFramework {
 
     // Get the beam spot service   
     CHECK( m_beamSpotKey.initialize() );
+    
+    ATH_CHECK(m_CollectionsToCheck.initialize());
+    ATH_CHECK(m_pvContainerKey.initialize());
+    ATH_CHECK(m_outContainerKey.initialize());
+    ATH_CHECK(m_refContainerKey.initialize(m_refitPV));
     return StatusCode::SUCCESS;
  }
   
@@ -75,106 +59,74 @@ namespace DerivationFramework {
   StatusCode Reco_mumu::addBranches() const
   {
     bool callJpsiFinder = true;
+    const EventContext& ctx = Gaudi::Hive::currentContext();
     if(m_checkCollections) {
-      for(const auto &str : m_CollectionsToCheck){
-         const xAOD::VertexContainer*    vertContainer = nullptr;
-         ATH_CHECK( evtStore()->retrieve(vertContainer, str) );
+      for( SG::ReadHandle<xAOD::VertexContainer> vertContainer : m_CollectionsToCheck.makeHandles(ctx)){
+         if (!vertContainer.isValid()){
+             ATH_MSG_FATAL("Failed to retrieve "<<vertContainer.key());
+             return StatusCode::FAILURE;
+         }
          if(vertContainer->size() == 0) {
             callJpsiFinder = false;
-            ATH_MSG_DEBUG("Container VertexContainer (" << str << ") is empty");
+            ATH_MSG_DEBUG("Container VertexContainer (" << vertContainer.key() << ") is empty");
             break;//No point checking other containers
-         }/*else{
-            callJpsiFinder = true;
-            ATH_MSG_DEBUG("Container VertexContainer (" << str << ") has events N= " << vertContainer->size());
-         }*/
+         }
       }
     }
 
     // Jpsi container and its auxilliary store
-    xAOD::VertexContainer*    vtxContainer = NULL;
-    xAOD::VertexAuxContainer* vtxAuxContainer = NULL;
+    std::unique_ptr<xAOD::VertexContainer>    vtxContainer = std::make_unique<xAOD::VertexContainer>();
+    std::unique_ptr<xAOD::VertexAuxContainer> vtxAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
+    vtxContainer->setStore(vtxAuxContainer.get());
     
-    if(callJpsiFinder) {
-    //----------------------------------------------------
-    // call Jpsi finder
-    //----------------------------------------------------
-    if( !m_jpsiFinder->performSearch(vtxContainer, vtxAuxContainer).isSuccess() ) {
-      ATH_MSG_FATAL("Jpsi finder (" << m_jpsiFinder << ") failed.");
-      return StatusCode::FAILURE;
-    }
-
-    //----------------------------------------------------
-    // retrieve primary vertices
-    //----------------------------------------------------
-    const xAOD::VertexContainer*    pvContainer = NULL;
-    CHECK( evtStore()->retrieve(pvContainer, m_pvContainerName) );
-
-    //----------------------------------------------------
-    // Try to retrieve refitted primary vertices
-    //----------------------------------------------------
-    bool refPvExists = false;
-    xAOD::VertexContainer*    refPvContainer = NULL;
-    xAOD::VertexAuxContainer* refPvAuxContainer = NULL;
-    if(m_refitPV) {
-      if(evtStore()->contains<xAOD::VertexContainer>(m_refPVContainerName)) {
-        // refitted PV container exists. Get it from the store gate
-        CHECK( evtStore()->retrieve(refPvContainer, m_refPVContainerName) );
-        CHECK( evtStore()->retrieve(refPvAuxContainer, m_refPVContainerName+"Aux.") );
-        refPvExists = true;
-      } else {
-        // refitted PV container does not exist. Create a new one.
-        refPvContainer = new xAOD::VertexContainer;
-        refPvAuxContainer = new xAOD::VertexAuxContainer;
-        refPvContainer->setStore(refPvAuxContainer);
-      }
-    }
-     // Give the helper class the ptr to v0tools and beamSpotsSvc to use
-    SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
-    if(not beamSpotHandle.isValid()) ATH_MSG_ERROR("Cannot Retrieve " << m_beamSpotKey.key() );
+    std::unique_ptr<xAOD::VertexContainer>    refPvContainer =std::make_unique<xAOD::VertexContainer>();
+    std::unique_ptr<xAOD::VertexAuxContainer> refPvAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
+    refPvContainer->setStore(refPvAuxContainer.get());
+   
     
-    // Give the helper class the ptr to v0tools and beamSpotsSvc to use
-    BPhysPVTools helper(&(*m_v0Tools), beamSpotHandle.cptr());
-    helper.SetMinNTracksInPV(m_PV_minNTracks);
-    helper.SetSave3d(m_do3d);
+    if(callJpsiFinder) {
+        //----------------------------------------------------
+        // call Jpsi finder
+        //----------------------------------------------------
+        ATH_CHECK(m_jpsiFinder->performSearch(ctx, *vtxContainer));
 
-    if(m_refitPV){ 
-       if(vtxContainer->size() >0){
-        StatusCode SC = helper.FillCandwithRefittedVertices(vtxContainer,  pvContainer, refPvContainer, &(*m_pvRefitter) , m_PV_max, m_DoVertexType);
-        if(SC.isFailure()){
-            ATH_MSG_FATAL("refitting failed - check the vertices you passed");
-            return SC;
+        //----------------------------------------------------
+        // retrieve primary vertices
+        //----------------------------------------------------
+        SG::ReadHandle<xAOD::VertexContainer>    pvContainer{m_pvContainerKey,ctx};
+        if (!pvContainer.isValid()){
+            ATH_MSG_FATAL("Failed to retrive "<<m_pvContainerKey.fullKey());
+            return StatusCode::FAILURE;
         }
+        //----------------------------------------------------
+        // Try to retrieve refitted primary vertices
+        //----------------------------------------------------
+       
+       // Give the helper class the ptr to v0tools and beamSpotsSvc to use
+        SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
+        if(not beamSpotHandle.isValid()) ATH_MSG_ERROR("Cannot Retrieve " << m_beamSpotKey.key() );
+        
+        // Give the helper class the ptr to v0tools and beamSpotsSvc to use
+        BPhysPVTools helper(&(*m_v0Tools), beamSpotHandle.cptr());
+        helper.SetMinNTracksInPV(m_PV_minNTracks);
+        helper.SetSave3d(m_do3d);
+
+        if(m_refitPV &&  vtxContainer->size()){
+            ATH_CHECK(helper.FillCandwithRefittedVertices(vtxContainer.get(),  pvContainer.cptr(), refPvContainer.get(), &(*m_pvRefitter) , m_PV_max, m_DoVertexType));
+        }else if (!m_refitPV && vtxContainer->size()){
+            ATH_CHECK(helper.FillCandExistingVertices(vtxContainer.get(), pvContainer.cptr(), m_DoVertexType));
         }
-    }else{
-        if(vtxContainer->size() >0)CHECK(helper.FillCandExistingVertices(vtxContainer, pvContainer, m_DoVertexType));
-    }
-    
+    }    
     //----------------------------------------------------
     // save in the StoreGate
     //----------------------------------------------------
-    if (!evtStore()->contains<xAOD::VertexContainer>(m_outputVtxContainerName))       
-      CHECK(evtStore()->record(vtxContainer, m_outputVtxContainerName));
-    
-    if (!evtStore()->contains<xAOD::VertexAuxContainer>(m_outputVtxContainerName+"Aux.")) 
-      CHECK(evtStore()->record(vtxAuxContainer, m_outputVtxContainerName+"Aux."));
-    
-    if(!refPvExists && m_refitPV) {
-      CHECK(evtStore()->record(refPvContainer   , m_refPVContainerName));
-      CHECK(evtStore()->record(refPvAuxContainer, m_refPVContainerName+"Aux."));
-    }
+    SG::WriteHandle<xAOD::VertexContainer> out_handle{m_outContainerKey, ctx};
+    ATH_CHECK(out_handle.record(std::move(vtxContainer), std::move(vtxAuxContainer)));
+    if(m_refitPV) {
+       SG::WriteHandle<xAOD::VertexContainer> refitHandle{m_refContainerKey,ctx};
+       ATH_CHECK(refitHandle.record(std::move(refPvContainer), std::move(refPvAuxContainer)));
     }    
 
-    if (!callJpsiFinder) { //Fill with empty containers
-      vtxContainer = new xAOD::VertexContainer;
-      vtxAuxContainer = new xAOD::VertexAuxContainer;
-      vtxContainer->setStore(vtxAuxContainer);
-      if (!evtStore()->contains<xAOD::VertexContainer>(m_outputVtxContainerName))       
-        CHECK(evtStore()->record(vtxContainer, m_outputVtxContainerName));
-      
-      if (!evtStore()->contains<xAOD::VertexAuxContainer>(m_outputVtxContainerName+"Aux.")) 
-        CHECK(evtStore()->record(vtxAuxContainer, m_outputVtxContainerName+"Aux."));
-    }
-    
     return StatusCode::SUCCESS;
   }  
 }
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/CMakeLists.txt b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/CMakeLists.txt
index fbe51bc9e84ae03ce248cdd4e7bdb09d2be9e088..1fd33bd1b948a38ef5331b556773c6f516772ce4 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/CMakeLists.txt
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/CMakeLists.txt
@@ -12,7 +12,10 @@ atlas_add_library( DerivationFrameworkMuonsLib
    DerivationFrameworkMuons/*.h src/*.cxx
    PUBLIC_HEADERS DerivationFrameworkMuons
    INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-   LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools AthContainers AthenaBaseComps AthenaKernel CaloEvent CaloGeoHelpers DerivationFrameworkInterfaces ExpressionEvaluationLib FourMomUtils GaudiKernel ICaloTrkMuIdTools InDetTrackSelectionToolLib MCTruthClassifierLib RecoToolInterfaces TrigDecisionToolLib TrigMuonMatchingLib TrkExInterfaces TrkParameters TrkSurfaces muonEvent xAODBase xAODCaloEvent xAODEventInfo xAODJet xAODMuon xAODPrimitives xAODTracking xAODTruth )
+   LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools AthContainers AthenaBaseComps AthenaKernel CaloEvent CaloGeoHelpers DerivationFrameworkInterfaces ExpressionEvaluationLib 
+				    FourMomUtils GaudiKernel ICaloTrkMuIdTools InDetTrackSelectionToolLib MCTruthClassifierLib RecoToolInterfaces TrigDecisionToolLib 
+				    TrigMuonMatchingLib TrkExInterfaces TrkParameters TrkSurfaces muonEvent xAODBase xAODCaloEvent xAODEventInfo MuonDetDescrUtils
+				    xAODJet xAODMuon xAODPrimitives xAODTracking xAODTruth )
 
 atlas_add_component( DerivationFrameworkMuons
    src/components/*.cxx
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/CellsOfMuon.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/CellsOfMuon.h
deleted file mode 100644
index f22392753a6033d97d2833be75b263a2fbf58ec9..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/CellsOfMuon.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-// ======================================================================
-// Cells of Muon
-// dongliang.zhang@cern.ch
-// Given an xAOD::Muon and an CaloCellContainer, checks
-// which calo cells are associated with muon.
-// Sets a mask accordingly. Intended for thinning use.
-// ======================================================================
-#pragma once
-
-#include "xAODMuon/Muon.h"
-#include "CaloEvent/CaloCellContainer.h"
-#include "CaloEvent/CaloClusterCellLink.h"
-
-namespace DerivationFramework {
-  struct CellsOfMuon{ 
-    void select(const xAOD::Muon* mu, std::vector<bool> &mask) {
-      auto cluster = mu->cluster();
-      if(cluster){
-        const CaloClusterCellLink* links=cluster->getCellLinks();
-        unsigned int i(0);
-        CaloClusterCellLink::const_iterator c=links->begin();
-        CaloClusterCellLink::const_iterator e=links->end();
-        for(; c!=e; ++c, i++) mask[c.index()] = true;
-      }
-    }
-  };
-}
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/ClusterNearMuon.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/ClusterNearMuon.h
deleted file mode 100644
index b815e6773f24f50a99e5e4ad18865a3951e46af0..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/ClusterNearMuon.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-// ======================================================================
-// ClusterNearMuon
-// dongliang.zhang@cern.ch
-// Given an xAOD::IParticle and an xAOD::CaloClusterContainer container, checks
-// which clusters are in a cone of a given size around the IParticle. Sets
-// a mask accordingly. Intended for thinning use.
-// ======================================================================
-#pragma once
-#include <ostream>
-#include "xAODMuon/Muon.h"
-#include "xAODCaloEvent/CaloClusterContainer.h"
-#include "xAODCaloEvent/CaloCluster.h"
-#include "CaloGeoHelpers/CaloSampling.h"
-#include <vector>
-
-namespace DerivationFramework {
-  struct ClusterNearMuon{
-    void select(const xAOD::Muon* particle, float coneSize, const xAOD::CaloClusterContainer* clusters, std::vector<bool> &mask) {
-      float particleEta = particle->eta();
-      float particlePhi = particle->phi();
-      if(!GetExtrapEtaPhi(particle, particleEta, particlePhi)){
-        std::cerr << "Failed to get the eta-phi of the muon calo extention" << std::endl;
-       }
-      unsigned int i(0);
-      float coneSize2 = coneSize*coneSize;
-      for (xAOD::CaloClusterContainer::const_iterator clIt = clusters->begin(); clIt!=clusters->end(); ++clIt, ++i) {
-        float deltaEta = (*clIt)->eta() - particleEta;
-        float deltaPhi = fabs((*clIt)->phi() - particlePhi);
-        if (deltaPhi > TMath::Pi()) deltaPhi = 2.0*TMath::Pi() - deltaPhi;
-        if(deltaEta*deltaEta + deltaPhi*deltaPhi < coneSize2) mask[i] = true;
-       }
-
-      return;
-     }
-    bool GetExtrapEtaPhi(const xAOD::Muon* mu, float& eta, float& phi)
-     {
-      auto cluster = mu->cluster();
-      if(cluster){
-        float etaT = 0, phiT = 0;
-        int nSample = 0;
-        for(unsigned int i=0; i<CaloSampling::Unknown; i++) // dangerous?
-        { 
-          auto s = static_cast<CaloSampling::CaloSample>(i);
-          if(!cluster->hasSampling(s)) continue;
-          etaT += cluster->etaSample(s);
-          phiT += cluster->phiSample(s);
-          nSample++;
-        }
-        if(nSample>0){
-          eta = etaT/nSample;
-          phi = phiT/nSample;
-        }else{
-          return false;
-        }
-      }else{
-        return false;
-      }
-      return true;
-     }
-  };
-}
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IDTrackCaloDepositsDecoratorTool.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IDTrackCaloDepositsDecoratorTool.h
index 43c42d0cf0b14fb292e73b7b3b19218d069a633c..6e30a20d57ec8d518bce6f1f090ced7781b523c3 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IDTrackCaloDepositsDecoratorTool.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IDTrackCaloDepositsDecoratorTool.h
@@ -4,61 +4,54 @@
 #ifndef IDTRACKCALODEPOSITSDECORATORTOOL_H_
 #define IDTRACKCALODEPOSITSDECORATORTOOL_H_
 
-#include "AsgTools/AsgTool.h"
-#include "AsgTools/ToolHandle.h"
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "DerivationFrameworkInterfaces/IAugmentationTool.h"
 #include "DerivationFrameworkMuons/IIDTrackCaloDepositsDecoratorTool.h"
+#include "GaudiKernel/ToolHandle.h"
 #include "ICaloTrkMuIdTools/ITrackDepositInCaloTool.h"
-
-
-class IDTrackCaloDepositsDecoratorTool :
-          public asg::AsgTool,
-          virtual public IIDTrackCaloDepositsDecoratorTool {
-    ASG_TOOL_CLASS(IDTrackCaloDepositsDecoratorTool, IIDTrackCaloDepositsDecoratorTool)
+#include "StoreGate/ReadHandleKey.h"
+#include "StoreGate/WriteDecorHandleKey.h"
+#include "xAODMuon/MuonContainer.h"
+///     Tool to store decorate the IParticle with all energy deposits in the calorimeter needed for post fine tuning of the cut-based
+///     calorimeter tagging working points. The tool adds the following three decorations
+///           Vector containing all energy deposits                               std::vector<float>    CaloDeposits
+///           Vector containing all energy losses                                 std::vector<float>    CaloElosses
+///           Vector declaring the type of the deposit/loss (EMB1,HEC0,etc.)      std::vector<unit_16>  CaloDepType
+///     Deposits can be either saved to the Muon particle itself or to the associated ID track particle
+///     However, in the latter case, the first ID track from the container is always decorated to ensure file integrety
+class IDTrackCaloDepositsDecoratorTool : public AthAlgTool,
+                                         virtual public IIDTrackCaloDepositsDecoratorTool,
+                                         virtual public DerivationFramework::IAugmentationTool {
 public:
-    IDTrackCaloDepositsDecoratorTool(const std::string& myname);
+    IDTrackCaloDepositsDecoratorTool(const std::string& t, const std::string& n, const IInterface* p);
+
     virtual ~IDTrackCaloDepositsDecoratorTool() = default;
-    StatusCode  initialize() override;
-    StatusCode decorate (const xAOD::IParticle* part) const override;
-private:
+    StatusCode initialize() override;
 
+    StatusCode decorate(const xAOD::IParticle* part) const override;
+
+    StatusCode addBranches() const override;
+
+private:
+    StatusCode recompute_and_decorate(const xAOD::IParticle* track_part) const;
 
-    ToolHandle<ITrackDepositInCaloTool>  m_trkDepositInCalo;
+    ToolHandle<ITrackDepositInCaloTool> m_trkDepositInCalo{this, "TrackDepositInCaloTool", "TrackDepositInCaloTool/TrackDepositInCaloTool"};
 
-    StatusCode    recompute_and_decorate (const xAOD::IParticle* part) const;
+    /// Store gate key of the muon container
+    SG::ReadHandleKey<xAOD::MuonContainer> m_muon_key{this, "MuonContainer", "Muons"};
+    /// Key of the associated ID tracks.
+    SG::ReadHandleKey<xAOD::TrackParticleContainer> m_id_trk_key{this, "InDetTrks", "InDetTrackParticles"};
 
-    SG::AuxElement::Decorator< float > m_dec_EMB1_dep;
-    SG::AuxElement::Decorator< float > m_dec_EMB1_eloss;
-    SG::AuxElement::Decorator< float > m_dec_EMB2_dep;
-    SG::AuxElement::Decorator< float > m_dec_EMB2_eloss;
-    SG::AuxElement::Decorator< float > m_dec_EMB3_dep;
-    SG::AuxElement::Decorator< float > m_dec_EMB3_eloss;
-    SG::AuxElement::Decorator< float > m_dec_EME1_dep;
-    SG::AuxElement::Decorator< float > m_dec_EME1_eloss;
-    SG::AuxElement::Decorator< float > m_dec_EME2_dep;
-    SG::AuxElement::Decorator< float > m_dec_EME2_eloss;
-    SG::AuxElement::Decorator< float > m_dec_EME3_dep;
-    SG::AuxElement::Decorator< float > m_dec_EME3_eloss;
-    SG::AuxElement::Decorator< float > m_dec_TileBar0_dep;
-    SG::AuxElement::Decorator< float > m_dec_TileBar0_eloss;
-    SG::AuxElement::Decorator< float > m_dec_TileBar1_dep;
-    SG::AuxElement::Decorator< float > m_dec_TileBar1_eloss;
-    SG::AuxElement::Decorator< float > m_dec_TileBar2_dep;
-    SG::AuxElement::Decorator< float > m_dec_TileBar2_eloss;
-    SG::AuxElement::Decorator< float > m_dec_TileExt0_dep;
-    SG::AuxElement::Decorator< float > m_dec_TileExt0_eloss;
-    SG::AuxElement::Decorator< float > m_dec_TileExt1_dep;
-    SG::AuxElement::Decorator< float > m_dec_TileExt1_eloss;
-    SG::AuxElement::Decorator< float > m_dec_TileExt2_dep;
-    SG::AuxElement::Decorator< float > m_dec_TileExt2_eloss;
-    SG::AuxElement::Decorator< float > m_dec_HEC0_dep;
-    SG::AuxElement::Decorator< float > m_dec_HEC0_eloss;
-    SG::AuxElement::Decorator< float > m_dec_HEC1_dep;
-    SG::AuxElement::Decorator< float > m_dec_HEC1_eloss;
-    SG::AuxElement::Decorator< float > m_dec_HEC2_dep;
-    SG::AuxElement::Decorator< float > m_dec_HEC2_eloss;
-    SG::AuxElement::Decorator< float > m_dec_HEC3_dep;
-    SG::AuxElement::Decorator< float > m_dec_HEC3_eloss;
+    Gaudi::Property<bool> m_decor_muons{this, "DecorateMuons", true, "Switch to attach the decorations to the muon particles."};
+    ///
+    Gaudi::Property<bool> m_use_SAF{this, "IncludeSAF_Muons", false, "If the muons are not decorated directly"};
 
+    SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_deposit_key{
+        this, "Calo_Deposit", "", "Name of the decorator to store all the energy deposits in the calorimeter"};
+    SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_eloss_key{this, "Calo_EnergyLoss", "",
+                                                                  "Name of the decorator to store the energy loss from EMB1."};
+    SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_type_key{this, "Calo_Type", "",
+                                                                 "Name of the decorator to store the energy deposit from EMB2."};
 };
 
-#endif 
+#endif
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IIDTrackCaloDepositsDecoratorTool.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IIDTrackCaloDepositsDecoratorTool.h
index 579cb9060fa96d675ccae19464f9767ea957dafa..33269ec3578395b332873e8e2b50e62760ae2e3c 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IIDTrackCaloDepositsDecoratorTool.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IIDTrackCaloDepositsDecoratorTool.h
@@ -1,26 +1,21 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
-/*
- * IIDTrackCaloDepositsDecoratorTool.h
- *
- *  Created on: Oct 29, 2015
- *      Author: mbellomo
- */
-
 #ifndef IIDTRACKCALODEPOSITSDECORATORTOOL_H_
 #define IIDTRACKCALODEPOSITSDECORATORTOOL_H_
 
-
-#include "AsgTools/IAsgTool.h"
+#include "GaudiKernel/IAlgTool.h"
 #include "xAODBase/IParticle.h"
 
-
-class IIDTrackCaloDepositsDecoratorTool : virtual public asg::IAsgTool {
-  ASG_TOOL_INTERFACE(IIDTrackCaloDepositsDecoratorTool)
+class IIDTrackCaloDepositsDecoratorTool : virtual public IAlgTool {
 public:
-    virtual StatusCode decorate (const xAOD::IParticle* part) const = 0;
-};
+    static const InterfaceID& interfaceID() {
+        static const InterfaceID IID("IIDTrackCaloDepositsDecoratorTool", 1, 0);
+        return IID;
+    }
+    virtual ~IIDTrackCaloDepositsDecoratorTool() = default;
 
+    virtual StatusCode decorate(const xAOD::IParticle* part) const = 0;
+};
 
 #endif /* IIDTRACKISOLATIONDECORATORTOOL_H_ */
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IMuonTPExtrapolationTool.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IMuonTPExtrapolationTool.h
index 278e5cc339183266f68cbb8b5b2ab81852eecf9b..c9955b641b19be8b57db81e207ae90360b2d37fa 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IMuonTPExtrapolationTool.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/IMuonTPExtrapolationTool.h
@@ -4,24 +4,25 @@
 #ifndef IMuonTPExtrapolationTool_H
 #define IMuonTPExtrapolationTool_H
 
-#include "AsgTools/IAsgTool.h"
-#include "xAODTracking/TrackParticle.h"
+#include "GaudiKernel/IAlgTool.h"
 #include "xAODMuon/Muon.h"
-#include "TrkParameters/TrackParameters.h"
 
-class IMuonTPExtrapolationTool : virtual public asg::IAsgTool {
-  ASG_TOOL_INTERFACE(IMuonTPExtrapolationTool)
+class IMuonTPExtrapolationTool : virtual public IAlgTool {
+public:
+    /// compute dR on trigger pivot plane
+    /// This also applies decorations for the eta and phi coordinates in said plane to the tag and the probe track particles
+    /// If we are processing a DAOD in AthAnalysis, it attempts to read the decorations that should be provided by the derivation
+    /// In full athena, it will check for the decoration, and run extrapolation if it is not (yet) in place
+    virtual double dROnTriggerPivotPlane(const xAOD::Muon& tag, const xAOD::IParticle* probe) const = 0;
 
-    public:
-  
-  /// compute dR on trigger pivot plane
-  /// This also applies decorations for the eta and phi coordinates in said plane to the tag and the probe track particles 
-  /// If we are processing a DAOD in AthAnalysis, it attempts to read the decorations that should be provided by the derivation
-  /// In full athena, it will check for the decoration, and run extrapolation if it is not (yet) in place
-  virtual double dROnTriggerPivotPlane(const xAOD::Muon& tag, const xAOD::IParticle* probe) const =0;
+    // this method is intended for use in the DAOD production. It takes only one particle as argument, and handles the decoration.
+    virtual StatusCode decoratePivotPlaneCoords(const xAOD::IParticle* particle) const = 0;
 
-  // this method is intended for use in the DAOD production. It takes only one particle as argument, and handles the decoration. 
-   virtual StatusCode decoratePivotPlaneCoords(const xAOD::IParticle* particle)const=0;
-  };
+    static const InterfaceID& interfaceID() {
+        static const InterfaceID IID("IMuonTPExtrapolationTool", 1, 0);
+        return IID;
+    }
+    virtual ~IMuonTPExtrapolationTool() = default;
+};
 
 #endif
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonIDCovMatrixDecorator.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonIDCovMatrixDecorator.h
deleted file mode 100644
index 3c0abd3c6829956c6bec876bdc6cda62f0db7de3..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonIDCovMatrixDecorator.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-///////////////////////////////////////////////////////////////////
-// MuonIDCovMatrixDecorator.h
-///////////////////////////////////////////////////////////////////
-#ifndef DERIVATIONFRAMEWORK_MuonIDCovMatrixDecorator_H
-#define DERIVATIONFRAMEWORK_MuonIDCovMatrixDecorator_H
-
-#include<string>
-#include<vector>
-
-// Gaudi & Athena basics
-#include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ToolHandle.h"
-#include "DerivationFrameworkInterfaces/IAugmentationTool.h"
-
-namespace DerivationFramework {
-  class MuonIDCovMatrixDecorator : public AthAlgTool, public IAugmentationTool {
-    
-  public: 
-    /** Constructor with parameters */
-    MuonIDCovMatrixDecorator( const std::string& t, const std::string& n, const IInterface* p);
-    
-    /** Destructor */
-    ~MuonIDCovMatrixDecorator();
- 
-    // Athena algtool's Hooks
-    StatusCode  initialize();
-    StatusCode  finalize();
-    
-    virtual StatusCode addBranches() const;
-    
-  private:
-    std::string m_muonSGKey;
-  }; 
-}
-#endif //
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonJetDrTool.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonJetDrTool.h
index 150f2f317f7522ac70cf55644d2e48a519a03ce3..13c5c725a408e11282b8b30b4e69259b6c8baa79 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonJetDrTool.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonJetDrTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -8,30 +8,33 @@
 #ifndef DERIVATIONFRAMEWORK_MuonJetDrTool_H
 #define DERIVATIONFRAMEWORK_MuonJetDrTool_H
 
-//#include<string>
-
 // Gaudi & Athena basics
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ToolHandle.h"
 #include "DerivationFrameworkInterfaces/IAugmentationTool.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "StoreGate/WriteDecorHandleKey.h"
+#include "xAODJet/JetContainer.h"
+#include "xAODMuon/MuonContainer.h"
 
 namespace DerivationFramework {
-  class MuonJetDrTool : public AthAlgTool, public IAugmentationTool {
-    
-  public: 
-    /** Constructor with parameters */
-    MuonJetDrTool( const std::string& t, const std::string& n, const IInterface* p);
-    
-    /** Destructor */
-    ~MuonJetDrTool()=default;
- 
-    virtual StatusCode addBranches() const override;
-    
-  private:
-    std::string m_muonSGKey;
-    std::string m_jetSGKey;
-    float m_jetMinPt;
+    class MuonJetDrTool : public AthAlgTool, public IAugmentationTool {
+    public:
+        /** Constructor with parameters */
+        MuonJetDrTool(const std::string& t, const std::string& n, const IInterface* p);
+
+        /** Destructor */
+        ~MuonJetDrTool() = default;
+
+        virtual StatusCode addBranches() const override;
+        virtual StatusCode initialize() override;
+
+    private:
+        SG::ReadHandleKey<xAOD::MuonContainer> m_muonSGKey{this, "ContainerKey", "Muons"};
+        SG::ReadHandleKey<xAOD::JetContainer> m_jetSGKey{this, "JetContainerKey", "AntiKt4EMTopoJets"};
+        SG::WriteDecorHandleKey<xAOD::MuonContainer> m_jetDR_SGKey{this, "dRDecoration", "DFCommonJetDr"};
 
-  }; 
-}
-#endif //
+        Gaudi::Property<float> m_jetMinPt{this, "JetMinPt", 20.e3, "Minimal pt cut of the jets to be considered"};
+    };
+}  // namespace DerivationFramework
+#endif  //
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTPExtrapolationTool.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTPExtrapolationTool.h
index fd8e43174d916827f6e28361a56ff7d6a2c56bc8..3424f745478189f3bd71c38862e55043d128611c 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTPExtrapolationTool.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTPExtrapolationTool.h
@@ -4,61 +4,81 @@
 #ifndef MuonTPExtrapolationTool_H
 #define MuonTPExtrapolationTool_H
 
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "DerivationFrameworkInterfaces/IAugmentationTool.h"
 #include "DerivationFrameworkMuons/IMuonTPExtrapolationTool.h"
-
-#include "AsgTools/AsgTool.h"
-#include "AsgTools/ToolHandle.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "StoreGate/WriteDecorHandleKey.h"
 #include "TrkExInterfaces/IExtrapolator.h"
-#include <xAODTracking/TrackParticle.h>
+#include "xAODMuon/MuonContainer.h"
+
+class MuonTPExtrapolationTool : public AthAlgTool,
+                                virtual public IMuonTPExtrapolationTool,
+                                virtual public DerivationFramework::IAugmentationTool {
+public:
+    MuonTPExtrapolationTool(const std::string& t, const std::string& n, const IInterface* p);
+    virtual ~MuonTPExtrapolationTool() = default;
+
+    virtual StatusCode initialize() override;
+
+    /// compute dR on trigger pivot plane
+    /// see interface class for full description
+    double dROnTriggerPivotPlane(const xAOD::Muon& tag, const xAOD::IParticle* probe) const override;
 
-class MuonTPExtrapolationTool: public asg::AsgTool, virtual public IMuonTPExtrapolationTool {
-        ASG_TOOL_CLASS(MuonTPExtrapolationTool, IMuonTPExtrapolationTool)
+    // this method is intended for use in the DAOD production. It takes only one particle as argument, and handles the decoration.
+    StatusCode decoratePivotPlaneCoords(const xAOD::IParticle* particle) const override;
 
-        public:
-        MuonTPExtrapolationTool(const std::string& myname);
-        virtual ~MuonTPExtrapolationTool()=default;
+    StatusCode addBranches() const override;
 
-        virtual StatusCode initialize() override;
+private:
+    /// run the extrapolation - only available in full athena
+    std::unique_ptr<const Trk::TrackParameters> extrapolateToTriggerPivotPlane(const xAOD::TrackParticle& track) const;
 
-        /// compute dR on trigger pivot plane
-        /// see interface class for full description
-        double dROnTriggerPivotPlane(const xAOD::Muon& tag, const xAOD::IParticle* probe) const override;
+    // Utility method to handle extrapolation and decoration for one TrackParticle.
+    // In AthAnalysis, it attempts to read the decoration that should be present in the DAODs we use (MUON1/2).
+    // In full athena, it looks for the decoration, and, if it is missing, runs track extrapolation, decorating the result
+    // to the particle to avoid repeating the process unnecessarily.
+    // Returns success (true) or failure (false) of the procedure, fills eta and phi coordinates via reference
+    // If the extrapolation fails or the decoration is missing in AthAnalysis, it will *not* change eta and phi
+    // So you can set them to defaults before calling this guy, and they will be preserved in case of failure.
+    bool extrapolateAndDecorateTrackParticle(const xAOD::IParticle* particle, float& eta, float& phi) const;
 
-        // this method is intended for use in the DAOD production. It takes only one particle as argument, and handles the decoration.
-         StatusCode decoratePivotPlaneCoords(const xAOD::IParticle* particle)const override;
+    /// Checks whether the extrapolation has been applied on the probe or nt
+    bool is_extrapolated(const xAOD::IParticle* probe) const;
 
-    private:
-        /// run the extrapolation - only available in full athena
-        std::unique_ptr<const Trk::TrackParameters> extrapolateToTriggerPivotPlane(const xAOD::TrackParticle& track) const;
+    // utility method: Obtains the track particle which we want to extrapolate into the MS.
+    // Works for all kinds of probes.
+    const xAOD::TrackParticle* getPreferredTrackParticle(const xAOD::IParticle* probe) const;
 
-        // Utility method to handle extrapolation and decoration for one TrackParticle.
-        // In AthAnalysis, it attempts to read the decoration that should be present in the DAODs we use (MUON1/2).
-        // In full athena, it looks for the decoration, and, if it is missing, runs track extrapolation, decorating the result
-        // to the particle to avoid repeating the process unnecessarily.
-        // Returns success (true) or failure (false) of the procedure, fills eta and phi coordinates via reference
-        // If the extrapolation fails or the decoration is missing in AthAnalysis, it will *not* change eta and phi
-        // So you can set them to defaults before calling this guy, and they will be preserved in case of failure.
-        bool extrapolateAndDecorateTrackParticle(const xAOD::TrackParticle* particle, float & eta, float & phi) const ;
-   
-        ToolHandle<Trk::IExtrapolator> m_extrapolator;
-        /// Checks whether the extrapolation has been applied on the probe or nt
-        bool is_extrapolated(const xAOD::IParticle* probe) const;
+    // these define the surfaces that we extrapolate to.
+    // We approximate the pivot plane in the form of a cylinder surface and two disks
+    ToolHandle<Trk::IExtrapolator> m_extrapolator{this, "Extrapolator", "Trk::Extrapolator/AtlasExtrapolator"};
 
+    Gaudi::Property<float> m_endcapPivotPlaneZ{this, "EndcapPivotPlaneZ", 15525., "z position of pivot plane in endcap region"};
+    Gaudi::Property<float> m_endcapPivotPlaneMinimumRadius{this, "EndcapPivotPlaneMinimumRadius", 0.,
+                                                           "minimum radius of pivot plane in endcap region"};
+    Gaudi::Property<float> m_endcapPivotPlaneMaximumRadius{this, "EndcapPivotPlaneMaximumRadius", 11977.,
+                                                           "maximum radius of pivot plane in endcap region"};
+    Gaudi::Property<float> m_barrelPivotPlaneRadius{this, "BarrelPivotPlaneRadius", 8000., "adius of pivot plane in barrel region"};
+    Gaudi::Property<float> m_barrelPivotPlaneHalfLength{this, "BarrelPivotPlaneHalfLength", 9700,
+                                                        "half length of pivot plane in barrel region"};
 
-        // utility method: Obtains the track particle which we want to extrapolate into the MS.
-        // Works for all kinds of probes.
-        const xAOD::TrackParticle* getPreferredTrackParticle(const xAOD::IParticle* probe) const;
+    Gaudi::Property<bool> m_run_extrapolation{this, "Extrapolate", true,
+                                              "Switch whether the particles shall be extrapolated to the pivot planes"};
 
-        // these define the surfaces that we extrapolate to.
-        // We approximate the pivot plane in the form of a cylinder surface and two disks
-        float m_endcapPivotPlaneZ;
-        float m_endcapPivotPlaneMinimumRadius;
-        float m_endcapPivotPlaneMaximumRadius;
-        float m_barrelPivotPlaneRadius;
-        float m_barrelPivotPlaneHalfLength;
+    SG::ReadHandleKey<xAOD::MuonContainer> m_muon_key{this, "MuonKey", "Muons"};
+    /// Key of the associated ID tracks.
+    SG::ReadHandleKey<xAOD::TrackParticleContainer> m_id_trk_key{this, "InDetTrks", "InDetTrackParticles"};
 
-        bool m_is_on_DAOD;
+    SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ext_eta_key{this, "Key_ExtrTP_Eta", ""};
+    SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ext_phi_key{this, "Key_ExtrTP_Phi", ""};
+    SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ext_stat_key{this, "Key_Extr_Status", ""};
 
+    /// Property to directly cache the decorations to the muons
+    Gaudi::Property<bool> m_decor_muons{this, "DecorateMuons", true, "Switch to attach the decorations to the muon particles."};
+    /// Use SAF muons
+    Gaudi::Property<bool> m_use_SAF{this, "IncludeSAF_Muons", false, "If the muons are not decorated directly"};
 };
 
 #endif
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTPJpsiVertexFittingAlg.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTPJpsiVertexFittingAlg.h
index c0e334b5dce195df087e28511c181f4d746fbefa..fa41ab723b52c4f1752d558f5c77447d003fc46a 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTPJpsiVertexFittingAlg.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTPJpsiVertexFittingAlg.h
@@ -5,28 +5,24 @@
 #define MuonTPJpsiVertexFittingAlg__H
 
 #include "AthenaBaseComps/AthAlgorithm.h"
-#include "GaudiKernel/ToolHandle.h"
 #include "DerivationFrameworkInterfaces/IAugmentationTool.h"
-
+#include "GaudiKernel/ToolHandle.h"
 
 // algorithm that calls the jpsi finder and applies BPhys decorations to the vertices
-// essentially takes the role of the derivation kernel when running in AOD analysis mode 
-class MuonTPJpsiVertexFittingAlg : public AthAlgorithm { 
-
+// essentially takes the role of the derivation kernel when running in AOD analysis mode
+class MuonTPJpsiVertexFittingAlg : public AthAlgorithm {
 public:
-  MuonTPJpsiVertexFittingAlg(const std::string& name, ISvcLocator* pSvcLocator);
+    MuonTPJpsiVertexFittingAlg(const std::string& name, ISvcLocator* pSvcLocator);
 
-  /// Destructor: 
-  ~MuonTPJpsiVertexFittingAlg()=default; 
+    /// Destructor:
+    ~MuonTPJpsiVertexFittingAlg() = default;
 
-  /// Athena algorithm's Hooks
-  StatusCode  initialize();
-  StatusCode  execute();
- 
-private: 
-    ToolHandleArray <DerivationFramework::IAugmentationTool> m_augmentation_tools;
+    /// Athena algorithm's Hooks
+    StatusCode initialize();
+    StatusCode execute();
 
+private:
+    ToolHandleArray<DerivationFramework::IAugmentationTool> m_augmentation_tools;
 };
 
-
-#endif //MuonTPJpsiVertexFittingAlg__H
+#endif  // MuonTPJpsiVertexFittingAlg__H
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTruthClassifierFallback.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTruthClassifierFallback.h
index a40775065f36bfe5bc8a6a7878f57cb5898cf4bf..3e5cee656ef8c7b855b34bb3b28db5fd0f161a64 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTruthClassifierFallback.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTruthClassifierFallback.h
@@ -8,41 +8,52 @@
 #ifndef DERIVATIONFRAMEWORK_MuonTruthClassifierFallback_H
 #define DERIVATIONFRAMEWORK_MuonTruthClassifierFallback_H
 
-#include<string>
-#include<vector>
+#include <string>
+#include <vector>
 
 // Gaudi & Athena basics
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ToolHandle.h"
 #include "DerivationFrameworkInterfaces/IAugmentationTool.h"
-
-class IMCTruthClassifier;
+#include "GaudiKernel/ToolHandle.h"
+#include "MCTruthClassifier/IMCTruthClassifier.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "StoreGate/WriteDecorHandleKey.h"
+#include "xAODBase/IParticleContainer.h"
+#include "xAODTruth/TruthEventContainer.h"
+#include "xAODTruth/TruthPileupEventContainer.h"
 
 namespace DerivationFramework {
-  class MuonTruthClassifierFallback : public AthAlgTool, public IAugmentationTool {
-    
-  public: 
-    /** Constructor with parameters */
-    MuonTruthClassifierFallback( const std::string& t, const std::string& n, const IInterface* p);
-    
-    /** Destructor */
-    ~MuonTruthClassifierFallback();
- 
-    // Athena algtool's Hooks
-    StatusCode  initialize();
-    StatusCode  finalize();
-    
-    virtual StatusCode addBranches() const;
-    
-  private:
-    std::string m_partSGKey;
-    std::string m_truthSGKey;
-    std::string m_truthPileupSGKey;
-    std::string m_truthMuonSGKey;
-    float m_minPt;
-    ToolHandle<IMCTruthClassifier>   m_mcTruthClassifier;
-
-
-  }; 
-}
-#endif //
+    class MuonTruthClassifierFallback : public AthAlgTool, public IAugmentationTool {
+    public:
+        /** Constructor with parameters */
+        MuonTruthClassifierFallback(const std::string& t, const std::string& n, const IInterface* p);
+
+        /** Destructor */
+        ~MuonTruthClassifierFallback() = default;
+
+        // Athena algtool's Hooks
+        StatusCode initialize() override;
+
+        virtual StatusCode addBranches() const override;
+
+    private:
+        SG::ReadHandleKey<xAOD::IParticleContainer> m_containerKey{this, "ContainerKey", "", "Key of the container to be decorated"};
+        SG::ReadHandleKey<xAOD::TruthEventContainer> m_truthSGKey{this, "TruthEvents", "Key of the truth event container"};
+        SG::ReadHandleKey<xAOD::TruthPileupEventContainer> m_truthPileupSGKey{this, "TruthPileupContainerKey", "TruthPileupEvents",
+                                                                              "Key of the pile-up event container"};
+        SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthMuonSGKey{this, "TruthMuonContainerKey", "MuonTruthParticles", ""};
+
+        /// Key properties are overwirrten during initialize
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_Truth_dR_Key{this, "dRDecoration", ""};
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_Truth_type_Key{this, "typeDecoration", ""};
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_Truth_origin_Key{this, "originDecoration", ""};
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_Truth_PU_dR_Key{this, "dRDecorationPU", ""};
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_Truth_PU_type_Key{this, "typeDecorationPU", ""};
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_Truth_PU_origin_Key{this, "originDecorationPU", ""};
+
+        Gaudi::Property<float> m_minPt{this, "MinPt", 2500};
+
+        ToolHandle<IMCTruthClassifier> m_mcTruthClassifier{this, "MCTruthClassifierTool", "", "Handle of the MC truth classifier"};
+    };
+}  // namespace DerivationFramework
+#endif  //
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTruthIsolationTool.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTruthIsolationTool.h
index 14f8dce96be9d3951a155f6d00c8e0bc069aeaf1..ea517186f62c12fabb954194e8126b2b9fd71b9a 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTruthIsolationTool.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/MuonTruthIsolationTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -8,36 +8,44 @@
 #ifndef DERIVATIONFRAMEWORK_MuonTruthIsolationTool_H
 #define DERIVATIONFRAMEWORK_MuonTruthIsolationTool_H
 
-#include<string>
-#include<vector>
-
 // Gaudi & Athena basics
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ToolHandle.h"
 #include "DerivationFrameworkInterfaces/IAugmentationTool.h"
-
-class IMCTruthClassifier;
+#include "GaudiKernel/ToolHandle.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "StoreGate/WriteDecorHandleKey.h"
+#include "xAODBase/IParticleContainer.h"
+#include "xAODTruth/TruthEventContainer.h"
 
 namespace DerivationFramework {
-  class MuonTruthIsolationTool : public AthAlgTool, public IAugmentationTool {
-    
-  public: 
-    /** Constructor with parameters */
-    MuonTruthIsolationTool( const std::string& t, const std::string& n, const IInterface* p);
-    
-    /** Destructor */
-    ~MuonTruthIsolationTool();
- 
-    // Athena algtool's Hooks
-    StatusCode  initialize();
-    StatusCode  finalize();
-    
-    virtual StatusCode addBranches() const;
-    
-  private:
-    std::string m_partSGKey;
-    std::string m_truthSGKey;
+    class MuonTruthIsolationTool : public AthAlgTool, public IAugmentationTool {
+    public:
+        /** Constructor with parameters */
+        MuonTruthIsolationTool(const std::string& t, const std::string& n, const IInterface* p);
+
+        /** Destructor */
+        virtual ~MuonTruthIsolationTool() = default;
+
+        // Athena algtool's Hooks
+        StatusCode initialize() override;
+        virtual StatusCode addBranches() const override;
+
+    private:
+        SG::ReadHandleKey<xAOD::IParticleContainer> m_partSGKey{this, "ContainerKey", "",
+                                                                "Key of the container to run the truth isolation on "};
+        SG::ReadHandleKey<xAOD::TruthEventContainer> m_truthSGKey{this, "TruthContainerKey", "TruthEvents"};
 
-  }; 
-}
-#endif //
+        /// Decor handle keys. Never set them via the JO as they're overwritten
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_topoetcone20_Key{this, "Key_TopoEtCone20", ""};
+        /// PtCone20
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ptcone20_pt500_Key{this, "Key_PtCone20_pt500", ""};
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ptcone20_Key{this, "Key_PtCone20", ""};
+        /// PtVarCone20
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ptvarcone20_pt500_Key{this, "Key_PtVarCone20_pt500", ""};
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ptvarcone20_Key{this, "Key_PtVarCone20", ""};
+        /// Pt varcone 30
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ptvarcone30_pt500_Key{this, "Key_PtVarCone30_pt500", ""};
+        SG::WriteDecorHandleKey<xAOD::IParticleContainer> m_ptvarcone30_Key{this, "Key_PtVarCone30", ""};
+    };
+}  // namespace DerivationFramework
+#endif  //
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/VertexDecoratorAlg.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/VertexDecoratorAlg.h
index ff909ea363ec25d16532aebeb378cbc90861f973..1dfdcc1d17d5046efb9a9b14eb8ad5cbc3177762 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/VertexDecoratorAlg.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/VertexDecoratorAlg.h
@@ -4,38 +4,35 @@
 #ifndef MuonTPVertexDecoratorAlg__H
 #define MuonTPVertexDecoratorAlg__H
 
+#include <AthContainers/AuxElement.h>
 #include <AthenaBaseComps/AthAlgorithm.h>
 #include <GaudiKernel/ToolHandle.h>
-#include <AthContainers/AuxElement.h>
 #include <InDetTrackSelectionTool/IInDetTrackSelectionTool.h>
-#include <memory>
 
-/// Algorithm to decorate the number of tracks 
-/// and the sum of their pt to the vertex     
-class VertexDecoratorAlg : public AthAlgorithm { 
+#include <memory>
 
+/// Algorithm to decorate the number of tracks
+/// and the sum of their pt to the vertex
+class VertexDecoratorAlg : public AthAlgorithm {
 public:
-  VertexDecoratorAlg(const std::string& name, ISvcLocator* pSvcLocator);
+    VertexDecoratorAlg(const std::string& name, ISvcLocator* pSvcLocator);
 
-  /// Destructor: 
-  ~VertexDecoratorAlg()=default; 
+    /// Destructor:
+    ~VertexDecoratorAlg() = default;
 
-  /// Athena algorithm's Hooks
-  StatusCode  initialize() override;
-  StatusCode  execute()override;
- 
+    /// Athena algorithm's Hooks
+    StatusCode initialize() override;
+    StatusCode execute() override;
 
-private: 
+private:
     std::string m_VertexContainer;
     std::string m_decorationPrefix;
-    
+
     ToolHandle<InDet::IInDetTrackSelectionTool> m_trkselTool;
     bool m_filterTracks;
-    
-    std::unique_ptr< SG::AuxElement::Decorator<float> > m_dec_sum_pt;
-    std::unique_ptr< SG::AuxElement::Decorator<unsigned int > > m_dec_n_trks;
-    
-};
 
+    std::unique_ptr<SG::AuxElement::Decorator<float> > m_dec_sum_pt;
+    std::unique_ptr<SG::AuxElement::Decorator<unsigned int> > m_dec_n_trks;
+};
 
-#endif //MuonTPJpsiVertexFittingAlg__H
+#endif  // MuonTPJpsiVertexFittingAlg__H
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/dimuonTaggingTool.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/dimuonTaggingTool.h
index 9eb36bcd397acc727644c6bb6da321c73c8d54e6..8318e76a1c839fbeeff711d329970d435bb27ec8 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/dimuonTaggingTool.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/dimuonTaggingTool.h
@@ -1,92 +1,101 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-///////////////////////////////////////////////////////////////////
-// dimuonTaggingTool.h, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-
 #ifndef DERIVATIONFRAMEWORK_DIMUONTAGGINGTOOL_H
 #define DERIVATIONFRAMEWORK_DIMUONTAGGINGTOOL_H
 
-#include<string>
-#include<vector>
-#include<map>
+#include <map>
+#include <string>
+#include <vector>
 
 // Gaudi & Athena basics
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "TrigMuonMatching/ITrigMuonMatching.h"
-#include "TrigDecisionTool/TrigDecisionTool.h"
 #include "DerivationFrameworkInterfaces/IAugmentationTool.h"
+#include "TrigDecisionTool/TrigDecisionTool.h"
+#include "TrigMuonMatching/ITrigMuonMatching.h"
 
 // xAOD header files
+#include "StoreGate/ReadHandleKey.h"
 #include "xAODMuon/MuonContainer.h"
-
-class IMuonTPExtrapolationTool;
-class IIDTrackCaloDepositsDecoratorTool;
+#include "xAODEventInfo/EventInfo.h"
 
 namespace DerivationFramework {
-  /** @class dimuonTaggingTool
-      @author Dongliang.Zhang@cern.ch
-     */
-  class dimuonTaggingTool : public AthAlgTool, public IAugmentationTool {
-    
-  public: 
-    /** Constructor with parameters */
-    dimuonTaggingTool( const std::string& t, const std::string& n, const IInterface* p);
-    
-    /** Destructor */
-    ~dimuonTaggingTool();
-    
-    // Athena algtool's Hooks
-    StatusCode  initialize();
-    StatusCode  finalize();
-    
-    virtual StatusCode addBranches() const;
-    
-  private:
-    bool passMuonCuts(const xAOD::Muon *mu, const float ptMin, const float absEtaMax, const std::vector< int >& types, const std::vector< std::string >& trigs, const std::map< int, double > muIsoCuts) const;
-    bool passMuonCuts(const xAOD::Muon *mu, const float ptMin, const float absEtaMax, const std::vector< int >& types, const std::vector< std::string >& trigs) const;
-    bool checkTrigMatch(const xAOD::Muon *mu, const std::vector< std::string >& Trigs) const;
-    bool muonPairCheck(const xAOD::Muon *mu1, float charge2, const TLorentzVector& mu2) const;
-    bool passKinematicCuts(const xAOD::IParticle *mu, float ptMin, float absEtaMax) const; 
-    StatusCode fillInfo(int* keep, std::vector<int>& trackMask) const;
-    void maskNearbyIDtracks(const xAOD::IParticle *mu, std::vector< int >& trackMask, const xAOD::TrackParticleContainer* tracks) const;
-
-    ToolHandle< IMuonTPExtrapolationTool > m_tpExpTool;
-    ToolHandle< IIDTrackCaloDepositsDecoratorTool > m_caloDepoTool;
-    ToolHandle< Trig::ITrigMuonMatching > m_matchTool;
-    float m_triggerMatchDeltaR;
-    ToolHandle< Trig::TrigDecisionTool > m_trigDecisionTool;
-    std::vector< std::string > m_orTrigs;
-    std::vector< std::string > m_andTrigs;
-
-    std::string m_muonSGKey;
-    float m_mu1PtMin;
-    float m_mu1AbsEtaMax;
-    std::vector< int > m_mu1Types;
-    std::vector< std::string > m_mu1Trigs;
-    std::map< int, double > m_mu1IsoCuts;
-    float m_mu2PtMin;
-    float m_mu2AbsEtaMax;
-    std::vector< int > m_mu2Types;
-    std::vector< std::string > m_mu2Trigs;
-    std::map< int, double > m_mu2IsoCuts;
-
-    std::string m_trackSGKey;
-    bool m_useTrackProbe;
-    std::string m_br_prefix;
-//     SG::AuxElement::Decorator< int >* deco_trkFlag;
-
-    bool m_requireOS;
-    float m_dPhiMin;
-    float m_invariantMassLow;
-    float m_invariantMassHigh;
-    float m_invariantMassLow2;
-    float m_invariantMassHigh2;
-
-    float m_thinningConeSize;
-    float m_thinningConeSize2;
-  }; 
-}
-#endif // DERIVATIONFRAMEWORK_SKIMMINGTOOLEXAMPLE_H
+
+    class dimuonTaggingTool : public AthAlgTool, public IAugmentationTool {
+    public:
+        /** Constructor with parameters */
+        dimuonTaggingTool(const std::string& t, const std::string& n, const IInterface* p);
+
+        /** Destructor */
+        virtual ~dimuonTaggingTool();
+        // Athena algtool's Hooks
+        StatusCode initialize() override;
+
+        virtual StatusCode addBranches() const override;
+
+    private:
+        /// Returns true of the pointer is valid and also whether the pt and absEta are above and below the thresholds, respectively
+        bool passKinematicCuts(const xAOD::IParticle* mu, float ptMin, float absEtaMax) const;
+
+        /// The muon has to satisfy the kinematic requirements to be of a certain type (I.e. combined) and matched to at least on trigger
+        bool passMuonCuts(const xAOD::Muon* mu, const float ptMin, const float absEtaMax, const std::vector<int>& types,
+                          const std::vector<std::string>& trigs) const;
+
+        /// The muon has to satisfy the pevious muon cuts + cuts on each isolation variable.
+        bool passMuonCuts(const xAOD::Muon* mu, const float ptMin, const float absEtaMax, const std::vector<int>& types,
+                          const std::vector<std::string>& trigs, const std::map<int, double> muIsoCuts) const;
+
+        bool checkTrigMatch(const xAOD::Muon* mu, const std::vector<std::string>& Trigs) const;
+        StatusCode fillInfo(int& keep, std::vector<int>& trackMask) const;
+
+        template <class probe_type> bool muonPairCheck(const xAOD::Muon* mu1, const probe_type* mu2) const;
+
+        void maskNearbyIDtracks(const xAOD::IParticle* mu, std::vector<int>& trackMask, const xAOD::TrackParticleContainer* tracks) const;
+
+        ToolHandle<Trig::ITrigDecisionTool> m_trigDecisionTool{this, "TrigDecisionTool", "Trig::TrigDecisionTool/TrigDecisionTool",
+                                                               "Tool to access the trigger decision"};
+        Gaudi::Property<std::vector<std::string>> m_orTrigs{this, "OrTrigs", {}};
+        Gaudi::Property<std::vector<std::string>> m_andTrigs{this, "AndTrigs", {}};
+
+        /// Do we need to change this to the ordinary matching tool?
+        ToolHandle<Trig::ITrigMuonMatching> m_matchTool{this, "TrigMatchTool", "Trig::TrigMuonMatching/TrigMuonMatching"};
+        Gaudi::Property<float> m_triggerMatchDeltaR{this, "TriggerMatchDeltaR", 0.1};
+
+        SG::ReadHandleKey<xAOD::EventInfo> m_evtKey{this, "EventInfoKey", "EventInfo", ""};
+
+        SG::ReadHandleKey<xAOD::MuonContainer> m_muonSGKey{this, "MuonContainerKey", "Muons"};
+
+        SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trackSGKey{this, "TrackContainerKey", "InDetTrackParticles"};
+
+        Gaudi::Property<float> m_mu1PtMin{this, "Mu1PtMin", -1};
+        Gaudi::Property<float> m_mu1AbsEtaMax{this, "Mu1AbsEtaMax", 10};
+        Gaudi::Property<std::vector<std::string>> m_mu1Trigs{this, "Mu1Trigs", {}};
+        Gaudi::Property<std::vector<int>> m_mu1Types{this, "Mu1Types", {}};
+        Gaudi::Property<std::map<int, double>> m_mu1IsoCuts{this, "Mu1IsoCuts",{}};
+
+        Gaudi::Property<float> m_mu2PtMin{this, "Mu2PtMin", -1};
+        Gaudi::Property<float> m_mu2AbsEtaMax{this, "Mu2AbsEtaMax", 10};
+
+        Gaudi::Property<std::vector<std::string>> m_mu2Trigs{this, "Mu2Trigs", {}};
+        Gaudi::Property<std::vector<int>> m_mu2Types{this, "Mu2Types", {}};
+        Gaudi::Property<std::map<int, double>> m_mu2IsoCuts{this, "Mu2IsoCuts",{}};
+
+        Gaudi::Property<bool> m_useTrackProbe{this, "UseTrackProbe", true};
+
+        Gaudi::Property<std::string> m_br_prefix{this, "BranchPrefix", ""};
+
+        Gaudi::Property<bool> m_requireOS{this, "OppositeCharge", true};
+        Gaudi::Property<float> m_dPhiMin{this, "PairDPhiMin", -1};
+
+        Gaudi::Property<float> m_invariantMassLow{this, "InvariantMassLow", 2.0 * Gaudi::Units::GeV};
+        Gaudi::Property<float> m_invariantMassHigh{this, "InvariantMassHigh", 4.3 * Gaudi::Units::GeV};
+
+        Gaudi::Property<float> m_thinningConeSize{this, "IDTrackThinningConeSize", 0.4};
+
+        float m_invariantMassLow2{0};
+        float m_invariantMassHigh2{0};
+        float m_thinningConeSize2{0};
+    };
+}  // namespace DerivationFramework
+#endif  // DERIVATIONFRAMEWORK_SKIMMINGTOOLEXAMPLE_H
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/isolationDecorator.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/isolationDecorator.h
index 42c01665405461dcb71ec6868bcbc648d5ba0d0f..868f45e75923d3b7a403fe9a53a0b1c7f2780f14 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/isolationDecorator.h
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/isolationDecorator.h
@@ -10,50 +10,46 @@
 
 // Gaudi & Athena basics
 #include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ToolHandle.h"
 #include "DerivationFrameworkInterfaces/IAugmentationTool.h"
-#include "RecoToolInterfaces/ITrackIsolationTool.h"
-#include "RecoToolInterfaces/ICaloTopoClusterIsolationTool.h"
 #include "ExpressionEvaluation/ExpressionParserUser.h"
+#include "GaudiKernel/ToolHandle.h"
+#include "RecoToolInterfaces/ICaloTopoClusterIsolationTool.h"
+#include "RecoToolInterfaces/ITrackIsolationTool.h"
 
 namespace DerivationFramework {
-  class isolationDecorator : public ExpressionParserUser<AthAlgTool>, public IAugmentationTool {
-    
-  public: 
-    /** Constructor with parameters */
-    isolationDecorator( const std::string& t, const std::string& n, const IInterface* p);
-    
-    /** Destructor */
-    virtual ~isolationDecorator()=default;
- 
-    
-    StatusCode  initialize() override;   
-    
-    StatusCode addBranches() const override;
-    
-  private:
-    StatusCode decorate(const xAOD::IParticle* part, const int iso_type, const float val) const;
-    
-    std::string m_containerName;
-    std::string m_selectionString;
-    std::string m_prefix;
-    std::string m_selFlag;
-    int m_selFlagValue;
-  
-    /// Athena configured tools
-    ToolHandle<xAOD::ITrackIsolationTool> m_trackIsolationTool;
-    ToolHandle<xAOD::ICaloTopoClusterIsolationTool> m_caloIsolationTool;
-
-    std::vector<xAOD::Iso::IsolationType> m_ptconeTypes;
-    std::vector< int > m_ptcones;
-    xAOD::TrackCorrection m_trkCorrList; 
-    std::vector<xAOD::Iso::IsolationType> m_topoetconeTypes;
-    std::vector<int> m_topoetcones;
-    xAOD::CaloCorrection m_caloCorrList;
-
-    std::map<int, SG::AuxElement::Decorator< float > > m_decorators;
-    
-    
-  }; 
-}
-#endif //
+    class isolationDecorator : public ExpressionParserUser<AthAlgTool>, public IAugmentationTool {
+    public:
+        /** Constructor with parameters */
+        isolationDecorator(const std::string& t, const std::string& n, const IInterface* p);
+
+        /** Destructor */
+        virtual ~isolationDecorator() = default;
+
+        StatusCode initialize() override;
+
+        StatusCode addBranches() const override;
+
+    private:
+        StatusCode decorate(const xAOD::IParticle* part, const int iso_type, const float val) const;
+
+        std::string m_containerName;
+        std::string m_selectionString;
+        std::string m_prefix;
+        std::string m_selFlag;
+        int m_selFlagValue;
+
+        /// Athena configured tools
+        ToolHandle<xAOD::ITrackIsolationTool> m_trackIsolationTool;
+        ToolHandle<xAOD::ICaloTopoClusterIsolationTool> m_caloIsolationTool;
+
+        std::vector<xAOD::Iso::IsolationType> m_ptconeTypes;
+        std::vector<int> m_ptcones;
+        xAOD::TrackCorrection m_trkCorrList;
+        std::vector<xAOD::Iso::IsolationType> m_topoetconeTypes;
+        std::vector<int> m_topoetcones;
+        xAOD::CaloCorrection m_caloCorrList;
+
+        std::map<int, SG::AuxElement::Decorator<float> > m_decorators;
+    };
+}  // namespace DerivationFramework
+#endif  //
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/mcpDecorator.h b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/mcpDecorator.h
deleted file mode 100644
index f57ff54c95be509659a07687562379cdd17713af..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/DerivationFrameworkMuons/mcpDecorator.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-*/
-#ifndef DERIVATIONFRAMEWORKMUONS_MCPDECORATOR_H
-#define DERIVATIONFRAMEWORKMUONS_MCPDECORATOR_H 1
-
-#include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ToolHandle.h" //included under assumption you'll want to use some tools! Remove if you don't!
-#include "DerivationFrameworkInterfaces/IAugmentationTool.h"
-#include <string>
-
-#include "ExpressionEvaluation/ExpressionParserUser.h"
-
-namespace DerivationFramework {
-  /** @class isolationDecorator
-      @author Dongliang.Zhang@cern.ch
-     */
-
-  class mcpDecorator: public ExpressionParserUser<::AthAlgTool>, public IAugmentationTool {
-   public: 
-    /** Constructor with parameters */
-    mcpDecorator( const std::string& t, const std::string& n, const IInterface* p);
-
-    /** Destructor */
-    virtual ~mcpDecorator()= default; 
-
-    
-    virtual StatusCode  initialize() override;   
-    virtual StatusCode addBranches() const override;
-
-   private: 
-    std::string m_containerName;
-    std::string m_selectionString;
-    std::string m_prefix;
-  };
-}
-
-#endif //> !DERIVATIONFRAMEWORKMUONS_MCPDECORATOR_H
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/IDTrackCaloDepositsDecoratorTool.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/IDTrackCaloDepositsDecoratorTool.cxx
index 9b328ab00627085a9e628e0591d82f48649366e9..3a8e654b8dc0c3ccb84b4cc4e8c510b7a3408e9c 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/IDTrackCaloDepositsDecoratorTool.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/IDTrackCaloDepositsDecoratorTool.cxx
@@ -3,169 +3,129 @@
 */
 
 #include "DerivationFrameworkMuons/IDTrackCaloDepositsDecoratorTool.h"
-#include "muonEvent/DepositInCalo.h"
-#include "CaloEvent/CaloCellContainer.h"
-
 
+#include "CaloEvent/CaloCellContainer.h"
+#include "muonEvent/DepositInCalo.h"
 #include "xAODMuon/Muon.h"
 #include "xAODTracking/TrackParticle.h"
 
-IDTrackCaloDepositsDecoratorTool::IDTrackCaloDepositsDecoratorTool(const std::string& myname) :
-		AsgTool(myname),
-		m_trkDepositInCalo("TrackDepositInCaloTool/TrackDepositInCaloTool"),
-		m_dec_EMB1_dep("EMB1_dep"),
-		m_dec_EMB1_eloss("EMB1_eloss"),
-		m_dec_EMB2_dep("EMB2_dep"),
-		m_dec_EMB2_eloss("EMB2_eloss"),
-		m_dec_EMB3_dep("EMB3_dep"),
-		m_dec_EMB3_eloss("EMB3_eloss"),
-		m_dec_EME1_dep("EME1_dep"),
-		m_dec_EME1_eloss("EME1_eloss"),
-		m_dec_EME2_dep("EME2_dep"),
-		m_dec_EME2_eloss("EME2_eloss"),
-		m_dec_EME3_dep("EME3_dep"),
-		m_dec_EME3_eloss("EME3_eloss"),
-		m_dec_TileBar0_dep("TileBar0_dep"),
-		m_dec_TileBar0_eloss("TileBar0_eloss"),
-		m_dec_TileBar1_dep("TileBar1_dep"),
-		m_dec_TileBar1_eloss("TileBar1_eloss"),
-		m_dec_TileBar2_dep("TileBar2_dep"),
-		m_dec_TileBar2_eloss("TileBar2_eloss"),
-		m_dec_TileExt0_dep("TileExt0_dep"),
-		m_dec_TileExt0_eloss("TileExt0_eloss"),
-		m_dec_TileExt1_dep("TileExt1_dep"),
-		m_dec_TileExt1_eloss("TileExt1_eloss"),
-		m_dec_TileExt2_dep("TileExt2_dep"),
-		m_dec_TileExt2_eloss("TileExt2_eloss"),
-		m_dec_HEC0_dep("HEC0_dep"),
-		m_dec_HEC0_eloss("HEC0_eloss"),
-		m_dec_HEC1_dep("HEC1_dep"),
-		m_dec_HEC1_eloss("HEC1_eloss"),
-		m_dec_HEC2_dep("HEC2_dep"),
-		m_dec_HEC2_eloss("HEC2_eloss"),
-		m_dec_HEC3_dep("HEC3_dep"),
-		m_dec_HEC3_eloss("HEC3_eloss"){
-	declareProperty("TrackDepositInCaloTool", m_trkDepositInCalo);
+namespace {
+    static const SG::AuxElement::Decorator<bool> appliedDec("AppliedCaloDep");
+
+    static const SG::AuxElement::Decorator<std::vector<float>> dec_deposit("CaloDeposits");
+    static const SG::AuxElement::Decorator<std::vector<float>> dec_eloss("CaloElosses");
+    static const SG::AuxElement::Decorator<std::vector<uint16_t>> dec_type("CaloDepType");
+
+}  // namespace
+
+IDTrackCaloDepositsDecoratorTool::IDTrackCaloDepositsDecoratorTool(const std::string& t, const std::string& n, const IInterface* p) :
+    AthAlgTool(t, n, p) {
+    declareInterface<DerivationFramework::IAugmentationTool>(this);
+    declareInterface<DerivationFramework::IAugmentationTool>(this);
 }
 
 StatusCode IDTrackCaloDepositsDecoratorTool::initialize() {
-	ATH_CHECK(m_trkDepositInCalo.retrieve());
-	return StatusCode::SUCCESS;
+    ATH_CHECK(m_trkDepositInCalo.retrieve());
 
-}
+    ATH_CHECK(m_muon_key.initialize());
+    ATH_CHECK(m_id_trk_key.initialize());
+
+    m_deposit_key = (m_decor_muons ? m_muon_key.key() : m_id_trk_key.key()) + ".CaloDeposits";
+    m_eloss_key = (m_decor_muons ? m_muon_key.key() : m_id_trk_key.key()) + ".CaloElosses";
+    m_type_key = (m_decor_muons ? m_muon_key.key() : m_id_trk_key.key()) + ".CaloDepType";
 
-StatusCode IDTrackCaloDepositsDecoratorTool::decorate(const xAOD::IParticle* part) const 
-{
-	static const  SG::AuxElement::ConstAccessor< bool > appliedDec( "AppliedIso" );
+    ATH_CHECK(m_deposit_key.initialize());
+    ATH_CHECK(m_eloss_key.initialize());
+    ATH_CHECK(m_type_key.initialize());
 
-	// remember if we already decorated a track, saves CPU time
-	if (part->isAvailable<bool>("AppliedCaloDep") && part->auxdataConst<bool>("AppliedCaloDep")){
-		ATH_MSG_DEBUG("Already decorated this track!");
-		return StatusCode::SUCCESS;
-	}
+    return StatusCode::SUCCESS;
+}
+
+StatusCode IDTrackCaloDepositsDecoratorTool::decorate(const xAOD::IParticle* part) const {
+    // remember if we already decorated a track, saves CPU time
+    if (appliedDec.isAvailable(*part) && appliedDec(*part)) {
+        ATH_MSG_DEBUG("Already decorated this track!");
+        return StatusCode::SUCCESS;
+    }
+    return recompute_and_decorate(part);
+}
 
-	return recompute_and_decorate(part);
+StatusCode IDTrackCaloDepositsDecoratorTool::recompute_and_decorate(const xAOD::IParticle* particle) const {
+    ATH_MSG_DEBUG("Recomputing calo deposition by hand");
+
+    const xAOD::TrackParticle* track_part = nullptr;
+    if (particle->type() == xAOD::Type::ObjectType::TrackParticle) {
+        track_part = static_cast<const xAOD::TrackParticle*>(particle);
+    } else if (particle->type() == xAOD::Type::ObjectType::Muon) {
+        const xAOD::Muon* muon = static_cast<const xAOD::Muon*>(particle);
+        track_part = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
+        if (!track_part) {
+            ATH_MSG_VERBOSE("The muon does not have an associated ID track");
+            track_part = muon->trackParticle(xAOD::Muon::Primary);
+        }
+    }
+    if (!track_part) {
+        ATH_MSG_ERROR("Unable to retrieve xAOD::TrackParticle from probe object");
+        return StatusCode::FAILURE;
+    }
+
+    const CaloCellContainer* caloCellCont = nullptr;
+    std::vector<DepositInCalo> deposits = m_trkDepositInCalo->getDeposits(&(track_part->perigeeParameters()), caloCellCont);
+    std::vector<float> dep_val{}, eloss_val{};
+    std::vector<uint16_t> types{};
+    dep_val.reserve(deposits.size());
+    eloss_val.reserve(deposits.size());
+    types.reserve(deposits.size());
+    for (const DepositInCalo& it : deposits) {
+        dep_val.push_back(it.energyDeposited());
+        eloss_val.push_back(it.muonEnergyLoss());
+        types.push_back(it.subCaloId());
+    }
+    dec_deposit(*particle) = std::move(dep_val);
+    dec_eloss(*particle) = std::move(eloss_val);
+    dec_type(*particle) = std::move(types);
+
+    appliedDec(*particle) = true;
+
+    return StatusCode::SUCCESS;
 }
 
-StatusCode IDTrackCaloDepositsDecoratorTool::recompute_and_decorate(const xAOD::IParticle* part) const
-{
-	static const SG::AuxElement::Decorator< bool > appliedDec( "AppliedCaloDep" );
-	ATH_MSG_DEBUG("Recomputing calo deposition by hand");
-
-	const xAOD::TrackParticle* tp = dynamic_cast<const xAOD::TrackParticle*>(part);
-	if(!tp) {
-		const xAOD::Muon* muon = dynamic_cast<const xAOD::Muon*>(part);
-		if (muon) {
-			tp = muon->trackParticle(xAOD::Muon::Primary);
-		}
-	}
-
-	if(!tp) {
-		ATH_MSG_ERROR("Unable to retrieve xAOD::TrackParticle from probe object");
-		return StatusCode::FAILURE;
-	}
-
-	const CaloCellContainer* caloCellCont = nullptr;
-	std::vector<DepositInCalo> deposits = m_trkDepositInCalo->getDeposits(&(tp->perigeeParameters()), caloCellCont);
-	appliedDec(*part) = true;
-	
-	for (const auto& it : deposits)  {
-		CaloCell_ID::CaloSample sample = it.subCaloId();
-
-		float dep   = it.energyDeposited();
-		float eloss = it.muonEnergyLoss();
-
-		if (sample==CaloCell_ID::EMB1) {
-			m_dec_EMB1_dep(*part) = dep;
-			m_dec_EMB1_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::EMB2) {
-			m_dec_EMB2_dep(*part) = dep;
-			m_dec_EMB2_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::EMB3) {
-			m_dec_EMB3_dep(*part) = dep;
-			m_dec_EMB3_eloss(*part) = eloss;
-		}
-
-		else if (sample==CaloCell_ID::EME1) {
-			m_dec_EME1_dep(*part) = dep;
-			m_dec_EME1_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::EME2) {
-			m_dec_EME2_dep(*part) = dep;
-			m_dec_EME2_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::EME3) {
-			m_dec_EME3_dep(*part) = dep;
-			m_dec_EME3_eloss(*part) = eloss;
-		}
-
-
-		else if (sample==CaloCell_ID::TileBar0) {
-			m_dec_TileBar0_dep(*part) = dep;
-			m_dec_TileBar0_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::TileBar1) {
-			m_dec_TileBar1_dep(*part) = dep;
-			m_dec_TileBar1_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::TileBar2) {
-			m_dec_TileBar2_dep(*part) = dep;
-			m_dec_TileBar2_eloss(*part) = eloss;
-		}
-
-
-		else if (sample==CaloCell_ID::TileExt0) {
-			m_dec_TileExt0_dep(*part) = dep;
-			m_dec_TileExt0_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::TileExt1) {
-			m_dec_TileExt1_dep(*part) = dep;
-			m_dec_TileExt1_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::TileExt2) {
-			m_dec_TileExt2_dep(*part) = dep;
-			m_dec_TileExt2_eloss(*part) = eloss;
-		}
-
-
-		else if (sample==CaloCell_ID::HEC0) {
-			m_dec_HEC0_dep(*part) = dep;
-			m_dec_HEC0_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::HEC1) {
-			m_dec_HEC1_dep(*part) = dep;
-			m_dec_HEC1_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::HEC2) {
-			m_dec_HEC2_dep(*part) = dep;
-			m_dec_HEC2_eloss(*part) = eloss;
-		}
-		else if (sample==CaloCell_ID::HEC3) {
-			m_dec_HEC3_dep(*part) = dep;
-			m_dec_HEC3_eloss(*part) = eloss;
-		}
-	}
-	return StatusCode::SUCCESS;
+StatusCode IDTrackCaloDepositsDecoratorTool::addBranches() const {
+    const EventContext& ctx = Gaudi::Hive::currentContext();
+
+    SG::ReadHandle<xAOD::MuonContainer> muons{m_muon_key, ctx};
+    if (!muons.isValid()) {
+        ATH_MSG_FATAL("Failed to load muon container " << m_muon_key.fullKey());
+        return StatusCode::FAILURE;
+    }
+    bool added_one_muon{false};
+    for (const xAOD::Muon* muon : *muons) {
+        if (m_decor_muons) {
+            ATH_CHECK(recompute_and_decorate(muon));
+            continue;
+        }
+        if ((muon->muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) != m_use_SAF) {
+            ATH_MSG_DEBUG("The muon is a SAF muon. Discard them, while the tool is not setup to decorate the SAF particles");
+            continue;
+        }
+        const xAOD::TrackParticle* track_part = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
+        if (!track_part) {
+            ATH_MSG_VERBOSE("The muon does not have an ID track ");
+            continue;
+        }
+        added_one_muon = true;
+        ATH_CHECK(recompute_and_decorate(track_part));
+    }
+    /// We do not need to do anything here
+    if (m_decor_muons || added_one_muon) return StatusCode::SUCCESS;
+
+    SG::ReadHandle<xAOD::TrackParticleContainer> tracks{m_id_trk_key, ctx};
+    if (!tracks.isValid()) {
+        ATH_MSG_FATAL("Failed to load ID track container " << m_id_trk_key.fullKey());
+        return StatusCode::FAILURE;
+    }
+    if (tracks->empty()) return StatusCode::SUCCESS;
+
+    ATH_CHECK(recompute_and_decorate(tracks->front()));
+    return StatusCode::SUCCESS;
 }
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonIDCovMatrixDecorator.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonIDCovMatrixDecorator.cxx
deleted file mode 100644
index 239e97886ee768e24c0cdbc3efdd50f5497f78ef..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonIDCovMatrixDecorator.cxx
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-*/
-
-/////////////////////////////////////////////////////////////////
-// MuonIDCovMatrixDecorator.cxx, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-// Author: James Catmore (james.catmore@cern.ch) 
-// Decorates muon objects with the covariance matrix (std::vector<float>) 
-// from the corresponding inner detector track particle
-#include "DerivationFrameworkMuons/MuonIDCovMatrixDecorator.h"
-#include "AthenaKernel/errorcheck.h"
-#include <vector>
-#include <string>
-#include <memory>
-#include "xAODMuon/MuonContainer.h"
-
-// Constructor
-DerivationFramework::MuonIDCovMatrixDecorator::MuonIDCovMatrixDecorator(const std::string& t,
-							    const std::string& n,
-							    const IInterface* p):
-  AthAlgTool(t, n, p)
-{
-  declareInterface<DerivationFramework::IAugmentationTool>(this);
-  declareProperty("MuonContainerKey", m_muonSGKey="Muons");
-}
-  
-// Destructor
-DerivationFramework::MuonIDCovMatrixDecorator::~MuonIDCovMatrixDecorator() {
-}  
-
-// Athena initialize and finalize
-StatusCode DerivationFramework::MuonIDCovMatrixDecorator::initialize()
-{
-  ATH_MSG_VERBOSE("initialize() ...");
-  return StatusCode::SUCCESS;
-}
-
-StatusCode DerivationFramework::MuonIDCovMatrixDecorator::finalize()
-{
-  ATH_MSG_VERBOSE("finalize() ...");
-  return StatusCode::SUCCESS;
-}
-
-StatusCode DerivationFramework::MuonIDCovMatrixDecorator::addBranches() const
-{
- 
-  // Retrieve main TrackParticle collection
-  const xAOD::MuonContainer* muons;
-  if (evtStore()->retrieve(muons,m_muonSGKey).isFailure()) {
-    ATH_MSG_ERROR("No Muon collection with name " << m_muonSGKey << " found in StoreGate!");
-    return StatusCode::FAILURE;
-  }
-
-  // Set up the decorator
-  SG::AuxElement::Decorator< std::vector<float>  > decorator("inDet_definingParametersCovarianceMatrix"); 
-
-  // Loop over the muons and apply the decoration
-  std::vector<float> defaultCovarianceMatrix(15,0.0); // in case the ID track doesn't exist
-  for (auto mu : *muons) {
-    auto trackParticle = mu->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
-    if (trackParticle==nullptr) {
-      decorator(*mu) = defaultCovarianceMatrix;            
-    } else {
-     auto covarianceMatrix = trackParticle->definingParametersCovMatrixVec();
-     decorator(*mu) = covarianceMatrix;      
-    }
-  }
-
-  return StatusCode::SUCCESS;
-}
-
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonJetDrTool.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonJetDrTool.cxx
index 92471405ef20b231aa5521bb40862028b7a63791..7b66a8dc37fc8d701c5472f1a862455395a15085 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonJetDrTool.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonJetDrTool.cxx
@@ -1,46 +1,48 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-/////////////////////////////////////////////////////////////////
-// MuonJetDrTool.cxx, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
 // Finds the nearest jet and adds its info to the muon.
 #include "DerivationFrameworkMuons/MuonJetDrTool.h"
-#include "xAODMuon/MuonContainer.h"
-#include "xAODJet/JetContainer.h"
-#include "FourMomUtils/xAODP4Helpers.h"
 
+#include "FourMomUtils/xAODP4Helpers.h"
+#include "StoreGate/WriteDecorHandle.h"
 // Constructor
-DerivationFramework::MuonJetDrTool::MuonJetDrTool(const std::string& t,
-							    const std::string& n,
-							    const IInterface* p):
-  AthAlgTool(t, n, p)
-{
-  declareInterface<DerivationFramework::IAugmentationTool>(this);
-  declareProperty("ContainerKey", m_muonSGKey="Muons");
-  declareProperty("JetContainerKey", m_jetSGKey="AntiKt4EMTopoJets");
-  declareProperty("JetMinPt", m_jetMinPt=20e3);
+DerivationFramework::MuonJetDrTool::MuonJetDrTool(const std::string& t, const std::string& n, const IInterface* p) : AthAlgTool(t, n, p) {
+    declareInterface<DerivationFramework::IAugmentationTool>(this);
+}
+StatusCode DerivationFramework::MuonJetDrTool::initialize() {
+    ATH_CHECK(m_muonSGKey.initialize());
+    ATH_CHECK(m_jetSGKey.initialize());
+    m_jetDR_SGKey = m_muonSGKey.key() + "." + m_jetDR_SGKey.key();
+    ATH_CHECK(m_jetDR_SGKey.initialize());
+    return StatusCode::SUCCESS;
 }
-  
-StatusCode DerivationFramework::MuonJetDrTool::addBranches() const
-{
- 
-  // Retrieve main muonicle collection
-  const xAOD::IParticleContainer* muons = nullptr;
-  ATH_CHECK(evtStore()->retrieve(muons,m_muonSGKey));
-  const xAOD::JetContainer* jets = nullptr;
-  ATH_CHECK(evtStore()->retrieve(jets,m_jetSGKey));
+StatusCode DerivationFramework::MuonJetDrTool::addBranches() const {
+    const EventContext& ctx = Gaudi::Hive::currentContext();
 
-  // Set up the decorator
-  SG::AuxElement::Decorator<float> decorator_jetdR("DFCommonJetDr"); 
+    // Retrieve main muonicle collection
+    SG::ReadHandle<xAOD::MuonContainer> muons{m_muonSGKey, ctx};
+    if (!muons.isValid()) {
+        ATH_MSG_FATAL("Failed to retrive container " << m_muonSGKey.fullKey());
+        return StatusCode::FAILURE;
+    }
+    SG::ReadHandle<xAOD::JetContainer> jets{m_jetSGKey, ctx};
+    if (!jets.isValid()) {
+        ATH_MSG_FATAL("Failed to retrieve " << m_jetSGKey.fullKey());
+        return StatusCode::FAILURE;
+    }
+    SG::WriteDecorHandle<xAOD::MuonContainer, float> decorator_jetdR{m_jetDR_SGKey, ctx};
 
-  for (auto muon : *muons) {
-    float new_jetdR = -1;
-    for (auto jet : *jets) {
-      if (jet->pt()>m_jetMinPt && (new_jetdR<0 || xAOD::P4Helpers::deltaR(jet,muon)<new_jetdR)) new_jetdR = xAOD::P4Helpers::deltaR(jet,muon);
+    for (auto muon : *muons) {
+        double new_jetdR = FLT_MAX;
+        bool found{false};
+        for (auto jet : *jets) {
+            if (jet->pt() <= m_jetMinPt) continue;
+            new_jetdR = std::min(xAOD::P4Helpers::deltaR(jet, muon), new_jetdR);
+            found = true;
+        }
+        decorator_jetdR(*muon) = found ? new_jetdR : -1;
     }
-    decorator_jetdR(*muon) = new_jetdR;
-  }
-  return StatusCode::SUCCESS;
+    return StatusCode::SUCCESS;
 }
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTPExtrapolationTool.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTPExtrapolationTool.cxx
index 9c9dc5f56b9c0b118a0305f3fcb9b8f2d3595b76..e152efb4c63c38baede78e642a3c4e9383e5d0c3 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTPExtrapolationTool.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTPExtrapolationTool.cxx
@@ -3,126 +3,108 @@
 */
 
 #include "DerivationFrameworkMuons/MuonTPExtrapolationTool.h"
-#include "xAODTruth/TruthParticleContainer.h"
-#include "xAODEventInfo/EventInfo.h"
-#include "TrkSurfaces/DiscSurface.h"
-#include "TrkSurfaces/CylinderSurface.h"
-#include "TVector2.h"
 
-namespace{
+#include "FourMomUtils/xAODP4Helpers.h"
+#include "TrkSurfaces/CylinderSurface.h"
+#include "TrkSurfaces/DiscSurface.h"
+#include "xAODEventInfo/EventInfo.h"
+namespace {
     constexpr float min_warn_pt = 3500;
     constexpr float dummy_result = 5.;
-    
-    enum ExtStatus{
+
+    enum ExtStatus {
         Success = 1,
         Failed = 2,
         NotPresent = 0,
     };
-}
-MuonTPExtrapolationTool::MuonTPExtrapolationTool(const std::string& myname) :
-        AsgTool(myname),
-        m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"),
-         m_endcapPivotPlaneZ(15525.),
-         m_endcapPivotPlaneMinimumRadius(0.),
-         m_endcapPivotPlaneMaximumRadius(11977),
-         m_barrelPivotPlaneRadius(8000.),
-         m_barrelPivotPlaneHalfLength(9700),
-         m_is_on_DAOD(false) {
-    declareProperty("EndcapPivotPlaneZ", m_endcapPivotPlaneZ); // z position of pivot plane in endcap region
-    declareProperty("EndcapPivotPlaneMinimumRadius", m_endcapPivotPlaneMinimumRadius); // minimum radius of pivot plane in endcap region
-    declareProperty("EndcapPivotPlaneMaximumRadius", m_endcapPivotPlaneMaximumRadius); // maximum radius of pivot plane in endcap region
-    declareProperty("BarrelPivotPlaneRadius", m_barrelPivotPlaneRadius ); // radius of pivot plane in barrel region
-    declareProperty("BarrelPivotPlaneHalfLength", m_barrelPivotPlaneHalfLength); // half length of pivot plane in barrel region
-    declareProperty("Extrapolator", m_extrapolator);
-    declareProperty("IsRunOnDAOD", m_is_on_DAOD);
-}
 
+    static const SG::AuxElement::Decorator<char> dec_Decorated("DecoratedPivotEtaPhi");
 
+}  // namespace
+MuonTPExtrapolationTool::MuonTPExtrapolationTool(const std::string& t, const std::string& n, const IInterface* p) : AthAlgTool(t, n, p) {}
 
 StatusCode MuonTPExtrapolationTool::initialize() {
-    if (!m_is_on_DAOD) ATH_CHECK(m_extrapolator.retrieve());
+    if (m_run_extrapolation) {
+        ATH_CHECK(m_extrapolator.retrieve());
+        ATH_CHECK(m_muon_key.initialize());
+        ATH_CHECK(m_id_trk_key.initialize());
+
+        m_ext_eta_key = (m_decor_muons ? m_muon_key.key() : m_id_trk_key.key()) + ".EtaTriggerPivot";
+        m_ext_phi_key = (m_decor_muons ? m_muon_key.key() : m_id_trk_key.key()) + ".PhiTriggerPivot";
+        m_ext_stat_key = (m_decor_muons ? m_muon_key.key() : m_id_trk_key.key()) + ".DecoratedPivotEtaPhi";
+        ATH_CHECK(m_ext_eta_key.initialize());
+        ATH_CHECK(m_ext_phi_key.initialize());
+        ATH_CHECK(m_ext_stat_key.initialize());
+    }
     return StatusCode::SUCCESS;
 }
-bool MuonTPExtrapolationTool::is_extrapolated(const xAOD::IParticle* probe) const{
-    static const SG::AuxElement::ConstAccessor<char> acc_Decorated("DecoratedPivotEtaPhi");
-    return  acc_Decorated.isAvailable(*probe) && acc_Decorated(*probe) == ExtStatus::Success;
+bool MuonTPExtrapolationTool::is_extrapolated(const xAOD::IParticle* probe) const {
+    return dec_Decorated.isAvailable(*probe) && dec_Decorated(*probe);
 }
-bool MuonTPExtrapolationTool::extrapolateAndDecorateTrackParticle(const xAOD::TrackParticle* particle, float & eta, float & phi) const {
-
+bool MuonTPExtrapolationTool::extrapolateAndDecorateTrackParticle(const xAOD::IParticle* particle, float& eta, float& phi) const {
     // decorators used to access or store the information
-    static const SG::AuxElement::Decorator<char> dec_Decorated("DecoratedPivotEtaPhi");
     static const SG::AuxElement::Decorator<float> dec_Eta("EtaTriggerPivot");
     static const SG::AuxElement::Decorator<float> dec_Phi("PhiTriggerPivot");
 
-
-    static const SG::AuxElement::Accessor<float> acc_Eta("EtaTriggerPivot");
-    static const SG::AuxElement::Accessor<float> acc_Phi("PhiTriggerPivot");
-    
     eta = phi = dummy_result;
-    if (!is_extrapolated(particle)) {
-        if (!m_is_on_DAOD) {
-            // in the athena release, we can run the extrapolation if needed
-            std::unique_ptr<const Trk::TrackParameters> pTag = extrapolateToTriggerPivotPlane(*particle);
-            if (!pTag) {
-                // complain only if the particle has sufficient pt to actually make it to the MS...
-                if (particle->pt() > min_warn_pt) ATH_MSG_WARNING("Warning - Pivot plane extrapolation failed for a track particle with IP pt " << particle->pt() << ", eta " << particle->eta() << ", phi " << particle->phi());
-                dec_Decorated(*particle) = ExtStatus::Failed;
-                return false;
-            }
-            dec_Eta(*particle) = pTag->position().eta();
-            dec_Phi(*particle) = pTag->position().phi();
-            dec_Decorated(*particle) = ExtStatus::Success;            
-        } else return false;        
-    }    
-    if (m_is_on_DAOD || is_extrapolated(particle) ) {
-        eta = acc_Eta(*particle);
-        phi = acc_Phi(*particle);
-    } 
-    return true;
+    if (!is_extrapolated(particle) && m_run_extrapolation) {
+        /// in the athena release, we can run the extrapolation if needed
+        int extr_code = ExtStatus::NotPresent;
+
+        const xAOD::TrackParticle* track = getPreferredTrackParticle(particle);
+        std::unique_ptr<const Trk::TrackParameters> pTag = track ? extrapolateToTriggerPivotPlane(*track) : nullptr;
+        if (!pTag) {
+            // complain only if the particle has sufficient pt to actually make it to the MS...
+            if (particle->pt() > min_warn_pt)
+                ATH_MSG_WARNING("Warning - Pivot plane extrapolation failed for a track particle with IP pt "
+                                << particle->pt() << ", eta " << particle->eta() << ", phi " << particle->phi());
+            extr_code = ExtStatus::Failed;
+        } else {
+            eta = pTag->position().eta();
+            phi = pTag->position().phi();
+            extr_code = ExtStatus::Success;
+        }
+        dec_Eta(*particle) = eta;
+        dec_Phi(*particle) = phi;
+        dec_Decorated(*particle) = extr_code;
+        return extr_code == ExtStatus::Success;
+    }
+    if (is_extrapolated(particle) && dec_Decorated(*particle) == ExtStatus::Success) {
+        eta = dec_Eta(*particle);
+        phi = dec_Phi(*particle);
+        return true;
+    }
+    return false;
 }
 
-
-
 const xAOD::TrackParticle* MuonTPExtrapolationTool::getPreferredTrackParticle(const xAOD::IParticle* probe) const {
     const xAOD::TrackParticle* probeTrack = nullptr;
-    if (probe->type() == xAOD::Type::ObjectType::TruthParticle){
+    if (probe->type() == xAOD::Type::ObjectType::TruthParticle) {
         ATH_MSG_WARNING("Pivot plane extrapolation not supported for Truth probes!");
-    } else if (probe->type() == xAOD::Type::ObjectType::TrackParticle){
-        probeTrack = dynamic_cast<const xAOD::TrackParticle*>(probe);
+    } else if (probe->type() == xAOD::Type::ObjectType::TrackParticle) {
+        probeTrack = static_cast<const xAOD::TrackParticle*>(probe);
     } else if (probe->type() == xAOD::Type::ObjectType::Muon) {
-        const xAOD::Muon* probeMuon = dynamic_cast<const xAOD::Muon*>(probe);
+        const xAOD::Muon* probeMuon = static_cast<const xAOD::Muon*>(probe);
         probeTrack = probeMuon->trackParticle(xAOD::Muon::MuonSpectrometerTrackParticle);
-        if (!probeTrack) {
-            probeTrack = probeMuon->primaryTrackParticle();
-            if (!probeTrack) {
-                probeTrack = probeMuon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
-            }
-        }
-    }
-    if (!probeTrack) {
-        ATH_MSG_WARNING("no valid track found for extrapolating the probe to the pivot plane!");
+        if (!probeTrack) { probeTrack = probeMuon->primaryTrackParticle(); }
     }
+    if (!probeTrack) { ATH_MSG_VERBOSE("Could not find a valid track particle"); }
     return probeTrack;
-
 }
 // **********************************************************************
-StatusCode MuonTPExtrapolationTool::decoratePivotPlaneCoords(const xAOD::IParticle* particle) const{
-
-    const xAOD::TrackParticle* track = getPreferredTrackParticle(particle);
-    float eta, phi = 0;
-    if (!extrapolateAndDecorateTrackParticle(track, eta, phi)) {
-        return StatusCode::FAILURE;
-    }        
+StatusCode MuonTPExtrapolationTool::decoratePivotPlaneCoords(const xAOD::IParticle* particle) const {
+    float eta{0}, phi{0};
+    extrapolateAndDecorateTrackParticle(particle, eta, phi);
     return StatusCode::SUCCESS;
 }
 
 // **********************************************************************
 
 double MuonTPExtrapolationTool::dROnTriggerPivotPlane(const xAOD::Muon& tag, const xAOD::IParticle* probe) const {
-// should never happen, but better be safe than sorry
+    // should never happen, but better be safe than sorry
     if (!probe) {
         ATH_MSG_WARNING("No valid probe provided to MuonTPExtrapolationTool::dROnTriggerPivotPlane! ");
-        return 0;
+        return FLT_MAX;
     }
     // starting values: Track direction @ IP
     float tag_eta = tag.eta();
@@ -134,17 +116,14 @@ double MuonTPExtrapolationTool::dROnTriggerPivotPlane(const xAOD::Muon& tag, con
     //
     // First, we need to pick the TrackParticle to extrapolate.
     const xAOD::TrackParticle* tagTrack = getPreferredTrackParticle(&tag);
-    if (tagTrack) {
-        // If we have the track particle, we load the existing decorations for the
-        // pivot plane eta/phi, or (in full athena) to run the extrapolation and decorate.
-        // If the method returns true, we know that eta/phi were successfully updated
-        // If this does not work, the method returns a false.
-        // In that case, eta/phi are not changed and we are stuck with the IP direction.
-        // Print a warning just to let the user know.
-        if (!extrapolateAndDecorateTrackParticle(tagTrack, tag_eta, tag_phi)) {
-           
-        }
-    }
+    if (!tagTrack) { return FLT_MAX; }
+    // If we have the track particle, we load the existing decorations for the
+    // pivot plane eta/phi, or (in full athena) to run the extrapolation and decorate.
+    // If the method returns true, we know that eta/phi were successfully updated
+    // If this does not work, the method returns a false.
+    // In that case, eta/phi are not changed and we are stuck with the IP direction.
+    // Print a warning just to let the user know.
+    if (!extrapolateAndDecorateTrackParticle(tagTrack, tag_eta, tag_phi)) { return FLT_MAX; }
 
     // Now we repeat exactly the same exercise as above for the probe
 
@@ -153,23 +132,24 @@ double MuonTPExtrapolationTool::dROnTriggerPivotPlane(const xAOD::Muon& tag, con
     // In the selection code, we accept these probes, since they can not cause a trigger-related bias
     bool IDProbeMissesMS = false;
     const xAOD::TrackParticle* probeTrack = getPreferredTrackParticle(probe);
-    
-    if (probeTrack) {
-        if (!extrapolateAndDecorateTrackParticle(probeTrack, probe_eta, probe_phi)) {
-            // if an ID probe does not make it into the MS, we kick it out by returning an unphysical delta R of -100.
-            if (probe->type() == xAOD::Type::ObjectType::TrackParticle) {
-                ATH_MSG_DEBUG("ID probe does not reach MS, returning unphysical dummy value for the exTP branches!");
-                IDProbeMissesMS = true;
-            } else {
-                const xAOD::Muon* mu = dynamic_cast<const xAOD::Muon*>(probe);
-                ATH_MSG_DEBUG("Could not get the muon probe eta/phi @ pivot plane, muon type and author are " << mu->muonType() << " and " << mu->author());
-            }
+
+    if (!probeTrack) { return FLT_MAX; }
+    if (!extrapolateAndDecorateTrackParticle(probeTrack, probe_eta, probe_phi)) {
+        // if an ID probe does not make it into the MS, we kick it out by returning an unphysical delta R of -100.
+        if (probe->type() == xAOD::Type::ObjectType::TrackParticle) {
+            ATH_MSG_DEBUG("ID probe does not reach MS, returning unphysical dummy value for the exTP branches!");
+            IDProbeMissesMS = true;
+        } else if (probe->type() == xAOD::Type::ObjectType::Muon) {
+            const xAOD::Muon* mu = static_cast<const xAOD::Muon*>(probe);
+            ATH_MSG_DEBUG("Could not get the muon probe eta/phi @ pivot plane, muon type and author are " << mu->muonType() << " and "
+                                                                                                          << mu->author());
         }
+        return FLT_MAX;
     }
 
     float deta = tag_eta - probe_eta;
-    float dphi = TVector2::Phi_mpi_pi(tag_phi - probe_phi);
-    float dr = std::sqrt(deta * deta + dphi * dphi);
+    float dphi = xAOD::P4Helpers::deltaPhi(tag_phi, probe_phi);
+    float dr = std::hypot(deta, dphi);
 
     // decorators for the delta eta and delta phi and dR
     static const SG::AuxElement::Decorator<float> DecDeta("probe_dEtaTriggerPivot");
@@ -207,30 +187,32 @@ double MuonTPExtrapolationTool::dROnTriggerPivotPlane(const xAOD::Muon& tag, con
         DecPhi(tag) = tag_phi;
         DecEta(*probe) = probe_eta;
         DecPhi(*probe) = probe_phi;
-    } catch (const SG::ExcStoreLocked &) {
+    } catch (const SG::ExcStoreLocked&) {
         // Maintain a nice, passive agressive silence here.
     }
     // the final variable we care about is the delta R.
     return dr;
 }
 
-
-
-std::unique_ptr<const Trk::TrackParameters> MuonTPExtrapolationTool::extrapolateToTriggerPivotPlane(const xAOD::TrackParticle& track) const {
-// BARREL
+std::unique_ptr<const Trk::TrackParameters> MuonTPExtrapolationTool::extrapolateToTriggerPivotPlane(
+    const xAOD::TrackParticle& track) const {
+    const EventContext& ctx = Gaudi::Hive::currentContext();
+    // BARREL
     const Trk::Perigee& perigee = track.perigeeParameters();
 
-// create the barrel as a cylinder surface centered at 0,0,0
+    // create the barrel as a cylinder surface centered at 0,0,0
     Amg::Vector3D barrelCentre(0., 0., 0.);
     Amg::Transform3D matrix = Amg::Transform3D(Amg::RotationMatrix3D::Identity(), barrelCentre);
 
-    std::unique_ptr<Trk::CylinderSurface> cylinder = std::make_unique< Trk::CylinderSurface>(matrix, m_barrelPivotPlaneRadius, m_barrelPivotPlaneHalfLength);
-    
+    std::unique_ptr<Trk::CylinderSurface> cylinder =
+        std::make_unique<Trk::CylinderSurface>(matrix, m_barrelPivotPlaneRadius, m_barrelPivotPlaneHalfLength);
+
     // and then attempt to extrapolate our track to this surface, checking for the boundaries of the barrel
     bool boundaryCheck = true;
-       
-    std::unique_ptr<const Trk::TrackParameters> p ( m_extrapolator->extrapolate(perigee, *cylinder, Trk::alongMomentum, boundaryCheck, Trk::muon));
-    
+
+    std::unique_ptr<const Trk::TrackParameters> p{
+        m_extrapolator->extrapolate(ctx, perigee, *cylinder, Trk::alongMomentum, boundaryCheck, Trk::muon)};
+
     // if the extrapolation worked out (so we are in the barrel) we are done and can return the
     // track parameters at this surface.
     if (p) return p;
@@ -247,9 +229,54 @@ std::unique_ptr<const Trk::TrackParameters> MuonTPExtrapolationTool::extrapolate
     Amg::Vector3D endcapCentre(0., 0., m_endcapPivotPlaneZ);
     // much better!
     matrix = Amg::Transform3D(Amg::RotationMatrix3D::Identity(), SignOfEta * endcapCentre);
-    std::unique_ptr<Trk::DiscSurface> disc = std::make_unique< Trk::DiscSurface>(matrix, m_endcapPivotPlaneMinimumRadius, m_endcapPivotPlaneMaximumRadius);
-   
+    std::unique_ptr<Trk::DiscSurface> disc =
+        std::make_unique<Trk::DiscSurface>(matrix, m_endcapPivotPlaneMinimumRadius, m_endcapPivotPlaneMaximumRadius);
 
     boundaryCheck = false;
-    return std::unique_ptr<const Trk::TrackParameters>(m_extrapolator->extrapolate(perigee, *disc, Trk::alongMomentum, boundaryCheck, Trk::muon)); 
+    std::unique_ptr<const Trk::TrackParameters> e{
+        m_extrapolator->extrapolate(ctx, perigee, *disc, Trk::alongMomentum, boundaryCheck, Trk::muon)};
+    return e;
 }
+
+StatusCode MuonTPExtrapolationTool::addBranches() const {
+    const EventContext& ctx = Gaudi::Hive::currentContext();
+
+    SG::ReadHandle<xAOD::MuonContainer> muons{m_muon_key, ctx};
+    if (!muons.isValid()) {
+        ATH_MSG_FATAL("Failed to retrieve " << m_muon_key.fullKey());
+        return StatusCode::FAILURE;
+    }
+    bool added_one_muon{false};
+    for (const xAOD::Muon* muon : *muons) {
+        if (m_decor_muons) {
+            ATH_CHECK(decoratePivotPlaneCoords(muon));
+            continue;
+        }
+        if ((muon->muonType() == xAOD::Muon::SiliconAssociatedForwardMuon) != m_use_SAF) {
+            ATH_MSG_DEBUG("The muon is a SAF muon. Discard them, while the tool is not setup to decorate the SAF particles");
+            continue;
+        }
+        const xAOD::TrackParticle* track_part = muon->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
+        if (!track_part) {
+            ATH_MSG_VERBOSE("The muon does not have an ID track ");
+            continue;
+        }
+        added_one_muon = true;
+        ATH_CHECK(decoratePivotPlaneCoords(track_part));
+    }
+    if (m_decor_muons || added_one_muon) {
+        ATH_MSG_DEBUG("Nothing to do to ensure file integrity");
+        return StatusCode::SUCCESS;
+    }
+
+    SG::ReadHandle<xAOD::TrackParticleContainer> tracks{m_id_trk_key, ctx};
+    if (!tracks.isValid()) {
+        ATH_MSG_FATAL("Failed to load ID track container " << m_id_trk_key.fullKey());
+        return StatusCode::FAILURE;
+    }
+    if (tracks->empty()) return StatusCode::SUCCESS;
+
+    ATH_CHECK(decoratePivotPlaneCoords(tracks->front()));
+
+    return StatusCode::SUCCESS;
+}
\ No newline at end of file
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTPJpsiVertexFittingAlg.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTPJpsiVertexFittingAlg.cxx
index 8aef3ab000bcb78f22f0783a62a1563f065a0012..d7031eeffa9934c23170cb0cfb9006e131c2415d 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTPJpsiVertexFittingAlg.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTPJpsiVertexFittingAlg.cxx
@@ -2,13 +2,13 @@
   Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 #include "DerivationFrameworkMuons/MuonTPJpsiVertexFittingAlg.h"
+
 #include "Gaudi/Property.h"
 #include "GaudiKernel/ITHistSvc.h"
 #include "xAODEventInfo/EventInfo.h"
 
-
 MuonTPJpsiVertexFittingAlg::MuonTPJpsiVertexFittingAlg(const std::string& name, ISvcLocator* pSvcLocator) :
-            AthAlgorithm(name, pSvcLocator) {
+    AthAlgorithm(name, pSvcLocator) {
     declareProperty("AugmentationTools", m_augmentation_tools);
 }
 StatusCode MuonTPJpsiVertexFittingAlg::initialize() {
@@ -18,7 +18,6 @@ StatusCode MuonTPJpsiVertexFittingAlg::initialize() {
 }
 
 StatusCode MuonTPJpsiVertexFittingAlg::execute() {
-
     ATH_MSG_DEBUG("in execute");
     for (auto tool : m_augmentation_tools) {
         ATH_MSG_DEBUG("now calling addBranches for " << tool->name());
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTruthClassifierFallback.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTruthClassifierFallback.cxx
index 380d2bd774edfd086085c6afbc8d43510a5cfdeb..a06d135ba0d56feff00adbf044a9a3c0a632f9bc 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTruthClassifierFallback.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTruthClassifierFallback.cxx
@@ -1,161 +1,161 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /////////////////////////////////////////////////////////////////
 // MuonTruthClassifierFallback.cxx, (c) ATLAS Detector software
 ///////////////////////////////////////////////////////////////////
-// Runs on muons without a truth particle link. 
+// Runs on muons without a truth particle link.
 // Finds the nearest stable truth particle and adds its info to the muon.
 #include "DerivationFrameworkMuons/MuonTruthClassifierFallback.h"
-#include <vector>
-#include <string>
-#include <memory>
+
+#include "FourMomUtils/xAODP4Helpers.h"
 #include "xAODMuon/MuonContainer.h"
-#include "xAODTruth/TruthEventContainer.h"
-#include "xAODTruth/TruthPileupEventContainer.h"
-#include "MCTruthClassifier/IMCTruthClassifier.h"
 
-// Constructor
-DerivationFramework::MuonTruthClassifierFallback::MuonTruthClassifierFallback(const std::string& t,
-							    const std::string& n,
-							    const IInterface* p):
-  AthAlgTool(t, n, p)
-{
-  declareInterface<DerivationFramework::IAugmentationTool>(this);
-  declareProperty("ContainerKey", m_partSGKey="");
-  declareProperty("TruthContainerKey", m_truthSGKey="TruthEvents");
-  declareProperty("TruthPileupContainerKey", m_truthPileupSGKey="TruthPileupEvents");
-  declareProperty("TruthMuonContainerKey", m_truthMuonSGKey="MuonTruthParticles");
-  declareProperty("MinPt", m_minPt=2.5e3);
-  declareProperty("MCTruthClassifierTool", m_mcTruthClassifier,"Handle of MCTruthClassifier");
+namespace {
+    static const SG::AuxElement::Decorator<float> decorator_dR("MCTFallback_dR");
+    static const SG::AuxElement::Decorator<int> decorator_type("MCTFallback_truthType");
+    static const SG::AuxElement::Decorator<int> decorator_origin("MCTFallback_truthOrigin");
+
+    static const SG::AuxElement::Decorator<float> decorator_pu_dR("MCTFallbackPU_dR");
+    static const SG::AuxElement::Decorator<int> decorator_pu_type("MCTFallbackPU_truthType");
+    static const SG::AuxElement::Decorator<int> decorator_pu_origin("MCTFallbackPU_truthOrigin");
+
+    static const SG::AuxElement::Accessor<int> acc_tT("truthType");
+    static const SG::AuxElement::Accessor<int> acc_tO("truthOrigin");
+
+    constexpr int geant4_barcode_cutoff = 200000;
 
+}  // namespace
+// Constructor
+DerivationFramework::MuonTruthClassifierFallback::MuonTruthClassifierFallback(const std::string& t, const std::string& n,
+                                                                              const IInterface* p) :
+    AthAlgTool(t, n, p) {
+    declareInterface<DerivationFramework::IAugmentationTool>(this);
 }
-  
-// Destructor
-DerivationFramework::MuonTruthClassifierFallback::~MuonTruthClassifierFallback() {
-}  
 
 // Athena initialize and finalize
-StatusCode DerivationFramework::MuonTruthClassifierFallback::initialize()
-{
-  ATH_MSG_VERBOSE("initialize() ...");
-  CHECK( m_mcTruthClassifier.retrieve() );
-  return StatusCode::SUCCESS;
+StatusCode DerivationFramework::MuonTruthClassifierFallback::initialize() {
+    ATH_MSG_VERBOSE("initialize() ...");
+    ATH_CHECK(m_mcTruthClassifier.retrieve());
+
+    ATH_CHECK(m_containerKey.initialize());
+    ATH_CHECK(m_truthSGKey.initialize());
+    ATH_CHECK(m_truthPileupSGKey.initialize());
+    ATH_CHECK(m_truthMuonSGKey.initialize());
+
+    /// Key properties are overwirrten during initialize
+    m_Truth_dR_Key = m_containerKey.key() + ".MCTFallback_dR";
+    m_Truth_type_Key = m_containerKey.key() + ".MCTFallback_truthType";
+    m_Truth_origin_Key = m_containerKey.key() + ".MCTFallback_truthOrigin";
+    ATH_CHECK(m_Truth_dR_Key.initialize());
+    ATH_CHECK(m_Truth_type_Key.initialize());
+    ATH_CHECK(m_Truth_origin_Key.initialize());
+
+    m_Truth_PU_dR_Key = m_containerKey.key() + ".MCTFallbackPU_dR";
+    m_Truth_PU_type_Key = m_containerKey.key() + ".MCTFallbackPU_truthType";
+    m_Truth_PU_origin_Key = m_containerKey.key() + ".MCTFallbackPU_truthOrigin";
+    ATH_CHECK(m_Truth_PU_dR_Key.initialize());
+    ATH_CHECK(m_Truth_PU_type_Key.initialize());
+    ATH_CHECK(m_Truth_PU_origin_Key.initialize());
+
+    return StatusCode::SUCCESS;
 }
 
-StatusCode DerivationFramework::MuonTruthClassifierFallback::finalize()
-{
-  ATH_MSG_VERBOSE("finalize() ...");
-  return StatusCode::SUCCESS;
-}
+StatusCode DerivationFramework::MuonTruthClassifierFallback::addBranches() const {
+    // Retrieve main particle collection
+    const EventContext& ctx = Gaudi::Hive::currentContext();
 
-StatusCode DerivationFramework::MuonTruthClassifierFallback::addBranches() const
-{
- 
-  // Retrieve main particle collection
-  const xAOD::IParticleContainer* parts = nullptr;
-  if (evtStore()->retrieve(parts,m_partSGKey).isFailure()) {
-    ATH_MSG_ERROR("No Muon collection with name " << m_partSGKey << " found in StoreGate!");
-    return StatusCode::FAILURE;
-  }
-  const xAOD::TruthEventContainer* tec = nullptr;
-  if (evtStore()->retrieve(tec,m_truthSGKey).isFailure()) {
-    ATH_MSG_ERROR("No truth collection with name " << m_truthSGKey << " found in StoreGate!");
-    return StatusCode::FAILURE;
-  }
-  const xAOD::TruthPileupEventContainer* tpec = nullptr;
-  if (evtStore()->contains<xAOD::TruthPileupEventContainer>(m_truthPileupSGKey)) {
-    if (evtStore()->retrieve(tpec,m_truthPileupSGKey).isFailure()) {
-      ATH_MSG_ERROR("No truth pileup collection with name " << m_truthPileupSGKey << " found in StoreGate!");
-      return StatusCode::FAILURE;
+    SG::ReadHandle<xAOD::IParticleContainer> parts{m_containerKey, ctx};
+    if (!parts.isValid()) {
+        ATH_MSG_ERROR("No Muon collection with name " << m_containerKey.fullKey() << " found in StoreGate!");
+        return StatusCode::FAILURE;
     }
-  }
-  const xAOD::TruthParticleContainer* truthMuons = nullptr;
-  if (evtStore()->retrieve(truthMuons,m_truthMuonSGKey).isFailure()) {
-    ATH_MSG_ERROR("No truth muon collection with name " << m_truthMuonSGKey << " found in StoreGate!");
-    return StatusCode::FAILURE;
-  }
-
-  // Set up the decorator
-  SG::AuxElement::Decorator<float> decorator_dR("TruthClassifierFallback_dR"); 
-  SG::AuxElement::Decorator<int> decorator_type("TruthClassifierFallback_truthType"); 
-  SG::AuxElement::Decorator<int> decorator_origin("TruthClassifierFallback_truthOrigin"); 
-
-  SG::AuxElement::Decorator<float> decorator_pu_dR("PileupTruthClassifierFallback_dR"); 
-  SG::AuxElement::Decorator<int> decorator_pu_type("PileupTruthClassifierFallback_truthType"); 
-  SG::AuxElement::Decorator<int> decorator_pu_origin("PileupTruthClassifierFallback_truthOrigin"); 
-
-  static SG::AuxElement::Accessor<int> acc_tT("truthType") ;
-  static SG::AuxElement::Accessor<int> acc_tO("truthOrigin") ;
-  static SG::AuxElement::Decorator<int> decorator_tT("truthType") ;
-  static SG::AuxElement::Decorator<int> decorator_tO("truthOrigin") ;
-
-
-  for (auto part : *parts) {
-    const xAOD::TruthParticle *closest = nullptr;
-
-    for (auto muTruth : *truthMuons) {
-      if (closest && closest->p4().DeltaR(part->p4()) < muTruth->p4().DeltaR(part->p4())) continue;
-      closest = muTruth;
+    SG::ReadHandle<xAOD::TruthEventContainer> tec{m_truthSGKey, ctx};
+    if (!tec.isValid()) {
+        ATH_MSG_ERROR("No truth collection with name " << m_truthSGKey.fullKey() << " found in StoreGate!");
+        return StatusCode::FAILURE;
     }
-
-    for (auto event : *tec) {
-      for (size_t parti = 0; parti < event->nTruthParticles(); parti++) {
-        const xAOD::TruthParticle *tpart = event->truthParticle(parti);
-        if (!tpart) continue;
-        if (tpart->status()!=1) continue;
-        if (tpart->barcode()>2e5) continue;
-        if (!tpart->charge()) continue;
-        if (abs(tpart->pdgId())==13) continue;
-        if (tpart->pt()<m_minPt) continue;
-        if (closest && closest->p4().DeltaR(part->p4()) < tpart->p4().DeltaR(part->p4())) continue;
-        closest = tpart;
-      }
+    SG::ReadHandle<xAOD::TruthPileupEventContainer> tpec{m_truthPileupSGKey, ctx};
+    if (!tpec.isValid()) {
+        ATH_MSG_ERROR("No truth pileup collection with name " << m_truthPileupSGKey.fullKey() << " found in StoreGate!");
+        return StatusCode::FAILURE;
     }
 
-    decorator_dR(*part) = (closest ? closest->p4().DeltaR(part->p4()) : -1);
-
-    int newType = -1;
-    int newOrigin = -1;
-    if (closest && abs(closest->pdgId())==13) {
-      newType = acc_tT(*closest);
-      newOrigin = acc_tO(*closest);
-    } else if (closest) {
-      auto res = m_mcTruthClassifier->particleTruthClassifier(closest);
-      newType = res.first;
-      newOrigin = res.second;
+    SG::ReadHandle<xAOD::TruthParticleContainer> truthMuons{m_truthMuonSGKey, ctx};
+    if (!truthMuons.isValid()) {
+        ATH_MSG_ERROR("No truth muon collection with name " << m_truthMuonSGKey.fullKey() << " found in StoreGate!");
+        return StatusCode::FAILURE;
     }
-    decorator_type(*part) = newType;
-    decorator_origin(*part) = newOrigin;
-
-    if (tpec) {
-      const xAOD::TruthParticle *closestPileup = nullptr;
-      for (auto event : *tpec) {
-        for (size_t parti = 0; parti < event->nTruthParticles(); parti++) {
-          const xAOD::TruthParticle *part = event->truthParticle(parti);
-          if (!part) continue;
-          if (part->status()!=1) continue;
-          if (part->barcode()>2e5) continue;
-          if (!part->charge()) continue;
-          if (part->pt()<m_minPt) continue;
-          if (closestPileup && closestPileup->p4().DeltaR(part->p4()) < part->p4().DeltaR(part->p4())) continue;
-          closestPileup = part;
+
+    // Set up the decorator
+
+    for (const xAOD::IParticle* part : *parts) {
+        const xAOD::TruthParticle* closest = nullptr;
+        float minDR{FLT_MAX};
+        for (const xAOD::TruthParticle* muTruth : *truthMuons) {
+            const float dR = xAOD::P4Helpers::deltaR2(muTruth, part);
+            if (dR > minDR) continue;
+            closest = muTruth;
+            minDR = dR;
+        }
+
+        for (const xAOD::TruthEvent* event : *tec) {
+            for (size_t parti = 0; parti < event->nTruthParticles(); parti++) {
+                const xAOD::TruthParticle* tpart = event->truthParticle(parti);
+                if (!tpart || tpart->status() != 1 || tpart->barcode() > geant4_barcode_cutoff || !tpart->charge() || tpart->isMuon() ||
+                    tpart->pt() < m_minPt)
+                    continue;
+                const float dR = xAOD::P4Helpers::deltaR2(tpart, part);
+                if (dR > minDR) continue;
+                closest = tpart;
+                minDR = dR;
+            }
         }
-      }
-      decorator_pu_dR(*part) = (closestPileup ? closestPileup->p4().DeltaR(part->p4()) : -1);
-      int newPileupType = -1;
-      int newPileupOrigin = -1;
-      if (closestPileup) {
-        auto res = m_mcTruthClassifier->particleTruthClassifier(closestPileup);
-        newPileupType = res.first;
-        newPileupOrigin = res.second;
-      }
-      decorator_pu_type(*part) = newPileupType;
-      decorator_pu_origin(*part) = newPileupOrigin;
+
+        decorator_dR(*part) = closest ? std::sqrt(minDR) : -1;
+
+        int newType{-1}, newOrigin{-1};
+        if (closest && closest->isMuon()) {
+            newType = acc_tT(*closest);
+            newOrigin = acc_tO(*closest);
+        } else if (closest) {
+            auto res = m_mcTruthClassifier->particleTruthClassifier(closest);
+            newType = res.first;
+            newOrigin = res.second;
+        }
+        decorator_type(*part) = newType;
+        decorator_origin(*part) = newOrigin;
+
+        decorator_pu_dR(*part) = -1;
+        decorator_pu_type(*part) = -1;
+        decorator_pu_origin(*part) = -1;
+
+        minDR = FLT_MAX;
+
+        const xAOD::TruthParticle* closestPileup = nullptr;
+        for (auto event : *tpec) {
+            for (size_t parti = 0; parti < event->nTruthParticles(); parti++) {
+                const xAOD::TruthParticle* tpart = event->truthParticle(parti);
+                if (!tpart || tpart->status() != 1 || tpart->barcode() > geant4_barcode_cutoff || !tpart->charge() || tpart->isMuon() ||
+                    tpart->pt() < m_minPt)
+                    continue;
+                const float dR = xAOD::P4Helpers::deltaR2(tpart, part);
+                if (dR > minDR) continue;
+                closestPileup = tpart;
+                minDR = dR;
+            }
+        }
+        decorator_pu_dR(*part) = (closestPileup ? std::sqrt(minDR) : -1);
+        int newPileupType{-1}, newPileupOrigin{-1};
+        if (closestPileup) {
+            auto res = m_mcTruthClassifier->particleTruthClassifier(closestPileup);
+            newPileupType = res.first;
+            newPileupOrigin = res.second;
+        }
+        decorator_pu_type(*part) = newPileupType;
+        decorator_pu_origin(*part) = newPileupOrigin;
     }
-  }
 
-  return StatusCode::SUCCESS;
+    return StatusCode::SUCCESS;
 }
-
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTruthIsolationTool.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTruthIsolationTool.cxx
index d5c5547f7a0c2856b08a075478aaef4f478e89ad..2cac5bc7e805267f37939e611f1f95a6584b790a 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTruthIsolationTool.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/MuonTruthIsolationTool.cxx
@@ -5,110 +5,131 @@
 /////////////////////////////////////////////////////////////////
 // MuonTruthIsolationTool.cxx, (c) ATLAS Detector software
 ///////////////////////////////////////////////////////////////////
-// Runs on muons without a truth particle link. 
+// Runs on muons without a truth particle link.
 // Finds the nearest stable truth particle and adds its info to the muon.
 #include "DerivationFrameworkMuons/MuonTruthIsolationTool.h"
-#include <vector>
-#include <string>
-#include <memory>
-#include "xAODMuon/MuonContainer.h"
-#include "xAODTruth/TruthEventContainer.h"
 
+#include "FourMomUtils/xAODP4Helpers.h"
+#include "MuonDetDescrUtils/MuonSectorMapping.h"
+namespace {
+    static const SG::AuxElement::ConstAccessor<ElementLink<xAOD::TruthParticleContainer>> acc_tpl("truthParticleLink");
+
+    static const SG::AuxElement::Decorator<float> decorator_topoetcone20("topoetcone20_truth");
+    static const SG::AuxElement::Decorator<float> decorator_ptcone20("ptcone20_truth");
+    static const SG::AuxElement::Decorator<float> decorator_ptvarcone20("ptvarcone20_truth");
+    static const SG::AuxElement::Decorator<float> decorator_ptvarcone30("ptvarcone30_truth");
+    static const SG::AuxElement::Decorator<float> decorator_ptcone20_pt500("ptcone20_pt500_truth");
+    static const SG::AuxElement::Decorator<float> decorator_ptvarcone20_pt500("ptvarcone20_pt500_truth");
+    static const SG::AuxElement::Decorator<float> decorator_ptvarcone30_pt500("ptvarcone30_pt500_truth");
+
+    static const Muon::MuonSectorMapping sector_mapping;
+    constexpr int barcode_cut_off = 200000;
+
+}  // namespace
 // Constructor
-DerivationFramework::MuonTruthIsolationTool::MuonTruthIsolationTool(const std::string& t,
-							    const std::string& n,
-							    const IInterface* p):
-  AthAlgTool(t, n, p)
-{
-  declareInterface<DerivationFramework::IAugmentationTool>(this);
-  declareProperty("ContainerKey", m_partSGKey="");
-  declareProperty("TruthContainerKey", m_truthSGKey="TruthEvents");
+
+DerivationFramework::MuonTruthIsolationTool::MuonTruthIsolationTool(const std::string& t, const std::string& n, const IInterface* p) :
+    AthAlgTool(t, n, p) {
+    declareInterface<DerivationFramework::IAugmentationTool>(this);
 }
-  
-// Destructor
-DerivationFramework::MuonTruthIsolationTool::~MuonTruthIsolationTool() {
-}  
 
 // Athena initialize and finalize
-StatusCode DerivationFramework::MuonTruthIsolationTool::initialize()
-{
-  ATH_MSG_VERBOSE("initialize() ...");
-  return StatusCode::SUCCESS;
-}
+StatusCode DerivationFramework::MuonTruthIsolationTool::initialize() {
+    ATH_MSG_VERBOSE("initialize() ...");
+    ATH_CHECK(m_partSGKey.initialize());
+    ATH_CHECK(m_truthSGKey.initialize());
+
+    m_topoetcone20_Key = m_partSGKey.key() + ".topoetcone20_truth";
+    m_ptcone20_pt500_Key = m_partSGKey.key() + ".ptcone20_pt500_truth";
+    m_ptcone20_Key = m_partSGKey.key() + ".ptcone20_truth";
+    m_ptvarcone20_pt500_Key = m_partSGKey.key() + ".ptvarcone20_pt500_truth";
+    m_ptvarcone20_Key = m_partSGKey.key() + ".ptvarcone20_truth";
+    m_ptvarcone30_pt500_Key = m_partSGKey.key() + ".ptvarcone30_pt500_truth";
+    m_ptvarcone30_Key = m_partSGKey.key() + ".ptvarcone30_truth";
 
-StatusCode DerivationFramework::MuonTruthIsolationTool::finalize()
-{
-  ATH_MSG_VERBOSE("finalize() ...");
-  return StatusCode::SUCCESS;
+    ATH_CHECK(m_topoetcone20_Key.initialize());
+    ATH_CHECK(m_ptcone20_pt500_Key.initialize());
+    ATH_CHECK(m_ptcone20_Key.initialize());
+    ATH_CHECK(m_ptvarcone20_pt500_Key.initialize());
+    ATH_CHECK(m_ptvarcone20_Key.initialize());
+    ATH_CHECK(m_ptvarcone30_pt500_Key.initialize());
+    ATH_CHECK(m_ptvarcone30_Key.initialize());
+
+    return StatusCode::SUCCESS;
 }
 
-StatusCode DerivationFramework::MuonTruthIsolationTool::addBranches() const
-{
- 
-  // Retrieve main particle collection
-  const xAOD::IParticleContainer* parts = nullptr;
-  if (evtStore()->retrieve(parts,m_partSGKey).isFailure()) {
-    ATH_MSG_ERROR("No Muon collection with name " << m_partSGKey << " found in StoreGate!");
-    return StatusCode::FAILURE;
-  }
-  const xAOD::TruthEventContainer* tec = nullptr;
-  if (evtStore()->retrieve(tec,m_truthSGKey).isFailure()) {
-    ATH_MSG_ERROR("No truth collection with name " << m_truthSGKey << " found in StoreGate!");
-    return StatusCode::FAILURE;
-  }
-
-  // Set up the decorator
-  SG::AuxElement::Decorator<float> decorator_topoetcone20("topoetcone20_truth"); 
-  SG::AuxElement::Decorator<float> decorator_ptcone20("ptcone20_truth"); 
-  SG::AuxElement::Decorator<float> decorator_ptvarcone20("ptvarcone20_truth"); 
-  SG::AuxElement::Decorator<float> decorator_ptvarcone30("ptvarcone30_truth"); 
-  SG::AuxElement::Decorator<float> decorator_ptcone20_pt500("ptcone20_pt500_truth"); 
-  SG::AuxElement::Decorator<float> decorator_ptvarcone20_pt500("ptvarcone20_pt500_truth"); 
-  SG::AuxElement::Decorator<float> decorator_ptvarcone30_pt500("ptvarcone30_pt500_truth"); 
-
-  static SG::AuxElement::ConstAccessor<ElementLink<xAOD::TruthParticleContainer> > acc_tpl("truthParticleLink") ;
-
-
-  for (auto part : *parts) {
-    float new_topoetcone20 = 0;
-    float new_ptcone20 = 0;
-    float new_ptvarcone20 = 0;
-    float new_ptvarcone30 = 0;
-    float new_ptcone20_pt500 = 0;
-    float new_ptvarcone20_pt500 = 0;
-    float new_ptvarcone30_pt500 = 0;
-    float varradius20 = std::min(10e3/part->pt(),0.2);
-    float varradius30 = std::min(10e3/part->pt(),0.3);
-    const xAOD::TruthParticle *truthLink = (acc_tpl(*part).isValid()?*acc_tpl(*part):nullptr);
-    for (auto event : *tec) {
-      for (size_t parti = 0; parti < event->nTruthParticles(); parti++) {
-        const xAOD::TruthParticle *tpart = event->truthParticle(parti);
-        if (!tpart) continue;
-        if (tpart==truthLink) continue;
-        if (truthLink && truthLink->barcode()==tpart->barcode()) continue;
-        if (tpart->status()!=1) continue;
-        if (tpart->barcode()>2e5) continue;
-        if (tpart->p4().DeltaR(part->p4())<0.2 && tpart->p4().DeltaR(part->p4())>0.05) new_topoetcone20 += tpart->pt();
-        if (!tpart->charge()) continue;
-        if (fabs(tpart->eta())>2.5) continue;
-        if (tpart->pt()<500) continue;
-        if (tpart->p4().DeltaR(part->p4())<0.2) new_ptcone20_pt500 += tpart->pt();
-        if (tpart->p4().DeltaR(part->p4())<varradius20) new_ptvarcone20_pt500 += tpart->pt();
-        if (tpart->p4().DeltaR(part->p4())<varradius30) new_ptvarcone30_pt500 += tpart->pt();
-        if (tpart->pt()<1000) continue;
-        if (tpart->p4().DeltaR(part->p4())<0.2) new_ptcone20 += tpart->pt();
-        if (tpart->p4().DeltaR(part->p4())<varradius20) new_ptvarcone20 += tpart->pt();
-        if (tpart->p4().DeltaR(part->p4())<varradius30) new_ptvarcone30 += tpart->pt();
-      }
+StatusCode DerivationFramework::MuonTruthIsolationTool::addBranches() const {
+    // Retrieve main particle collection
+    const EventContext& ctx = Gaudi::Hive::currentContext();
+    SG::ReadHandle<xAOD::IParticleContainer> parts{m_partSGKey, ctx};
+    if (!parts.isValid()) {
+        ATH_MSG_ERROR("No Muon collection with name " << m_partSGKey.fullKey() << " found in StoreGate!");
+        return StatusCode::FAILURE;
+    }
+    SG::ReadHandle<xAOD::TruthEventContainer> tec{m_truthSGKey, ctx};
+    if (!tec.isValid()) {
+        ATH_MSG_ERROR("No truth collection with name " << m_truthSGKey.fullKey() << " found in StoreGate!");
+        return StatusCode::FAILURE;
     }
+    std::map<int, std::vector<const xAOD::TruthParticle*>> truth_map_calo;
+    std::map<int, std::vector<const xAOD::TruthParticle*>> truth_map_track;
 
-    decorator_topoetcone20(*part) = new_topoetcone20;
-    decorator_ptcone20(*part) = new_ptcone20;
-    decorator_ptvarcone20(*part) = new_ptvarcone20;
-    decorator_ptvarcone30(*part) = new_ptvarcone30;
-    decorator_ptcone20_pt500(*part) = new_ptcone20_pt500;
-    decorator_ptvarcone20_pt500(*part) = new_ptvarcone20_pt500;
-    decorator_ptvarcone30_pt500(*part) = new_ptvarcone30_pt500;
-  }
-  return StatusCode::SUCCESS;
+    // sector_mapping
+    for (const xAOD::TruthEvent* event : *tec) {
+        for (size_t parti = 0; parti < event->nTruthParticles(); ++parti) {
+            const xAOD::TruthParticle* tpart = event->truthParticle(parti);
+            if (!tpart || tpart->status() != 1 || tpart->barcode() > barcode_cut_off || tpart->isNeutrino()) continue;
+            const int sector = sector_mapping.getSector(tpart->phi());
+            truth_map_calo[sector].push_back(tpart);
+            if (!tpart->isCharged() || tpart->abseta() > 2.5 || tpart->pt() < 500) continue;
+            truth_map_track[sector].push_back(tpart);
+        }
+    }
+
+    for (const xAOD::IParticle* part : *parts) {
+        const float varradius20 = std::min(10e3 / part->pt(), 0.2);
+        const float varradius30 = std::min(10e3 / part->pt(), 0.3);
+        const xAOD::TruthParticle* const truthLink = (acc_tpl(*part).isValid() ? *acc_tpl(*part) : nullptr);
+
+        std::vector<int> sectors;
+        sector_mapping.getSectors(part->phi(), sectors);
+
+        float new_topoetcone20{0}, new_ptcone20{0}, new_ptvarcone20{0}, new_ptvarcone30{0}, new_ptcone20_pt500{0}, new_ptvarcone20_pt500{0},
+            new_ptvarcone30_pt500{0};
+        /// Loop over the sectors
+        for (const int sector : sectors) {
+            const std::vector<const xAOD::TruthParticle*>& calo_container = truth_map_calo[sector];
+            /// Update the topo et cones
+            for (const xAOD::TruthParticle* calo_part : calo_container) {
+                if (calo_part == truthLink || (truthLink && truthLink->barcode() == calo_part->barcode())) continue;
+                const float dR = xAOD::P4Helpers::deltaR(calo_part, part);
+                if (dR < 0.05 || dR > 0.2) continue;
+                new_topoetcone20 += calo_part->pt();
+            }
+
+            const std::vector<const xAOD::TruthParticle*>& truth_container = truth_map_track[sector];
+            for (const xAOD::TruthParticle* trk_part : truth_container) {
+                if (trk_part == truthLink || (truthLink && truthLink->barcode() == trk_part->barcode())) continue;
+                const float dR = xAOD::P4Helpers::deltaR(trk_part, part);
+                const float pt = trk_part->pt();
+                if (dR > 0.3) continue;
+                new_ptcone20_pt500 += (dR < 0.2) * pt;
+                new_ptvarcone20_pt500 += (dR < varradius20) * pt;
+                new_ptvarcone30_pt500 += (dR < varradius30) * pt;
+                if (pt < 1000) continue;
+                new_ptcone20 += (dR < 0.2) * pt;
+                new_ptvarcone20 += (dR < varradius20) * pt;
+                new_ptvarcone30 += (dR < varradius30) * pt;
+            }
+        }
+
+        decorator_topoetcone20(*part) = new_topoetcone20;
+        decorator_ptcone20(*part) = new_ptcone20;
+        decorator_ptvarcone20(*part) = new_ptvarcone20;
+        decorator_ptvarcone30(*part) = new_ptvarcone30;
+        decorator_ptcone20_pt500(*part) = new_ptcone20_pt500;
+        decorator_ptvarcone20_pt500(*part) = new_ptvarcone20_pt500;
+        decorator_ptvarcone30_pt500(*part) = new_ptvarcone30_pt500;
+    }
+    return StatusCode::SUCCESS;
 }
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/VertexDecoratorAlg.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/VertexDecoratorAlg.cxx
index 1b43cd95dac07654a014c40930c4dd10ae86b1a6..5bd6fb5efa3e8a3beda48f6be91153c829d94f51 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/VertexDecoratorAlg.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/VertexDecoratorAlg.cxx
@@ -3,48 +3,49 @@
 */
 
 #include "DerivationFrameworkMuons/VertexDecoratorAlg.h"
+
 #include <InDetTrackSelectionTool/IInDetTrackSelectionTool.h>
-#include <xAODTracking/VertexContainer.h>
 #include <xAODTracking/TrackParticle.h>
+#include <xAODTracking/VertexContainer.h>
 
 VertexDecoratorAlg::VertexDecoratorAlg(const std::string& name, ISvcLocator* pSvcLocator) :
-            AthAlgorithm(name, pSvcLocator),
-            m_VertexContainer("PrimaryVertices"),
-            m_decorationPrefix(""),
-            m_trkselTool(""),
-            m_filterTracks(true),
-            m_dec_sum_pt(nullptr),
-            m_dec_n_trks(nullptr) {
+    AthAlgorithm(name, pSvcLocator),
+    m_VertexContainer("PrimaryVertices"),
+    m_decorationPrefix(""),
+    m_trkselTool(""),
+    m_filterTracks(true),
+    m_dec_sum_pt(nullptr),
+    m_dec_n_trks(nullptr) {
     declareProperty("VertxContainer", m_VertexContainer);
-    declareProperty("Prefix" , m_decorationPrefix);
-    declareProperty("TrackSelectionTool", m_trkselTool );
+    declareProperty("Prefix", m_decorationPrefix);
+    declareProperty("TrackSelectionTool", m_trkselTool);
 }
 
 StatusCode VertexDecoratorAlg::initialize() {
     m_filterTracks = m_trkselTool.isSet();
     if (m_filterTracks) ATH_CHECK(m_trkselTool.retrieve());
     ATH_MSG_DEBUG("in initialize - retrieving tools");
-    m_dec_sum_pt = std::make_unique< SG::AuxElement::Decorator<float>> (std::string("Trk_SumPt") + std::string(m_decorationPrefix.empty()? "" : "_") + m_decorationPrefix);
-    m_dec_n_trks = std::make_unique< SG::AuxElement::Decorator<unsigned int>> (std::string("nTracks") + std::string(m_decorationPrefix.empty()? "" : "_") + m_decorationPrefix);
+    m_dec_sum_pt = std::make_unique<SG::AuxElement::Decorator<float>>(
+        std::string("Trk_SumPt") + std::string(m_decorationPrefix.empty() ? "" : "_") + m_decorationPrefix);
+    m_dec_n_trks = std::make_unique<SG::AuxElement::Decorator<unsigned int>>(
+        std::string("nTracks") + std::string(m_decorationPrefix.empty() ? "" : "_") + m_decorationPrefix);
     return StatusCode::SUCCESS;
 }
 
-
 StatusCode VertexDecoratorAlg::execute() {
-
     ATH_MSG_DEBUG("in execute");
     const xAOD::VertexContainer* Vertices = nullptr;
     ATH_CHECK(evtStore()->retrieve(Vertices, m_VertexContainer));
-    for (const auto vertex  : *Vertices ){
+    for (const auto vertex : *Vertices) {
         unsigned int n_Trks = 0;
         float sum_pt = 0;
-        for (unsigned int t = 0 ; t < vertex->nTrackParticles(); ++t){
-             const xAOD::TrackParticle* track = vertex->trackParticle(t);
-             if (!track){
-                ATH_MSG_DEBUG("Track "<<t<<" is a nullptr");
+        for (unsigned int t = 0; t < vertex->nTrackParticles(); ++t) {
+            const xAOD::TrackParticle* track = vertex->trackParticle(t);
+            if (!track) {
+                ATH_MSG_DEBUG("Track " << t << " is a nullptr");
                 continue;
             }
-            if (!m_filterTracks ||  m_trkselTool->accept(*track, vertex)){
+            if (!m_filterTracks || m_trkselTool->accept(*track, vertex)) {
                 ++n_Trks;
                 sum_pt += track->pt();
             }
@@ -54,5 +55,3 @@ StatusCode VertexDecoratorAlg::execute() {
     }
     return StatusCode::SUCCESS;
 }
-
-
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/components/DerivationFrameworkMuons_entries.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/components/DerivationFrameworkMuons_entries.cxx
index 3d6a809c8e5ed80d93b4bcaecdbe2f9e8753c1cc..f69d54be16338680d51c0ee0c1665e2ddb35fd69 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/components/DerivationFrameworkMuons_entries.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/components/DerivationFrameworkMuons_entries.cxx
@@ -2,28 +2,22 @@
   Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "DerivationFrameworkMuons/dimuonTaggingTool.h"
-#include "DerivationFrameworkMuons/isolationDecorator.h"
-#include "DerivationFrameworkMuons/mcpDecorator.h"
-#include "DerivationFrameworkMuons/MuonTPExtrapolationTool.h"
 #include "DerivationFrameworkMuons/IDTrackCaloDepositsDecoratorTool.h"
-#include "DerivationFrameworkMuons/MuonIDCovMatrixDecorator.h"
 #include "DerivationFrameworkMuons/MuonJetDrTool.h"
+#include "DerivationFrameworkMuons/MuonTPExtrapolationTool.h"
+#include "DerivationFrameworkMuons/MuonTPJpsiVertexFittingAlg.h"
 #include "DerivationFrameworkMuons/MuonTruthClassifierFallback.h"
 #include "DerivationFrameworkMuons/MuonTruthIsolationTool.h"
-#include "DerivationFrameworkMuons/MuonTPJpsiVertexFittingAlg.h"
 #include "DerivationFrameworkMuons/VertexDecoratorAlg.h"
+#include "DerivationFrameworkMuons/dimuonTaggingTool.h"
+#include "DerivationFrameworkMuons/isolationDecorator.h"
 
-DECLARE_COMPONENT (DerivationFramework::MuonTruthClassifierFallback)
-DECLARE_COMPONENT (DerivationFramework::MuonTruthIsolationTool)
-DECLARE_COMPONENT (DerivationFramework::MuonJetDrTool)
-
-DECLARE_COMPONENT( DerivationFramework::dimuonTaggingTool )
-DECLARE_COMPONENT( DerivationFramework::isolationDecorator )
-DECLARE_COMPONENT( DerivationFramework::mcpDecorator )
-DECLARE_COMPONENT( MuonTPExtrapolationTool )
-DECLARE_COMPONENT( IDTrackCaloDepositsDecoratorTool )
-DECLARE_COMPONENT( DerivationFramework::MuonIDCovMatrixDecorator )
-DECLARE_COMPONENT( DerivationFramework::MuonJetDrTool )
+DECLARE_COMPONENT(DerivationFramework::MuonTruthClassifierFallback)
+DECLARE_COMPONENT(DerivationFramework::MuonTruthIsolationTool)
+DECLARE_COMPONENT(DerivationFramework::MuonJetDrTool)
+DECLARE_COMPONENT(DerivationFramework::dimuonTaggingTool)
+DECLARE_COMPONENT(DerivationFramework::isolationDecorator)
+DECLARE_COMPONENT(MuonTPExtrapolationTool)
+DECLARE_COMPONENT(IDTrackCaloDepositsDecoratorTool)
 
 DECLARE_COMPONENT(MuonTPJpsiVertexFittingAlg)
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/dimuonTaggingTool.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/dimuonTaggingTool.cxx
index 3893f44f582c12f2223743068bda65da8cc409bf..8ce6e7bb9f0df761cfdb039aaede1d5d5214ef45 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/dimuonTaggingTool.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/dimuonTaggingTool.cxx
@@ -1,296 +1,195 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-/////////////////////////////////////////////////////////////////
-// dimuonTaggingTool.cxx, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-// Author: Dongliang Zhang (dongliang.zhang@cern.ch)
 #include "DerivationFrameworkMuons/dimuonTaggingTool.h"
-#include "AthenaKernel/errorcheck.h"
-#include <vector>
-#include <string>
-#include <memory>
 
+#include "AthenaKernel/errorcheck.h"
+#include "FourMomUtils/xAODP4Helpers.h"
 #include "GaudiKernel/SystemOfUnits.h"
-
-#include "xAODEventInfo/EventInfo.h"
-#include "xAODTracking/TrackingPrimitives.h"
 #include "xAODTracking/TrackParticleContainer.h"
+#include "xAODTracking/TrackingPrimitives.h"
 #include "xAODTruth/TruthParticleContainer.h"
-#include "DerivationFrameworkMuons/IMuonTPExtrapolationTool.h"
-#include "DerivationFrameworkMuons/IIDTrackCaloDepositsDecoratorTool.h"
-
-// Constructor
-DerivationFramework::dimuonTaggingTool::dimuonTaggingTool(const std::string& t,
-							    const std::string& n,
-							    const IInterface* p):
-  AthAlgTool(t, n, p),
-  m_tpExpTool("MuonTPExtrapolationTool/MuonTPExtrapolationTool"),
-  m_caloDepoTool("IDTrackCaloDepositsDecoratorTool/IDTrackCaloDepositsDecoratorTool"),
-  m_matchTool( "Trig::TrigMuonMatching/TrigMuonMatching" ),
-  m_trigDecisionTool("Trig::TrigDecisionTool/TrigDecisionTool")
-{
-  declareInterface<DerivationFramework::IAugmentationTool>(this);
-  declareProperty("TrigDecisionTool", m_trigDecisionTool, "Tool to access the trigger decision");
-  declareProperty("OrTrigs", m_orTrigs=std::vector< std::string >());
-  declareProperty("AndTrigs", m_andTrigs=std::vector< std::string >());
-
-  declareProperty("MuonTPExtrapoTool", m_tpExpTool, "Tool for MuonTPExtrapolation trigger matching");
-  declareProperty("IDTrackCaloDepoDecoTool", m_caloDepoTool, "Tool for ID track calo deposition decoration");
-  declareProperty("TrigMatchTool", m_matchTool, "Tool for trigger matching");
-  declareProperty("TriggerMatchDeltaR", m_triggerMatchDeltaR = 0.1);
-
-  declareProperty("MuonContainerKey", m_muonSGKey="Muons");
-  declareProperty("Mu1PtMin", m_mu1PtMin=-1);
-  declareProperty("Mu1AbsEtaMax", m_mu1AbsEtaMax=9999.);
-  declareProperty("Mu1Types", m_mu1Types=std::vector< int >());
-  declareProperty("Mu1Trigs", m_mu1Trigs=std::vector< std::string >());
-  declareProperty("Mu1IsoCuts", m_mu1IsoCuts=std::map< int, double >());
-
-  declareProperty("Mu2PtMin", m_mu2PtMin=-1);
-  declareProperty("Mu2AbsEtaMax", m_mu2AbsEtaMax=9999.);
-  declareProperty("Mu2Types", m_mu2Types=std::vector< int >());
-  declareProperty("Mu2Trigs", m_mu2Trigs=std::vector< std::string >());
-  declareProperty("Mu2IsoCuts", m_mu1IsoCuts=std::map< int, double >());
-
-  declareProperty("UseTrackProbe", m_useTrackProbe=true);
-  declareProperty("TrackContainerKey", m_trackSGKey="InDetTrackParticles");
 
-  declareProperty("OppositeCharge", m_requireOS=true); 
-  declareProperty("PairDPhiMin", m_dPhiMin=-1); 
-  declareProperty("InvariantMassLow", m_invariantMassLow=2.0*Gaudi::Units::GeV); 
-  declareProperty("InvariantMassHigh", m_invariantMassHigh=4.3*Gaudi::Units::GeV); 
-
-  declareProperty("IDTrackThinningConeSize", m_thinningConeSize=0.4);
-  declareProperty("BranchPrefix", m_br_prefix="");
-
-  /// for Coverity 109086 -- to be improved
-  m_invariantMassLow2 = m_invariantMassLow*fabs(m_invariantMassLow);
-  m_invariantMassHigh2 = m_invariantMassHigh*fabs(m_invariantMassHigh);
-  m_thinningConeSize2 = m_thinningConeSize*fabs(m_thinningConeSize);
-
-//   deco_trkFlag = new SG::AuxElement::Decorator< int >(m_br_prefix+"DIMU_Status"); 
-}
-  
-// Destructor
-DerivationFramework::dimuonTaggingTool::~dimuonTaggingTool() {
-//   delete deco_trkFlag;
-}  
-
-// Athena initialize and finalize
-StatusCode DerivationFramework::dimuonTaggingTool::initialize()
-{
-  ATH_MSG_VERBOSE("initialize() ...");
-
-  // trigger decision tool, needed when there is trigger requirement
-  if(m_orTrigs.size()>0 || m_andTrigs.size()>0){
-    if(m_trigDecisionTool.retrieve().isFailure()) {
-      ATH_MSG_FATAL("Failed to retrieve tool: " << m_trigDecisionTool);
-      return StatusCode::FAILURE;
+namespace DerivationFramework {
+    dimuonTaggingTool::dimuonTaggingTool(const std::string& t, const std::string& n, const IInterface* p) :
+        AthAlgTool(t, n, p) {
+        declareInterface<DerivationFramework::IAugmentationTool>(this);
     }
-    ATH_MSG_INFO("Retrieved tool: " << m_trigDecisionTool);
-  }
-
-  // load the matching tool
-  if( ! m_matchTool.empty() ) {
-     CHECK( m_matchTool.retrieve() );
-     ATH_MSG_INFO( "Successfully retrived the TrigMatchTool!" );
-  } else {
-     REPORT_ERROR( StatusCode::FAILURE ) << "Could not retrive the TrigMatchTool as it "
-                                         << "was not specified!";
-     return StatusCode::FAILURE;
-  }
-
-  if( ! m_tpExpTool.empty() )  CHECK( m_tpExpTool.retrieve() );
-  if( ! m_caloDepoTool.empty() )  CHECK( m_caloDepoTool.retrieve() );
-
-  m_invariantMassLow2 = m_invariantMassLow*fabs(m_invariantMassLow);
-  m_invariantMassHigh2 = m_invariantMassHigh*fabs(m_invariantMassHigh);
-  m_thinningConeSize2 = m_thinningConeSize*fabs(m_thinningConeSize);
-
-  return StatusCode::SUCCESS;
-}
 
-bool DerivationFramework::dimuonTaggingTool::checkTrigMatch(const xAOD::Muon *mu, const std::vector< std::string >& Trigs) const
-{
-  for(auto t: Trigs) {if(m_matchTool->match(mu, t)) return true;}
-  return 0==Trigs.size();
-}
+    // Destructor
+    dimuonTaggingTool::~dimuonTaggingTool() = default;
 
-StatusCode DerivationFramework::dimuonTaggingTool::finalize()
-{
-  ATH_MSG_VERBOSE("finalize() ...");
-  return StatusCode::SUCCESS;
-}
+    // Athena initialize and finalize
+    StatusCode dimuonTaggingTool::initialize() {
+        ATH_MSG_VERBOSE("initialize() ...");
 
-StatusCode DerivationFramework::dimuonTaggingTool::addBranches() const
-{
-  std::unique_ptr< int > keepEvent( new int(0) );
-  std::unique_ptr< std::vector<int> > trkStatus( new std::vector<int>() );
-  ATH_CHECK(fillInfo(keepEvent.get(), *trkStatus));
+        // trigger decision tool, needed when there is trigger requirement
+        if (m_orTrigs.size() > 0 || m_andTrigs.size() > 0) {
+            if (m_trigDecisionTool.retrieve().isFailure()) {
+                ATH_MSG_FATAL("Failed to retrieve tool: " << m_trigDecisionTool);
+                return StatusCode::FAILURE;
+            }
+            ATH_MSG_INFO("Retrieved tool: " << m_trigDecisionTool);
+        }
 
-  std::string DIMU_pass(m_br_prefix+"DIMU_pass");
-  if (!evtStore()->contains< int >(DIMU_pass)) {
-     CHECK(evtStore()->record(std::move( keepEvent ), DIMU_pass));
-  }
-  std::string DIMU_trkStatus(m_br_prefix+"DIMU_trkStatus");
-  if (!evtStore()->contains< std::vector< int > >(DIMU_trkStatus)) {
-     CHECK(evtStore()->record(std::move( trkStatus ), DIMU_trkStatus));
-  }
+        // load the matching tool
+        ATH_CHECK(m_matchTool.retrieve());
+        ATH_MSG_INFO("Successfully retrived the TrigMatchTool!");
 
-  return StatusCode::SUCCESS;
-}
+        ATH_CHECK(m_evtKey.initialize());
+        ATH_CHECK(m_muonSGKey.initialize());
+        ATH_CHECK(m_trackSGKey.initialize());
 
-StatusCode DerivationFramework::dimuonTaggingTool::fillInfo(int* keepEvent, std::vector<int>& trackMask) const
-{
-  const xAOD::EventInfo* eventInfo = 0;
-  ATH_CHECK(evtStore()->retrieve(eventInfo, "EventInfo"));
-  bool isMC = eventInfo->eventType( xAOD::EventInfo::IS_SIMULATION );
+        m_invariantMassLow2 = m_invariantMassLow * std::abs(m_invariantMassLow);
+        m_invariantMassHigh2 = m_invariantMassHigh * std::abs(m_invariantMassHigh);
+        m_thinningConeSize2 = m_thinningConeSize * std::abs(m_thinningConeSize);
 
-  const xAOD::TrackParticleContainer *tracks(0); 
-  ATH_CHECK(evtStore()->retrieve(tracks, m_trackSGKey));
-  const unsigned int NTRACKS = tracks->size();
-  trackMask.assign(NTRACKS,0);
-  SG::AuxElement::Decorator< int > deco_trkFlag1(m_br_prefix+"DIMU_Status");
-  for(auto mu: *tracks) deco_trkFlag1(*mu) = 0;
-//   for(auto mu: *tracks) (*deco_trkFlag)(*mu) = 0;
-
-  //// check Or triggers
-  for(unsigned int i=0; i<m_orTrigs.size(); i++){if(m_trigDecisionTool->isPassed(m_orTrigs[i])) *keepEvent = 100;}
-
-  //// check "and" triggers if didn't pass "Or" triggers
-  if(*keepEvent == 0 && m_andTrigs.size()>0){
-    bool passAndTriggers = false;
-    for(unsigned int i=0; i<m_andTrigs.size(); i++){
-      if(m_trigDecisionTool->isPassed(m_andTrigs[i])){ passAndTriggers = true; break;}}
-    if(!passAndTriggers) return StatusCode::SUCCESS;
-   }
-
-  /// muon selection
-  const xAOD::MuonContainer *muons(0);
-  ATH_CHECK(evtStore()->retrieve(muons, m_muonSGKey));
-  for(auto mu_itr1: *muons) {
-    if(!passMuonCuts(mu_itr1, m_mu1PtMin, m_mu1AbsEtaMax, m_mu1Types, m_mu1Trigs, m_mu1IsoCuts)) continue;
-    for(auto mu_itr2: *muons) {
-      if(mu_itr2==mu_itr1) continue;
-      if(!passMuonCuts(mu_itr2, m_mu2PtMin, m_mu2AbsEtaMax, m_mu2Types, m_mu2Trigs, m_mu2IsoCuts)) continue;
-      if(!muonPairCheck(mu_itr1, mu_itr2->charge(), mu_itr2->p4())) continue;
-      m_tpExpTool->dROnTriggerPivotPlane(*mu_itr1, mu_itr2);
-      (*keepEvent)++;
+        return StatusCode::SUCCESS;
     }
-    if(m_useTrackProbe){
-      for(auto mu_itr2: *tracks) {
-        if(mu_itr2 == mu_itr1->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) continue;
-        if(!passKinematicCuts(mu_itr2, m_mu2PtMin, m_mu2AbsEtaMax)) continue;
-        if(!muonPairCheck(mu_itr1, mu_itr2->charge(), mu_itr2->p4())) continue;
-        (*keepEvent)++;
-        trackMask[mu_itr2->index()]+=100;
-        maskNearbyIDtracks(mu_itr2, trackMask, tracks);
-        m_tpExpTool->dROnTriggerPivotPlane(*mu_itr1, mu_itr2);
-        ATH_CHECK(m_caloDepoTool->decorate(mu_itr2));
-      }
-    }
-  }
-
-  /// also mask tracks around truth muons.
-  if(isMC){
-    const xAOD::TruthParticleContainer *truth(0); 
-    ATH_CHECK(evtStore()->retrieve(truth, "MuonTruthParticles"));
-    for(auto mu_itr2: *truth) maskNearbyIDtracks(mu_itr2, trackMask, tracks);
-  }
 
-  int i(0);
-  for(auto mu: *tracks) {
-    int code = trackMask[i++];
-    deco_trkFlag1(*mu) = code>=100?1000:code;
-//     (*deco_trkFlag)(*mu) = code>=100?1000:code;
-  }
-
-  return StatusCode::SUCCESS;
-}
-
-void DerivationFramework::dimuonTaggingTool::maskNearbyIDtracks(const xAOD::IParticle* par1, std::vector<int>& trackMask, const xAOD::TrackParticleContainer* tracks) const
-{
-  unsigned int i(0);
-  for(auto trk1: *tracks) {
-   if(trackMask[i]==0){
-     float dEta = fabs(par1->eta()-trk1->eta());
-//      if(dEta>m_thinningConeSize) continue;
-     float dPhi = fabs(par1->phi()-trk1->phi());
-     if(dPhi>TMath::Pi()) dPhi = TMath::TwoPi()-dPhi;
-//      if(dPhi>m_thinningConeSize) continue;
-     if(dEta*dEta+dPhi*dPhi < m_thinningConeSize2) trackMask[i]++;
+    bool dimuonTaggingTool::checkTrigMatch(const xAOD::Muon* mu, const std::vector<std::string>& Trigs) const {
+        for (const std::string& t : Trigs) {
+            if (m_matchTool->match(mu, t)) return true;
+        }
+        return Trigs.empty();
     }
-   ++i; 
-  }
-  return;
-}
-
-bool DerivationFramework::dimuonTaggingTool::passKinematicCuts(const xAOD::IParticle *mu, float ptMin, float absEtaMax) const
-{
-  if(!mu) return false;
-  if(mu->pt()<ptMin) return false;
-  if(fabs(mu->eta())>absEtaMax) return false;
-
-  return true;
-}
 
-  /// so it will also work with tracks.
-bool DerivationFramework::dimuonTaggingTool::muonPairCheck(const xAOD::Muon *mu1, float charge2, const TLorentzVector& mu2) const
-{
-  if(m_requireOS && mu1->charge()*charge2>0.) return false;
-  if(m_dPhiMin>0 && (mu1->p4()).DeltaPhi(mu2)<m_dPhiMin) return false;
-  float mass2 = (mu2+mu1->p4()).M2();
-  if(mass2<m_invariantMassLow2 || (m_invariantMassHigh>0. && mass2>m_invariantMassHigh2)) return false;
+    StatusCode dimuonTaggingTool::addBranches() const {
+        std::unique_ptr<int> keepEvent(new int(0));
+        std::unique_ptr<std::vector<int> > trkStatus(new std::vector<int>());
+        ATH_CHECK(fillInfo(*keepEvent, *trkStatus));
 
-  return true;
-}
+        std::string DIMU_pass(m_br_prefix + "DIMU_pass");
+        if (!evtStore()->contains<int>(DIMU_pass)) { CHECK(evtStore()->record(std::move(keepEvent), DIMU_pass)); }
+        std::string DIMU_trkStatus(m_br_prefix + "DIMU_trkStatus");
+        if (!evtStore()->contains<std::vector<int> >(DIMU_trkStatus)) { CHECK(evtStore()->record(std::move(trkStatus), DIMU_trkStatus)); }
 
-bool DerivationFramework::dimuonTaggingTool::passMuonCuts(const xAOD::Muon *mu, const float ptMin, const float absEtaMax, const std::vector< int >& types, const std::vector< std::string >& trigs, const std::map< int, double > muIsoCuts) const
-{
-  /// the object should exist
-  if(!mu) return false;
-
-  /// simple pt, eta cuts
-  if(mu->pt()<ptMin) return false;
-  if(fabs(mu->eta())>absEtaMax) return false;
-
-  /// Muon type check
-  if(types.size()>0){
-    bool passTypeCut = false;
-    int type = mu->muonType();
-    for(unsigned int i=0; i<types.size(); ++i) {if(types[i]==type) {passTypeCut=true; break;}}
-    if(!passTypeCut) return false;
-   }
+        return StatusCode::SUCCESS;
+    }
 
-  /// isolation cuts. Mutiple cuts allowed and return the logical AND results.
-  for(std::map<int,double>::const_iterator it=muIsoCuts.begin(); it!=muIsoCuts.end(); ++it){
-    float isoValue=0;
-    const xAOD::Iso::IsolationType isoType = static_cast<xAOD::Iso::IsolationType>(it->first);
-    if(!(mu->isolation(isoValue, isoType)) || isoValue > it->second) return false;
-  }
+    StatusCode dimuonTaggingTool::fillInfo(int& keepEvent, std::vector<int>& trackMask) const {
+        const EventContext& ctx = Gaudi::Hive::currentContext();
+        SG::ReadHandle<xAOD::EventInfo> eventInfo{m_evtKey, ctx};
+        if (!eventInfo.isValid()) {
+            ATH_MSG_FATAL("Failed to retrieve " << m_evtKey.fullKey());
+            return StatusCode::FAILURE;
+        }
+        bool isMC = eventInfo->eventType(xAOD::EventInfo::IS_SIMULATION);
+
+        SG::ReadHandle<xAOD::TrackParticleContainer> tracks{m_trackSGKey, ctx};
+        if (!tracks.isValid()) {
+            ATH_MSG_FATAL("Failed to retrieve " << m_trackSGKey.fullKey());
+            return StatusCode::FAILURE;
+        }
+
+        const unsigned int NTRACKS = tracks->size();
+        trackMask.assign(NTRACKS, 0);
+        SG::AuxElement::Decorator<int> deco_trkFlag1(m_br_prefix + "DIMU_Status");
+        for (const xAOD::TrackParticle* trk : *tracks) deco_trkFlag1(*trk) = 0;
+
+        //// check Or triggers
+        for (const std::string& or_trig : m_orTrigs) {
+            if (m_trigDecisionTool->isPassed(or_trig)) {
+                keepEvent = 100;
+                break;
+            }
+        }
+
+        //// check "and" triggers if didn't pass "Or" triggers
+        if (!keepEvent && !m_andTrigs.empty()) {
+            bool passAndTriggers = true;
+            for (const std::string& and_trig : m_andTrigs) {
+                if (m_trigDecisionTool->isPassed(and_trig)) {
+                    passAndTriggers = false;
+                    break;
+                }
+            }
+            if (!passAndTriggers) return StatusCode::SUCCESS;
+        }
+
+        /// muon selection
+        SG::ReadHandle<xAOD::MuonContainer> muons{m_muonSGKey, ctx};
+        if (!muons.isValid()) {
+            ATH_MSG_FATAL("Failed to retrieve " << m_muonSGKey.fullKey());
+            return StatusCode::FAILURE;
+        }
+        for (const xAOD::Muon* mu_itr1 : *muons) {
+            if (!passMuonCuts(mu_itr1, m_mu1PtMin, m_mu1AbsEtaMax, m_mu1Types, m_mu1Trigs, m_mu1IsoCuts)) continue;
+            for (const xAOD::Muon* mu_itr2 : *muons) {
+                if (mu_itr2 == mu_itr1) continue;
+                if (!passMuonCuts(mu_itr2, m_mu2PtMin, m_mu2AbsEtaMax, m_mu2Types, m_mu2Trigs, m_mu2IsoCuts)) continue;
+                if (!muonPairCheck(mu_itr1, mu_itr2)) continue;
+                ++keepEvent;
+            }
+            if (m_useTrackProbe) {
+                for (const xAOD::TrackParticle* probe_trk : *tracks) {
+                    ///
+                    if (probe_trk == mu_itr1->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) continue;
+                    if (!passKinematicCuts(probe_trk, m_mu2PtMin, m_mu2AbsEtaMax)) continue;
+                    if (!muonPairCheck(mu_itr1, probe_trk)) continue;
+                    ++keepEvent;
+                    trackMask[probe_trk->index()] += 100;
+                    maskNearbyIDtracks(probe_trk, trackMask, tracks.cptr());
+                }
+            }
+        }
+
+        /// also mask tracks around truth muons.
+        if (isMC) {
+            const xAOD::TruthParticleContainer* truth(0);
+            ATH_CHECK(evtStore()->retrieve(truth, "MuonTruthParticles"));
+            for (auto mu_itr2 : *truth) maskNearbyIDtracks(mu_itr2, trackMask, tracks.cptr());
+        }
+
+        int i(0);
+        for (auto mu : *tracks) {
+            int code = trackMask[i++];
+            deco_trkFlag1(*mu) = code >= 100 ? 1000 : code;
+        }
+
+        return StatusCode::SUCCESS;
+    }
 
-  /// do trigger matching
-  if(trigs.size()>0 && !checkTrigMatch(mu, trigs)) return false;
+    void dimuonTaggingTool::maskNearbyIDtracks(const xAOD::IParticle* ref_part, std::vector<int>& trackMask,
+                                               const xAOD::TrackParticleContainer* tracks) const {
+        unsigned int i{0};
+        for (const xAOD::TrackParticle* trk : *tracks) {
+            if (xAOD::P4Helpers::deltaR2(ref_part, trk) < m_thinningConeSize2) trackMask[i] += 1;
+            ++i;
+        }
+    }
 
-  return true;
-}
+    bool dimuonTaggingTool::passKinematicCuts(const xAOD::IParticle* mu, float ptMin, float absEtaMax) const {
+        return !(!mu || mu->pt() < ptMin || std::abs(mu->eta()) > absEtaMax);
+    }
 
-bool DerivationFramework::dimuonTaggingTool::passMuonCuts(const xAOD::Muon *mu, const float ptMin, const float absEtaMax, const std::vector< int >& types, const std::vector< std::string >& trigs) const
-{ 
-  if(!mu) return false;
-  if(mu->pt()<ptMin) return false;
-  if(fabs(mu->eta())>absEtaMax) return false;
+    template <class probe_type> bool dimuonTaggingTool::muonPairCheck(const xAOD::Muon* mu1, const probe_type* mu2) const {
+        if (m_requireOS && mu1->charge() * mu2->charge() > 0) return false;
+        if (m_dPhiMin > 0 && std::abs(xAOD::P4Helpers::deltaPhi(mu1, mu2)) < m_dPhiMin) return false;
+        const float mass2 = (mu1->p4() + mu2->p4()).M2();
+        return !(mass2 < m_invariantMassLow2 || (m_invariantMassHigh > 0. && mass2 > m_invariantMassHigh2));
+    }
 
-  if(types.size()>0){
-    bool passTypeCut = false;
-    int type = mu->muonType();
-    for(unsigned int i=0; i<types.size(); ++i) {if(types[i]==type) {passTypeCut=true; break;}}
-    if(!passTypeCut) return false;
-   }
+    bool dimuonTaggingTool::passMuonCuts(const xAOD::Muon* mu, const float ptMin, const float absEtaMax, const std::vector<int>& types,
+                                         const std::vector<std::string>& trigs, const std::map<int, double> muIsoCuts) const {
+        if (!passMuonCuts(mu, ptMin, absEtaMax, types, trigs)) return false;
+        /// isolation cuts. Mutiple cuts allowed and return the logical AND results.
+        for (std::map<int, double>::const_iterator it = muIsoCuts.begin(); it != muIsoCuts.end(); ++it) {
+            float isoValue = 0;
+            const xAOD::Iso::IsolationType isoType = static_cast<xAOD::Iso::IsolationType>(it->first);
+            if (!(mu->isolation(isoValue, isoType)) || isoValue > it->second) return false;
+        }
+        return true;
+    }
 
-  if(trigs.size()>0 && !checkTrigMatch(mu, trigs)) return false;
+    bool dimuonTaggingTool::passMuonCuts(const xAOD::Muon* mu, const float ptMin, const float absEtaMax, const std::vector<int>& types,
+                                         const std::vector<std::string>& trigs) const {
+        if (!passKinematicCuts(mu, ptMin, absEtaMax)) return false;
+        if (!types.empty() &&
+            std::find_if(types.begin(), types.end(), [mu](const int& type) { return type == mu->muonType(); }) == types.end())
+            return false;
 
-  return true;
-}
+        return checkTrigMatch(mu, trigs);
+    }
+}  // namespace DerivationFramework
\ No newline at end of file
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/isolationDecorator.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/isolationDecorator.cxx
index de417598018dcd37d7119d388015a908da5b4d81..f977485b2b666aeb2ad2a5634c3d02b46fb8e914 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/isolationDecorator.cxx
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/isolationDecorator.cxx
@@ -3,147 +3,137 @@
 */
 
 #include "DerivationFrameworkMuons/isolationDecorator.h"
-#include "AthenaKernel/errorcheck.h"
-#include <vector>
+
 #include <string>
+#include <vector>
 
+#include "AthenaKernel/errorcheck.h"
 #include "xAODEventInfo/EventInfo.h"
-#include "xAODTracking/TrackingPrimitives.h"
 #include "xAODPrimitives/IsolationHelpers.h"
 #include "xAODTracking/TrackParticleContainer.h"
+#include "xAODTracking/TrackingPrimitives.h"
 
-namespace{
+namespace {
     constexpr int NDIFF = xAOD::Iso::ptvarcone20 - xAOD::Iso::ptcone20;
 }
 // Constructor
-DerivationFramework::isolationDecorator::isolationDecorator(const std::string& t,
-							    const std::string& n,
-							    const IInterface* p):
-  ExpressionParserUser<AthAlgTool>(t, n, p),
-  m_trackIsolationTool(),
-  m_caloIsolationTool(),
-  m_decorators(){
-  declareInterface<DerivationFramework::IAugmentationTool>(this);
-  declareProperty("TrackIsolationTool", m_trackIsolationTool);
-  declareProperty("CaloIsolationTool",  m_caloIsolationTool);
-  declareProperty("TargetContainer",    m_containerName = "InDetTrackParticles");
-  declareProperty("SelectionString",    m_selectionString = "");
-  declareProperty("SelectionFlag",      m_selFlag = "");
-  declareProperty("SelectionFlagValue", m_selFlagValue = 1);
-  declareProperty("ptcones",            m_ptcones);
-  declareProperty("topoetcones",        m_topoetcones);
-  declareProperty("Prefix",             m_prefix="");
+DerivationFramework::isolationDecorator::isolationDecorator(const std::string& t, const std::string& n, const IInterface* p) :
+    ExpressionParserUser<AthAlgTool>(t, n, p), m_trackIsolationTool(), m_caloIsolationTool(), m_decorators() {
+    declareInterface<DerivationFramework::IAugmentationTool>(this);
+    declareProperty("TrackIsolationTool", m_trackIsolationTool);
+    declareProperty("CaloIsolationTool", m_caloIsolationTool);
+    declareProperty("TargetContainer", m_containerName = "InDetTrackParticles");
+    declareProperty("SelectionString", m_selectionString = "");
+    declareProperty("SelectionFlag", m_selFlag = "");
+    declareProperty("SelectionFlagValue", m_selFlagValue = 1);
+    declareProperty("ptcones", m_ptcones);
+    declareProperty("topoetcones", m_topoetcones);
+    declareProperty("Prefix", m_prefix = "");
 }
-  
+
 // Athena initialize and finalize
-StatusCode DerivationFramework::isolationDecorator::initialize()
-{
-  ATH_MSG_VERBOSE("initialize() ...");
-
-  // load the matching tool
-  if( ! m_caloIsolationTool.empty() ) {
-     ATH_CHECK( m_caloIsolationTool.retrieve() );
-     ATH_MSG_INFO( "Successfully retrived the CaloIsolationTool!" );
-  }
-
-  if( ! m_trackIsolationTool.empty() ) {
-     ATH_CHECK( m_trackIsolationTool.retrieve() );
-     ATH_MSG_INFO( "Successfully retrived the CaloIsolationTool!" );
-  }
-
-  m_trkCorrList.trackbitset.set(static_cast<unsigned int>(xAOD::Iso::coreTrackPtr));
-  m_caloCorrList.calobitset.set(static_cast<unsigned int>(xAOD::Iso::coreCone));
-  m_caloCorrList.calobitset.set(static_cast<unsigned int>(xAOD::Iso::pileupCorrection));
-
-  /// create decorator list
-  m_ptconeTypes.clear();
-  for(auto c: m_ptcones){
-    xAOD::Iso::IsolationType t = static_cast<xAOD::Iso::IsolationType>(c);
-    xAOD::Iso::IsolationType t_var = static_cast<xAOD::Iso::IsolationType>(c+NDIFF);
-    
-    m_decorators.insert(std::make_pair(c, SG::AuxElement::Decorator< float >(m_prefix+xAOD::Iso::toString(t))));
-       
-    m_decorators.insert(std::make_pair(c+NDIFF, SG::AuxElement::Decorator< float >(m_prefix+xAOD::Iso::toString(t_var))));
-    m_ptconeTypes.push_back(t);
-  }
-  m_topoetconeTypes.clear();
-  for(auto c: m_topoetcones) {
-    xAOD::Iso::IsolationType t = static_cast<xAOD::Iso::IsolationType>(c);
-    m_decorators.insert(std::make_pair(c, SG::AuxElement::Decorator< float >(m_prefix+xAOD::Iso::toString(t))));
-    m_topoetconeTypes.push_back(t);
-  }
-
-  // Set up the text-parsing machinery for thinning the tracks directly according to user cuts
-  if (!m_selectionString.empty()) {
-     ATH_CHECK( initializeParser( m_selectionString ) );
-  }
-
-
-  return StatusCode::SUCCESS;
+StatusCode DerivationFramework::isolationDecorator::initialize() {
+    ATH_MSG_VERBOSE("initialize() ...");
+
+    // load the matching tool
+    if (!m_caloIsolationTool.empty()) {
+        ATH_CHECK(m_caloIsolationTool.retrieve());
+        ATH_MSG_INFO("Successfully retrived the CaloIsolationTool!");
+    }
+
+    if (!m_trackIsolationTool.empty()) {
+        ATH_CHECK(m_trackIsolationTool.retrieve());
+        ATH_MSG_INFO("Successfully retrived the CaloIsolationTool!");
+    }
+
+    m_trkCorrList.trackbitset.set(static_cast<unsigned int>(xAOD::Iso::coreTrackPtr));
+    m_caloCorrList.calobitset.set(static_cast<unsigned int>(xAOD::Iso::coreCone));
+    m_caloCorrList.calobitset.set(static_cast<unsigned int>(xAOD::Iso::pileupCorrection));
+
+    /// create decorator list
+    m_ptconeTypes.clear();
+    for (auto c : m_ptcones) {
+        xAOD::Iso::IsolationType t = static_cast<xAOD::Iso::IsolationType>(c);
+        xAOD::Iso::IsolationType t_var = static_cast<xAOD::Iso::IsolationType>(c + NDIFF);
+
+        m_decorators.insert(std::make_pair(c, SG::AuxElement::Decorator<float>(m_prefix + xAOD::Iso::toString(t))));
+
+        m_decorators.insert(std::make_pair(c + NDIFF, SG::AuxElement::Decorator<float>(m_prefix + xAOD::Iso::toString(t_var))));
+        m_ptconeTypes.push_back(t);
+    }
+    m_topoetconeTypes.clear();
+    for (auto c : m_topoetcones) {
+        xAOD::Iso::IsolationType t = static_cast<xAOD::Iso::IsolationType>(c);
+        m_decorators.insert(std::make_pair(c, SG::AuxElement::Decorator<float>(m_prefix + xAOD::Iso::toString(t))));
+        m_topoetconeTypes.push_back(t);
+    }
+
+    // Set up the text-parsing machinery for thinning the tracks directly according to user cuts
+    if (!m_selectionString.empty()) { ATH_CHECK(initializeParser(m_selectionString)); }
+
+    return StatusCode::SUCCESS;
 }
 
-StatusCode DerivationFramework::isolationDecorator::decorate(const xAOD::IParticle* part, const int iso_type, const float val) const{
+StatusCode DerivationFramework::isolationDecorator::decorate(const xAOD::IParticle* part, const int iso_type, const float val) const {
     std::map<int, SG::AuxElement::Decorator<float>>::const_iterator itr = m_decorators.find(iso_type);
-    if (itr == m_decorators.end()) {
-        return StatusCode::FAILURE;
-    }
+    if (itr == m_decorators.end()) { return StatusCode::FAILURE; }
     itr->second(*part) = val;
     return StatusCode::SUCCESS;
 }
-    
+
 StatusCode DerivationFramework::isolationDecorator::addBranches() const {
-  // retrieve tag (muon) container
-   const xAOD::IParticleContainer* toDecorate = nullptr;
-   ATH_CHECK(evtStore()->retrieve(toDecorate, m_containerName));
-   
-  // Execute the text parser and update the mask
-  std::vector<int> entries(toDecorate->size(), 1);
-  if (m_parser) {
-      entries =  m_parser->evaluateAsVector();
-      if (entries.size() != toDecorate->size()) {
-          ATH_MSG_ERROR("Sizes incompatible! Are you sure your selection string used ID TrackParticles?");
-          return StatusCode::FAILURE;
-      }
-  }
-
-  /// Loop over tracks
-  int ipar=0;
-  for(const auto particle : *toDecorate) {
-    /// Only decorate those passed selection
-    if (!entries[ipar++]) continue;
-
-    /// check flag
-    if(m_selFlag != ""){
-      static SG::AuxElement::Decorator<int> dec_trkFlag(m_selFlag);
-      if(dec_trkFlag(*particle)!=m_selFlagValue) continue;
-     }
-
-    /// check if decorated already
-    static SG::AuxElement::Decorator< bool > dec_isoDecoDone(m_prefix+"IsoDecoDone");
-    if(dec_isoDecoDone.isAvailable(*particle) && dec_isoDecoDone(*particle)) continue;
-    dec_isoDecoDone(*particle) = true;
-
-    /// track isolation
-    xAOD::TrackIsolation resultTrack;
-    if (m_trackIsolationTool->trackIsolation(resultTrack, *particle, m_ptconeTypes, m_trkCorrList)){
-        for(unsigned int i=0; i<m_ptcones.size(); i++){
-          ATH_CHECK(decorate(particle,m_ptcones[i],resultTrack.ptcones[i]));
-          ATH_CHECK(decorate(particle,m_ptcones[i]+NDIFF,resultTrack.ptvarcones_10GeVDivPt[i]));        
+    // retrieve tag (muon) container
+    const xAOD::IParticleContainer* toDecorate = nullptr;
+    ATH_CHECK(evtStore()->retrieve(toDecorate, m_containerName));
+
+    // Execute the text parser and update the mask
+    std::vector<int> entries(toDecorate->size(), 1);
+    if (m_parser) {
+        entries = m_parser->evaluateAsVector();
+        if (entries.size() != toDecorate->size()) {
+            ATH_MSG_ERROR("Sizes incompatible! Are you sure your selection string used ID TrackParticles?");
+            return StatusCode::FAILURE;
         }
-    }else{
-        ATH_MSG_WARNING("Failed to apply the track isolation for a particle");
     }
 
-    /// calo isolation
-    xAOD::CaloIsolation resultCalo; 
-    if (m_caloIsolationTool->caloTopoClusterIsolation(resultCalo, *particle, m_topoetconeTypes, m_caloCorrList)){
-        for(unsigned int i=0; i<m_topoetcones.size(); i++){
-           ATH_CHECK(decorate(particle,m_topoetcones[i],resultCalo.etcones[i]));
+    /// Loop over tracks
+    int ipar = 0;
+    for (const auto particle : *toDecorate) {
+        /// Only decorate those passed selection
+        if (!entries[ipar++]) continue;
+
+        /// check flag
+        if (m_selFlag != "") {
+            static SG::AuxElement::Decorator<int> dec_trkFlag(m_selFlag);
+            if (dec_trkFlag(*particle) != m_selFlagValue) continue;
+        }
+
+        /// check if decorated already
+        static SG::AuxElement::Decorator<bool> dec_isoDecoDone(m_prefix + "IsoDecoDone");
+        if (dec_isoDecoDone.isAvailable(*particle) && dec_isoDecoDone(*particle)) continue;
+        dec_isoDecoDone(*particle) = true;
+
+        /// track isolation
+        xAOD::TrackIsolation resultTrack;
+        if (m_trackIsolationTool->trackIsolation(resultTrack, *particle, m_ptconeTypes, m_trkCorrList)) {
+            for (unsigned int i = 0; i < m_ptcones.size(); i++) {
+                ATH_CHECK(decorate(particle, m_ptcones[i], resultTrack.ptcones[i]));
+                ATH_CHECK(decorate(particle, m_ptcones[i] + NDIFF, resultTrack.ptvarcones_10GeVDivPt[i]));
+            }
+        } else {
+            ATH_MSG_WARNING("Failed to apply the track isolation for a particle");
+        }
+
+        /// calo isolation
+        xAOD::CaloIsolation resultCalo;
+        if (m_caloIsolationTool->caloTopoClusterIsolation(resultCalo, *particle, m_topoetconeTypes, m_caloCorrList)) {
+            for (unsigned int i = 0; i < m_topoetcones.size(); i++) {
+                ATH_CHECK(decorate(particle, m_topoetcones[i], resultCalo.etcones[i]));
+            }
+        } else {
+            ATH_MSG_WARNING("Failed to apply the calo isolation for a particle");
         }
-    }else {
-        ATH_MSG_WARNING("Failed to apply the calo isolation for a particle");
     }
-  } 
 
-  return StatusCode::SUCCESS;
+    return StatusCode::SUCCESS;
 }
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/mcpDecorator.cxx b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/mcpDecorator.cxx
deleted file mode 100644
index 1cf7eda03beb1dba126960ff8793e0adda6b06b7..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkMuons/src/mcpDecorator.cxx
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "DerivationFrameworkMuons/mcpDecorator.h"
-#include "xAODMuon/MuonContainer.h"
-
-#include "AthenaKernel/errorcheck.h"
-
-namespace DerivationFramework {
-  mcpDecorator::mcpDecorator(const std::string& t, const std::string& n, const IInterface* p):
-    ExpressionParserUser<AthAlgTool>(t, n, p)
-  {
-    declareInterface<DerivationFramework::IAugmentationTool>(this);
-    declareProperty("TargetContainer",    m_containerName = "InDetTrackParticles");
-    declareProperty("SelectionString",    m_selectionString = "");
-    declareProperty("Prefix",             m_prefix="MuonEntry_");
-  }
-
-  StatusCode mcpDecorator::initialize() {
-    ATH_MSG_INFO ("Initializing " << name() << "...");
-
-    // Set up the text-parsing machinery for thinning the tracks directly according to user cuts
-    if (!m_selectionString.empty()) {
-       ATH_CHECK( initializeParser(m_selectionString) );
-    }
-
-    return StatusCode::SUCCESS;
-  }
-
-  StatusCode DerivationFramework::mcpDecorator::addBranches() const {
-    // retrieve tag (muon) container
-    const xAOD::MuonContainer* toDecorate = nullptr;   
-     ATH_CHECK(evtStore()->retrieve(toDecorate, m_containerName));
-
-    // Execute the text parser and update the mask
-    std::vector<int> entries(toDecorate->size(), 1);
-    if (m_parser) {
-        entries =  m_parser->evaluateAsVector();
-        if (entries.size() != toDecorate->size()) {
-            ATH_MSG_ERROR("Sizes incompatible! Are you sure your selection string used ID TrackParticles?");
-            return StatusCode::FAILURE;
-        }
-    }
-    return StatusCode::SUCCESS;
-  }
-}
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonTrigger.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonTrigger.py
index 3da53d02c9cfac70d633134751228bc7ff4a724e..13130eaa1a1d89ccfe1fa8b2da544cdfccee0c29 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonTrigger.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonTrigger.py
@@ -60,14 +60,12 @@ from AthenaConfiguration.AllConfigFlags import ConfigFlags
 
 if ConfigFlags.Trigger.EDMVersion == 3:
    r_tau = re.compile("HLT_.*tau.*")
-   r_notau = re.compile("HLT_[1-9]*(e|mu).*") 
-   r_veto = re.compile("HLT_.*(LRT).*")   
+   r_notau = re.compile("HLT_[1-9]*(e|mu|g).*") 
    for chain_name in GetFileMD(ConfigFlags.Input.Files)['TriggerMenu']['HLTChains']:
       result_tau = r_tau.match(chain_name)
       result_notau = r_notau.match(chain_name)
-      result_veto = r_veto.match(chain_name)
-      if result_tau is not None and result_veto is None: trigger_names_tau.append(chain_name)
-      if result_notau is not None and result_veto is None: trigger_names_notau.append(chain_name)
+      if result_tau is not None: trigger_names_tau.append(chain_name)
+      if result_notau is not None: trigger_names_notau.append(chain_name)
    trigger_names_notau = set(trigger_names_notau) - set(trigger_names_tau)
    trigger_names_notau = list(trigger_names_notau)
 else:
diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYSLITE.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYSLITE.py
index e39e3d99061771dbabde93b05544be57288d0766..eb2b011ec2983c25155672c377b63740547fe59d 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYSLITE.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/share/PHYSLITE.py
@@ -186,7 +186,8 @@ if DerivationFrameworkIsMonteCarlo:
 # Create a pile-up analysis sequence
 from AsgAnalysisAlgorithms.PileupAnalysisSequence import makePileupAnalysisSequence
 pileupSequence = makePileupAnalysisSequence( dataType )
-pileupSequence.configure( inputName = 'EventInfo', outputName = 'EventInfo_%SYS%' )
+pileupSequence.configure( inputName = {}, outputName = {} )
+print( pileupSequence ) # For debugging
 SeqPHYSLITE += pileupSequence
 
 # Include, and then set up the electron analysis sequence:
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/CMakeLists.txt b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/CMakeLists.txt
index 2a938bea954b15213ef40fad39de9ced452daf6f..45b24518d13ebc83062c0dfb1586a00301da532b 100644
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/CMakeLists.txt
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/CMakeLists.txt
@@ -23,7 +23,7 @@ atlas_add_library( ElectronPhotonFourMomentumCorrectionLib
    xAODEventInfo PATInterfaces EgammaAnalysisInterfacesLib egammaUtils PATCoreAcceptLib
    xAODRootAccess xAODTracking
    PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} AthLinks xAODMetaData egammaLayerRecalibTool
-   egammaMVACalibAnalysisLib PathResolver ${extra_libs} )
+   PathResolver ${extra_libs} )
 
 if( NOT XAOD_STANDALONE )
    atlas_add_component( ElectronPhotonFourMomentumCorrection
@@ -68,6 +68,8 @@ endif()
 # Test(s) in the package:
 if( XAOD_STANDALONE )
    atlas_add_test( ut_maintest SCRIPT test/ut_ElectronPhotonFourMomentumCorrection_maintest.py )
+   atlas_add_test( ut_factorytest SCRIPT test/ut_egamma_factorytest.py )
+   atlas_add_test( ut_resolutiontest SCRIPT test/ut_ElectronPhotonFourMomentumCorrection_resolutiontest.py )
 endif()
 
 
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h
index 0790e9ab29999a48277acfa693b512c0173966e2..1005be8af1019b102eef9df9aeb2c3f16c817cf3 100644
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/ElectronPhotonFourMomentumCorrection/EgammaCalibrationAndSmearingTool.h
@@ -12,6 +12,7 @@
 #include <memory>
 
 #include "EgammaAnalysisInterfaces/IEgammaCalibrationAndSmearingTool.h"
+#include "EgammaAnalysisInterfaces/IegammaMVASvc.h"
 #include "AsgTools/AsgTool.h"
 #include "AsgTools/AsgMetadataTool.h"
 #include "AsgMessaging/AsgMessaging.h"
@@ -23,11 +24,12 @@
 #include "xAODCaloEvent/CaloCluster.h"
 #include "xAODEventInfo/EventInfo.h"
 #include "AsgTools/AnaToolHandle.h"
+#include "AsgServices/ServiceHandle.h"
+
 
 #include "ElectronPhotonFourMomentumCorrection/egammaEnergyCorrectionTool.h"
 
 // Forward declarations
-class egammaMVATool;
 class egammaLayerRecalibTool;
 namespace egGain { class GainTool; }
 
@@ -220,8 +222,11 @@ public:
 
 
 private:
-  // use raw pointer to use forward declaration, TODO: better solution?
-  mutable egammaMVATool* m_mva_tool = nullptr; //!
+  ServiceHandle<IegammaMVASvc> m_MVACalibSvc{ this,
+                                              "MVACalibSvc",
+                                              "egammaMVASvc",
+                                              "calibration service" };
+
   egGain::GainTool* m_gain_tool = nullptr; //!
   egammaLayerRecalibTool* m_layer_recalibration_tool = nullptr; //!
   std::string m_layer_recalibration_tune; //!
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/Root/EgammaCalibrationAndSmearingTool.cxx b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/Root/EgammaCalibrationAndSmearingTool.cxx
index c938b05988aa6e722c499b1591ccd59215880077..64ebb4f2ad393f5fcc73649f08c941f72324de4f 100644
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/Root/EgammaCalibrationAndSmearingTool.cxx
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/Root/EgammaCalibrationAndSmearingTool.cxx
@@ -9,6 +9,8 @@
 
 #include <boost/format.hpp>
 
+#include <AsgTools/AsgToolConfig.h>
+#include <AsgServices/AsgServiceConfig.h>
 #include "xAODEgamma/Egamma.h"
 #include "xAODEgamma/EgammaDefs.h"
 #include "xAODEgamma/EgammaxAODHelpers.h"
@@ -29,7 +31,6 @@
 // internal (old) tool
 #include "ElectronPhotonFourMomentumCorrection/egammaEnergyCorrectionTool.h"
 
-#include "egammaMVACalibAnalysis/egammaMVATool.h"
 #include "egammaLayerRecalibTool/egammaLayerRecalibTool.h"
 #include "ElectronPhotonFourMomentumCorrection/GainTool.h"
 
@@ -77,7 +78,7 @@ std::unique_ptr<egGain::GainTool> gainToolFactory(egEnergyCorr::ESModel model)
   }
 }
 
-std::unique_ptr<egammaMVATool> egammaMVAToolFactory(egEnergyCorr::ESModel model)
+std::string egammaMVAToolFolder(egEnergyCorr::ESModel model)
 {
     std::string folder;
     switch (model)
@@ -120,13 +121,7 @@ std::unique_ptr<egammaMVATool> egammaMVAToolFactory(egEnergyCorr::ESModel model)
         default: folder = "";
     }
 
-    if (not folder.empty()) {
-      auto tool = std::make_unique<egammaMVATool>("EgammaMVATool");
-      tool->setProperty("folder", folder).ignore();
-      return tool;
-    }
-
-    else { return nullptr; }
+    return folder;
 }
 
 std::unique_ptr<egammaLayerRecalibTool> egammaLayerRecalibToolFactory(egEnergyCorr::ESModel model)
@@ -307,7 +302,6 @@ EgammaCalibrationAndSmearingTool::EgammaCalibrationAndSmearingTool(const std::st
 
 EgammaCalibrationAndSmearingTool::~EgammaCalibrationAndSmearingTool() {
   ATH_MSG_DEBUG("destructor");
-  delete m_mva_tool;
   delete m_layer_recalibration_tool;
   delete m_gain_tool;
 }
@@ -453,21 +447,48 @@ StatusCode EgammaCalibrationAndSmearingTool::initialize() {
   m_rootTool->initialize();
 
 
-  // configure MVA tool
+  // configure MVA calibration
   if (m_use_mva_calibration != 0)
   {
     ATH_MSG_DEBUG("creating MVA calibration tool (if needed)");
     if (m_MVAfolder.empty())  {  // automatically configure MVA tool
-      m_mva_tool = egammaMVAToolFactory(m_TESModel).release();
-      if (!m_mva_tool) { ATH_MSG_INFO("not using MVA calibration"); }
+      m_MVAfolder = egammaMVAToolFolder(m_TESModel);
     }
-    else {
-      m_mva_tool = new egammaMVATool("egammaMVATool");
-      ATH_CHECK(m_mva_tool->setProperty("folder", m_MVAfolder));
+
+    if (not m_MVAfolder.empty()) {
+
+      // electron MVA tool
+      asg::AsgToolConfig config_mva_electron("egammaMVACalibTool/tool_mva_electron");
+      config_mva_electron.setPropertyFromString("folder", m_MVAfolder);
+      ATH_CHECK(config_mva_electron.setProperty("use_layer_corrected", true));;
+      ATH_CHECK(config_mva_electron.setProperty("ParticleType", xAOD::EgammaParameters::electron));
+
+      // unconverted photon MVA tool
+      asg::AsgToolConfig config_mva_unconverted("egammaMVACalibTool/tool_mva_unconverted");
+      config_mva_unconverted.setPropertyFromString("folder", m_MVAfolder);
+      ATH_CHECK(config_mva_unconverted.setProperty("use_layer_corrected", true));
+      ATH_CHECK(config_mva_unconverted.setProperty("ParticleType", xAOD::EgammaParameters::unconvertedPhoton));
+
+      // converted photon MVA tool
+      asg::AsgToolConfig config_mva_converted("egammaMVACalibTool/tool_mva_converted");
+      config_mva_converted.setPropertyFromString("folder", m_MVAfolder);
+      ATH_CHECK(config_mva_converted.setProperty("use_layer_corrected", true));
+      ATH_CHECK(config_mva_converted.setProperty("ParticleType", xAOD::EgammaParameters::convertedPhoton));
+
+      // initialize the ServiceHandler egammaMVASvc
+      // make the name unique
+      std::ostringstream mva_service_name;
+      mva_service_name << "egammaMVASvc/service_mva_egamma_id" << (void const *)this;
+      asg::AsgServiceConfig config_mva_service(mva_service_name.str());
+      ATH_CHECK(config_mva_service.addPrivateTool("ElectronTool", config_mva_electron));
+      ATH_CHECK(config_mva_service.addPrivateTool("UnconvertedPhotonTool", config_mva_unconverted));
+      ATH_CHECK(config_mva_service.addPrivateTool("ConvertedPhotonTool", config_mva_converted));
+      ATH_CHECK(config_mva_service.makeService(m_MVACalibSvc));
+
+      // m_MVACalibSvc->msg().setLevel(this->msg().level());
     }
-    if (m_mva_tool) {
-      m_mva_tool->msg().setLevel(this->msg().level());
-      ATH_CHECK(m_mva_tool->initialize());
+    else {
+      m_use_mva_calibration = false;
     }
   }
 
@@ -807,9 +828,9 @@ CP::CorrectionCode EgammaCalibrationAndSmearingTool::applyCorrection(xAOD::Egamm
 
   double energy = 0.;
   // apply MVA calibration
-  if (m_mva_tool) {
+  if (!m_MVACalibSvc.empty()) {
     if (input.author() != xAOD::EgammaParameters::AuthorFwdElectron) {    // do not apply MVA calibration to fwd electrons
-      energy = m_mva_tool->getEnergy(input.caloCluster(), &input);
+      m_MVACalibSvc->getEnergy(*input.caloCluster(), input, energy).ignore();  // TODO check StatusCode
     }
     else { energy = input.e(); }
     ATH_MSG_DEBUG("energy after MVA calibration = " << boost::format("%.2f") % energy);
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_ElectronPhotonFourMomentumCorrection_maintest.py b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_ElectronPhotonFourMomentumCorrection_maintest.py
index f88ac6db9b25ca83a70e88705633341011ff69bf..6ef82503818057ee445b0bd5d9988b0f3c35408b 100755
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_ElectronPhotonFourMomentumCorrection_maintest.py
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_ElectronPhotonFourMomentumCorrection_maintest.py
@@ -132,13 +132,16 @@ class TestEgammaCalibrationAndSmearingTool(unittest.TestCase):
 
         self.assertTrue(tool.initialize().isSuccess())
 
-        tool_MVA = ROOT.egammaMVATool('MVA_tool')
+        tool_MVA = ROOT.egammaMVACalibTool('MVA_tool')
+        tool_MVA.setProperty("ParticleType", ROOT.xAOD.EgammaParameters.electron).ignore()
         tool_MVA.setProperty("folder", "egammaMVACalib/offline/v7").ignore()
+        tool_MVA.setProperty['int']("use_layer_corrected", 0).ignore()
+
         tool_MVA.msg().setLevel(ROOT.MSG.WARNING)
         self.assertTrue(tool_MVA.initialize().isSuccess())
 
         ei = self.factory.create_eventinfo(True, 100000)   # simulation
-        for ph in self.generator_photon():
+        for ph in self.generator_electron():
             e2 = tool_MVA.getEnergy(ph.caloCluster(), ph)
             tool.applyCorrection(ph, ei)
             e1 = ph.e()
@@ -323,10 +326,12 @@ class TestEgammaCalibrationAndSmearingTool(unittest.TestCase):
                                known_errors.get((esmodel, particle), 0))
 
     def test_MVA_all_data(self):
+        known_errors = {('es2015PRE', 'electron'): 2, ('es2015PRE', 'photon'): 3,
+                        ('es2015cPRE', 'electron'): 3, ('es2015cPRE', 'photon'): 2}
         for particle in 'electron', 'photon':
-            # for esmodel in 'es2015PRE', 'es2015cPRE':  # tons of problems, not sure why...
-            for esmodel in ('es2018_R21_v0',):
-                self._test_MVA(esmodel, particle, True)
+            for esmodel in 'es2015PRE', 'es2015cPRE', 'es2018_R21_v0':
+                self._test_MVA(esmodel, particle, True,
+                               known_errors.get((esmodel, particle), 0))
 
     def _test_MVA(self, esmodel, particle, isdata, tolerable_errors=0):
         # print("Testing MVA %s %s %s" %
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_test_resolution.py b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_ElectronPhotonFourMomentumCorrection_resolutiontest.py
similarity index 88%
rename from PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_test_resolution.py
rename to PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_ElectronPhotonFourMomentumCorrection_resolutiontest.py
index 72b99d4cbf6ffdc8e8b839d3f65b3d2bbdcb2351..9f0826e9c9a8b528dffe72a5f7b1f589d7c37bee 100755
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_test_resolution.py
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_ElectronPhotonFourMomentumCorrection_resolutiontest.py
@@ -1,21 +1,12 @@
-#! /usr/bin/env python
+#!/usr/bin/env python
 
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
 import unittest
 import ROOT
 import math
 from array import array
-
-
-def arange(xmin, xmax, delta):
-    # just to don't inject dep from numpy
-    x = xmin
-    while True:
-        yield x
-        x += delta
-        if x >= xmax:
-            break
+import numpy as np
 
 
 class TestEgammaResolution(unittest.TestCase):
@@ -36,15 +27,14 @@ class TestEgammaResolution(unittest.TestCase):
                          resol_types=(0, 1, 2)):
         for ptype in ptypes:
             for resol_type in resol_types:
-                for eta in arange(eta_min, eta_max, eta_step):
-                    for energy in arange(energy_min, energy_max, energy_step):
+                for eta in np.arange(eta_min, eta_max, eta_step):
+                    for energy in np.arange(energy_min, energy_max, energy_step):
                         yield ptype, energy, eta, resol_type
 
-    # @unittest.expectedFailure  # return nan in the crack (1.37-1.52), inf at >= 2.4
     def test_resolution_positive(self):
         for ptype, energy, eta, resol_type in self.loop_combination():
             for tool in self.tool_run1, self.tool_run2:
-                if 1.4 < abs(eta) <= 1.51 or abs(eta) > 2.39:
+                if 1.4 - 1E6 <= abs(eta) <= 1.51 or abs(eta) > 2.39:
                     continue
                 if ptype == 3:
                     continue
@@ -89,8 +79,8 @@ class TestEgammaResolution(unittest.TestCase):
     def test_difference_run1_run2_pre(self):
         tool_run2 = self.tool_run2
         for ptype in 0, 1, 2:
-            for eta in arange(0, 1.37, 0.1):
-                for e in arange(10E3, 1000E3, 100E3):
+            for eta in np.arange(0, 1.37, 0.1):
+                for e in np.arange(10E3, 1000E3, 100E3):
                     for t in 0, 1, 2:
                         resolution_run1 = self.tool_run1.getResolution(
                             ptype, e, eta, t)
@@ -135,10 +125,10 @@ class TestEgammaResolution(unittest.TestCase):
     def test_resolution_interface(self):
         tool = ROOT.CP.EgammaCalibrationAndSmearingTool("tool")
         tool.setProperty("ESModel", "es2012c").ignore()
-        tool.setProperty("int")("doSmearing", 0).ignore()
+        tool.setProperty["int"]("doSmearing", 0).ignore()
         self.assertTrue(tool.initialize().isSuccess())
 
-        energies = arange(5E3, 1000E3, 100E3)
+        energies = np.arange(5E3, 1000E3, 100E3)
 
         for particle in 'unconverted', 'converted', 'electron':
             for energy in energies:
@@ -168,5 +158,4 @@ class TestEgammaResolution(unittest.TestCase):
 
 
 if __name__ == '__main__':
-    ROOT.gROOT.ProcessLine(".x $ROOTCOREDIR/scripts/load_packages.C")
     unittest.main()
diff --git a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_test_factory.py b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_egamma_factorytest.py
similarity index 57%
rename from PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_test_factory.py
rename to PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_egamma_factorytest.py
index ff8f14c0431cf5243ce4697d603e913a8d631390..aa81e7ec38af54dc3f0bc319c112913902c517bd 100755
--- a/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_test_factory.py
+++ b/PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection/test/ut_egamma_factorytest.py
@@ -6,26 +6,23 @@ import unittest
 
 
 class TestEgammaFactory(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        cls.event = ROOT.xAOD.TEvent()
+        cls.factory = ROOT.EgammaFactory()
+        cls.RUN_NUMBER = 100000
 
     def test_eventinfo(self):
-        ROOT.xAOD.TEvent()
-        factory = ROOT.EgammaFactory()
-        ei1 = factory.create_eventinfo(True, 100000)
+        ei1 = self.factory.create_eventinfo(True, self.RUN_NUMBER)
         self.assertTrue(ei1.eventType(ROOT.xAOD.EventInfo.IS_SIMULATION))
-        ei2 = factory.create_eventinfo(False, 100000)
+        ei2 = self.factory.create_eventinfo(False, self.RUN_NUMBER)
         self.assertFalse(ei2.eventType(ROOT.xAOD.EventInfo.IS_SIMULATION))
 
     def test_unconverted(self):
-        ROOT.xAOD.TEvent()
-        factory = ROOT.EgammaFactory()
-
-        runnumber = 10000
-        ei = factory.create_eventinfo(True, runnumber)
-        self.assertEqual(ei.runNumber(), runnumber)
         eta = 0.1
         phi = 0.2
         e = 100E3
-        ph = factory.create_unconverted_photon(eta, phi, e)
+        ph = self.factory.create_unconverted_photon(eta, phi, e)
         self.assertEqual(ph.caloCluster().nSamples(), 8)
         self.assertFalse(ph.vertex())
         self.assertAlmostEqual(ph.eta(), eta)
@@ -33,25 +30,21 @@ class TestEgammaFactory(unittest.TestCase):
         self.assertAlmostEqual(ph.phi(), phi)
         self.assertAlmostEqual(ph.caloCluster().phi(), phi)
         self.assertAlmostEqual(
-            ph.caloCluster().auxdata("float")("etaCalo"), eta)
+            ph.caloCluster().auxdata["float"]("etaCalo"), eta)
         self.assertAlmostEqual(
-            ph.caloCluster().auxdata("float")("phiCalo"), phi)
+            ph.caloCluster().auxdata["float"]("phiCalo"), phi)
         self.assertAlmostEqual(ph.e(), e, delta=0.01)
         self.assertEqual(ph.caloCluster().e(), e)
         for i in range(3):
             self.assertGreater(ph.caloCluster().energyBE(i), 0)
 
     def test_converted(self):
-        event = ROOT.xAOD.TEvent()
-        factory = ROOT.EgammaFactory()
-
-        runnumber = 10000
-        ei = factory.create_eventinfo(True, runnumber)
-        self.assertEqual(ei.runNumber(), runnumber)
+        ei = self.factory.create_eventinfo(True, self.RUN_NUMBER)
+        self.assertEqual(ei.runNumber(), self.RUN_NUMBER)
         eta = 0.1
         phi = 0.2
         e = 100E3
-        ph = factory.create_converted_photon(eta, phi, e)
+        ph = self.factory.create_converted_photon(eta, phi, e)
         self.assertEqual(ph.caloCluster().nSamples(), 8)
         self.assertGreater(ph.vertex().x(), 0)
         self.assertAlmostEqual(ph.eta(), eta)
@@ -59,21 +52,17 @@ class TestEgammaFactory(unittest.TestCase):
         self.assertAlmostEqual(ph.phi(), phi)
         self.assertAlmostEqual(ph.caloCluster().phi(), phi)
         self.assertAlmostEqual(
-            ph.caloCluster().auxdata("float")("etaCalo"), eta)
+            ph.caloCluster().auxdata["float"]("etaCalo"), eta)
         self.assertAlmostEqual(
-            ph.caloCluster().auxdata("float")("phiCalo"), phi)
+            ph.caloCluster().auxdata["float"]("phiCalo"), phi)
         self.assertAlmostEqual(ph.e(), e, delta=0.01)
         self.assertEqual(ph.caloCluster().e(), e)
         for i in range(3):
             self.assertGreater(ph.caloCluster().energyBE(i), 0)
 
     def test_photon(self):
-        ROOT.xAOD.TEvent()
-        factory = ROOT.EgammaFactory()
-
-        runnumber = 10000
-        ei = factory.create_eventinfo(True, runnumber)
-        self.assertEqual(ei.runNumber(), runnumber)
+        ei = self.factory.create_eventinfo(True, self.RUN_NUMBER)
+        self.assertEqual(ei.runNumber(), self.RUN_NUMBER)
         e0 = 10E3
         e1 = 20E3
         e2 = 60E3
@@ -82,7 +71,7 @@ class TestEgammaFactory(unittest.TestCase):
         eta = 0.1
         phi = 0.2
         e = 1.2 * (e0 + e1 + e2 + e3)
-        ph = factory.create_photon(eta, phi, e0, e1, e2, e3, e, r)
+        ph = self.factory.create_photon(eta, phi, e0, e1, e2, e3, e, r)
         self.assertEqual(ph.caloCluster().nSamples(), 8)
         self.assertEqual(ph.caloCluster().energyBE(0), e0)
         self.assertEqual(ph.caloCluster().energyBE(1), e1)
@@ -94,25 +83,16 @@ class TestEgammaFactory(unittest.TestCase):
         self.assertAlmostEqual(ph.phi(), phi)
         self.assertAlmostEqual(ph.caloCluster().phi(), phi)
         self.assertAlmostEqual(
-            ph.caloCluster().auxdata("float")("etaCalo"), eta)
+            ph.caloCluster().auxdata["float"]("etaCalo"), eta)
         self.assertAlmostEqual(
-            ph.caloCluster().auxdata("float")("phiCalo"), phi)
+            ph.caloCluster().auxdata["float"]("phiCalo"), phi)
         self.assertAlmostEqual(ph.e(), e, delta=0.01)
         self.assertEqual(ph.caloCluster().e(), e)
 
-        tool = ROOT.CP.EgammaCalibrationAndSmearingTool("tool")
-        tool.setProperty("ESModel", "es2012c")
-        self.assertTrue(tool.initialize().isSuccess())
-
-        tool.applyCorrection(ph, ei)
 
     def test_electron(self):
-        ROOT.xAOD.TEvent()
-        factory = ROOT.EgammaFactory()
-
-        runnumber = 10000
-        ei = factory.create_eventinfo(True, runnumber)
-        self.assertEqual(ei.runNumber(), runnumber)
+        ei = self.factory.create_eventinfo(True, self.RUN_NUMBER)
+        self.assertEqual(ei.runNumber(), self.RUN_NUMBER)
         e0 = 10E3
         e1 = 20E3
         e2 = 60E3
@@ -120,7 +100,7 @@ class TestEgammaFactory(unittest.TestCase):
         eta = 0.1
         phi = 0.2
         e = 1.2 * (e0 + e1 + e2 + e3)
-        el = factory.create_electron(eta, phi, e0, e1, e2, e3, e)
+        el = self.factory.create_electron(eta, phi, e0, e1, e2, e3, e)
         self.assertEqual(el.caloCluster().nSamples(), 8)
         self.assertEqual(el.caloCluster().energyBE(0), e0)
         self.assertEqual(el.caloCluster().energyBE(1), e1)
@@ -131,43 +111,36 @@ class TestEgammaFactory(unittest.TestCase):
         self.assertAlmostEqual(el.phi(), phi)
         self.assertAlmostEqual(el.caloCluster().phi(), phi)
         self.assertAlmostEqual(
-            el.caloCluster().auxdata("float")("etaCalo"), eta)
+            el.caloCluster().auxdata["float"]("etaCalo"), eta)
         self.assertAlmostEqual(
-            el.caloCluster().auxdata("float")("phiCalo"), phi)
+            el.caloCluster().auxdata["float"]("phiCalo"), phi)
         self.assertAlmostEqual(el.e(), e, delta=0.01)
         self.assertEqual(el.caloCluster().e(), e)
         self.assertAlmostEqual(el.trackParticle().eta(), eta, delta=0.00001)
 
     def test_clean(self):
-        ROOT.xAOD.TEvent()
-
-        factory = ROOT.EgammaFactory()
-        runnumber = 10000
-        ei = factory.create_eventinfo(True, runnumber)
-        self.assertEqual(ei.runNumber(), runnumber)
+        ei = self.factory.create_eventinfo(True, self.RUN_NUMBER)
+        self.assertEqual(ei.runNumber(), self.RUN_NUMBER)
 
-        el = factory.create_electron(1, 2, 3, 4, 5, 6, 7)
+        el = self.factory.create_electron(1, 2, 3, 4, 5, 6, 7)
         self.assertAlmostEqual(el.eta(), 1)
 
-        factory.clear()
+        self.factory.clear()
 
-        el = factory.create_electron(1, 2, 3, 4, 5, 6, 7)
+        el = self.factory.create_electron(1, 2, 3, 4, 5, 6, 7)
         self.assertAlmostEqual(el.eta(), 1)
 
     def test_decoration(self):
-        ROOT.xAOD.TEvent()
+        ei = self.factory.create_eventinfo(True, self.RUN_NUMBER)
+        self.assertEqual(ei.runNumber(), self.RUN_NUMBER)
 
-        factory = ROOT.EgammaFactory()
-        runnumber = 10000
-        ei = factory.create_eventinfo(True, runnumber)
-        self.assertEqual(ei.runNumber(), runnumber)
+        el = self.factory.create_electron(1, 2, 3, 4, 5, 6, 7)
+        el.auxdecor["double"]("mydeco")
+        el.auxdataConst["double"]("mydeco")
 
-        el = factory.create_electron(1, 2, 3, 4, 5, 6, 7)
-        el.auxdecor("double")("mydeco")
-        el.auxdataConst("double")("mydeco")
+        el = self.factory.create_electron(1, 2, 3, 4, 5, 6, 7)
+        el.auxdataConst["double"]("mydeco")
 
-        el = factory.create_electron(1, 2, 3, 4, 5, 6, 7)
-        el.auxdataConst("double")("mydeco")
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/CMakeLists.txt b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/CMakeLists.txt
deleted file mode 100644
index e613f35f296578d248c395d433028ba4c72dd015..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/CMakeLists.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-# Declare the package name:
-atlas_subdir( egammaMVACalibAnalysis )
-
-# External dependencies:
-find_package( ROOT COMPONENTS Tree TreePlayer TMVA XMLIO Core MathCore Hist RIO )
-
-# Component(s) in the package:
-atlas_add_library( egammaMVACalibAnalysisLib
-   egammaMVACalibAnalysis/*.h Root/*.cxx
-   PUBLIC_HEADERS egammaMVACalibAnalysis
-   INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-   LINK_LIBRARIES ${ROOT_LIBRARIES} AsgMessagingLib AsgTools xAODCaloEvent xAODEgamma
-   xAODTracking egammaMVACalibLib
-   PRIVATE_LINK_LIBRARIES PathResolver MVAUtils )
-
-if( NOT XAOD_STANDALONE )
-   atlas_add_component( egammaMVACalibAnalysis
-      src/*.cxx src/components/*.cxx
-      LINK_LIBRARIES egammaMVACalibAnalysisLib)
-endif()
-
-atlas_add_dictionary( egammaMVACalibAnalysisDict
-	egammaMVACalibAnalysis/egammaMVACalibAnalysisDict.h
-	egammaMVACalibAnalysis/selection.xml
-	LINK_LIBRARIES egammaMVACalibAnalysisLib )
-
-atlas_add_executable( egammaMVACalibAnalysis_mem_test_initialize
-   util/mem_test_initialize.cxx
-   LINK_LIBRARIES egammaMVACalibAnalysisLib )
-
-if( XAOD_STANDALONE )
-   atlas_add_executable( testClusterMVACalib
-      util/testClusterMVACalib.cxx
-      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-      LINK_LIBRARIES ${ROOT_LIBRARIES} xAODEventInfo xAODEgamma xAODCaloEvent
-      xAODCore AsgMessagingLib egammaMVACalibAnalysisLib )
-endif()
-
-# Test(s) in the package:
-# Not working now because egammaMVACalibDict was removed.
-#atlas_add_test( mem_test SCRIPT test/mem_test.py
-#                PROPERTIES TIMEOUT 300
-#                LOG_IGNORE_PATTERN " GB$" )
-
-# Install files from the package:
-atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
-
-if (NOT XAOD_STANDALONE AND NOT XAOD_ANALYSIS)
-  atlas_add_test( flake8_test
-                  SCRIPT ${ATLAS_FLAKE8} ${CMAKE_CURRENT_SOURCE_DIR}/test
-                  POST_EXEC_SCRIPT nopost.sh )
-endif ()
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVACalib.cxx b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVACalib.cxx
deleted file mode 100644
index 08c72c881e18e71cc47b361583a0b1d0226cddbc..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVACalib.cxx
+++ /dev/null
@@ -1,1483 +0,0 @@
-/*
-  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <cassert>
-#include <fstream>
-#include <iostream>
-#include <map>
-#include <memory>
-#include <string>
-#include <utility>
-
-#include <vector>
-#include <stdexcept>
-
-#include <TPRegexp.h>
-#include <TObjArray.h>
-#include <TObjString.h>
-#include <TSystemDirectory.h>
-#include <TSystemFile.h>
-#include <TSystem.h>
-#include <TMath.h>
-#include <TTreeFormula.h>
-#include <TTree.h>
-#include <TList.h>
-#include <TChain.h>
-#include <TFile.h>
-#include <TXMLEngine.h>
-#include <TH2Poly.h>
-#include <TAxis.h>
-#include <TF1.h>
-#include <TFile.h>
-
-#include <TMVA/Reader.h>
-#include <TMVA/MethodBDT.h>
-
-#include "egammaMVACalib/egammaMVALayerDepth.h"
-#include "egammaMVACalibAnalysis/egammaMVACalib.h"
-#include "PathResolver/PathResolver.h"
-
-#include "MVAUtils/BDT.h"
-using namespace MVAUtils;
-
-#define CHECK_SETUPBDT(EXP) { \
-  if (!(EXP)) { \
-	 	ATH_MSG_WARNING( #EXP << " returned false (not present?), skipping " << f->GetName() ); \
-    f->Close(); \
-    return; \
-  } \
-}
-
-// TODO:
-// - DOCUMENTATION
-// - Print "empty" bins ?
-
-template<typename T>
-std::unique_ptr<T> loadFromFile(TFile* f, const std::string& key)
-{
-  return std::unique_ptr<T>( dynamic_cast<T*>(f->Get(key.c_str())));
-}
-
-egammaMVACalib::egammaMVACalib(int particle,
-                               bool useNewBDTs,
-                               const TString& folder,
-                               const TString & method,
-                               int calibrationType,
-                               bool debug,
-                               const TString& etaBinVar,
-                               const TString& energyBinVar,
-                               const TString& particleTypeVar,
-                               TString filePattern,
-                               bool ignoreSpectators)
-  : asg::AsgMessaging("egammaMVACalib"),
-    m_useNewBDTs(useNewBDTs),
-    m_methodName(method),
-    m_etaVar(etaBinVar),
-    m_energyVar(energyBinVar),
-    m_particleTypeVar(particleTypeVar),
-    m_ignoreSpectators(ignoreSpectators),
-    m_hasEnergyBins(false), m_binMultiplicity(0),
-    m_particleType(nullptr), m_eta(nullptr), m_energy(nullptr), m_initialEnergy(nullptr),
-    m_hPoly(nullptr),
-    m_tree(nullptr), m_input_tree(nullptr),
-    m_mvaOutput(0),
-    m_dummyFloat(0),
-    m_shiftType(NOSHIFT),
-    m_clusterFormula(nullptr)
-{
-    ATH_MSG_DEBUG("creating egammaMVACalib in debug mode with options:"
-          << "\n  particle     : " << particle
-          << "\n  new BDTs     : " << useNewBDTs
-          << "\n  folder       : " << folder
-          << "\n  method name  : " << m_methodName
-          << "\n  calib type   : " << calibrationType
-          << "\n  etavar       : " << m_etaVar
-          << "\n  energy var   : " << m_energyVar
-          << "\n  particle type: " << m_particleType
-          << "\n  file pattern : " << filePattern
-          << "\n  ignore spect : " << ignoreSpectators);
-
-  if (debug) { ATH_MSG_WARNING("debug flag is deprecated and has no effect"); }
-
-  setPeakCorrection(MEAN10TOTRUE);
-  useClusterIf0(true);
-
-  if (particle < 0 || particle >= static_cast<int>(NEGAMMATYPES))
-  {
-    // cppcheck-suppress shiftNegative // false positive
-    ATH_MSG_FATAL("Invalid argument for particle "<< particle);
-    throw std::runtime_error("Invalid argument for particle");
-  }
-
-  m_egammaType = static_cast<egammaType>(particle);
-
-  if (calibrationType < 0 || calibrationType >= static_cast<int>(NCalibrationTypes))
-  {
-    // cppcheck-suppress shiftNegative // false positive
-    ATH_MSG_FATAL("Invalid argument for calibrationType "<< calibrationType);
-    throw std::runtime_error("Invalid argument for calibrationType");
-  }
-  m_calibrationType = static_cast<CalibrationType>(calibrationType);
-
-  if (filePattern.Length() == 0)
-    filePattern = "MVACalib_(.*?)_(.*?)_<calibType>_<method>.weights.xml";
-  m_fileNamePattern = new TPRegexp(filePattern.ReplaceAll("<calibType>", getCalibTypeString()).ReplaceAll("<method>", m_methodName));
-  ATH_MSG_DEBUG("regex pattern: " << m_fileNamePattern->GetPattern());
-
-  // Use default formula for etaBin if not given
-  if (m_etaVar.Length() == 0) {
-    m_etaVar = (m_egammaType == egPHOTON) ? "ph_cl_eta" : "el_cl_eta";
-    ATH_MSG_DEBUG("etavar not specified: set to default " << m_etaVar);
-  }
-
-  // Use default formula for energyBin if not given
-  if (m_energyVar.Length() == 0)  {
-    m_energyVar = (m_egammaType == egPHOTON) ?
-      "(ph_rawcl_Es1 + ph_rawcl_Es2 + ph_rawcl_Es3)/cosh(ph_cl_eta)" :
-      "(el_rawcl_Es1 + el_rawcl_Es2 + el_rawcl_Es3)/cosh(el_cl_eta)";
-    ATH_MSG_DEBUG("energy var not specified: set to default " << m_energyVar);
-  }
-
-  // Define a formula for particleType if needed
-  if (m_egammaType != egELECTRON && m_particleTypeVar.Length() == 0)
-  {
-    // old: 0=unconverted, 1=converted not Si+Si, 2=converted Si+Si
-    // m_particleTypeVar = "(ph_convFlag%10 > 0) + (ph_convFlag%10 == 2 && (ph_convtrk1nPixHits + ph_convtrk1nSCTHits) > 1 && (ph_convtrk2nPixHits + ph_convtrk2nSCTHits) > 1)";
-    // current: 0=unconverted, 1=converted
-    m_particleTypeVar = "ph_Rconv > 0. && ph_Rconv < 800.";
-    ATH_MSG_INFO( "Variable that defines particleType not set. Using default formula: " << m_particleTypeVar.Data());
-  }
-
-  if (folder.Length() == 0) {
-    ATH_MSG_FATAL( "No calibration folder defined");
-    throw std::runtime_error("No calibration folder defined");
-  }
-  ATH_MSG_INFO("Accessing calibration from " << folder.Data());
-  // initializa MVA electron / photon
-
-  ATH_MSG_INFO("Reading weights from " <<folder.Data());
-
-  if (m_useNewBDTs) {
-    getBDTs(folder.Data());
-  }
-  else {
-    getReaders(folder);  // setup m_readers and m_additional_infos
-  }
-  if (!getNreaders())
-  {
-    ATH_MSG_FATAL("No reader defined");
-    throw std::runtime_error("No reader defined");
-  }
-
-  printReadersInfo();
-  ATH_MSG_INFO("Number of variables:" << m_formulae.size());
-  if (msgLvl(MSG::DEBUG)) {
-    for (std::map<TString, egammaMVACalib::VarFormula>::const_iterator it = m_formulae.begin(); it != m_formulae.end(); ++it)
-      ATH_MSG_DEBUG("formula: " << it->second.expression);
-  }
-  // Define the formulae to retrieve the reader corresponding to each particle
-  setupFormulasForReaderID();
-  // Define the formula to retrieve the initial energy (used in getMVAResponseTree)
-  defineInitialEnergyFormula();
-}
-
-
-
-/** Destructor **/
-egammaMVACalib::~egammaMVACalib()
-{
-  ATH_MSG_DEBUG("deleting formulae");
-  // Delete the formulae
-  std::map< TString, egammaMVACalib::VarFormula >::iterator it;
-  for (it = m_formulae.begin(); it != m_formulae.end(); ++it)
-    delete it->second.formula;
-
-  ATH_MSG_DEBUG("deleting the readers");
-  // Delete the readers
-  std::map< egammaMVACalib::ReaderID, TMVA::Reader* >::iterator itR;
-  for (itR = m_readers.begin(); itR != m_readers.end(); ++itR)
-    delete itR->second;
-
-  ATH_MSG_DEBUG("deleting the BDTs");
-  // Delete the readers
-  std::map< egammaMVACalib::ReaderID, BDT* >::iterator itB;
-  for (itB = m_BDTs.begin(); itB != m_BDTs.end(); ++itB) {
-    delete itB->second;
-  }
-
-  ATH_MSG_DEBUG("deleting filenamepattern at " << m_fileNamePattern);
-  delete m_fileNamePattern;
-  ATH_MSG_DEBUG("deleting m_hPoly at " << m_hPoly);
-  delete m_hPoly;
-
-  // Delete shift formulae
-  ATH_MSG_DEBUG("deleting m_shiftMap");
-  ShiftMap::iterator itS;
-  for (itS = m_shiftMap.begin(); itS != m_shiftMap.end(); ++itS)
-    delete itS->second;
-
-  ATH_MSG_DEBUG("deleting clusterFormula");
-  delete m_clusterFormula;
-
-  ATH_MSG_DEBUG("deleting internal tree");
-  delete m_tree;
-
-  ATH_MSG_DEBUG("finishing");
-}
-
-void egammaMVACalib::setPeakCorrection(const TString& shift_type)
-{
-  ShiftType shift = NOSHIFT;
-  if (shift_type == "NOSHIFT") shift = NOSHIFT;
-  else if (shift_type == "PEAKTOTRUE") shift = PEAKTOTRUE;
-  else if (shift_type == "MEANTOTRUE") shift = MEANTOTRUE;
-  else if (shift_type == "MEDIANTOTRUE") shift = MEDIANTOTRUE;
-  else if (shift_type == "MEAN10TOTRUE") shift = MEAN10TOTRUE;
-  else if (shift_type == "MEAN20TOTRUE") shift = MEAN20TOTRUE;
-  else if (shift_type == "MEDIAN10TOTRUE") shift = MEDIAN10TOTRUE;
-  else if (shift_type == "MEDIAN20TOTRUE") shift = MEDIAN20TOTRUE;
-  else {
-    ATH_MSG_FATAL("egammaMVACalib::setPeakCorrection non valid shift " << shift_type.Data());
-    throw std::runtime_error("not valid shift");
-  }
-  setPeakCorrection(shift);
-}
-
-
-TH2Poly* egammaMVACalib::getTH2Poly() const
-{
-  return dynamic_cast<TH2Poly*>(m_hPoly->Clone("hPoly"));
-}
-
-egammaMVACalib::AdditionalInfoMap
-egammaMVACalib::getUserInfo(const TString & xmlfilename)
-{
-  egammaMVACalib::AdditionalInfoMap result;
-
-  TXMLEngine xml;
-  XMLDocPointer_t xmldoc = xml.ParseFile(xmlfilename);
-  if (!xmldoc) {
-
-    xml.FreeDoc(xmldoc);
-    return result;
-  }
-  XMLNodePointer_t mainnode = xml.DocGetRootElement(xmldoc);
-
-  // loop to find <UserInfo>
-  XMLNodePointer_t user_infos_node = xml.GetChild(mainnode);
-  while (std::string(xml.GetNodeName(user_infos_node)) != "UserInfo")
-  {
-    user_infos_node = xml.GetNext(user_infos_node);
-    if (user_infos_node == nullptr) break;
-  }
-  if (!user_infos_node) {
-    xml.FreeDoc(xmldoc);
-    return result;
-  }
-
-  // loop over all children inside <UserInfo>
-  XMLNodePointer_t info_node = xml.GetChild(user_infos_node);
-  while (info_node != nullptr)
-  {
-    XMLAttrPointer_t attr = xml.GetFirstAttr(info_node);
-    TString name, value;
-    while (attr != nullptr) {
-      const TString key_name = xml.GetAttrName(attr);
-      const TString key_value = xml.GetAttrValue(attr);
-      if (key_name == "name") {
-        if (!name.Length()) name = key_value;
-        else {
-          xml.FreeDoc(xmldoc);
-          return result;
-        }
-      }
-      else if (key_name == "value") {
-        if (!value.Length()) value = key_value;
-        else {
-          xml.FreeDoc(xmldoc);
-          return result;
-        }
-      }
-      attr = xml.GetNextAttr(attr);
-    }
-    if (name.Length() and value.Length())
-    {
-      result.insert(std::make_pair(name, value));
-    }
-    else
-    {
-      static asg::AsgMessaging msg("egammaMVACalib::getUserInfo");
-      msg.msg(MSG::ERROR)<<"error reading UserInfo section xml file " << xmlfilename.Data()<<endmsg;
-    }
-    info_node = xml.GetNext(info_node);
-  }
-
-  xml.FreeDoc(xmldoc);
-  return result;
-}
-
-/** Loop over the files in the folder and instantiate one TMVA::Reader for each file
- * Files that do not match the required pattern are removed
- **/
-void egammaMVACalib::getReaders(const TString & folder)
-{
-  ATH_MSG_DEBUG("<getReaders> in folder: " << folder);
-  m_hPoly = new TH2Poly();
-  std::vector< TMVA::Reader* > readers;
-
-  TString path(folder);
-  gSystem->ExpandPathName(path); // expand special characters
-  TSystemDirectory dir("", path.Data());
-  TList* list_of_files = dir.GetListOfFiles();
-
-  if (!list_of_files)
-  {
-    ATH_MSG_FATAL("egammaMVACalib::getReaders Directory doesn't exist" << folder.Data());
-    throw std::runtime_error("Directory doesn't exist");
-  }
-  ATH_MSG_DEBUG("found " << list_of_files->GetEntries() << " files");
-  ATH_MSG_DEBUG("searching all xml files with pattern " << m_fileNamePattern->GetPattern());
-
-  TSystemFile *file;
-  TIter next(list_of_files);
-  egammaMVACalib::ReaderID key{};
-
-  while ((file=(TSystemFile*)next()))
-  {
-    TString fileName = file->GetName();
-    if (!fileName.EndsWith("xml")) continue;
-    if (!parseFileName(fileName, key)) {
-      ATH_MSG_WARNING("egammaMVACalib::getReaders filename not valid, skipping " << fileName.Data());
-      continue;
-    }
-
-    if (m_readers.find(key) != m_readers.end()) {
-      ATH_MSG_FATAL("egammaMVACalib::getReaders trying to create the same reader twice");
-      throw std::runtime_error("trying to create the same reader twice");
-    }
-
-    //  cout << "create " << key.bin << endl;
-    m_readers[key] = new TMVA::Reader("Silent");
-
-    setupReader(m_readers[key], path + "/" + fileName);
-    AdditionalInfoMap infos = getUserInfo(path + "/" + fileName);
-    m_additional_infos.insert(std::make_pair(key, infos));
-  }
-
-  delete list_of_files;
-}
-
-void egammaMVACalib::getBDTs(const std::string & folder)
-{
-  ATH_MSG_DEBUG("<getBDTs> in folder: " << folder);
-  if (m_egammaType == egPHOTON)
-  {
-    setupBDT(PathResolverFindCalibFile(folder + "/MVACalib_unconvertedPhoton.weights.root"));
-    setupBDT(PathResolverFindCalibFile(folder + "/MVACalib_convertedPhoton.weights.root"));
-  }
-  else
-    setupBDT(PathResolverFindCalibFile(folder + "/MVACalib_electron.weights.root"));
-
-  m_binMultiplicity = 2; // just to print...
-}
-
-void egammaMVACalib::setupBDT(const TString& fileName)
-{
-  egammaMVACalib::ReaderID key{};
-  if (!parseFileName(fileName, key.particleType)) return;
-  ATH_MSG_DEBUG("Setup BDT for particle " << key.particleType);
-
-  std::unique_ptr<TFile> f(TFile::Open(fileName));
-  CHECK_SETUPBDT( f.get() && !f->IsZombie() );
-
-  // Load hPoly
-  auto hPoly = loadFromFile<TH2Poly>(f.get(), "hPoly");
-  CHECK_SETUPBDT( hPoly );
-
-  if (!m_hPoly) m_hPoly = (TH2Poly*) hPoly->Clone();
-  m_hPoly->SetDirectory(nullptr);
-  CHECK_SETUPBDT( m_hPoly );
-
-  // Load formulae
-  auto formulae = loadFromFile<TObjArray>(f.get(), "formulae");
-  CHECK_SETUPBDT( formulae );
-  formulae->SetOwner(); // to delete the objects when d-tor is called
-
-  // Load variables
-  auto variables = loadFromFile<TObjArray>(f.get(), "variables");
-  CHECK_SETUPBDT( variables );
-  variables->SetOwner(); // to delete the objects when d-tor is called
-
-  // Load shifts
-  auto shifts = loadFromFile<TObjArray>(f.get(), "shifts");
-  CHECK_SETUPBDT( shifts );
-  shifts->SetOwner(); // to delete the objects when d-tor is called
-
-  // Load trees
-  auto trees = loadFromFile<TObjArray>(f.get(), "trees");
-  if (trees) {
-    trees->SetOwner(); // to delete the objects when d-tor is called
-    ATH_MSG_DEBUG("setupBDT " << "BDTs read from TObjArray");
-  }
-  else{
-    ATH_MSG_DEBUG("setupBDT " << "Reading trees individually");
-    trees = std::make_unique<TObjArray>();
-    trees->SetOwner(); // to delete the objects when d-tor is called
-    for (int i = 0; i < variables->GetEntries(); ++i)
-    {
-      TTree *tree = dynamic_cast<TTree*>(f->Get(Form("BDT%d", i)));
-      if (tree) tree->SetCacheSize(0);
-      trees->AddAtAndExpand(tree, i);
-    }
-  }
-
-  // Ensure the objects have (the same number of) entries
-  CHECK_SETUPBDT( trees->GetEntries() );
-  CHECK_SETUPBDT( (trees->GetEntries() == variables->GetEntries()) );
-
-  // (pre) define formulae
-  TNamed *formula;
-  TIter nextFormula(formulae.get());
-  while ((formula = (TNamed*) nextFormula())){
-    predefineFormula(formula->GetName(), formula->GetTitle(), "variable");
-  }
-
-  // Loop simultaneously over trees, variables and shifts
-  // Define the BDTs, the list of variables and the shift for each BDT
-  TObjString *str2, *shift;
-  TTree *tree;
-  TIter nextTree(trees.get());
-  TIter nextVariables(variables.get());
-  TIter nextShift(shifts.get());
-  for (int i=0; (tree = (TTree*) nextTree()) && ((TObjString*) nextVariables()); ++i)
-  {
-    key.bin = i+1; // bin has an offset
-    BDT *bdt = new BDT(tree);
-    m_BDTs[key] = bdt;
-    std::vector<float*> pointers;
-
-    // Loop over variables, which are separated by comma
-    char separator_var = ';';
-    if (getString(variables->At(i)).Index(";") < 1) separator_var = ','; // old versions
-    std::unique_ptr<TObjArray> tokens(getString(variables->At(i)).Tokenize(separator_var));
-    TIter nextVar(tokens.get());
-    while ((str2 = (TObjString*) nextVar()))
-    {
-      TString varName = getString(str2);
-      if (!varName.Length()) continue;
-      std::map< TString, VarFormula >::iterator it = m_formulae.find(varName);
-      if (it == m_formulae.end())
-      {
-        ATH_MSG_FATAL("egammaMVACalib::setupBDT Variable not defined: "<< varName.Data());
-        throw std::runtime_error("Variable not defined");
-      }
-      pointers.push_back(&(it->second.variable));
-    }
-    bdt->SetPointers(pointers);
-    shift = (TObjString*) nextShift();
-    if (shift) m_additional_infos[key]["Mean10"] = getString(shift);
-  }
-
-}
-
-
-bool egammaMVACalib::parseFileName(const TString & fileName, egammaMVACalib::ReaderID &key)
-{
-  // Check if the fileName matches the expected pattern for readers
-  std::unique_ptr<TObjArray> match(m_fileNamePattern->MatchS(fileName));
-  if (!match or match->GetEntries() != 3) {
-    return false;
-  }
-
-  // Define the ParticleType, convert the string to the enum
-  TString pType = getString(match->At(1));
-  egammaMVACalib::ParticleType particleType = getParticleType(pType);
-  if (particleType == INVALIDPARTICLE) return false;
-
-  // Use the fileName to define the fields (eta/energy) and the range of each field
-  // (split the fileName assuming the fields are separated by "_")
-  TString binDef = getString(match->At(2));   // e.g. Et20-40_eta1.55-1.74
-  //   delete match;
-
-  std::unique_ptr<TObjArray> binArray(binDef.Tokenize("_"));
-  if (!binArray) return false;
-
-  TIter next(binArray.get());
-
-  // Define the bin multiplicity (1D, 2D)
-  if (!m_binMultiplicity)
-    m_binMultiplicity = binArray->GetSize() - 1;
-  else if (m_binMultiplicity != binArray->GetSize() - 1)
-  {
-    ATH_MSG_FATAL("parseFileName Mismatch in bin definition from file names");
-    throw std::runtime_error("(parseFileName) Mismatch in bin definition from file names");
-  }
-
-  TPRegexp binPattern("(eta|Et|E)(.*)-(.*)"); // TODO: better, * -> +
-  float etaMin = 0., etaMax = 1e99, energyMin = 0., energyMax = 1e99;
-  TObjString *sObj;
-  while ((sObj = (TObjString*) next()))
-  {
-    TObjArray* binMatch = binPattern.MatchS(sObj->GetString());
-    if (!binMatch || binMatch->GetEntries() != 4)
-    {
-      ATH_MSG_WARNING("egammaMVACalib::setupBDT " << "Could not interpret (from fileName): " << binDef.Data());
-      return false;
-    }
-    // Define the min/max of eta/E
-    TString binName = getString(binMatch->At(1));
-    if (binName == "eta")
-    {
-      etaMin = getString(binMatch->At(2)).Atof();
-      etaMax = getString(binMatch->At(3)).Atof();
-    }
-    else if (binName == "E" || binName == "Et")
-    {
-      energyMin = getString(binMatch->At(2)).Atof();
-      energyMax = getString(binMatch->At(3)).Atof();
-    }
-    delete binMatch;
-  }
-
-  key.particleType = particleType;
-  key.bin = getBin(etaMin, etaMax, energyMin, energyMax);
-  return true;
-}
-
-bool egammaMVACalib::parseFileName(const TString & fileName, egammaMVACalib::ParticleType &particleType)
-{
-  // Check if the fileName matches the expected pattern for readers
-  TPRegexp fileNamePattern("MVACalib_(.*?).weights.root");
-  std::unique_ptr<TObjArray> match(fileNamePattern.MatchS(fileName));
-  if (!match or match->GetEntries() != 2) {
-    return false;
-  }
-  ATH_MSG_DEBUG("Checking: " << fileName.Data());
-  // Define the ParticleType, convert the string to the enum
-  TString pType = getString(match->At(1));
-  particleType = getParticleType(pType);
-  return particleType != INVALIDPARTICLE;
-}
-
-TString egammaMVACalib::getBinName(const TString & binField)
-{
-  if (binField.BeginsWith("eta"))
-    return TString("eta");
-  if (binField.BeginsWith("Et"))
-    return TString("Et");
-  if (binField.BeginsWith("E"))
-    return TString("E");
-  return TString();
-
-  // TString m_binVars("eta,E"),
-  // Loop over the possible fields (defined by m_binVars)
-  // and return the (first) one that matches the given string
-  //    TIter varNext(m_binVars.Tokenize(",")); // possible fields are separated by a comma
-  //    TObjString *varCandidate;
-  //    while ((varCandidate = (TObjString*) varNext()))
-  //    {
-  //       TString binName = varCandidate->GetString();
-  //       if (binField.BeginsWith(binName))
-  //          return binName;
-  //    }
-  //    return TString();
-
-}
-
-int egammaMVACalib::getBin(float etaMin, float etaMax, float energyMin, float energyMax)
-{
-  int bin = m_hPoly->FindBin(0.5*(etaMin + etaMax), 0.5*(energyMin + energyMax));
-  // Insert bin or check the edges to avoid overlapping
-  // subtract 1e-10 because TH2Poly does not include low edge
-  if (bin < 0)
-  {
-    bin = m_hPoly->AddBin(etaMin - 1e-10, energyMin - 1e-10, etaMax, energyMax);
-    m_hPoly->SetBinContent(bin, bin); // just for drawing, no use
-    ATH_MSG_DEBUG("New bin ("
-			       << bin << "):"
-			       << " etaMin = "
-			       << etaMin << " / etaMax = "
-			       << etaMax
-			       << " / Emin = "
-			       << energyMin
-			       << " / Emax = "
-			       << energyMax);
-  }
-  else if (!checkBin(bin, etaMin, etaMax, energyMin, energyMax))
-    assert(false);
-
-  return bin;
-}
-
-void egammaMVACalib::setupReader(TMVA::Reader *reader, const TString & xml_filename)
-{
-  //ATH_MSG_DEBUG("In setupReader: " <<  xml_filename);
-  std::vector<egammaMVACalib::XmlVariableInfo> variable_infos = parseXml(xml_filename);
-
-  // Add variables and spectators using the floats from m_formulae
-  // Each TTreeFormula is defined later in InitTree
-  for (std::vector<egammaMVACalib::XmlVariableInfo>::const_iterator itvar = variable_infos.begin();
-       itvar != variable_infos.end(); ++itvar)
-  {
-    // Define the variable / spectator name and expression
-    TString infoType  = (TString(itvar->nodeName).Contains("Variable") ?
-                         "variable" : "spectator");
-    TString expression = itvar->expression;
-    TString varName    = itvar->label;
-
-    if (!m_ignoreSpectators || infoType != "spectator")
-      predefineFormula(varName, expression, infoType, itvar->varType);
-    // Add variable / spectator to the reader
-    // Define expression (if different than variable name)
-    TString varDefinition(varName);
-    if (varName != expression)
-      varDefinition += " := " + expression;
-    //ATH_MSG_DEBUG("Adding " << infoType << " " << varDefinition);
-
-    if (infoType == "variable")
-      reader->AddVariable(varDefinition, &(m_formulae[varName].variable));
-    else if (infoType == "spectator" && !m_ignoreSpectators)
-      reader->AddSpectator(varDefinition, &(m_formulae[varName].variable));
-    else if (infoType == "spectator")
-      reader->AddSpectator(varDefinition, &m_dummyFloat);
-    else // should never happen
-    {
-      ATH_MSG_FATAL("(setupReader) : Unknown type from parser " << infoType.Data());
-      throw std::runtime_error("(setupReader) : Unknown type from parser");
-    }
-  }
-
-  reader->BookMVA(m_methodName.Data(), xml_filename.Data());
-}
-
-void egammaMVACalib::setupFormulasForReaderID()
-{
-  std::map< TString, egammaMVACalib::VarFormula >::iterator it = m_formulae.end();
-  if (m_egammaType != egELECTRON && m_particleTypeVar.Length())
-  {
-    predefineFormula("particleType", m_particleTypeVar, "other");
-    m_particleType = &(m_formulae["particleType"].variable);
-    assert(m_particleType);
-  }
-
-  if (/*m_hasEnergyBins &&*/ m_energyVar.Length())
-  {
-    it = m_formulae.find(m_energyVar);
-    if (it == m_formulae.end()) // does not correspond to a variable
-    {
-      predefineFormula("energyBin", m_energyVar, "other");
-      m_energy = &(m_formulae["energyBin"].variable);
-    }
-    else
-      m_energy = &(it->second.variable);
-    assert(m_energy);
-  }
-
-  if (m_etaVar.Length())
-  {
-    it = m_formulae.find(m_etaVar);
-    if (it == m_formulae.end()) // does not correspond to a variable
-    {
-      predefineFormula("etaBin", m_etaVar, "other");
-      m_eta = &(m_formulae["etaBin"].variable);
-    }
-    else
-      m_eta = &(it->second.variable);
-    assert(m_eta);
-  }
-}
-
-void egammaMVACalib::predefineFormula(const TString & name, const TString & expression,
-                                      const TString & infoType, const TString & valueType)
-{
-  // Look for a previously defined formula
-  std::map< TString, VarFormula >::iterator it = m_formulae.find(name);
-  if (it == m_formulae.end()) // variable not yet defined
-  {
-    VarFormula v = { 0, expression, infoType, valueType, nullptr, 0 };
-    m_formulae[name] = v;
-    ATH_MSG_DEBUG("Formula " << name << " := " << expression);
-  }
-  // variable defined, compare the expressions
-  else if (it->second.expression != expression)
-  {
-    ATH_MSG_FATAL("predefineFormula, Expressions for do not match. Old: New:" <<name.Data() << it->second.expression.Data() << expression.Data());
-    throw std::runtime_error("Expressions do not match");
-  }
-  else if (infoType == "variable" && it->second.infoType != "variable")
-  {
-    ATH_MSG_DEBUG("Setting " << name << " to \"variable\"");
-    it->second.infoType = "variable";
-  }
-}
-
-
-egammaMVACalib::ReaderID egammaMVACalib::getReaderID()
-{
-  egammaMVACalib::ReaderID key = { (ParticleType) getParticleType(), getBin() }; //getEtaBin(), getEnergyBin() };
-  return key;
-}
-
-int egammaMVACalib::getParticleType() const
-{
-  if (m_egammaType == egELECTRON)
-    return ELECTRON;
-  assert(m_particleType);
-  return static_cast<int>(*m_particleType + 0.5); // +0.5 to avoid bad truncation
-}
-
-/** Return the eta / Et bin for the current entry using the etaBinVar(iable)/energy... **/
-int egammaMVACalib::getBin() const
-{
-  const float eta = TMath::Abs(m_eta ? *m_eta : 0.);
-  const float energy = (m_energy ? (*m_energy)/1e3 : 0.);
-  ATH_MSG_DEBUG("(getBin) eta = " << eta << " energy = " << energy << " bin = " << m_hPoly->FindBin(eta, energy));
-  return m_hPoly->FindBin(eta, energy);
-}
-
-
-TTree* egammaMVACalib::createInternalTree(TTree *tree)
-{
-  ATH_MSG_DEBUG("Creating internal tree");
-  if (!tree) {
-      ATH_MSG_FATAL("tree is null");
-      throw std::runtime_error("Null pointer");
-  }
-  TTree* new_tree = new TTree();
-  new_tree->SetDirectory(nullptr);
-  new_tree->SetCacheSize(0);
-
-  new_tree->Branch(m_methodName.Data(), &m_mvaOutput, Form("%s/F", m_methodName.Data()));
-  checkShowerDepth(tree);
-
-  return new_tree;
-}
-
-
-void egammaMVACalib::InitTree(TTree* tree, bool doNotify)
-{
-  ATH_MSG_DEBUG("InitTree");
-  if (!m_tree) m_tree = createInternalTree(tree);
-  if (tree)
-  {
-    if (m_input_tree == tree) return;
-    m_input_tree = tree;
-    m_tree->AddFriend(m_input_tree);
-  }
-
-  // tree changed (eg new file or first time InitTree is called)
-  ATH_MSG_DEBUG("tree changed / new tree");
-
-
-  // Loop over the formula map and instantiate the formulae
-  ATH_MSG_DEBUG("Instantiating formulae");
-  std::map< TString, egammaMVACalib::VarFormula >::iterator formulaIt;
-  for (formulaIt = m_formulae.begin(); formulaIt != m_formulae.end(); ++formulaIt)
-  {
-    TString varName(formulaIt->first);
-    egammaMVACalib::VarFormula *varFormula = &(formulaIt->second);
-    // TODO: delete old formula
-    varFormula->formula = defineFormula(varName, varFormula->expression, m_tree);
-
-    if (!formulaIt->second.formula)
-    {
-      ATH_MSG_FATAL("InitTree Could not define formula");
-      throw std::runtime_error("Could not define formula");
-    }
-  }
-
-  // Instantiate the formulae for the shifts
-  ATH_MSG_DEBUG("Instantiating formulae for the shifts");
-  std::map< egammaMVACalib::ReaderID, egammaMVACalib::AdditionalInfoMap>::iterator it;
-  for (it = m_additional_infos.begin(); it != m_additional_infos.end(); ++it)
-    defineShiftFormula(it->first);
-
-  // Instantiate the formula for cluster energy
-  ATH_MSG_DEBUG("Instantiating formulae for cluster energy");
-  defineClusterEnergyFormula();
-
-  if (tree and doNotify) {
-    for (formulaIt = m_formulae.begin(); formulaIt != m_formulae.end(); ++formulaIt) {
-      m_notify_dispatcher.add_object(formulaIt->second.formula);
-    }
-
-    if (m_clusterFormula) { m_notify_dispatcher.add_object(m_clusterFormula); }
-
-    m_input_tree->SetNotify(&m_notify_dispatcher);
-  }
-  ATH_MSG_DEBUG("Init tree done");
-}
-
-TTreeFormula* egammaMVACalib::defineFormula(const TString & varName, const TString & expression, TTree *tree)
-{
-  // Define and check the formula
-  TTreeFormula* formula = new TTreeFormula(varName.Data(), expression.Data(), tree);
-  if (!formula->GetNdim())
-  {
-    ATH_MSG_FATAL("defineFormula Invalid formula: (probably branch not present) " << varName.Data() << expression.Data());
-    throw std::runtime_error("Invalid formula");
-  }
-  ATH_MSG_DEBUG("Formula: " << formula->GetName() << " := " << formula->GetTitle());
-
-  return formula;
-}
-
-
-/** Set the variables for the reader, copying the results from the formulae **/
-void egammaMVACalib::LoadVariables(int index)
-{
-  ATH_MSG_DEBUG("LoadVariables(" << index << ")");
-  std::map< TString, egammaMVACalib::VarFormula >::iterator formulaIt;
-  for (formulaIt = m_formulae.begin(); formulaIt != m_formulae.end(); ++formulaIt)
-  {
-    egammaMVACalib::VarFormula *varFormula = &(formulaIt->second);
-    assert(varFormula);
-    if (!varFormula->external) {
-      assert(varFormula->formula);
-      varFormula->formula->GetNdata(); // Avoids getting wrong values...
-      ATH_MSG_DEBUG("evaluating formula " << varFormula->expression
-                         << " TTreeFormula::Title=" << varFormula->formula->GetTitle()
-                         << " for index " << index);
-      varFormula->variable = varFormula->formula->EvalInstance(index);
-    }
-    ATH_MSG_DEBUG("Value of " << formulaIt->first << " : " << varFormula->variable);
-  }
-}
-
-float* egammaMVACalib::getAddress(const TString & input_name)
-{
-  std::map< TString, egammaMVACalib::VarFormula >::iterator it = m_formulae.find(input_name);
-  if (it == m_formulae.end()) {
-    std::string formulae_string = "";
-    for (std::map< TString, egammaMVACalib::VarFormula >::iterator it2 = m_formulae.begin();
-         it2 != m_formulae.end(); ++it2) {
-      formulae_string += std::string(" ") + it2->first + std::string(" ");
-    }
-    ATH_MSG_FATAL("getAddress , formula not found. "  << input_name.Data() <<" Should be one of "<< formulae_string.c_str());
-    throw std::runtime_error("formula not found");
-  }
-  return &(it->second.variable);
-}
-
-void egammaMVACalib::setExternal(const TString & input_name)
-{
-  std::map< TString, egammaMVACalib::VarFormula >::iterator it = m_formulae.find(input_name);
-  if (it == m_formulae.end()) {
-    std::string formulae_string = "";
-    for (std::map< TString, egammaMVACalib::VarFormula >::iterator it2 = m_formulae.begin();
-         it2 != m_formulae.end(); ++it2) {
-      formulae_string += std::string(" ") + it2->first + std::string(" ");
-    }
-    ATH_MSG_FATAL("setExternal , formula not found. "  << input_name.Data() <<" Should be one of "<< formulae_string.c_str());
-    throw std::runtime_error("formula not found");
-  }
-  it->second.external = true;
-}
-
-void egammaMVACalib::printValueInput()
-{
-  std::map< TString, egammaMVACalib::VarFormula >::iterator formulaIt;
-  ATH_MSG_INFO("printValueInput" << "information about last evaluation");
-  for (formulaIt = m_formulae.begin(); formulaIt != m_formulae.end(); ++formulaIt)
-  {
-    egammaMVACalib::VarFormula *varFormula = &(formulaIt->second);
-    assert(varFormula);
-    assert(varFormula->formula);
-    ATH_MSG_INFO ("printValueInput formula: "
-		  << formulaIt->first.Data()
-		  <<"\n   expression: "
-		  << varFormula->expression.Data()
-		  <<"\n   TTreeFormula::Title= "
-		  << varFormula->formula->GetTitle()
-		  <<"\n  value: " << varFormula->variable);
-  }
-}
-
-int egammaMVACalib::getNdata()
-{
-  TTreeFormula *testFormula = m_formulae.begin()->second.formula;
-  if (!testFormula || testFormula->GetNdim() == 0)
-  {
-    ATH_MSG_FATAL("getNdata , Could not get TTreeFormula");
-    throw std::runtime_error("Could not get TTreeFormula");
-  }
-  return testFormula->GetNdata();
-}
-
-
-TTree* egammaMVACalib::getMVAResponseTree(TTree *tree, int Nentries, TString branchName,
-                                          const TString& copyBranches, int first_event, bool flatten, int update)
-{
-  if (!tree)
-  {
-    ATH_MSG_WARNING("getMVAResponseTree " << "Null pointer to tree");
-    return nullptr;
-  }
-
-  InitTree(tree);
-
-  // Choose a TTreeFormula to define the number of instances per entry
-  // (and define if we have vectors...)
-  TTreeFormula *testFormula = m_formulae.begin()->second.formula;
-  if (!testFormula || testFormula->GetNdim() == 0)
-  {
-    ATH_MSG_FATAL("getMVAResponseTree Could not get TTreeFormula for testing");
-    throw std::runtime_error("Could not get TTreeFormula for testing");
-  }
-
-  TTree *mvaTree = getOutputTree(copyBranches, true);
-  activateBranches();
-
-  // Define the output branch and the variables to fill it
-  if (branchName == "")
-    branchName = m_methodName;
-  bool useVector(false);
-  float mvaOutput;
-  std::vector<float> mvaVector;
-
-  // Use a vector (the dimension of the formula should tell) ?
-  if (!flatten && testFormula->GetMultiplicity() == 1)
-  {
-    useVector = true;
-    mvaTree->Branch(branchName.Data(), &mvaVector);
-  }
-  else
-    mvaTree->Branch(branchName.Data(), &mvaOutput, Form("%s/F", m_methodName.Data()));
-
-  // Loop over the entries of the input tree
-  if (Nentries == -1) Nentries = tree->GetEntries() - first_event;
-  ATH_MSG_INFO("Entries to process: " << Nentries);
-  for (int ientry=first_event; ientry < Nentries + first_event; ++ientry)
-  {
-    ATH_MSG_DEBUG("Processing entry " << ientry);
-    if (ientry%update == 0) ATH_MSG_INFO ("Processing entry " << ientry);
-    if (useVector) mvaVector.clear();
-    if (tree->GetEntry(ientry) < 0) return mvaTree;
-
-    // Loop over the indices inside the entry
-    // Fill the tree (or the vector)
-    for (int index = 0; index < testFormula->GetNdata(); ++index)
-    {
-      mvaOutput = getMVAEnergy(index);
-      if (!useVector)
-        mvaTree->Fill();
-      else
-        mvaVector.push_back(mvaOutput);
-    }
-    if (useVector) mvaTree->Fill();
-  }
-  ATH_MSG_INFO("Processing done: " << Nentries << " written");
-  return mvaTree;
-}
-
-/** Get the MVA output (or 0 if the correponding TMVA::Reader is not found) **/
-float egammaMVACalib::getMVAOutput(int index /* = 0 */)
-{
-  LoadVariables(index);
-  if (m_useNewBDTs)
-  {
-    BDT *bdt = getBDT(getReaderID());
-    if (!bdt) return 0;
-    return bdt->GetResponse();
-  }
-  // Find the corresponding reader
-  TMVA::Reader *reader = getReader(getReaderID());
-  if (msgLvl(MSG::DEBUG))
-  {
-    std::stringstream ss;
-    ss << "index = " << index << " / particle = " << getParticleType();
-    if (m_eta) ss << " / eta = " << *m_eta;
-    if (m_energy) ss << " / energy = " << *m_energy;
-    if (!reader)
-      ATH_MSG_DEBUG("-- No reader found, " << ss.str());
-    else
-      ATH_MSG_DEBUG("-- Found reader, " << ss.str());
-  }
-
-  if (!reader)
-    return 0;
-  return reader->EvaluateRegression(m_methodName.Data())[0];
-}
-
-
-float egammaMVACalib::getMVAEnergy(int index /* = 0 */,
-                                   ShiftType shift_type /* =NSHIFTCORRECTIONS */)
-{
-  m_mvaOutput = getMVAOutput(index);
-  ATH_MSG_DEBUG("MVA output = " << m_mvaOutput);
-  if (m_mvaOutput == 0.)
-  {
-    if (m_clusterEif0 && m_clusterFormula)
-    {
-      m_clusterFormula->GetNdata(); // FIXME: seems this is needed to prevent 0s...
-      float clusterE = m_clusterFormula->EvalInstance(index);
-      ATH_MSG_DEBUG("Returning cluster E: " << clusterE);
-      return clusterE;
-    }
-    return 0.;
-  }
-  float energy = 0;
-  if (m_calibrationType == fullCalibration)
-    energy = m_mvaOutput;
-  else if (m_initialEnergy)
-    energy = (*m_initialEnergy) * m_mvaOutput;
-
-  ATH_MSG_DEBUG("energy after MVA = " << energy);
-
-  ShiftType shift_to_use = m_shiftType;
-  if (shift_type != NSHIFTCORRECTIONS) shift_to_use = shift_type;
-
-  egammaMVACalib::ReaderID key = getReaderID();
-  float shift = getShift(energy / cosh(*m_eta), key, shift_to_use);
-  ATH_MSG_DEBUG("shift = " << shift);
-  if (shift > 0.5)
-    return energy / shift;
-  ATH_MSG_WARNING("getMVAEnergy " << "Shift not applied (too small or negative value?)");
-  return energy;
-}
-
-void egammaMVACalib::defineInitialEnergyFormula()
-{
-  if (m_calibrationType == fullCalibration)
-    return;
-
-  std::map< TString, egammaMVACalib::VarFormula >::iterator it = m_formulae.end();
-
-  if (m_calibrationType == correctEcluster)
-  {
-    if (m_egammaType == egPHOTON)
-      it = m_formulae.find("ph_cl_E");
-    else
-      it = m_formulae.find("el_cl_E");
-  }
-  else if (m_calibrationType == correctEaccordion)
-  {
-    if (m_egammaType == egPHOTON)
-      it = m_formulae.find("ph_rawcl_Eacc");
-    else
-      it = m_formulae.find("el_rawcl_Eacc");
-  }
-  else assert(false);
-
-  if (it == m_formulae.end())
-  {
-    ATH_MSG_INFO("defineInitialEnergyFormula" << "Trying to define formula for initial energy...");
-    TString expr = (m_egammaType == egPHOTON) ?
-      "ph_rawcl_Es1 + ph_rawcl_Es2 + ph_rawcl_Es3" :
-      "el_rawcl_Es1 + el_rawcl_Es2 + el_rawcl_Es3";
-
-    predefineFormula("initEnergy", expr, "other", "F");
-    it = m_formulae.find("initEnergy");
-  }
-
-  if (it != m_formulae.end())
-    m_initialEnergy = &(it->second.variable);
-  else
-  {
-    ATH_MSG_WARNING("defineInitialEnergyFormula " << "Could not define formula for initial energy");
-  }
-  // TODO: define formula
-}
-
-
-std::vector<egammaMVACalib::XmlVariableInfo>
-egammaMVACalib::parseXml(const TString & xml_filename)
-{
-  std::vector<egammaMVACalib::XmlVariableInfo> result;
-
-  TXMLEngine xml;
-  XMLDocPointer_t xmldoc = xml.ParseFile(xml_filename);
-  if (!xmldoc) {
-      static asg::AsgMessaging msg("egammaMVACalib::parseXml");
-      msg.msg(MSG::FATAL)<<" file not found "  <<xml_filename.Data() << " current directory is:  " <<  gSystem->WorkingDirectory()<<endmsg;
-      throw std::runtime_error("file not found");
-  }
-  XMLNodePointer_t mainnode = xml.DocGetRootElement(xmldoc);
-
-  // loop to find <Variables> and <Spectators>
-  XMLNodePointer_t node = xml.GetChild(mainnode);
-  while (node)
-  {
-    node = xml.GetNext(node);
-    TString nodeName = xml.GetNodeName(node);
-    if (nodeName == "Variables" || nodeName == "Spectators") {
-      std::vector<egammaMVACalib::XmlVariableInfo> r = parseVariables(&xml, node, nodeName);
-      result.insert(result.end(), r.begin(), r.end());
-    }
-  }
-  xml.FreeDoc(xmldoc);
-  return result;
-}
-
-std::vector<egammaMVACalib::XmlVariableInfo>
-egammaMVACalib::parseVariables(TXMLEngine *xml, void* node, const TString & nodeName)
-{
-  std::vector<egammaMVACalib::XmlVariableInfo> result;
-  if (!xml || !node) return result;
-
-  // loop over all children inside <Variables> or <Spectators>
-  for (XMLNodePointer_t info_node = xml->GetChild(node); info_node != nullptr;
-       info_node = xml->GetNext(info_node))
-  {
-    XMLAttrPointer_t attr = xml->GetFirstAttr(info_node);
-    XmlVariableInfo o;
-    // loop over the attributes of each child
-    while (attr != nullptr)
-    {
-      TString name = xml->GetAttrName(attr);
-      if (name == "Expression")
-        o.expression = xml->GetAttrValue(attr);
-      else if (name == "Label")
-        o.label = xml->GetAttrValue(attr);
-      else if (name == "Type")
-        o.varType = xml->GetAttrValue(attr);
-      attr = xml->GetNextAttr(attr);
-    }
-    //          ATH_MSG_DEBUG("Expression: " << expression << " Label: " << label << " varType: " << varType);
-    o.nodeName = nodeName;
-    result.push_back(o);
-  }
-  return result;
-}
-
-
-
-TString egammaMVACalib::getString(TObject* obj)
-{
-  TObjString *objS = dynamic_cast<TObjString*>(obj);
-  if (!objS) return TString();
-  return objS->GetString();
-}
-
-TObjArray* egammaMVACalib::getVariables(const TString &xmlFileName)
-{
-  std::vector<XmlVariableInfo> varInfo = parseXml(xmlFileName);
-  TObjArray *o = new TObjArray();
-  for (unsigned int i = 0; i < varInfo.size(); ++i)
-    o->Add(new TObjString(varInfo[i].label));
-  return o;
-}
-
-TString* egammaMVACalib::getVariables(TMVA::Reader *reader)
-{
-  TString *str = new TString();
-  std::vector<TMVA::VariableInfo>::const_iterator it;
-  for (it = reader->DataInfo().GetVariableInfos().begin(); it != reader->DataInfo().GetVariableInfos().end(); ++it)
-    str->Append(TString(str->Length() ? ";" : "") + it->GetLabel());
-
-  return str;
-}
-
-
-egammaMVACalib::ParticleType egammaMVACalib::getParticleType(const TString & s)
-{
-  if (s == "unconvertedPhoton")
-    return UNCONVERTED;
-  if (s == "convertedPhoton")
-    return CONVERTED;
-  if (s == "convertedSiSiPhoton")
-    return SiSi;
-  if (s == "electron")
-    return ELECTRON;
-
-  return INVALIDPARTICLE;
-}
-
-void egammaMVACalib::printReadersInfo() const
-{
-
-  ATH_MSG_INFO(getNreaders() << " readers created");
-  TAxis* fAxisEta = m_hPoly->GetXaxis(); // TODO: ???
-  TAxis* fAxisEnergy = (m_binMultiplicity > 1 ? m_hPoly->GetYaxis() : nullptr);
-
-  if (fAxisEta){
-    ATH_MSG_INFO("egammaMVACalib::printReadersInfo "
-		 << fAxisEta->GetNbins()
-		 <<" eta bin(s) -- ( "
-		 <<fAxisEta->GetXmin() + 1e-10
-		 <<" < abs("
-		 <<   m_etaVar.Data()
-		 << ") < "
-		 << fAxisEta->GetXmax());
-  }
-  if (fAxisEnergy){
-    ATH_MSG_INFO("egammaMVACalib::printReadersInfo "
-		 << fAxisEnergy->GetNbins()
-		 << " energy bin(s) -- ( "
-		 << fAxisEnergy->GetXmin() + 1e-10
-		 << "  < "
-		 <<  m_energyVar.Data()
-		 << " < "
-		 << fAxisEnergy->GetXmax()
-		 << "GeV");
-  }
-}
-
-void egammaMVACalib::printFormulae() const
-{
-  std::map< TString, egammaMVACalib::VarFormula >::const_iterator it;
-  for (it = m_formulae.begin(); it !=  m_formulae.end(); ++it)
-  {
-    ATH_MSG_DEBUG( it->first << ": ");
-    if (it->second.formula)  ATH_MSG_DEBUG( it->second.formula->GetTitle());
-  }
-}
-
-void egammaMVACalib::checkFormula(TTreeFormula *formula)
-{
-  assert(formula);
-  formula->UpdateFormulaLeaves();
-}
-
-TObjArray* egammaMVACalib::getListOfBranches()
-{
-  if (!m_input_tree)
-  {
-    ATH_MSG_WARNING("getListOfBranches " << " No tree defined");
-    return nullptr;
-  }
-
-  TObjArray* branches = new TObjArray();
-  std::map< TString, egammaMVACalib::VarFormula >::iterator it;
-  for (it = m_formulae.begin(); it !=  m_formulae.end(); ++it)
-    addBranchesFromFormula(branches, it->second.formula);
-
-  if (m_clusterFormula)
-    addBranchesFromFormula(branches, m_clusterFormula);
-
-  return branches;
-}
-
-void egammaMVACalib::addBranchesFromFormula(TObjArray* branches, TTreeFormula *formula)
-{
-  if (!formula || !branches)
-    return;
-  for (int i = 0; i < formula->GetNcodes(); ++i)
-  {
-    TBranch *br = formula->GetLeaf(i)->GetBranch();
-    if (br && !branches->FindObject(br))
-      branches->Add(br);
-  }
-}
-
-void egammaMVACalib::activateBranches()
-{
-  TBranch *branch;
-  TIter next(getListOfBranches());
-  while ((branch = (TBranch*) next())) {
-    ATH_MSG_INFO("activating " << branch->GetName());
-    m_input_tree->SetBranchStatus(branch->GetName(), true);
-  }
-}
-
-TString egammaMVACalib::getCalibTypeString()
-{
-  if (m_calibrationType == correctEcluster)
-    return "Ecluster";
-  if (m_calibrationType == correctEaccordion)
-    return "Eaccordion";
-  if (m_calibrationType == fullCalibration)
-    return "Efull";
-  return "";
-}
-
-TTree* egammaMVACalib::getOutputTree(const TString& copyBranches, bool deactivateFirst)
-{
-  // Deactivate all branches before cloning the tree
-  if (deactivateFirst)
-    m_input_tree->SetBranchStatus("*", 0);
-
-  // Activate back the ones defined by <copyBranches>
-  TObjString *sObj;
-  TIter next(copyBranches.Tokenize(","));
-  while ((sObj = (TObjString*) next()))
-  {
-    if (getString(sObj) == "input") // copy branches used to calculate MVA energy
-      activateBranches();
-    else
-      m_input_tree->SetBranchStatus(getString(sObj), 1);
-  }
-
-  //TTree *mvaTree = new TTree(m_methodName.Data(), Form("%s tree", m_methodName.Data()));
-  TTree *mvaTree = m_input_tree->CloneTree(0);
-  //mvaTree->AddFriend(m_input_tree);
-  mvaTree->SetName("MVA");
-  return mvaTree;
-}
-
-bool egammaMVACalib::checkBin(int bin, float etaMin, float etaMax,
-                              float energyMin, float energyMax)
-{
-  // TH2Poly stores the bins in the sequence they appear, so bin 1 is stored at bins[0]
-  TH2PolyBin *polyBin = dynamic_cast<TH2PolyBin*>(m_hPoly->GetBins()->At(bin - 1));
-  if (!polyBin)
-  {
-    ATH_MSG_FATAL("checkBin Could not get bin " << bin << " size " << m_hPoly->GetBins()->GetEntries());
-
-    throw std::runtime_error("Could not get bin");
-  }
-
-  if (!TMath::AreEqualAbs(polyBin->GetXMin(), etaMin, 1e-9) ||
-      !TMath::AreEqualAbs(polyBin->GetXMax(), etaMax, 1e-9) ||
-      !TMath::AreEqualAbs(polyBin->GetYMin(), energyMin, 1e-9) ||
-      !TMath::AreEqualAbs(polyBin->GetYMax(), energyMax, 1e-9))
-  {
-    ATH_MSG_FATAL("checkBin Bins do not coincide");
-    ATH_MSG_DEBUG("Previous bin xmin: " << polyBin->GetXMin() << " / new: " << etaMin);
-    ATH_MSG_DEBUG("Previous bin xmax: " << polyBin->GetXMax() << " / new: " << etaMax);
-    ATH_MSG_DEBUG("Previous bin ymin: " << polyBin->GetYMin() << " / new: " << energyMin);
-    ATH_MSG_DEBUG("Previous bin ymax: " << polyBin->GetYMax() << " / new: " << energyMax);
-    throw std::runtime_error("Bins do not coincide");
-  }
-  return true;
-}
-
-float egammaMVACalib::getShift(float Et, ReaderID key, ShiftType shift_type) const
-{
-  ShiftType shift_to_use = m_shiftType;
-  if (shift_type != NSHIFTCORRECTIONS) shift_to_use = shift_type;
-
-  egammaMVACalib::ShiftMap::const_iterator it;
-  it = m_shiftMap.find(std::make_pair(key, shift_to_use));
-  if (it == m_shiftMap.end() || !it->second) return 1;
-  float shift = it->second->Eval(Et / 1e3);
-  ATH_MSG_DEBUG("Shift (Et = " << Et/1e3 << "): " << shift);
-  return shift;
-}
-
-const TString& egammaMVACalib::getShiftName(ShiftType shift) const
-{
-  static TString result;
-  result = "";
-  switch (shift) {
-  case NOSHIFT:        result = ""; break;
-  case PEAKTOTRUE:     result = "Peak"; break;
-  case MEANTOTRUE:     result = "Mean"; break;
-  case MEDIANTOTRUE:   result = "Median"; break;
-  case MEAN10TOTRUE:   result = "Mean10"; break;
-  case MEAN20TOTRUE:   result = "Mean20"; break;
-  case MEDIAN10TOTRUE: result = "Median10"; break;
-  case MEDIAN20TOTRUE: result = "Median20"; break;
-  default: assert(false);
-  }
-  return result;
-}
-
-
-void egammaMVACalib::defineShiftFormula(ReaderID key)
-{
-  // Loop over the possible shifts and define a formula for each
-  for (unsigned int i = 1; i < static_cast<int>(NSHIFTCORRECTIONS); ++i)
-  {
-    ShiftType shift = static_cast<ShiftType>(i);
-    TString shift_name = getShiftName(shift);
-    if (!m_additional_infos[key].count(shift_name)) continue;
-    TString expr = m_additional_infos[key][shift_name];
-    expr.ReplaceAll("BDTG*(ph_rawcl_Es1 + ph_rawcl_Es2 + ph_rawcl_Es3)/cosh(ph_cl_eta)/1e3", "x");
-    expr.ReplaceAll("BDTG*(el_rawcl_Es1 + el_rawcl_Es2 + el_rawcl_Es3)/cosh(el_cl_eta)/1e3", "x");
-    //  ATH_MSG_DEBUG("Defining shift for bin " << key.bin << ": " << expr);
-    TString name = Form("shift_%d_%d_%s", key.particleType, key.bin, shift_name.Data());
-    //  TTreeFormula* formula = defineFormula(name, expr, m_tree);
-    m_shiftMap[std::make_pair(key, shift)] = new TF1(name, expr);
-  }
-}
-
-void egammaMVACalib::defineClusterEnergyFormula()
-{
-  ATH_MSG_DEBUG("setting cluster energy formula");
-  TString expr = (m_egammaType == egPHOTON) ? "ph_cl_E" : "el_cl_E";
-  m_clusterFormula = defineFormula("clusterE", expr, m_tree);
-}
-
-
-void egammaMVACalib::setDefinition(const TString & variable, const TString & expression)
-{
-  int count = 0;
-  // Loop over the formula map and replace variable by expression
-  std::map< TString, egammaMVACalib::VarFormula >::iterator formulaIt;
-  for (formulaIt = m_formulae.begin(); formulaIt != m_formulae.end(); ++formulaIt)
-  {
-    egammaMVACalib::VarFormula *varFormula = &(formulaIt->second);
-    if (varFormula->expression.Contains(variable))
-    {
-      ++count;
-      varFormula->expression = varFormula->expression.ReplaceAll(variable, expression);
-    }
-  }
-  ATH_MSG_INFO("setDefinition " << "Replacements made: " << count);
-}
-
-/** Check if shower depth variable is present or if it needs to be calculated **/
-void egammaMVACalib::checkShowerDepth(TTree *tree)
-{
-  TString prefix = (m_egammaType == egPHOTON) ?  "ph_" : "el_";
-  TString showerDepth(prefix);
-  showerDepth.Append("rawcl_calibHitsShowerDepth");
-
-  if (m_formulae.count(showerDepth) && !tree->GetBranch(showerDepth.Data()))
-  {
-    ATH_MSG_INFO("checkShowerDepth " << "Using CalibrationHitOffline to calculate shower depth");
-    TString newShowerDepth = "egammaMVACalib::get_shower_depth(ph_cl_eta, ph_rawcl_Es0, ph_rawcl_Es1, ph_rawcl_Es2, ph_rawcl_Es3)";
-    newShowerDepth.ReplaceAll("ph_", prefix);
-    m_formulae[showerDepth].expression = newShowerDepth;
-  }
-}
-
-
-double egammaMVACalib::get_shower_depth(double eta,
-                                        double raw_cl_0,
-                                        double raw_cl_1,
-                                        double raw_cl_2,
-                                        double raw_cl_3)
-{
-  const std::array<float, 4> radius(get_MVAradius(eta));
-
-  const double denominator = raw_cl_0 + raw_cl_1 + raw_cl_2 + raw_cl_3;
-  if (denominator == 0) return 0.;
-
-  return (radius[0] * raw_cl_0
-           + radius[1] * raw_cl_1
-           + radius[2] * raw_cl_2
-           + radius[3] * raw_cl_3) / denominator;
-}
-
-
-TMVA::Reader* egammaMVACalib::getDummyReader(const TString &xmlFileName)
-{
-  float dummyFloat;
-  auto reader = std::make_unique<TMVA::Reader>("Silent");
-
-  std::vector<egammaMVACalib::XmlVariableInfo> variable_infos = parseXml(xmlFileName);
-  for (std::vector<egammaMVACalib::XmlVariableInfo>::const_iterator itvar = variable_infos.begin();
-       itvar != variable_infos.end(); ++itvar)
-  {
-    // Define the variable / spectator name and expression
-    TString infoType  = (TString(itvar->nodeName).Contains("Variable") ?
-                         "variable" : "spectator");
-    TString expression = itvar->expression;
-    TString varName    = itvar->label;
-
-    // Add variable / spectator to the reader
-    // Define expression (if different than variable name)
-    TString varDefinition(varName);
-    if (varName != expression)
-      varDefinition += " := " + expression;
-
-    if (infoType == "variable")
-      reader->AddVariable(varDefinition, &dummyFloat);
-    else if (infoType == "spectator")
-      reader->AddSpectator(varDefinition, &dummyFloat);
-    else // should never happen
-    {
-      static asg::AsgMessaging msg("egammaMVACalib::getDummyReader");
-      msg.msg(MSG::FATAL)<<"Unknown type from parser "<< infoType.Data()<<endmsg;
-      throw std::runtime_error("Unknown type from parser");
-    }
-  }
-
-  reader->BookMVA("BDTG", xmlFileName);
-  return reader.release();
-}
-
-//  LocalWords:  TObjArray
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVATool.cxx b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVATool.cxx
deleted file mode 100644
index 65edf22b5435f2ca7ffe851a550162288113977e..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVATool.cxx
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
-  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "egammaMVACalibAnalysis/egammaMVATool.h"
-#include "egammaMVACalibAnalysis/egammaMVACalib.h"
-#include "egammaMVACalibAnalysis/egammaMVATree.h"
-#include "xAODEgamma/Egamma.h"
-#include "xAODEgamma/EgammaDefs.h"
-#include "xAODEgamma/Electron.h"
-#include "xAODEgamma/Photon.h"
-#include "xAODCaloEvent/CaloCluster.h"
-#include "xAODEgamma/EgammaxAODHelpers.h"
-#include "xAODTracking/Vertex.h"
-#include "xAODTracking/TrackParticle.h"
-#include "xAODTracking/TrackingPrimitives.h"
-#include "PathResolver/PathResolver.h"
-
-egammaMVATool::egammaMVATool( const std::string &name )
-  : asg::AsgTool(name),
-    m_mvaElectron(),
-    m_mvaPhoton(),
-    m_MVATreeElectron(),
-    m_MVATreePhoton(),
-    m_folder("")
-{
-  declareProperty("folder", m_folder="egammaMVACalib/offline/v3");//, "folder with weight files");
-  declareProperty("use_layer_corrected", m_use_layer_corrected=true);
-}
-
-egammaMVATool::~egammaMVATool(){
-}
-
-StatusCode egammaMVATool::initialize() {
-  ATH_MSG_DEBUG("In initialize of " << name() << "..." );
-
-  ATH_MSG_DEBUG("initializing egammaMVACalib for electrons");
-  m_mvaElectron = std::make_unique<egammaMVACalib>(egammaMVACalib::egELECTRON, // particle type
-							true, // use new BDT (not TMVA)
-							m_folder, // folder with weight files
-							"BDTG", // method
-							1, // Full Calib
-							false, // not debugging
-							"", // that
-							"",
-							"",
-							"", // file pattern of xml files
-							true // ignore spectators
-							);
-  m_mvaElectron->msg().setLevel(this->msg().level());
-  ATH_MSG_INFO(std::string(m_use_layer_corrected ? "U" : "Not u") + "sing layer correction");  // j4f
-  {
-    const std::string filename = PathResolverFindCalibFile(m_folder + "/MVACalib_electron.weights.root");
-    ATH_MSG_DEBUG("configuration does not contain list of variables, try to guess:"); // TODO: because it is not implemented
-    std::set<std::string> el_variables = guess_variables(filename);
-    el_variables.insert({"el_cl_E", "el_cl_eta", "el_rawcl_Es0", "el_rawcl_Es1", "el_rawcl_Es2", "el_rawcl_Es3"}); // used for binning
-    for (const auto& var : el_variables) { ATH_MSG_DEBUG("  " << var); }
-    ATH_MSG_INFO(el_variables.size() << " variables for electrons");
-
-    m_MVATreeElectron = std::make_unique<egammaMVATreeElectron>("MVATreeElectron", el_variables, m_use_layer_corrected);
-    m_MVATreeElectron->msg().setLevel(this->msg().level());
-    m_mvaElectron->InitTree(m_MVATreeElectron.get());
-  }
-
-  ATH_MSG_DEBUG("initializing egammaMVACalib for photons");
-  m_mvaPhoton = std::make_unique<egammaMVACalib>(egammaMVACalib::egPHOTON, // particle type
-						      true, // use new BDT (not TMVA)
-						      m_folder, // folder with weight files
-						      "BDTG", // method
-						      1 , // Full Calib
-						      false, // not debugging
-						      "", // that
-						      "",
-						      "",
-						      "", // file pattern of xml files
-						      true // ignore spectators
-						      );
-  m_mvaPhoton->msg().setLevel(this->msg().level());
-  {
-    const std::string filename_unconv = PathResolverFindCalibFile(m_folder + "/MVACalib_unconvertedPhoton.weights.root");
-    const std::string filename_conv = PathResolverFindCalibFile(m_folder + "/MVACalib_convertedPhoton.weights.root");
-    ATH_MSG_INFO("configuration does not contain list of variables, try to guess:"); // TODO: because it is not implemented
-    const std::set<std::string> ph_unconv_variables = guess_variables(filename_unconv);
-    const std::set<std::string> ph_conv_variables = guess_variables(filename_conv);
-    std::set<std::string> ph_variables = ph_unconv_variables;
-    ph_variables.insert(ph_conv_variables.begin(), ph_conv_variables.end());
-    ph_variables.insert({"ph_cl_E", "ph_cl_eta", "ph_rawcl_Es0", "ph_rawcl_Es1", "ph_rawcl_Es2", "ph_rawcl_Es3"}); // used for binning
-    ATH_MSG_INFO(ph_variables.size() << " variables for photons");
-    for (const auto& var : ph_variables) { ATH_MSG_INFO("  " << var); }
-
-    m_MVATreePhoton = std::make_unique<egammaMVATreePhoton>("MVATreePhoton", ph_variables, m_use_layer_corrected, true);
-    m_MVATreePhoton->msg().setLevel(this->msg().level());
-    m_mvaPhoton->InitTree(m_MVATreePhoton.get());
-  }
-
-  return StatusCode::SUCCESS;
-}
-
-std::set<std::string> egammaMVATool::guess_variables(const std::string& filename)
-{
-  TFile f(filename.c_str());
-  std::unique_ptr<TObjArray> formulae(dynamic_cast<TObjArray*>(f.Get("formulae")));
-  formulae->SetOwner(true);  // by default TObjArray doesn't own elements
-
-  // TODO: use regex parsing (regex supported only in gcc 4.9, TPRegexp sucks)
-  const std::vector<std::string> all_possible_variables = {
-    "el_cl_E", "el_cl_eta", "el_cl_phi", "el_charge", "el_author",
-    "el_rawcl_Es0", "el_rawcl_Es1", "el_rawcl_Es2", "el_rawcl_Es3", "el_cl_E_TileGap3",
-    "el_cl_etaCalo", "el_cl_phiCalo", "el_rawcl_calibHitsShowerDepth", "el_wtots1",
-    "ph_cl_E", "ph_cl_eta", "ph_cl_phi", "ph_author",
-    "ph_rawcl_Es0", "ph_rawcl_Es1", "ph_rawcl_Es2", "ph_rawcl_Es3", "ph_cl_E_TileGap3", "ph_wtots1",
-    "ph_cl_etaCalo", "ph_cl_phiCalo", "ph_rawcl_calibHitsShowerDepth",
-    "el_charge", "el_tracketa", "el_trackpt", "el_trackz0", "el_refittedTrack_qoverp", "el_author",
-    "ph_Rconv", "ph_zconv", "ph_pt1conv", "ph_pt2conv", "ph_ptconv", "ph_convtrk1nPixHits", "ph_convtrk2nPixHits", "ph_convtrk1nSCTHits", "ph_convtrk2nSCTHits",
-  };
-
-  std::set<std::string> variables_found;
-  TIter iter(formulae.get());
-  while (TNamed* obj = dynamic_cast<TNamed*>(iter())) {
-    const std::string expression = obj->GetTitle();
-    ATH_MSG_DEBUG("searching variables in " << expression);
-    for (const auto& var : all_possible_variables) {
-      const auto pos = expression.find(var);
-      if (pos != std::string::npos) {
-        if (pos + var.size() < expression.size()) {
-          const char next_char = expression[pos + var.size()];
-          if (isalnum(next_char) or next_char == '_') continue;
-        }
-        ATH_MSG_DEBUG("found variable '" << var << "' in '" << expression << "'");
-        variables_found.insert(var);
-      }
-    }
-  }
-  return variables_found;
-}
-
-StatusCode egammaMVATool::finalize(){
-  ATH_MSG_DEBUG( "in finalize" );
-  return StatusCode::SUCCESS;
-}
-
-StatusCode egammaMVATool::execute(xAOD::CaloCluster* cluster,const xAOD::Egamma* eg){
-  if (!eg || !cluster) {
-    ATH_MSG_ERROR("Invalid Pointer to egamma or cluster object");
-    return StatusCode::FAILURE;
-  }
-  double mvaE = getEnergy(cluster, eg);
-  ATH_MSG_DEBUG( "Calculated MVA calibrated energy = " << mvaE );
-  if (mvaE > eg->m()) {
-    cluster->setCalE(mvaE);
-  }
-  else {
-    ATH_MSG_DEBUG("MVA energy (" << mvaE << ") < particle mass ("
-                  << eg->m() << "), setting e = cluster energy (" << cluster->e() << ")");
-    cluster->setCalE(cluster->e());
-  }
-  return StatusCode::SUCCESS;
-}
-
-StatusCode egammaMVATool::execute(xAOD::CaloCluster* cluster, const xAOD::EgammaParameters::EgammaType egType){
-  if (!cluster) {
-    ATH_MSG_ERROR("Invalid Pointer to egamma or cluster object");
-    return StatusCode::FAILURE;
-  }
-  double mvaE = getEnergy(cluster, egType);
-  ATH_MSG_DEBUG( "Calculated MVA calibrated energy = " << mvaE );
-  if (mvaE > 0) {
-    cluster->setCalE(mvaE);
-  }
-  else {
-    cluster->setCalE(cluster->e());
-  }
-  return StatusCode::SUCCESS;
-}
-
-StatusCode egammaMVATool::hltexecute(xAOD::CaloCluster* cluster, const std::string& egType) {
-  if(!cluster){
-    ATH_MSG_ERROR("Invalid Pointer to cluster object");
-    return StatusCode::FAILURE;
-  }
-  double mvaE = getEnergy(cluster, egType);
-  ATH_MSG_DEBUG( "Calculated MVA calibrated energy = " << mvaE );
-  if(mvaE > 0){
-    cluster->setCalE(mvaE);
-  }
-  else{
-    cluster->setCalE(cluster->e());
-  }
-  return StatusCode::SUCCESS;
-}
-
-float egammaMVATool::getEnergy(const xAOD::Egamma* eg){
-  if (!eg){
-    ATH_MSG_WARNING("no xAOD::Egamma object provided");
-    return 0;
-  }
-  return getEnergy(eg->caloCluster(),eg);
-}
-
-float egammaMVATool::getEnergy(const xAOD::CaloCluster* cluster, 
-			       const xAOD::Egamma* eg){
-  ATH_MSG_DEBUG("In execute...");
-  // Check for errors...
-  if ( !eg ){
-    ATH_MSG_WARNING("no xAOD::Egamma object provided");
-    return 0;
-  }
-  if( eg->type() == xAOD::Type::Electron  ){
-    ATH_MSG_DEBUG("Processing for electron");
-    return getEnergy(cluster, static_cast<const xAOD::Electron*>(eg));
-  }
-  if (eg->type() == xAOD::Type::Photon ){
-    ATH_MSG_DEBUG("Processing for photon");
-    // this is because topo seeded electron (author == 128) have cluster in
-    // another collection, which is not decorated with etaCalo, m_cl_phiCalo
-    // needed by the MVA calibration
-    // TODO: make more general: no input -> no MVA
-    if (eg->author() == 128) { return cluster->e(); }
-
-    return getEnergy(cluster, static_cast<const xAOD::Photon*>(eg));
-  }
-  
-    ATH_MSG_INFO("Unknown Type");
-  
-  return 0;
-}
-
-
-float egammaMVATool::getEnergy(const xAOD::CaloCluster* cluster, 
-			       const std::string& egType){
-  // Check for errors...
-  if ( !cluster ){
-    ATH_MSG_WARNING("no xAOD::CaloCluster object provided");
-    return 0;
-  }
-  if (egType == "Electron") {
-    ATH_MSG_DEBUG("Processing  for type electron");
-    m_MVATreeElectron->update(nullptr, cluster);
-    return m_mvaElectron->getMVAEnergy();
-  }
-  if(egType == "Photon"){
-    ATH_MSG_DEBUG("Processing for type photon");
-    m_MVATreePhoton->update(nullptr, cluster);
-    return m_mvaPhoton->getMVAEnergy();
-  }
-  
-    ATH_MSG_WARNING("Unknown particle type");
-  
-  return 0;
-}
-
-float egammaMVATool::getEnergy(const xAOD::CaloCluster* cluster, 
-			       const xAOD::EgammaParameters::EgammaType egType){
-  return  ( (egType==xAOD::EgammaParameters::electron) ?  
-	   getEnergy(cluster, "Electron") : 
-	   getEnergy(cluster, "Photon"));
-}
-
-
-float egammaMVATool::getEnergy(const xAOD::CaloCluster* cluster, 
-			       const xAOD::Electron* el){
-  if(!el){
-    ATH_MSG_ERROR("No electron passed");
-    return 0;
-  }
-  ATH_MSG_DEBUG("updating variables electron");
-  m_MVATreeElectron->update(el, cluster);
-  return m_mvaElectron->getMVAEnergy();
-}
-
-float egammaMVATool::getEnergy(const xAOD::CaloCluster* cluster, 
-			       const xAOD::Photon* ph){
-  if(!ph){
-    ATH_MSG_ERROR("No photon passed");
-    return 0;
-  }
-  ATH_MSG_DEBUG("updating variables photon");
-  m_MVATreePhoton->update(ph, cluster);
-  return m_mvaPhoton->getMVAEnergy();
-}
-
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVATree.cxx b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVATree.cxx
deleted file mode 100644
index 0ddc4aad3a4a9237fbf457ea159b75699e16aca8..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/Root/egammaMVATree.cxx
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <exception>
-#include <stdexcept>
-
-#include <TTreeFormula.h>
-
-#include "xAODEgamma/Egamma.h"
-#include "xAODEgamma/EgammaDefs.h"
-#include "xAODEgamma/Electron.h"
-#include "xAODEgamma/EgammaxAODHelpers.h"
-#include "xAODEgamma/Photon.h"
-#include "xAODCaloEvent/CaloCluster.h"
-
-#include "xAODTracking/Vertex.h"
-#include "xAODTracking/TrackParticle.h"
-#include "xAODTracking/TrackingPrimitives.h"
-
-#include "egammaMVACalibAnalysis/egammaMVATree.h"
-
-
-using namespace egammaMVAFunctions;
-
-//ClassImp(egammaMVATreeEgamma)
-//#ifdef ROOTCORE
-//ClassImp(egammaMVATreeElectron)
-//#endif
-
-egammaMVATreeEgamma::egammaMVATreeEgamma(const std::string& name,
-                                         const std::string& prefix,
-                                         const std::set<std::string>& variables,
-                                         bool use_layer_corrected)
-: TTree(name.c_str(), name.c_str()),
-  asg::AsgMessaging(name),
-  m_prefix(prefix), m_use_layer_corrected(use_layer_corrected)
-{
-  SetCacheSize(0);  // this is to avoid creation of (big) cache for the tree
-  ATH_MSG_DEBUG("use layer corrected: " << use_layer_corrected);
-  init_variables(variables);
-}
-
-void egammaMVATreeEgamma::init_variables(const std::set<std::string>& variables)
-{
-  std::map<std::string, std::function<float(const xAOD::CaloCluster&)>> map_float_CaloCluster {
-    {m_prefix + "_cl_eta", compute_cl_eta},
-    {m_prefix + "_cl_phi", compute_cl_phi},
-    {m_prefix + "_cl_E", [](const xAOD::CaloCluster& cl) { return cl.e(); }},
-    {m_prefix + "_cl_etaCalo", compute_cl_etaCalo},
-    {m_prefix + "_cl_phiCalo", compute_cl_phiCalo},
-    {m_prefix + "_cl_E_TileGap3", [](const xAOD::CaloCluster& cl) { return cl.eSample(CaloSampling::TileGap3); }}
-  };
-
-  if (m_use_layer_corrected) {
-    map_float_CaloCluster[m_prefix + "_rawcl_Es0"] = compute_correctedcl_Es0;
-    map_float_CaloCluster[m_prefix + "_rawcl_Es1"] = compute_correctedcl_Es1;
-    map_float_CaloCluster[m_prefix + "_rawcl_Es2"] = compute_correctedcl_Es2;
-    map_float_CaloCluster[m_prefix + "_rawcl_Es3"] = compute_correctedcl_Es3;
-    map_float_CaloCluster[m_prefix + "_rawcl_calibHitsShowerDepth"] = compute_correctedcl_calibHitsShowerDepth;
-  }
-  else
-  {
-    map_float_CaloCluster[m_prefix + "_rawcl_Es0"] = compute_rawcl_Es0;
-    map_float_CaloCluster[m_prefix + "_rawcl_Es1"] = compute_rawcl_Es1;
-    map_float_CaloCluster[m_prefix + "_rawcl_Es2"] = compute_rawcl_Es2;
-    map_float_CaloCluster[m_prefix + "_rawcl_Es3"] = compute_rawcl_Es3;
-    // and everything that depends on
-    // static cast here is needed to resolve overload (std::function is not able to)
-    map_float_CaloCluster[m_prefix + "_rawcl_calibHitsShowerDepth"] = static_cast<float(*)(const xAOD::CaloCluster&)>(compute_rawcl_calibHitsShowerDepth);
-  }
-
-  std::map<std::string, std::function<float(const xAOD::Egamma&)>> map_float_particle {
-    { m_prefix + "_e011", SG::AuxElement::Accessor<float>("e011") },
-	  { m_prefix + "_e033", SG::AuxElement::Accessor<float>("e033") },
-    { m_prefix + "_e132", SG::AuxElement::Accessor<float>("e132") },
-    { m_prefix + "_e1152", SG::AuxElement::Accessor<float>("e1152") },
-    { m_prefix + "_ethad1", SG::AuxElement::Accessor<float>("ethad1") },
-    { m_prefix + "_ethad", SG::AuxElement::Accessor<float>("ethad") },
-    { m_prefix + "_f1", SG::AuxElement::Accessor<float>("f1") },
-    { m_prefix + "_f3", SG::AuxElement::Accessor<float>("f3") },
-    { m_prefix + "_f1core", SG::AuxElement::Accessor<float>("f1core") },
-    { m_prefix + "_f3core", SG::AuxElement::Accessor<float>("f3core") },
-    { m_prefix + "_e233", SG::AuxElement::Accessor<float>("e233") },
-    { m_prefix + "_e235", SG::AuxElement::Accessor<float>("e235") },
-    { m_prefix + "_e255", SG::AuxElement::Accessor<float>("e255") },
-    { m_prefix + "_e237", SG::AuxElement::Accessor<float>("e237") },
-    { m_prefix + "_e277", SG::AuxElement::Accessor<float>("e277") },
-    { m_prefix + "_e333", SG::AuxElement::Accessor<float>("e333") },
-    { m_prefix + "_e335", SG::AuxElement::Accessor<float>("e335") },
-    { m_prefix + "_e337", SG::AuxElement::Accessor<float>("e337") },
-    { m_prefix + "_e377", SG::AuxElement::Accessor<float>("e377") },
-    { m_prefix + "_weta1", SG::AuxElement::Accessor<float>("weta1") },
-    { m_prefix + "_weta2", SG::AuxElement::Accessor<float>("weta2") },
-    { m_prefix + "_e2ts1", SG::AuxElement::Accessor<float>("e2ts1") },
-    { m_prefix + "_e2tsts1", SG::AuxElement::Accessor<float>("e2tsts1") },
-    { m_prefix + "_fracs1", SG::AuxElement::Accessor<float>("fracs1") },
-    { m_prefix + "_widths1", SG::AuxElement::Accessor<float>("widths1") },
-    { m_prefix + "_widths2", SG::AuxElement::Accessor<float>("widths2") },
-    { m_prefix + "_poscs1", SG::AuxElement::Accessor<float>("poscs1") },
-    { m_prefix + "_poscs2", SG::AuxElement::Accessor<float>("poscs2") },
-    { m_prefix + "_asy1", SG::AuxElement::Accessor<float>("asy1") },
-    { m_prefix + "_pos", SG::AuxElement::Accessor<float>("pos") },
-    { m_prefix + "_pos7", SG::AuxElement::Accessor<float>("pos7") },
-    { m_prefix + "_barys1", SG::AuxElement::Accessor<float>("barys1") },
-    { m_prefix + "_wtots1", SG::AuxElement::Accessor<float>("wtots1") },
-    { m_prefix + "_emins1", SG::AuxElement::Accessor<float>("emins1") },
-    { m_prefix + "_emaxs1", SG::AuxElement::Accessor<float>("emaxs1") },
-    { m_prefix + "_r33over37allcalo", SG::AuxElement::Accessor<float>("r33over37allcalo") },
-    { m_prefix + "_ecore", SG::AuxElement::Accessor<float>("ecore") },
-    { m_prefix + "_Reta", SG::AuxElement::Accessor<float>("Reta") },
-    { m_prefix + "_Rphi", SG::AuxElement::Accessor<float>("Rphi") },
-    { m_prefix + "_Eratio", SG::AuxElement::Accessor<float>("Eratio") },
-    { m_prefix + "_Rhad", SG::AuxElement::Accessor<float>("Rhad") },
-    { m_prefix + "_Rhad1", SG::AuxElement::Accessor<float>("Rhad1") },
-    { m_prefix + "_DeltaE", SG::AuxElement::Accessor<float>("DeltaE") },
-  };
-
-  create_structure<float>(variables, map_float_CaloCluster, m_functions_float_from_calo_cluster);
-  create_structure<float>(variables, map_float_particle, m_functions_float_from_particle);
-}
-
-template<> const float* egammaMVATreeEgamma::get_ptr(const std::string& var_name) const
-{
-  for (const auto& item : m_functions_float_from_calo_cluster) {
-    if (std::get<0>(item) == var_name) { return &std::get<2>(item); }
-  }
-  for (const auto& item : m_functions_float_from_particle) {
-    if (std::get<0>(item) == var_name) { return &std::get<2>(item); }
-  }
-  return nullptr;
-}
-
-template<> const int* egammaMVATreeEgamma::get_ptr(const std::string& /*var_name*/) const
-{
-  // there is no int variables
-  return nullptr;
-}
-
-void egammaMVATreeEgamma::update(const xAOD::Egamma* egamma)
-{
-  update(egamma, egamma->caloCluster());
-}
-
-void egammaMVATreeEgamma::update(const xAOD::Egamma* particle, const xAOD::CaloCluster* cluster)
-{
-  ATH_MSG_DEBUG("updating egamma from cluster");
-  ATH_MSG_DEBUG(m_functions_float_from_calo_cluster.size() << " float functions");
-  if (!cluster and !m_functions_float_from_calo_cluster.empty()) { ATH_MSG_FATAL("egamma cluster pointer is null"); }
-  for (auto& var_function : m_functions_float_from_calo_cluster) {
-    auto& var = std::get<2>(var_function);
-    const auto& f = std::get<1>(var_function);
-    var = f(*cluster);
-    ATH_MSG_DEBUG(std::get<0>(var_function) << " = " << var << " == " << std::get<2>(var_function));
-  }
-  ATH_MSG_DEBUG("updating egamma from particle");
-  ATH_MSG_DEBUG(m_functions_float_from_particle.size() << " float functions");
-  if (!particle and !m_functions_float_from_particle.empty()) { ATH_MSG_FATAL("particle pointer is null"); }
-  for (auto& var_function : m_functions_float_from_particle) {
-    auto& var = std::get<2>(var_function);
-    const auto& f = std::get<1>(var_function);
-    var = f(*particle);
-    ATH_MSG_DEBUG(std::get<0>(var_function) << " = " << var << " == " << std::get<2>(var_function));
-  }
-}
-
-egammaMVATreeElectron::egammaMVATreeElectron(const std::string& name,
-                                             const std::set<std::string>& vars,
-                                             bool use_layer_corrected)
-:egammaMVATreeEgamma(name, "el", vars, use_layer_corrected)
-{
-ATH_MSG_INFO("creating tree for " << vars.size() << " variables: "
-             << std::accumulate(vars.begin(), vars.end(), std::string(),
-                                [](const std::string& a, const std::string& b) -> std::string {
-                                    return a + (a.length() > 0 ? "," : "") + b;
-             } ));
-
-  init_variables(vars);
-}
-
-void egammaMVATreeElectron::init_variables(const std::set<std::string>& variables)
-{
-  ATH_MSG_DEBUG("init variable for electron");
-  const std::map<std::string, std::function<float(const xAOD::Electron&)>> map_float_Electron {
-    {"el_charge", compute_el_charge},
-    {"el_tracketa", compute_el_tracketa},
-    {"el_trackpt", compute_el_trackpt},
-    {"el_trackz0", compute_el_trackz0},
-    {"el_refittedTrack_qoverp", compute_el_refittedTrack_qoverp}
-  };
-
-  const std::map<std::string, std::function<int(const xAOD::Electron&)>> map_int_Electron {
-    {"el_author", compute_el_author}
-  };
-
-  create_structure<float>(variables, map_float_Electron, m_functions_float_from_electron);
-  create_structure<int>(variables, map_int_Electron, m_functions_int_from_electron);
-}
-
-void egammaMVATreeElectron::update(const xAOD::Electron* electron)
-{
-  update(electron, electron->caloCluster());
-}
-
-void egammaMVATreeElectron::update(const xAOD::Electron* electron, const xAOD::CaloCluster* cluster)
-{
-  egammaMVATreeEgamma::update(electron, cluster);
-  ATH_MSG_DEBUG("updating electron");
-
-  ATH_MSG_DEBUG(m_functions_float_from_electron.size() << " float functions");
-  if (!electron and !m_functions_float_from_electron.empty()) { ATH_MSG_FATAL("electron pointer is null"); }
-  for (auto& var_function : m_functions_float_from_electron) {
-    auto& var = std::get<2>(var_function);
-    const auto& f = std::get<1>(var_function);
-    var = f(*electron);
-    ATH_MSG_DEBUG(std::get<0>(var_function) << " = " << var << " == " << std::get<2>(var_function) << " at " << &var);
-  }
-
-  ATH_MSG_DEBUG(m_functions_int_from_electron.size() << " int functions");
-  if (!electron and !m_functions_int_from_electron.empty()) { ATH_MSG_FATAL("electron pointer is null"); }
-  for (auto& var_function : m_functions_int_from_electron) {
-    auto& var = std::get<2>(var_function);
-    const auto& f = std::get<1>(var_function);
-    var = f(*electron);
-    ATH_MSG_DEBUG(std::get<0>(var_function) << " = " << var << " == " << std::get<2>(var_function) << " at " << &var);
-  }
-}
-
-template<> const float* egammaMVATreeElectron::get_ptr(const std::string& var_name) const
-{
-  const float* var = egammaMVATreeEgamma::get_ptr<float>(var_name);
-  if (var) { return var; }
-  for (const auto& item : m_functions_float_from_electron) {
-    if (std::get<0>(item) == var_name) { return &std::get<2>(item); }
-  }
-  return nullptr;
-}
-
-template<> const int* egammaMVATreeElectron::get_ptr(const std::string& var_name) const
-{
-  const int* var = egammaMVATreeEgamma::get_ptr<int>(var_name);
-  if (var) { return var; }
-  for (const auto& item : m_functions_int_from_electron) {
-    if (std::get<0>(item) == var_name) { return &std::get<2>(item); }
-  }
-  return nullptr;
-}
-
-//#ifdef ROOTCORE
-//ClassImp(egammaMVATreePhoton)
-//#endif
-
-egammaMVATreePhoton::egammaMVATreePhoton(const std::string& name,
-                                         const std::set<std::string>& vars,
-                                         bool use_layer_corrected,
-                                         bool force_conversion_to_zero_when_null_photon/*=false*/)
-: egammaMVATreeEgamma(name, "ph", vars, use_layer_corrected),
-  m_force_conversion_to_zero_when_null_photon(force_conversion_to_zero_when_null_photon)
-{
-    ATH_MSG_INFO("creating tree for " << vars.size() << " variables: "
-                 << std::accumulate(vars.begin(), vars.end(), std::string(),
-                                    [](const std::string& a, const std::string& b) -> std::string {
-                                        return a + (a.length() > 0 ? "," : "") + b;
-                                    } ));
-  init_variables(vars);
-}
-
-void egammaMVATreePhoton::init_variables(const std::set<std::string>& variables)
-{
-  ATH_MSG_DEBUG("init variable for photon");
-  const std::map<std::string, std::function<float(const xAOD::Photon&)>> map_float_Photon {
-  };
-
-  const std::map<std::string, std::function<int(const xAOD::Photon&)>> map_int_Photon {
-    {"ph_convFlag", compute_ph_convFlag}
-  };
-
-  const std::map<std::string, std::function<float(const ConversionHelper&)>> map_float_ConversionHelper {
-    {"ph_Rconv", [](const ConversionHelper& ch) { return ch.ph_Rconv(); }},
-    {"ph_zconv", [](const ConversionHelper& ch) { return ch.ph_zconv(); }},
-    {"ph_pt1conv", [](const ConversionHelper& ch) { return ch.ph_pt1conv(); }},
-    {"ph_pt2conv", [](const ConversionHelper& ch) { return ch.ph_pt2conv(); }},
-    {"ph_ptconv", [](const ConversionHelper& ch) { return ch.ph_ptconv(); }}
-  };
-
-  const std::map<std::string, std::function<int(const ConversionHelper&)>> map_int_ConversionHelper {
-    {"ph_convtrk1nPixHits", [](const ConversionHelper& ch) { return ch.ph_convtrk1nPixHits(); }},
-    {"ph_convtrk2nPixHits", [](const ConversionHelper& ch) { return ch.ph_convtrk2nPixHits(); }},
-    {"ph_convtrk1nSCTHits", [](const ConversionHelper& ch) { return ch.ph_convtrk1nSCTHits(); }},
-    {"ph_convtrk2nSCTHits", [](const ConversionHelper& ch) { return ch.ph_convtrk2nSCTHits(); }}
-  };
-
-  create_structure<float>(variables, map_float_Photon, m_functions_float_from_photon);
-  create_structure<int>(variables, map_int_Photon, m_functions_int_from_photon);
-  create_structure<float>(variables, map_float_ConversionHelper, m_functions_float_from_ConversionHelper);
-  create_structure<int>(variables, map_int_ConversionHelper, m_functions_int_from_ConversionHelper);
-}
-
-void egammaMVATreePhoton::update(const xAOD::Photon* photon)
-{
-  update(photon, photon->caloCluster());
-}
-
-void egammaMVATreePhoton::update(const xAOD::Photon* photon, const xAOD::CaloCluster* cluster)
-{
-  egammaMVATreeEgamma::update(photon, cluster);
-  ATH_MSG_DEBUG("updating photon");
-
-  ATH_MSG_DEBUG(m_functions_float_from_photon.size() << " float functions");
-  if (!photon and !m_functions_float_from_photon.empty()) { ATH_MSG_FATAL("photon pointer is null"); }
-  for (auto& var_function : m_functions_float_from_photon) {
-    auto& var = std::get<2>(var_function);
-    const auto& f = std::get<1>(var_function);
-    var = f(*photon);
-    ATH_MSG_DEBUG(std::get<0>(var_function) << " = " << var << " == " << std::get<2>(var_function) << " at " << &var);
-  }
-
-  if (!photon and !m_functions_int_from_photon.empty()) { ATH_MSG_FATAL("photon pointer is null"); }
-  ATH_MSG_DEBUG(m_functions_int_from_photon.size() << " int functions");
-  for (auto& var_function : m_functions_int_from_photon) {
-    auto& var = std::get<2>(var_function);
-    const auto& f = std::get<1>(var_function);
-    var = f(*photon);
-    ATH_MSG_DEBUG(std::get<0>(var_function) << " = " << var << " == " << std::get<2>(var_function) << " at " << &var);
-  }
-
-  if (!m_functions_int_from_ConversionHelper.empty() or
-      !m_functions_float_from_ConversionHelper.empty())
-  {
-    if (!photon and !m_force_conversion_to_zero_when_null_photon) { ATH_MSG_FATAL("photon pointer is null"); }
-    ATH_MSG_DEBUG("computing function with Conversion Helper");
-
-    if (!photon and m_force_conversion_to_zero_when_null_photon) {
-      // this is for the trigger calibration. For historical reason it needs
-      // the radius of conversion to be present and equal to zero. This is
-      // used to distinguish between convertend and unconverted. In this case
-      // all photon will be threated as unconverted, but the tool expect two
-      // files (converted / unconverted), the converted is never used for
-      // trigger calibration. TODO: remove when improved support for multiple
-      // MVAs (converted / unconverted / ...)
-      ATH_MSG_DEBUG("forcing conversion variables to zero since photon is null");
-      for (auto& var_function : m_functions_float_from_ConversionHelper) {
-        auto& var = std::get<2>(var_function);
-        var = 0;
-      }
-      for (auto& var_function : m_functions_int_from_ConversionHelper) {
-        auto& var = std::get<2>(var_function);
-        var = 0;
-      }
-    }
-    else {  // this is the normal case
-      const ConversionHelper conv_helper(photon);  // something predigested
-
-      ATH_MSG_DEBUG(m_functions_float_from_ConversionHelper.size() << " int functions");
-      for (auto& var_function : m_functions_float_from_ConversionHelper) {
-        auto& var = std::get<2>(var_function);
-        const auto& f = std::get<1>(var_function);
-        var = f(conv_helper);
-        ATH_MSG_DEBUG(std::get<0>(var_function) << " = " << var << " == " << std::get<2>(var_function) << " at " << &var);
-      }
-
-      ATH_MSG_DEBUG(m_functions_int_from_ConversionHelper.size() << " int functions");
-      for (auto& var_function : m_functions_int_from_ConversionHelper) {
-        auto& var = std::get<2>(var_function);
-        const auto& f = std::get<1>(var_function);
-        var = f(conv_helper);
-        ATH_MSG_DEBUG(std::get<0>(var_function) << " = " << var << " == " << std::get<2>(var_function) << " at " << &var);
-      }
-    }
-  }
-}
-
-template<> const float* egammaMVATreePhoton::get_ptr(const std::string& var_name) const
-{
-  const float* var = egammaMVATreeEgamma::get_ptr<float>(var_name);
-  if (var) { return var; }
-  for (const auto& item : m_functions_float_from_photon) {
-    if (std::get<0>(item) == var_name) { return &std::get<2>(item); }
-  }
-  for (const auto& item : m_functions_float_from_ConversionHelper) {
-    if (std::get<0>(item) == var_name) { return &std::get<2>(item); }
-  }
-  return nullptr;
-}
-
-template<> const int* egammaMVATreePhoton::get_ptr(const std::string& var_name) const
-{
-  const int* var = egammaMVATreeEgamma::get_ptr<int>(var_name);
-  if (var) { return var; }
-  for (const auto& item : m_functions_int_from_photon) {
-    if (std::get<0>(item) == var_name) { return &std::get<2>(item); }
-  }
-  for (const auto& item : m_functions_int_from_ConversionHelper) {
-    if (std::get<0>(item) == var_name) { return &std::get<2>(item); }
-  }
-  return nullptr;
-}
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/IegammaMVATool.h b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/IegammaMVATool.h
deleted file mode 100644
index ba2f6f7c45a8f757876becdf3c4c40af4dbc41f0..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/IegammaMVATool.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Dear Emacs, this is -*- C++ -*-
-
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-
-#ifndef IMVA_CALIBRATION_H_
-#define IMVA_CALIBRATION_H_
-
-#include "AsgTools/IAsgTool.h"
-
-// EDM includes
-#include "xAODEgamma/EgammaFwd.h"
-#include "xAODEgamma/ElectronFwd.h"
-#include "xAODEgamma/PhotonFwd.h"
-#include "xAODEgamma/EgammaEnums.h"
-#include "xAODCaloEvent/CaloClusterFwd.h"
-#include "xAODTracking/VertexFwd.h"
-
-
-class IegammaMVATool : virtual public asg::IAsgTool{
-  /// Declare the interface that the class provides
-  ASG_TOOL_INTERFACE( IegammaMVATool )
-public:
-  virtual ~IegammaMVATool() {};
-
-  /** @brief initialize method*/
-  virtual StatusCode initialize() = 0;
-  /** @brief finalize method*/
-  virtual StatusCode finalize() = 0;
- /** @brief execute method*/
-  virtual StatusCode execute(xAOD::CaloCluster* cluster,const xAOD::Egamma* eg)=0;
-  virtual StatusCode execute(xAOD::CaloCluster* cluster,const xAOD::EgammaParameters::EgammaType egType)=0;
-  virtual StatusCode hltexecute(xAOD::CaloCluster* cluster, const std::string& egType)=0;
-
-  virtual float getEnergy(const xAOD::Egamma* eg)=0;
-  virtual float getEnergy(const xAOD::CaloCluster* cluster, const xAOD::Egamma*)=0;
-  virtual float getEnergy(const xAOD::CaloCluster* cluster, const xAOD::EgammaParameters::EgammaType egType)=0;
-
-  virtual float getEnergy(const xAOD::CaloCluster* cluster, const xAOD::Electron*)=0;
-  virtual float getEnergy(const xAOD::CaloCluster* cluster, const xAOD::Photon*)=0;
-  virtual float getEnergy(const xAOD::CaloCluster* cluster, const std::string&)=0;
-
-
-
-
-};
-
-#endif
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVACalib.h b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVACalib.h
deleted file mode 100644
index b4a5839f9dd85ac0f18524427b5155926186044e..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVACalib.h
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
-  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef egammaMVACalibAnalysisNew_H
-#define egammaMVACalibAnalysisNew_H
-
-#include <map>
-#include <vector>
-#include <iostream>
-#include <memory>
-#include <string>
-
-#include <TString.h>
-#include <TObject.h>
-#include <TFile.h>
-#include "AsgMessaging/AsgMessaging.h"
-
-class TTreeFormula;
-class TList;
-class TTree;
-class TPRegexp;
-class TObjArray;
-class TXMLEngine;
-class TH2Poly;
-class TAxis;
-class TF1;
-
-namespace TMVA { class Reader; } // forward decl
-namespace MVAUtils { class BDT; } // forward decl
-
-// WARNING: all info to build the key should be defined as a variable or spectator in at least one of the readers
-
-/** MVA calibration for electrons and photons
-  * authors: Bruno Lenzi, Ruggero Turra : 2012 - 2013
-  *
-  * Computes the energy of electrons or photons from a set of input variables
-  * like the energy deposits in each layer of the calorimeter, the position
-  * of the EM shower, conversion information for converted photons, etc.
-  * using a set of corrections stored in xml files (TMVA outputs) or
-  * ROOT files (storing custom Boosted Regression Trees, extracted from TMVA)
-  *
-  * There are two ways to get the MVA response:
-  *   - the variables can be passed explicitly calling getMVAEnergyElectron /
-  *     getMVAEnergyPhoton. In this case one should first call InitTree(0)
-  *   - the variables can be read automatically from a TTree. One should first call
-  *     InitTree(tree) and use getMVAEnergy(index) where index is used for vectors
-  *
-  * There is one MVA for each bin (particle, eta, Et accordion) defined by ReaderID
-  * and stored in a TH2Poly (eta, Et)
-  *
-  * The README file in this package contains information about the installation and usage
-  * see also https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/EgammaMVACalibration
-  *
-  **/
-class egammaMVACalib : public asg::AsgMessaging
-{
-  public:
-    enum egammaType {egPHOTON, egELECTRON, NEGAMMATYPES};
-    enum ParticleType {UNCONVERTED=0, CONVERTED=1, SiSi=2, ELECTRON=3, NPARTICLETYPES=4, INVALIDPARTICLE=-1};
-    enum CalibrationType {correctEcluster, correctEaccordion, fullCalibration, NCalibrationTypes };
-    enum ShiftType {NOSHIFT=0, PEAKTOTRUE, MEANTOTRUE, MEDIANTOTRUE, MEAN10TOTRUE, MEAN20TOTRUE, MEDIAN10TOTRUE, MEDIAN20TOTRUE, NSHIFTCORRECTIONS};
-
-    struct ReaderID
-    {
-	ParticleType particleType;
-	int bin; //etaBin; int energyBin;
-	bool operator< (const ReaderID &other) const
-	{
-	    if (this->particleType != other.particleType)
-		return (this->particleType < other.particleType);
-	    return (this->bin < other.bin);
-	}
-    };
-
-    typedef std::map<TString, TString> AdditionalInfoMap;
-    typedef std::map< std::pair< egammaMVACalib::ReaderID, egammaMVACalib::ShiftType>, TF1* > ShiftMap;
-
-    /** struct to store the formula, the expression, the type and
-     * a float associated to each variable **/
-    struct VarFormula
-    {
-	float variable;
-	TString expression;
-	TString infoType;
-	TString valueType;
-	TTreeFormula* formula;
-	bool external;
-    };
-
-    /** Constructor
-      * @param particle : photon or electron, @see egammaType
-      * @param newBDTs  : use new BDTs or TMVA ones
-      * @param folder : where to find the xml or ROOT files
-      * @param method : optimisation method (BDTG by default)
-      * @param calibrationType : @see CalibrationType
-      * @param etaBinVar : variable used to define the eta binning
-      * @param energyBinVar : variable used to define the energy binning
-      * @param particleTypeVar : variable used to define the particle type (unconv, SiSi, etc)
-      * @param fileName : the expected pattern of the xml files
-      * @param ignoreSpectators : do not create formulae for the spectators
-      **/
-    egammaMVACalib(int particle,
-		   bool useNewBDTs = true,
-		   const TString& folder = "",
-		   const TString & method = "BDTG",
-		   int calibrationType = correctEaccordion,
-		   bool debug=false,
-		   const TString & etaBinVar = "",
-		   const TString & energyBinVar = "",
-		   const TString & particleTypeVar = "",
-		   TString filePattern = "",
-		   bool ignoreSpectators = true);
-
-    virtual ~egammaMVACalib();
-
-    egammaMVACalib (const egammaMVACalib&) = delete;
-    egammaMVACalib& operator= (const egammaMVACalib&) = delete;
-
-    void setPeakCorrection(ShiftType shift_type) { m_shiftType = shift_type; };
-    /** Set the peak correction by a capital string **/
-    void setPeakCorrection(const TString& shift_type);
-
-    /** Use cluster energy if MVA response is 0 **/
-    void useClusterIf0(bool useCluster = true) { m_clusterEif0 = useCluster; }
-
-    /** Define an expression to replace the given variable **/
-    void setDefinition(const TString & variable, const TString & expression);
-
-     /** Define all the TTreeFormula instances needed for calculating the MVA response
-       * If doNotify is true and a chain is passed, call Notify each time
-       * the tree changes
-       **/
-    void InitTree(TTree* tree, bool doNotify = true);
-
-    /** Evaluate each formula defined by the readers and store the output
-     * in the corresponding float variable (@see VarFormula)
-     * It is the user responsibility to call TTree::GetEntry before this command
-     **/
-    virtual void LoadVariables(int index); // TODO: move to private
-
-    /** Get the MVA output for the given index (or 0 if the corresponding TMVA::Reader is not found)
-     * It is the user responsibility to call TTree::GetEntry before this command **/
-    float getMVAOutput(int index = 0);
-
-    /** Get the MVA energy estimation (= MVA output * initialEnergy) for the given index
-     * Return 0 if the TMVA::Reader or the intialEnergy formula cannot be found
-     * It is the user responsibility to call TTree::GetEntry before this command
-     * If shift_type is not specified it uses the one set with setPeakCorrection
-     * function.
-     **/
-    float getMVAEnergy(int index = 0, ShiftType shift_type = NSHIFTCORRECTIONS);
-
-    float getMVAEnergyPhoton(float ph_rawcl_Es0,
-			     float ph_rawcl_Es1,
-			     float ph_rawcl_Es2,
-			     float ph_rawcl_Es3,
-			     float ph_cl_eta,
-			     float ph_cl_E,
-			     float ph_cl_etaCalo,
-			     float ph_cl_phiCalo,
-			     float ph_ptconv,
-			     float ph_pt1conv,
-			     float ph_pt2conv,
-			     int ph_convtrk1nPixHits,
-			     int ph_convtrk1nSCTHits,
-			     int ph_convtrk2nPixHits,
-			     int ph_convtrk2nSCTHits,
-			     float ph_Rconv);
-
-    float getMVAEnergyElectron(float el_rawcl_Es0,
-			       float el_rawcl_Es1,
-			       float el_rawcl_Es2,
-			       float el_rawcl_Es3,
-			       float el_cl_eta,
-			       float el_cl_E,
-			       float el_cl_etaCalo,
-			       float el_cl_phiCalo);
-
-    /** return the address of a particular input **/
-    float* getAddress(const TString & input_name);
-
-    /** do not compute the variable from the TTree.
-     * The user should change it for every event
-     *  using getAddress to reference the internal variable  **/
-    void setExternal(const TString & input_name);
-
-    /** Print the values of the previous evaluation for debugging **/
-    void printValueInput();
-
-    /** Return a tree with the MVA response for each event
-     * If the input tree uses vector branches, the MVA response is stored as a vector,
-     * except if flatten is false
-     * @param tree the input tree
-     * @param Nentries #entries to process
-     * @param branchName Name of the output branch (method name by default)
-     * @param copyBranches Branches to copy to MVA tree, comma-separated (input branches by default)
-     * @param update Display the progress after N events
-     **/
-    TTree* getMVAResponseTree(TTree *tree, int Nentries = -1,
-			      TString branchName = "", const TString& copyBranches = "input",
-			      int first_event = 0, bool flatten = false, int update=10000);
-
-    /** Return the shift corresponding to the ReaderID and type **/
-    float getShift(float Et, ReaderID key, ShiftType shift_type) const;
-
-    /** Return the TTreeFormula associated to the given variable (or a null pointer) **/
-    const TTreeFormula* getFormula(const TString & variable) {
-	   return (m_formulae.count(variable) ? m_formulae[variable].formula : 0);
-    }
-
-    /** Return a list of the TBranches used in the calculation of the MVA response **/
-    TObjArray* getListOfBranches();
-
-    /** Activate the branches used in the calculation of the MVA response **/
-    void activateBranches();
-
-    /** Get the number of particles in the current event. Used by egammaMVACalibMulti.
-     * TTree::GetEntry has to be called beforehand
-     **/
-    int getNdata();
-
-    /** Return a clone of the TH2Poly object used for defining the binning **/
-    TH2Poly* getTH2Poly() const;
-
-
-    /** Return the reader that corresponds to the given key (or null pointer) **/
-    TMVA::Reader* getReader(egammaMVACalib::ReaderID key)
-    {
-	std::map< egammaMVACalib::ReaderID, TMVA::Reader* >::const_iterator it = m_readers.find(key);
-	if (it == m_readers.end()) return 0;
-	return it->second;
-    }
-
-    /** Return the key that corresponds to the current entry
-     * (LoadVariables or getMVAEnergy has to be called beforehand)
-     **/
-    egammaMVACalib::ReaderID getReaderID();
-
-    /** Return the BDT that corresponds to the given key (or null pointer) **/
-    MVAUtils::BDT* getBDT(egammaMVACalib::ReaderID key)
-    {
-	std::map< egammaMVACalib::ReaderID, MVAUtils::BDT* >::const_iterator it = m_BDTs.find(key);
-	if (it == m_BDTs.end()) return 0;
-	return it->second;
-    }
-
-    /** Called when a TChain changes TTree (overridden from TObject) **/
-    //virtual bool Notify();
-
-
-    // Static methods
-
-    /** Add the branches used by the given formula to the given array **/
-    static void addBranchesFromFormula(TObjArray* branches, TTreeFormula *formula);
-
-    /** Return TString from TObjString **/
-    static TString getString(TObject*);
-
-    /** Return the list of variables used by a TMVA xml file **/
-    static TObjArray* getVariables(const TString &xmlFileName);
-
-    /** Instantiate a dummy TMVA::Reader **/
-    static TMVA::Reader* getDummyReader(const TString &xmlFileName);
-
-    /** Get the list of variables separated by comma **/
-    static TString* getVariables(TMVA::Reader *reader);
-
-
-
- protected:
-    /** Return a string representing the calibration type (Eaccordion, Ecluster, ...) **/
-    TString getCalibTypeString();
-
-    /** Instantiate one reader for each xml file and set them up,
-     *  calling setupReader for each.
-     *  Also initialize the additional information from the xmls
-     **/
-    void getReaders(const TString & folder);
-
-    /** Instantiate and setup one MVAUtils::BDT for each bin **/
-    void getBDTs(const std::string& folder);
-
-    struct XmlVariableInfo {
-	TString expression;
-	TString label;
-	TString varType;
-	TString nodeName;
-    };
-
-    /** Parse a xml file. Return a vector where each element is a
-     * XmlVariableInfo containing information about the variables
-     * and spectators. The full filename must be passed.
-     **/
-    static std::vector<XmlVariableInfo> parseXml(const TString & xmlFilename);
-
-    /** Called by parseXml to extract information about the variables and spectators **/
-    static std::vector<XmlVariableInfo> parseVariables(TXMLEngine *xml, void* node, const TString & nodeName);
-
-    /** Call parseXml, define formulae add variables associated to the reader.
-      * The full filename must be passed **/
-    void setupReader(TMVA::Reader* reader, const TString & xml_filename);
-
-    /** Instantiate and setup BDT from ROOT file **/
-    void setupBDT(const TString& fileName);
-
-    /** Setup the functions and pointers used to define the key for each reader **/
-    void setupFormulasForReaderID();
-
-    /** Pre-define a formula: store its name, type and definition in m_formulae
-      * but do not instantiate TTreeFormula (done in InitTree)
-      **/
-    void predefineFormula(const TString & name, const TString & expression,
-			  const TString & varInfo, const TString & valueType = "F");
-
-    /** Called by getReaders to define the eta/energy range associated to the given file.
-     * Return true if the file matches the expected pattern and the definition of
-     * the fields and ranges was successful **/
-    bool parseFileName(const TString & fileName, egammaMVACalib::ReaderID &key);
-
-    /** Called by getBDTs to define the particle associated to the given file.
-      * Return true if the file matches the expected pattern
-      **/
-    bool parseFileName(const TString & fileName, egammaMVACalib::ParticleType &pType);
-
-    /** Return the variable / field associated to the given string (or an empty string).
-     * Used by parseFileName to define the field associated to each part of
-     * fileName.
-     **/
-    TString getBinName( const TString & binField );
-
-    /** Return the bin that corresponds to the interval of eta/Et covered by
-      * a weights file. Add the bin if not previously defined
-      **/
-    int getBin(float etaMin, float etaMax, float energyMin, float energyMax);
-
-    /** Print information about the readers: the total number, eta and energy ranges **/
-    void printReadersInfo() const;
-
-    /** Define a formula according to the given name and expression,
-      * delete the previous one
-      **/
-    TTreeFormula* defineFormula(const TString & varName,
-				const TString & expression,
-				TTree *tree);
-
-    /** Return the ParticleType corresponding to the given string,
-      * used by parseFileName
-      **/
-    static egammaMVACalib::ParticleType getParticleType( const TString & s );
-
-    // Functions to define key
-    int getParticleType() const;
-    int getBin() const;
-
-    /** Print the definition of each formula **/
-    void printFormulae() const;
-
-    /** Update and check the formula if a new tree was loaded **/
-    void checkFormula(TTreeFormula *formula);
-
-    /** Define the formula that gives the initial energy estimate
-      * depending on the calibrationType: Ecluster, Eaccordion or nothing (Efull)
-      **/
-    void defineInitialEnergyFormula();
-
-    /** Return the user infomation added in the xml files in the \<UserInfo\>
-     * section as a dictionary
-     **/
-    static AdditionalInfoMap getUserInfo(const TString & xmlfilename);
-
-    /** Used by getMVAResponseTree: clone input tree, activating the branches defined by
-     * \<copyBranches\> and deactivating all of them first if \<deactivateFirst\>=true
-     **/
-    TTree* getOutputTree(const TString& copyBranches, bool deactivateFirst=true);
-
-    /** Check if the given bin is consistent with the previous definitions **/
-    bool checkBin(int bin, float etaMin, float etaMax, float etMin, float etMax);
-
-    /** Define the formulae for the given key **/
-    void defineShiftFormula(ReaderID key);
-
-    /** Return the string that corresponds to the shift **/
-    const TString& getShiftName(ShiftType shift) const;
-
-    /** Define the formula to get the cluster energy **/
-    void defineClusterEnergyFormula();
-
-    /** Check if shower depth variable is present or if it needs to be calculated **/
-    void checkShowerDepth(TTree *tree);
-
-    int getNreaders() const { return (m_useNewBDTs ? m_BDTs.size() : m_readers.size()); }
-
-    /** Create an internal TTree when InitTree(0) is called **/
-    TTree* createInternalTree(TTree *tree);
-
-    //////////////////////////////////////////////////////////////
-
-    // Parameters defined in the constructor
-    egammaMVACalib::egammaType m_egammaType; //! electron or photon
-    bool m_useNewBDTs; //! use egamma::BDT or TMVA::Reader
-    TString m_methodName; //! BDTG
-    egammaMVACalib::CalibrationType m_calibrationType; //! correct Eaccordion, Ecluster...
-    // Variables that define the key and the initial energy (for getMVAEnergy)
-    TString m_etaVar, m_energyVar, m_particleTypeVar;
-    bool m_ignoreSpectators;
-    bool m_hasEnergyBins;
-    int m_binMultiplicity;
-
-    bool m_clusterEif0{}; //! Use clusterE if MVA response is 0
-
-    // Variables that point to the ones that define the key
-    // and the initial energy (for getMVAEnergy)
-    float *m_particleType, *m_eta, *m_energy, *m_initialEnergy;
-
-    // Bin definitions
-    //std::map< ParticleType, TAxis* > m_etaAxis, m_eAxis;
-    //TAxis *fAxisEta, *fAxisEnergy;
-    TH2Poly* m_hPoly;
-
-    // the tree or chain
-    TTree *m_tree, *m_input_tree;
-
-
-    // Pattern of xml file names
-    TPRegexp *m_fileNamePattern;
-
-    // MVA response
-    float m_mvaOutput;
-
-    // Dummy float to be used for spectators if needed
-    float m_dummyFloat;
-
-    ShiftType m_shiftType;
-    // additional information (mean, median, ...) for each xml file
-    std::map< egammaMVACalib::ReaderID, egammaMVACalib::AdditionalInfoMap> m_additional_infos;
-
-    // Map containing TTreeFormulae to get the shifts for each ReaderID, ShiftType
-    ShiftMap m_shiftMap;
-
-    // TMVA readers
-    std::map< egammaMVACalib::ReaderID, TMVA::Reader* > m_readers;
-
-    // New BDT readers
-    std::map< egammaMVACalib::ReaderID, MVAUtils::BDT* > m_BDTs;
-
-    // Variables and formulae for the reader
-    std::map< TString, egammaMVACalib::VarFormula > m_formulae;
-
-    // Formula to get cluster energy (std calibration)
-    TTreeFormula* m_clusterFormula;
-
-  public:
-    static std::vector<double> get_radius(double eta);
-    static double get_shower_depth(double eta,
-				   double raw_cl_0,
-				   double raw_cl_1,
-				   double raw_cl_2,
-				   double raw_cl_3);
-  private:
-    class NotifyDispatcher : public TObject
-    {
-    public:
-      NotifyDispatcher() = default;
-      NotifyDispatcher(const std::vector<TObject*>& objs) : m_objs(objs) { }
-      void add_object(TObject* obj) { m_objs.push_back(obj); }
-      virtual Bool_t Notify() {
-         for (auto obj : m_objs) { obj->Notify(); } return true;
-      }
-    private:
-      std::vector<TObject*> m_objs;
-    };
-
-    NotifyDispatcher m_notify_dispatcher; //!
-};
-
-#endif
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVACalibAnalysisDict.h b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVACalibAnalysisDict.h
deleted file mode 100644
index 5c6124a8c75823e4b07f8bba1af9a8b300892ecc..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVACalibAnalysisDict.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef EGAMMAMVACALIBANALYSIS_EGAMMAMVACALIBANALYSISDICT_H
-#define EGAMMAMVACALIBANALYSIS_EGAMMAMVACALIBANALYSISDICT_H
-#include "egammaMVACalibAnalysis/egammaMVACalib.h"
-#include "egammaMVACalibAnalysis/IegammaMVATool.h"
-#include "egammaMVACalibAnalysis/egammaMVATool.h"
-#include <vector>
-
-/*
-namespace egammaMVACalibAnalysisDict
-{
-  struct tmp
-  {
-    std::vector<egammaMVACalibAnalysisNmsp::Node*> tmp1;
-  };
-
-} // namespace egammaMVACalibAnalysisDict
-*/
-
-#endif // EGAMMAMVACALIBANALYSIS_EGAMMAMVACALIBANALYSISDICT_H
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVATool.h b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVATool.h
deleted file mode 100644
index 8eb6b44be2a86c04e0f9bc725a87045ab421cbab..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVATool.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
-*/
-
-
-#ifndef MVA_CALIB_ANALYSIS_TOOL_H_
-#define MVA_CALIB_ANALYSIS_TOOL_H_
-
-#include <string>
-#include <set>
-
-#include "AsgTools/AsgTool.h"
-#include "egammaMVACalibAnalysis/IegammaMVATool.h"
-#include "xAODTracking/TrackParticleFwd.h"
-
-class egammaMVACalib;
-class egammaMVATreeElectron;
-class egammaMVATreePhoton;
-
-class egammaMVATool : virtual public IegammaMVATool,
-		      public asg::AsgTool
-{
-  // Create a proper constructor for Athena
-  ASG_TOOL_CLASS( egammaMVATool, IegammaMVATool )
-public:
-  /** Constructor */
-  egammaMVATool( const std::string& name );
-  /** Generic destructor */
-  ~egammaMVATool();
-
-  /** @brief initialize method*/
-  StatusCode initialize();
-
-  /** @brief finalize method*/
-  StatusCode finalize();
-
-  /** Main execute. We need to calibrate the cluster.
-      Use full egamma object instead of Type
-      As we employ further variables than the ones present in the cluster
-      This method needs to be valid also for reconstruction
-  */
-
-  StatusCode execute(xAOD::CaloCluster* cluster,const xAOD::Egamma* eg);
-  StatusCode execute(xAOD::CaloCluster* cluster, const xAOD::EgammaParameters::EgammaType egType);
-  StatusCode hltexecute(xAOD::CaloCluster* cluster, const std::string& egType);
-
-  float getEnergy(const xAOD::Egamma* eg);
-  float getEnergy(const xAOD::CaloCluster* cluster, const xAOD::Egamma*);
-  float getEnergy(const xAOD::CaloCluster* cluster, const xAOD::EgammaParameters::EgammaType egType);
-
-  float getEnergy(const xAOD::CaloCluster* cluster, const xAOD::Electron*);
-  float getEnergy(const xAOD::CaloCluster* cluster, const xAOD::Photon*);
-  float getEnergy(const xAOD::CaloCluster* cluster, const std::string&);
-
-private:
-  std::set<std::string> guess_variables(const std::string& filename);
-
-  std::unique_ptr<egammaMVACalib> m_mvaElectron; /// MVA tool for electron
-  std::unique_ptr<egammaMVACalib> m_mvaPhoton; /// MVA tool for photon
-  std::unique_ptr<egammaMVATreeElectron> m_MVATreeElectron;  //!
-  std::unique_ptr<egammaMVATreePhoton> m_MVATreePhoton;    //!
-
-  std::string m_folder; /// string with folder for weight files
-
-  bool m_use_layer_corrected;
-
-};
-
-#endif
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVATree.h b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVATree.h
deleted file mode 100644
index feba6d672a1d67f346ccc701320ea674048a0b8f..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/egammaMVATree.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef EGAMMAMVACALIBANALYSIS_EGAMMAMVATREE
-#define EGAMMAMVACALIBANALYSIS_EGAMMAMVATREE
-
-#include <functional>
-#include <string>
-#include <map>
-#include <array>
-#include <vector>
-#include <tuple>
-#include <cmath>
-#include <set>
-#include <cstdint>
-#include <numeric>
-
-#include "xAODEgamma/Egamma.h"
-#include "xAODEgamma/Electron.h"
-#include "xAODEgamma/Photon.h"
-#include "xAODEgamma/EgammaxAODHelpers.h"
-#include "xAODCaloEvent/CaloCluster.h"
-
-#include <TTree.h>
-#include <TLorentzVector.h>
-
-#include <AsgMessaging/AsgMessaging.h>
-
-#include "egammaMVACalib/egammaMVALayerDepth.h"
-#include "egammaMVACalib/egammaMVAFunctions.h"
-
-
-
-/** Adaptor class: xAOD::Electron (or xAOD::Photon) to TTree for MVA calibration
- *
- *  This class is a TTree with 0 events that recreates the structure of the
- *  TTree used during the training of the MVA calibration. In this way the same
- *  input (in the same format and computed with the same code) is exposed to
- *  egammaMVACalib (via egammaMVATool).
- *
- *  The structure of the TTree is dynamically created, given the set of Branches
- *  needed. The name of the branches is the same used during the training, and
- *  follow the convenctions of PhotonD3PD. By the way this tool should not be
- *  intended as a xOAD->D3PD converter.
- *
- *  Developer note: the structure is dynamic, only the needed branches are
- *    created. In addition the class holds the internal variables linked to the
- *    branches. Since variables are of different types this means to have
- *    different containers. This is the simplest implementation, but not very
- *    maintainable. TODO: Consider the usage of type erasure, for example with
- *    boost::variant.
- **/
-
-#ifndef __CINT__
-namespace detail
-{
-  // best solution here should be to don't implement first template function
-  // to raise compilation error. But maybe there are problems when
-  // linking dictionaries
-  template<typename T> inline std::string ROOT_type_name() {               //!
-  //  static_assert((sizeof(T) == 0), "type is not int/float/bool");
-    return ""; }                                                           //!
-  template<> inline std::string ROOT_type_name<int>() { return "I"; }      //!
-  template<> inline std::string ROOT_type_name<float>() { return "F"; }    //!
-  template<> inline std::string ROOT_type_name<bool>() { return "O"; }     //!
-}
-#endif
-
-/** Base class implementing variables defined for egamma clusters **/
-
-class egammaMVATreeEgamma : public TTree, public asg::AsgMessaging
-{
-public:
-  // egammaMVATreeEgamma() : TTree(), asg::AsgMessaging("egammaMVATreeEgamma") { };
-  egammaMVATreeEgamma(const std::string& name,
-                      const std::string& prefix,
-                      const std::set<std::string>& variables,
-                      bool use_layer_corrected=true);
-  // Note: using pointer version, so that trigger can use the same
-  // interface with egamma = nullptr
-  // TODO: move to const reference, to do that
-  // 1. MVA must know in advance the input variables (in the MVA weights)
-  // 2. remove particleType (Rconv > 0 && Rconv < 800) from TMVACalib:
-  //    particle type should be written in the MVA weights
-
-  /** call update for every egamma object, this update the internal variables
-   *  connected to the branches
-   **/
-  void update(const xAOD::Egamma* egamma);
-  void update(const xAOD::Egamma* egamma, const xAOD::CaloCluster* cluster);
-private:
-  void init_variables(const std::set<std::string>& variables);
-  std::string m_prefix;
-  bool m_use_layer_corrected = true;
-protected:
-  template<typename T> const T* get_ptr(const std::string&) const
-  {
-    static_assert((sizeof(T) == 0), "Type must be int/float");
-    return nullptr;
-  }
-  template<typename T, typename MAPSTRINGFUNCTION, typename CONTAINER>
-  void search_var_and_add(const std::string& var_name,
-                          const MAPSTRINGFUNCTION& map_string_function,
-                          CONTAINER& container)
-  {
-    // WARNING: pay attention to iterator/pointer invalidation
-    auto it_function = map_string_function.find(var_name);
-    if (it_function != map_string_function.end()) {
-      container.emplace_back(var_name, it_function->second, T());
-    }
-  }
-
-  template<typename T, typename MAPSTRINGFUNCTION, typename CONTAINER>
-  void create_structure(const std::set<std::string>& vars,
-                        const MAPSTRINGFUNCTION& map_string_function,
-                        CONTAINER& container)
-  {
-    // WARNING: pay attention to iterator/pointer invalidation:
-    // first populate container, then access to pointers. Do not mix!
-
-    for (const auto& var_name : vars) {
-      search_var_and_add<float>(var_name, map_string_function, container);
-    }
-
-    for (auto& it: container) {
-      ATH_MSG_DEBUG("creating branch " << std::get<0>(it) << " at " << &std::get<2>(it));
-      const std::string root_type_name = detail::ROOT_type_name<T>();
-      //if (not root_type_name.empty()) {
-      //  Branch((std::get<0>(it)).c_str(), &std::get<2>(it), (std::get<0>(it) + "/" + root_type_name).c_str());
-      //}
-      //else {
-      //  ATH_MSG_WARNING("type of " << std::get<0>(it) << " is not int/float/bool");
-        Branch((std::get<0>(it)).c_str(), &std::get<2>(it));
-      //}
-    }
-  }
-protected:
-  typedef std::tuple<std::string, std::function<float(const xAOD::CaloCluster&)>, float> FloatElement; //!
-  std::vector<FloatElement> m_functions_float_from_calo_cluster; //!
-  typedef std::tuple<std::string, std::function<float(const xAOD::Egamma&)>, float> FloatElementParticle; //!
-  std::vector<FloatElementParticle> m_functions_float_from_particle; //!
-public:
-  template<typename T> const T& get_ref(const std::string& var_name) const
-  {
-    const T* ptr = get_ptr<T>(var_name);
-    if (!ptr) { throw std::runtime_error("var " + var_name + " not present"); }
-    return *ptr;
-  }
-//#ifdef ROOTCORE
-  //ClassDef(egammaMVATreeEgamma, 0)
-//#endif
-};
-
-template<> const float* egammaMVATreeEgamma::get_ptr<float>(const std::string&) const;
-template<> const int* egammaMVATreeEgamma::get_ptr<int>(const std::string&) const;
-
-class egammaMVATreePhoton : public egammaMVATreeEgamma
-{
-public:
-  egammaMVATreePhoton(const std::string& name,
-                      const std::set<std::string>& variables,
-                      bool use_layer_corrected=true,
-                      bool force_conversion_to_zero_when_null_photon=false);
-  void update(const xAOD::Photon* photon);
-  void update(const xAOD::Photon* photon, const xAOD::CaloCluster* cluster);
-
-private:
-  bool m_force_conversion_to_zero_when_null_photon;
-  template<typename T> const T* get_ptr(const std::string& var_name) const {
-     return egammaMVATreeEgamma::get_ptr<T>(var_name);
-  }
-  void init_variables(const std::set<std::string>& variables);
-  typedef std::tuple<std::string, std::function<float(const xAOD::Photon&)>, float> FloatElement; //!
-  typedef std::tuple<std::string, std::function<int(const xAOD::Photon&)>, int> IntElement; //!
-  typedef std::tuple<std::string, std::function<float(const egammaMVAFunctions::ConversionHelper&)>, float> FloatElementConv; //!
-  typedef std::tuple<std::string, std::function<int(const egammaMVAFunctions::ConversionHelper&)>, int> IntElementConv; //!
-  std::vector<FloatElement> m_functions_float_from_photon; //!
-  std::vector<IntElement> m_functions_int_from_photon; //!
-  std::vector<FloatElementConv> m_functions_float_from_ConversionHelper; //!
-  std::vector<IntElementConv> m_functions_int_from_ConversionHelper; //!
-public:
-  template<typename T> const T& get_ref(const std::string& var_name) const
-  {
-    const T* ptr = get_ptr<T>(var_name);
-    if (!ptr) { throw std::runtime_error("var " + var_name + " not present"); }
-    return *ptr;
-  }
-//#ifdef ROOTCORE
-    //ClassDef(egammaMVATreePhoton, 0)
-//#endif
-};
-
-template<> const float* egammaMVATreePhoton::get_ptr<float>(const std::string&) const;
-template<> const int* egammaMVATreePhoton::get_ptr<int>(const std::string&) const;
-
-class egammaMVATreeElectron : public egammaMVATreeEgamma
-{
-public:
-  egammaMVATreeElectron(const std::string& name,
-                        const std::set<std::string>& variables,
-                        bool use_layer_corrected=true);
-  void update(const xAOD::Electron* electron);
-  void update(const xAOD::Electron* electron, const xAOD::CaloCluster* cluster);
-private:
-  template<typename T> const T* get_ptr(const std::string& var_name) const {
-     return egammaMVATreeEgamma::get_ptr<T>(var_name);
-  }
-  void init_variables(const std::set<std::string>& variables);
-  typedef std::tuple<std::string, std::function<float(const xAOD::Electron&)>, float> FloatElement; //!
-  typedef std::tuple<std::string, std::function<int(const xAOD::Electron&)>, int> IntElement; //!
-  std::vector<FloatElement> m_functions_float_from_electron; //!
-  std::vector<IntElement> m_functions_int_from_electron; //!
-public:
-  template<typename T> const T& get_ref(const std::string& var_name) const
-  {
-    const T* ptr = get_ptr<T>(var_name);
-    if (!ptr) { throw std::runtime_error("var " + var_name + " not present"); }
-    return *ptr;
-  }
-//#ifdef ROOTCORE
-  //ClassDef(egammaMVATreeElectron, 0)
-//#endif
-};
-
-template<> const float* egammaMVATreePhoton::get_ptr<float>(const std::string&) const;
-template<> const int* egammaMVATreePhoton::get_ptr<int>(const std::string&) const;
-
-
-#endif
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/selection.xml b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/selection.xml
deleted file mode 100644
index 8f66cca71e0a5f20a4c8a22f01eab20b9bed90db..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/egammaMVACalibAnalysis/selection.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<lcgdict>
-  <class name="egammaMVACalib" />
-  <class name="IegammaMVATool" />
-  <class name="egammaMVATool" />
-  <enum pattern="egammaMVACalib::*" />
-
-</lcgdict>
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/__init__.py b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/__init__.py
deleted file mode 100644
index 74583d364ec2ca794156596c7254d9b234a940c6..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/run_egammaMVACalib.py b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/run_egammaMVACalib.py
deleted file mode 100755
index c61a6a39dda28962268d0c463c92bfeb7eee94a9..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/run_egammaMVACalib.py
+++ /dev/null
@@ -1,218 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-from __future__ import print_function
-
-import logging
-import os
-logging.basicConfig(level=logging.INFO)
-
-__doc__ = """Command line interface to run egammaMVACalib or egammaMVACalibMulti
- (see test/testMVACalibMulti.sh)"""
-__author__ = "Ruggero Turra <ruggero.turra@cern.ch>"
-
-
-def doInteract(**kw):
-    "Start the interactive mode, adding the given variables to globals"
-    os.environ["PYTHONINSPECT"] = "1"
-    globals().update(kw)
-    print("\nEntering interactive mode, MVACalib object is called 'm'\n")
-
-
-def make_list(x, N=1):
-    "Return an iterable object, i.e. the object itself or a list with N (=1) elements"
-    if hasattr(x, '__iter__'):
-        return x
-    else:
-        return [x] * N
-
-
-def setDefinitions(m, defs):
-    """setDefinitions(m, defs) -> apply definitions of variables to m
-    (e.g.: el_rawcl_Es1=1.01*el_rawcl_Es1,...)"""
-    if defs:
-        for definition in defs.split(','):
-            m.setDefinition(*definition.split('='))
-
-
-def create_TChain(inputfiles, treename):
-    chain = ROOT.TChain(treename)
-    for inputfile in inputfiles:
-        chain.Add(inputfile)
-    return chain
-
-
-def create_file_list(list_filename, dataset_name):
-    f = ROOT.TFile(list_filename)
-    file_collection = f.Get(dataset_name)
-    urls = [x.GetFirstUrl().GetUrl() for x in file_collection.GetList()]
-    return (file_collection.GetDefaultTreeName(), urls)
-
-
-def getTChain(inputfiles, treename, readFromFile=False, dataset=False):
-    """getTChain(inputfiles, treename="", readFromFile=False, dataset=False) -->
-    Return a chain from a list of inputfiles (ROOT or text files if readFromFile=True)
-    or a dataset (TFileCollection). Raise ValueError if the chain is invalid/empty"""
-    chain = None
-    if dataset:
-        if len(inputfiles) != 1:
-            raise ValueError("When using -d, --dataset you must specify only the ROOT file containing the TFileCollection")
-        tree_name, file_list = create_file_list(inputfiles[0], dataset)
-        chain = create_TChain(file_list, tree_name)
-    else:
-        if readFromFile:
-            # filter is to remove empty strings
-            file_list = list(filter(bool, (i.strip('\n') for f in inputfiles for i in open(f))))
-        else:
-            file_list = inputfiles
-        chain = create_TChain(file_list, treename)
-
-    if not chain or not chain.GetEntries():
-        raise ValueError("Input files not given or not valid")
-    return chain
-
-
-def run_egammaMVACalib(outputfile, inputTree,
-                       inputPath='egammaMVACalib/offline/v3', useTMVA='', particleType=0,
-                       method='BDTG', calibrationType=1, nEvents=-1,
-                       debug=False, printBranches=False, branchName="", copyBranches="input", shift=0,
-                       etaBinDef='', energyBinDef='', particleTypeVar='',
-                       filePattern="", ignoreSpectators=True,
-                       interact=False, first_event=0, friend=False, defs=None):
-
-    iter_options = inputPath, useTMVA, method, calibrationType, shift, branchName, defs
-    if any(isinstance(i, (list, tuple)) and len(i) > 1 for i in iter_options):
-        inputPath, useTMVA, method, calibrationType, shift, branchName, defs = iter_options
-        return run_egammaMVACalibMulti(outputfile, inputTree, inputPath, useTMVA, method,
-                                       particleType, calibrationType, nEvents,
-                                       branchName, copyBranches, shift,
-                                       debug, etaBinDef, energyBinDef, particleTypeVar, filePattern,
-                                       ignoreSpectators, first_event, friend, defs)  # FIXME
-    else:  # Make sure we do not have lists
-        inputPath, useTMVA, method, calibrationType, shift, branchName, defs = (i[0] if isinstance(i, (list, tuple)) else i for i in iter_options)
-
-    params = particleType, not useTMVA, inputPath, method, calibrationType, debug, etaBinDef, energyBinDef, particleTypeVar, filePattern, ignoreSpectators
-    m = ROOT.egammaMVACalib(*params)
-    if shift is not None and shift >= 0:
-        m.setPeakCorrection(shift)
-    setDefinitions(m, defs)
-
-    if printBranches:
-        m.InitTree(inputTree)
-        for i in m.getListOfBranches():
-            print(i.GetName())
-        return
-    elif interact:
-        doInteract(**locals())
-        return
-
-    fout = ROOT.TFile(outputfile, 'update')
-    mvaTree = m.getMVAResponseTree(inputTree, nEvents, branchName, copyBranches, first_event)
-    mvaTree.Print()
-    if friend:
-        mvaTree.AddFriend(inputTree)
-    mvaTree.Write('', ROOT.TObject.kOverwrite)
-    fout.Close()
-
-
-def run_egammaMVACalibMulti(outputfile, inputTree, inputPath, useTMVA, method,
-                            particleType, calibrationType, nEvents, branchName,
-                            copyBranches='input', shift=0,
-                            debug=False, etaBinDef='', energyBinDef='', particleTypeVar='',
-                            filePattern='', ignoreSpectators=True, interact=False, friend=False, defs=None):
-    logging.info("Running egammaMVACalibMulti")
-    # Convert all the inputs to lists and make sure all the lists have the same size
-    # (lists that have size 1 are multiplied by N, the maximum size)
-    iter_options = list(map(make_list, (inputPath, useTMVA, method, calibrationType, shift, defs)))
-    N = max(len(i) for i in iter_options)
-    if any(len(i) not in (1, N) for i in iter_options):
-        raise ValueError("Invalid input: %s" % iter_options)
-
-    iter_options = (make_list(i[0], N) if len(i) == 1 else i for i in iter_options)
-    loop = list(zip(*iter_options))
-    #  print loop
-    if len(loop) != len(branchName):
-        raise ValueError("Multiple options passed, branchName must have %s values, got %s" % (len(loop), len(branchName)))
-    if len(set(branchName)) != len(branchName):
-        raise ValueError("Repeated values for branchName: %s" % branchName)
-
-    M = ROOT.egammaMVACalibMulti(particleType, inputTree, copyBranches)
-    for i, j in enumerate(loop):
-        inputPath, useTMVA, method, calibrationType, shift, defs = j
-        params = particleType, not useTMVA, inputPath, method, calibrationType, debug, etaBinDef, energyBinDef, particleTypeVar, filePattern, ignoreSpectators
-        m = ROOT.egammaMVACalib(*params)
-        setDefinitions(m, defs)
-        M.Add(m, branchName[i])
-        if shift is not None and shift >= 0:
-            M.GetInstance().setPeakCorrection(shift)
-
-    if interact:
-        doInteract(**locals())
-        return
-    fout = ROOT.TFile(outputfile, 'update')
-    mvaTree = M.Run(nEvents)
-    mvaTree.Print()
-    if friend:
-        mvaTree.AddFriend(inputTree)
-    mvaTree.Write('', ROOT.TObject.kOverwrite)
-    fout.Close()
-
-if __name__ == "__main__":
-    from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
-
-    parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
-    parser.description = __doc__
-    parser.epilog = "Example:"
-
-    parser.add_argument("outputfile")
-    parser.add_argument("inputfiles", nargs='+')
-
-    parser.add_argument("-N", "--nEvents", help="Events to run (all by default)", default=-1, type=int)
-    parser.add_argument("--first-event", help="First events to run (0 by default)", default=0, type=int)
-    parser.add_argument("--debug", help="Run in debug mode", default=False, action="store_true")
-    parser.add_argument("--friend", default=False, action="store_true",
-                        help="Add input tree as friend of output", )
-    parser.add_argument("--printBranches", help="Only print the branches used", default=False, action="store_true")
-    parser.add_argument("--interact", help="Instantiate egammaMVACalib and enter interactive mode", default=False, action="store_true")
-
-    io_group = parser.add_argument_group("I/O options")
-    io_group.add_argument("-f", "--readFromFile", help="Read the list of inputfiles from a text file", default=False, action="store_true")
-    io_group.add_argument("-d", "--dataset", help="Name of the dataset used. With this options the <inputfiles> must be a ROOT file containing a TFileCollection", type=str)
-    io_group.add_argument("-n", "--treename", help="Name of input tree", default="egamma")
-    io_group.add_argument('-i', '--inputPath', nargs='*', help="Path containing the xml/ROOT files", type=str, default=['egammaMVACalib/offline/v3'])
-
-    group1 = parser.add_argument_group("Parameters of the optimization")
-    group1.add_argument("--useTMVA", nargs='*', help="Use TMVA instead of new BDTs", type=bool, default=[False])
-    group1.add_argument("-m", "--method", help="Regression methods to use (default: BDTG)", nargs='*', default=['BDTG'], type=str)
-    group1.add_argument("-t", "--particleType", required=True, help="Type of particle (0=photon, 1=electron)",  type=int)
-    group1.add_argument("-T", "--calibrationType", nargs='*', help="Calibration type (0=correction to Ecluster, 1=correction to Eaccordion, 2=full calibration", type=int, default=[1])
-    group1.add_argument("--shift", help="Rescale the energy to (0=No rescale, 1=peak, 2=mean, 3=median, 4=mean10, 5=mean20, 6=median10, 7=median20)", type=int, action='append')
-    group1.add_argument("--filePattern", default="", type=str, help="Pattern of xml files (leave blank)")
-    group1.add_argument("--spec", dest="ignoreSpectators", default=True, action="store_false", help="Enable spectators")
-    group1.add_argument("--defs", type=str, action='append', help="Definitions, comma separated (e.g.: el_rawcl_Es1=1.01*el_rawcl_Es1,...)")
-
-    binDef_group = parser.add_argument_group("Bin definitions")
-    binDef_group.add_argument("-e", "--etaBin", help="Formula that defines eta bins", default="")
-    binDef_group.add_argument("-E", "--energyBin", help="Formula that defines E/Et bins", default="")
-    binDef_group.add_argument("--particleTypeVar", help="Formula that defines unconv, conv, SiSi photons", default="")
-
-    outtree_group = parser.add_argument_group("Options for output tree")
-    outtree_group.add_argument("--branchName", nargs='*', help="Name of the output branch (method name by default)", default=['output_energy'])
-    outtree_group.add_argument("--copyBranches", help="Branches to copy, comma-separated ('input' branches by default)", default="input", type=str)
-
-    args = parser.parse_args()
-
-    import ROOT
-    ROOT.gROOT.ProcessLine(".x $ROOTCOREDIR/scripts/load_packages.C")
-    chain = getTChain(args.inputfiles, args.treename, args.readFromFile, args.dataset)
-    logging.info("running on %d events", chain.GetEntries())
-
-    run_egammaMVACalib(args.outputfile, chain, args.inputPath,
-                       args.useTMVA, args.particleType,
-                       args.method, args.calibrationType,
-                       args.nEvents, args.debug, args.printBranches,
-                       args.branchName, args.copyBranches, args.shift,
-                       args.etaBin, args.energyBin, args.particleTypeVar, args.filePattern,
-                       args.ignoreSpectators,
-                       args.interact, args.first_event, args.friend, args.defs)
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/run_xAOD_egammaMVACalib.py b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/run_xAOD_egammaMVACalib.py
deleted file mode 100755
index 8fa2e721f38f004db2ed4de24d2b5df8e3b47edd..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/python/run_xAOD_egammaMVACalib.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-from __future__ import print_function
-
-import ROOT
-import math
-from functools import partial
-from itertools import islice
-
-import logging
-logging.basicConfig(level=logging.INFO, format="%(filename)s\t%(levelname)s    %(message)s")
-
-ROOT.PyConfig.IgnoreCommandLineOptions = True
-
-# open namespace
-dummy = ROOT.xAOD.TruthParticle_v1()
-
-
-def get_electron_collection(tree):
-    try:
-        collection = tree.Electrons
-    except AttributeError:
-        collection = tree.ElectronCollection
-    return collection
-
-
-def get_photon_collection(tree):
-    try:
-        collection = tree.Photons
-    except AttributeError:
-        collection = tree.PhotonCollection
-    return collection
-
-
-def xAOD_particle_generator(tree, collection_getter, event_numbers=None,
-                            min_pt=None, min_abseta=None, max_abseta=None):
-    if event_numbers is None:
-        event_numbers = []
-    elif type(event_numbers) is int:
-        event_numbers = [event_numbers]
-
-    for ievent in range(tree.GetEntries()):
-        tree.GetEntry(ievent)
-        if event_numbers:
-            ei = tree.EventInfo
-            if not ei.eventNumber() in event_numbers:
-                continue
-
-        collection = collection_getter(tree)
-
-        for i in range(collection.size()):
-            p = collection.at(i)
-            if min_pt is not None and p.pT() < min_pt:
-                continue
-            if min_abseta is not None and abs(p.eta()) < min_abseta:
-                continue
-            if max_abseta is not None and abs(p.eta()) > max_abseta:
-                continue
-            yield p
-
-
-xAOD_photon_generator = partial(xAOD_particle_generator, collection_getter=get_photon_collection)
-xAOD_electron_generator = partial(xAOD_particle_generator, collection_getter=get_electron_collection)
-
-
-def main(filename, **args):
-    logging.debug("initializing xAOD")
-    if (not ROOT.xAOD.Init().isSuccess()):
-        print ("Failed xAOD.Init()")
-
-    logging.debug("initializing tool")
-    tools = []
-    for mva_name, mva_folder in zip(args['mva_name'], args['mva_folder']):
-        if not mva_name:
-            mva_name = mva_folder.replace('/', '_')
-        tool = ROOT.egammaMVATool("egammaMVATool_%s" % mva_name)
-        if args['debug']:
-            tool.msg().setLevel(0)
-        tool.setProperty("folder", mva_folder)
-        if (args['no_layer_correction']):
-            tool.setProperty("use_layer_corrected", False)
-
-        tool.initialize()
-        tools.append(tool)
-
-    tree = None
-    if ".txt" in filename:
-        logging.debug("filename is a list of files")
-        chain = ROOT.TChain(args['tree_name'])
-        for line in islice(open(filename), 10):
-            logging.debug("adding %s", line.strip())
-            chain.Add(line.strip())
-        tree = ROOT.xAOD.MakeTransientTree(chain, ROOT.xAOD.TEvent.kAthenaAccess)
-    else:
-        logging.debug("opening file %s", filename)
-        f = ROOT.TFile.Open(filename)
-        if not f:
-            logging.error("problem opening file %s", filename)
-        tree = ROOT.xAOD.MakeTransientTree(f, args['tree_name'], ROOT.xAOD.TEvent.kAthenaAccess)
-
-    logging.info("input has %d entries", tree.GetEntries())
-
-    logging.debug("creating output tree")
-    fout = ROOT.TFile(args['output'], "recreate")
-    tree_out = ROOT.TNtuple(args["tree_name"], args["tree_name"], "eta:phi:true_e:pdgId:xAOD_e:raw_e:raw_ps:%s" % ":".join("MVA_e_" + name for name in args['mva_name']))
-
-    logging.debug("looping on %s container", args['particle_type'])
-    generator = {'electron': xAOD_electron_generator, 'photon': xAOD_photon_generator}[args["particle_type"]](tree, min_pt=args['min_pt'],
-                                                                                       min_abseta=args['min_abseta'], max_abseta=args['max_abseta'],
-                                                                                       event_numbers=args['event_number'])
-    get_truth_particle = ROOT.xAOD.TruthHelpers.getTruthParticle
-
-    for particle in islice(generator, None, args['nparticles']):
-        logging.debug(" === new particle |eta|phi|e|rawe0|rawe1|TileGap3 = |%.2f|%.2f|%.2f|%.2f|%.2f|%.2f ===",
-                      particle.eta(), particle.phi(), particle.e(),
-                      particle.caloCluster().energyBE(0),
-                      particle.caloCluster().energyBE(1),
-                      particle.caloCluster().eSample(17)
-                      )
-        xAOD_energy = particle.e()
-        cluster = particle.caloCluster()
-        MVA_energies = [t.getEnergy(cluster, particle) for t in tools]
-        true_particle = get_truth_particle(particle)
-        true_e = true_particle.e() if true_particle else 0
-        pdgId = true_particle.pdgId() if true_particle else 0
-        raw_e = cluster.energyBE(1) + cluster.energyBE(2) + cluster.energyBE(3)
-        raw_ps = cluster.energyBE(0)
-        tree_out.Fill(cluster.eta(), cluster.phi(),
-                      true_e, pdgId, xAOD_energy, raw_e, raw_ps, *MVA_energies)
-        if tree_out.GetEntries() % 500 == 0:
-            logging.info("%d particle written", tree_out.GetEntries())
-        if math.isnan(xAOD_energy) or any(map(math.isnan, MVA_energies)) or xAOD_energy < 1 or any(m < 1 for m in MVA_energies):
-            print ("==>", particle.author(), particle.eta(), particle.phi(), particle.e(), cluster.e(), MVA_energies)
-
-    logging.info("%d events written", tree_out.GetEntries())
-
-    tree_out.Write()
-    fout.Close()
-
-    ROOT.xAOD.ClearTransientTrees()
-
-if __name__ == '__main__':
-    ROOT.gROOT.ProcessLine(".x $ROOTCOREDIR/scripts/load_packages.C")
-    import argparse
-
-    parser = argparse.ArgumentParser(description='Run on xAOD and dump calibrated energy for electron and photons',
-                                     epilog='example: ./run_xAOD_egammaMVACalib.py /afs/cern.ch/work/t/turra/mc15_13TeV_photons/AOD.07922786._004040.pool.root.1')
-    parser.add_argument('filename', type=str, help='path to xAOD')
-    parser.add_argument('--output', type=str, help='output file, default=output.root', default='output.root')
-    parser.add_argument('--particle-type', choices=('electron', 'photon'), default='electron', help='particle type, default=electron')
-    parser.add_argument('--nparticles', type=int, help='number of particles')
-    parser.add_argument('--tree-name', type=str, default='CollectionTree')
-    parser.add_argument('--min-pt', type=float, help='minimum pT')
-    parser.add_argument('--min-abseta', type=float, help='minimum |eta|')
-    parser.add_argument('--max-abseta', type=float, help='maximum |eta|')
-    parser.add_argument('--event-number', type=int)
-    parser.add_argument('--debug', action='store_true', default=False)
-    parser.add_argument('--mva-folder', type=str, action='append', help='folder to be used default=egammaMVACalib/offline/v3_E4crack_bis', default=['egammaMVACalib/offline/v3_E4crack_bis'])
-    parser.add_argument('--mva-name', type=str, action='append', help='MVA name', default=[''])
-    parser.add_argument('--no-layer-correction', action='store_true', default=False)
-
-    args = parser.parse_args()
-    if args.debug:
-        logging.getLogger().setLevel(logging.DEBUG)
-    main(**vars(args))
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/share/mem_test.ref b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/share/mem_test.ref
deleted file mode 100644
index ee0474908aebce8b9b85cbedbf58771922a8f22a..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/share/mem_test.ref
+++ /dev/null
@@ -1,14 +0,0 @@
-egammaMVACalib       INFO Accessing calibration from egammaMVACalib/online/v3
-egammaMVACalib       INFO Reading weights from egammaMVACalib/online/v3
-egammaMVACalib       INFO 114 readers created
-egammaMVACalib       INFO egammaMVACalib::printReadersInfo 100 eta bin(s) -- ( 0 < abs(el_cl_eta) < 2.5
-egammaMVACalib       INFO egammaMVACalib::printReadersInfo 100 energy bin(s) -- ( 0  < (el_rawcl_Es1 + el_rawcl_Es2 + el_rawcl_Es3)/cosh(el_cl_eta) < 50000GeV
-egammaMVACalib       INFO Number of variables:8
-egammaMVACalib       INFO Variable that defines particleType not set. Using default formula: ph_Rconv > 0. && ph_Rconv < 800.
-egammaMVACalib       INFO Accessing calibration from egammaMVACalib/online/v3
-egammaMVACalib       INFO Reading weights from egammaMVACalib/online/v3
-egammaMVACalib       INFO 228 readers created
-egammaMVACalib       INFO egammaMVACalib::printReadersInfo 100 eta bin(s) -- ( 0 < abs(ph_cl_eta) < 2.5
-egammaMVACalib       INFO egammaMVACalib::printReadersInfo 100 energy bin(s) -- ( 0  < (ph_rawcl_Es1 + ph_rawcl_Es2 + ph_rawcl_Es3)/cosh(ph_cl_eta) < 50000GeV
-egammaMVACalib       INFO Number of variables:12
-[ 0.575108  0.213296  0.018116] GB
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/src/components/egammaMVACalib_entries.cxx b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/src/components/egammaMVACalib_entries.cxx
deleted file mode 100644
index ab0a08b10c593919807bfa1faac9496791bf29c0..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/src/components/egammaMVACalib_entries.cxx
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "egammaMVACalibAnalysis/egammaMVATool.h"
-
-DECLARE_COMPONENT( egammaMVATool )
-
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/test/mem_test.py b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/test/mem_test.py
deleted file mode 100755
index c1d6b52baacc254e724675dd9e53519c422abb45..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/test/mem_test.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /usr/bin/env python
-
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-from __future__ import print_function
-
-from future import standard_library
-standard_library.install_aliases()
-
-__doc__ = "To print the vmem usage before and after instantiating egammaMVACalib"
-
-def Vmem():
-  "Return the Vmem usage in kB"
-  import os, subprocess
-  cmd = "cat /proc/%d/status | grep VmSize | awk '{print($2)}'" % os.getpid()
-  return int( subprocess.getoutput(cmd) )
-
-# initial
-memUsage = [Vmem()]
-
-# import ROOT and load dictionary
-import ROOT, cppyy, numpy as np # noqa: F401
-cppyy.loadDict('egammaMVACalibDict')
-memUsage.append( Vmem() )
-
-# Electrons
-m = ROOT.egammaMVACalib(1, True, 'egammaMVACalib/online/v3')
-memUsage.append( Vmem() )
-
-# Photons
-m = ROOT.egammaMVACalib(0, True, 'egammaMVACalib/online/v3')
-memUsage.append( Vmem() )
-
-for i in memUsage:
-  print (i/1e6 , 'GB')
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/util/mem_test_initialize.cxx b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/util/mem_test_initialize.cxx
deleted file mode 100644
index b568bd224ee718965f69c4db36eab198e85c665b..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/util/mem_test_initialize.cxx
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "egammaMVACalibAnalysis/egammaMVATool.h"
-
-
-int main()
-{
-  egammaMVATool myMVATool("myMVATool");
-  myMVATool.setProperty("folder", "egammaMVACalib/online/v3").ignore();
-  myMVATool.initialize().ignore();
-
-  return 0;
-}
diff --git a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/util/testClusterMVACalib.cxx b/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/util/testClusterMVACalib.cxx
deleted file mode 100644
index 863b786a29db591015c05aec3d7894a06617fb59..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/ElectronPhotonID/egammaMVACalibAnalysis/util/testClusterMVACalib.cxx
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-// This is an example doing in ROOT what actually EMClusterTool does in reconstruction.
-// If you found your way here and you just to correct final objects 
-// Please use the nice ElectronPhotonFourMomentumCorrection 
-//This is about changing the cluster i.e basic object and
-//Should be run in expert mode only
-//But since we can do in ROOT what we do in Athena lets do it !!!!
-
-// System include(s):
-#include <memory>
-#include <cstdlib>
-
-// ROOT include(s):
-#include <TFile.h>
-#include <TError.h>
-#include <TString.h>
-
-// EDM include(s):
-#include "xAODEventInfo/EventInfo.h"
-#include "xAODEgamma/ElectronContainer.h" 
-#include "xAODCaloEvent/CaloClusterContainer.h" 
-#include "xAODCore/ShallowCopy.h"
-#include "xAODEgamma/Egamma.h"
-#include "xAODCore/AuxContainerBase.h"
-
-#include "egammaMVACalibAnalysis/egammaMVATool.h"
-#include "AsgMessaging/AsgMessaging.h"
-
-// Infrastructure include(s):
-#ifdef ROOTCORE
-#   include "xAODRootAccess/Init.h"
-#   include "xAODRootAccess/TEvent.h"
-#   include "xAODRootAccess/TStore.h"
-#endif // ROOTCORE
-
-
-//Define msg functionality using AsgMessaging
-namespace{  
-  asg::AsgMessaging dummymsg("");
-}
-
-#define DUMMY_MSG( lvl, ARG ) {dummymsg.msg(lvl)<<ARG<<endmsg ;}
-#define MSG_DEBUG( ARG ) {DUMMY_MSG(MSG::DEBUG, ARG);}
-#define MSG_INFO( ARG ) {DUMMY_MSG(MSG::INFO, ARG);}
-#define MSG_WARNING( ARG ) {DUMMY_MSG(MSG::WARNING, ARG);}
-#define MSG_ERROR( ARG ) {DUMMY_MSG(MSG::ERROR, ARG);}
-#define MSG_FATAL( ARG ) {DUMMY_MSG(MSG::FATAL, ARG);}
-#define MSG_ABORT( ARG ) {DUMMY_MSG(MSG::FATAL, ARG); std::abort();} 
-
-#define CHECK( ARG )                                                    \
-  do {                                                                  \
-    const bool result = ARG;                                            \
-    if( ! result ) {                                                    \
-      MSG_ERROR("FAILED  to execute" <<#ARG);                           \
-      return EXIT_FAILURE;                                              \
-    }                                                                   \
-  } while( false )
-
-
-//main test code
-int main( int argc, char* argv[] ) {
-
-   // The application's name:
-   const char* APP_NAME = argv[ 0 ];
-
-   MSG::Level mylevel=MSG::DEBUG;
-   dummymsg.msg().setLevel(mylevel);
-   dummymsg.msg().setName(APP_NAME);
-   // Check if we received a file name:
-   if( argc < 2 ) {
-     MSG_ERROR("No file name received!" );
-     MSG_ERROR( "  Usage: %s [xAOD file name]");
-     return EXIT_FAILURE;
-   }
-   
-   // Initialise the application:
-   CHECK( xAOD::Init( APP_NAME ) );
-   
-   // Open the input file:
-   const TString fileName = argv[ 1 ];
-   Info( APP_NAME, "Opening file: %s", fileName.Data() );
-   std::unique_ptr< TFile > ifile( TFile::Open( fileName, "READ" ) );
-   CHECK( ifile.get() );
-
-   // Open the output file:
-   std::unique_ptr< TFile > ofile( TFile::Open( "DxAOD.pool.root", "RECREATE" ) );
-   if( ! ofile.get() ) {
-     MSG_ERROR("Couldn't open output file" );
-          return EXIT_FAILURE;
-   }
- 
-   // Create a TEvent object (persistent store)
-   xAOD::TEvent pers( xAOD::TEvent::kClassAccess );
-   // Create a TStore object (transient store)
-   xAOD::TStore trans;
-   CHECK( pers.readFrom( ifile.get() ) );
-   CHECK( pers.writeTo( ofile.get() ) ); 
-   
-   //
-   MSG_INFO("Number of events in the file: "<< pers.getEntries());
-
-   // Decide how many events to run over:
-   Long64_t entries = pers.getEntries();
-   if( argc > 2 ) {
-      const Long64_t e = atoll( argv[ 2 ] );
-      if( e < entries ) {
-         entries = e;
-      }
-   }
-   egammaMVATool myMVATool ("myMVATool");
-   CHECK(myMVATool.setProperty("folder", "egammaMVACalib/offline/v3_E4crack_bis"));
-   CHECK(myMVATool.initialize());
-
-   // Loop over the events:
-   for( Long64_t entry = 0; entry < entries; ++entry ) {
-     
-     // Tell the object which entry to look at:
-     pers.getEntry( entry );
-     MSG_INFO("Event: " <<entry);
-
-     const xAOD::EventInfo* event_info = 0;  
-     CHECK( pers.retrieve( event_info, "EventInfo" ) ); 
-
-
-     const xAOD::ElectronContainer* electrons;
-     CHECK(pers.retrieve(electrons, "Electrons"));
-
-     const xAOD::CaloClusterContainer* clusters;
-     CHECK(pers.retrieve(clusters, "egammaClusters"));
-
-     //Clone electron
-     std::pair<xAOD::ElectronContainer*, xAOD::ShallowAuxContainer* > 
-       electronShallowcopy = xAOD::shallowCopyContainer( *electrons );
-
-     // Deep copy clusters
-     xAOD::CaloClusterContainer* clusters_copy = new xAOD::CaloClusterContainer();
-     xAOD::AuxContainerBase* clusters_copy_aux = new xAOD::AuxContainerBase();
-     clusters_copy->setStore(clusters_copy_aux);
-     CHECK(trans.record(clusters_copy,
-			"CalibratedClusters") );
-     CHECK(trans.record( clusters_copy_aux,
-			"CalibratedClustersAux." ) );
-
-     for (xAOD::Electron* el : *electronShallowcopy.first) {
-       
-       const xAOD::CaloCluster* oldCluster = el->caloCluster();
-       xAOD::CaloCluster* newCluster = new xAOD::CaloCluster(*oldCluster);
-       CHECK(myMVATool.execute(newCluster,el));
-       clusters_copy->push_back(newCluster);
-       std::vector<ElementLink<xAOD::CaloClusterContainer>> links_clusters;
-       links_clusters.push_back(ElementLink<xAOD::CaloClusterContainer>(newCluster, *clusters_copy));
-       el->setCaloClusterLinks(links_clusters);
-     }
-
-     //Final saving
-     // Copy the original container, and save the shallow copy:
-     CHECK( pers.copy( "Electrons" ) );
-     CHECK(pers.record( electronShallowcopy.first,
-			"CalibratedElectrons" ) );
-     CHECK(pers.record( electronShallowcopy.second,
-			"CalibratedElectronsAux." ) );
-
-     CHECK(pers.record(clusters_copy,
-			"CalibratedClusters") );
-     CHECK(pers.record( clusters_copy_aux,
-			"CalibratedClustersAux." ) );
-
-
-     // Record the output event:
-     pers.fill();     
-     trans.clear();
-   }
-   
-   CHECK(pers.finishWritingTo( ofile.get() ) );
-
-
-   CHECK(myMVATool.finalize());
-   return 0;
-}
diff --git a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx
index d33cbc6f12ac77d0344bf8ad351002328355886f..5103b1f79ad2132891c3aa57509472e3d0cfa772 100644
--- a/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx
+++ b/PhysicsAnalysis/EventTag/EventTagRawAlgs/src/RawInfoSummaryForTagWriter.cxx
@@ -26,7 +26,7 @@ RawInfoSummaryForTagWriter::RawInfoSummaryForTagWriter(const std::string& name,
 {
   declareProperty("IDTrackKey",m_sgKeyIDtrack);
   declareProperty("CaloCellContKey", m_cellContKey="AllCalo");
-  declareProperty("CaloClusterKey",m_caloClusterKey="CaloTopoCluster");
+  declareProperty("CaloClusterKey",m_caloClusterKey="CaloTopoClusters");
   declareProperty("LArCollTimeName", m_larCollTimeName="LArCollisionTime");
   declareProperty("doClusterSums",m_doClusterSums=true);
   declareProperty("TRT_DriftCircleContainerName", m_TRT_DriftCircleName="TRT_DriftCircles");
diff --git a/PhysicsAnalysis/Interfaces/AsgAnalysisInterfaces/AsgAnalysisInterfaces/IPileupReweightingTool.h b/PhysicsAnalysis/Interfaces/AsgAnalysisInterfaces/AsgAnalysisInterfaces/IPileupReweightingTool.h
index fefb6d3510ddde997200a37fa12ea4505b5dd3da..ed3a10876768dc92ccfb91cf5fb59b2ba45cc061 100644
--- a/PhysicsAnalysis/Interfaces/AsgAnalysisInterfaces/AsgAnalysisInterfaces/IPileupReweightingTool.h
+++ b/PhysicsAnalysis/Interfaces/AsgAnalysisInterfaces/AsgAnalysisInterfaces/IPileupReweightingTool.h
@@ -34,13 +34,13 @@ class TPileupReweighting;
 
 
          /// Return combined pileup weight
-         virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo ) = 0;
+         virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo, bool correctUnrepresented=false ) = 0;
 
          /// Same as above, but for a 'custom weight' variable
-         virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo,Double_t x, Double_t y=0. ) = 0;
+         virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo,Double_t x, Double_t y=0., bool correctUnrepresented=false ) = 0;
 
          /// get combined weight (i.e. pileup weight) but with a 1./dataWeight factor applied, this if used for 'prescaling' MC
-         virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo , const TString& trigger, bool mu_dependent=true ) = 0;
+         virtual float getCombinedWeight( const xAOD::EventInfo& eventInfo , const TString& trigger, bool mu_dependent=true, bool correctUnrepresented=false ) = 0;
 
          /// When using UnrepresentedDataAction=2, you may want to apply this additional weight to ensure sum of weights are preserved
          virtual float getUnrepresentedDataWeight( const xAOD::EventInfo& eventInfo ) = 0;
diff --git a/PhysicsAnalysis/JetTagging/FlavourTaggingTests/FlavourTaggingTests/PhysicsTriggerVariablePlots.h b/PhysicsAnalysis/JetTagging/FlavourTaggingTests/FlavourTaggingTests/PhysicsTriggerVariablePlots.h
index 051175fdc79ba42dd3a873f4d2a99c2cd262ba2c..c14fd884caf55a9dd6486546c12daf38370a67ba 100644
--- a/PhysicsAnalysis/JetTagging/FlavourTaggingTests/FlavourTaggingTests/PhysicsTriggerVariablePlots.h
+++ b/PhysicsAnalysis/JetTagging/FlavourTaggingTests/FlavourTaggingTests/PhysicsTriggerVariablePlots.h
@@ -41,8 +41,6 @@ namespace FTAGValidation {
     int m_nTotal_qualityOnlineJets;
 
   private:
-    SG::ReadHandleKey< xAOD::JetContainer >  m_trigJetKey  { this, "TrigJetCollectionKey", "",   
-	"Input Jet collection name" };
     SG::ReadHandleKey< xAOD::VertexContainer > m_trigVertexKey { this, "TrigVertexCollectionKey", "",
 	"Input Vertex collection name" };
     SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trigTrackKey { this, "TrigTrackParticleCollectionKey", "",
diff --git a/PhysicsAnalysis/JetTagging/FlavourTaggingTests/python/FlavourTaggingConfiguration_PhysicsTriggerVariablePlots.py b/PhysicsAnalysis/JetTagging/FlavourTaggingTests/python/FlavourTaggingConfiguration_PhysicsTriggerVariablePlots.py
index faa14349c843cc217a8927774364225a095245f5..3e732964733b71ee210f73f58bb106df8f8e4b67 100644
--- a/PhysicsAnalysis/JetTagging/FlavourTaggingTests/python/FlavourTaggingConfiguration_PhysicsTriggerVariablePlots.py
+++ b/PhysicsAnalysis/JetTagging/FlavourTaggingTests/python/FlavourTaggingConfiguration_PhysicsTriggerVariablePlots.py
@@ -28,7 +28,6 @@ def getPhysicsTriggerVariablePlotsCfg():
     options = {}
     options['name'] = 'PhysicsTriggerVariablePlotsAlg'
     options['OutputLevel'] = INFO
-    options['TrigJetCollectionKey'] = 'HLT_bJets'
     options['TrigVertexCollectionKey'] = 'HLT_IDVertex_FS'
     options['TrigTrackParticleCollectionKey'] = 'HLT_IDTrack_Bjet_IDTrig'
     options['OfflineJetCollectionKey'] = 'AntiKt4EMPFlowJets'
diff --git a/PhysicsAnalysis/JetTagging/FlavourTaggingTests/src/PhysicsTriggerVariablePlots.cxx b/PhysicsAnalysis/JetTagging/FlavourTaggingTests/src/PhysicsTriggerVariablePlots.cxx
index 31b83c5603dae899d260df0985a962f5dfa2b871..497e65b089fda095d09a98ca31aa9fded8dd6568 100644
--- a/PhysicsAnalysis/JetTagging/FlavourTaggingTests/src/PhysicsTriggerVariablePlots.cxx
+++ b/PhysicsAnalysis/JetTagging/FlavourTaggingTests/src/PhysicsTriggerVariablePlots.cxx
@@ -31,7 +31,6 @@ namespace FTAGValidation {
     ATH_CHECK( FTAGValidationAlgorithm::initialize() );
 
     ATH_MSG_INFO( "Properties declaration:" );
-    ATH_MSG_INFO( "   -- " << m_trigJetKey      );
     ATH_MSG_INFO( "   -- " << m_trigVertexKey   );
     ATH_MSG_INFO( "   -- " << m_trigTrackKey    );
     ATH_MSG_INFO( "   -- " << m_offJetKey   );
@@ -42,7 +41,6 @@ namespace FTAGValidation {
     ATH_MSG_INFO( "   -- " << m_maxJetEta );
     ATH_MSG_INFO( "   -- " << m_minJetPt  );
 
-    ATH_CHECK( m_trigJetKey.initialize() );
     ATH_CHECK( m_trigVertexKey.initialize() );
     ATH_CHECK( m_trigTrackKey.initialize() );
     ATH_CHECK( m_offJetKey.initialize() );
@@ -121,7 +119,7 @@ namespace FTAGValidation {
       int nJetsWithMuon = 0;
       int nJetsWithSV   = 0;
 
-      std::vector< TrigCompositeUtils::LinkInfo<xAOD::JetContainer> > onlineJets = m_trigDec->features<xAOD::JetContainer>(chain, TrigDefs::Physics, m_trigJetKey.key());
+      std::vector< TrigCompositeUtils::LinkInfo<xAOD::JetContainer> > onlineJets = m_trigDec->features<xAOD::JetContainer>(chain, TrigDefs::Physics);
       ATH_MSG_DEBUG("onlineJets.size(): " << onlineJets.size() );
       int n_qualityJets = 0;
       for( const auto& jetLinkInfo : onlineJets ) {
@@ -133,8 +131,8 @@ namespace FTAGValidation {
 
         ATH_MSG_DEBUG( "JET KINEMATICS:" );
         ATH_MSG_DEBUG( "  ** pt=" << jet->p4().Et() / Gaudi::Units::GeV << " eta=" << jet->eta() << " phi=" << jet->phi() );
-        ATH_CHECK( fillHistogram( chain + "_jet_E"   , jet->e()   ) );
-        ATH_CHECK( fillHistogram( chain + "_jet_pT"  , jet->pt()  ) );
+        ATH_CHECK( fillHistogram( chain + "_jet_E"   , jet->e()  / Gaudi::Units::GeV ) );
+        ATH_CHECK( fillHistogram( chain + "_jet_pT"  , jet->pt() / Gaudi::Units::GeV ) );
         ATH_CHECK( fillHistogram( chain + "_jet_eta" , jet->eta() ) );
         ATH_CHECK( fillHistogram( chain + "_jet_phi" , jet->phi() ) );
 
diff --git a/PhysicsAnalysis/JetTagging/FlavourTaggingTests/src/PhysicsVariablePlots.cxx b/PhysicsAnalysis/JetTagging/FlavourTaggingTests/src/PhysicsVariablePlots.cxx
index cf8cab88a73396d6ee0e6432646b5ee8fdd6aef1..a8a41ab093e227b288e01148dc00eb9ecd2703c7 100644
--- a/PhysicsAnalysis/JetTagging/FlavourTaggingTests/src/PhysicsVariablePlots.cxx
+++ b/PhysicsAnalysis/JetTagging/FlavourTaggingTests/src/PhysicsVariablePlots.cxx
@@ -115,8 +115,8 @@ namespace FTAGValidation {
 		     " eta=" << jet->eta() <<
 		     " phi=" << jet->phi() );
 
-      ATH_CHECK( fillHistogram( "jet_E"   , jet->e()   ) );
-      ATH_CHECK( fillHistogram( "jet_pT"  , jet->pt()  ) );
+      ATH_CHECK( fillHistogram( "jet_E"   , jet->e()  / Gaudi::Units::GeV ) );
+      ATH_CHECK( fillHistogram( "jet_pT"  , jet->pt() / Gaudi::Units::GeV ) );
       ATH_CHECK( fillHistogram( "jet_eta" , jet->eta() ) );
       ATH_CHECK( fillHistogram( "jet_phi" , jet->phi() ) );
       //nMuons and nSV1
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagTrackAugmenterAlgConfig.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagTrackAugmenterAlgConfig.py
index aa68773ae02da7032a9777ddf7dde95810a3255d..0ef5e34c7f043b8bd3df876baf295851f4aab74a 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagTrackAugmenterAlgConfig.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/BTagTrackAugmenterAlgConfig.py
@@ -24,8 +24,7 @@ def BTagTrackAugmenterAlgCfg(ConfigFlags, TrackCollection = 'InDetTrackParticles
     if 'TrackToVertexIPEstimator' not in  options :
         options.setdefault('TrackToVertexIPEstimator',acc.popToolsAndMerge(BTagTrackToVertexIPEstimatorCfg(ConfigFlags, 'TrkToVxIPEstimator') ))
     if 'Extrapolator' not in options :
-        exrtrapolator_acc = AtlasExtrapolatorCfg(ConfigFlags)
-        options.setdefault('Extrapolator', acc.popToolsAndMerge(exrtrapolator_acc))
+        options.setdefault('Extrapolator', acc.popToolsAndMerge(AtlasExtrapolatorCfg(ConfigFlags)))
 
     # -- create the track augmenter algorithm
     acc.addEventAlgo(Analysis__BTagTrackAugmenterAlg(**options))
diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/InDetImprovedJetFitterTrackSelectorToolConfig.py b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/InDetImprovedJetFitterTrackSelectorToolConfig.py
index 22dfb4e455015ce22fe66befeaa4be9c2694f11e..7ecf44816c773ba0f7cbe686356e653bd60e3e82 100644
--- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/InDetImprovedJetFitterTrackSelectorToolConfig.py
+++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/python/InDetImprovedJetFitterTrackSelectorToolConfig.py
@@ -55,7 +55,7 @@ def InDetImprovedJetFitterTrackSelectorToolCfg(flags, name, useBTagFlagsDefaults
     options['name'] = name
 
     acc = AtlasExtrapolatorCfg(flags)
-    options.setdefault("Extrapolator", acc.getPrimary() )
+    options.setdefault("Extrapolator", acc.popPrivateTools() )
 
     # This presumably should be added, but causes config merge conflicts
     # FIXME! 
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/SVTag.h b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/SVTag.h
index 86b20365b75ad975dfa88762df6db0168fa3bddd..8b8a34c3e4cb3b1c7b20a9e0425c35a572509cf0 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/SVTag.h
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/JetTagTools/SVTag.h
@@ -54,6 +54,9 @@ namespace Analysis
       // double get3DSignificance(const Trk::RecVertex & priVertex,
       //                          std::vector<const Trk::RecVertex*> & secVertex,
       //                          const Amg::Vector3D jetDirection);
+      double get3DSignificanceCorr(const xAOD::Vertex& priVertex,
+                               std::vector<const xAOD::Vertex*>& secVertex,
+                               const Amg::Vector3D jetDirection) const;
       
 
       ToolHandle< NewLikelihoodTool > m_likelihoodTool;
diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx
index 28fa3b21538603032a8f50add1c90b1ceff69f04..830de43ee93ae0376918fc25c84a4fa7b8cc5e66 100644
--- a/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx
+++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx
@@ -193,6 +193,7 @@ namespace Analysis
     // 
     float    ambtot = -1., xratio = -1., distnrm = 0., drJPVSV = 0., Lxy = -100., L3d = -100.;
     int NSVPair = -1;
+    float distnrmCorr=0.;
 
     //retrieving the secondary vertices
     bool status = true;
@@ -254,6 +255,8 @@ namespace Analysis
         distnrm=get3DSignificance(priVtx, vecVertices,
                                   Amg::Vector3D(jetToTag.p4().Px(),jetToTag.p4().Py(),jetToTag.p4().Pz()));
 	ATH_MSG_VERBOSE("#BTAG# SVX x = " << myVert->position().x() << " y = " << myVert->position().y() << " z = " << myVert->position().z());
+        distnrmCorr=get3DSignificanceCorr(priVtx, vecVertices,
+                                  Amg::Vector3D(jetToTag.p4().Px(),jetToTag.p4().Py(),jetToTag.p4().Pz()));
       } else {
 	ATH_MSG_VERBOSE("#BTAG# No vertex. Cannot calculate normalized distance.");
 	distnrm=0.;
@@ -290,8 +293,9 @@ namespace Analysis
 	}
       else if (m_xAODBaseName == "SV1")
 	{
-	  BTag.setTaggerInfo(distnrm, xAOD::BTagInfo::SV1_normdist);
+	  BTag.setTaggerInfo(distnrmCorr, xAOD::BTagInfo::SV1_normdist);
 	  BTag.setVariable<float>(m_xAODBaseName, "significance3d", distnrm);
+	  BTag.setVariable<float>(m_xAODBaseName, "correctSignificance3d", distnrmCorr);
 	  BTag.setVariable<float>(m_xAODBaseName, "deltaR", drJPVSV);
 	  BTag.setVariable<float>(m_xAODBaseName, "Lxy", Lxy);
 	  BTag.setVariable<float>(m_xAODBaseName, "L3d", L3d);
@@ -555,18 +559,21 @@ namespace Analysis
     double Lz = meanPosition[2]-priVertex.position().z();
     
     const double decaylength = sqrt(Lx*Lx + Ly*Ly + Lz*Lz);
+    if(decaylength==0.)return 0.;  //Safety
     const double inv_decaylength = 1. / decaylength;
     
     double dLdLx = Lx * inv_decaylength;
     double dLdLy = Ly * inv_decaylength;
     double dLdLz = Lz * inv_decaylength;
-    double decaylength_err = sqrt(dLdLx*dLdLx*covariance(0,0) +
+    double decaylength_err2 =     dLdLx*dLdLx*covariance(0,0) +
 				  dLdLy*dLdLy*covariance(1,1) +
 				  dLdLz*dLdLz*covariance(2,2) +
 				  2.*dLdLx*dLdLy*covariance(0,1) +
 				  2.*dLdLx*dLdLz*covariance(0,2) +
-				  2.*dLdLy*dLdLz*covariance(1,2));
-    
+				  2.*dLdLy*dLdLz*covariance(1,2);
+    if(decaylength_err2<=0.)return 0.;  //Something is wrong
+    double decaylength_err = sqrt(decaylength_err2);
+   
     double decaylength_significance = 0.;
     if (decaylength_err != 0.) decaylength_significance = decaylength/decaylength_err;
 
@@ -576,5 +583,35 @@ namespace Analysis
     
     return decaylength_significance;
   }
+
+  double SVTag::get3DSignificanceCorr(const xAOD::Vertex& priVertex,
+				  std::vector<const xAOD::Vertex*>& secVertex,
+				  const Amg::Vector3D jetDirection) const {
+
+    std::vector<double> Sig3D(0);
+    bool success=true;
+    AmgSymMatrix(3) Wgt;
+
+    for (auto & svrt : secVertex)
+      {
+         Amg::Vector3D SVmPV = svrt->position()-priVertex.position();
+         AmgSymMatrix(3) SVmPVCov=svrt->covariancePosition()+priVertex.covariancePosition();
+         SVmPVCov.computeInverseWithCheck(Wgt, success);
+         if( !success || Wgt(0,0)<=0. || Wgt(1,1)<=0. || Wgt(2,2)<=0. )continue;     //Inversion failure
+         double significance=SVmPV.transpose()*Wgt*SVmPV;
+         if(significance <= 0.) continue;                          //Something is still wrong!
+         significance=std::sqrt(significance);
+         if(SVmPV.dot(jetDirection)<0.)significance *= -1.;
+         Sig3D.push_back(significance);
+      }
+
+    if(Sig3D.size()==0)return 0.;
+
+    return *std::max_element(Sig3D.begin(),Sig3D.end());
+    //return std::accumulate(Sig3D.begin(),Sig3D.end(),0.);
+  }
+
+
+
 }
 
diff --git a/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/data/PhysValBtag_VariablesMenu.json b/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/data/PhysValBtag_VariablesMenu.json
index 118a14259ca0fe5c140d9afe99f94852aa501021..5d068952845cd5db18ceb4c048acaec6b82499da 100755
--- a/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/data/PhysValBtag_VariablesMenu.json
+++ b/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/data/PhysValBtag_VariablesMenu.json
@@ -530,8 +530,8 @@
             "ytitle": "Tracks",
             "path":  {"ART": "bTagging", "PHYSVAL": "tagger"},
             "xbins": 200,
-            "xmin": -0.5,
-            "xmax": 0.5,
+            "xmin": -2,
+            "xmax": 2,
             "forEachTruthType": ["U","B","C","DATA"],
             "type": "TH1D",
             "forData": "true"
@@ -544,8 +544,8 @@
             "ytitle": "Tracks",
             "path":  {"ART": "bTagging", "PHYSVAL": "tagger"},
             "xbins": 200,
-            "xmin": -5,
-            "xmax": 5,
+            "xmin": -50,
+            "xmax": 50,
             "forEachTruthType": ["U","B","C","DATA"],
             "type": "TH1D",
             "forData": "true"
@@ -558,8 +558,8 @@
             "ytitle": "Tracks",
             "path":  {"ART": "bTagging", "PHYSVAL": "tagger"},
             "xbins": 200,
-            "xmin": -5,
-            "xmax": 5,
+            "xmin": -50,
+            "xmax": 50,
             "forEachTruthType": ["U","B","C","DATA"],
             "type": "TH1D",
             "forData": "true"
diff --git a/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/scripts/Draw_PhysVal_btagROC.c b/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/scripts/Draw_PhysVal_btagROC.c
index d0c320d296af3f1e53df96a6c1ae461a28387a97..542ad9edeb62f923bc98712c718f713cb135c932 100644
--- a/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/scripts/Draw_PhysVal_btagROC.c
+++ b/PhysicsAnalysis/JetTagging/JetTagValidation/JetTagDQA/scripts/Draw_PhysVal_btagROC.c
@@ -67,7 +67,7 @@
 
 using namespace std;
 
-const float EffMin=.55;
+float EffMin=.55;
 const float EffMax=1.;
 
 //Some global variables for plotting:
@@ -1294,6 +1294,9 @@ void Draw_PhysVal_btagROC(){
 
   ///////////////////
   //Plot ROC curves 
+  if (MC == "Zprime"){
+    EffMin=.1;
+  }
   bool drawRatio=true;
   bool drawErrRatio=false;
   plotGraphs(InputFilesNames,MC,sample,leg_entry,drawRatio,drawErrRatio);
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/CMakeLists.txt b/PhysicsAnalysis/JpsiUpsilonTools/CMakeLists.txt
index f3b0bbd4d4481e798d1ed38643365a2c6ef01e6a..90232d40b314288b688c1c1976292e38014dbcc0 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/CMakeLists.txt
+++ b/PhysicsAnalysis/JpsiUpsilonTools/CMakeLists.txt
@@ -18,7 +18,7 @@ atlas_add_library( JpsiUpsilonToolsLib
                    PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
                    PRIVATE_DEFINITIONS ${CLHEP_DEFINITIONS}
                    LINK_LIBRARIES ${HEPPDT_LIBRARIES} AthenaBaseComps xAODMuon xAODTracking GaudiKernel InDetConversionFinderToolsLib TrkVKalVrtFitterLib TrkV0FitterLib xAODEgamma
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} VxVertex TrkToolInterfaces TrkVertexFitterInterfaces xAODBPhysLib AthLinks TrkVertexFitterUtilsLib )
+                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} FourMomUtils VxVertex TrkToolInterfaces TrkVertexFitterInterfaces xAODBPhysLib AthLinks TrkVertexFitterUtilsLib )
 
 atlas_add_component( JpsiUpsilonTools
                      src/components/*.cxx
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/ICandidateSearch.h b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/ICandidateSearch.h
index 779a425ed0d5a48a1c7fbfab23d820ac43f8936e..cbcfa9ca34f742b090396a31b0bbcc66ee935e5c 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/ICandidateSearch.h
+++ b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/ICandidateSearch.h
@@ -7,13 +7,14 @@
 #include "xAODTracking/VertexAuxContainer.h"
 #include "GaudiKernel/IAlgTool.h"
 namespace Analysis {
-static const InterfaceID IID_ICandidateSearch("ICandidateSearch", 1, 0);
 
 class ICandidateSearch : virtual public IAlgTool {
 public:
-   virtual StatusCode performSearch(xAOD::VertexContainer*& , xAOD::VertexAuxContainer*& ) const = 0;
+   virtual StatusCode performSearch(const EventContext& ctx, xAOD::VertexContainer&) const = 0;
    /** AlgTool interface methods */
-   static const InterfaceID& interfaceID() { return IID_ICandidateSearch; }
+   static const InterfaceID& interfaceID() { 
+        static const InterfaceID IID_ICandidateSearch("ICandidateSearch", 1, 0);
+        return IID_ICandidateSearch; }
 };
 }
 #endif
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiFinder.h b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiFinder.h
index b2716171d556ab0fa87d3a4de121c09239138525..53e5006b0d1f531d1d13fd52773a2b1fd6da7333 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiFinder.h
+++ b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiFinder.h
@@ -64,7 +64,7 @@ namespace Analysis {
         //-------------------------------------------------------------------------------------
         //Doing Calculation and inline functions
 
-        virtual StatusCode performSearch(xAOD::VertexContainer*& vxContainer, xAOD::VertexAuxContainer*& vxAuxContainer) const override;
+        virtual StatusCode performSearch(const EventContext& ctx, xAOD::VertexContainer& vxContainer) const override;
         std::vector<JpsiCandidate> getPairs(const std::vector<const xAOD::TrackParticle*>&) const;
         std::vector<JpsiCandidate> getPairs(const std::vector<const xAOD::Muon*>&) const;
         std::vector<JpsiCandidate> getPairs2Colls(const std::vector<const xAOD::TrackParticle*>&, const std::vector<const xAOD::Muon*>&, bool) const;
@@ -101,7 +101,7 @@ namespace Analysis {
         bool m_allChCombs;
         SG::ReadHandleKey<xAOD::MuonContainer> m_muonCollectionKey{this, "muonCollectionKey", "StacoMuonCollection"};
         SG::ReadHandleKey<xAOD::TrackParticleContainer> m_TrkParticleCollection {this, "TrackParticleCollection", "TrackParticleCandidate" };
-        SG::ReadHandleKeyArray<xAOD::TrackParticleContainer> m_MuonTrackKeys;
+        SG::ReadHandleKeyArray<xAOD::TrackParticleContainer> m_MuonTrackKeys{this, "MuonTrackKeys", {}};
         ToolHandle < Trk::IVertexFitter > m_iVertexFitter;
         ToolHandle < Trk::IVertexFitter > m_iV0VertexFitter;
         ToolHandle < Trk::ITrackSelectorTool > m_trkSelector;
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiFinder_ee.h b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiFinder_ee.h
index caee0b2f6b666392103527a11806683e982cdf7f..ed4a3ef0fdddcf4bc375e2f68845669f05650114 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiFinder_ee.h
+++ b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiFinder_ee.h
@@ -64,7 +64,7 @@ namespace Analysis {
         
         //-------------------------------------------------------------------------------------
         //Doing Calculation and inline functions
-        virtual StatusCode performSearch(xAOD::VertexContainer*& vxContainer, xAOD::VertexAuxContainer*& vxAuxContainer) const override;
+        virtual StatusCode performSearch(const EventContext& ctx, xAOD::VertexContainer& vxContainer) const override;
         std::vector<JpsiEECandidate> getPairs(const std::vector<const xAOD::TrackParticle*>&) const;
         std::vector<JpsiEECandidate> getPairs(const std::vector<const xAOD::Electron*>&) const;
         std::vector<JpsiEECandidate> getPairs2Colls(const std::vector<const xAOD::TrackParticle*>&, const std::vector<const xAOD::Electron*>&, bool) const;
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiPlus1Track.h b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiPlus1Track.h
index 74f9b6c4b5b8d0146dc906b5b3ce67982accb0c3..62d2d467cf380d02fcdf219fedab06668267db4d 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiPlus1Track.h
+++ b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiPlus1Track.h
@@ -51,7 +51,7 @@ namespace Analysis {
       
         //-------------------------------------------------------------------------------------
         //Doing Calculation and inline functions
-        virtual StatusCode performSearch(xAOD::VertexContainer*& , xAOD::VertexAuxContainer*& ) const override;
+        virtual StatusCode performSearch(const EventContext& ctx , xAOD::VertexContainer&) const override;
         xAOD::Vertex* fit(const std::vector<const xAOD::TrackParticle*>&, const xAOD::TrackParticleContainer*, const xAOD::TrackParticleContainer*) const;
         //-------------------------------------------------------------------------------------
         
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiPlus2Tracks.h b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiPlus2Tracks.h
index b61f20f0892b7dc6d3c6adb73110cc4460ddadc9..f5f0346ce495c5c63715fdcd6615ea0002304ceb 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiPlus2Tracks.h
+++ b/PhysicsAnalysis/JpsiUpsilonTools/JpsiUpsilonTools/JpsiPlus2Tracks.h
@@ -52,7 +52,7 @@ namespace Analysis {
         
         //-------------------------------------------------------------------------------------
         //Doing Calculation and inline functions
-        virtual StatusCode performSearch(xAOD::VertexContainer*& , xAOD::VertexAuxContainer*& ) const override;
+        virtual StatusCode performSearch(const EventContext& ctx, xAOD::VertexContainer&) const override;
 
         static double getInvariantMass(const xAOD::TrackParticle*, double, const xAOD::TrackParticle*, double);
         static double getInvariantMass(const std::vector<const xAOD::TrackParticle*> &trk, const std::vector<double>&);
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/share/configureElectronServices.py b/PhysicsAnalysis/JpsiUpsilonTools/share/configureElectronServices.py
index de9c530fd582ad3566eecd3fffc0d75862ae8e56..f676bc29784096048037c29574f9faa5fb803798 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/share/configureElectronServices.py
+++ b/PhysicsAnalysis/JpsiUpsilonTools/share/configureElectronServices.py
@@ -64,6 +64,5 @@ print      InDetTrackSelectorToolEE
 from TrkParticleCreator.TrkParticleCreatorConf import Trk__TrackParticleCreatorTool
 InDetParticleCreatorTool = Trk__TrackParticleCreatorTool(name = "InDetParticleCreatorTool",
                                                          KeepParameters = True,
-                                                         TrackSummaryTool = InDetTrackSummaryTool,
-                                                         UseTrackSummaryTool = True)
+                                                         TrackSummaryTool = InDetTrackSummaryTool)
 ToolSvc += InDetParticleCreatorTool
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiAlg.cxx b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiAlg.cxx
index 080423fbe11735d470131f5addab0afe7495efff..c22373a470ad9c9113c566e6e17914dba59442e7 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiAlg.cxx
+++ b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiAlg.cxx
@@ -51,16 +51,17 @@ StatusCode JpsiAlg::execute() {
 
 
   ATH_MSG_DEBUG("in execute()");
+  const EventContext& ctx = Gaudi::Hive::currentContext();
 
   // Increment counter
   ++m_eventCntr;
 
   // Jpsi container and its auxilliary store
-  xAOD::VertexContainer*    jpsiContainer = NULL;
-  xAOD::VertexAuxContainer* jpsiAuxContainer = NULL;
-  
+  std::unique_ptr<xAOD::VertexContainer> jpsiContainer = std::make_unique<xAOD::VertexContainer>();
+  std::unique_ptr<xAOD::VertexAuxContainer> jpsiAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
+  jpsiContainer->setStore(jpsiAuxContainer.get());
   // call Jpsi finder
-  if( !m_jpsiFinder->performSearch(jpsiContainer, jpsiAuxContainer).isSuccess() ) {
+  if( !m_jpsiFinder->performSearch(ctx, *jpsiContainer).isSuccess() ) {
     ATH_MSG_FATAL("Jpsi finder (" << m_jpsiFinder << ") failed.");
     return StatusCode::FAILURE;
   }
@@ -72,7 +73,7 @@ StatusCode JpsiAlg::execute() {
   ATH_MSG_DEBUG("Recording to StoreGate: " << m_jpsiContainerName.key() << " size:" <<jpsiContainer->size());
   
   SG::WriteHandle<xAOD::VertexContainer> whandle (m_jpsiContainerName);
-  ATH_CHECK(whandle.record(std::unique_ptr<xAOD::VertexContainer>(jpsiContainer), std::unique_ptr<xAOD::VertexAuxContainer>(jpsiAuxContainer)));
+  ATH_CHECK(whandle.record(std::move(jpsiContainer), std::move(jpsiAuxContainer)));
   // END OF ANALYSIS
   return StatusCode::SUCCESS;
 }
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiFinder.cxx b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiFinder.cxx
index 1b11493d00d350b3042ea4fda337e6df85cb8fb8..23d60ec37e9c737901636a90123b90e022a527ac 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiFinder.cxx
+++ b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiFinder.cxx
@@ -28,7 +28,7 @@
 #include "xAODTracking/TrackParticle.h"
 #include "xAODTracking/TrackParticleContainer.h"
 #include "EventKernel/PdtPdg.h"
-
+#include "FourMomUtils/xAODP4Helpers.h"
 namespace Analysis {
     
     StatusCode JpsiFinder::initialize() {
@@ -168,7 +168,6 @@ namespace Analysis {
         declareProperty("VertexPointEstimator",m_vertexEstimator);
         declareProperty("useMCPCuts",m_mcpCuts);
         declareProperty("doTagAndProbe",m_doTagAndProbe);
-        declareProperty("MuonTrackKeys",m_MuonTrackKeys);
         declareProperty("forceTagAndProbe",m_forceTagAndProbe);
     }
     
@@ -177,15 +176,11 @@ namespace Analysis {
     //-------------------------------------------------------------------------------------
     // Find the candidates
     //-------------------------------------------------------------------------------------
-    StatusCode JpsiFinder::performSearch(xAOD::VertexContainer*& vxContainer, xAOD::VertexAuxContainer*& vxAuxContainer) const
+    StatusCode JpsiFinder::performSearch(const EventContext& ctx, xAOD::VertexContainer& vxContainer) const
     {
         ATH_MSG_DEBUG( "JpsiFinder::performSearch" );
-        vxContainer = new xAOD::VertexContainer;
-        vxAuxContainer = new xAOD::VertexAuxContainer;
-        vxContainer->setStore(vxAuxContainer);
-
         
-        SG::ReadHandle<xAOD::MuonContainer> muonhandle(m_muonCollectionKey);
+        SG::ReadHandle<xAOD::MuonContainer> muonhandle(m_muonCollectionKey,ctx);
         ATH_CHECK(muonhandle.isValid());
         // Get the muons from StoreGate
         const xAOD::MuonContainer* importedMuonCollection = muonhandle.cptr();
@@ -195,13 +190,12 @@ namespace Analysis {
         std::vector<const xAOD::TrackParticleContainer*> importedMuonTrackCollections;
         if (m_useCombMeasurement) {
 
-            for (const auto& strItr : m_MuonTrackKeys) {
-                SG::ReadHandle<xAOD::TrackParticleContainer> handle(strItr);
+            for (SG::ReadHandle<xAOD::TrackParticleContainer>& handle: m_MuonTrackKeys.makeHandles(ctx)) {
                 if(!handle.isValid()){
-                    ATH_MSG_WARNING("No muon TrackParticle collection with name " << strItr.key()  << " found in StoreGate!");
+                    ATH_MSG_WARNING("No muon TrackParticle collection with name " << handle.key()  << " found in StoreGate!");
                     return StatusCode::FAILURE;
                 } else {
-                    ATH_MSG_DEBUG("Found muon TrackParticle collection " << strItr.key() << " in StoreGate!");
+                    ATH_MSG_DEBUG("Found muon TrackParticle collection " << handle.key() << " in StoreGate!");
                     ATH_MSG_DEBUG("Muon TrackParticle container size "<< handle->size());
                     importedMuonTrackCollections.push_back(handle.cptr());
                 }
@@ -209,8 +203,8 @@ namespace Analysis {
         }
         
         // Get ID tracks
-        SG::ReadHandle<xAOD::TrackParticleContainer> handle(m_TrkParticleCollection);
-        const xAOD::TrackParticleContainer* importedTrackCollection(0);
+        SG::ReadHandle<xAOD::TrackParticleContainer> handle(m_TrkParticleCollection,ctx);
+        const xAOD::TrackParticleContainer* importedTrackCollection{nullptr};
         if(!handle.isValid()){
             ATH_MSG_WARNING("No TrackParticle collection with name " << handle.key() << " found in StoreGate!");
             return StatusCode::FAILURE;
@@ -225,7 +219,7 @@ namespace Analysis {
         typedef std::vector<const xAOD::Muon*> MuonBag;
         
         // Select the inner detector tracks
-        const xAOD::Vertex* vx = 0;
+        const xAOD::Vertex* vx = nullptr;
         TrackBag theIDTracksAfterSelection;
         if (m_trktrk || m_mutrk) {
             xAOD::TrackParticleContainer::const_iterator trkCItr;
@@ -359,9 +353,7 @@ namespace Analysis {
             std::vector<JpsiCandidate> selectCandidates;
             for(auto& cand : sortedJpsiCandidates){
                 double deltatheta = fabs( cand.trackParticle1->theta() - cand.trackParticle2->theta() );
-                double deltaphi = cand.trackParticle1->phi0() - cand.trackParticle2->phi0();
-                while ( fabs(deltaphi) > M_PI ) deltaphi += ( deltaphi > 0. ) ? -2.*M_PI : 2.*M_PI;
-                deltaphi = fabs(deltaphi);
+                double deltaphi = std::abs(xAOD::P4Helpers::deltaPhi(cand.trackParticle1->phi0() , cand.trackParticle2->phi0()));
                 bool reject = (deltatheta > m_collAngleTheta) || (deltaphi > m_collAnglePhi);
                 if(!reject) selectCandidates.push_back(cand);
             }
@@ -393,14 +385,14 @@ namespace Analysis {
             theTracks.clear();
             theTracks.push_back((*jpsiItr).trackParticle1);
             theTracks.push_back((*jpsiItr).trackParticle2);
-            xAOD::Vertex* myVxCandidate = fit(theTracks,importedTrackCollection); // This line actually does the fitting and object making
-            if (myVxCandidate != 0) {
+            std::unique_ptr<xAOD::Vertex> myVxCandidate {fit(theTracks,importedTrackCollection)}; // This line actually does the fitting and object making
+            if (myVxCandidate) {
                 // Chi2 cut if requested
                 double chi2 = myVxCandidate->chiSquared();
                 ATH_MSG_DEBUG("chi2 is: " << chi2);
                 if (m_Chi2Cut <= 0.0 || chi2 <= m_Chi2Cut) {             
                 	// decorate the candidate with refitted tracks and muons via the BPhysHelper
-                	xAOD::BPhysHelper jpsiHelper(myVxCandidate);
+                	xAOD::BPhysHelper jpsiHelper(myVxCandidate.get());
                 	bool validtrk = jpsiHelper.setRefTrks();
                     if(!validtrk) ATH_MSG_WARNING("Problem setting tracks " << __FILE__ << ':' << __LINE__);
                 	if (m_mumu || m_mutrk) {
@@ -411,10 +403,8 @@ namespace Analysis {
                          if(!valid) ATH_MSG_WARNING("Problem setting muons " << __FILE__ << ':' << __LINE__);
                 	}
                 	// Retain the vertex
-                    vxContainer->push_back(myVxCandidate);       
-                } else { // chi2 cut failed
-                    delete myVxCandidate;
-                }
+                    vxContainer.push_back(std::move(myVxCandidate));       
+                } 
             } else { // fit failed
                 ATH_MSG_DEBUG("Fitter failed!");
                 // Don't try to delete the object, since we arrived here,
@@ -422,7 +412,7 @@ namespace Analysis {
                 //delete myVxCandidate;
             }
         }
-        ATH_MSG_DEBUG("vxContainer size " << vxContainer->size());
+        ATH_MSG_DEBUG("vxContainer size " << vxContainer.size());
         
         return StatusCode::SUCCESS;;
     }
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiFinder_ee.cxx b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiFinder_ee.cxx
index 878fb952630c25903b7f86564a923e4548154a51..7619208f28d8c1be984992ba83c11a9c911bf493 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiFinder_ee.cxx
+++ b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiFinder_ee.cxx
@@ -27,6 +27,7 @@
 #include "xAODTracking/VertexAuxContainer.h"
 #include "xAODTracking/TrackParticle.h"
 #include "EventKernel/PdtPdg.h"
+#include "FourMomUtils/xAODP4Helpers.h"
 namespace Analysis {
     
     StatusCode JpsiFinder_ee::initialize() {
@@ -160,17 +161,14 @@ namespace Analysis {
     //-------------------------------------------------------------------------------------
  
   
-  StatusCode JpsiFinder_ee::performSearch(xAOD::VertexContainer*& vxContainer, xAOD::VertexAuxContainer*& vxAuxContainer) const
+  StatusCode JpsiFinder_ee::performSearch(const EventContext& ctx, xAOD::VertexContainer& vxContainer) const 
     {
         ATH_MSG_DEBUG( "JpsiFinder_ee::performSearch" );
-        vxContainer = new xAOD::VertexContainer;
-        vxAuxContainer = new xAOD::VertexAuxContainer;
-        vxContainer->setStore(vxAuxContainer);
         
         
         // Get the electrons from StoreGate
         const xAOD::ElectronContainer* importedElectronCollection=nullptr;
-        SG::ReadHandle<xAOD::ElectronContainer> ehandle(m_electronCollectionKey);
+        SG::ReadHandle<xAOD::ElectronContainer> ehandle(m_electronCollectionKey,ctx);
         if(!ehandle.isValid()){
             ATH_MSG_WARNING("No electron collection with key " << m_electronCollectionKey.key() << " found in StoreGate. JpsiEECandidates will be EMPTY!");
             return StatusCode::SUCCESS;;
@@ -181,7 +179,7 @@ namespace Analysis {
         ATH_MSG_DEBUG("Electron container size "<<importedElectronCollection->size());       
 
         // Get ID tracks
-        SG::ReadHandle<xAOD::TrackParticleContainer> thandle(m_TrkParticleCollection);
+        SG::ReadHandle<xAOD::TrackParticleContainer> thandle(m_TrkParticleCollection,ctx);
         const xAOD::TrackParticleContainer* importedTrackCollection(0);
         if(!thandle.isValid()){
             ATH_MSG_WARNING("No TrackParticle collection with name " << m_TrkParticleCollection << " found in StoreGate!");
@@ -297,9 +295,7 @@ namespace Analysis {
             for(jpsiItr=sortedJpsiEECandidates.begin(); jpsiItr!=sortedJpsiEECandidates.end();++jpsiItr,++index) {
                 double deltatheta = fabs( (*jpsiItr).trackParticle1->theta() - (*jpsiItr).trackParticle2->theta() );
                 // -3.14 < phi < +3.14 ==> correction
-                double deltaphi = (*jpsiItr).trackParticle1->phi0() - (*jpsiItr).trackParticle2->phi0();
-                while ( fabs(deltaphi) > M_PI ) deltaphi += ( deltaphi > 0. ) ? -2.*M_PI : 2.*M_PI;
-                deltaphi = fabs(deltaphi);
+                double deltaphi = std::abs(xAOD::P4Helpers::deltaPhi((*jpsiItr).trackParticle1->phi0() , (*jpsiItr).trackParticle2->phi0()));
                 // perform the angle cuts
                 if ((deltatheta > m_collAngleTheta) || (deltaphi > m_collAnglePhi)) listToDelete.push_back(index);
             }
@@ -340,14 +336,14 @@ namespace Analysis {
             theTracks.push_back((*jpsiItr).trackParticle1);
             theTracks.push_back((*jpsiItr).trackParticle2);
             ATH_MSG_DEBUG("theTracks size (should be two!) " << theTracks.size() << " being vertexed with tracks " << importedTrackCollection);
-            xAOD::Vertex* myVxCandidate = fit(theTracks,importedTrackCollection); // This line actually does the fitting and object making
+            std::unique_ptr<xAOD::Vertex> myVxCandidate{fit(theTracks,importedTrackCollection)}; // This line actually does the fitting and object making
             if (myVxCandidate != 0) {
                 // Chi2 cut if requested
                 double chi2 = myVxCandidate->chiSquared();
                 ATH_MSG_DEBUG("chi2 is: " << chi2);
                 if (m_Chi2Cut == 0.0 || chi2 <= m_Chi2Cut) {             
                 	// decorate the candidate with refitted tracks and muons via the BPhysHelper
-                	xAOD::BPhysHelper jpsiHelper(myVxCandidate);
+                	xAOD::BPhysHelper jpsiHelper(myVxCandidate.get());
                 	jpsiHelper.setRefTrks();
                 	if (m_elel || m_eltrk) {
                 	     std::vector<const xAOD::Electron*> theStoredElectrons;
@@ -356,9 +352,7 @@ namespace Analysis {
                 	     jpsiHelper.setElectrons(theStoredElectrons,importedElectronCollection);
                 	}
                 	// Retain the vertex
-                    vxContainer->push_back(myVxCandidate);       
-                } else { // chi2 cut failed
-                    delete myVxCandidate;
+                    vxContainer.push_back(std::move(myVxCandidate));       
                 }
             } else { // fit failed
                 ATH_MSG_DEBUG("Fitter failed!");
@@ -367,7 +361,7 @@ namespace Analysis {
                 //delete myVxCandidate;
             }
         }
-        ATH_MSG_DEBUG("vxContainer size " << vxContainer->size());
+        ATH_MSG_DEBUG("vxContainer size " << vxContainer.size());
         
         return StatusCode::SUCCESS;;
     }
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiPlus1Track.cxx b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiPlus1Track.cxx
index 61d763bde11fab905cad52653e108081422b087b..6e9e79acaf608e94838d8541855e1914d4f7198e 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiPlus1Track.cxx
+++ b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiPlus1Track.cxx
@@ -131,17 +131,13 @@ namespace Analysis {
     //-------------------------------------------------------------------------------------
     // Find the candidates
     //-------------------------------------------------------------------------------------
-    StatusCode JpsiPlus1Track::performSearch(xAOD::VertexContainer*& bContainer, xAOD::VertexAuxContainer*& bAuxContainer) const
+    StatusCode JpsiPlus1Track::performSearch(const EventContext& ctx, xAOD::VertexContainer& bContainer) const
     {
         ATH_MSG_DEBUG( "JpsiPlus1Track::performSearch" );
-        bContainer = new xAOD::VertexContainer;
-        bAuxContainer = new xAOD::VertexAuxContainer;
-        bContainer->setStore(bAuxContainer);
-
         
         // Get the J/psis from StoreGate
         const xAOD::VertexContainer* importedJpsiCollection(0);
-        SG::ReadHandle<xAOD::VertexContainer> jpsiCollectionhandle(m_jpsiCollectionKey);
+        SG::ReadHandle<xAOD::VertexContainer> jpsiCollectionhandle(m_jpsiCollectionKey,ctx);
         if(!jpsiCollectionhandle.isValid()){
             ATH_MSG_ERROR("No VertexContainer with key " << m_jpsiCollectionKey.key() << " found in StoreGate. BCandidates will be EMPTY!");
             return StatusCode::FAILURE;
@@ -152,8 +148,8 @@ namespace Analysis {
         ATH_MSG_DEBUG("VxCandidate container size " << importedJpsiCollection->size());
         
         // Get tracks
-        const xAOD::TrackParticleContainer* importedTrackCollection(0);
-        SG::ReadHandle<xAOD::TrackParticleContainer> TrkParticleHandle(m_TrkParticleCollection);
+        const xAOD::TrackParticleContainer* importedTrackCollection{nullptr};
+        SG::ReadHandle<xAOD::TrackParticleContainer> TrkParticleHandle(m_TrkParticleCollection,ctx);
         if(!TrkParticleHandle.isValid()){
             ATH_MSG_ERROR("No track particle collection with name " << m_TrkParticleCollection << " found in StoreGate!");
             return StatusCode::FAILURE;
@@ -165,7 +161,7 @@ namespace Analysis {
 
         const xAOD::TrackParticleContainer* importedGSFTrackCollection(nullptr);
         if(m_useGSFTrack.any() && !m_TrkParticleGSFCollection.key().empty()){
-           SG::ReadHandle<xAOD::TrackParticleContainer> h(m_TrkParticleGSFCollection);
+           SG::ReadHandle<xAOD::TrackParticleContainer> h(m_TrkParticleGSFCollection,ctx);
            ATH_CHECK(h.isValid());
            importedGSFTrackCollection = h.cptr();
         }
@@ -174,7 +170,7 @@ namespace Analysis {
         // Get the muon collection used to build the J/psis
         const xAOD::MuonContainer* importedMuonCollection(0);
         if (!m_MuonsUsedInJpsi.key().empty()) {
-            SG::ReadHandle<xAOD::MuonContainer> h(m_MuonsUsedInJpsi);
+            SG::ReadHandle<xAOD::MuonContainer> h(m_MuonsUsedInJpsi,ctx);
             if (!h.isValid()){
                 ATH_MSG_ERROR("No muon collection with name " << m_MuonsUsedInJpsi.key() << " found in StoreGate!");
                 return StatusCode::FAILURE;
@@ -189,7 +185,7 @@ namespace Analysis {
         typedef std::vector<const xAOD::TrackParticle*> TrackBag;
         
         // Select the inner detector tracks
-        const xAOD::Vertex* vx = 0;
+        const xAOD::Vertex* vx = nullptr;
         TrackBag theIDTracksAfterSelection;
         for (auto trkPBItr=importedTrackCollection->cbegin(); trkPBItr!=importedTrackCollection->cend(); ++trkPBItr) {
             const xAOD::TrackParticle* tp (*trkPBItr);
@@ -243,7 +239,7 @@ namespace Analysis {
         std::vector<double> massCuts;
 
         TrackBag muonTracks;
-        if (importedMuonCollection != NULL && m_excludeJpsiMuonsOnly) {
+        if (importedMuonCollection && m_excludeJpsiMuonsOnly) {
           for(auto muon : *importedMuonCollection){
             if(!muon->inDetTrackParticleLink().isValid()) continue;
             auto track = muon->trackParticle( xAOD::Muon::InnerDetectorTrackParticle );
@@ -339,7 +335,7 @@ namespace Analysis {
                         std::vector<const xAOD::Vertex*> theJpsiPreceding;
                         theJpsiPreceding.push_back(*jpsiItr);
                         bHelper.setPrecedingVertices(theJpsiPreceding, importedJpsiCollection);
-                        bContainer->push_back(bVertex.release());
+                        bContainer.push_back(bVertex.release());
                     } else {
                        ATH_MSG_DEBUG("Cuts failed!");
                     }
@@ -348,7 +344,7 @@ namespace Analysis {
             } // End of loop over tracks                        
             
         } // End of loop over J/psis
-        ATH_MSG_DEBUG("bContainer size " << bContainer->size());
+        ATH_MSG_DEBUG("bContainer size " << bContainer.size());
         return StatusCode::SUCCESS;
         
     }
diff --git a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiPlus2Tracks.cxx b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiPlus2Tracks.cxx
index 40ab1aa8b838985924b6ae83d10f7797c5982755..d234ce5a3884aaac1a2543fac674fcd89971d21a 100644
--- a/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiPlus2Tracks.cxx
+++ b/PhysicsAnalysis/JpsiUpsilonTools/src/JpsiPlus2Tracks.cxx
@@ -170,17 +170,13 @@ namespace Analysis {
     //-------------------------------------------------------------------------------------
     // Find the candidates
     //-------------------------------------------------------------------------------------
-    StatusCode JpsiPlus2Tracks::performSearch(xAOD::VertexContainer*& bContainer, xAOD::VertexAuxContainer*& bAuxContainer) const
+    StatusCode JpsiPlus2Tracks::performSearch(const EventContext& ctx, xAOD::VertexContainer& bContainer) const
     {
         ATH_MSG_DEBUG( "JpsiPlus2Tracks::performSearch" );
-        bContainer = new xAOD::VertexContainer;
-        bAuxContainer = new xAOD::VertexAuxContainer;
-        bContainer->setStore(bAuxContainer);
-        
         
         // Get the J/psis from StoreGate
-        const xAOD::VertexContainer* importedJpsiCollection(0);
-        SG::ReadHandle<xAOD::VertexContainer> jpsihandle(m_jpsiCollectionKey);
+        const xAOD::VertexContainer* importedJpsiCollection{nullptr};
+        SG::ReadHandle<xAOD::VertexContainer> jpsihandle(m_jpsiCollectionKey,ctx);
         if(!jpsihandle.isValid()){
             ATH_MSG_ERROR("No VertexContainer with key " << m_jpsiCollectionKey.key() << " found in StoreGate. BCandidates will be EMPTY!");
             return StatusCode::FAILURE;
@@ -191,8 +187,8 @@ namespace Analysis {
         ATH_MSG_DEBUG("VxCandidate container size " << importedJpsiCollection->size());
         
         // Get tracks
-        const xAOD::TrackParticleContainer* importedTrackCollection(0);
-        SG::ReadHandle<xAOD::TrackParticleContainer> trackshandle(m_TrkParticleCollection);
+        const xAOD::TrackParticleContainer* importedTrackCollection{nullptr};
+        SG::ReadHandle<xAOD::TrackParticleContainer> trackshandle(m_TrkParticleCollection,ctx);
         if(!trackshandle.isValid()){
             ATH_MSG_ERROR("No track particle collection with name " << m_TrkParticleCollection.key() << " found in StoreGate!");
             return StatusCode::FAILURE;
@@ -204,15 +200,15 @@ namespace Analysis {
 
         const xAOD::TrackParticleContainer* importedGSFTrackCollection(nullptr);
         if(m_useGSFTrack.any() && !m_TrkParticleGSFCollection.key().empty()){
-           SG::ReadHandle<xAOD::TrackParticleContainer> h(m_TrkParticleGSFCollection);
+           SG::ReadHandle<xAOD::TrackParticleContainer> h(m_TrkParticleGSFCollection,ctx);
            ATH_CHECK(h.isValid());
            importedGSFTrackCollection = h.cptr();
         }
 
         // Get the muon collection used to build the J/psis
-        const xAOD::MuonContainer* importedMuonCollection(0);
+        const xAOD::MuonContainer* importedMuonCollection{nullptr};
         if (!m_MuonsUsedInJpsi.key().empty()) {
-            SG::ReadHandle<xAOD::MuonContainer> h(m_MuonsUsedInJpsi);
+            SG::ReadHandle<xAOD::MuonContainer> h(m_MuonsUsedInJpsi,ctx);
             if (!h.isValid()){
                 ATH_MSG_ERROR("No muon collection with name " << m_MuonsUsedInJpsi.key() << " found in StoreGate!");
                 return StatusCode::FAILURE;
@@ -414,12 +410,12 @@ namespace Analysis {
                     std::vector<const xAOD::Vertex*> theJpsiPreceding;
                     theJpsiPreceding.push_back(*jpsiItr);
                     bHelper.setPrecedingVertices(theJpsiPreceding, importedJpsiCollection);
-                    bContainer->push_back(bVertex.release());//ptr is released preventing deletion
+                    bContainer.push_back(bVertex.release());//ptr is released preventing deletion
 
                 } // End of inner loop over tracks
             } // End of outer loop over tracks
         } // End of loop over J/spi
-        ATH_MSG_DEBUG("bContainer size " << bContainer->size());
+        ATH_MSG_DEBUG("bContainer size " << bContainer.size());
         return StatusCode::SUCCESS;
         
     }
diff --git a/PhysicsAnalysis/MCTruthClassifier/python/MCTruthClassifierConfig.py b/PhysicsAnalysis/MCTruthClassifier/python/MCTruthClassifierConfig.py
index c09a26fea2811ba77d83350ec6adff9838935d36..05e581c152e7752bdf32ee3249a4905d7baa3967 100644
--- a/PhysicsAnalysis/MCTruthClassifier/python/MCTruthClassifierConfig.py
+++ b/PhysicsAnalysis/MCTruthClassifier/python/MCTruthClassifierConfig.py
@@ -25,38 +25,19 @@ def MCTruthClassifierCaloTruthMatchCfg(flags, **kwargs):
 
     if "ParticleCaloExtensionTool" not in kwargs:
 
-        extAcc = None
-        if flags.Detector.GeometryITk:
-            from TrkConfig.AtlasUpgradeExtrapolatorConfig import (
-                MCTruthClassifierUpgradeExtrapolatorCfg)
-            extrapolator = acc.popToolsAndMerge(
-                MCTruthClassifierUpgradeExtrapolatorCfg(flags))
-            from TrackToCalo.ITkTrackToCaloConfig import (
-                ITkParticleCaloExtensionToolCfg)
-            extAcc = ITkParticleCaloExtensionToolCfg(
-                flags,
-                Extrapolator=extrapolator)
-        else:
-            from TrkConfig.AtlasExtrapolatorConfig import (
-                MCTruthClassifierExtrapolatorCfg)
-            extrapolator = acc.popToolsAndMerge(
-                MCTruthClassifierExtrapolatorCfg(flags))
-            from TrackToCalo.TrackToCaloConfig import (
-                ParticleCaloExtensionToolCfg)
-            extAcc = ParticleCaloExtensionToolCfg(
-                flags,
-                Extrapolator=extrapolator)
-
-        kwargs["ParticleCaloExtensionTool"] = acc.popToolsAndMerge(extAcc)
+        from TrkConfig.AtlasExtrapolatorConfig import MCTruthClassifierExtrapolatorCfg
+        extrapolator = acc.popToolsAndMerge(MCTruthClassifierExtrapolatorCfg(flags))
+        from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg
+        extension = ParticleCaloExtensionToolCfg(flags, Extrapolator=extrapolator)
+        kwargs["ParticleCaloExtensionTool"] = acc.popToolsAndMerge(extension)
 
     kwargs.setdefault("barcodeG4Shift", flags.Sim.SimBarcodeOffset + 1)
 
     from AthenaConfiguration.ComponentFactory import CompFactory
-    MCTruthClassifier = CompFactory.MCTruthClassifier
-
-    acc.setPrivateTools(MCTruthClassifier(**kwargs))
+    acc.setPrivateTools(CompFactory.MCTruthClassifier(**kwargs))
     return acc
 
+
 ##########################################################
 # The function below are for the old style and should be
 # condsidered deprecated
diff --git a/PhysicsAnalysis/MuonID/MuonSelectorTools/MuonSelectorTools/MuonSelectionTool.h b/PhysicsAnalysis/MuonID/MuonSelectorTools/MuonSelectorTools/MuonSelectionTool.h
index fcbf2551f3fd9222291403f9dbcd4c9c751b138b..cfa746580d54e6d0b8c5ba2e9f38b5cf41035039 100644
--- a/PhysicsAnalysis/MuonID/MuonSelectorTools/MuonSelectorTools/MuonSelectionTool.h
+++ b/PhysicsAnalysis/MuonID/MuonSelectorTools/MuonSelectorTools/MuonSelectionTool.h
@@ -119,8 +119,8 @@ namespace CP {
         /// This is necessary only when the resolution is very optimistic in the MC such that a large smearing is applied
         bool passedBMVmimicCut(const xAOD::Muon&) const;
 
-	///Returns a sorted vector of chamber indices
-	std::vector<int> getChamberIndicesSorted(const xAOD::Muon& mu) const;
+	///Returns a vector of the muon's segments, sorted according to chamber index
+	std::vector<const xAOD::MuonSegment*> getSegmentsSorted(const xAOD::Muon& mu) const;
 
         /// Maximum pseudorapidity for the selected muons
         double m_maxEta;
@@ -139,6 +139,7 @@ namespace CP {
         bool m_useAllAuthors;
         bool m_use2stationMuonsHighPt;
         bool m_useMVALowPt;
+	bool m_useSegmentTaggedLowPt;
         bool m_doBadMuonVetoMimic;
 
         SG::ReadHandleKey<xAOD::EventInfo> m_eventInfo{this, "EventInfoContName", "EventInfo", "event info key"};
@@ -148,6 +149,10 @@ namespace CP {
         std::string m_MVAreaderFile_EVEN_MuGirl;
         std::string m_MVAreaderFile_ODD_MuGirl;
 
+	std::string m_MVAreaderFile_MuTagIMO_etaBin1;
+	std::string m_MVAreaderFile_MuTagIMO_etaBin2;
+	std::string m_MVAreaderFile_MuTagIMO_etaBin3;
+
         std::string m_BMVcutFile;
 
         /// Checks for each histogram
@@ -182,9 +187,10 @@ namespace CP {
         std::unique_ptr<TMVA::Reader> m_readerO_MUID;
         std::unique_ptr<TMVA::Reader> m_readerE_MUGIRL;
         std::unique_ptr<TMVA::Reader> m_readerO_MUGIRL;
-
-        // TMVA initialize function
-        void PrepareReader(TMVA::Reader* reader);
+	
+	std::unique_ptr<TMVA::Reader> m_reader_MUTAGIMO_etaBin1;
+	std::unique_ptr<TMVA::Reader> m_reader_MUTAGIMO_etaBin2;
+	std::unique_ptr<TMVA::Reader> m_reader_MUTAGIMO_etaBin3;
 
         // variables for the TMVA readers
         mutable std::mutex m_low_pt_mva_mutex;
diff --git a/PhysicsAnalysis/MuonID/MuonSelectorTools/Root/MuonSelectionTool.cxx b/PhysicsAnalysis/MuonID/MuonSelectorTools/Root/MuonSelectionTool.cxx
index 60100ea19c0eeb2abd607e82c350b2382127e3ac..b8f018d19b658cb9d73b79da655b708026985ec1 100644
--- a/PhysicsAnalysis/MuonID/MuonSelectorTools/Root/MuonSelectionTool.cxx
+++ b/PhysicsAnalysis/MuonID/MuonSelectorTools/Root/MuonSelectionTool.cxx
@@ -39,12 +39,12 @@ namespace {
       return chamberIndexOrder;
     }
 
-    //This is the comparison function for the sorting of chamber indices
-    bool chamberIndexCompare(int first, int second) {
+    //This is the comparison function for the sorting of segments according to the chamber index
+  bool chamberIndexCompare(const xAOD::MuonSegment* first, const xAOD::MuonSegment* second) {
 
       static const std::vector<int> chamberIndexOrder = initializeChamberIdxOrder();
       
-      return (chamberIndexOrder[first] < chamberIndexOrder[second]);
+      return (chamberIndexOrder[first->chamberIndex()] < chamberIndexOrder[second->chamberIndex()]);
     }
 
     static const SG::AuxElement::Accessor<float> mePt_acc("MuonSpectrometerPt");
@@ -71,8 +71,9 @@ namespace CP {
         // for users of high-pT working point to choose whether to include "safe" 2-station muons
         declareProperty("Use2stationMuonsHighPt", m_use2stationMuonsHighPt = true);
 
-        // for users of low-pT working point to choose whether to use MVA
+        // for users of low-pT working point to choose whether to use MVA and whether to include MuTagIMO muons
         declareProperty("UseMVALowPt", m_useMVALowPt = false);
+	declareProperty( "UseSegmentTaggedLowPt", m_useSegmentTaggedLowPt = false );
 
         // MVA configs for low-pT working point
         declareProperty(
@@ -87,6 +88,12 @@ namespace CP {
         declareProperty(
             "MVAreaderFile_ODD_MuGirl",
             m_MVAreaderFile_ODD_MuGirl = "MuonSelectorTools/190118_PrelimLowPtMVA/LowPtMVA_Weights/BDTG_9JAN2019_MuGirl_ODD.weights.xml");
+	declareProperty( "MVAreaderFile_MuTagIMO_etaBin1", m_MVAreaderFile_MuTagIMO_etaBin1 = 
+			 "dev/MuonSelectorTools/181121_MuTagIMO_BDT/BDT_NOV2021_MuTagIMO_etaBin1.weights.xml");
+	declareProperty( "MVAreaderFile_MuTagIMO_etaBin2", m_MVAreaderFile_MuTagIMO_etaBin2 = 
+			 "dev/MuonSelectorTools/181121_MuTagIMO_BDT/BDT_NOV2021_MuTagIMO_etaBin2.weights.xml");
+	declareProperty( "MVAreaderFile_MuTagIMO_etaBin3", m_MVAreaderFile_MuTagIMO_etaBin3 = 
+			 "dev/MuonSelectorTools/181121_MuTagIMO_BDT/BDT_NOV2021_MuTagIMO_etaBin3.weights.xml");
 
         // switch to cut away the tail of very large smearing in MC to mimic the effect of the bad muon veto for 2-station muons in the
         // high-pT selection
@@ -227,6 +234,33 @@ namespace CP {
             m_readerE_MUGIRL = make_mva_reader(weightPath_EVEN_MuGirl);
 
             m_readerO_MUGIRL = make_mva_reader(weightPath_ODD_MuGirl);
+
+	    if (m_useSegmentTaggedLowPt) {
+
+	      TString weightPath_MuTagIMO_etaBin1 = PathResolverFindCalibFile(m_MVAreaderFile_MuTagIMO_etaBin1);
+	      TString weightPath_MuTagIMO_etaBin2 = PathResolverFindCalibFile(m_MVAreaderFile_MuTagIMO_etaBin2);
+	      TString weightPath_MuTagIMO_etaBin3 = PathResolverFindCalibFile(m_MVAreaderFile_MuTagIMO_etaBin3);
+
+	      auto make_mva_reader_MuTagIMO = [](TString file_path, bool useSeg2ChamberIndex) {
+
+                std::vector<std::string> mva_var_names;
+		if (useSeg2ChamberIndex) mva_var_names.push_back("muonSeg2ChamberIndex");
+		mva_var_names.push_back("muonSeg1ChamberIndex");
+		mva_var_names.push_back("muonSeg1NPrecisionHits");
+		mva_var_names.push_back("muonSegmentDeltaEta");
+		mva_var_names.push_back("muonSeg1GlobalR");
+		mva_var_names.push_back("muonSeg1Chi2OverDoF");
+		mva_var_names.push_back("muonSCS");
+		
+                std::unique_ptr<TMVA::Reader> reader = std::make_unique<TMVA::Reader>(mva_var_names);
+                reader->BookMVA("BDT", file_path);
+                return reader;
+	      };
+
+	      m_reader_MUTAGIMO_etaBin1 = make_mva_reader_MuTagIMO(weightPath_MuTagIMO_etaBin1, false);
+	      m_reader_MUTAGIMO_etaBin2 = make_mva_reader_MuTagIMO(weightPath_MuTagIMO_etaBin2, false);
+	      m_reader_MUTAGIMO_etaBin3 = make_mva_reader_MuTagIMO(weightPath_MuTagIMO_etaBin3, true);
+	    }
         }
         ATH_CHECK(m_eventInfo.initialize());
 
@@ -663,15 +697,33 @@ namespace CP {
             return false;
         }
 
-        // requiring combined muons
-        if (mu.muonType() != xAOD::Muon::Combined) {
+        // requiring combined muons, unless segment-tags are included
+	if (!m_useSegmentTaggedLowPt) {
+	  if (mu.muonType() != xAOD::Muon::Combined) {
             ATH_MSG_VERBOSE("Muon is not combined - fail low-pT");
             return false;
-        }
-        if (mu.author() != xAOD::Muon::MuGirl && mu.author() != xAOD::Muon::MuidCo) {
+	  }
+	}
+	else {
+	  if (mu.muonType() != xAOD::Muon::Combined && mu.muonType() != xAOD::Muon::SegmentTagged) {
+            ATH_MSG_VERBOSE("Muon is not combined or segment-tagged - fail low-pT");
+            return false;
+	  }
+	}
+
+	// author check
+	if (!m_useSegmentTaggedLowPt) {
+	  if (mu.author() != xAOD::Muon::MuGirl && mu.author() != xAOD::Muon::MuidCo) {
             ATH_MSG_VERBOSE("Muon is neither MuGirl nor MuidCo - fail low-pT");
             return false;
-        }
+	  }
+	}
+	else {
+	  if (mu.author() != xAOD::Muon::MuGirl && mu.author() != xAOD::Muon::MuidCo && mu.author() != xAOD::Muon::MuTagIMO) {
+            ATH_MSG_VERBOSE("Muon is neither MuGirl / MuidCo / MuTagIMO - fail low-pT");
+            return false;
+	  }
+	}
 
         // applying Medium selection above pT = 18 GeV
         if (mu.pt() * MeVtoGeV > 18.) {
@@ -703,17 +755,19 @@ namespace CP {
         }
 
         // requiring explicitely >=1 station (2 in the |eta|>1.3 region when Medium selection is not explicitely required)
-        uint8_t nprecisionLayers{0};
-        if (!mu.summaryValue(nprecisionLayers, xAOD::SummaryType::numberOfPrecisionLayers)) {
+	if( mu.muonType() == xAOD::Muon::Combined) {
+	  uint8_t nprecisionLayers{0};
+	  if (!mu.summaryValue(nprecisionLayers, xAOD::SummaryType::numberOfPrecisionLayers)) {
             ATH_MSG_WARNING("passedLowPtEfficiencyCuts - #precision layers missing in combined muon! Failing selection...");
             return false;
-        }
-        uint nStationsCut = (std::abs(mu.eta()) > 1.3 && std::abs(mu.eta()) < 1.55) ? 2 : 1;
-        if (nprecisionLayers < nStationsCut) {
+	  }
+	  uint nStationsCut = (std::abs(mu.eta()) > 1.3 && std::abs(mu.eta()) < 1.55) ? 2 : 1;
+	  if (nprecisionLayers < nStationsCut) {
             ATH_MSG_VERBOSE("number of precision layers = " << (int)nprecisionLayers << " is lower than cut value " << nStationsCut
-                                                            << " - fail low-pT");
+			    << " - fail low-pT");
             return false;
-        }
+	  }
+	}
 
         // reject MuGirl muon if not found also by MuTagIMO
         if (m_useAllAuthors) {
@@ -758,22 +812,22 @@ namespace CP {
     }
 
 
-    std::vector<int> MuonSelectionTool::getChamberIndicesSorted(const xAOD::Muon& mu) const {
+  std::vector<const xAOD::MuonSegment*> MuonSelectionTool::getSegmentsSorted(const xAOD::Muon& mu) const {
 
-      std::vector<int> chamberIndices_sorted;
-      chamberIndices_sorted.reserve(mu.nMuonSegments());
+      std::vector<const xAOD::MuonSegment*> segments_sorted;
+      segments_sorted.reserve(mu.nMuonSegments());
       
       for (unsigned int i = 0; i < mu.nMuonSegments(); i++) {
 	
 	if (mu.muonSegment(i) == nullptr)
 	  ATH_MSG_WARNING("The muon reports more segments than are available. Please report this to the muon software community!");
 	else
-	  chamberIndices_sorted.push_back(mu.muonSegment(i)->chamberIndex());
+	  segments_sorted.push_back(mu.muonSegment(i));
       }
 
-      sort(chamberIndices_sorted.begin(), chamberIndices_sorted.end(), chamberIndexCompare);
+      sort(segments_sorted.begin(), segments_sorted.end(), chamberIndexCompare);
 
-      return chamberIndices_sorted;
+      return segments_sorted;
     }
 
 
@@ -796,27 +850,66 @@ namespace CP {
             return false;
         }
 
-        float segChamberIdx1{-1.}, segChamberIdx2{-1}, middleHoles{-1};
+        float seg1ChamberIdx{-1.}, seg2ChamberIdx{-1.}, middleHoles{-1.}, seg1NPrecisionHits{-1.}, seg1GlobalR{-1.}, seg1Chi2OverDoF{-1.};
+
+	std::vector<const xAOD::MuonSegment*> muonSegments = getSegmentsSorted(mu);
+
+	if (mu.author() == xAOD::Muon::MuTagIMO && muonSegments.size() == 0)
+	  ATH_MSG_WARNING("passedLowPtEfficiencyMVACut - found segment-tagged muon with no segments!");
 
-	std::vector<int> chamberIndices = getChamberIndicesSorted(mu);
+        seg1ChamberIdx =     (muonSegments.size() > 0) ? muonSegments[0]->chamberIndex() : -9;
+        seg2ChamberIdx =     (muonSegments.size() > 1) ? muonSegments[1]->chamberIndex() : -9;
+
+	//these variables are only used for MuTagIMO
+	if (mu.author() == xAOD::Muon::MuTagIMO) {
+	  seg1NPrecisionHits = (muonSegments.size() > 0) ? muonSegments[0]->nPrecisionHits() : -1;
+	  seg1GlobalR =        (muonSegments.size() > 0) ? sqrt( muonSegments[0]->x()*muonSegments[0]->x() + 
+								 muonSegments[0]->y()*muonSegments[0]->y() +
+								 muonSegments[0]->z()*muonSegments[0]->z() ) : 0;
+	  seg1Chi2OverDoF =    (muonSegments.size() > 0) ? muonSegments[0]->chiSquared() / muonSegments[0]->numberDoF() : -1;
+	}
 
-        segChamberIdx1 = (chamberIndices.size() > 0) ? chamberIndices[0] : -9;
-        segChamberIdx2 = (chamberIndices.size() > 1) ? chamberIndices[1] : -9;
         middleHoles = middleSmallHoles + middleLargeHoles;
 
         // get event number from event info
         SG::ReadHandle<xAOD::EventInfo> eventInfo(m_eventInfo);
 
-        const std::vector<float> var_vector{
-            momentumBalanceSig, 
-            CurvatureSig, 
-            scatteringNeigbour, 
-            energyLoss, 
-            middleHoles, 
-            muonSegmentDeltaEta, 
-            segChamberIdx1, 
-            segChamberIdx2,
-        };
+	// variables for the BDT
+        std::vector<float> var_vector;
+	if (mu.author() == xAOD::Muon::MuidCo || mu.author() == xAOD::Muon::MuGirl) {
+	  var_vector = {
+	    momentumBalanceSig, 
+	    CurvatureSig, 
+	    scatteringNeigbour, 
+	    energyLoss, 
+	    middleHoles, 
+	    muonSegmentDeltaEta, 
+	    seg1ChamberIdx, 
+	    seg2ChamberIdx
+	  };
+	}
+	else {
+	  if ( std::abs(mu.eta()) >= 1.3 )
+	    var_vector = {
+	      seg2ChamberIdx,
+	      seg1ChamberIdx,
+	      seg1NPrecisionHits,
+	      muonSegmentDeltaEta,
+	      seg1GlobalR,
+	      seg1Chi2OverDoF,
+	      std::abs(CurvatureSig)
+	    };
+	  else
+	    var_vector = {
+	      seg1ChamberIdx,
+	      seg1NPrecisionHits,
+	      muonSegmentDeltaEta,
+	      seg1GlobalR,
+	      seg1Chi2OverDoF,
+	      std::abs(CurvatureSig)
+	    };
+	}
+
         // use different trainings for even/odd numbered events
         TMVA::Reader *reader_MUID, *reader_MUGIRL;
         if (eventInfo->eventNumber() % 2 == 1) {
@@ -827,20 +920,33 @@ namespace CP {
             reader_MUGIRL = m_readerO_MUGIRL.get();
         }
 
+	//BDT for MuTagIMO is binned in |eta|
+	TMVA::Reader *reader_MUTAGIMO;
+	if ( std::abs(mu.eta()) < 0.7 )
+	  reader_MUTAGIMO = m_reader_MUTAGIMO_etaBin1.get();
+	else if ( std::abs(mu.eta()) < 1.3 )
+	  reader_MUTAGIMO = m_reader_MUTAGIMO_etaBin2.get();
+	else
+	  reader_MUTAGIMO = m_reader_MUTAGIMO_etaBin3.get();
+
         // get the BDT discriminant response
         float BDTdiscriminant;
 
         if (mu.author() == xAOD::Muon::MuidCo)
             BDTdiscriminant = reader_MUID->EvaluateMVA(var_vector, "BDTG");
-        else if (mu.author() == xAOD::Muon::MuGirl || mu.author() == xAOD::Muon::MuTagIMO)
+        else if (mu.author() == xAOD::Muon::MuGirl)
             BDTdiscriminant = reader_MUGIRL->EvaluateMVA(var_vector, "BDTG");
+	else if (mu.author() == xAOD::Muon::MuTagIMO && m_useSegmentTaggedLowPt)
+	    BDTdiscriminant = reader_MUTAGIMO->EvaluateMVA(var_vector, "BDT");
         else {
             ATH_MSG_WARNING("Invalid author for low-pT MVA, failing selection...");
             return false;
         }
 
-        // cut on dicriminant at -0.6
-        if (BDTdiscriminant > -0.6) {
+	//cut on dicriminant
+	float BDTcut = (mu.author() == xAOD::Muon::MuTagIMO) ? 0.12 : -0.6;
+
+        if (BDTdiscriminant > BDTcut) {
             ATH_MSG_VERBOSE("Passed low-pT MVA cut");
             return true;
         } else {
@@ -1176,7 +1282,7 @@ namespace CP {
         if (mu.muonType() == xAOD::Muon::CaloTagged && std::abs(mu.eta()) < 0.105)
             return true;  // removed the passedCaloTagQuality(mu) until this is better understood in r22
         // ::
-        if (mu.muonType() == xAOD::Muon::SegmentTagged && std::abs(mu.eta()) < 0.105) return true;
+        if (mu.muonType() == xAOD::Muon::SegmentTagged && (std::abs(mu.eta()) < 0.105 || m_useSegmentTaggedLowPt)) return true;
         // ::
         if (mu.author() == xAOD::Muon::MuidSA && std::abs(mu.eta()) > 2.4) return true;
         // ::
diff --git a/PhysicsAnalysis/PhysicsValidation/VKalVrtValidation/src/TestCascadeAlg.cxx b/PhysicsAnalysis/PhysicsValidation/VKalVrtValidation/src/TestCascadeAlg.cxx
index a04b2c92805b12d1f4019f3ab6a55f118b53cacd..b4cef07647be28d261c1a3f6463e214a3fedae13 100644
--- a/PhysicsAnalysis/PhysicsValidation/VKalVrtValidation/src/TestCascadeAlg.cxx
+++ b/PhysicsAnalysis/PhysicsValidation/VKalVrtValidation/src/TestCascadeAlg.cxx
@@ -29,20 +29,21 @@ StatusCode TestCascadeAlg::initialize() {
 }
 
 StatusCode TestCascadeAlg::execute() {
-    xAOD::VertexContainer*    jpsiContainer = nullptr;
-    xAOD::VertexAuxContainer* jpsiauxContainer = nullptr;
+    std::unique_ptr<xAOD::VertexContainer>    jpsiContainer = std::make_unique<xAOD::VertexContainer>();
+    std::unique_ptr<xAOD::VertexAuxContainer> jpsiauxContainer = std::make_unique<xAOD::VertexAuxContainer>();
+    jpsiContainer->setStore(jpsiauxContainer.get());
     
     // call Jpsi+2track tool
-    if( !m_jpsiFinder->performSearch(jpsiContainer, jpsiauxContainer).isSuccess() ) {
+    if( !m_jpsiFinder->performSearch(Gaudi::Hive::currentContext(), *jpsiContainer).isSuccess() ) {
       ATH_MSG_FATAL("Jpsi+2 track tool (" << m_jpsiFinder << ") failed.");
       return StatusCode::FAILURE;
     }
-    if(jpsiContainer->size() ==0) { delete jpsiContainer; return StatusCode::SUCCESS; }
+    if(jpsiContainer->size() ==0) { return StatusCode::SUCCESS; }
     std::vector<const xAOD::TrackParticle*> tracksJpsi;
     std::vector<std::vector<const xAOD::TrackParticle*>> tracksV0;
-    double mass_muon = 105.658;
-    double mass_pion = 139.570;
-    double mass_ks   = 497.61;
+    constexpr double mass_muon = 105.658;
+    constexpr double mass_pion = 139.570;
+    constexpr double mass_ks   = 497.61;
     std::vector<double> massesJpsi(2, mass_muon);
     std::vector<double> massesV0;
     std::vector<double> Masses(2, mass_muon);
@@ -62,7 +63,7 @@ StatusCode TestCascadeAlg::execute() {
     }
 
     double mass_v0 = mass_ks;
-    double mass_jpsi = 3.0969 * 1000;
+    constexpr double mass_jpsi = 3.0969 * 1000;
     int pereventcount = 0;
     for(auto jpsi : *jpsiContainer) { //Iterate over Jpsi vertices
 
@@ -102,12 +103,10 @@ StatusCode TestCascadeAlg::execute() {
           	const std::vector< std::vector<TLorentzVector> > &moms = result->getParticleMoms();
           	for(auto& p :moms) { ATH_MSG_DEBUG("new part"); for(auto &l : p) ATH_MSG_DEBUG("vect " << l.M()); }
            pereventcount++;
-           if(pereventcount>=m_perELimit) goto exitEvent;
+           if(pereventcount>=m_perELimit) return StatusCode::SUCCESS;
           }
        }
     }
 
-exitEvent:
-    delete jpsiContainer;
     return StatusCode::SUCCESS;
 }
diff --git a/PhysicsAnalysis/PrimaryDPDMaker/PrimaryDPDMaker/PrimaryDPDPrescaler.h b/PhysicsAnalysis/PrimaryDPDMaker/PrimaryDPDMaker/PrimaryDPDPrescaler.h
index a190295a039a173ea1700f094e0d83d60580f310..6e8e4260bf8849c10ff271b43db68a63fae2dc2d 100644
--- a/PhysicsAnalysis/PrimaryDPDMaker/PrimaryDPDMaker/PrimaryDPDPrescaler.h
+++ b/PhysicsAnalysis/PrimaryDPDMaker/PrimaryDPDMaker/PrimaryDPDPrescaler.h
@@ -29,7 +29,7 @@ public:
   
   // Private data members
 private: 
-  /// handle to the @c IAtRndmGenSvc we want to test
+  /// handle to the @c IAthRNGSvc we want to test
     ServiceHandle<IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc", "Random Number Service"};   
   
     Gaudi::Property<double> m_prescale{this , "Prescale", 1.};
diff --git a/PhysicsAnalysis/TauID/TauAnalysisTools/Root/CommonSmearingTool.cxx b/PhysicsAnalysis/TauID/TauAnalysisTools/Root/CommonSmearingTool.cxx
index ec3e3648b2602469bc6fe7c8283f1035e74fcc02..29a62e33cc9148a38316ff081991f35a69d2321c 100644
--- a/PhysicsAnalysis/TauID/TauAnalysisTools/Root/CommonSmearingTool.cxx
+++ b/PhysicsAnalysis/TauID/TauAnalysisTools/Root/CommonSmearingTool.cxx
@@ -138,7 +138,7 @@ StatusCode CommonSmearingTool::initialize()
   if (m_bApplyMVATESQualityCheck) 
   {
     ATH_CHECK(ASG_MAKE_ANA_TOOL(m_tTauCombinedTES, TauCombinedTES));
-    ATH_CHECK(m_tTauCombinedTES.setProperty("WeightFileName", "CombinedTES_R22_Round2.5.root"));
+    ATH_CHECK(m_tTauCombinedTES.setProperty("WeightFileName", "CombinedTES_R22_Round2.5_v2.root"));
     ATH_CHECK(m_tTauCombinedTES.initialize());
   }
 
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
index 691ef41406905d4d95c42d2391804173c6a7ba28..23bc63812c71b704a6e208345398d46ba8a58d60 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
@@ -110,6 +110,7 @@ namespace top {
     m_useVarRCAdditionalJSS(false),
     m_useElectronChargeIDSelection(false),
     m_met_met(0.),
+    m_met_sumet(0.),
     m_met_phi(0.),
     m_met_met_withLooseObjects(0.),
     m_met_phi_withLooseObjects(0.) {
@@ -1127,6 +1128,7 @@ namespace top {
 
       //met
       systematicTree->makeOutputVariable(m_met_met, "met_met");
+      systematicTree->makeOutputVariable(m_met_sumet, "met_sumet");
       systematicTree->makeOutputVariable(m_met_phi, "met_phi");
       //these are for specific studies on the met, turned off by default, and turned on with the WriteMETBuiltWithLooseObjects option
       if(m_config->writeMETBuiltWithLooseObjects())
@@ -3440,6 +3442,7 @@ namespace top {
 
     //met
     m_met_met = event.m_met->met();
+    m_met_sumet = event.m_met->sumet();
     m_met_phi = event.m_met->phi();
     
     if(m_config->writeMETBuiltWithLooseObjects())
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/ObjectLoaderStandardCuts.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/ObjectLoaderStandardCuts.cxx
index 6c769c6a352c325f3850a7449251f149ef36d3f3..8619fb371318e95b34902a55f891d879baf4049b 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/ObjectLoaderStandardCuts.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/ObjectLoaderStandardCuts.cxx
@@ -7,20 +7,20 @@
 #include "TopConfiguration/TopConfig.h"
 
 #include "TopObjectSelectionTools/TopObjectSelection.h"
-#include "TopObjectSelectionTools/ElectronLikelihoodMC15.h"
-//#include "TopObjectSelectionTools/FwdElectronMC15.h"
+#include "TopObjectSelectionTools/ElectronLikelihood.h"
+//#include "TopObjectSelectionTools/FwdElectron.h"
 #include "TopObjectSelectionTools/IsolationTools.h"
-#include "TopObjectSelectionTools/MuonMC15.h"
-#include "TopObjectSelectionTools/SoftMuonMC15.h"
-#include "TopObjectSelectionTools/AntiMuonMC15.h"
-#include "TopObjectSelectionTools/TauMC15.h"
-#include "TopObjectSelectionTools/JetMC15.h"
-#include "TopObjectSelectionTools/TrackJetMC15.h"
+#include "TopObjectSelectionTools/Muon.h"
+#include "TopObjectSelectionTools/SoftMuon.h"
+#include "TopObjectSelectionTools/AntiMuon.h"
+#include "TopObjectSelectionTools/Tau.h"
+#include "TopObjectSelectionTools/Jet.h"
+#include "TopObjectSelectionTools/TrackJet.h"
 #include "TopObjectSelectionTools/JetGhostTrackSelection.h"
 #include "TopObjectSelectionTools/TrackSelection.h"
 #include "TopObjectSelectionTools/OverlapRemovalASG.h"
 // R21 specific
-#include "TopObjectSelectionTools/PhotonMC16.h"
+#include "TopObjectSelectionTools/Photon.h"
 
 #include "TopAnalysis/MsgCategory.h"
 // use ATH_MSG macros defined in the namespace TopAnalysis
@@ -37,13 +37,13 @@ namespace top {
 
     ///-- Photons --//
     if (topConfig->usePhotons()) {
-      ATH_MSG_INFO("top::ObjectLoaderStandardCuts::init - Using new photon object for Release 21 - PhotonMC16");
-      objectSelection->photonSelection(new top::PhotonMC16(topConfig->photonPtcut(),
-                                                           topConfig->photonEtacut(),
-                                                           topConfig->photonIdentification(),
-                                                           topConfig->photonIdentificationLoose(),
-                                                           new top::StandardIsolation(topConfig->photonIsolation(),
-                                                                                      topConfig->photonIsolationLoose())));
+      ATH_MSG_INFO("top::ObjectLoaderStandardCuts::init - Using new photon object for Release 21 - Photon");
+      objectSelection->photonSelection(new top::Photon(topConfig->photonPtcut(),
+                                                       topConfig->photonEtacut(),
+                                                       topConfig->photonIdentification(),
+                                                       topConfig->photonIdentificationLoose(),
+                                                       new top::StandardIsolation(topConfig->photonIsolation(),
+                                                                                  topConfig->photonIsolationLoose())));
     }
 
     ///-- Electrons --///
@@ -51,18 +51,18 @@ namespace top {
       if (topConfig->electronID().find("LH") != std::string::npos &&
           topConfig->electronIDLoose().find("LH") != std::string::npos) {
         //user wants likelihood electrons
-        objectSelection->electronSelection(new top::ElectronLikelihoodMC15(topConfig->electronPtcut(),
-                                                                           topConfig->electronVetoLArCrack(),
-                                                                           topConfig->electronID(),
-                                                                           topConfig->electronIDLoose(),
-                                                                           new top::StandardIsolation(
-                                                                             topConfig->electronIsolation(),
-                                                                             topConfig->electronIsolationLoose()),
-                                                                           topConfig->electrond0Sigcut(),
-                                                                           topConfig->electrondeltaz0cut(),
-                                                                           topConfig->applyTTVACut(),
-                                                                           topConfig->useElectronChargeIDSelection()
-                                                                           ));
+        objectSelection->electronSelection(new top::ElectronLikelihood(topConfig->electronPtcut(),
+                                                                       topConfig->electronVetoLArCrack(),
+                                                                       topConfig->electronID(),
+                                                                       topConfig->electronIDLoose(),
+                                                                       new top::StandardIsolation(
+                                                                         topConfig->electronIsolation(),
+                                                                         topConfig->electronIsolationLoose()),
+                                                                       topConfig->electrond0Sigcut(),
+                                                                       topConfig->electrondeltaz0cut(),
+                                                                       topConfig->applyTTVACut(),
+                                                                       topConfig->useElectronChargeIDSelection()
+                                                                       ));
       } else {
         ATH_MSG_ERROR("Only likelihood-based electron ID is currently supported. You have selected:\n"
           << "Tight electron definition: " << topConfig->electronID() << "\n"
@@ -73,42 +73,42 @@ namespace top {
 
     ///-- Fwd Electrons --///
     //if (topConfig->useFwdElectrons()) {
-    //  objectSelection->fwdElectronSelection(new top::FwdElectronMC15(topConfig->fwdElectronPtcut(),
+    //  objectSelection->fwdElectronSelection(new top::FwdElectron(topConfig->fwdElectronPtcut(),
     //                                                                 topConfig->fwdElectronMinEtacut(),
     //                                                                 topConfig->fwdElectronMaxEtacut(), topConfig));
     //}
     ///-- Muons --///
     if (topConfig->useMuons()) {
-      if (topConfig->useAntiMuons()) objectSelection->muonSelection(new top::AntiMuonMC15(topConfig->muonPtcut(),
-                                                                                          new top::AntiMuonIsolation(
-                                                                                            topConfig->muonIsolation())));
-      else objectSelection->muonSelection(new top::MuonMC15(topConfig->muonPtcut(),
-                                                            new top::StandardIsolation(topConfig->muonIsolation(),
-                                                                                       topConfig->muonIsolationLoose()),
-                                                            topConfig->muond0Sigcut(),
-                                                            topConfig->muondeltaz0cut(),
-                                                            topConfig->applyTTVACut()));
+      if (topConfig->useAntiMuons()) objectSelection->muonSelection(new top::AntiMuon(topConfig->muonPtcut(),
+                                                                                      new top::AntiMuonIsolation(
+                                                                                        topConfig->muonIsolation())));
+      else objectSelection->muonSelection(new top::Muon(topConfig->muonPtcut(),
+                                                        new top::StandardIsolation(topConfig->muonIsolation(),
+                                                                                   topConfig->muonIsolationLoose()),
+                                                        topConfig->muond0Sigcut(),
+                                                        topConfig->muondeltaz0cut(),
+                                                        topConfig->applyTTVACut()));
     }
 
     ///-- Soft Muons --///
     if (topConfig->useSoftMuons()) {
-      objectSelection->softmuonSelection(new top::SoftMuonMC15(topConfig->softmuonPtcut()));
+      objectSelection->softmuonSelection(new top::SoftMuon(topConfig->softmuonPtcut()));
     }
 
 
     ///-- Taus --///
     if (topConfig->useTaus()) {
-      objectSelection->tauSelection(new top::TauMC15());
+      objectSelection->tauSelection(new top::Tau());
     }
 
     ///-- Jets --///
     if (topConfig->useJets()) {
-      objectSelection->jetSelection(new top::JetMC15(topConfig->jetPtcut(), topConfig->jetEtacut()));
+      objectSelection->jetSelection(new top::Jet(topConfig->jetPtcut(), topConfig->jetEtacut()));
     }
 
     ///-- Large R Jets --///
     if (topConfig->useLargeRJets()) {// not doing JVT cut for large-R jets
-      objectSelection->largeJetSelection(new top::JetMC15(topConfig->largeRJetPtcut(),
+      objectSelection->largeJetSelection(new top::Jet(topConfig->largeRJetPtcut(),
                                                           topConfig->largeRJetEtacut(),
                                                           topConfig->largeRJetMasscut(),
                                                           false));
@@ -116,7 +116,7 @@ namespace top {
 
     ///-- Track Jets --///
     if (topConfig->useTrackJets()) {
-      objectSelection->trackJetSelection(new top::TrackJetMC15(topConfig->trackJetPtcut(),
+      objectSelection->trackJetSelection(new top::TrackJet(topConfig->trackJetPtcut(),
                                                                topConfig->trackJetEtacut()));
     }
 
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/TopAnalysis/EventSaverFlatNtuple.h b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/TopAnalysis/EventSaverFlatNtuple.h
index e42b03d201011b605a8cab3dff49ba57c2fd77a1..e5cafbb419922f55ea4ffbbc4468825516764644 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/TopAnalysis/EventSaverFlatNtuple.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/TopAnalysis/EventSaverFlatNtuple.h
@@ -732,6 +732,7 @@ namespace top {
 
     //met
     float m_met_met;
+    float m_met_sumet;
     float m_met_phi;
     //these are for specific studies on the met, turned off by default, and turned on with the WriteMETBuiltWithLooseObjects option
     float m_met_met_withLooseObjects;
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx
index 8a6e8a31538f332d524118f866db84d948f58d58..7b27050045dfa3ef9841c03d4b55effff2a739cd 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopConfiguration/Root/TopConfig.cxx
@@ -1727,14 +1727,6 @@ namespace top {
     //Switch off PRW for MC samples with data overlay
     if(m_isDataOverlay) m_pileup_reweighting.apply = false;
 
-    /************************************************************
-    *
-    * Muon trigger SF configuration
-    * see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MCPAnalysisGuidelinesMC15#How_to_retrieve_the_SF
-    * for the various trigger strings allowed
-    *
-    ************************************************************/
-
     m_muon_trigger_SF = settings->value("MuonTriggerSF");
 
     if (settings->value("DemandPrimaryVertex") == "False")
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopCorrections/Root/MuonScaleFactorCalculator.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopCorrections/Root/MuonScaleFactorCalculator.cxx
index fd7a6a6eda24f914b4d9eafdbc5225ed68452ad9..7f39d8101efa1a3092357116150d89d5cfaeeb38 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopCorrections/Root/MuonScaleFactorCalculator.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopCorrections/Root/MuonScaleFactorCalculator.cxx
@@ -178,7 +178,6 @@ namespace top {
       else ATH_MSG_WARNING("Event has not been decorated with RandomRunNumber");
 
       // Keep an eye here for trigger strings
-      // https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MCPAnalysisGuidelinesMC15#Supported_triggers
       m_muonTriggerScaleFactors = m_muonTriggerScaleFactors_R21;
       m_muonTriggerScaleFactorsLoose = m_muonTriggerScaleFactorsLoose_R21;
       m_muon_trigger_sf_config = "";
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC.cxx
similarity index 96%
rename from PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC15.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC.cxx
index 41195394b9ca945cf328f7bbe9564ab6669457d5..a62b48fc15892170f6002accc87fa23545bd0d98 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/RCJetMC.cxx
@@ -14,7 +14,7 @@
    // File for initializing and making re-clustered jets.
    //
  ***************************************************************/
-#include "TopEvent/RCJetMC15.h"
+#include "TopEvent/RCJet.h"
 
 #include "TopConfiguration/TopConfig.h"
 #include "AsgTools/AsgTool.h"
@@ -35,7 +35,7 @@
 #include "JetSubStructureUtils/EnergyCorrelatorGeneralized.h"
 #include "JetSubStructureUtils/EnergyCorrelator.h"
 
-RCJetMC15::RCJetMC15(const std::string& name) :
+RCJet::RCJet(const std::string& name) :
   asg::AsgTool(name),
   m_name(name),
   m_config(nullptr),
@@ -84,10 +84,10 @@ RCJetMC15::RCJetMC15(const std::string& name) :
   declareProperty("VarRCjets_mass_scale", m_VarRCjets_mass_scale = "");
 }
 
-RCJetMC15::~RCJetMC15() {}
+RCJet::~RCJet() {}
 
 
-StatusCode RCJetMC15::initialize() {
+StatusCode RCJet::initialize() {
   /* Initialize the re-clustered jets */
   ATH_MSG_INFO(" Initializing Re-clustered jets ");
 
@@ -264,7 +264,7 @@ StatusCode RCJetMC15::initialize() {
   return StatusCode::SUCCESS;
 } // end initialize()
 
-StatusCode RCJetMC15::execute(const top::Event& event) {
+StatusCode RCJet::execute(const top::Event& event) {
   /*
      Make the jet container (if necessary) and execute the re-clustering tool
       https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/TopPhys/xAOD/TopEvent/trunk/Root/TopEventMaker.cxx#L31
@@ -335,7 +335,7 @@ StatusCode RCJetMC15::execute(const top::Event& event) {
           // In case of AntiKt4EMPFlowJets the tracks could be removed by the pile-up cuts
           top::check(
             !clusters.empty(),
-            "RCJetMC15::execute(const top::Event& event): Failed to get vector of clusters! Unable to calculate RC jets substructure variables!\n Aborting!");
+            "RCJet::execute(const top::Event& event): Failed to get vector of clusters! Unable to calculate RC jets substructure variables!\n Aborting!");
         }
 
         if (clusters.size() != 0) {
@@ -463,13 +463,13 @@ StatusCode RCJetMC15::execute(const top::Event& event) {
   return StatusCode::SUCCESS;
 } // end execute()
 
-StatusCode RCJetMC15::finalize() {
+StatusCode RCJet::finalize() {
   m_jetReclusteringTool.clear();
 
   return StatusCode::SUCCESS;
 }
 
-bool RCJetMC15::isUniqueSyst(const std::string syst_name) {
+bool RCJet::isUniqueSyst(const std::string syst_name) {
   /*
      Check if the given systematic (besides nominal) needs a unique container
      Keep this in one function so it easier to update than having multiple checks everywhere.
@@ -496,7 +496,7 @@ bool RCJetMC15::isUniqueSyst(const std::string syst_name) {
   return m_unique_syst;
 }
 
-std::string RCJetMC15::inputContainerName(std::size_t hash_value, bool isLooseEvent) {
+std::string RCJet::inputContainerName(std::size_t hash_value, bool isLooseEvent) {
   /* Return the name of the input container */
   std::string this_container_name("");
   if (isLooseEvent) hash_value *= m_loose_hashValue; // loose events have a slightly different hash value to keep track
@@ -510,7 +510,7 @@ std::string RCJetMC15::inputContainerName(std::size_t hash_value, bool isLooseEv
   return this_container_name;
 }
 
-std::string RCJetMC15::rcjetContainerName(std::size_t hash_value, bool isLooseEvent) {
+std::string RCJet::rcjetContainerName(std::size_t hash_value, bool isLooseEvent) {
   /* Return the name of the rcjet container for a given systematic */
   std::string this_container_name("");
   if (isLooseEvent) hash_value *= m_loose_hashValue; // loose events have a	slightly different hash	value
@@ -523,7 +523,7 @@ std::string RCJetMC15::rcjetContainerName(std::size_t hash_value, bool isLooseEv
   return this_container_name;
 }
 
-bool RCJetMC15::passSelection(const xAOD::Jet& jet) const {
+bool RCJet::passSelection(const xAOD::Jet& jet) const {
   /*
      Check if the re-clustered jet passes selection.
      Right now, this only does something for |eta| because
@@ -542,7 +542,7 @@ bool RCJetMC15::passSelection(const xAOD::Jet& jet) const {
   return true;
 }
 
-void RCJetMC15::getEMTopoClusters(std::vector<fastjet::PseudoJet>& clusters, const xAOD::Jet* rcjet) {
+void RCJet::getEMTopoClusters(std::vector<fastjet::PseudoJet>& clusters, const xAOD::Jet* rcjet) {
   clusters.clear();
 
   for (auto subjet : rcjet->getConstituents()) {
@@ -576,7 +576,7 @@ void RCJetMC15::getEMTopoClusters(std::vector<fastjet::PseudoJet>& clusters, con
   }
 }
 
-void RCJetMC15::getLCTopoClusters(std::vector<fastjet::PseudoJet>& clusters, const xAOD::Jet* rcjet) {
+void RCJet::getLCTopoClusters(std::vector<fastjet::PseudoJet>& clusters, const xAOD::Jet* rcjet) {
   //LCTOPO CLUSTERS
   clusters.clear();
 
@@ -604,7 +604,7 @@ void RCJetMC15::getLCTopoClusters(std::vector<fastjet::PseudoJet>& clusters, con
   }
 }
 
-void RCJetMC15::getPflowConstituent(std::vector<fastjet::PseudoJet>& clusters, const xAOD::Jet* rcjet,
+void RCJet::getPflowConstituent(std::vector<fastjet::PseudoJet>& clusters, const xAOD::Jet* rcjet,
                                     const top::Event& event) {
   // At the moment the proper constituent of the PFlows aren't available in TOPQ1 and there is no strategy to provide
   // uncertainty on that consequently
@@ -647,7 +647,7 @@ void RCJetMC15::getPflowConstituent(std::vector<fastjet::PseudoJet>& clusters, c
       }
     } else {
       ATH_MSG_WARNING(
-        "RCJETMC15::No remaining tracks associated to the PFlow jet");
+        "RCJET::No remaining tracks associated to the PFlow jet");
           }
   }
 }
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/TopEventMaker.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/TopEventMaker.cxx
index a9f276d035b0bdaf470b87375f5b6995c50c4c46..9677ff5131bbd7dca4a03a1a37ad52a3e58e60ca 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/TopEventMaker.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/Root/TopEventMaker.cxx
@@ -39,9 +39,9 @@ namespace top {
 
   StatusCode TopEventMaker::initialize() {
     if (m_config->useRCJets() == true) {
-      m_rc = std::unique_ptr<RCJetMC15> (new RCJetMC15("RCJetMC15"));
-      top::check(m_rc->setProperty("config", m_config), "Failed to set config property of RCJetMC15");
-      top::check(m_rc->initialize(), "Failed to initialize RCJetMC15");
+      m_rc = std::unique_ptr<RCJet> (new RCJet("RCJet"));
+      top::check(m_rc->setProperty("config", m_config), "Failed to set config property of RCJet");
+      top::check(m_rc->initialize(), "Failed to initialize RCJet");
     }
 
     if (m_config->useVarRCJets() == true) {
@@ -52,15 +52,15 @@ namespace top {
         for (auto& mass_scale : m_VarRCJetMassScale) {
           std::replace(rho.begin(), rho.end(), '.', '_');
           std::string name = rho + mass_scale;
-          m_VarRC[name] = std::unique_ptr<RCJetMC15> (new RCJetMC15("VarRCJetMC15_" + name));
-          top::check(m_VarRC[name]->setProperty("config", m_config), "Failed to set config property of VarRCJetMC15");
-          top::check(m_VarRC[name]->setProperty("VarRCjets", true), "Failed to set VarRCjets property of VarRCJetMC15");
+          m_VarRC[name] = std::unique_ptr<RCJet> (new RCJet("VarRCJet_" + name));
+          top::check(m_VarRC[name]->setProperty("config", m_config), "Failed to set config property of VarRCJet");
+          top::check(m_VarRC[name]->setProperty("VarRCjets", true), "Failed to set VarRCjets property of VarRCJet");
           top::check(m_VarRC[name]->setProperty("VarRCjets_rho",
-                                                rho), "Failed to set VarRCjets rho property of VarRCJetMC15");
+                                                rho), "Failed to set VarRCjets rho property of VarRCJet");
           top::check(m_VarRC[name]->setProperty("VarRCjets_mass_scale",
                                                 mass_scale),
-                     "Failed to set VarRCjets mass scale property of VarRCJetMC15");
-          top::check(m_VarRC[name]->initialize(), "Failed to initialize VarRCJetMC15");
+                     "Failed to set VarRCjets mass scale property of VarRCJet");
+          top::check(m_VarRC[name]->initialize(), "Failed to initialize VarRCJet");
         } // end loop over mass scale parameters (e.g., top mass, w mass, etc.)
       } // end loop over mass scale multiplies (e.g., 1.,2.,etc.)
     }
@@ -443,7 +443,7 @@ namespace top {
 
     // Reclustered jets
     if (m_config->useRCJets()) {
-      top::check(m_rc->execute(event), "Failed to execute RCJetMC15 container");
+      top::check(m_rc->execute(event), "Failed to execute RCJet container");
       std::string rcJetContainerName = m_rc->rcjetContainerName(event.m_hashValue, event.m_isLoose);
       const xAOD::JetContainer* rc_jets(nullptr);
       top::check(evtStore()->retrieve(rc_jets, rcJetContainerName), "Failed to retrieve RC JetContainer");
@@ -461,7 +461,7 @@ namespace top {
         for (auto& mass_scale : m_VarRCJetMassScale) {
           std::replace(rho.begin(), rho.end(), '.', '_');
           std::string name = rho + mass_scale;
-          top::check(m_VarRC[name]->execute(event), "Failed to execute RCJetMC15 container");
+          top::check(m_VarRC[name]->execute(event), "Failed to execute RCJet container");
 
           // Get the name of the container of re-clustered jets in TStore
           std::string varRCJetContainerName = m_VarRC[name]->rcjetContainerName(event.m_hashValue, event.m_isLoose);
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/RCJetMC15.h b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/RCJet.h
similarity index 94%
rename from PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/RCJetMC15.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/RCJet.h
index 1053d0876e71ed269686708bcb43c87704ddd4b7..ebd6297e9353170d5a6eab8240e47dc862b4f2a8 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/RCJetMC15.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/RCJet.h
@@ -2,8 +2,8 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef RCJETMC15_H_
-#define RCJETMC15_H_
+#ifndef RCJET_H_
+#define RCJET_H_
 
 #include "TopEvent/Event.h"
 #include "TopEvent/EventTools.h"
@@ -52,18 +52,18 @@ namespace JetSubStructureUtils {
   class EnergyCorrelatorGeneralized;
 }
 
-class RCJetMC15 final: public asg::AsgTool {
+class RCJet final: public asg::AsgTool {
 public:
   //Default - so root can load based on a name
-  explicit RCJetMC15(const std::string& name);
+  explicit RCJet(const std::string& name);
 
   //Default - so we can clean up
-  ~RCJetMC15();
+  ~RCJet();
 
   // Delete Standard constructors
-  RCJetMC15(const RCJetMC15& rhs) = delete;
-  RCJetMC15(RCJetMC15&& rhs) = delete;
-  RCJetMC15& operator = (const RCJetMC15& rhs) = delete;
+  RCJet(const RCJet& rhs) = delete;
+  RCJet(RCJet&& rhs) = delete;
+  RCJet& operator = (const RCJet& rhs) = delete;
 
   //Run once at the start of the job
   StatusCode initialize();
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/TopEventDict.h b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/TopEventDict.h
index 39fd32f9bdea9fcef34bdfde95a9816fc97b73b9..92f8b7457f7be050e39f9c0c5b3fa1a72c68ec37 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/TopEventDict.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/TopEventDict.h
@@ -17,7 +17,7 @@
 #include "TopEvent/SystematicEventContainer.h"
 #include "TopEvent/SystematicEventAuxContainer.h"
 
-#include "TopEvent/RCJetMC15.h"
+#include "TopEvent/RCJet.h"
 #include "TopEvent/TopEventMaker.h"
 
 // EDM include(s).
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/TopEventMaker.h b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/TopEventMaker.h
index 33b758c41632245e4ea3776bd70a49fa7443b5c8..b2bd2127ef218cadd624857c01fbc01ccd544672 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/TopEventMaker.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/TopEventMaker.h
@@ -14,10 +14,10 @@
 #include "TopEvent/Event.h"
 #include "TopEvent/SystematicEvent.h"
 #include "TopEvent/SystematicEventContainer.h"
-#include "TopEvent/RCJetMC15.h"
+#include "TopEvent/RCJet.h"
 
 
-class RCJetMC15;
+class RCJet;
 
 namespace top {
   class TopConfig;
@@ -67,8 +67,8 @@ namespace top {
     void decorateTopEventSoftMuons(top::Event &event);
 
     std::shared_ptr<top::TopConfig> m_config;
-    std::unique_ptr<RCJetMC15> m_rc;
-    std::map<std::string, std::unique_ptr<RCJetMC15> > m_VarRC;
+    std::unique_ptr<RCJet> m_rc;
+    std::map<std::string, std::unique_ptr<RCJet> > m_VarRC;
     std::vector<std::string> m_VarRCJetRho;
     std::vector<std::string> m_VarRCJetMassScale;
 
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/selection.xml b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/selection.xml
index aa77f077ed0cbe2736abe2f32b283b647c2e25b9..e8fc8fd3d8fa66abe3902fb96b3449fe6b5b1001 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/selection.xml
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEvent/TopEvent/selection.xml
@@ -21,7 +21,7 @@
           id="1B7C57E6-2031-11EB-B796-BB92DD1855E8" />
 
    <!-- Tool type(s). -->
-   <class name="RCJetMC15" />
+   <class name="RCJet" />
    <class name="top::TopEventMaker" />
 
 </lcgdict>
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/CMakeLists.txt b/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/CMakeLists.txt
index 6af3304873163912d6c0bb7cb3886bd7ba6c3c9c..de020d04d262707a05fa1c7bf461fbcdd1aa1e48 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/CMakeLists.txt
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/CMakeLists.txt
@@ -39,6 +39,3 @@ atlas_add_library( TopEventSelectionTools Root/*.cxx Root/*.h Root/*.icc
                                           xAODJet
                                           xAODMuon )
 
-# Install data files from the package:
-atlas_install_data( share/* )
-
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/Root/MV2c10Selector.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/Root/MV2c10Selector.cxx
deleted file mode 100644
index 6f20425ef5eed6fa0fa2b55ed4331933649b5f31..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/Root/MV2c10Selector.cxx
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-   Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
- */
-
-#include "TopEventSelectionTools/MV2c10Selector.h"
-#include "TopEvent/EventTools.h"
-#include "xAODBTagging/BTaggingUtilities.h"
-
-#include <algorithm>
-
-namespace top {
-  MV2c10Selector::MV2c10Selector(const std::string& params) :
-    SignValueSelector("MV2C10_N", params, true) {
-    checkMultiplicityIsInteger();
-  }
-
-  bool MV2c10Selector::apply(const top::Event& event) const {
-    auto func = [&](const xAOD::Jet* const jetPtr) {
-                  double mv2c10_discriminant = 0.;
-                  const bool hasMv2c10 = xAOD::BTaggingUtilities::getBTagging(*jetPtr)->MVx_discriminant("MV2c10", mv2c10_discriminant);
-
-                  if (hasMv2c10) return mv2c10_discriminant > value();
-
-                  return false;
-                };
-
-    auto count = std::count_if(event.m_jets.begin(), event.m_jets.end(), func);
-
-    return checkInt(count, multiplicity());
-  }
-}
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/Root/TopEventSelectionToolsLoader.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/Root/TopEventSelectionToolsLoader.cxx
index 4af018b1e456829e6fab9afe6b03e7a285ea4e92..5b30764d0e1afebf9376c1afbb24804b51fdacbf 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/Root/TopEventSelectionToolsLoader.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/Root/TopEventSelectionToolsLoader.cxx
@@ -26,7 +26,6 @@
 #include "TopEventSelectionTools/METSelector.h"
 #include "TopEventSelectionTools/MLLSelector.h"
 #include "TopEventSelectionTools/MLLWindowSelector.h"
-#include "TopEventSelectionTools/MV2c10Selector.h"
 #include "TopEventSelectionTools/MWTSelector.h"
 #include "TopEventSelectionTools/NElectronNMuonSelector.h"
 #include "TopEventSelectionTools/NElectronNMuonTightSelector.h"
@@ -91,7 +90,7 @@ namespace top {
       std::string name;
       getline(is, name, ' ');
       return new top::NVarRCJetSelector(name, param.substr(name.size() + 1));
-    } else if (toolname == "MV2C10_N") return new top::MV2c10Selector(param);
+    }
     else if (toolname == "EL_N_OR_MU_N") return new top::NElectronNMuonSelector(param);
     else if (toolname == "EL_N_OR_MU_N_TIGHT") return new top::NElectronNMuonTightSelector(param);
     else if (toolname == "EL_N") return new top::NElectronSelector(param);
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/TopEventSelectionTools/MV2c10Selector.h b/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/TopEventSelectionTools/MV2c10Selector.h
deleted file mode 100644
index c1972f98f4bc63a8ff1a579217746d64d45597e9..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/TopEventSelectionTools/MV2c10Selector.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-   Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
- */
-
-#ifndef MV2C10SELECTOR_H_
-#define MV2C10SELECTOR_H_
-
-#include "TopEventSelectionTools/SignValueSelector.h"
-
-namespace top {
-/**
- * @brief Should count how many jets have an mv2c10 weight above some value.
- */
-  class MV2c10Selector: public SignValueSelector {
-  public:
-    explicit MV2c10Selector(const std::string& params);
-
-    /**
-     * @brief Look at the event and check if the required number of tagged jets
-     * are there.
-     *
-     * If MV2C10 is not in the input file (it is for MC15) then you need to
-     * return false, since no events pass the cut.  If it is there we retrieve
-     * it and check the value against the user specified cut.
-     *
-     * @param event The event to analyse
-     * @return True if the event passes the cut, false otherwise.
-     */
-    bool apply(const top::Event& event) const override;
-  };
-}
-
-#endif
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/share/mainpage.h b/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/share/mainpage.h
deleted file mode 100644
index 639af95d160da1859f0153ecd9c5f636d55c977e..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/TopPhys/xAOD/TopEventSelectionTools/share/mainpage.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * @page testpage TopEventSelectionTools
- *
- * These can be loaded via the configuration file, which calls this function.
- * If you write a new tool (in this package) you have to make sure you add it
- * to this, which is loaded by ROOT at run-time.
- *
- * - top::TopEventSelectionToolsLoader: Code that loads a tool from the name.
- *
- * @section es Event Selection Tools
- *
- * - Random tools
- *  - top::InitialSelector: Select all events.
- *  - top::SaveEventSelector: Save the event to the output Tree.
- *  - top::PrintEventSelector: Print some info about the selected events to the screen.
- *  - top::ExamplePlots: An example of plotting some kinematic variables.
- *  - top::GRLSelector: For data only accept events that are on the GRL.
- *  - top::JetCleaningSelector: Select events only if they have no bad jets.
- *  - top::TrigDecisionSelector: Select events based on the trigger decision.
- *  - top::TrigMatchSelector: Select events with reconstructed charged leptons matching the triggers
- *
- * - Selection based on object multiplicity
- *  - top::NElectronSelector: Cut on the number of electrons.
- *  - top::NMuonSelector: Cut on the number of muons.
- *  - top::NTauSelector: Cut on the number of taus.
- *  - top::NElectronNMuonSelector: Cut on the sum of electrons and muons.
- *  - top::NJetSelector: Cut on the number of jets.
- *  - top::IP3DSV1Selector: Cut on the number of jets passing a certain working point.
- *  - top::MV1Selector: Cut on the number of jets passing a certain working point.
- *  - top::MV2c20Selector: Cut on the number of jets passing a working point for MV2c20 (run-II start-up).
- *
- * - Selection based on event kinematic quantities
- *  - top::METSelector: Place a cut on MET.
- *  - top::MWTSelector: Place a cut on the W transverse mass.
- *  - top::METMWTSelector: Place a cut on the sum of MET and W transverse mass.
- *  - top::HTSelector: Place a cut on HT (electrons, muons and jets).
- *  - top::OSLeptonSelector: Require at least two opposite sign leptons (e, mu).
- *  - top::SSLeptonSelector: Require at least two same sign leptons (e, mu).
- *  - top::MLLSelector: Place a cut on the dilepton (e, mu) invariant mass.
- *  - top::MLLWindow: Place a window on the dilepton (e, mu) invariant mass.
- *
- * @section fd For Developers
- *
- * - top::EventSelectorBase: Base class for all tools that select events.
- * - top::SignValueSelector: For tools that need a sign (equality, inequality) and a value (number).
- * - top::PlotManager: For book-keeping our histograms.
- * - top::TreeManager: For book-keeping variables in a tree.
- * - top::ToolLoaderBase: Base class for tool loaders.
- */
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/AntiMuonMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/AntiMuon.cxx
similarity index 56%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/AntiMuonMC15.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/AntiMuon.cxx
index dc627d3037b999b6366dbdeda279395605ba05cc..c2de92c65d3db0f239e12c99e61c87668efeba80 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/AntiMuonMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/AntiMuon.cxx
@@ -2,38 +2,35 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#include "TopObjectSelectionTools/AntiMuonMC15.h"
+#include "TopObjectSelectionTools/AntiMuon.h"
 
 #include "TopEvent/EventTools.h"
 
 namespace top {
-  AntiMuonMC15::AntiMuonMC15(const double ptcut, AntiMuonIsolation* isolation) :
+  AntiMuon::AntiMuon(const double ptcut, AntiMuonIsolation* isolation) :
     m_ptcut(ptcut),
     m_muonSelectionTool("MuonSelectionTool"),
     m_isolation(isolation) {
     top::check(m_muonSelectionTool.retrieve(), "Failed to retrieve muonSelectionTool");
   }
 
-  bool AntiMuonMC15::passSelection(const xAOD::Muon& mu) const {
+  bool AntiMuon::passSelection(const xAOD::Muon& mu) const {
     if (mu.pt() < m_ptcut) return false;
 
-    ///-- https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MCPAnalysisGuidelinesMC15 --///
     if (!m_muonSelectionTool->accept(mu)) return false;
 
     return m_isolation->passSelection(mu);
   }
 
-  bool AntiMuonMC15::passSelectionLoose(const xAOD::Muon& /*mu*/) const {
+  bool AntiMuon::passSelectionLoose(const xAOD::Muon& /*mu*/) const {
     // code does not compile without this function
 
     return true;
   }
 
-  void AntiMuonMC15::print(std::ostream& os) const {
-    os << "AntiMuonMC15\n"
+  void AntiMuon::print(std::ostream& os) const {
+    os << "AntiMuon\n"
        << "    * pT > " << m_ptcut << "\n"
-//         << "    * |eta| < " << m_etamax << "\n"
-//         << "    * quality=" <<  m_quality << " (tight=0, medium=1, loose=2, v.loose=3)\n"
        << "    * Everything else from muon tool - fill this in?\n";
 
      if (!m_isolation)
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/ElectronLikelihoodMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/ElectronLikelihood.cxx
similarity index 79%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/ElectronLikelihoodMC15.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/ElectronLikelihood.cxx
index d628a458eefd47ebc81fb6ca7fd374651ee4c526..e2cab802b040c04ed04df2c8bb5a28e053cdc220 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/ElectronLikelihoodMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/ElectronLikelihood.cxx
@@ -2,7 +2,7 @@
    Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
  */
 
-#include "TopObjectSelectionTools/ElectronLikelihoodMC15.h"
+#include "TopObjectSelectionTools/ElectronLikelihood.h"
 #include "TopEvent/EventTools.h"
 //#include "ElectronPhotonSelectorTools/AsgElectronChargeIDSelectorTool.h"
 #include "ElectronPhotonSelectorTools/ElectronSelectorHelpers.h"
@@ -12,11 +12,11 @@
 using namespace TopObjectSelectionTools;
 
 namespace top {
-  ElectronLikelihoodMC15::ElectronLikelihoodMC15(const double ptcut, const bool vetoCrack,
-                                                 const std::string& operatingPoint,
-                                                 const std::string& operatingPointLoose, StandardIsolation* isolation,
-                                                 const double d0SigCut, const double delta_z0, const bool applyTTVACut,
-                                                 const bool applyChargeIDCut) :
+  ElectronLikelihood::ElectronLikelihood(const double ptcut, const bool vetoCrack,
+                                         const std::string& operatingPoint,
+                                         const std::string& operatingPointLoose, StandardIsolation* isolation,
+                                         const double d0SigCut, const double delta_z0, const bool applyTTVACut,
+                                         const bool applyChargeIDCut) :
     m_ptcut(ptcut),
     m_vetoCrack(vetoCrack),
     m_d0SigCut(d0SigCut),
@@ -77,26 +77,26 @@ namespace top {
     top::check(m_deadHVTool.retrieve(), "Failed to setup Egamma DeadHVCellRemovalTool");
   }
 
-  ElectronLikelihoodMC15::ElectronLikelihoodMC15(const double ptcut, const bool vetoCrack,
-                                                 const std::string& operatingPoint,
-                                                 const std::string& operatingPointLoose,
-                                                 StandardIsolation* isolation,
-                                                 const bool applyChargeIDCut)
-    : ElectronLikelihoodMC15::ElectronLikelihoodMC15(ptcut, vetoCrack, operatingPoint,
-                                                     operatingPointLoose, isolation, 5.0, 0.5, true,
-                                                     applyChargeIDCut) {}
-
-  ElectronLikelihoodMC15::ElectronLikelihoodMC15(const double ptcut, const bool vetoCrack,
+  ElectronLikelihood::ElectronLikelihood(const double ptcut, const bool vetoCrack,
                                                  const std::string& operatingPoint,
                                                  const std::string& operatingPointLoose,
                                                  StandardIsolation* isolation,
-                                                 const bool applyTTVACut,
                                                  const bool applyChargeIDCut)
-    : ElectronLikelihoodMC15::ElectronLikelihoodMC15(ptcut, vetoCrack, operatingPoint,
+    : ElectronLikelihood::ElectronLikelihood(ptcut, vetoCrack, operatingPoint,
+                                             operatingPointLoose, isolation, 5.0, 0.5, true,
+                                             applyChargeIDCut) {}
+
+  ElectronLikelihood::ElectronLikelihood(const double ptcut, const bool vetoCrack,
+                                         const std::string& operatingPoint,
+                                         const std::string& operatingPointLoose,
+                                         StandardIsolation* isolation,
+                                         const bool applyTTVACut,
+                                         const bool applyChargeIDCut)
+    : ElectronLikelihood::ElectronLikelihood(ptcut, vetoCrack, operatingPoint,
                                                      operatingPointLoose, isolation, 5.0, 0.5, applyTTVACut,
                                                      applyChargeIDCut) {}
 
-  bool ElectronLikelihoodMC15::passSelection(const xAOD::Electron& el) const {
+  bool ElectronLikelihood::passSelection(const xAOD::Electron& el) const {
     if (!passSelectionNoIsolation(el, m_operatingPoint_DF, m_operatingPoint)) return false;
 
     if (m_isolation && !m_isolation->passSelection(el)) return false;
@@ -104,7 +104,7 @@ namespace top {
     return true;
   }
 
-  bool ElectronLikelihoodMC15::passSelectionLoose(const xAOD::Electron& el) const {
+  bool ElectronLikelihood::passSelectionLoose(const xAOD::Electron& el) const {
     if (!passSelectionNoIsolation(el, m_operatingPointLoose_DF, m_operatingPointLoose)) return false;
 
     if (m_isolation && !m_isolation->passSelectionLoose(el)) return false;
@@ -112,7 +112,7 @@ namespace top {
     return true;
   }
 
-  bool ElectronLikelihoodMC15::passSelectionNoIsolation(const xAOD::Electron& el, const std::string& operatingPoint_DF,
+  bool ElectronLikelihood::passSelectionNoIsolation(const xAOD::Electron& el, const std::string& operatingPoint_DF,
                                                         const std::string& operatingPoint) const {
     if (el.pt() < m_ptcut) return false;
 
@@ -188,13 +188,13 @@ namespace top {
     return true;
   }
 
-  bool ElectronLikelihoodMC15::passBLayerCuts(const xAOD::Electron& el) const {
+  bool ElectronLikelihood::passBLayerCuts(const xAOD::Electron& el) const {
 
     const xAOD::TrackParticle* t = el.trackParticle();
     return ElectronSelectorHelpers::passBLayerRequirement(t);
   }
 
-  bool ElectronLikelihoodMC15::passTTVACuts(const xAOD::Electron& el) const {
+  bool ElectronLikelihood::passTTVACuts(const xAOD::Electron& el) const {
     // TTVA:
     // see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/TrackingCPEOYE2015#Track_to_Vertex_Association
     if (!el.isAvailable<float>("d0sig")) {
@@ -216,16 +216,16 @@ namespace top {
     return true;
   }
 
-  bool ElectronLikelihoodMC15::passChargeIDCut(const xAOD::Electron& el) const {
+  bool ElectronLikelihood::passChargeIDCut(const xAOD::Electron& el) const {
     static const SG::AuxElement::ConstAccessor<char> acc_ECIDS("DFCommonElectronsECIDS");
 
     top::check(acc_ECIDS.isAvailable(
-                 el), "ElectronLikelihoodMC15::passChargeIDCut: DFCommonElectronsECIDS is not available");
+                 el), "ElectronLikelihood::passChargeIDCut: DFCommonElectronsECIDS is not available");
     return acc_ECIDS(el) ? true : false;
   }
 
-  void ElectronLikelihoodMC15::print(std::ostream& os) const {
-    os << "ElectronLikelihoodMC15\n";
+  void ElectronLikelihood::print(std::ostream& os) const {
+    os << "ElectronLikelihood\n";
     os << "    * pT > " << m_ptcut << "\n";
     os << "    * Currently disabled --- |cluster_eta| < 2.47 \n";
     os << "    * Veto 1.37 < |cluster_eta| < 1.52? " << std::boolalpha << m_vetoCrack << "\n";
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/JetMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Jet.cxx
similarity index 62%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/JetMC15.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Jet.cxx
index 6cdc3b7543a915aa2d41c0a4a91343cc6ff460d7..572ad7675fcbaab42b30d03e2a6bfd70a71d0eca 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/JetMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Jet.cxx
@@ -2,17 +2,17 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#include "TopObjectSelectionTools/JetMC15.h"
+#include "TopObjectSelectionTools/Jet.h"
 
 #include <cmath>
 
 #include "TopEvent/EventTools.h"
 
 namespace top {
-  JetMC15::JetMC15(const double ptcut,
-                   const double etamax,
-                   const double minmass,
-                   const bool doJVTCut):
+  Jet::Jet(const double ptcut,
+           const double etamax,
+           const double minmass,
+           const bool doJVTCut):
     m_ptcut(ptcut),
     m_etamax(etamax),
     m_masscut(minmass),
@@ -24,20 +24,20 @@ namespace top {
   }
 
   // This version of the constructor always perform JVT cut 
-  JetMC15::JetMC15(const double ptcut,
-                   const double etamax) : JetMC15::JetMC15(ptcut, etamax, -1.0, true) {}
+  Jet::Jet(const double ptcut,
+           const double etamax) : Jet::Jet(ptcut, etamax, -1.0, true) {}
 
   // DEPRECIATED - fwdJetSel string now defunct, keeping blank string input for backwards compatibility
-  JetMC15::JetMC15(const double ptcut,
-                   const double etamax,
-                   const std::string) : JetMC15::JetMC15(ptcut, etamax, -1.0, true) {}
+  Jet::Jet(const double ptcut,
+           const double etamax,
+           const std::string) : Jet::Jet(ptcut, etamax, -1.0, true) {}
 
   // DEPRECATED - only kept for backward compatibility
-  JetMC15::JetMC15(const double ptcut,
-                   const double etamax,
-                   const double) : JetMC15::JetMC15(ptcut, etamax) {}
+  Jet::Jet(const double ptcut,
+           const double etamax,
+           const double) : Jet::Jet(ptcut, etamax) {}
 
-  bool JetMC15::passSelection(const xAOD::Jet& jet) {
+  bool Jet::passSelection(const xAOD::Jet& jet) {
     if (m_applyJVTCut) {
       jet.auxdecor<char>("passJVT") = (m_jvt_tool->passesJvtCut(jet) ? 1 : 0);
     }
@@ -57,8 +57,8 @@ namespace top {
     return true;
   }
 
-  void JetMC15::print(std::ostream& os) const {
-    os << "JetMC15\n"
+  void Jet::print(std::ostream& os) const {
+    os << "Jet\n"
        << "    * pT > " << m_ptcut << "\n"
        << "    * |eta| < " << m_etamax << "\n";
     if (m_appyMassCut)
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/MuonMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Muon.cxx
similarity index 70%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/MuonMC15.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Muon.cxx
index a49bbcf70092cc5ca9387d6fa6c0fb573d9d38ad..49daf7116683e4731dd9dd2028934ed80ed1509d 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/MuonMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Muon.cxx
@@ -2,7 +2,7 @@
    Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
  */
 
-#include "TopObjectSelectionTools/MuonMC15.h"
+#include "TopObjectSelectionTools/Muon.h"
 
 #include "TopEvent/EventTools.h"
 
@@ -10,9 +10,9 @@
 using namespace TopObjectSelectionTools;
 
 namespace top {
-  MuonMC15::MuonMC15(const double ptcut, IsolationBase* isolation,
-                     const double d0SigCut, const double delta_z0_sintheta,
-                     const bool applyTTVACut) :
+  Muon::Muon(const double ptcut, IsolationBase* isolation,
+             const double d0SigCut, const double delta_z0_sintheta,
+             const bool applyTTVACut) :
     m_ptcut(ptcut),
     m_d0SigCut(d0SigCut),
     m_delta_z0(delta_z0_sintheta),
@@ -24,16 +24,15 @@ namespace top {
     top::check(m_muonSelectionToolLoose.retrieve(), "Failed to retrieve muonSelectionToolLoose");
   }
 
-  MuonMC15::MuonMC15(const double ptcut, IsolationBase* isolation, const bool applyTTVACut)
-    : MuonMC15::MuonMC15(ptcut, isolation, 3.0, 0.5, applyTTVACut) {}
+  Muon::Muon(const double ptcut, IsolationBase* isolation, const bool applyTTVACut)
+    : Muon::Muon(ptcut, isolation, 3.0, 0.5, applyTTVACut) {}
 
-  MuonMC15::MuonMC15(const double ptcut, IsolationBase* isolation)
-    : MuonMC15::MuonMC15(ptcut, isolation, 3.0, 0.5, true) {}
+  Muon::Muon(const double ptcut, IsolationBase* isolation)
+    : Muon::Muon(ptcut, isolation, 3.0, 0.5, true) {}
 
-  bool MuonMC15::passSelection(const xAOD::Muon& mu) const {
+  bool Muon::passSelection(const xAOD::Muon& mu) const {
     if (mu.pt() < m_ptcut) return false;
 
-    ///-- https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MCPAnalysisGuidelinesMC15 --///
     if (!m_muonSelectionTool->accept(mu)) return false;
 
     //isolation, if m_isolation != nullptr
@@ -47,10 +46,9 @@ namespace top {
     return true;
   }
 
-  bool MuonMC15::passSelectionLoose(const xAOD::Muon& mu) const {
+  bool Muon::passSelectionLoose(const xAOD::Muon& mu) const {
     if (mu.pt() < m_ptcut) return false;
 
-    ///-- https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MCPAnalysisGuidelinesMC15 --///
     if (!m_muonSelectionToolLoose->accept(mu)) return false;
 
     //isolation, if m_isolation != nullptr
@@ -64,7 +62,7 @@ namespace top {
     return true;
   }
 
-  bool MuonMC15::passTTVACuts(const xAOD::Muon& mu) const {
+  bool Muon::passTTVACuts(const xAOD::Muon& mu) const {
     // TTVA:
     // see https://twiki.cern.ch/twiki/bin/view/AtlasProtected/TrackingCPEOYE2015#Track_to_Vertex_Association
     if (!mu.isAvailable<float>("d0sig")) {
@@ -88,8 +86,8 @@ namespace top {
     return true;
   }
 
-  void MuonMC15::print(std::ostream& os) const {
-    os << "MuonMC15\n"
+  void Muon::print(std::ostream& os) const {
+    os << "Muon\n"
        << "    * pT > " << m_ptcut << "\n"
        << "    * Everything else from muon tool - fill this in?\n";
 
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/PhotonMC16.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Photon.cxx
similarity index 84%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/PhotonMC16.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Photon.cxx
index abcc20c06ebf10db1135abbf82051434b402dd07..5e6f5aa1c65246c786a260a9318a3a7e2e9f50a7 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/PhotonMC16.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Photon.cxx
@@ -2,7 +2,7 @@
    Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
  */
 
-#include "TopObjectSelectionTools/PhotonMC16.h"
+#include "TopObjectSelectionTools/Photon.h"
 
 // Include what you use!
 #include <map>
@@ -14,7 +14,7 @@
 using namespace TopObjectSelectionTools;
 
 namespace top {
-  PhotonMC16::PhotonMC16(double ptcut, double etamax, IsolationBase* isolation) :
+  Photon::Photon(double ptcut, double etamax, IsolationBase* isolation) :
     m_ptcut(ptcut),
     m_etamax(etamax),
     m_photon_selection("DFCommonPhotonsIsEMTight"),
@@ -22,10 +22,10 @@ namespace top {
     m_isolation(isolation) {
   }
 
-  PhotonMC16::PhotonMC16(double ptcut, double etamax,
-                         const std::string& tightID,
-                         const std::string& looseID,
-                         IsolationBase* isolation) :
+  Photon::Photon(double ptcut, double etamax,
+                 const std::string& tightID,
+                 const std::string& looseID,
+                 IsolationBase* isolation) :
     m_ptcut(ptcut),
     m_etamax(etamax),
     m_photon_selection(tightID),
@@ -44,7 +44,7 @@ namespace top {
     top::check(m_deadHVTool.retrieve(), "Failed to setup Egamma DeadHVCellRemovalTool");
   }
 
-  bool PhotonMC16::passSelection(const xAOD::Photon& ph) const {
+  bool Photon::passSelection(const xAOD::Photon& ph) const {
     if (!passSelectionNoIsolation(ph, m_photon_selection)) return false;
 
     if (m_isolation && !m_isolation->passSelection(ph)) return false;
@@ -52,7 +52,7 @@ namespace top {
     return true;
   }
 
-  bool PhotonMC16::passSelectionLoose(const xAOD::Photon& ph) const {
+  bool Photon::passSelectionLoose(const xAOD::Photon& ph) const {
     if (!passSelectionNoIsolation(ph, m_loose_photon_selection)) return false;
 
     if (m_isolation && !m_isolation->passSelectionLoose(ph)) return false;
@@ -60,7 +60,7 @@ namespace top {
     return true;
   }
 
-  bool PhotonMC16::passSelectionNoIsolation(const xAOD::Photon& ph,
+  bool Photon::passSelectionNoIsolation(const xAOD::Photon& ph,
                                             const std::string& photon_selection) const {
     // Photon author : AuthorPhoton/AuthorAmbiguous.
     // Also, for special-case recovery of soft photons:
@@ -100,8 +100,8 @@ namespace top {
     return true;
   }
 
-  void PhotonMC16::print(std::ostream& os) const {
-    os << "PhotonMC16\n";
+  void Photon::print(std::ostream& os) const {
+    os << "Photon\n";
     os << "    * pT > " << m_ptcut << "\n";
     os << "    * |eta| < " << m_etamax << "\n";
     os << "    * Photon PID: " << m_photon_selection << "\n";
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/SoftMuonMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/SoftMuon.cxx
similarity index 61%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/SoftMuonMC15.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/SoftMuon.cxx
index c91059ac69f461d8d30672188e10d2f2924dfd40..d77725b8e2d58e672a0ddceb83bc5a338c37fe91 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/SoftMuonMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/SoftMuon.cxx
@@ -2,28 +2,27 @@
    Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
  */
 
-#include "TopObjectSelectionTools/SoftMuonMC15.h"
+#include "TopObjectSelectionTools/SoftMuon.h"
 
 #include "TopEvent/EventTools.h"
 
 namespace top {
-  SoftMuonMC15::SoftMuonMC15(const double ptcut) :
+  SoftMuon::SoftMuon(const double ptcut) :
     m_ptcut(ptcut),
     m_softmuonSelectionTool("SoftMuonSelectionTool") {
     top::check(m_softmuonSelectionTool.retrieve(), "Failed to retrieve softmuonSelectionTool");
   }
 
-  bool SoftMuonMC15::passSelection(const xAOD::Muon& mu) const {
+  bool SoftMuon::passSelection(const xAOD::Muon& mu) const {
     if (mu.pt() < m_ptcut) return false;
 
-    ///-- https://twiki.cern.ch/twiki/bin/view/AtlasProtected/MCPAnalysisGuidelinesMC15 --///
     if (!m_softmuonSelectionTool->accept(mu)) return false;
 
     return true;
   }
 
-  void SoftMuonMC15::print(std::ostream& os) const {
-    os << "SoftMuonMC15\n"
+  void SoftMuon::print(std::ostream& os) const {
+    os << "SoftMuon\n"
        << "    * pT > " << m_ptcut << "\n"
        << "    * Everything else from muon tool - fill this in?\n";
   }
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TauMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Tau.cxx
similarity index 82%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TauMC15.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Tau.cxx
index c169e6a3243e527d959cb3ba636ede935a85aa75..df73cbaad3eca0445c7565bf468d997845a4079f 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TauMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/Tau.cxx
@@ -2,11 +2,11 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#include "TopObjectSelectionTools/TauMC15.h"
+#include "TopObjectSelectionTools/Tau.h"
 #include "TopEvent/EventTools.h"
 
 namespace top {
-  TauMC15::TauMC15() : m_tauSelection("TauAnalysisTools::TauSelectionTool"),
+  Tau::Tau() : m_tauSelection("TauAnalysisTools::TauSelectionTool"),
     m_tauSelectionLoose
       ("TauAnalysisTools::TauSelectionToolLoose") {
     top::check(m_tauSelection.retrieve(),
@@ -15,7 +15,7 @@ namespace top {
                "Failed to retrieve loose tau selection tool");
   }
 
-  bool TauMC15::passSelection(const xAOD::TauJet& tau) const {
+  bool Tau::passSelection(const xAOD::TauJet& tau) const {
     // Get the WP related decisions from TauSelectionTool
 
     // HIGG8D1 derivations (and possibly others) skim away
@@ -31,7 +31,7 @@ namespace top {
     }
   }
 
-  bool TauMC15::passSelectionLoose(const xAOD::TauJet& tau) const {
+  bool Tau::passSelectionLoose(const xAOD::TauJet& tau) const {
     // get the WP related decisions from TauSelectionTool
     // For the reasoning behind try/catch see above...
     try {
@@ -41,8 +41,8 @@ namespace top {
     }
   }
 
-  void TauMC15::print(std::ostream& os) const {
-    os << "TauMC15\n";
+  void Tau::print(std::ostream& os) const {
+    os << "Tau\n";
     os << "    * Taus are now selected using the TauSelectionTool" << "\n";
     os << "    * Either you have supplied a tau configuration file (expert)\n";
     os << "      or set pT, JetIDWP and EleOLR options in your top-xaod\n";
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TrackJetMC15.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TrackJet.cxx
similarity index 64%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TrackJetMC15.cxx
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TrackJet.cxx
index 54ea748e2d6c8dce68b2c5b2231128e3a553a1a9..594da95d663e375ee6efd6b9ccfac50d77bee700 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TrackJetMC15.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/Root/TrackJet.cxx
@@ -2,18 +2,18 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#include "TopObjectSelectionTools/TrackJetMC15.h"
+#include "TopObjectSelectionTools/TrackJet.h"
 
 namespace top {
-  TrackJetMC15::TrackJetMC15(const double ptcut, const double etamax) :
+  TrackJet::TrackJet(const double ptcut, const double etamax) :
     m_ptcut(ptcut),
     m_etamax(etamax) {
   }
 
-  TrackJetMC15::~TrackJetMC15() {
+  TrackJet::~TrackJet() {
   }
 
-  bool TrackJetMC15::passSelection(const xAOD::Jet& jet) {
+  bool TrackJet::passSelection(const xAOD::Jet& jet) {
     if (jet.pt() < m_ptcut) return false;
 
     if (std::fabs(jet.eta()) > m_etamax) return false;
@@ -24,8 +24,8 @@ namespace top {
     return true;
   }
 
-  void TrackJetMC15::print(std::ostream& os) const {
-    os << "TrackJetMC15\n"
+  void TrackJet::print(std::ostream& os) const {
+    os << "TrackJet\n"
        << "    * pT > " << m_ptcut << "\n"
        << "    * |eta| < " << m_etamax << "\n"
        << "    * >= 2 tracks \n";
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/AntiMuonMC15.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/AntiMuon.h
similarity index 85%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/AntiMuonMC15.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/AntiMuon.h
index f2649f72dc3f12941d7bf296d4ea0c4585434b18..1658117b29315018226e176fc5d4c8a3b01bfa5b 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/AntiMuonMC15.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/AntiMuon.h
@@ -2,8 +2,8 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef ANTIMUONMC15_H_
-#define ANTIMUONMC15_H_
+#ifndef ANTIMUON_H_
+#define ANTIMUON_H_
 
 #include "TopObjectSelectionTools/MuonSelectionBase.h"
 #include "TopObjectSelectionTools/IsolationTools.h"
@@ -13,9 +13,9 @@
 
 namespace top {
 /**
- * @brief Select muons based on some early MC15 suggestions.
+ * @brief Select muons based on some early suggestions.
  */
-  class AntiMuonMC15: public MuonSelectionBase {
+  class AntiMuon: public MuonSelectionBase {
   public:
     /**
      * @brief Construct the tool to select good muons.
@@ -24,10 +24,10 @@ namespace top {
      * @param isolation The isolation the user wants to apply.  Don't want any
      * isolation to be applied?  Then leave this as a nullptr.
      */
-    AntiMuonMC15(const double ptcut, AntiMuonIsolation* isolation);
+    AntiMuon(const double ptcut, AntiMuonIsolation* isolation);
 
     ///Does nothing.
-    virtual ~AntiMuonMC15() {}
+    virtual ~AntiMuon() {}
 
     /**
      * @brief Implements the logic to select good muons.
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/ElectronLikelihoodMC15.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/ElectronLikelihood.h
similarity index 79%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/ElectronLikelihoodMC15.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/ElectronLikelihood.h
index 83c932540c086226ea0e54bb17320d9a914fd4b8..4589908eff9671e0992384f807f62a37d36a70db 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/ElectronLikelihoodMC15.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/ElectronLikelihood.h
@@ -2,8 +2,8 @@
    Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef ELECTRONLIKELIHOODMC15_H_
-#define ELECTRONLIKELIHOODMC15_H_
+#ifndef TOPOBJECTSELECTIONTOOLSELECTRONLIKELIHOOD_H_
+#define TOPOBJECTSELECTIONTOOLSELECTRONLIKELIHOOD_H_
 
 #include "TopObjectSelectionTools/ElectronSelectionBase.h"
 #include "TopObjectSelectionTools/IsolationTools.h"
@@ -15,7 +15,7 @@ namespace top {
   /**
    * @brief To select electrons based on the "likelihood" definition.
    */
-  class ElectronLikelihoodMC15: public top::ElectronSelectionBase {
+  class ElectronLikelihood: public top::ElectronSelectionBase {
   public:
     /**
      * @brief Cut on likelihood electrons
@@ -33,20 +33,20 @@ namespace top {
      * @param applyTTVACut Whether to apply cuts on d0 and z0
      * @param applyChargeIDCut Whether to apply charge identification selector tool
      */
-    ElectronLikelihoodMC15(const double ptcut, const bool vetoCrack, const std::string& operatingPoint,
-                           const std::string& operatingPointLoose, StandardIsolation* isolation,
-                           const bool applyChargeIDCut);
+    ElectronLikelihood(const double ptcut, const bool vetoCrack, const std::string& operatingPoint,
+                       const std::string& operatingPointLoose, StandardIsolation* isolation,
+                       const bool applyChargeIDCut);
 
-    ElectronLikelihoodMC15(const double ptcut, const bool vetoCrack, const std::string& operatingPoint,
-                           const std::string& operatingPointLoose, StandardIsolation* isolation,
-                           const bool applyTTVACut, const bool applyChargeIDCut);
+    ElectronLikelihood(const double ptcut, const bool vetoCrack, const std::string& operatingPoint,
+                       const std::string& operatingPointLoose, StandardIsolation* isolation,
+                       const bool applyTTVACut, const bool applyChargeIDCut);
 
-    ElectronLikelihoodMC15(const double ptcut, const bool vetoCrack, const std::string& operatingPoint,
-                           const std::string& operatingPointLoose, StandardIsolation* isolation,
-                           const double d0SigCut, const double delta_z0, const bool applyTTVACut,
-                           const bool applyChargeIDCut);
+    ElectronLikelihood(const double ptcut, const bool vetoCrack, const std::string& operatingPoint,
+                       const std::string& operatingPointLoose, StandardIsolation* isolation,
+                       const double d0SigCut, const double delta_z0, const bool applyTTVACut,
+                       const bool applyChargeIDCut);
 
-    virtual ~ElectronLikelihoodMC15() {}
+    virtual ~ElectronLikelihood() {}
     /**
      * @brief Selection for the main analysis (i.e. tight object definitions).
      *
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/JetMC15.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Jet.h
similarity index 77%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/JetMC15.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Jet.h
index d54034f698472695417b910784a4a1928f8b5ae4..f1ea5cedc88c17ab9e48d06e6e6c371e1d1b1c03 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/JetMC15.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Jet.h
@@ -2,8 +2,8 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef JETMC15_H_
-#define JETMC15_H_
+#ifndef TOPOBJECTSELECTIONTOOLSJET_H_
+#define TOPOBJECTSELECTIONTOOLSJET_H_
 
 #include "TopObjectSelectionTools/JetSelectionBase.h"
 #include "JetAnalysisInterfaces/IJetJvtEfficiency.h"
@@ -17,30 +17,30 @@ namespace top {
  * @brief A class that performs object cuts on Jets (of any size!).  At the
  * moment it includes a cut on pT, eta and JVT.
  */
-  class JetMC15: public JetSelectionBase {
+  class Jet: public JetSelectionBase {
   public:
     /**
-     * @brief A tool to select some jets for MC15 based on the pT and eta cuts.
+     * @brief A tool to select some jets on the pT and eta cuts.
      *
      * @param ptcut The minimum pT to accept good jets.
      * @param etamax The maximum eta cut.
      * @param minmass The minimum mass to accept good jets.
      * @param doJVTCut To perform JVT cut - should be false for small-R jets
      */
-    JetMC15(const double ptcut, const double etamax, const double minmass, const bool doJVTCut);
+    Jet(const double ptcut, const double etamax, const double minmass, const bool doJVTCut);
 
     /**
-     * @brief A tool to select some jets for MC15 based on the pT and eta cuts.
+     * @brief A tool to select some jets based on the pT and eta cuts.
      *
      * This version of the constructor always perform JVT cut
      *
      * @param ptcut The minimum pT to accept good jets.
      * @param etamax The maximum eta cut.
      */
-    JetMC15(const double ptcut, const double etamax);
+    Jet(const double ptcut, const double etamax);
 
     /**
-     * @brief A tool to select some jets for MC15 based on the pT and eta cuts.
+     * @brief A tool to select some jets based on the pT and eta cuts.
      *
      * DEPRECIATED - Only kept for backwards compatibility, to stop external extensions from crashing, please use above forms
      *
@@ -48,10 +48,10 @@ namespace top {
      * @param etamax The maximum eta cut.
      * @param fwdJetSel Scenario for treating forward jets.
      */
-    JetMC15(const double ptcut, const double etamax, const std::string);
+    Jet(const double ptcut, const double etamax, const std::string);
 
     /**
-     * @brief A tool to select some jets for MC15 based on the pT and eta cuts.
+     * @brief A tool to select some jets based on the pT and eta cuts.
      *
      * DEPRECATED - only kept for backward compatibility - no need to specify any jvt cut, please use the above function
      *instead.
@@ -60,10 +60,10 @@ namespace top {
      * @param etamax The maximum eta cut.
      * @param jvtmin The minimum cut on the jet vertex fraction (no longer used)
      */
-    JetMC15(const double ptcut, const double etamax, const double);
+    Jet(const double ptcut, const double etamax, const double);
 
     // Does nothing.
-    virtual ~JetMC15() {}
+    virtual ~Jet() {}
 
     /**
      * @brief Implements the logic to select jets based on pT and eta.
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/MuonMC15.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Muon.h
similarity index 78%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/MuonMC15.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Muon.h
index dc8caf90ce182eba4ab412f9ef2ed9f2eebd5cb8..b339c335f40bbd47d5ea9f14bdf0aad8d4895607 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/MuonMC15.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Muon.h
@@ -2,8 +2,8 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef MUONMC15_H_
-#define MUONMC15_H_
+#ifndef TOPOBJECTSELECTIONTOOLSMUON_H_
+#define TOPOBJECTSELECTIONTOOLSMUON_H_
 
 #include "TopObjectSelectionTools/MuonSelectionBase.h"
 #include "TopObjectSelectionTools/IsolationTools.h"
@@ -13,9 +13,9 @@
 
 namespace top {
 /**
- * @brief Select muons based on some early MC15 suggestions.
+ * @brief Select muons based on some early suggestions.
  */
-  class MuonMC15: public MuonSelectionBase {
+  class Muon: public MuonSelectionBase {
   public:
     /**
      * @brief Construct the tool to select good muons.
@@ -27,21 +27,21 @@ namespace top {
      * @param delta_z0 The maximum |delta z0 sin(theta)| cut
      * @param applyTTVACut Whether to apply cuts on d0 and z0
      */
-    MuonMC15(const double ptcut,
-             IsolationBase* isolation);
+    Muon(const double ptcut,
+         IsolationBase* isolation);
 
-    MuonMC15(const double ptcut,
-             IsolationBase* isolation,
-             const bool applyTTVACut);
+    Muon(const double ptcut,
+         IsolationBase* isolation,
+         const bool applyTTVACut);
 
-    MuonMC15(const double ptcut,
-             IsolationBase* isolation,
-             const double d0SigCut,
-             const double delta_z0,
-             const bool applyTTVACut = true);
+    Muon(const double ptcut,
+         IsolationBase* isolation,
+         const double d0SigCut,
+         const double delta_z0,
+         const bool applyTTVACut = true);
 
     // Does nothing.
-    virtual ~MuonMC15() {}
+    virtual ~Muon() {}
 
     /**
      * @brief Implements the logic to select good muons.
@@ -89,4 +89,4 @@ namespace top {
   };
 }  // namespace top
 
-#endif  // MUONMC15_H_
+#endif  // TOPOBJECTSELECTIONTOOLSMUON_H_
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/PhotonMC16.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Photon.h
similarity index 87%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/PhotonMC16.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Photon.h
index ac964ca39945a5d6ab9a4615daae3a100b6358e4..c072cbd38a44e339fc4501b36004a44ee9db7670 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/PhotonMC16.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Photon.h
@@ -2,8 +2,8 @@
    Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef TOPOBJECTSELECTIONTOOLS_PHOTONMC16_H_
-#define TOPOBJECTSELECTIONTOOLS_PHOTONMC16_H_
+#ifndef TOPOBJECTSELECTIONTOOLS_PHOTON_H_
+#define TOPOBJECTSELECTIONTOOLS_PHOTON_H_
 
 #include <memory>
 #include <string>
@@ -20,7 +20,7 @@ namespace top {
  *        For Release 21 specific cleaning
  */
 
-  class PhotonMC16: public top::PhotonSelectionBase {
+  class Photon: public top::PhotonSelectionBase {
   public:
     /**
      * @brief Class to help select good photons.
@@ -30,7 +30,7 @@ namespace top {
      * @param isolation nullptr for un-isolated, or a new "isolation object" to
      * apply isolation cuts
      */
-    PhotonMC16(double ptcut, double etamax, IsolationBase* isolation);
+    Photon(double ptcut, double etamax, IsolationBase* isolation);
 
     /**
      * @brief Class to help select good photons.
@@ -42,10 +42,10 @@ namespace top {
      * @param isolation nullptr for un-isolated, or a new "isolation object" to
      * apply isolation cuts
      */
-    PhotonMC16(double ptcut, double etamax,
-               const std::string& tightID,
-               const std::string& looseID,
-               IsolationBase* isolation);
+    Photon(double ptcut, double etamax,
+           const std::string& tightID,
+           const std::string& looseID,
+           IsolationBase* isolation);
 
     /**
      * @brief The cuts to select good photons for your analysis should be
@@ -107,4 +107,4 @@ namespace top {
     asg::AnaToolHandle<IAsgDeadHVCellRemovalTool> m_deadHVTool;
   };
 }  // namespace top
-#endif  // TOPOBJECTSELECTIONTOOLS_PHOTONMC16_H_
+#endif  // TOPOBJECTSELECTIONTOOLS_PHOTON_H_
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/SoftMuonMC15.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/SoftMuon.h
similarity index 79%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/SoftMuonMC15.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/SoftMuon.h
index 7aca4ee0de2775030e4833fa4d1b88e6c58368c3..5705a9fe5b37e62d35de4466345edb6937c92570 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/SoftMuonMC15.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/SoftMuon.h
@@ -2,8 +2,8 @@
    Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef SOFTMUONMC15_H_
-#define SOFTMUONMC15_H_
+#ifndef TOPOBJECTSELECTIONTOOLS_SOFTMUON_H_
+#define TOPOBJECTSELECTIONTOOLS_SOFTMUON_H_
 
 #include "TopObjectSelectionTools/SoftMuonSelectionBase.h"
 #include "TopObjectSelectionTools/IsolationTools.h"
@@ -13,9 +13,9 @@
 
 namespace top {
 /**
- * @brief Select muons based on some early MC15 suggestions.
+ * @brief Select muons based on some early suggestions.
  */
-  class SoftMuonMC15: public SoftMuonSelectionBase {
+  class SoftMuon: public SoftMuonSelectionBase {
   public:
     /**
      * @brief Construct the tool to select good muons.
@@ -24,10 +24,10 @@ namespace top {
      * @param isolation The isolation the user wants to apply.  Don't want any
      * isolation to be applied?  Then leave this as a nullptr.
      */
-    SoftMuonMC15(const double ptcut);
+    SoftMuon(const double ptcut);
 
     // Does nothing.
-    virtual ~SoftMuonMC15() {}
+    virtual ~SoftMuon() {}
 
     /**
      * @brief Implements the logic to select good muons.
@@ -48,4 +48,4 @@ namespace top {
   };
 }  // namespace top
 
-#endif  // SOFTMUONMC15_H_
+#endif  // TOPOBJECTSELECTIONTOOLS_SOFTMUON_H_
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TauMC15.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Tau.h
similarity index 86%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TauMC15.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Tau.h
index 455614d428896329439a8d43f3e29ec183110212..9a0c5869457b29277218659b4370996a791efa75 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TauMC15.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/Tau.h
@@ -2,8 +2,8 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef TOPOBJECTSELECTIONTOOLS_TAUMC15_H_
-#define TOPOBJECTSELECTIONTOOLS_TAUMC15_H_
+#ifndef TOPOBJECTSELECTIONTOOLS_TAU_H_
+#define TOPOBJECTSELECTIONTOOLS_TAU_H_
 
 #include <memory>
 
@@ -16,11 +16,11 @@ namespace top {
 /**
  * @brief To select taus based on BoostedDecisionTree definition.
  */
-  class TauMC15: public top::TauSelectionBase {
+  class Tau: public top::TauSelectionBase {
   public:
-    TauMC15();
+    Tau();
 
-    virtual ~TauMC15() {}
+    virtual ~Tau() {}
     /**
      * @brief Selection for the main analysis (i.e. tight object definitions).
      *
@@ -53,4 +53,4 @@ namespace top {
   };
 }  // namespace top
 
-#endif  // TOPOBJECTSELECTIONTOOLS_TAUMC15_H_
+#endif  // TOPOBJECTSELECTIONTOOLS_TAU_H_
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TrackJetMC15.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TrackJet.h
similarity index 62%
rename from PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TrackJetMC15.h
rename to PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TrackJet.h
index 08c3e78514b90c9310a2e1f34647ce24d68e50eb..ebc5441f2cd90da71892e3c6df9a44f816ded396 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TrackJetMC15.h
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/TopObjectSelectionTools/TrackJet.h
@@ -2,16 +2,16 @@
    Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
  */
 
-#ifndef TRACKJETMC15_H_
-#define TRACKJETMC15_H_
+#ifndef TOPOBJECTSELECTIONTOOLS_TRACKJET_H_
+#define TOPOBJECTSELECTIONTOOLS_TRACKJET_H_
 
 #include "TopObjectSelectionTools/JetSelectionBase.h"
 
 namespace top {
-  class TrackJetMC15: public top::JetSelectionBase {
+  class TrackJet: public top::JetSelectionBase {
   public:
-    TrackJetMC15(const double ptcut, const double etamax);
-    ~TrackJetMC15();
+    TrackJet(const double ptcut, const double etamax);
+    ~TrackJet();
     virtual bool passSelection(const xAOD::Jet& jet) override;
     virtual void print(std::ostream& os) const override;
   private:
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/share/mainpage.h b/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/share/mainpage.h
deleted file mode 100644
index f3f605a05bce195f7c1e0166e8f3d59e8239bafd..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/TopPhys/xAOD/TopObjectSelectionTools/share/mainpage.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * @page tostpage TopObjectSelectionTools
- *
- * @section in Introduction
- *
- * The idea of this package is to have a few pre-defined object selections but
- * also the ability to add and modify them until you're happy.
- *
- * The first stop to configure your selection would be to take a look at
- * top::TopObjectSelection.  Where you can see that you can supply it with
- * various classes (even write your own) and options to change the object
- * selection.
- *
- * An example of a selection might go something a bit like this:
- *
- * @code
- * top::TopObjectSelection* objectSelection = new top::TopObjectSelection(topConfig->objectSelectionName());
- * top::check(objectSelection->setProperty( "config" , topConfig ) , "Failed to setProperty for top::TopObjectSelection" );
- * top::check(objectSelection->initialize() , "Failed to initialize top::TopObjectSelection" );
- *
- * objectSelection->electronSelection(new top::ElectronLikelihoodMC15(25000., true, LikeEnum::Tight, LikeEnum::Medium, new top::ApproxPTVarCone(0.05, 0.)));
- * objectSelection->muonSelection(new top::MuonMC15(25000., 2.5, new top::StandardIsolation())); //new top::ApproxPTVarCone(0.05, 0.)));
- * objectSelection->jetSelection(new top::JetMC15(25000., 2.5, 0.941)); // new jet vertex tagger cut
- *
- * objectSelection->overlapRemovalPostSelection(new top::OverlapRemovalASG());
- * @endcode
- *
- * If you don't want isolation then just specify nullptr instead.
- *
- * For DC14 we currently have:
- * - top::ElectronLikelihoodMC15: A cut on likelihood electrons
- * - top::ElectronCutBasedMC15: A cut based electron selection
- * - top::MuonMC15: Added the muon tool to select muons
- * - top::JetMC15: Cut on the jet pT and eta.  Configure those via constructor.
- * - top::OverlapRemovalIndices: A first guess at something a bit like 'standard' top overlap removal used in Run-I
- * - top::OverlapRemovalASG: Using the ASG overlap removal tool
- *
- * For isolation can you can your pick from
- *  - top::AbsoluteIsolationDC14: Only in DC14 derivations
- *  - top::RelativePTVarCone: For cutting on pTVarCone as a fraction of the charged lepton pT. Only in DC14 derivations.
- *  - top::ApproxPTVarCone:  While we wait for the real thing in DC14 ptvarcone, Danilo implemented this.
- *  - top::StandardIsolation: Standard et-cone and pt-cone for electrons. Like run-I, using ElectronIsolationSelectionTool.
- *
- * If you want to modify the cuts you can edit one of those classes and make
- * some changes, or you can create a new class following those as a template.
- * You'll need to  inherit from:
- * - top::ElectronSelectionBase
- * - top::MuonSelectionBase
- * - top::JetSelectionBase
- * - top::OverlapRemovalBase
- * - top::IsolationBase
- *
- * That way the compiler can check that you're using the correct objects (i.e.
- * that the electron tool really only takes electrons as an argument).  Using
- * the compiler to spot this kind of error is super useful, no?
- */
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopParticleLevel/Root/ParticleLevelLoader.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopParticleLevel/Root/ParticleLevelLoader.cxx
index 193e58ab0f465e6bd371812919a351d3e70ae0bd..c2630a39e5cd827a33852b66d17e344146df68ca 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopParticleLevel/Root/ParticleLevelLoader.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopParticleLevel/Root/ParticleLevelLoader.cxx
@@ -202,14 +202,14 @@ namespace top {
                                                                                                            m_config));
             top::check(m_particleLevelVarRCJetObjectLoader[name]->setProperty("VarRCjets",
                                                                               true),
-                       "Failed to set VarRCjets property of VarRCJetMC15");
+                       "Failed to set VarRCjets property of VarRCJet");
             top::check(m_particleLevelVarRCJetObjectLoader[name]->setProperty("VarRCjets_rho",
                                                                               rho),
-                       "Failed to set VarRCjets rho property of VarRCJetMC15");
+                       "Failed to set VarRCjets rho property of VarRCJet");
             top::check(m_particleLevelVarRCJetObjectLoader[name]->setProperty("VarRCjets_mass_scale",
                                                                               mass_scale),
-                       "Failed to set VarRCjets mass scale property of VarRCJetMC15");
-            top::check(m_particleLevelVarRCJetObjectLoader[name]->initialize(), "Failed to initialize VarRCJetMC15");
+                       "Failed to set VarRCjets mass scale property of VarRCJet");
+            top::check(m_particleLevelVarRCJetObjectLoader[name]->initialize(), "Failed to initialize VarRCJet");
           } // end loop over mass scale parameters (e.g., top mass, w mass, etc.)
         } // end loop over mass scale multiplies (e.g., 1.,2.,etc.)
       }
@@ -763,7 +763,7 @@ namespace top {
           std::replace(rho.begin(), rho.end(), '.', '_');
           std::string name = rho + mass_scale;
           top::check(m_particleLevelVarRCJetObjectLoader[name]->execute(
-                       plEvent), "Failed to execute RCJetMC15 container");
+                       plEvent), "Failed to execute RCJet container");
 
           // Get the name of the container of re-clustered jets in TStore
           std::string varRCJetContainerName = m_particleLevelVarRCJetObjectLoader[name]->rcjetContainerName();
diff --git a/Projects/AnalysisBase/externals.txt b/Projects/AnalysisBase/externals.txt
index a5607590f11652040e0c40c452f7253024c0dd11..52d1da34b5f3eddade7f3780768d907fbbab564c 100644
--- a/Projects/AnalysisBase/externals.txt
+++ b/Projects/AnalysisBase/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AnalysisBaseExternalsVersion = 2.0.121
+AnalysisBaseExternalsVersion = 2.0.122
diff --git a/Projects/AnalysisBase/version.txt b/Projects/AnalysisBase/version.txt
index 7e45ba40f398a5857b5f97d89defbf0029f4ee44..0995335cd21db8be17cdfc10e9a3b0a67a2d9848 100644
--- a/Projects/AnalysisBase/version.txt
+++ b/Projects/AnalysisBase/version.txt
@@ -1 +1 @@
-22.2.51
+22.2.52
diff --git a/Projects/AthAnalysis/build_externals.sh b/Projects/AthAnalysis/build_externals.sh
index fc75f7c6529a19ce40613e7d4ea4254ee9ad3ee4..339dad907a908a3615a73bc3089d41f9d3ffb10e 100755
--- a/Projects/AthAnalysis/build_externals.sh
+++ b/Projects/AthAnalysis/build_externals.sh
@@ -10,7 +10,7 @@ ATLAS_PROJECT_DIR=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
 ATLAS_EXT_PROJECT_NAME="AthAnalysisExternals"
 ATLAS_BUILDTYPE="RelWithDebInfo"
 ATLAS_EXTRA_CMAKE_ARGS=(-DLCG_VERSION_NUMBER=101
-                        -DLCG_VERSION_POSTFIX="_ATLAS_4"
+                        -DLCG_VERSION_POSTFIX="_ATLAS_6"
                         -DATLAS_GAUDI_TAG="v36r2.000"
                         -DATLAS_COOL_TAG="COOL_3_3_9")
 ATLAS_EXTRA_MAKE_ARGS=()
diff --git a/Projects/AthAnalysis/externals.txt b/Projects/AthAnalysis/externals.txt
index c448a1cab7f2a6090c12a11538e6eff44d3bd798..91f3b32f02f507aad1ec7b2752f75d7676fd0130 100644
--- a/Projects/AthAnalysis/externals.txt
+++ b/Projects/AthAnalysis/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AthAnalysisExternalsVersion = 2.0.121
+AthAnalysisExternalsVersion = 2.0.122
diff --git a/Projects/AthAnalysis/version.txt b/Projects/AthAnalysis/version.txt
index 7e45ba40f398a5857b5f97d89defbf0029f4ee44..0995335cd21db8be17cdfc10e9a3b0a67a2d9848 100644
--- a/Projects/AthAnalysis/version.txt
+++ b/Projects/AthAnalysis/version.txt
@@ -1 +1 @@
-22.2.51
+22.2.52
diff --git a/Projects/AthDataQuality/CMakeLists.txt b/Projects/AthDataQuality/CMakeLists.txt
index 0bdada9ccd3b8f622872932929c5b0aacf2cfc4e..1ae81b60b92345d582145eb556e6e9789c94992d 100644
--- a/Projects/AthDataQuality/CMakeLists.txt
+++ b/Projects/AthDataQuality/CMakeLists.txt
@@ -18,7 +18,7 @@ set( TDAQ-COMMON_ATROOT
 find_package( AtlasCMake REQUIRED )
 
 # Build the project against LCG:
-set( LCG_VERSION_POSTFIX "_ATLAS_4"
+set( LCG_VERSION_POSTFIX "_ATLAS_6"
    CACHE STRING "Version postfix for the LCG release to use" )
 set( LCG_VERSION_NUMBER 101
    CACHE STRING "Version number for the LCG release to use" )
diff --git a/Projects/AthDataQuality/externals.txt b/Projects/AthDataQuality/externals.txt
index 4c386df3f3a3a3d9be44f06109a276fbd7dcf4fd..87883927917d1c316a1978c1c500e461054503b7 100644
--- a/Projects/AthDataQuality/externals.txt
+++ b/Projects/AthDataQuality/externals.txt
@@ -5,4 +5,4 @@
 # an "origin/" prefix before it. For tags however this is explicitly
 # forbidden.
 
-AtlasExternalsVersion = 2.0.121
+AtlasExternalsVersion = 2.0.122
diff --git a/Projects/AthDataQuality/version.txt b/Projects/AthDataQuality/version.txt
index 441eb005e31581e4033d4744ea5033b03e7c614d..140125644054770fe54c322164c33e7cd9395b79 100644
--- a/Projects/AthDataQuality/version.txt
+++ b/Projects/AthDataQuality/version.txt
@@ -1 +1 @@
-22.0.48
+22.0.49
diff --git a/Projects/AthGeneration/build_externals.sh b/Projects/AthGeneration/build_externals.sh
index 7fb9208a28a4180a878a6095fed6ce7d10eda299..1868520acd2ca6731de8d4d6a0d5c5aa77b1423d 100755
--- a/Projects/AthGeneration/build_externals.sh
+++ b/Projects/AthGeneration/build_externals.sh
@@ -10,9 +10,10 @@ ATLAS_PROJECT_DIR=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
 ATLAS_EXT_PROJECT_NAME="AthGenerationExternals"
 ATLAS_BUILDTYPE="RelWithDebInfo"
 ATLAS_EXTRA_CMAKE_ARGS=(-DLCG_VERSION_NUMBER=101
-                        -DLCG_VERSION_POSTFIX="_ATLAS_4"
+                        -DLCG_VERSION_POSTFIX="_ATLAS_6"
                         -DATLAS_GAUDI_TAG="v36r2.000"
-                        -DATLAS_COOL_TAG="COOL_3_3_9")
+                        -DATLAS_COOL_TAG="COOL_3_3_9"
+                        -DATLAS_GEOMODEL_TAG="c04bd9d5")
 ATLAS_EXTRA_MAKE_ARGS=()
 
 # Let "the common script" do all the heavy lifting.
diff --git a/Projects/AthGeneration/externals.txt b/Projects/AthGeneration/externals.txt
index 2bbf6634e93d8a93f1a231308586d1055e0820d8..781337e7599c639d1052b33fd701a7969a0fe7af 100644
--- a/Projects/AthGeneration/externals.txt
+++ b/Projects/AthGeneration/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AthGenerationExternalsVersion = 2.0.121
+AthGenerationExternalsVersion = 2.0.122
diff --git a/Projects/AthGeneration/package_filters.txt b/Projects/AthGeneration/package_filters.txt
index b17fa39daa26f29f7ea2dca68aae1a5ab439b12e..6180c7fe7539198296136a7af9e6555f1f9af1a1 100644
--- a/Projects/AthGeneration/package_filters.txt
+++ b/Projects/AthGeneration/package_filters.txt
@@ -2,8 +2,6 @@
 # Package filtering rules for the AthGeneration project build.
 #
 
-# Temporarily disable Rivet_i until we have LCG_97_ATLAS_2
-
 + AsgExternal/Asg_Test
 + AtlasTest/TestTools
 + Calorimeter/CaloConditions
@@ -156,6 +154,7 @@
 - Generators/MCTester_i
 - Generators/ProtosLHEF_i
 - Generators/TrackRecordGenerator
+- Generators/QGSJet_i
 + Generators/.*
 + InnerDetector/InDetExample/InDetRecExample
 #+ InnerDetector/InDetRecTools/InDetTrackSelectionTool
diff --git a/Projects/AthSimulation/build_externals.sh b/Projects/AthSimulation/build_externals.sh
index 962447eb3dd755d1732ca40b8d54f2ca1b377d6f..35886413d7fd77ca5e3d2db370ad81bdf5b9c43b 100755
--- a/Projects/AthSimulation/build_externals.sh
+++ b/Projects/AthSimulation/build_externals.sh
@@ -10,9 +10,10 @@ ATLAS_PROJECT_DIR=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
 ATLAS_EXT_PROJECT_NAME="AthSimulationExternals"
 ATLAS_BUILDTYPE="RelWithDebInfo"
 ATLAS_EXTRA_CMAKE_ARGS=(-DLCG_VERSION_NUMBER=101
-                        -DLCG_VERSION_POSTFIX="_ATLAS_4"
+                        -DLCG_VERSION_POSTFIX="_ATLAS_6"
                         -DATLAS_GAUDI_TAG="v36r2.000"
-                        -DATLAS_COOL_TAG="COOL_3_3_9")
+                        -DATLAS_COOL_TAG="COOL_3_3_9"
+                        -DATLAS_GEOMODEL_TAG="c04bd9d5")
 ATLAS_EXTRA_MAKE_ARGS=()
 
 # Let "the common script" do all the heavy lifting.
diff --git a/Projects/AthSimulation/externals.txt b/Projects/AthSimulation/externals.txt
index 624b2f1c01edfb880d91597715ec2dbdb77c65fe..47d8d2a22edb402528f3c75f309c103ef7cb4d2d 100644
--- a/Projects/AthSimulation/externals.txt
+++ b/Projects/AthSimulation/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AthSimulationExternalsVersion = 2.0.121
+AthSimulationExternalsVersion = 2.0.122
diff --git a/Projects/AthSimulation/version.txt b/Projects/AthSimulation/version.txt
index 441eb005e31581e4033d4744ea5033b03e7c614d..140125644054770fe54c322164c33e7cd9395b79 100644
--- a/Projects/AthSimulation/version.txt
+++ b/Projects/AthSimulation/version.txt
@@ -1 +1 @@
-22.0.48
+22.0.49
diff --git a/Projects/Athena/build_externals.sh b/Projects/Athena/build_externals.sh
index 5eac2b57507545006343b6fdde03c71779e6b97e..642c23b4aa0e1f962b4db7c5e8d880079ece6a59 100755
--- a/Projects/Athena/build_externals.sh
+++ b/Projects/Athena/build_externals.sh
@@ -10,9 +10,13 @@ ATLAS_PROJECT_DIR=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
 ATLAS_EXT_PROJECT_NAME="AthenaExternals"
 ATLAS_BUILDTYPE="RelWithDebInfo"
 ATLAS_EXTRA_CMAKE_ARGS=(-DLCG_VERSION_NUMBER=101
-                        -DLCG_VERSION_POSTFIX="_ATLAS_4"
+                        -DLCG_VERSION_POSTFIX="_ATLAS_6"
                         -DATLAS_GAUDI_TAG="v36r2.000"
-                        -DATLAS_ONNXRUNTIME_USE_CUDA=FALSE)
+                        -DATLAS_ACTS_TAG="v14.1.0"
+                        -DATLAS_ONNXRUNTIME_USE_CUDA=FALSE
+                        -DATLAS_GEOMODEL_TAG="c04bd9d5"
+                        -DATLAS_BUILD_CORAL=TRUE
+                        -DATLAS_CORAL_TAG="9d9d9725")
 ATLAS_EXTRA_MAKE_ARGS=()
 
 # Let "the common script" do all the heavy lifting.
diff --git a/Projects/Athena/externals.txt b/Projects/Athena/externals.txt
index 5bbeb4d8a43676256bba9c31e92ce54ebb21a614..38616f60840846f22f60aea7c9cd338236bc71bb 100644
--- a/Projects/Athena/externals.txt
+++ b/Projects/Athena/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AthenaExternalsVersion = 2.0.121
+AthenaExternalsVersion = 2.0.122
diff --git a/Projects/Athena/package_filters.txt b/Projects/Athena/package_filters.txt
index 39a354b3a6d845fd606d1e8a67d1062b30d4d422..dd79a91c0113836460a7c43ae84be3f0ed412ba1 100644
--- a/Projects/Athena/package_filters.txt
+++ b/Projects/Athena/package_filters.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 #
 # Package filtering rules for the Athena project build.
 #
@@ -25,6 +25,7 @@
 
 # Disable MCTester until we are sure we can remove it completely
 - Generators/MCTester_i
+- Generators/QGSJet_i
 
 # Some analysis packages that are not part of Athena
 - Control/AthLinksSA
diff --git a/Projects/Athena/version.txt b/Projects/Athena/version.txt
index 441eb005e31581e4033d4744ea5033b03e7c614d..140125644054770fe54c322164c33e7cd9395b79 100644
--- a/Projects/Athena/version.txt
+++ b/Projects/Athena/version.txt
@@ -1 +1 @@
-22.0.48
+22.0.49
diff --git a/Projects/DetCommon/externals.txt b/Projects/DetCommon/externals.txt
index 0a481e6896f3daf503ea0e2d8f9659a825434898..e2563440a6e23252274ef1f3fddc25f1a72694c6 100644
--- a/Projects/DetCommon/externals.txt
+++ b/Projects/DetCommon/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-AtlasExternalsVersion = 2.0.121
+AtlasExternalsVersion = 2.0.122
diff --git a/Projects/DetCommon/version.txt b/Projects/DetCommon/version.txt
index 441eb005e31581e4033d4744ea5033b03e7c614d..140125644054770fe54c322164c33e7cd9395b79 100644
--- a/Projects/DetCommon/version.txt
+++ b/Projects/DetCommon/version.txt
@@ -1 +1 @@
-22.0.48
+22.0.49
diff --git a/Projects/VP1Light/build_externals.sh b/Projects/VP1Light/build_externals.sh
index 01abad981be70d6b2156e9a67f0fa06103a4c3c9..70cf8e75749612ea613b083ef0d9d1ccd977feec 100755
--- a/Projects/VP1Light/build_externals.sh
+++ b/Projects/VP1Light/build_externals.sh
@@ -10,7 +10,7 @@ ATLAS_PROJECT_DIR=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
 ATLAS_EXT_PROJECT_NAME="VP1LightExternals"
 ATLAS_BUILDTYPE="RelWithDebInfo"
 ATLAS_EXTRA_CMAKE_ARGS=(-DLCG_VERSION_NUMBER=101
-                        -DLCG_VERSION_POSTFIX="_ATLAS_4")
+                        -DLCG_VERSION_POSTFIX="_ATLAS_6")
 ATLAS_EXTRA_MAKE_ARGS=()
 
 # Let "the common script" do all the heavy lifting.
diff --git a/Projects/VP1Light/externals.txt b/Projects/VP1Light/externals.txt
index d96e747191fedff01032d81786fd11b79cd49132..67ac203bb7fe1335f2245c0f4354df2e3858fb71 100644
--- a/Projects/VP1Light/externals.txt
+++ b/Projects/VP1Light/externals.txt
@@ -6,4 +6,4 @@
 # forbidden.
 
 # The version of atlas/atlasexternals to use:
-VP1LightExternalsVersion = 2.0.121
+VP1LightExternalsVersion = 2.0.122
diff --git a/Projects/VP1Light/version.txt b/Projects/VP1Light/version.txt
index 441eb005e31581e4033d4744ea5033b03e7c614d..140125644054770fe54c322164c33e7cd9395b79 100644
--- a/Projects/VP1Light/version.txt
+++ b/Projects/VP1Light/version.txt
@@ -1 +1 @@
-22.0.48
+22.0.49
diff --git a/Reconstruction/HeavyIonRec/HIJetRec/share/HIegamma_jobOptions.py b/Reconstruction/HeavyIonRec/HIJetRec/share/HIegamma_jobOptions.py
index 5f2e3c277c728d2e2bc1f60815584e160d44da33..dad87051dc686c1f0646304e42097505a5b281b5 100644
--- a/Reconstruction/HeavyIonRec/HIJetRec/share/HIegamma_jobOptions.py
+++ b/Reconstruction/HeavyIonRec/HIJetRec/share/HIegamma_jobOptions.py
@@ -1,4 +1,5 @@
 #build subtracted cells
+from AODFix.AODFix import AODFix_postEgammaRec
 from HIJetRec.SubtractedCellGetter import SubtractedCellGetter
 subtr_gett=SubtractedCellGetter()
 
@@ -20,14 +21,13 @@ jobproperties.CaloRecFlags.doCaloTopoCluster = True
 jobproperties.CaloRecFlags.doCaloEMTopoCluster = True
 jobproperties.CaloRecFlags.clusterCellGetterName='HIJetRec.SubtractedCellGetter.SubtractedCellGetter'
 
-rec.doEgamma=True
+rec.doEgamma = True
+
 from egammaRec.egammaRecFlags import jobproperties
-jobproperties.egammaRecFlags.Enabled=True
 jobproperties.egammaRecFlags.inputTopoClusterCollection='SubtractedCaloTopoCluster'
 jobproperties.egammaRecFlags.egammaTopoClusterCollection='SubtractedEgammaTopoCluster'
 jobproperties.egammaRecFlags.cellContainerName='SubtractedCells'
-jobproperties.egammaRecFlags.doEgammaCaloSeeded=True
-jobproperties.egammaRecFlags.doEgammaForwardSeeded=False
+
 
 from AthenaCommon.AlgSequence import AlgSequence
 topSequence = AlgSequence()
@@ -90,8 +90,12 @@ if DetFlags.haveRIO.Calo_on() :
 
 #Run egamma
 pdr.flag_domain('egamma')
-if rec.doEgamma() : protectedInclude( "egammaRec/egammaRec_jobOptions.py" )
-from AODFix.AODFix import AODFix_postEgammaRec
+if rec.doEgamma():
+    from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    from egammaConfig.egammaReconstructionConfig import (
+        egammaReconstructionCfg)
+    CAtoGlobalWrapper(egammaReconstructionCfg, ConfigFlags)
 AODFix_postEgammaRec()
 
 
diff --git a/Reconstruction/Jet/JetEvent/JetEvent/JetCollection.h b/Reconstruction/Jet/JetEvent/JetEvent/JetCollection.h
index 8dc2a7e55f142b6b7a186850ab5efabedd1fc8ef..fbcdf666fb4ad9a2e4200a08d3823b843e9843ef 100755
--- a/Reconstruction/Jet/JetEvent/JetEvent/JetCollection.h
+++ b/Reconstruction/Jet/JetEvent/JetEvent/JetCollection.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef JETEVENT_JETCOLLECTION_H
@@ -78,7 +78,9 @@ class JetCollection : public DataVector<Jet>
   template <class InputIterator>
   void insert(iterator position, InputIterator first, InputIterator last);
 
+  // cppcheck-suppress duplInheritedMember
   void clear();
+  // cppcheck-suppress duplInheritedMember
   void clear(SG::OwnershipPolicy ownPolicy);
 
 
diff --git a/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py b/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
index a0d794931370e07adcac294e327e4e041a71b1d7..d733a308973331e57503c333110625d814d3932f 100644
--- a/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
+++ b/Reconstruction/Jet/JetRecConfig/python/JetDefinition.py
@@ -428,6 +428,7 @@ class JetInputType(IntEnum):
         _xaodTojetinputMap = {
             xAODType.CaloCluster   : JetInputType.LCTopo,
             xAODType.ParticleFlow  : JetInputType.EMPFlow,
+            xAODType.FlowElement   : JetInputType.EMPFlow,
             xAODType.TrackParticle : JetInputType.Track,
             xAODType.TruthParticle : JetInputType.Truth,    
         }
diff --git a/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py b/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
index d9abffaca5686b2c5a801b2b2f5866628c56c2b4..cad3d2bc582da9d34dd8bb8d9466f699b5a648cd 100644
--- a/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
+++ b/Reconstruction/Jet/JetRecConfig/python/JetRecConfig.py
@@ -503,7 +503,7 @@ def getConstitModAlg(parentjetdef, constitSeq, monTool=None):
         
         tool =  toolclass(modInstance.name,**modInstance.properties)
         
-        if inputtype == xAODType.ParticleFlow and modInstance.tooltype not in ["CorrectPFOTool","ChargedHadronSubtractionTool"]:
+        if (inputtype == xAODType.FlowElement or inputtype == xAODType.ParticleFlow) and modInstance.tooltype not in ["CorrectPFOTool","ChargedHadronSubtractionTool"]:
             tool.IgnoreChargedPFO=True
             tool.ApplyToChargedPFO=False
         tool.InputType = inputtype
@@ -513,7 +513,7 @@ def getConstitModAlg(parentjetdef, constitSeq, monTool=None):
     seqname = "ConstitMod{0}_{1}".format(sequenceshort,constitSeq.name)
     inputcontainer = str(constitSeq.inputname)
     outputcontainer = str(constitSeq.containername)
-    if inputtype==xAODType.ParticleFlow:
+    if (inputtype == xAODType.FlowElement or inputtype == xAODType.ParticleFlow):
         # Tweak PF names because ConstModSequence needs to work with
         # up to 4 containers
         def chopPFO(thestring):
diff --git a/Reconstruction/Jet/JetRecConfig/python/StandardJetConstits.py b/Reconstruction/Jet/JetRecConfig/python/StandardJetConstits.py
index 3b40a6dff6d869a4d92c979d7093f5b83f6b9a39..230a985ae791feb361342b56d91c8076e63ea0e3 100644
--- a/Reconstruction/Jet/JetRecConfig/python/StandardJetConstits.py
+++ b/Reconstruction/Jet/JetRecConfig/python/StandardJetConstits.py
@@ -82,7 +82,7 @@ _stdInputList = [
     JetInputExternal("CaloCalTopoClusters", xAODType.CaloCluster, algoBuilder= standardReco("CaloClusters") ),
 
     # *****************************
-    JetInputExternal("JetETMissParticleFlowObjects", xAODType.ParticleFlow, # no algobuilder available yet for PFlow
+    JetInputExternal("JetETMissParticleFlowObjects", xAODType.FlowElement, # no algobuilder available yet for PFlow
                      prereqs = ["input:InDetTrackParticles"],
                      ),
 
diff --git a/Reconstruction/Jet/JetRecConfig/python/StandardJetDefs.py b/Reconstruction/Jet/JetRecConfig/python/StandardJetDefs.py
index a79186d6bac83c1b753cc137be7cfd2989f8155a..92ffce5a82f60ea895cae3035bd5dde43f5826dc 100644
--- a/Reconstruction/Jet/JetRecConfig/python/StandardJetDefs.py
+++ b/Reconstruction/Jet/JetRecConfig/python/StandardJetDefs.py
@@ -32,7 +32,7 @@ LCTopoCSSK.modifiers += ["CS","SK"]
 # EM-scale particle flow objects with charged hadron subtraction
 # For now we don't specify a scale, as only one works well, but
 # this could be incorporated into the naming scheme and config
-CHSPFlow = JetConstit(xAODType.ParticleFlow)
+CHSPFlow = JetConstit(xAODType.FlowElement)
 # Particle Flow Objects with Constituent Subtraction + SoftKiller
 CSSKPFlow = deepcopy(CHSPFlow)
 CSSKPFlow.modifiers += ["CS","SK"]
diff --git a/Reconstruction/Jet/JetRecConfig/test/test_JetDefinitions_properties.py b/Reconstruction/Jet/JetRecConfig/test/test_JetDefinitions_properties.py
index 532ca82da1fa52cf0109478503f2fe214daf3c96..ca24d37bc3a85a6900e607c253ec84dafd4938c9 100755
--- a/Reconstruction/Jet/JetRecConfig/test/test_JetDefinitions_properties.py
+++ b/Reconstruction/Jet/JetRecConfig/test/test_JetDefinitions_properties.py
@@ -34,7 +34,7 @@ def printJetDefinition(desc, jetdef):
 class TestJetDef(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
-        cls.CHSPFlow = JetInputConstitSeq("chspflow",xAODType.ParticleFlow, [],
+        cls.CHSPFlow = JetInputConstitSeq("chspflow",xAODType.FlowElement, [],
                                           "InputPFlow", "OutputPFlow", jetinputtype="EMPFlow"
                                           )
         cls.AntiKt4EMPFlow = JetDefinition("AntiKt",0.4,cls.CHSPFlow,ptmin=10e3,modifiers=["bla","bli"])
diff --git a/Reconstruction/Jet/JetRecTools/Root/ConstituentSubtractorTool.cxx b/Reconstruction/Jet/JetRecTools/Root/ConstituentSubtractorTool.cxx
index 753dc6728751b7336d724d7a2f8bcac9e0bed3ee..2503cdb6ec075cae66243dc4df12406dc42a884a 100644
--- a/Reconstruction/Jet/JetRecTools/Root/ConstituentSubtractorTool.cxx
+++ b/Reconstruction/Jet/JetRecTools/Root/ConstituentSubtractorTool.cxx
@@ -29,7 +29,7 @@ ConstituentSubtractorTool::ConstituentSubtractorTool(const std::string & name):
 
 StatusCode ConstituentSubtractorTool::initialize() {
 
-  if(m_inputType==xAOD::Type::ParticleFlow) {
+  if(m_inputType==xAOD::Type::ParticleFlow || m_inputType==xAOD::Type::FlowElement) {
     if(m_ignoreChargedPFOs && m_applyToChargedPFO) {
       ATH_MSG_ERROR("Incompatible configuration: setting both IgnoreChargedPFO and ApplyToChargedPFO to true"
 		    <<  "will set all cPFOs to zero");
@@ -132,9 +132,15 @@ StatusCode ConstituentSubtractorTool::process_impl(xAOD::IParticleContainer* con
     // For PFlow we would only want to apply the correction to neutral PFOs,
     // because charged hadron subtraction handles the charged PFOs.
     // However, we might still want to use the cPFOs for the min pt calculation
-    if(m_inputType==xAOD::Type::ParticleFlow && m_ignoreChargedPFOs) {
-      xAOD::PFO* pfo = static_cast<xAOD::PFO*>(part);
-      accept &= fabs(pfo->charge())<FLT_MIN;
+    if(m_ignoreChargedPFOs){
+      if(m_inputType==xAOD::Type::ParticleFlow){
+        xAOD::PFO* pfo = static_cast<xAOD::PFO*>(part);
+        accept &= fabs(pfo->charge())<FLT_MIN;
+      }
+      else if(m_inputType==xAOD::Type::FlowElement){
+        xAOD::FlowElement* fe = static_cast<xAOD::FlowElement*>(part);
+        accept &= !(fe->isCharged());
+      }
     }
     if(m_inputType==xAOD::Type::TrackCaloCluster) {
       xAOD::TrackCaloCluster* tcc = static_cast<xAOD::TrackCaloCluster*>(part);
diff --git a/Reconstruction/Jet/JetRecTools/Root/VoronoiWeightTool.cxx b/Reconstruction/Jet/JetRecTools/Root/VoronoiWeightTool.cxx
index 551f8f225062202d96801ad8fe7ebde220b0f823..e2a9921d1cb52daa4313310bf1422380b2e3843c 100644
--- a/Reconstruction/Jet/JetRecTools/Root/VoronoiWeightTool.cxx
+++ b/Reconstruction/Jet/JetRecTools/Root/VoronoiWeightTool.cxx
@@ -127,10 +127,10 @@ StatusCode VoronoiWeightTool::process_impl(xAOD::IParticleContainer* particlesin
     if(m_inputType==xAOD::Type::FlowElement){
       xAOD::FlowElement* fe = static_cast<xAOD::FlowElement*>(part);
       if(fe->signalType() & xAOD::FlowElement::PFlow){
-        if(m_ignoreChargedPFOs) accept = !fe->isCharged();
+        if(m_ignoreChargedPFOs) accept &= !fe->isCharged();
       }
       else
-        accept = !fe->isCharged();
+        accept &= !fe->isCharged();
     }
     if(accept) {
       particles.push_back( fastjet::PseudoJet(part->p4()) );
@@ -165,6 +165,14 @@ StatusCode VoronoiWeightTool::process_impl(xAOD::IParticleContainer* particlesin
       xAOD::TrackCaloCluster* tcc = static_cast<xAOD::TrackCaloCluster*>(part);
       accept &= (tcc->taste()!= 0);
     }
+    if(m_inputType==xAOD::Type::FlowElement){
+      xAOD::FlowElement* fe = static_cast<xAOD::FlowElement*>(part);
+      if(fe->signalType() & xAOD::FlowElement::PFlow){
+        if(m_ignoreChargedPFOs) accept &= !fe->isCharged();
+      }
+      else
+        accept &= !fe->isCharged();
+    }
 
     float newPt(0.);
     if(accept) {
diff --git a/Reconstruction/MET/METUtilities/Root/METSignificance.cxx b/Reconstruction/MET/METUtilities/Root/METSignificance.cxx
index 9f79893145224200027adc754b1abe6350fbf4e0..3e1bd3d8ceceeaf4ce3b358d296898cf64615653 100644
--- a/Reconstruction/MET/METUtilities/Root/METSignificance.cxx
+++ b/Reconstruction/MET/METUtilities/Root/METSignificance.cxx
@@ -166,7 +166,8 @@ namespace met {
 
     toolName = "TauPerfTool";
     m_tauCombinedTES.setTypeAndName("TauCombinedTES/METSigAutoConf_" + toolName);
-    ATH_CHECK( m_tauCombinedTES.setProperty("WeightFileName", "CombinedTES_R22_Round2.5.root") );
+    ATH_CHECK( m_tauCombinedTES.setProperty("WeightFileName", "CombinedTES_R22_Round2.5_v2.root") );
+    ATH_CHECK( m_tauCombinedTES.setProperty("useMvaResolution", true) );
     ATH_CHECK( m_tauCombinedTES.retrieve() );
 
     return StatusCode::SUCCESS;
@@ -566,7 +567,7 @@ namespace met {
     else{
       const xAOD::TauJet* tau(static_cast<const xAOD::TauJet*>(obj));
       if (auto combp4 = dynamic_cast<TauCombinedTES*>(m_tauCombinedTES.get())) {
-        pt_reso = combp4->getCaloResolution(*tau);
+        pt_reso = combp4->getMvaEnergyResolution(*tau);
       }
       
       if(m_doPhiReso) phi_reso = tau->pt()*0.01;
diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCaloTagTool.h b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCaloTagTool.h
index e4ad5a92f0efd17ac27159ba50b09867f192ef6b..da0ca2252914f5ada3fcae354c02129719f07bf4 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCaloTagTool.h
+++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCaloTagTool.h
@@ -64,7 +64,7 @@ namespace MuonCombined {
         void showTrackInfo(const Trk::TrackParameters* par) const;
 
         // --- StoreGate keys ---
-        SG::ReadHandleKey<xAOD::CaloClusterContainer> m_caloClusterCont{this, "CaloClusters", "CaloTopoCluster", "calo cluster container"};
+        SG::ReadHandleKey<xAOD::CaloClusterContainer> m_caloClusterCont{this, "CaloClusters", "CaloTopoClusters", "calo cluster container"};
         SG::ReadHandleKey<CaloCellContainer> m_caloCellCont{this, "CaloCells", "AllCalo", "calo cell container"};
 
         // --- Internal cache ---
diff --git a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py
index 0ab4e285099b1e201caa6017715c7444cfe94366..a79a60ad7bfbbee8b311f91e12924a9d318eaef4 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py
+++ b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedRecToolsConfig.py
@@ -118,7 +118,7 @@ def MuonCombinedParticleCreatorCfg(flags, name="MuonCombinedParticleCreator",**k
         kwargs.setdefault('TrackToVertex',result.popToolsAndMerge(MuonTrackToVertexCfg(flags)))
 
     kwargs.setdefault("KeepAllPerigee",True )
-    kwargs.setdefault("UseMuonSummaryTool",True )
+    kwargs.setdefault("MuonSummaryTool", CompFactory.Muon.MuonHitSummaryTool("MuonHitSummaryTool"))
     if flags.Beam.Type=="cosmics":
         kwargs.setdefault("PerigeeExpression","Origin")
     tool = CompFactory.Trk.TrackParticleCreatorTool(name,**kwargs)
@@ -272,7 +272,7 @@ def ExtrapolateMuonToIPToolCfg(flags, name="ExtrapolateMuonToIPTool", **kwargs):
     from MuonConfig.MuonRecToolsConfig import MuonExtrapolatorCfg
  
     result = AtlasExtrapolatorCfg(flags)
-    kwargs.setdefault("Extrapolator", result.getPrimary() )
+    kwargs.setdefault("Extrapolator", result.popPrivateTools() )
     kwargs.setdefault("MuonExtrapolator", result.popToolsAndMerge( MuonExtrapolatorCfg(flags) ) )
 
     if flags.Muon.MuonTrigger:
@@ -388,7 +388,7 @@ def MuonCombinedStacoTagToolCfg(flags, name="MuonCombinedStacoTagTool",**kwargs)
     kwargs.setdefault("ParticleCaloExtensionTool", result.getPrimary() )  
     kwargs.setdefault("Printer", MuonEDMPrinterTool(flags) )
     kwargs.setdefault("TagTool", result.popToolsAndMerge(CombinedMuonTagTestToolCfg(flags)))
-    kwargs.setdefault("Extrapolator", result.getPrimaryAndMerge(AtlasExtrapolatorCfg(flags)) )
+    kwargs.setdefault("Extrapolator", result.popToolsAndMerge(AtlasExtrapolatorCfg(flags)) )
 
     tool = CompFactory.MuonCombined.MuonCombinedStacoTagTool(name,**kwargs)
     result.setPrivateTools(tool)
@@ -401,7 +401,7 @@ def MuidMaterialAllocatorCfg(flags, name='MuidMaterialAllocator', **kwargs):
     kwargs.setdefault("AllowReordering",False)
 
     result = AtlasExtrapolatorCfg(flags)
-    kwargs.setdefault("Extrapolator", result.getPrimary() )
+    kwargs.setdefault("Extrapolator", result.popPrivateTools() )
 
     from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
     result.merge( TrackingGeometryCondAlgCfg(flags) )
@@ -643,9 +643,7 @@ def CombinedMuonTrackBuilderCfg(flags, name='CombinedMuonTrackBuilder', **kwargs
     else:
         kwargs.setdefault("CscRotCreator"                 , "")
 
-    acc = AtlasExtrapolatorCfg(flags)
-    kwargs.setdefault("Extrapolator", acc.getPrimary() )
-    result.merge(acc)
+    kwargs.setdefault("Extrapolator", result.popToolsAndMerge(AtlasExtrapolatorCfg(flags)) )
 
     acc = iPatFitterCfg(flags)
     ipatFitter = acc.popPrivateTools() # possibly used again below
@@ -776,7 +774,7 @@ def MuonMatchQualityCfg(flags, name='MuonMatchQuality', **kwargs ):
 
 def MuidMuonRecoveryCfg(flags, name='MuidMuonRecovery',**kwargs):
     result = AtlasExtrapolatorCfg(flags)
-    kwargs.setdefault("Extrapolator", result.getPrimary() )
+    kwargs.setdefault("Extrapolator", result.popPrivateTools() )
     acc = CombinedMuonTrackBuilderCfg(flags)
     kwargs.setdefault("TrackBuilder", acc.popPrivateTools() )
     result.merge(acc)
@@ -789,7 +787,7 @@ def MuonCombinedTrackFitterCfg(flags, name="MuonCombinedTrackFitter", **kwargs )
     from MuonConfig.MuonRIO_OnTrackCreatorConfig import MuonRotCreatorCfg
 
     result = AtlasExtrapolatorCfg(flags)
-    kwargs.setdefault("ExtrapolationTool", result.getPrimary() )
+    kwargs.setdefault("ExtrapolationTool", result.popPrivateTools() )
     
     acc = MuonNavigatorCfg(flags)
     kwargs.setdefault("NavigatorTool", acc.popPrivateTools())
@@ -833,7 +831,7 @@ def MuonCombinedTrackFitterCfg(flags, name="MuonCombinedTrackFitter", **kwargs )
 
 def CombinedMuonTagTestToolCfg(flags, name='CombinedMuonTagTestTool', **kwargs ):
     result = AtlasExtrapolatorCfg(flags)
-    kwargs.setdefault("ExtrapolatorTool",result.getPrimary() )
+    kwargs.setdefault("ExtrapolatorTool",result.popPrivateTools() )
     kwargs.setdefault("Chi2Cut",50000.)
     from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
     result.merge( TrackingGeometryCondAlgCfg(flags) )
@@ -970,8 +968,7 @@ def MuonLayerSegmentFinderToolCfg(flags, name="MuonLayerSegmentFinderTool", **kw
 
 def MuonLayerSegmentMatchingToolCfg(flags, name="MuonLayerSegmentMatchingTool", **kwargs):
     result = AtlasExtrapolatorCfg(flags)
-    extrap = result.getPrimary()
-    kwargs.setdefault("Extrapolator", extrap)
+    kwargs.setdefault("Extrapolator", result.popPrivateTools())
     from MuonCombinedConfig.MuonCombinedReconstructionConfig import MuTagMatchingToolCfg
     
     acc = MuTagMatchingToolCfg(flags)
diff --git a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedReconstructionConfig.py b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedReconstructionConfig.py
index 7c74f95166071870316b311534291817b17038f1..53020f0ef53586833cd00ef102e4bc835a947548 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedReconstructionConfig.py
+++ b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedReconstructionConfig.py
@@ -65,7 +65,7 @@ def MuTagMatchingToolCfg(flags, name='MuTagMatchingTool', **kwargs ):
     kwargs.setdefault("CombinedPullCut", 3.0)
 
     result = AtlasExtrapolatorCfg(flags)
-    kwargs.setdefault("IExtrapolator", result.getPrimary())
+    kwargs.setdefault("IExtrapolator", result.popPrivateTools())
 
     kwargs.setdefault("Propagator", result.getPrimaryAndMerge( AtlasRKPropagatorCfg(flags) ))
 
@@ -183,11 +183,8 @@ def MuonCombinedInDetCandidateAlgCfg(flags, name="MuonCombinedInDetCandidateAlg"
         acc = MuonCombinedInDetDetailedTrackSelectorToolCfg(flags, "MuonCombinedInDetDetailedForwardTrackSelectorTool", nHitSct=0)
         kwargs.setdefault("InDetForwardTrackSelector", acc.getPrimary() )
         result.merge(acc)
-    
-    acc = AtlasExtrapolatorCfg(flags)
-    extrapolator = acc.getPrimary()
-    result.merge(acc)
 
+    extrapolator = result.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
     muon_particle_extension_tool = CompFactory.Trk.ParticleCaloExtensionTool(Extrapolator=extrapolator)
 
     muon_ext_tool = CompFactory.Muon.MuonSystemExtensionTool(ParticleCaloExtensionTool = muon_particle_extension_tool, Extrapolator = extrapolator)
diff --git a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedTools.py b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedTools.py
index 022ab67a975561fc545f9cec375d141e2413088f..35a327fdbbe9377199da473c5541e3fdf270b689 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedTools.py
+++ b/Reconstruction/MuonIdentification/MuonCombinedRecExample/python/MuonCombinedTools.py
@@ -83,7 +83,7 @@ def MuonCombinedParticleCreator(name="MuonCombinedParticleCreator",**kwargs):
         kwargs.setdefault("TrackSummaryTool", ToolSvc.CombinedMuonTrackSummary ) #getPublicTool("CombinedMuonTrackSummary") )
     kwargs.setdefault("TrackToVertex", AtlasTrackToVertexTool())
     kwargs.setdefault("KeepAllPerigee",True )
-    kwargs.setdefault("UseMuonSummaryTool",True )
+    kwargs.setdefault("MuonSummaryTool", CfgMgr.Muon__MuonHitSummaryTool("MuonHitSummaryTool"))
     if beamFlags.beamType() == 'cosmics':
         kwargs.setdefault("PerigeeExpression","Origin")
     return CfgMgr.Trk__TrackParticleCreatorTool(name,**kwargs)
diff --git a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.cxx
index c01c0bcd3fef9288a8212f1ba2915006ae20f547..13d13ba30e4a1c0c907996c2fd046e92b20ce872 100644
--- a/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.cxx
+++ b/Reconstruction/MuonIdentification/MuonCombinedTrackFindingTools/src/MuonInsideOutRecoTool.cxx
@@ -65,7 +65,7 @@ namespace MuonCombined {
         // get intersections which precision layers in the muon system
         const Muon::MuonSystemExtension* muonSystemExtension = indetCandidate.getExtension();
         if (!muonSystemExtension) {
-            // ATH_MSG_DEBUG("No MuonSystemExtension, aborting ");
+            ATH_MSG_VERBOSE("No MuonSystemExtension, aborting ");
             return;
         }
         // fill validation content
@@ -140,10 +140,13 @@ namespace MuonCombined {
         std::vector<candidatePair> trackCandidateLookup;
         for ( Muon::MuonCandidate & candidate : resolvedCandidates) {
             std::unique_ptr<Trk::Track> track = m_candidateTrackBuilder->buildCombinedTrack(ctx, *indetTrackParticle.track(), candidate);
-            if (track) {
-                tracks.push_back(track.get());
-                trackCandidateLookup.emplace_back(std::move(track), std::make_unique<Muon::MuonCandidate>(std::move(candidate)));
-            }
+            /// Check if the fit succeeded and whether there are TSOS & a fitQuality
+            if (!track || !track->isValid()|| !track->fitQuality()->numberDoF()) continue;
+            
+
+            tracks.push_back(track.get());
+            trackCandidateLookup.emplace_back(std::move(track), std::make_unique<Muon::MuonCandidate>(std::move(candidate)));
+            
         }
 
         ATH_MSG_DEBUG("found " << tracks.size() << " combined tracks");
diff --git a/Reconstruction/PFlow/PFlowUtils/share/PFlowCalibHitDecorator_jobOptions.py b/Reconstruction/PFlow/PFlowUtils/share/PFlowCalibHitDecorator_jobOptions.py
index 89050881436c1d3bcad36ac04b75f4987336096b..6803be14f25b77cb41aae7b114385db8b930c3a4 100644
--- a/Reconstruction/PFlow/PFlowUtils/share/PFlowCalibHitDecorator_jobOptions.py
+++ b/Reconstruction/PFlow/PFlowUtils/share/PFlowCalibHitDecorator_jobOptions.py
@@ -17,6 +17,10 @@ rec.doAODCaloCells.set_Value_and_Lock(False)
 #Turn off xAODRingSetConfWriter
 rec.doCaloRinger.set_Value_and_Lock(False)
 
+#Use a current conditions tag to avoid crash in pixel conditions algorithms
+from AthenaCommon.GlobalFlags import globalflags
+globalflags.ConditionsTag.set_Value_and_Lock("OFLCOND-MC16-SDR-RUN2-08")
+
 #Disable VertexCnvAlg
 from InDetRecExample.InDetJobProperties import jobproperties
 jobproperties.InDetJobProperties.doxAOD.set_Value_and_Lock(False)
@@ -24,7 +28,7 @@ jobproperties.InDetJobProperties.doxAOD.set_Value_and_Lock(False)
 rec.doFileMetaData.set_Value_and_Lock(False)
 
 athenaCommonFlags.EvtMax=100
-UserAlgs = ["PFlowUtils/PFlowCalibHitDecorator_algorithms.py"]
+rec.UserAlgs = ["PFlowUtils/PFlowCalibHitDecorator_algorithms.py"]
 include ("RecExCommon/RecExCommon_topOptions.py")
 #Add decoration to output item list
 StreamAOD.ItemList+=['xAOD::FlowElementAuxContainer#JetETMissNeutralParticleFlowObjectsAux.+calfe_NLeadingTruthParticleBarcodeEnergyPairs']
diff --git a/Reconstruction/RecExample/RecExCommon/share/CombinedRec_config.py b/Reconstruction/RecExample/RecExCommon/share/CombinedRec_config.py
index 3e937eb686d716ff4b2c9df01dc72a00f13cf8c9..ba1c8045bc40c81f64e4ad491411f98b70d7320c 100755
--- a/Reconstruction/RecExample/RecExCommon/share/CombinedRec_config.py
+++ b/Reconstruction/RecExample/RecExCommon/share/CombinedRec_config.py
@@ -45,7 +45,7 @@ if (rec.doESD()) and (recAlgs.doEFlow() or rec.doTau() or rec.doEgamma()) : #
         CaloExtensionBuilder(True)
 
 #
-# functionality : electron photon identification
+# functionality : electron photon Reconstruction
 #
 #
 from InDetRecExample.InDetJobProperties import InDetFlags
@@ -181,7 +181,8 @@ AODFix_posttauRec()
 # functionality: Flow element tau links
 #
 pdr.flag_domain('eflow')
-if recAlgs.doEFlow():
+from eflowRec.eflowRecFlags import jobproperties
+if recAlgs.doEFlow() and jobproperties.eflowRecFlags.usePFFlowElementAssoc:
     try:
         from eflowRec.PFRun3Config import PFTauFlowElementLinkingCfg
         CAtoGlobalWrapper(PFTauFlowElementLinkingCfg,ConfigFlags)        
diff --git a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
index 4bc205ed5bdb65e468ec3fb2396f79c39392de0f..1221138087bdff2d4372fa9d446aba3291e8a2b8 100644
--- a/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
+++ b/Reconstruction/RecExample/RecExCommon/share/RecExCommon_topOptions.py
@@ -443,11 +443,24 @@ if rec.doMonitoring():
 if recAlgs.doEFlow():
     #Some settings for pflow have to toggle to a different setup for RecExCommon workflows.
     ConfigFlags.PF.useRecExCommon=True
+    from eflowRec.eflowRecFlags import jobproperties
+    if False == jobproperties.eflowRecFlags.usePFFlowElementAssoc:
+        ConfigFlags.PF.useElPhotLinks = False
+        ConfigFlags.PF.useMuLinks = False
 
 if rec.doEgamma():
     # C.A uses Clusters RecExCommom Cluster (rm the "s")
     ConfigFlags.Egamma.Keys.Internal.EgammaTopoClusters = 'egammaTopoCluster'
-    ConfigFlags.Egamma.Keys.Input.TopoClusters = 'CaloTopoCluster'
+    ConfigFlags.Egamma.Keys.Input.TopoClusters = 'CaloTopoClusters'
+
+if rec.doHeavyIon():
+    # This is copy from the old style to the new
+    # We need to have HI flags to do it nicer
+    ConfigFlags.Egamma.Keys.Input.TopoClusters = 'SubtractedCaloTopoCluster'
+    ConfigFlags.Egamma.Keys.Internal.EgammaTopoClusters = 'SubtractedEgammaTopoCluster'
+    ConfigFlags.Egamma.Keys.Input.CaloCells = 'SubtractedCells'
+    ConfigFlags.Egamma.doCentral = True
+    ConfigFlags.Egamma.doForward = False
 
 # Lock the flags
 logRecExCommon_topOptions.info("Locking ConfigFlags")
@@ -1143,13 +1156,10 @@ if rec.doWriteAOD():
             topSequence += thinTRTStandaloneTrackAlg
         
         if rec.doEgamma() and (AODFlags.Photon or AODFlags.Electron):
-            doEgammaPhoton = AODFlags.Photon
-            doEgammaElectron= AODFlags.Electron
-            from egammaRec.egammaAODGetter import egammaAODGetter
-            egammaAODGetter()
             if AODFlags.egammaTrackSlimmer:
-                from egammaRec.egammaTrackSlimmer import egammaTrackSlimmer
-                egammaTrackSlimmer()
+                from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper
+                from egammaAlgs.egammaTrackSlimmerConfig import egammaTrackSlimmerCfg
+                CAtoGlobalWrapper(egammaTrackSlimmerCfg,ConfigFlags,StreamName='StreamAOD')
 
         if rec.doTau() and AODFlags.ThinTaus:
             # tau-related thinning: taus, clusters, cells, cell links, PFOs, tracks, vertices
diff --git a/Reconstruction/RecExample/RecExCommon/share/SystemRec_config.py b/Reconstruction/RecExample/RecExCommon/share/SystemRec_config.py
index 15985fc73894572bdcd85815556e2c19fc68b5c7..0e24aac02f907f36c80ac2a59003d8e8655e0e3d 100755
--- a/Reconstruction/RecExample/RecExCommon/share/SystemRec_config.py
+++ b/Reconstruction/RecExample/RecExCommon/share/SystemRec_config.py
@@ -23,11 +23,9 @@ AODFix_postCaloRec()
 
 #make the egammaTopoClusters containers, used for seeding
 if jobproperties.CaloRecFlags.doCaloTopoCluster():
-    from egammaAlgs.egammaTopoClusterCopier import egammaTopoClusterCopier
-    try:
-        egammaTopoClusterCopier()
-    except Exception:
-        treatExeption("could not get handle to egammaTopoClusterCopier")
+    from AthenaConfiguration.AllConfigFlags import ConfigFlags
+    from egammaAlgs.egammaTopoClusterCopierConfig import egammaTopoClusterCopierCfg
+    CAtoGlobalWrapper(egammaTopoClusterCopierCfg,ConfigFlags)
 
 #then run ID reco:
 
diff --git a/Reconstruction/RecExample/RecExRecoTest/share/RecExRecoTest_ART_egamma_fromESD.py b/Reconstruction/RecExample/RecExRecoTest/share/RecExRecoTest_ART_egamma_fromESD.py
index f66a2f13420cabc28b28f2c1c09d1bd764123c0b..98e7e057c5f8c0fa03a002877d48206c3ba2a42c 100644
--- a/Reconstruction/RecExample/RecExRecoTest/share/RecExRecoTest_ART_egamma_fromESD.py
+++ b/Reconstruction/RecExample/RecExRecoTest/share/RecExRecoTest_ART_egamma_fromESD.py
@@ -1,7 +1,13 @@
 #
-#  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 #
 
+from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.OldFlags2NewFlags import getNewConfigFlags
+from TrackToCalo.CaloExtensionBuilderAlgConfig import CaloExtensionBuilder
+from egammaConfig.egammaReconstructionConfig import (
+    egammaReconstructionCfg)
 from AthenaCommon.AlgSequence import AlgSequence
 topSequence = AlgSequence()
 
@@ -104,8 +110,6 @@ DetFlags.detdescr.Muon_setOn()
 DetFlags.detdescr.ID_setOn()
 DetFlags.detdescr.Calo_setOn()
 if hasattr(DetFlags,'BField_on'): DetFlags.detdescr.BField_setOn()
-from TrkDetDescrSvc.AtlasTrackingGeometrySvc import AtlasTrackingGeometrySvc
-AtlasTrackingGeometrySvc  = svcMgr.AtlasTrackingGeometrySvc
 
 from AtlasGeoModel import SetGeometryVersion
 from AtlasGeoModel import GeoModelInit
@@ -152,21 +156,23 @@ jobproperties.CaloCellFlags.doLArDeadOTXCorr=False
 
 include( "CaloRec/CaloTopoCluster_jobOptions.py" )
 
-from egammaAlgs.egammaTopoClusterCopier import egammaTopoClusterCopier
-try:
-   egammaTopoClusterCopier()
-except Exception:
-   treatExeption("could not get handle to egammaTopoClusterCopier")
+#egamma new config
+ConfigFlags = getNewConfigFlags()
+ConfigFlags.Egamma.Keys.Internal.EgammaTopoClusters = 'egammaTopoCluster'
+ConfigFlags.Egamma.Keys.Input.TopoClusters = 'CaloTopoCluster'
+ConfigFlags.lock()
 
-include( "McParticleAlgs/TruthParticleBuilder_jobOptions.py" )
+from egammaAlgs.egammaTopoClusterCopierConfig import egammaTopoClusterCopierCfg
+CAtoGlobalWrapper(egammaTopoClusterCopierCfg,ConfigFlags)
+
+include("McParticleAlgs/TruthParticleBuilder_jobOptions.py")
 
-from TrackToCalo.CaloExtensionBuilderAlgConfig import CaloExtensionBuilder
 #False tells it we don't want to extend Large Radius Tracks, only default InDetTrackParticles.
-CaloExtensionBuilder(False) 
+CaloExtensionBuilder(False)
 
-from egammaRec.egammaRecFlags import jobproperties
+# Add egamma
+CAtoGlobalWrapper(egammaReconstructionCfg, ConfigFlags)
 
-include( "egammaRec/egammaRec_jobOptions.py" )
 
 import AthenaPoolCnvSvc.WriteAthenaPool
 logRecoOutputItemList_jobOptions = logging.getLogger( 'py:RecoOutputItemList_jobOptions' )
diff --git a/Reconstruction/RecExample/RecExTB/share/RecExTB_H6_jobOptions.py b/Reconstruction/RecExample/RecExTB/share/RecExTB_H6_jobOptions.py
index 58c32b3e049479fc4e57fabec5696aa712b1ee8a..f2becdedf14bbcbf6d4ec9a8b949f3e9e3449154 100755
--- a/Reconstruction/RecExample/RecExTB/share/RecExTB_H6_jobOptions.py
+++ b/Reconstruction/RecExample/RecExTB/share/RecExTB_H6_jobOptions.py
@@ -850,7 +850,7 @@ if doCBNT:
    from CaloRec.CaloRecConf import CBNTAA_CaloCluster
    if doTopoClusterLocalCalib:
       CBNT_CaloClusterTopoEM = CBNTAA_CaloCluster("CBNT_CaloClusterTopoEM" )
-      CBNT_CaloClusterTopoEM.ClusterColl = "CaloTopoCluster"
+      CBNT_CaloClusterTopoEM.ClusterColl = "CaloTopoClusters"
       CBNT_CaloClusterTopoEM.Suffix = "_topo_em"
       CBNT_CaloClusterTopoEM.EMOnly = False
       CBNT_CaloClusterTopoEM.UseLink = True
diff --git a/Reconstruction/RecJobTransforms/python/RecoSteering.py b/Reconstruction/RecJobTransforms/python/RecoSteering.py
index c661a5f65bb87fe60f3a31d141e21bf7c863de0a..ecb6bc8a846a3aa23d686bd194e7615f31a92588 100644
--- a/Reconstruction/RecJobTransforms/python/RecoSteering.py
+++ b/Reconstruction/RecJobTransforms/python/RecoSteering.py
@@ -21,6 +21,10 @@ def RecoSteering(flags, tryConfiguringAll=False):
     else:
         from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
         acc.merge(PoolReadCfg(flags))
+        # Check if running on legacy inputs
+        if "EventInfo" not in flags.Input.Collections:
+            from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
+            acc.merge(EventInfoCnvAlgCfg(flags))
         log.info("---------- Configured POOL reading")
 
     # AOD2xAOD Truth conversion
@@ -43,7 +47,6 @@ def RecoSteering(flags, tryConfiguringAll=False):
         elif flags.Detector.GeometryITk:
             from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
             acc.merge(ITkTrackRecoCfg(flags))
-            return acc  # stop here for now with ITk
         log.info("---------- Configured tracking")
 
     # muons
@@ -58,12 +61,8 @@ def RecoSteering(flags, tryConfiguringAll=False):
         log.info("---------- Configured combined muon reconstruction")
 
     # Caching of CaloExtension for downstream Combined Performance algorithms.
-    if flags.Detector.GeometryID:
-        from TrackToCalo.CaloExtensionBuilderAlgCfg import CaloExtensionBuilderAlgCfg
-        acc.merge(CaloExtensionBuilderAlgCfg(flags))
-    elif flags.Detector.GeometryITk:
-        from TrackToCalo.ITkCaloExtensionBuilderAlgCfg import ITkCaloExtensionBuilderAlgCfg
-        acc.merge(ITkCaloExtensionBuilderAlgCfg(flags))
+    from TrackToCalo.CaloExtensionBuilderAlgCfg import CaloExtensionBuilderAlgCfg
+    acc.merge(CaloExtensionBuilderAlgCfg(flags))
     log.info("---------- Configured track calorimeter extension builder")
 
     if flags.Reco.EnableEgamma:
diff --git a/Reconstruction/RecoTools/TrackToCalo/python/CaloExtensionBuilderAlgCfg.py b/Reconstruction/RecoTools/TrackToCalo/python/CaloExtensionBuilderAlgCfg.py
index adec65038199b9a096ba0d3e5f22886ef8899045..24355b879ec442c4a7a6f5b424200344434500a8 100644
--- a/Reconstruction/RecoTools/TrackToCalo/python/CaloExtensionBuilderAlgCfg.py
+++ b/Reconstruction/RecoTools/TrackToCalo/python/CaloExtensionBuilderAlgCfg.py
@@ -1,14 +1,22 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 from AthenaConfiguration.ComponentFactory import CompFactory
 
-def CaloExtensionBuilderAlgCfg(inputFlags):
+def CaloExtensionBuilderAlgCfg(flags, **kwargs):
     from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg    
-    Trk__ParticleCaloExtensionTool = CompFactory.Trk.ParticleCaloExtensionTool
-    result = AtlasExtrapolatorCfg(inputFlags)
-    pcExtensionTool = Trk__ParticleCaloExtensionTool(Extrapolator = result.popPrivateTools())
-        
-    CaloExtensionBuilderAlg = CompFactory.Trk.CaloExtensionBuilderAlg 
-    CaloExtensionBuilderAlg = CaloExtensionBuilderAlg(LastCaloExtentionTool = pcExtensionTool)
-    result.addEventAlgo (CaloExtensionBuilderAlg)
-     
+    result = AtlasExtrapolatorCfg(flags)
+    kwargs.setdefault("LastCaloExtentionTool", CompFactory.Trk.ParticleCaloExtensionTool(Extrapolator=result.popPrivateTools()))
+
+    # P->T conversion extra dependencies
+    if flags.Detector.GeometryITk:
+        kwargs.setdefault("ExtraInputs", [
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkPixelDetectorElementCollection"),
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkStripDetectorElementCollection"),
+        ])
+    else:
+        kwargs.setdefault("ExtraInputs", [
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+PixelDetectorElementCollection"),
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+SCT_DetectorElementCollection"),
+        ])
+
+    result.addEventAlgo(CompFactory.Trk.CaloExtensionBuilderAlg(**kwargs))
     return result
diff --git a/Reconstruction/RecoTools/TrackToCalo/python/ITkCaloExtensionBuilderAlgCfg.py b/Reconstruction/RecoTools/TrackToCalo/python/ITkCaloExtensionBuilderAlgCfg.py
deleted file mode 100644
index ac00aaddd887e09a4c28d314c8fdcaee3b258ffe..0000000000000000000000000000000000000000
--- a/Reconstruction/RecoTools/TrackToCalo/python/ITkCaloExtensionBuilderAlgCfg.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-from AthenaConfiguration.ComponentFactory import CompFactory
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-
-def ITkCaloExtensionBuilderAlgCfg(inputFlags):
-    from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-    Trk__ParticleCaloExtensionTool = CompFactory.Trk.ParticleCaloExtensionTool
-    result = ComponentAccumulator()
-    pcExtensionTool = Trk__ParticleCaloExtensionTool(Extrapolator = result.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(inputFlags)))
-        
-    CaloExtensionBuilderAlg = CompFactory.Trk.CaloExtensionBuilderAlg 
-    CaloExtensionBuilderAlg = CaloExtensionBuilderAlg(LastCaloExtentionTool = pcExtensionTool,
-                                                      PixelDetEleCollKey="",
-                                                      SCTDetEleCollKey="",
-                                                      TRTDetEleContKey="")
-    result.addEventAlgo (CaloExtensionBuilderAlg)
-     
-    return result
diff --git a/Reconstruction/RecoTools/TrackToCalo/python/ITkTrackToCaloConfig.py b/Reconstruction/RecoTools/TrackToCalo/python/ITkTrackToCaloConfig.py
deleted file mode 100644
index 1f561f1ff142b788b398eee241cbc1a8b7b5134b..0000000000000000000000000000000000000000
--- a/Reconstruction/RecoTools/TrackToCalo/python/ITkTrackToCaloConfig.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = "Tool configuration for the track to calo tools."
-
-#---------------------------------------
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from AthenaConfiguration.ComponentFactory import CompFactory
-
-from TrkConfig.AtlasUpgradeExtrapolatorConfig import AtlasUpgradeExtrapolatorCfg
-
-def ITkParticleCaloExtensionToolCfg(flags, **kwargs):
-    acc=ComponentAccumulator()
-
-    if "Extrapolator" not in kwargs:
-        extrapAcc = AtlasUpgradeExtrapolatorCfg(flags)
-        kwargs["Extrapolator"] = acc.popToolsAndMerge(extrapAcc)
-
-    caloExtensionTool = CompFactory.Trk.ParticleCaloExtensionTool(**kwargs)
-
-    acc.setPrivateTools(caloExtensionTool)
-    return acc
-
-def ITkParticleCaloCellAssociationToolCfg(flags, **kwargs):
-    acc=ComponentAccumulator()
-
-    if "ParticleCaloExtensionTool" not in kwargs:
-        pcExtrapToolAcc = ITkParticleCaloExtensionToolCfg(flags)
-        kwargs["ParticleCaloExtensionTool"] = acc.popToolsAndMerge(pcExtrapToolAcc)
-
-    # should this be a more global flag? It depends on whether you are in AOD
-    kwargs.setdefault("CaloCellContainer", flags.Egamma.Keys.Input.CaloCells)
-
-    cellAssocTool = CompFactory.Rec.ParticleCaloCellAssociationTool(**kwargs)
-
-    acc.setPrivateTools(cellAssocTool)
-    return acc
-
-# Still to do, ParticleCaloClusterAssociationToolCfg and MuonCaloEnergyToolCfg
-# They still have public tools
-
-#---------------------------------------
-
diff --git a/Reconstruction/RecoTools/TrackToCalo/python/TrackToCaloConfig.py b/Reconstruction/RecoTools/TrackToCalo/python/TrackToCaloConfig.py
index 90da7e8f028146d5698882004c0d70cadfef1915..37054353368a3f22a0e0999a52ae0d123adde6e5 100644
--- a/Reconstruction/RecoTools/TrackToCalo/python/TrackToCaloConfig.py
+++ b/Reconstruction/RecoTools/TrackToCalo/python/TrackToCaloConfig.py
@@ -12,8 +12,7 @@ def ParticleCaloExtensionToolCfg(flags, **kwargs):
     acc=ComponentAccumulator()
 
     if "Extrapolator" not in kwargs:
-        extrapAcc = AtlasExtrapolatorCfg(flags)
-        kwargs["Extrapolator"] = acc.popToolsAndMerge(extrapAcc)
+        kwargs["Extrapolator"] = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
 
     caloExtensionTool = CompFactory.Trk.ParticleCaloExtensionTool(**kwargs)
 
diff --git a/Reconstruction/RecoTools/TrackToCalo/src/CaloExtensionBuilderAlg.h b/Reconstruction/RecoTools/TrackToCalo/src/CaloExtensionBuilderAlg.h
index 00e66d71ef76cc6e2088545b594fe0bf777abcb2..aacc7cefbd6ab22e8fb8c6631a7e38be26a85635 100644
--- a/Reconstruction/RecoTools/TrackToCalo/src/CaloExtensionBuilderAlg.h
+++ b/Reconstruction/RecoTools/TrackToCalo/src/CaloExtensionBuilderAlg.h
@@ -79,26 +79,6 @@ private:
     "InDetTrackParticles",
     "Container of tracks"
   };
-
-  // For P->T converters of ID tracks with Pixel
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection>
-    m_pixelDetEleCollKey{ this,
-                          "PixelDetEleCollKey",
-                          "PixelDetectorElementCollection",
-                          "Key of SiDetectorElementCollection for Pixel" };
-  // For P->T converters of ID tracks with SCT
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection>
-    m_SCTDetEleCollKey{ this,
-                        "SCTDetEleCollKey",
-                        "SCT_DetectorElementCollection",
-                        "Key of SiDetectorElementCollection for SCT" };
-  // For P->T converters of ID tracks with TRT
-  SG::ReadCondHandleKey<InDetDD::TRT_DetElementContainer> m_trtDetEleContKey{
-    this,
-    "TRTDetEleContKey",
-    "TRT_DetElementContainer",
-    "Key of TRT_DetElementContainer"
-  };
 };
 } // namespace Trk
 
diff --git a/Reconstruction/eflowRec/eflowRec/PFClusterSelectorTool.h b/Reconstruction/eflowRec/eflowRec/PFClusterSelectorTool.h
index 68db5d7b1819d340ac590fa3b17812e7143e3063..6a960233aac1bfb5b15679ccebebdd1ef1f8c67e 100644
--- a/Reconstruction/eflowRec/eflowRec/PFClusterSelectorTool.h
+++ b/Reconstruction/eflowRec/eflowRec/PFClusterSelectorTool.h
@@ -31,7 +31,7 @@ private:
   void retrieveLCCalCellWeight(const double& energy, const unsigned& index, std::map<IdentifierHash,double>& cellsWeight,const xAOD::CaloClusterContainer& caloCalClustersContainer,const CaloDetDescrManager& calo_dd_man);
   
   /** ReadHandleKey for the CaloClusterContainer to be used as input */
-  SG::ReadHandleKey<xAOD::CaloClusterContainer> m_caloClustersReadHandleKey{this,"clustersName","CaloTopoCluster","ReadHandleKey for the CaloClusterContainer to be used as input"};
+  SG::ReadHandleKey<xAOD::CaloClusterContainer> m_caloClustersReadHandleKey{this,"clustersName","CaloTopoClusters","ReadHandleKey for the CaloClusterContainer to be used as input"};
 
   /** ReadHandleKey for the CaloClusterContainer, at LC scale, to be used as input */
   SG::ReadHandleKey<xAOD::CaloClusterContainer> m_caloCalClustersReadHandleKey{this,"calClustersName","CaloCalTopoClusters","ReadHandleKey for the CaloClusterContainer, at LC scale, to be used as input"};  
diff --git a/Reconstruction/eflowRec/eflowRec/PFTrackSelector.h b/Reconstruction/eflowRec/eflowRec/PFTrackSelector.h
index 064d6f2ba70a86571464b1dcbf50a76da02054ac..99bba5270408ddbd5bd97ce024fdef7a58d9ed51 100644
--- a/Reconstruction/eflowRec/eflowRec/PFTrackSelector.h
+++ b/Reconstruction/eflowRec/eflowRec/PFTrackSelector.h
@@ -59,13 +59,6 @@ private:
 
   SG::ReadHandleKey<xAOD::VertexContainer> m_vertexKey { this, "VertexContainer", "PrimaryVertices", "primary vertex container" };
 
-  /** ReadCondHandleKey for Pixel detector elements. This is needed to read ESD and AOD in AthenaMT for P->T conversion of ID tracks. */  
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_pixelDetEleCollKey{this, "PixelDetEleCollKey", "PixelDetectorElementCollection", "Key of SiDetectorElementCollection for Pixel"};
-  /** ReadCondHandleKey for SCT detector elements. This is needed to read ESD and AOD in AthenaMT for P->T conversion of ID tracks. */  
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_SCTDetEleCollKey{this, "SCTDetEleCollKey", "SCT_DetectorElementCollection", "Key of SiDetectorElementCollection for SCT"};
-
-  SG::ReadCondHandleKey<InDetDD::TRT_DetElementContainer> m_trtDetEleContKey{this, "TRTDetEleContKey", "TRT_DetElementContainer", "Key of TRT_DetElementContainer"};
-
   /** ToolHandle for track extrapolation to calorimeter tool */
   ToolHandle<eflowTrackExtrapolatorBaseAlgTool> m_theTrackExtrapolatorTool{this,"trackExtrapolatorTool","Trk::ParticleCaloExtensionTool","ToolHandle for track extrapolation to calorimeter tool"};
 
diff --git a/Reconstruction/eflowRec/python/PFCfg.py b/Reconstruction/eflowRec/python/PFCfg.py
index f5dba4edd5efe1b5c5ed711c180ce87b909b5c8b..8e42e912991c4833f018aa283fed385661c42b1c 100644
--- a/Reconstruction/eflowRec/python/PFCfg.py
+++ b/Reconstruction/eflowRec/python/PFCfg.py
@@ -26,6 +26,19 @@ def PFTrackSelectorAlgCfg(inputFlags,algName,useCaching=True):
 
     PFTrackSelector.trackSelectionTool = TrackSelectionTool
 
+    # P->T conversion extra dependencies
+    if inputFlags.Detector.GeometryITk:
+        PFTrackSelector.ExtraInputs = [
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkPixelDetectorElementCollection"),
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkStripDetectorElementCollection"),
+        ]
+    else:
+        PFTrackSelector.ExtraInputs = [
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+PixelDetectorElementCollection"),
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+SCT_DetectorElementCollection"),
+            ("InDetDD::TRT_DetElementContainer", "ConditionStore+TRT_DetElementContainer"),
+        ]
+
     result.addEventAlgo (PFTrackSelector, primary=True)
 
     return result
diff --git a/Reconstruction/eflowRec/python/PFRun3Config.py b/Reconstruction/eflowRec/python/PFRun3Config.py
index 5dc196f3c783e07ae5eb0627c1d1db11e5de5749..8d899620278d866e59b670a8084e5713bef7175f 100644
--- a/Reconstruction/eflowRec/python/PFRun3Config.py
+++ b/Reconstruction/eflowRec/python/PFRun3Config.py
@@ -10,10 +10,7 @@ def getOfflinePFAlgorithm(inputFlags):
 
     from eflowRec.PFCfg import getPFClusterSelectorTool
 
-    #The name of the topoclusters is different in the new and old style configs.
     topoClustersName="CaloTopoClusters"
-    if inputFlags.PF.useRecExCommon:
-      topoClustersName="CaloTopoCluster"
 
     PFAlgorithm.PFClusterSelectorTool = getPFClusterSelectorTool(topoClustersName,"CaloCalTopoClusters","PFClusterSelectorTool")    
 
@@ -138,14 +135,14 @@ def PFCfg(inputFlags,**kwargs):
     result.addEventAlgo(getLCNeutralFlowElementCreatorAlgorithm(inputFlags,""))
 
     #Currently we do not have egamma reco in the run 3 config and hence there are no electrons/photons if not running from ESD or AOD
-    #So in new config only schedule from ESD/AOD, in old config always schedule it
-    if( (inputFlags.PF.useElPhotLinks and inputFlags.Input.Format == "POOL") or inputFlags.PF.useRecExCommon ):
+    #So in new config only schedule from ESD/AOD, in old config always schedule it if requested
+    if (inputFlags.PF.useElPhotLinks and (inputFlags.Input.Format == "POOL" or inputFlags.PF.useRecExCommon)):
         from eflowRec.PFCfg import getEGamFlowElementAssocAlgorithm        
         result.addEventAlgo(getEGamFlowElementAssocAlgorithm(inputFlags))
     
     #Currently we do not have muon reco in the run 3 config and hence there are no muons if not running from ESD or AOD
-    #So in new config only schedule from ESD/AOD, in old config always schedule it
-    if( (inputFlags.PF.useMuLinks and inputFlags.Input.Format == "POOL") or inputFlags.PF.useRecExCommon ):
+    #So in new config only schedule from ESD/AOD, in old config always schedule it if requested it
+    if (inputFlags.PF.useMuLinks and ((inputFlags.Input.Format == "POOL" and not ('StreamRDO' in inputFlags.Input.ProcessingTags or 'OutputStreamRDO' in inputFlags.Input.ProcessingTags)) or inputFlags.PF.useRecExCommon)):
         from eflowRec.PFCfg import getMuonFlowElementAssocAlgorithm
         result.addEventAlgo(getMuonFlowElementAssocAlgorithm(inputFlags))
 
diff --git a/Reconstruction/eflowRec/share/run_ESDPFlowRecoR22_EOverP.py b/Reconstruction/eflowRec/share/run_ESDPFlowRecoR22_EOverP.py
index 44ca372ad082f67c54b21f56b7be97c71db63b32..9bfd84c09dd7f915686df4efa43bacf269f3ba1d 100644
--- a/Reconstruction/eflowRec/share/run_ESDPFlowRecoR22_EOverP.py
+++ b/Reconstruction/eflowRec/share/run_ESDPFlowRecoR22_EOverP.py
@@ -19,8 +19,11 @@ recAlgs.doEFlow.set_Value_and_Lock(True)
 #Disable reco of trigger, egamma, muons and taus
 from RecExConfig.RecFlags import rec
 rec.doTrigger.set_Value_and_Lock(False)
-rec.doEgamma.set_Value_and_Lock(False)
-rec.doMuon.set_Value_and_Lock(False)
+# enable egamma reco
+rec.doEgamma.set_Value_and_Lock(True)
+# enable muon reco
+rec.doMuon.set_Value_and_Lock(True)
+#Disable tau reco
 rec.doTau.set_Value_and_Lock(False)
 
 #Disable linking of PFO/FE to and from other objects - this won't work because e.g electrons already have links to PFO/FE and
@@ -59,4 +62,4 @@ import AthenaCommon.PropertiesManip as manip
 manip.appendItemsToList(StreamAOD,'ItemList','xAOD::CaloClusterContainer#PFCaloCluster')
 manip.appendItemsToList(StreamAOD,'ItemList','xAOD::CaloClusterAuxContainer#PFCaloClusterAux.') 
 manip.appendItemsToList(StreamAOD,'ItemList','xAOD::TrackParticleContainer#InDetTrackParticles')
-manip.appendItemsToList(StreamAOD,'ItemList','xAOD::TrackParticleAuxContainer#InDetTrackParticlesAux.')
\ No newline at end of file
+manip.appendItemsToList(StreamAOD,'ItemList','xAOD::TrackParticleAuxContainer#InDetTrackParticlesAux.')
diff --git a/Reconstruction/eflowRec/src/PFTrackSelector.cxx b/Reconstruction/eflowRec/src/PFTrackSelector.cxx
index 5a32414c2909ad7489cb8817d534fe93728f88e8..42a8050a0dcfe11c6f1ea895866db67538bb728b 100644
--- a/Reconstruction/eflowRec/src/PFTrackSelector.cxx
+++ b/Reconstruction/eflowRec/src/PFTrackSelector.cxx
@@ -21,9 +21,6 @@ StatusCode PFTrackSelector::initialize(){
 
   ATH_CHECK(m_tracksReadHandleKey.initialize());
   ATH_CHECK(m_vertexKey.initialize());
-  ATH_CHECK(m_pixelDetEleCollKey.initialize());
-  ATH_CHECK(m_SCTDetEleCollKey.initialize());
-  ATH_CHECK(m_trtDetEleContKey.initialize());
 
   // Optional readhandlekeys for electrons and muons
   if(!m_electronsReadHandleKey.key().empty()) {
diff --git a/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilder.py b/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilder.py
deleted file mode 100644
index bd40a4795946a7c626c34d786076ec51c8c07062..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilder.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate  egammaBremCollectionBuilder
-with default configuration"""
-__author__ = "Christos"
-
-import InDetRecExample.TrackingCommon as TrackingCommon
-from AthenaCommon.DetFlags import DetFlags
-from AthenaCommon.Logging import logging
-# import base class
-from egammaAlgs import egammaAlgsConf
-from egammaRec import egammaKeys
-from egammaRec.Factories import AlgFactory
-from egammaTools.egammaExtrapolators import egammaExtrapolator, AtlasPublicExtrapolator
-# default configuration of the EMBremCollectionBuilder
-from InDetRecExample.InDetJobProperties import InDetFlags
-from InDetRecExample.InDetKeys import InDetKeys
-from RecExConfig.RecFlags import rec
-
-
-def AtlasTrackToVertexTool(name="AtlasTrackToVertexTool", **kwargs):
-    # @TODO switch to egammaExtrapolator ?
-    kwargs.setdefault("Extrapolator", AtlasPublicExtrapolator())
-    return TrackingCommon.getInDetTrackToVertexTool(name, **kwargs)
-
-
-class egammaBremCollectionBuilder (egammaAlgsConf.EMBremCollectionBuilder):
-    __slots__ = ()
-
-    def __init__(self, name="EMBremCollectionBuilder", **kw):
-        mlog = logging.getLogger(name + '::__init__')
-        mlog.info("entering")
-
-        super(egammaBremCollectionBuilder, self).__init__(name, **kw)
-
-        import egammaRec.EMCommonRefitter
-
-        # Extrapolator to be used for GSF
-        GSFBuildInDetExtrapolator = egammaExtrapolator()
-
-        # GsfReffiter
-        from egammaTrackTools.egammaTrackToolsConf import egammaTrkRefitterTool
-        GSFRefitterTool = egammaTrkRefitterTool(
-            name='GSFRefitterTool',
-            FitterTool=egammaRec.EMCommonRefitter.getGSFTrackFitter(),
-            useBeamSpot=False,
-            Extrapolator=GSFBuildInDetExtrapolator,
-            ReintegrateOutliers=True)
-
-        #
-        #  BLayer and Pixel Related Tools
-        #
-        GSFBuildTestBLayerTool = None
-        GSFBuildPixelToTPIDTool = None
-        if DetFlags.haveRIO.pixel_on():
-            GSFPixelConditionsSummaryTool = (
-                TrackingCommon.getInDetPixelConditionsSummaryTool())
-            if InDetFlags.usePixelDCS():
-                GSFPixelConditionsSummaryTool.IsActiveStates = [
-                    'READY', 'ON', 'UNKNOWN', 'TRANSITION', 'UNDEFINED']
-                GSFPixelConditionsSummaryTool.IsActiveStatus = [
-                    'OK', 'WARNING', 'ERROR', 'FATAL']
-
-            GSFBuildTestBLayerTool = TrackingCommon.getInDetRecTestBLayerTool(
-                name="GSFBuildTestBLayerTool",
-                PixelSummaryTool=GSFPixelConditionsSummaryTool,
-                Extrapolator=GSFBuildInDetExtrapolator,
-                private=True)
-
-            GSFBuildPixelToTPIDTool = TrackingCommon.getInDetPixelToTPIDTool(
-                name="GSFBuildPixelToTPIDTool",
-                private=True)
-        #
-        #  TRT_ElectronPidTool
-        #
-        GSFBuildTRT_ElectronPidTool = None
-        if DetFlags.haveRIO.TRT_on() and not InDetFlags.doHighPileup():
-            GSFBuildTRT_ElectronPidTool = (
-                TrackingCommon.getInDetTRT_ElectronPidTool(
-                    name="GSFBuildTRT_ElectronPidTool",
-                    CalculateNNPid=False,
-                    MinimumTrackPtForNNPid=0.,
-                    private=True))
-
-        #
-        #  InDet Track Summary Helper, no Association and no hole
-        #  as we do not redo them
-        #
-        GSFBuildTrackSummaryHelperTool = TrackingCommon.getInDetSummaryHelper(
-            name="GSFBuildTrackSummaryHelperTool",
-            AssoTool=None,
-            HoleSearch=None,
-            PixelToTPIDTool=GSFBuildPixelToTPIDTool,
-            TestBLayerTool=GSFBuildTestBLayerTool,
-            ClusterSplitProbabilityName=TrackingCommon.combinedClusterSplitProbName(),
-            DoSharedHits=False,
-            private=True)
-
-        #
-        #  TrkTrackSummaryTool: no shared hits  no hole search
-        #
-        GSFBuildInDetTrackSummaryTool = (
-            TrackingCommon.getInDetTrackSummaryTool(
-                name="GSFBuildInDetTrackSummaryTool",
-                InDetSummaryHelperTool=GSFBuildTrackSummaryHelperTool,
-                doSharedHits=False,
-                doHolesInDet=False,
-                TRT_ElectronPidTool=GSFBuildTRT_ElectronPidTool,
-                PixelToTPIDTool=GSFBuildPixelToTPIDTool,
-                private=True)
-        )
-
-        #
-        #  Track Particle Creator tool
-        #
-        from TrkParticleCreator.TrkParticleCreatorConf import (
-            Trk__TrackParticleCreatorTool)
-
-        GSFBuildInDetParticleCreatorTool = Trk__TrackParticleCreatorTool(
-            name="GSFBuildInDetParticleCreatorTool",
-            KeepParameters=True,
-            TrackToVertex=AtlasTrackToVertexTool(),
-            UseTrackSummaryTool=False)
-        #
-        #  Track slimming
-        #
-        from TrkTrackSlimmingTool.TrkTrackSlimmingToolConf import (
-            Trk__TrackSlimmingTool as ConfigurableTrackSlimmingTool)
-        GSFBuildInDetTrkSlimmingTool = ConfigurableTrackSlimmingTool(
-            name="GSFBuildInDetTrackSlimmingTool",
-            KeepParameters=False,
-            KeepOutliers=True)
-        #
-        #  Default Configuration
-        #
-        self.TrackRefitTool = GSFRefitterTool
-        self.TrackParticleCreatorTool = GSFBuildInDetParticleCreatorTool
-        self.TrackSlimmingTool = GSFBuildInDetTrkSlimmingTool
-        self.TrackSummaryTool = GSFBuildInDetTrackSummaryTool
-
-
-EMBremCollectionBuilder = AlgFactory(
-    egammaBremCollectionBuilder,
-    name='EMBremCollectionBuilder',
-    TrackParticleContainerName=InDetKeys.xAODTrackParticleContainer(),
-    SelectedTrackParticleContainerName="egammaSelectedTrackParticles",
-    OutputTrkPartContainerName=egammaKeys.outputTrackParticleKey(),
-    OutputTrackContainerName=egammaKeys.outputTrackKey(),
-    DoTruth=rec.doTruth(),
-    usePixel=DetFlags.haveRIO.pixel_on(),
-    useSCT=DetFlags.haveRIO.SCT_on()
-)
diff --git a/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilderConfig.py b/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilderConfig.py
index 25f8e4daabaa0d06668d400c05a409b5492a9f47..07b1c0aa13d8455d6410f3dc5f56014710af7cdf 100644
--- a/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilderConfig.py
+++ b/Reconstruction/egamma/egammaAlgs/python/EMBremCollectionBuilderConfig.py
@@ -13,22 +13,28 @@ def GSFTrackSummaryToolCfg(flags,
     acc = ComponentAccumulator()
 
     if "PixelToTPIDTool" not in kwargs:
-        kwargs["PixelToTPIDTool"] = CompFactory.InDet.PixelToTPIDTool(
-            name="GSFBuildPixelToTPIDTool")
+        if flags.Detector.EnablePixel:
+            kwargs["PixelToTPIDTool"] = CompFactory.InDet.PixelToTPIDTool(
+                name="GSFBuildPixelToTPIDTool")
+        else:
+            kwargs["PixelToTPIDTool"] = None
 
     # TODO what happens to
     # ClusterSplitProbabilityName=
     # TrackingCommon.combinedClusterSplitProbName() ?
     # It is "InDetTRT_SeededAmbiguityProcessorSplitProb" in run-2 config
     #         (because backTrk and TRTSA are run)
-    # It might be "AmbiguityProcessorSplitProb" in run-3 config (only one existing till now)
+    # It might be "AmbiguityProcessorSplitProb" in run-3 config
+    # (only one existing till now)
     if "InDetSummaryHelperTool" not in kwargs:
-        from InDetConfig.TrackingCommonConfig import (
-            InDetRecTestBLayerToolCfg)
-        testBLTool = acc.popToolsAndMerge(
-            InDetRecTestBLayerToolCfg(
-                flags,
-                name="GSFBuildTestBLayerTool"))
+        testBLTool = None
+        if flags.Detector.EnablePixel:
+            from InDetConfig.TrackingCommonConfig import (
+                InDetRecTestBLayerToolCfg)
+            testBLTool = acc.popToolsAndMerge(
+                InDetRecTestBLayerToolCfg(
+                    flags,
+                    name="GSFBuildTestBLayerTool"))
 
         from InDetConfig.InDetRecToolConfig import (
             InDetTrackSummaryHelperToolCfg)
@@ -43,14 +49,17 @@ def GSFTrackSummaryToolCfg(flags,
             ))
 
     if "TRT_ElectronPidTool" not in kwargs:
-        from InDetConfig.TRT_ElectronPidToolsConfig import (
-            TRT_ElectronPidToolCfg)
-        kwargs["TRT_ElectronPidTool"] = acc.popToolsAndMerge(
-            TRT_ElectronPidToolCfg(
-                flags,
-                name="GSFBuildTRT_ElectronPidTool",
-                CalculateNNPid=False,
-                MinimumTrackPtForNNPid=0.))
+        if flags.Detector.EnableTRT:
+            from InDetConfig.TRT_ElectronPidToolsConfig import (
+                TRT_ElectronPidToolCfg)
+            kwargs["TRT_ElectronPidTool"] = acc.popToolsAndMerge(
+                TRT_ElectronPidToolCfg(
+                    flags,
+                    name="GSFBuildTRT_ElectronPidTool",
+                    CalculateNNPid=False,
+                    MinimumTrackPtForNNPid=0.))
+        else:
+            kwargs["TRT_ElectronPidTool"] = None
 
     kwargs.setdefault("doSharedHits", False)
     kwargs.setdefault("doHolesInDet", False)
@@ -82,8 +91,9 @@ def EMBremCollectionBuilderCfg(flags,
             name="GSFBuildInDetParticleCreatorTool",
             KeepParameters=True,
             TrackToVertex=acc.popToolsAndMerge(TrackToVertexCfg(flags)),
-            UseTrackSummaryTool=False,
-            BadClusterID=0)
+            TrackSummaryTool="",
+            BadClusterID=0,
+            IBLParameterSvc="IBLParameterSvc" if flags.Detector.GeometryID else "")
         kwargs["TrackParticleCreatorTool"] = gsfTrackParticleCreatorTool
 
     if "TrackSlimmingTool" not in kwargs:
@@ -101,6 +111,18 @@ def EMBremCollectionBuilderCfg(flags,
     kwargs.setdefault("useSCT", flags.Detector.EnableSCT)
     kwargs.setdefault("DoTruth", flags.Input.isMC)
 
+    # P->T conversion extra dependencies
+    if flags.Detector.GeometryITk:
+        kwargs.setdefault("ExtraInputs", [
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkPixelDetectorElementCollection"),
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkStripDetectorElementCollection"),
+        ])
+    else:
+        kwargs.setdefault("ExtraInputs", [
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+PixelDetectorElementCollection"),
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+SCT_DetectorElementCollection"),
+        ])
+
     alg = CompFactory.EMBremCollectionBuilder(name, **kwargs)
     acc.addEventAlgo(alg)
     return acc
diff --git a/Reconstruction/egamma/egammaAlgs/python/EMGSFCaloExtensionBuilder.py b/Reconstruction/egamma/egammaAlgs/python/EMGSFCaloExtensionBuilder.py
deleted file mode 100644
index 23359d40c4986c4e5a671663d404e461b2bbdb59..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/EMGSFCaloExtensionBuilder.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate the
-              EMGSFCaloExtensionBuilder with default configuration"""
-__author__ = "Christos"
-
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import AlgFactory
-from egammaRec import egammaKeys
-from egammaTrackTools.egammaTrackToolsFactories import (
-    EMLastCaloExtensionTool, EMParticleCaloExtensionTool)
-
-EMGSFCaloExtensionBuilder = AlgFactory(
-    egammaAlgsConf.EMGSFCaloExtensionBuilder,
-    name='EMGSFCaloExtensionBuilder',
-    LastCaloExtensionTool=EMLastCaloExtensionTool,
-    PerigeeCaloExtensionTool=EMParticleCaloExtensionTool,
-    GSFPerigeeCache='GSFPerigeeCaloExtension',
-    GSFLastCache='GSFLastCaloExtension',
-    GFFTrkPartContainerName=egammaKeys.outputTrackParticleKey())
diff --git a/Reconstruction/egamma/egammaAlgs/python/EMVertexBuilder.py b/Reconstruction/egamma/egammaAlgs/python/EMVertexBuilder.py
deleted file mode 100644
index 3dc5b5097f1f8e6a471de97d3d442cef83b3fc3f..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/EMVertexBuilder.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate EMVertexBuilder
-with default configuration"""
-__author__ = "Bruno Lenzi"
-
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import FcnWrapper, AlgFactory
-from egammaRec import egammaKeys
-from egammaTrackTools.egammaTrackToolsFactories import EMExtrapolationTools
-from egammaTools.egammaExtrapolators import egammaExtrapolator
-
-
-class VertexFinderToolInstance(FcnWrapper):
-    def __call__(self):
-        #
-        # Configured conversion vertex reconstruction cuts
-        #
-        from InDetRecExample.ConfiguredSecondaryVertexCuts import (
-            ConfiguredSecondaryVertexCuts)
-
-        egammaConversionVertexCuts = ConfiguredSecondaryVertexCuts(
-            mode="EGammaPileUp")
-
-        from InDetRecExample.ConfiguredSecVertexFinding import (
-            ConfiguredSecVertexFinding)
-
-        theemvertexfindertool = ConfiguredSecVertexFinding(
-            prefix="egammaConversion",
-            VertexCuts=egammaConversionVertexCuts,
-            TrackParticles=egammaKeys.outputTrackParticleKey(),
-            SecVertices=egammaKeys.outputConversionKey(),
-            Extrapolator=egammaExtrapolator(),
-            printConfig=False)
-
-        return theemvertexfindertool.toolInstance()
-
-
-EMVertexBuilder = AlgFactory(
-    egammaAlgsConf.EMVertexBuilder,
-    InputTrackParticleContainerName=egammaKeys.outputTrackParticleKey(),
-    OutputConversionContainerName=egammaKeys.outputConversionKey(),
-    VertexFinderTool=VertexFinderToolInstance(),
-    ExtrapolationTool=EMExtrapolationTools)
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaForwardBuilderConfig.py b/Reconstruction/egamma/egammaAlgs/python/egammaForwardBuilderConfig.py
index 85b37d1df5a32597296096155d730d024c0b96de..768a731f7a47b0eed73304229921891d95d6f05a 100644
--- a/Reconstruction/egamma/egammaAlgs/python/egammaForwardBuilderConfig.py
+++ b/Reconstruction/egamma/egammaAlgs/python/egammaForwardBuilderConfig.py
@@ -69,6 +69,7 @@ if __name__ == "__main__":
     from AthenaConfiguration.ComponentAccumulator import printProperties
     from AthenaConfiguration.MainServicesConfig import MainServicesCfg
     flags.Input.Files = defaultTestFiles.RDO
+    flags.lock()
 
     acc = MainServicesCfg(flags)
     mlog = logging.getLogger("egammaForwardBuilderConfigTest")
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaLargeClusterMakerAlg.py b/Reconstruction/egamma/egammaAlgs/python/egammaLargeClusterMakerAlg.py
deleted file mode 100644
index 3323ec6ccf9762f4876cb3c74c45ee4df46c60ab..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/egammaLargeClusterMakerAlg.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate egammaLargeClusterMaker
-with default configuration"""
-__author__ = "Jovan Mitrevski"
-
-from egammaTools.egammaToolsFactories import egammaLargeClusterMakerTool
-from CaloRec import CaloRecConf
-from egammaRec.Factories import AlgFactory, FcnWrapper
-from egammaRec import egammaKeys
-from CaloClusterCorrection.CaloSwCorrections import make_CaloSwCorrections
-
-
-def clusMakerTools():
-    return [egammaLargeClusterMakerTool()]
-
-
-egammaLargeClusterMakerAlg = AlgFactory(
-    CaloRecConf.CaloClusterMaker,
-    name="egammaLargeClusterMaker",
-    SaveUncalibratedSignalState=False,
-    ClustersOutputName=egammaKeys.EgammaLargeClustersKey(),
-    ClusterMakerTools=FcnWrapper(clusMakerTools),
-    ClusterCorrectionTools=make_CaloSwCorrections(
-        "ele7_11",
-        suffix="Nocorr",
-        version="none",
-        cells_name=egammaKeys.caloCellKey()))
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlg.py b/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlg.py
deleted file mode 100644
index 55d7995fc77ce7bf75894266a0c028638a1d0a5f..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/egammaLargeFWDClusterMakerAlg.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate egammaLargeClusterMaker
-with FWD configuration"""
-__author__ = "Jovan Mitrevski"
-
-from egammaTools.egammaToolsFactories import egammaLargeFWDClusterMakerTool
-from CaloRec import CaloRecConf
-from egammaRec.Factories import AlgFactory, FcnWrapper
-from egammaRec import egammaKeys
-from CaloClusterCorrection.CaloSwCorrections import make_CaloSwCorrections
-
-
-def clusMakerTools():
-    return [egammaLargeFWDClusterMakerTool()]
-
-egammaLargeFWDClusterMakerAlg = AlgFactory(
-    CaloRecConf.CaloClusterMaker,
-    name="egammaLargeFWDClusterMaker",
-    SaveUncalibratedSignalState=False,
-    ClustersOutputName=egammaKeys.EgammaLargeFWDClustersKey(),
-    ClusterMakerTools=FcnWrapper(clusMakerTools),
-    ClusterCorrectionTools=make_CaloSwCorrections("FWDele6_6",
-                                                  suffix="Nocorr",
-                                                  version="none",
-                                                  corrlist=[],
-                                                  cells_name=egammaKeys.caloCellKey()))
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaRecBuilder.py b/Reconstruction/egamma/egammaAlgs/python/egammaRecBuilder.py
deleted file mode 100644
index 12f4289b4c15eaa1c0e71c9b0568099365b21679..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/egammaRecBuilder.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate
-egammaRecBuilder with default configuration"""
-__author__ = "Jovan Mitrevski"
-
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import AlgFactory
-from egammaRec.egammaRecFlags import jobproperties
-from egammaRec import egammaKeys
-
-from egammaTools.egammaToolsFactories import \
-    EMTrackMatchBuilder, EMConversionBuilder
-
-egammaRecBuilder = AlgFactory(
-    egammaAlgsConf.egammaRecBuilder,
-    name='egammaRecBuilder',
-    InputClusterContainerName=jobproperties.egammaRecFlags.egammaTopoClusterCollection(),
-    egammaRecContainer=egammaKeys.EgammaRecKey(),
-    # Builder tools
-    TrackMatchBuilderTool=EMTrackMatchBuilder,
-    ConversionBuilderTool=EMConversionBuilder
-)
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopy.py b/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopy.py
deleted file mode 100644
index 5ad301f2d2dbdad9b6744dfa3d3fb418a9b7517c..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopy.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate
-egammaSelectedTrackCopy with default configuration"""
-__author__ = "Christos"
-
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import ToolFactory, AlgFactory
-# to set jobproperties.egammaRecFlags
-from egammaRec.egammaRecFlags import jobproperties
-from egammaCaloTools.egammaCaloToolsFactories import (
-    egammaCheckEnergyDepositTool)
-from InDetRecExample.InDetKeys import InDetKeys
-from egammaTrackTools.egammaTrackToolsFactories import (
-    EMExtrapolationTools, EMExtrapolationToolsCommonCache)
-from egammaCaloTools import egammaCaloToolsConf
-
-egammaCaloClusterGSFSelector = ToolFactory(
-    egammaCaloToolsConf.egammaCaloClusterSelector,
-    name='caloClusterGSFSelector',
-    egammaCheckEnergyDepositTool=egammaCheckEnergyDepositTool,
-    EMEtCut=2250.,
-    EMEtSplittingFraction=0.7,
-    EMFCut=0.5
-)
-
-egammaSelectedTrackCopy = AlgFactory(
-    egammaAlgsConf.egammaSelectedTrackCopy,
-    name='egammaSelectedTrackCopy',
-    ExtrapolationTool=EMExtrapolationTools,
-    ExtrapolationToolCommonCache=EMExtrapolationToolsCommonCache,
-    ClusterContainerName=(
-        jobproperties.egammaRecFlags.egammaTopoClusterCollection()),
-    TrackParticleContainerName=InDetKeys.xAODTrackParticleContainer(),
-    egammaCaloClusterSelector=egammaCaloClusterGSFSelector
-)
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopyConfig.py b/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopyConfig.py
index 09a581ade2fdab38e444337418ad0331c73572a6..c026385db7d8f49688379d4904afd56ad144e50a 100644
--- a/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopyConfig.py
+++ b/Reconstruction/egamma/egammaAlgs/python/egammaSelectedTrackCopyConfig.py
@@ -42,6 +42,18 @@ def egammaSelectedTrackCopyCfg(
         "TrackParticleContainerName",
         flags.Egamma.Keys.Input.TrackParticles)
 
+    # P->T conversion extra dependencies
+    if flags.Detector.GeometryITk:
+        kwargs.setdefault("ExtraInputs", [
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkPixelDetectorElementCollection"),
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+ITkStripDetectorElementCollection"),
+        ])
+    else:
+        kwargs.setdefault("ExtraInputs", [
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+PixelDetectorElementCollection"),
+            ("InDetDD::SiDetectorElementCollection", "ConditionStore+SCT_DetectorElementCollection"),
+        ])
+
     egseltrkcpAlg = CompFactory.egammaSelectedTrackCopy(name, **kwargs)
 
     acc.addEventAlgo(egseltrkcpAlg)
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaSuperClusterBuilder.py b/Reconstruction/egamma/egammaAlgs/python/egammaSuperClusterBuilder.py
deleted file mode 100644
index dd260c0b99f185772cd84d32da7f01753ca84aeb..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/egammaSuperClusterBuilder.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate the
-two supercluster builders with default configuration"""
-__author__ = "Jovan Mitrevski"
-
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import AlgFactory
-from egammaRec import egammaKeys
-
-from egammaTools.egammaToolsFactories import (
-    EMTrackMatchBuilder, EMConversionBuilder, egammaSwTool, egammaMVASvc)
-
-from egammaCaloTools.egammaCaloToolsFactories import (
-    egammaCheckEnergyDepositTool)
-
-electronSuperClusterBuilder = AlgFactory(
-    egammaAlgsConf.electronSuperClusterBuilder,
-    name='electronSuperClusterBuilder',
-    InputEgammaRecContainerName=egammaKeys.EgammaRecKey(),
-    SuperElectronRecCollectionName=egammaKeys.ElectronSuperRecKey(),
-    ClusterCorrectionTool=egammaSwTool,
-    egammaCheckEnergyDepositTool=egammaCheckEnergyDepositTool,
-    MVACalibSvc=egammaMVASvc,
-    EtThresholdCut=1000,
-    TrackMatchBuilderTool=EMTrackMatchBuilder
-)
-
-photonSuperClusterBuilder = AlgFactory(
-    egammaAlgsConf.photonSuperClusterBuilder,
-    name='photonSuperClusterBuilder',
-    InputEgammaRecContainerName=egammaKeys.EgammaRecKey(),
-    SuperPhotonRecCollectionName=egammaKeys.PhotonSuperRecKey(),
-    ClusterCorrectionTool=egammaSwTool,
-    egammaCheckEnergyDepositTool=egammaCheckEnergyDepositTool,
-    MVACalibSvc=egammaMVASvc,
-    ConversionBuilderTool=EMConversionBuilder
-)
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaTopoClusterCopier.py b/Reconstruction/egamma/egammaAlgs/python/egammaTopoClusterCopier.py
deleted file mode 100644
index 5451f8b0c09e2b8b77ae5f94c4723337157668a3..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/egammaTopoClusterCopier.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """
-          ToolFactory to instantiate egammaTopoClusterCopier
-          with default configuration"""
-__author__ = "Jovan Mitrevski"
-
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import AlgFactory
-from egammaRec.egammaRecFlags import jobproperties
-
-egammaTopoClusterCopier = AlgFactory(
-    egammaAlgsConf.egammaTopoClusterCopier,
-    name='egammaTopoClusterCopier',
-    InputTopoCollection=(
-        jobproperties.egammaRecFlags.inputTopoClusterCollection()),
-    OutputTopoCollection=(
-        jobproperties.egammaRecFlags.egammaTopoClusterCollection()),
-    OutputTopoCollectionShallow="tmp_" +
-    jobproperties.egammaRecFlags.egammaTopoClusterCollection()
-)
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaTopoClusterCopierConfig.py b/Reconstruction/egamma/egammaAlgs/python/egammaTopoClusterCopierConfig.py
index f1d7b7a7a75f27286d4132eb9927f0c91a926b54..ce3d9fa479165fae9d72a8a6e8cfa281a681b5db 100644
--- a/Reconstruction/egamma/egammaAlgs/python/egammaTopoClusterCopierConfig.py
+++ b/Reconstruction/egamma/egammaAlgs/python/egammaTopoClusterCopierConfig.py
@@ -28,6 +28,14 @@ def egammaTopoClusterCopierCfg(
     egcopierAlg = CompFactory.egammaTopoClusterCopier(name, **kwargs)
 
     acc.addEventAlgo(egcopierAlg)
+
+    # To use within standard config
+    import inspect
+    stack = inspect.stack()
+    if len(stack) >= 2 and stack[1].function == 'CAtoGlobalWrapper':
+        for el in acc._allSequences:
+            el.name = "TopAlg"
+
     return acc
 
 
diff --git a/Reconstruction/egamma/egammaAlgs/python/egammaTrackSlimmerConfig.py b/Reconstruction/egamma/egammaAlgs/python/egammaTrackSlimmerConfig.py
index 3774a82967fa4c86de46026aee0fde987be65bab..0865a3f2b21cbae5d71f041fbde7a270a9336925 100755
--- a/Reconstruction/egamma/egammaAlgs/python/egammaTrackSlimmerConfig.py
+++ b/Reconstruction/egamma/egammaAlgs/python/egammaTrackSlimmerConfig.py
@@ -3,8 +3,6 @@
 from AthenaCommon.Logging import logging
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-egammaTrackSlimmer = CompFactory.egammaTrackSlimmer
-
 
 def egammaTrackSlimmerCfg(
         flags,
@@ -26,9 +24,15 @@ def egammaTrackSlimmerCfg(
     kwargs.setdefault("VertexContainerName",
                       flags.Egamma.Keys.Output.ConversionVertices)
 
-    egtrkslimmerAlg = egammaTrackSlimmer(name, **kwargs)
+    acc.addEventAlgo(CompFactory.egammaTrackSlimmer(name, **kwargs))
+
+    # To use egamma CA within standard config
+    import inspect
+    stack = inspect.stack()
+    if len(stack) >= 2 and stack[1].function == 'CAtoGlobalWrapper':
+        for el in acc._allSequences:
+            el.name = "TopAlg"
 
-    acc.addEventAlgo(egtrkslimmerAlg)
     return acc
 
 
diff --git a/Reconstruction/egamma/egammaAlgs/python/topoEgammaBuilder.py b/Reconstruction/egamma/egammaAlgs/python/topoEgammaBuilder.py
deleted file mode 100644
index d5fe403fd1b99205dd6ab2b4a1bacd83223f1f77..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaAlgs/python/topoEgammaBuilder.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate the
-two supercluster builders with default configuration"""
-__author__ = "Jovan Mitrevski"
-
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import AlgFactory
-from egammaRec import egammaKeys
-from RecExConfig.RecFlags import rec
-from egammaTools.egammaToolsFactories import EGammaAmbiguityTool
-
-topoEgammaBuilder = AlgFactory(
-    egammaAlgsConf.xAODEgammaBuilder,
-    name='topoEgammaBuilder',
-    InputElectronRecCollectionName=egammaKeys.ElectronSuperRecKey(),
-    InputPhotonRecCollectionName=egammaKeys.PhotonSuperRecKey(),
-    ElectronOutputName=egammaKeys.outputElectronKey(),
-    PhotonOutputName=egammaKeys.outputPhotonKey(),
-    AmbiguityTool=EGammaAmbiguityTool,
-    isTruth=rec.doTruth()
-)
diff --git a/Reconstruction/egamma/egammaAlgs/python/topoEgammaBuilderConfig.py b/Reconstruction/egamma/egammaAlgs/python/topoEgammaBuilderConfig.py
index 49c5deb458367796380e55affa1401e3bfb8be38..b9d4b62895a0c4d9281670ff2c5d9b4e1618fa67 100644
--- a/Reconstruction/egamma/egammaAlgs/python/topoEgammaBuilderConfig.py
+++ b/Reconstruction/egamma/egammaAlgs/python/topoEgammaBuilderConfig.py
@@ -78,6 +78,7 @@ if __name__ == "__main__":
     from AthenaConfiguration.ComponentAccumulator import printProperties
     from AthenaConfiguration.MainServicesConfig import MainServicesCfg
     flags.Input.Files = defaultTestFiles.RDO
+    flags.lock()
 
     acc = MainServicesCfg(flags)
     acc.merge(topoEgammaBuilderCfg(flags))
diff --git a/Reconstruction/egamma/egammaAlgs/src/EMBremCollectionBuilder.h b/Reconstruction/egamma/egammaAlgs/src/EMBremCollectionBuilder.h
index 96c34412a8a37639a1d89e7a3666d9bf68b517eb..83d4c243fd0cc36253eed2375090c8bf131da3f2 100644
--- a/Reconstruction/egamma/egammaAlgs/src/EMBremCollectionBuilder.h
+++ b/Reconstruction/egamma/egammaAlgs/src/EMBremCollectionBuilder.h
@@ -196,20 +196,6 @@ private:
     "Output GSF Trk::Tracks"
   };
 
-  // For P->T converters of ID tracks with Pixel
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection>
-    m_pixelDetEleCollKey{ this,
-                          "PixelDetEleCollKey",
-                          "PixelDetectorElementCollection",
-                          "Key of SiDetectorElementCollection for Pixel" };
-
-  // For P->T converters of ID tracks with SCT
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection>
-    m_SCTDetEleCollKey{ this,
-                        "SCTDetEleCollKey",
-                        "SCT_DetectorElementCollection",
-                        "Key of SiDetectorElementCollection for SCT" };
-
   // counters for final statistics
   mutable std::atomic_uint m_FailedFitTracks{ 0 };
   mutable std::atomic_uint m_RefittedTracks{ 0 };
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaSelectedTrackCopy.cxx b/Reconstruction/egamma/egammaAlgs/src/egammaSelectedTrackCopy.cxx
index c35550d62a6cb7dbfe345a8c37db2766ed435bfc..98e4a7f41defcfed0b9cc9c76d62bec502b0e978 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaSelectedTrackCopy.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaSelectedTrackCopy.cxx
@@ -53,10 +53,6 @@ egammaSelectedTrackCopy::initialize()
   ATH_CHECK(m_trackParticleContainerKey.initialize());
   ATH_CHECK(m_OutputTrkPartContainerKey.initialize());
 
-  // needed to load conditions
-  ATH_CHECK(m_pixelDetEleCollKey.initialize());
-  ATH_CHECK(m_SCTDetEleCollKey.initialize());
-
   /* the extrapolation tool*/
   ATH_CHECK(m_extrapolationTool.retrieve());
   ATH_CHECK(m_extrapolationToolCommonCache.retrieve());
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaSelectedTrackCopy.h b/Reconstruction/egamma/egammaAlgs/src/egammaSelectedTrackCopy.h
index 787bb56b05fcec2fcc9f7b9b424c9062afbcd30f..2c9d0818fb4b3e6cd578cefadbd4d92e822fb0be 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaSelectedTrackCopy.h
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaSelectedTrackCopy.h
@@ -165,19 +165,6 @@ private:
     "Value of the narrow cut for delta phi Rescale Brem"
   };
 
-  // For P->T converters of ID tracks with Pixel
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection>
-    m_pixelDetEleCollKey{ this,
-                          "PixelDetEleCollKey",
-                          "PixelDetectorElementCollection",
-                          "Key of SiDetectorElementCollection for Pixel" };
-  // For P->T converters of ID tracks with SCT
-  SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection>
-    m_SCTDetEleCollKey{ this,
-                        "SCTDetEleCollKey",
-                        "SCT_DetectorElementCollection",
-                        "Key of SiDetectorElementCollection for SCT" };
-
   mutable Gaudi::Accumulators::Counter<> m_AllClusters;
   mutable Gaudi::Accumulators::Counter<> m_SelectedClusters;
   mutable Gaudi::Accumulators::Counter<> m_AllTracks;
diff --git a/Reconstruction/egamma/egammaAlgs/src/egammaTopoClusterCopier.h b/Reconstruction/egamma/egammaAlgs/src/egammaTopoClusterCopier.h
index eb245c51690151a5537893541db17c1e14c2c3b9..6a4523c58a4a77079d8b742510b885c5efaaa997 100644
--- a/Reconstruction/egamma/egammaAlgs/src/egammaTopoClusterCopier.h
+++ b/Reconstruction/egamma/egammaAlgs/src/egammaTopoClusterCopier.h
@@ -50,7 +50,7 @@ public:
 private:
 
   SG::ReadHandleKey<xAOD::CaloClusterContainer> m_inputTopoCollection {this,
-      "InputTopoCollection", "CaloTopoCluster", "input topocluster collection"};
+      "InputTopoCollection", "CaloTopoClusters", "input topocluster collection"};
 
   SG::WriteHandleKey<xAOD::CaloClusterContainer> m_outputTopoCollectionShallow {this,
       "OutputTopoCollectionShallow", "tmp_egammaTopoCluster",
diff --git a/Reconstruction/egamma/egammaAlgs/src/xAODEgammaBuilder.cxx b/Reconstruction/egamma/egammaAlgs/src/xAODEgammaBuilder.cxx
index f819cf310d77e2389d610c19e83d7a2dbd7a6e94..82d19044ede1511bac94488ca56a02ec073569bf 100644
--- a/Reconstruction/egamma/egammaAlgs/src/xAODEgammaBuilder.cxx
+++ b/Reconstruction/egamma/egammaAlgs/src/xAODEgammaBuilder.cxx
@@ -23,8 +23,8 @@
 
 #include <algorithm>
 #include <cmath>
-#include <vector>
 #include <memory>
+#include <vector>
 
 xAODEgammaBuilder::xAODEgammaBuilder(const std::string& name,
                                      ISvcLocator* pSvcLocator)
@@ -39,8 +39,8 @@ xAODEgammaBuilder::initialize()
   // the data handle keys
   ATH_CHECK(m_electronClusterRecContainerKey.initialize(m_doElectrons));
   ATH_CHECK(m_photonClusterRecContainerKey.initialize(m_doPhotons));
-  ATH_CHECK(m_electronOutputKey.initialize());
-  ATH_CHECK(m_photonOutputKey.initialize());
+  ATH_CHECK(m_electronOutputKey.initialize(m_doElectrons));
+  ATH_CHECK(m_photonOutputKey.initialize(m_doPhotons));
   ATH_CHECK(m_caloDetDescrMgrKey.initialize());
 
   // retrieve tools
@@ -57,15 +57,15 @@ xAODEgammaBuilder::initialize()
   m_doOQ = !m_egammaOQTool.empty();
   if (m_doOQ) {
     ATH_CHECK(m_egammaOQTool.retrieve());
-  }else{
+  } else {
     m_egammaOQTool.disable();
   }
 
-  //do we actually do ambiguity
+  // do we actually do ambiguity
   m_doAmbiguity = !m_ambiguityTool.empty();
   if (m_doElectrons && m_doPhotons && m_doAmbiguity) {
     ATH_CHECK(m_ambiguityTool.retrieve());
-  }else{
+  } else {
     m_ambiguityTool.disable();
   }
   m_doDummyElectrons = !(m_dummyElectronOutputKey.empty());
@@ -88,30 +88,39 @@ xAODEgammaBuilder::execute(const EventContext& ctx) const
   xAOD::ElectronContainer* electrons = nullptr;
   xAOD::PhotonContainer* photons = nullptr;
   /*
-   * From here one if a Read/Write handle is retrieved the above will be !=
+   * From here on if a Read/Write handle
+   * is retrieved the above will be !=
    * nullptr for electron or photons or both
    */
+  std::optional<SG::WriteHandle<xAOD::ElectronContainer>> electronContainer;
+  std::optional<SG::WriteHandle<xAOD::PhotonContainer>> photonContainer;
+
   if (m_doElectrons) {
-    SG::ReadHandle<EgammaRecContainer> electronSuperRecs(m_electronClusterRecContainerKey, ctx);
+    SG::ReadHandle<EgammaRecContainer> electronSuperRecs(
+      m_electronClusterRecContainerKey, ctx);
     inputElRecs = electronSuperRecs.ptr();
+
+    electronContainer.emplace(m_electronOutputKey, ctx);
+
+    ATH_CHECK(electronContainer->record(
+      std::make_unique<xAOD::ElectronContainer>(),
+      std::make_unique<xAOD::ElectronAuxContainer>()));
+
+    electrons = electronContainer->ptr();
   }
   if (m_doPhotons) {
-    SG::ReadHandle<EgammaRecContainer> photonSuperRecs(m_photonClusterRecContainerKey, ctx);
+    SG::ReadHandle<EgammaRecContainer> photonSuperRecs(
+      m_photonClusterRecContainerKey, ctx);
     inputPhRecs = photonSuperRecs.ptr();
-  }
-
-  SG::WriteHandle<xAOD::ElectronContainer> electronContainer(m_electronOutputKey, ctx);
 
-  ATH_CHECK(electronContainer.record(std::make_unique<xAOD::ElectronContainer>(),
-                                     std::make_unique<xAOD::ElectronAuxContainer>()));
+    photonContainer.emplace(m_photonOutputKey, ctx);
 
-  SG::WriteHandle<xAOD::PhotonContainer> photonContainer(m_photonOutputKey,ctx);
+    ATH_CHECK(
+      photonContainer->record(std::make_unique<xAOD::PhotonContainer>(),
+                              std::make_unique<xAOD::PhotonAuxContainer>()));
 
-  ATH_CHECK(photonContainer.record(std::make_unique<xAOD::PhotonContainer>(),
-                                   std::make_unique<xAOD::PhotonAuxContainer>()));
-
-  electrons = electronContainer.ptr();
-  photons = photonContainer.ptr();
+    photons = photonContainer->ptr();
+  }
 
   /*
    * Now fill the electrons and photons
@@ -194,18 +203,20 @@ xAODEgammaBuilder::execute(const EventContext& ctx) const
     }
   }
 
-  SG::ReadCondHandle<CaloDetDescrManager> caloDetDescrMgrHandle { m_caloDetDescrMgrKey, ctx };
+  SG::ReadCondHandle<CaloDetDescrManager> caloDetDescrMgrHandle{
+    m_caloDetDescrMgrKey, ctx
+  };
   ATH_CHECK(caloDetDescrMgrHandle.isValid());
   const CaloDetDescrManager* calodetdescrmgr = *caloDetDescrMgrHandle;
 
   // Shower Shapes
   if (m_doElectrons) {
-    for (xAOD::Electron* electron : *electronContainer) {
+    for (xAOD::Electron* electron : *electrons) {
       ATH_CHECK(m_ShowerTool->execute(ctx, *calodetdescrmgr, electron));
     }
   }
   if (m_doPhotons) {
-    for (xAOD::Photon* photon : *photonContainer) {
+    for (xAOD::Photon* photon : *photons) {
       ATH_CHECK(m_ShowerTool->execute(ctx, *calodetdescrmgr, photon));
     }
   }
@@ -213,63 +224,63 @@ xAODEgammaBuilder::execute(const EventContext& ctx) const
   // Object Quality
   if (m_doOQ) {
     if (m_doElectrons) {
-      for (xAOD::Electron* electron : *electronContainer) {
+      for (xAOD::Electron* electron : *electrons) {
         ATH_CHECK(m_egammaOQTool->execute(ctx, *calodetdescrmgr, *electron));
       }
     }
     if (m_doPhotons) {
-      for (xAOD::Photon* photon : *photonContainer) {
+      for (xAOD::Photon* photon : *photons) {
         ATH_CHECK(m_egammaOQTool->execute(ctx, *calodetdescrmgr, *photon));
       }
     }
   }
 
   // Calibration
-  if (m_clusterTool->contExecute(ctx,electrons, photons)
-        .isFailure()) {
+  if (m_clusterTool->contExecute(ctx, electrons, photons).isFailure()) {
     ATH_MSG_ERROR("Problem executing the " << m_clusterTool << " tool");
     return StatusCode::FAILURE;
   }
 
   // Tools for ToolHandleArrays
   // First common photon/electron tools*/
-  for (const auto & tool : m_egammaTools) {
+  for (const auto& tool : m_egammaTools) {
     ATH_CHECK(CallTool(ctx, tool, electrons, photons));
   }
   // Tools for only electrons
   if (m_doElectrons) {
-    for (const auto & tool : m_electronTools) {
+    for (const auto& tool : m_electronTools) {
       ATH_CHECK(CallTool(ctx, tool, electrons, nullptr));
     }
   }
   // Tools for only photons
   if (m_doPhotons) {
-    for (const auto & tool : m_photonTools) {
+    for (const auto& tool : m_photonTools) {
       ATH_CHECK(CallTool(ctx, tool, nullptr, photons));
     }
   }
   // Do the ambiguity Links
   if (m_doElectrons && m_doPhotons) {
-    ATH_CHECK(doAmbiguityLinks(ctx,electrons, photons));
+    ATH_CHECK(doAmbiguityLinks(ctx, electrons, photons));
   }
 
-  if (m_doDummyElectrons){
-    SG::WriteHandle<xAOD::ElectronContainer> dummyElectronContainer(m_dummyElectronOutputKey, ctx);
-    ATH_CHECK(dummyElectronContainer.record(std::make_unique<xAOD::ElectronContainer>(),
-                                     std::make_unique<xAOD::ElectronAuxContainer>()));
+  if (m_doDummyElectrons) {
+    SG::WriteHandle<xAOD::ElectronContainer> dummyElectronContainer(
+      m_dummyElectronOutputKey, ctx);
+    ATH_CHECK(dummyElectronContainer.record(
+      std::make_unique<xAOD::ElectronContainer>(),
+      std::make_unique<xAOD::ElectronAuxContainer>()));
 
-    xAOD::Electron* dummy= new xAOD::Electron();
+    xAOD::Electron* dummy = new xAOD::Electron();
     dummyElectronContainer->push_back(dummy);
-}
+  }
 
   return StatusCode::SUCCESS;
 }
 
 StatusCode
-xAODEgammaBuilder::doAmbiguityLinks(
-  const EventContext& ctx,
-  xAOD::ElectronContainer* electronContainer,
-  xAOD::PhotonContainer* photonContainer) 
+xAODEgammaBuilder::doAmbiguityLinks(const EventContext& ctx,
+                                    xAOD::ElectronContainer* electronContainer,
+                                    xAOD::PhotonContainer* photonContainer)
 {
 
   /// Needs the same logic as the ambiguity after building the objects (make
@@ -298,8 +309,8 @@ xAODEgammaBuilder::doAmbiguityLinks(
 
       if (caloClusterLinks(*(electron->caloCluster())).at(0) ==
           caloClusterLinks(*(photon->caloCluster())).at(0)) {
-        ElementLink<xAOD::EgammaContainer> link(*electronContainer,
-                                                electronIndex,ctx);
+        ElementLink<xAOD::EgammaContainer> link(
+          *electronContainer, electronIndex, ctx);
         ELink(*photon) = link;
         break;
       }
@@ -365,7 +376,7 @@ xAODEgammaBuilder::getElectron(const egammaRec* egRec,
                                const uint8_t type) const
 {
 
-  if (!egRec || !electronContainer){
+  if (!egRec || !electronContainer) {
     return false;
   }
 
@@ -447,7 +458,7 @@ xAODEgammaBuilder::getPhoton(const egammaRec* egRec,
                              const unsigned int author,
                              const uint8_t type) const
 {
-  if (!egRec || !photonContainer){
+  if (!egRec || !photonContainer) {
     return false;
   }
 
diff --git a/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsConfig.py b/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsConfig.py
index 269cf7d4babdc5289604e43a6cb1115a38eb2dd0..75b94fb9ff9d0f575712259844bd81c594059a64 100644
--- a/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsConfig.py
+++ b/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsConfig.py
@@ -1,21 +1,22 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
-__doc__ = "Tool configuration to instantiate all egammaCaloTools with default configuration."
+__doc__ = """
+Tool configuration to instantiate
+all egammaCaloTools with default configuration.
+"""
 
-#---------------------------------------
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
 
+
 def CaloFillRectangularClusterCfg(flags):
-    result=ComponentAccumulator()
+    result = ComponentAccumulator()
 
-    CaloFillRectangularCluster=CompFactory.CaloFillRectangularCluster
-    caloFillRectangularCluster = CaloFillRectangularCluster(eta_size = 5,
-                                                            phi_size = 7,
-                                                            cells_name = flags.Egamma.Keys.Input.CaloCells)
+    CaloFillRectangularCluster = CompFactory.CaloFillRectangularCluster
+    caloFillRectangularCluster = CaloFillRectangularCluster(
+        eta_size=5,
+        phi_size=7,
+        cells_name=flags.Egamma.Keys.Input.CaloCells)
 
     result.setPrivateTools(caloFillRectangularCluster)
     return result
-
-#---------------------------------------
-
diff --git a/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsFactories.py b/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsFactories.py
index 70c72c7c5feca0c0a011b1fde01bd746cc2c90ae..c9bb730d3ba2e02af787582fdb596c963bcd8e5f 100644
--- a/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsFactories.py
+++ b/Reconstruction/egamma/egammaCaloTools/python/egammaCaloToolsFactories.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
 from CaloClusterCorrection import CaloClusterCorrectionConf as Cccc
 __doc__ = """ToolFactories to instantiate all
@@ -9,7 +9,6 @@ from egammaRec.Factories import ToolFactory
 from egammaCaloTools import egammaCaloToolsConf
 from egammaRec import egammaKeys
 
-# ---------------------------------------
 
 egammaShowerShape = ToolFactory(
     egammaCaloToolsConf.egammaShowerShape,
@@ -35,6 +34,3 @@ egammaIso = ToolFactory(
 
 egammaCheckEnergyDepositTool = ToolFactory(
     egammaCaloToolsConf.egammaCheckEnergyDepositTool)
-
-
-# ---------------------------------------
diff --git a/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py b/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py
index a638b7790644231aacc1b552f6d36bc5c5303408..d39ce8ca43eed31a1e42fabb9aee30062b45d1c8 100644
--- a/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py
+++ b/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py
@@ -19,7 +19,9 @@ def createEgammaConfigFlags():
 
     # run the GSF refitting/egamma Tracking it is calo seeded
     egcf.addFlag("Egamma.doTracking",
-                 lambda prevFlags: prevFlags.Detector.EnableID
+                 lambda prevFlags: (
+                     prevFlags.Detector.EnableID
+                     or prevFlags.Detector.EnableITk)
                  and prevFlags.Detector.EnableCalo)
 
     # build photon conversion vertices
@@ -60,18 +62,13 @@ def createEgammaConfigFlags():
     egcf.addFlag("Egamma.Keys.Internal.ElectronSuperRecs",
                  'ElectronSuperRecCollection')
 
-    # These are the clusters that are used to determine
-    # which cells to write out to AOD
-    egcf.addFlag("Egamma.Keys.Output.EgammaLargeClusters", 'egamma711Clusters')
-    egcf.addFlag("Egamma.Keys.Output.EgammaLargeClustersSuppESD", '')
-    # don't define SuppAOD because the whole container is suppressed
-
     egcf.addFlag("Egamma.Keys.Output.ConversionVertices",
                  'GSFConversionVertices')
     egcf.addFlag("Egamma.Keys.Output.ConversionVerticesSuppESD",
                  '-vxTrackAtVertex')
     egcf.addFlag("Egamma.Keys.Output.ConversionVerticesSuppAOD",
-                 '-vxTrackAtVertex')
+                 lambda prevFlags: (
+                     prevFlags.Egamma.Keys.Output.ConversionVerticesSuppESD))
 
     egcf.addFlag("Egamma.Keys.Output.CaloClusters", 'egammaClusters')
     egcf.addFlag("Egamma.Keys.Output.CaloClustersSuppESD", '')
@@ -80,50 +77,61 @@ def createEgammaConfigFlags():
     egcf.addFlag("Egamma.Keys.Output.Electrons", 'Electrons')
     egcf.addFlag("Egamma.Keys.Output.ElectronsSuppESD", '')
     egcf.addFlag("Egamma.Keys.Output.ElectronsSuppAOD",
-                 "-e033.-e011.-e333.-e335.-e337.-e377."
-                 "-EgammaCovarianceMatrix."
-                 "-isEMLHLoose.-isEMLHTight.-isEMLHMedium."
-                 "-isEMLoose.-isEMMedium.-isEMTight")
+                 lambda prevFlags: (
+                     prevFlags.Egamma.Keys.Output.ElectronsSuppESD +
+                     "-e033.-e011.-e333.-e335.-e337.-e377."
+                     "-EgammaCovarianceMatrix."
+                     "-isEMLHLoose.-isEMLHTight.-isEMLHMedium."
+                     "-isEMLoose.-isEMMedium.-isEMTight"))
 
     egcf.addFlag("Egamma.Keys.Input.ForwardTopoClusters",
                  'CaloCalTopoClusters')
     egcf.addFlag("Egamma.Keys.Output.ForwardElectrons", 'ForwardElectrons')
     egcf.addFlag("Egamma.Keys.Output.ForwardElectronsSuppESD", '')
     egcf.addFlag("Egamma.Keys.Output.ForwardElectronsSuppAOD",
-                 '-isEMTight.-isEMMedium.-isEMLoose')
+                 lambda prevFlags: (
+                     prevFlags.Egamma.Keys.Output.ForwardElectronsSuppESD +
+                     '-isEMTight.-isEMMedium.-isEMLoose'))
 
     egcf.addFlag("Egamma.Keys.Output.ForwardClusters",
                  'ForwardElectronClusters')
     egcf.addFlag("Egamma.Keys.Output.ForwardClustersSuppESD", '-SisterCluster')
     egcf.addFlag("Egamma.Keys.Output.ForwardClustersSuppAOD",
-                 '-SisterCluster')
-
-    # These are the clusters that are used to determine
-    # which cells to write out to AOD
-    egcf.addFlag("Egamma.Keys.Output.EgammaLargeFWDClusters",
-                 'egamma66FWDClusters')
-    egcf.addFlag("Egamma.Keys.Output.EgammaLargeFWDClustersSuppESD", '')
-    # don't define SuppAOD because the whole container is suppressed
+                 lambda prevFlags: (
+                     prevFlags.Egamma.Keys.Output.ForwardClustersSuppESD))
 
     egcf.addFlag("Egamma.Keys.Output.Photons", 'Photons')
     egcf.addFlag("Egamma.Keys.Output.PhotonsSuppESD", '')
     egcf.addFlag("Egamma.Keys.Output.PhotonsSuppAOD",
-                 '-e033.-e011.-e333.-e335.-e337.-e377.-isEMLoose.-isEMTight')
+                 lambda prevFlags: (
+                     prevFlags.Egamma.Keys.Output.PhotonsSuppESD +
+                     '-e033.-e011.-e333.-e335.-e337.-e377.'
+                     '-isEMLoose.-isEMTight'))
 
     egcf.addFlag("Egamma.Keys.Output.GSFTrackParticles", 'GSFTrackParticles')
-    egcf.addFlag("Egamma.Keys.Output.GSFTrackParticlesSuppESD",
-                 "-caloExtension.-cellAssociation."
-                 "-perigeeExtrapEta.-perigeeExtrapPhi")
+    egcf.addFlag("Egamma.Keys.Output.GSFTrackParticlesSuppESD", '')
     egcf.addFlag("Egamma.Keys.Output.GSFTrackParticlesSuppAOD",
-                 '-caloExtension.-cellAssociation.'
-                 '-perigeeExtrapEta.-perigeeExtrapPhi')
+                 lambda prevFlags: (
+                     prevFlags.Egamma.Keys.Output.GSFTrackParticlesSuppESD))
+
+    egcf.addFlag("Egamma.Keys.Output.TruthParticles", 'egammaTruthParticles')
+    egcf.addFlag("Egamma.Keys.Output.TruthParticlesSuppESD", '')
+    egcf.addFlag("Egamma.Keys.Output.TruthParticlesSuppAOD",
+                 lambda prevFlags: (
+                     prevFlags.Egamma.Keys.Output.TruthParticlesSuppESD))
 
     # not xAOD
     egcf.addFlag("Egamma.Keys.Output.GSFTracks", 'GSFTracks')
 
-    egcf.addFlag("Egamma.Keys.Output.TruthParticles", 'egammaTruthParticles')
-    egcf.addFlag("Egamma.Keys.Output.TruthParticlesSuppESD", '-caloExtension')
-    egcf.addFlag("Egamma.Keys.Output.TruthParticlesSuppAOD", '-caloExtension')
+    # These are the clusters that are used to determine
+    # which cells to write out to AOD
+    # don't define SuppAOD because the whole container is suppressed
+    egcf.addFlag("Egamma.Keys.Output.EgammaLargeClusters", 'egamma711Clusters')
+    egcf.addFlag("Egamma.Keys.Output.EgammaLargeClustersSuppESD", '')
+
+    egcf.addFlag("Egamma.Keys.Output.EgammaLargeFWDClusters",
+                 'egamma66FWDClusters')
+    egcf.addFlag("Egamma.Keys.Output.EgammaLargeFWDClustersSuppESD", '')
 
     return egcf
 
diff --git a/Reconstruction/egamma/egammaConfig/python/egammaLRTReconstructionConfig.py b/Reconstruction/egamma/egammaConfig/python/egammaLRTReconstructionConfig.py
index 71fffcd2b567b1349f97fd14f80701b2d7bec080..55090abb32fa8ce9e293b0dec1e7b3f7b2f322fd 100644
--- a/Reconstruction/egamma/egammaConfig/python/egammaLRTReconstructionConfig.py
+++ b/Reconstruction/egamma/egammaConfig/python/egammaLRTReconstructionConfig.py
@@ -25,7 +25,7 @@ def egammaLRTReconstructionCfg(flags, name="egammaLRTReconstruction"):
             EMExtrapolationToolsLRTCommonCacheCfg(flags))
         acc.merge(egammaSelectedTrackCopyCfg(
             flags,
-            name="egammaSelectedLRTTrackCopy",
+            name="LRTegammaSelectedTrackCopy",
             TrackParticleContainerName="InDetLargeD0TrackParticles",
             OutputTrkPartContainerName="LRTegammaSelectedTrackParticles",
             ExtrapolationToolCommonCache=emextLRTCommonCache)
@@ -35,7 +35,7 @@ def egammaLRTReconstructionCfg(flags, name="egammaLRTReconstruction"):
             EMBremCollectionBuilderCfg)
         acc.merge(EMBremCollectionBuilderCfg(
             flags,
-            name='EMLRTBremCollectionBuilder',
+            name='LRTEMBremCollectionBuilder',
             TrackParticleContainerName='InDetLargeD0TrackParticles',
             SelectedTrackParticleContainerName='LRTegammaSelectedTrackParticles',
             OutputTrkPartContainerName='LRT'+flags.Egamma.Keys.Output.GSFTrackParticles,
@@ -46,7 +46,7 @@ def egammaLRTReconstructionCfg(flags, name="egammaLRTReconstruction"):
             EMGSFCaloExtensionBuilderCfg)
         acc.merge(EMGSFCaloExtensionBuilderCfg(
             flags,
-            name='EMGSFLRTCaloExtensionBuilder',
+            name='LRTEMGSFCaloExtensionBuilder',
             GSFPerigeeCache='LRTGSFPerigeeCaloExtension',
             GSFLastCache='LRTGSFLastCaloExtension',
             GFFTrkPartContainerName='LRT'+flags.Egamma.Keys.Output.GSFTrackParticles)
diff --git a/Reconstruction/egamma/egammaConfig/python/egammaOnlyFromRawFlags.py b/Reconstruction/egamma/egammaConfig/python/egammaOnlyFromRawFlags.py
index 6b3323dfb5c2b58deb499ea5712da0b78e863b57..930bd32315b671fbc92f1b093b829edfddd4bbae 100644
--- a/Reconstruction/egamma/egammaConfig/python/egammaOnlyFromRawFlags.py
+++ b/Reconstruction/egamma/egammaConfig/python/egammaOnlyFromRawFlags.py
@@ -1,7 +1,9 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
+
 def egammaOnlyFromRaw(flags):
     """egammaOnlyFromRaw flags for Reco_tf with CA"""
+    flags.Detector.GeometryMuon = False
     flags.Reco.EnableMuon = False
     flags.Reco.EnableCombinedMuon = False
     flags.Reco.EnablePFlow = False
diff --git a/Reconstruction/egamma/egammaMVACalib/CMakeLists.txt b/Reconstruction/egamma/egammaMVACalib/CMakeLists.txt
index 8155feb9d49601602f4915bfe112f86690cba922..b218ff580b9da389f7bbab83a4ad3ea7972ccc6f 100644
--- a/Reconstruction/egamma/egammaMVACalib/CMakeLists.txt
+++ b/Reconstruction/egamma/egammaMVACalib/CMakeLists.txt
@@ -33,5 +33,11 @@ atlas_add_component( egammaMVACalib
 	LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps GaudiKernel egammaMVACalibLib)
 endif()
 
+if( NOT XAOD_ANALYSIS)
+atlas_add_test(egammaMVASvcConfigTest
+   SCRIPT python -m egammaMVACalib.egammaMVACalibConfig
+   POST_EXEC_SCRIPT nopost.sh)
+endif()
+
 # Install files from the package:
 atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
diff --git a/Reconstruction/egamma/egammaMVACalib/python/TrigEgammaMVACalibConfig.py b/Reconstruction/egamma/egammaMVACalib/python/TrigEgammaMVACalibConfig.py
deleted file mode 100644
index 844d9f2926139cd4019c9c70560e01c0a9b11ba7..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaMVACalib/python/TrigEgammaMVACalibConfig.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-from AthenaCommon.Logging import logging
-from AthenaConfiguration.ComponentFactory import CompFactory
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-egammaMVACalibTool, egammaMVASvc=CompFactory.getComps("egammaMVACalibTool","egammaMVASvc",)
-from xAODEgamma.xAODEgammaParameters import xAOD
-
-
-def TrigEgammaMVACalibCfg(flags, name="TrigEgammaMVASvc"):
-
-    mlog = logging.getLogger('TrigEgammaMVACalibConfig')
-    mlog.debug('Start configuration')
-
-    acc = ComponentAccumulator()
-
-    if flags.Trigger.egamma.calibMVAVersion is not None:
-        folder = flags.Trigger.egamma.calibMVAVersion
-        mlog.debug('MVA version: %s', folder)
-    else:
-        raise KeyError("Trigger.egamma.calibMVAVersion not set")
-
-    mlog.debug('Cluster Correction version: %s', flags.Trigger.egamma.clusterCorrectionVersion)
-
-    TrigElectronMVATool = egammaMVACalibTool(name="TrigElectronMVATool",
-                                             ParticleType=xAOD.EgammaParameters.electron,
-                                             folder=folder,
-                                             use_layer_corrected=False)
-
-    TrigPhotonMVATool = egammaMVACalibTool(name="TrigPhotonMVATool",
-                                           ParticleType=xAOD.EgammaParameters.unconvertedPhoton,
-                                           folder=folder,
-                                           use_layer_corrected=False)
-
-    TrigEgammaMVASvc = egammaMVASvc(name=name,
-                                    ElectronTool=TrigElectronMVATool,
-                                    UnconvertedPhotonTool=TrigPhotonMVATool)
-
-    acc.addService(TrigEgammaMVASvc, primary=True)
-    return acc
diff --git a/Reconstruction/egamma/egammaMVACalib/python/egammaMVACalibConfig.py b/Reconstruction/egamma/egammaMVACalib/python/egammaMVACalibConfig.py
index 8117b07208d0f312b9fd1aa4528846ef02f19d9b..7672c6221004d673a149f6e1e0a211ead1121be5 100644
--- a/Reconstruction/egamma/egammaMVACalib/python/egammaMVACalibConfig.py
+++ b/Reconstruction/egamma/egammaMVACalib/python/egammaMVACalibConfig.py
@@ -3,59 +3,81 @@
 from AthenaCommon.Logging import logging
 from AthenaConfiguration.ComponentFactory import CompFactory
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-egammaMVACalibTool, egammaMVASvc=CompFactory.getComps("egammaMVACalibTool","egammaMVASvc",)
 from xAODEgamma.xAODEgammaParameters import xAOD
 
 
-def egammaMVASvcCfg(flags, name="egammaMVASvc"):
+def egammaMVAToolCfg(flags, **kwargs):
+    acc = ComponentAccumulator()
+    acc.setPrivateTools(CompFactory.egammaMVACalibTool(**kwargs))
+    return acc
 
-    mlog = logging.getLogger(name)
-    mlog.debug('Start configuration')
 
+def egammaMVASvcCfg(flags, name="egammaMVASvc", **kwargs):
+
+    mlog = logging.getLogger(name)
     acc = ComponentAccumulator()
 
     if flags.Egamma.Calib.MVAVersion is not None:
         folder = flags.Egamma.Calib.MVAVersion
-        mlog.debug('MVA version: %s', folder)
+        mlog.info('egamma MVA calib version: %s', folder)
     else:
         raise KeyError("Egamma.Calib.MVAVersion is not set")
 
-    electronMVATool = egammaMVACalibTool(name="electronMVATool",
-                                         ParticleType=xAOD.EgammaParameters.electron,
-                                         folder=folder)
-    unconvertedPhotonMVATool = egammaMVACalibTool(name="unconvertedPhotonMVATool",
-                                                  ParticleType=xAOD.EgammaParameters.unconvertedPhoton,
-                                                  folder=folder)
-    convertedPhotonMVATool = egammaMVACalibTool(name="convertedPhotonMVATool",
-                                                ParticleType=xAOD.EgammaParameters.convertedPhoton,
-                                                folder=folder)
-
-    egMVASvc = egammaMVASvc(name=name,
-                            ElectronTool=electronMVATool,
-                            UnconvertedPhotonTool=unconvertedPhotonMVATool,
-                            ConvertedPhotonTool=convertedPhotonMVATool)
-
-    acc.addService(egMVASvc, primary=True)
+    if "ElectronTool" not in kwargs:
+        kwargs["ElectronTool"] = acc.popToolsAndMerge(
+            egammaMVAToolCfg(
+                flags,
+                name="electronMVATool",
+                ParticleType=xAOD.EgammaParameters.electron,
+                folder=folder)
+        )
+
+    if "UnconvertedPhotonTool" not in kwargs:
+        kwargs["UnconvertedPhotonTool"] = acc.popToolsAndMerge(
+            egammaMVAToolCfg(
+                flags,
+                name="unconvertedPhotonMVATool",
+                ParticleType=xAOD.EgammaParameters.unconvertedPhoton,
+                folder=folder)
+        )
+
+    if "ConvertedPhotonTool" not in kwargs:
+        kwargs["ConvertedPhotonTool"] = acc.popToolsAndMerge(
+            egammaMVAToolCfg(
+                flags,
+                name="convertedPhotonMVATool",
+                ParticleType=xAOD.EgammaParameters.convertedPhoton,
+                folder=folder)
+        )
+
+    acc.addService(
+        CompFactory.egammaMVASvc(
+            name=name,
+            **kwargs), primary=True)
     return acc
 
 
 if __name__ == "__main__":
 
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
-    from AthenaCommon.Logging import log
-    from AthenaCommon.Constants import DEBUG
     from AthenaCommon.Configurable import Configurable
-    Configurable.configurableRun3Behavior = 1
-    log.setLevel(DEBUG)
+    from AthenaConfiguration.ComponentAccumulator import printProperties
+    from AthenaConfiguration.TestDefaults import defaultTestFiles
+
+    Configurable.configurableRun3Behavior = True
 
-    ConfigFlags.Input.isMC = True
-    ConfigFlags.Input.Files = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/q221/21.0/myRDO.pool.root"]
+    ConfigFlags.Input.Files = defaultTestFiles.RDO
+    ConfigFlags.fillFromArgs()
     ConfigFlags.lock()
 
     cfg = ComponentAccumulator()
+    mlog = logging.getLogger("egammaMVASvcConfigTest")
+    mlog.info("Configuring egammaMVASvc :")
+    printProperties(mlog, cfg.getPrimaryAndMerge(
+        egammaMVASvcCfg(ConfigFlags)),
+        nestLevel=1,
+        printDefaults=True)
     cfg.printConfig()
-    acc = egammaMVASvcCfg(ConfigFlags)
-    cfg.merge(acc)
 
     f = open("egmvatools.pkl", "wb")
     cfg.store(f)
diff --git a/Reconstruction/egamma/egammaMVACalib/python/egammaMVACalibFactories.py b/Reconstruction/egamma/egammaMVACalib/python/egammaMVACalibFactories.py
index a0632e884e4cc2081f93fac3c73d5a2fa7d0351b..7ddea26c0ffd66b94d12615f25e0b46ece64119a 100644
--- a/Reconstruction/egamma/egammaMVACalib/python/egammaMVACalibFactories.py
+++ b/Reconstruction/egamma/egammaMVACalib/python/egammaMVACalibFactories.py
@@ -30,6 +30,7 @@ convertedPhotonMVATool = ToolFactory(
 
 egammaMVASvc = ServiceFactory(
     egammaMVACalibConf.egammaMVASvc,
+    name="egammaMVASvc_LegacyConfig",
     ElectronTool=electronMVATool,
     UnconvertedPhotonTool=unconvPhotonMVATool,
     ConvertedPhotonTool=convertedPhotonMVATool)
diff --git a/Reconstruction/egamma/egammaRec/python/LRTEgammaConfig.py b/Reconstruction/egamma/egammaRec/python/LRTEgammaConfig.py
deleted file mode 100644
index bfb9983509fd523c5e8c48a9a9e645c51f80cd09..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/python/LRTEgammaConfig.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-from egammaRec import egammaKeys
-from egammaRec.egammaTruthAssociationAlg import egammaTruthAssociationAlg
-from egammaAlgs.egammaSelectedTrackCopy import egammaSelectedTrackCopy
-from egammaAlgs.EMBremCollectionBuilder import EMBremCollectionBuilder
-from egammaAlgs.EMGSFCaloExtensionBuilder import EMGSFCaloExtensionBuilder
-from egammaAlgs.egammaRecBuilder import egammaRecBuilder
-from egammaAlgs.egammaSuperClusterBuilder import (
-    electronSuperClusterBuilder, photonSuperClusterBuilder)
-from egammaAlgs.topoEgammaBuilder import topoEgammaBuilder
-from egammaTools.EMTrackMatchBuilder import EMTrackMatchBuilder
-from egammaTrackTools.egammaTrackToolsFactories import (
-    EMExtrapolationToolsCommonCache, EMExtrapolationToolsCache)
-from InDetRecExample.InDetKeys import InDetKeys
-from egammaTools.egammaToolsFactories import (
-    EMClusterTool, EMFourMomBuilder,
-    EMShowerBuilder, egammaOQFlagsBuilder, ElectronPIDBuilder)
-
-LRTEMExtrapolationToolsCommonCache = EMExtrapolationToolsCommonCache.copy(
-    name="LRTEMExtrapolationToolsCommonCache",
-    LastCache='ParticleCaloExtension_LRT'
-)
-
-LRTegammaSelectedTrackCopy = egammaSelectedTrackCopy.copy(
-    name='LRTegammaSelectedTrackCopy',
-    OutputTrkPartContainerName="LRTegammaSelectedTrackParticles",
-    TrackParticleContainerName=InDetKeys.xAODLargeD0TrackParticleContainer(),
-    ExtrapolationToolCommonCache=LRTEMExtrapolationToolsCommonCache
-)
-
-LRTEMBremCollectionBuilder = EMBremCollectionBuilder.copy(
-    name="LRTEMBremCollectionBuilder",
-    TrackParticleContainerName=InDetKeys.xAODLargeD0TrackParticleContainer(),
-    SelectedTrackParticleContainerName="LRTegammaSelectedTrackParticles",
-    OutputTrkPartContainerName="LRT"+egammaKeys.outputTrackParticleKey(),
-    OutputTrackContainerName="LRT"+egammaKeys.outputTrackKey(),
-)
-
-LRTEMGSFCaloExtensionBuilder = EMGSFCaloExtensionBuilder.copy(
-    name='LRTEMGSFCaloExtensionBuilder',
-    GSFPerigeeCache='LRTGSFPerigeeCaloExtension',
-    GSFLastCache='LRTGSFLastCaloExtension',
-    GFFTrkPartContainerName="LRT"+egammaKeys.outputTrackParticleKey())
-
-LRTEMExtrapolationToolsCache = EMExtrapolationToolsCache.copy(
-    name="LRTEMExtrapolationToolsCache",
-    PerigeeCache='LRTGSFPerigeeCaloExtension',
-    LastCache='LRTGSFLastCaloExtension',
-    useCaching=True,
-    useLastCaching=True
-)
-
-LRTEMTrackMatchBuilder = EMTrackMatchBuilder.copy(
-    name="LRTEMTrackMatchBuilder",
-    TrackParticlesName="LRT"+egammaKeys.outputTrackParticleKey(),
-    ExtrapolationTool=LRTEMExtrapolationToolsCache
-)
-
-LRTegammaRecBuilder = egammaRecBuilder.copy(
-    name='LRTegammaRecBuilder',
-    egammaRecContainer="LRT"+egammaKeys.EgammaRecKey(),
-    # Builder tools
-    TrackMatchBuilderTool=LRTEMTrackMatchBuilder,
-    doConversions=False
-)
-
-LRTelectronSuperClusterBuilder = electronSuperClusterBuilder.copy(
-    name='LRTelectronSuperClusterBuilder',
-    InputEgammaRecContainerName="LRT"+egammaKeys.EgammaRecKey(),
-    SuperElectronRecCollectionName="LRT"+egammaKeys.ElectronSuperRecKey(),
-    SuperClusterCollectionName='LRTElectronSuperClusters',
-    TrackMatchBuilderTool=LRTEMTrackMatchBuilder
-)
-
-LRTphotonSuperClusterBuilder = photonSuperClusterBuilder.copy(
-    name='LRTphotonSuperClusterBuilder',
-    InputEgammaRecContainerName="LRT"+egammaKeys.EgammaRecKey(),
-    SuperPhotonRecCollectionName="LRT"+egammaKeys.PhotonSuperRecKey(),
-    SuperClusterCollectionName='LRTPhotonSuperClusters',
-)
-
-LRTEMClusterTool = EMClusterTool.copy(
-    name='LRTEMClusterTool',
-    OutputClusterContainerName="LRT"+egammaKeys.outputClusterKey(),
-)
-
-LRTtopoEgammaBuilder = topoEgammaBuilder.copy(
-    name='LRTtopoEgammaBuilder',
-    InputElectronRecCollectionName="LRT"+egammaKeys.ElectronSuperRecKey(),
-    ElectronOutputName="LRT"+egammaKeys.outputElectronKey(),
-    InputPhotonRecCollectionName="LRT"+egammaKeys.PhotonSuperRecKey(),
-    PhotonOutputName="LRT"+egammaKeys.outputPhotonKey(),
-    EMClusterTool=LRTEMClusterTool,
-    EMShowerTool=EMShowerBuilder,
-    ObjectQualityTool=egammaOQFlagsBuilder,
-    egammaTools=[EMFourMomBuilder()],
-    ElectronTools=[ElectronPIDBuilder()],
-    doPhotons=False
-)
-
-LRTegammaTruthAssociationAlg = egammaTruthAssociationAlg.copy(
-    name='LRTegammaTruthAssociationAlg',
-    ElectronContainerName="LRT"+egammaKeys.outputElectronKey(),
-    PhotonContainerName="LRT"+egammaKeys.outputPhotonKey(),
-    EgammaTruthContainerName="LRT"+egammaKeys.outputTruthKey(),
-    MatchPhotons=False,
-    MatchForwardElectrons=False,
-)
diff --git a/Reconstruction/egamma/egammaRec/python/LRTtopoEgammaGetter.py b/Reconstruction/egamma/egammaRec/python/LRTtopoEgammaGetter.py
deleted file mode 100644
index 1f07c77ff7c3f788bb215a838ff4220cf2f0d686..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/python/LRTtopoEgammaGetter.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-from __future__ import print_function
-
-# specifies standard (supercluster) egamma.
-from AthenaCommon.Logging import logging
-from AthenaCommon.DetFlags import DetFlags
-from RecExConfig.Configured import Configured
-from egammaRec import egammaRecFlags as egRecFlags
-egammaRecFlags = egRecFlags.jobproperties.egammaRecFlags
-
-
-def doConversions():
-    return DetFlags.detdescr.ID_on() and egammaRecFlags.doConversions()
-
-# The tools used to add properties
-
-
-class LRTtopoEgammaGetter (Configured):
-
-    def configure(self):
-        mlog = logging.getLogger('LRTtopoEgammaGetter.py::configure:')
-        mlog.info('entering')
-
-        # the egammaRecBuilder
-        from egammaRec.LRTEgammaConfig import LRTegammaRecBuilder
-        try:
-            self._LRTegammaRecBuilder = LRTegammaRecBuilder(
-                doTrackMatching=DetFlags.detdescr.ID_on(),
-                doConversions=False)
-        except Exception:
-            mlog.error("could not get handle to LRTegammaRecBuilder")
-            import traceback
-            traceback.print_exc()
-            return False
-
-        # the supercluster builders
-        from egammaRec.LRTEgammaConfig import (
-            LRTelectronSuperClusterBuilder, LRTphotonSuperClusterBuilder)
-        try:
-            self._LRTelectronSuperClusterBuilder = LRTelectronSuperClusterBuilder(
-                doTrackMatching=DetFlags.detdescr.ID_on())
-            self._LRTphotonSuperClusterBuilder = LRTphotonSuperClusterBuilder(
-                doConversions=False)
-        except Exception:
-            mlog.error("could not get handle to supcluster builders")
-            import traceback
-            traceback.print_exc()
-            return False
-
-        # the topoEgammaBuilder (the part that puts everything together
-        from egammaRec.LRTEgammaConfig import LRTtopoEgammaBuilder
-        try:
-            self._LRTtopoEgammaBuilder = LRTtopoEgammaBuilder(
-                doPhotons=False
-            )
-        except Exception:
-            mlog.error("could not get handle to LRTtopoEgammaBuilder")
-            import traceback
-            traceback.print_exc()
-            return False
-
-        return True
diff --git a/Reconstruction/egamma/egammaRec/python/egammaAODGetter.py b/Reconstruction/egamma/egammaRec/python/egammaAODGetter.py
deleted file mode 100755
index ce77b114612ec17597f8d64bc38483aa1c553a55..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/python/egammaAODGetter.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-# xAOD this should do nothing
-# Exists just for compatibility
-class egammaAODGetter:
-    pass
diff --git a/Reconstruction/egamma/egammaRec/python/egammaForwardGetter.py b/Reconstruction/egamma/egammaRec/python/egammaForwardGetter.py
deleted file mode 100755
index 1acedd35f7d910d8a122e82d75db787b677bd900..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/python/egammaForwardGetter.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-# specifies egammaForwardBuilder "standard"
-from egammaTools.egammaToolsFactories import (
-    egammaOQFlagsBuilder, EMFourMomBuilder,
-    LooseForwardElectronSelector, MediumForwardElectronSelector,
-    TightForwardElectronSelector)
-from AthenaCommon.Logging import logging
-from AthenaCommon.SystemOfUnits import GeV
-import traceback
-
-from RecExConfig.Configured import Configured
-
-from egammaRec import egammaKeys
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import AlgFactory, FcnWrapper
-from egammaRec import egammaRecFlags as egRecFlags
-egammaRecFlags = egRecFlags.jobproperties.egammaRecFlags
-
-
-def forwardSelectorTools():
-    "Return a list with the selectors for forward electrons"
-    return [LooseForwardElectronSelector(),
-            MediumForwardElectronSelector(),
-            TightForwardElectronSelector()]
-
-
-egammaForwardBuilder = AlgFactory(
-    egammaAlgsConf.egammaForwardBuilder,
-    name='egammaForward',
-    # Keys
-    ElectronOutputName=egammaKeys.outputFwdElectronKey(),
-    ClusterContainerName=egammaKeys.outputFwdClusterKey(),
-    # Tools
-    ObjectQualityTool=egammaOQFlagsBuilder,
-    FourMomBuilderTool=EMFourMomBuilder,
-    # Flags and other properties
-    EtCut=5*GeV,
-    EtaCut=2.5,
-
-    forwardelectronIsEMselectors=FcnWrapper(
-        forwardSelectorTools),
-    forwardelectronIsEMselectorResultNames=[
-        "Loose", "Medium", "Tight"]
-)
-
-
-class egammaForwardGetter (Configured):
-    
-    def configure(self):
-        mlog = logging.getLogger('egammaForwardGetter.py::configure:')
-        mlog.info('entering')
-        
-        # configure egammaForward here:
-        try:
-            self._egammaFwdBuilderHandle = egammaForwardBuilder()
-        except Exception:
-            mlog.error("could not get handle to egammaForward")
-            traceback.print_exc()
-            return False
-            
-            # the egammaLargeFWDClusterMaker
-            # (Which chooses the cells to store in the AOD)
-        from egammaAlgs.egammaLargeFWDClusterMakerAlg import (
-            egammaLargeFWDClusterMakerAlg)
-        try:
-            self._egammaLargeClusterMaker = egammaLargeFWDClusterMakerAlg()
-        except Exception:
-            mlog.error("could not get handle to egammaLargeClusterMaker")
-            import traceback
-            traceback.print_exc()
-            return False
-                
-        return True
-                
-    def egammaFwdBuilderHandle(self):
-        return self._egammaFwdBuilderHandle
-                    
diff --git a/Reconstruction/egamma/egammaRec/python/egammaRecFlags.py b/Reconstruction/egamma/egammaRec/python/egammaRecFlags.py
index 5499127a552bc2dd40a5474c452798785a8c5613..c121764aae92d33d894b3d7498ff1143bff4ac6b 100755
--- a/Reconstruction/egamma/egammaRec/python/egammaRecFlags.py
+++ b/Reconstruction/egamma/egammaRec/python/egammaRecFlags.py
@@ -111,7 +111,7 @@ class inputTopoClusterCollection (JobProperty):
     """
     statusOn = True
     allowedTypes = ['str']
-    StoredValue = 'CaloTopoCluster'
+    StoredValue = 'CaloTopoClusters'
 
 
 class egammaTopoClusterCollection (JobProperty):
diff --git a/Reconstruction/egamma/egammaRec/python/egammaTrackSlimmer.py b/Reconstruction/egamma/egammaRec/python/egammaTrackSlimmer.py
deleted file mode 100755
index cf0f1ece2667e8cf0d5f58439cb06dc68be0bbf7..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/python/egammaTrackSlimmer.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-# specifies egamma"standard"
-from AthenaCommon.Logging import logging
-import traceback
-from egammaRec import egammaKeys
-from RecExConfig.Configured import Configured
-
-
-
-class egammaTrackSlimmer ( Configured ) :
- 
-  def configure(self):
-    mlog = logging.getLogger ('egammaTrackSlimmer.py::configure:')
-    mlog.info('entering')
- 
-    try:
-      from egammaAlgs.egammaAlgsConf import egammaTrackSlimmer
-      theEgammaTrackSlimmer = egammaTrackSlimmer(
-        "egammaTrackSlimmer",
-        StreamName = 'StreamAOD',
-        InputElectronContainerName=egammaKeys.outputElectronKey(),
-        InputPhotonContainerName=egammaKeys.outputPhotonKey(),
-        TrackParticleContainerName= egammaKeys.outputTrackParticleKey(),
-        VertexContainerName= egammaKeys.outputConversionKey(),
-        doThinning=True
-        )
-      print (theEgammaTrackSlimmer)
-    except Exception:
-      mlog.error("could not get handle to egammaTrackSlimmer")
-      traceback.print_exc()
-      return False
-    
-    # add to topsequence 
-    mlog.info("now adding to topSequence")
-    from AthenaCommon.AlgSequence import AlgSequence
-    topSequence = AlgSequence()
-    topSequence += theEgammaTrackSlimmer
- 
- 
-    return True
-
-
diff --git a/Reconstruction/egamma/egammaRec/python/egammaTruthAssociationAlg.py b/Reconstruction/egamma/egammaRec/python/egammaTruthAssociationAlg.py
deleted file mode 100644
index 9b67c639e73118a75fc3d1ff17f3a5f9c340d66d..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/python/egammaTruthAssociationAlg.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
-
-from __future__ import print_function
-from RecExConfig.Configured import Configured
-from egammaRec import egammaKeys
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import (
-    ToolFactory, AlgFactory, FcnWrapper)
-from egammaRec import egammaRecFlags as egRecFlags
-from egammaTools.egammaExtrapolators import egammaCaloExtrapolator
-import AthenaCommon.CfgMgr as CfgMgr
-from MCTruthClassifier import MCTruthClassifierConf
-egammaRecFlags = egRecFlags.jobproperties.egammaRecFlags
-
-
-def getSimBarcodeOffset():
-    # "Return the simulation barcode offset for G4 particles from metadata"
-    from PyUtils.MetaReaderPeeker import metadata
-
-    offset = 200e3
-    try:
-        return int(metadata['SimBarcodeOffset'])
-    except Exception:
-        print('Could not retrieve SimBarcodeOffset from'
-              '/Simulation/Parameters, leaving at 200k')
-
-    return int(offset)
-
-
-def getSimBarcodeOffset1():
-    "Return the simulation barcode offset for G4 particles from metadata + 1"
-    return getSimBarcodeOffset() + 1
-
-
-EMClassifierParticleCaloExtensionTool = ToolFactory(
-    CfgMgr.Trk__ParticleCaloExtensionTool,
-    name="EMClassifierParticleCaloExtensionTool",
-    Extrapolator=egammaCaloExtrapolator)
-
-EMMCTruthClassifier = ToolFactory(
-    MCTruthClassifierConf.MCTruthClassifier,
-    name='EMMCTruthClassifier',
-    ParticleCaloExtensionTool=EMClassifierParticleCaloExtensionTool,
-    barcodeG4Shift=FcnWrapper(getSimBarcodeOffset1))
-
-
-egammaTruthAssociationAlg = AlgFactory(
-    egammaAlgsConf.egammaTruthAssociationAlg,
-    ClusterContainerName=egammaKeys.outputClusterKey(),
-    ElectronContainerName=egammaKeys.outputElectronKey(),
-    PhotonContainerName=egammaKeys.outputPhotonKey(),
-    FwdElectronContainerName=egammaKeys.outputFwdElectronKey(),
-    TruthEventContainerName=egammaKeys.truthEventKey(),
-    TruthParticleContainerName=egammaKeys.truthParticleKey(),
-    EgammaTruthContainerName=egammaKeys.outputTruthKey(),
-    MCTruthClassifier=EMMCTruthClassifier,
-    MatchForwardElectrons=egammaRecFlags.doEgammaForwardSeeded(),
-    MatchClusters=False,
-    SimBarcodeOffset=FcnWrapper(getSimBarcodeOffset)
-)
-
-
-class egammaTruthAssociationGetter (Configured):
-
-    def configure(self):
-        from AthenaCommon.Logging import logging
-        mlog = logging.getLogger('egammaTruthAssociationGetter::configure:')
-        mlog.info('entering')
-
-        # configure egammaTruthAssociation here:
-        try:
-            self._egammaTruthAssociationHandle = egammaTruthAssociationAlg()
-        except Exception:
-            mlog.error("could not get handle to egammaTruthAssociation")
-            import traceback
-            traceback.print_exc()
-            return False
-        return True
-
-    def egammaTruthAssociationHandle(self):
-        return self._egammaTruthAssociationHandle
diff --git a/Reconstruction/egamma/egammaRec/python/topoEgammaGetter.py b/Reconstruction/egamma/egammaRec/python/topoEgammaGetter.py
deleted file mode 100644
index f58234d08bd020b9c271ae9c31d33dc1b17dc210..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/python/topoEgammaGetter.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-from __future__ import print_function
-from egammaTools.egammaToolsFactories import \
-    EMClusterTool, EMFourMomBuilder, EMShowerBuilder, egammaOQFlagsBuilder, \
-    ElectronPIDBuilder, PhotonPIDBuilder
-
-# specifies standard (supercluster) egamma.
-from AthenaCommon.Logging import logging
-from AthenaCommon.DetFlags import DetFlags
-from RecExConfig.Configured import Configured
-from egammaRec.Factories import FcnWrapper
-from egammaRec import egammaRecFlags as egRecFlags
-egammaRecFlags = egRecFlags.jobproperties.egammaRecFlags
-
-
-def doConversions():
-    return DetFlags.detdescr.ID_on() and egammaRecFlags.doConversions()
-
-# The tools used to add properties
-
-
-def egammaDecorationTools():
-    "Return a list with the tools that decorate both electrons and photons"
-    return [EMFourMomBuilder()]
-
-
-def electronDecorationTools():
-    "Return a list with the tools that decorate only electrons"
-    return [ElectronPIDBuilder()]
-
-
-def photonDecorationTools():
-    "Return a list with the tools that decorate only photons"
-    return [PhotonPIDBuilder()]
-#
-
-
-class topoEgammaGetter (Configured):
-
-    def configure(self):
-        mlog = logging.getLogger('topoEgammaGetter.py::configure:')
-        mlog.info('entering')
-
-        # the egammaRecBuilder
-        from egammaAlgs.egammaRecBuilder import egammaRecBuilder
-        try:
-            self._egammaRecBuilder = egammaRecBuilder(
-                doTrackMatching=DetFlags.detdescr.ID_on(),
-                doConversions=doConversions())
-        except Exception:
-            mlog.error("could not get handle to egammaRecBuilder")
-            import traceback
-            traceback.print_exc()
-            return False
-
-        # the supercluster builders
-        from egammaAlgs.egammaSuperClusterBuilder import \
-            electronSuperClusterBuilder, photonSuperClusterBuilder
-        try:
-            self._electronSuperClusterBuilder = electronSuperClusterBuilder(
-                doTrackMatching=DetFlags.detdescr.ID_on())
-            self._photonSuperClusterBuilder = photonSuperClusterBuilder(
-                doConversions=doConversions())
-        except Exception:
-            mlog.error("could not get handle to supcluster builders")
-            import traceback
-            traceback.print_exc()
-            return False
-
-        # the topoEgammaBuilder (the part that puts everything together
-        from egammaAlgs.topoEgammaBuilder import topoEgammaBuilder
-        try:
-            self._topoEgammaBuilder = topoEgammaBuilder(
-                EMClusterTool=EMClusterTool,
-                EMShowerTool=EMShowerBuilder,
-                ObjectQualityTool=egammaOQFlagsBuilder,
-                # Decoration tools
-                egammaTools=FcnWrapper(egammaDecorationTools),
-                ElectronTools=FcnWrapper(electronDecorationTools),
-                PhotonTools=FcnWrapper(photonDecorationTools)
-            )
-        except Exception:
-            mlog.error("could not get handle to topoEgammaBuilder")
-            import traceback
-            traceback.print_exc()
-            return False
-
-        # the egammaLargeClusterMaker
-        # (Which chooses the cells to store in the AOD)
-        from egammaAlgs.egammaLargeClusterMakerAlg import (
-            egammaLargeClusterMakerAlg)
-        try:
-            self._egammaLargeClusterMaker = egammaLargeClusterMakerAlg()
-        except Exception:
-            mlog.error("could not get handle to egammaLargeClusterMaker")
-            import traceback
-            traceback.print_exc()
-            return False
-
-        return True
diff --git a/Reconstruction/egamma/egammaRec/share/egammaLRTRec_jobOptions.py b/Reconstruction/egamma/egammaRec/share/egammaLRTRec_jobOptions.py
deleted file mode 100755
index 3b7f4ca669a584887b098a494181465ba7ef7157..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/share/egammaLRTRec_jobOptions.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# all these tests, except egamma, should be in egammaGetter
-from egammaRec.egammaRecFlags import jobproperties
-from AthenaCommon.Resilience import treatException
-from AthenaCommon.AlgSequence import AlgSequence
-
-topSequence = AlgSequence()
-
-
-# Function to schedule the GSF
-
-def setupGSF_LRT():
-
-    try:
-        from egammaRec.LRTEgammaConfig import (
-            LRTegammaSelectedTrackCopy)
-        LRTegammaSelectedTrackCopy(doPrint=False)  # for debugging
-    except Exception:
-        treatException(
-            "Could not set up the egamma track Selection for LRT GSF."
-            "Switch LRT Brem Building off !")
-    try:
-        from egammaRec.LRTEgammaConfig import (
-            LRTEMBremCollectionBuilder)
-        LRTEMBremCollectionBuilder(doPrint=False)
-    except Exception:
-        treatException(
-            "Could not set up LRTEMBremCollectionBuilder."
-            "Switch LRT Brem Building off !")
-    try:
-        from egammaRec.LRTEgammaConfig import (
-            LRTEMGSFCaloExtensionBuilder)
-        LRTEMGSFCaloExtensionBuilder(doPrint=False)
-    except Exception:
-        treatException("Could not set up LRTEMGSFCaloExtensionBuilder.")
-
-
-# Function to schedule the Topo cluster based egamma
-
-
-def setupTopoSeededEgamma_LRT():
-    try:
-        from egammaRec.LRTtopoEgammaGetter import LRTtopoEgammaGetter
-        LRTtopoEgammaGetter(ignoreExistingDataObject=True)
-    except Exception:
-        treatException(
-            "Could not set up  LRTtopoEgammaGetter. Switch it off !")
-        # If we wanted Topo based cluster seeded egamma it just failed
-        jobproperties.egammaRecFlags.doEgammaCaloSeeded = False
-        LRTtopoEgammaGetter(disable=True)
-
-
-def setupTruthAssociation_LRT():
-    try:
-        from egammaRec.LRTEgammaConfig import (
-            LRTegammaTruthAssociationAlg)
-        LRTegammaTruthAssociationAlg(doPrint=False)
-    except Exception:
-        treatException(
-            "Could not set up LRTegammaTruthAssociationAlg. Switched off !")
-        LRTegammaTruthAssociationAlg(disable=True)
-
-
-# Do the actual scheduling
-
-if jobproperties.egammaRecFlags.doBremFinding():
-    setupGSF_LRT()
-
-if jobproperties.egammaRecFlags.doEgammaCaloSeeded():
-    setupTopoSeededEgamma_LRT()
-
-if (jobproperties.egammaRecFlags.doEgammaTruthAssociation()
-        and jobproperties.egammaRecFlags.doEgammaCaloSeeded()):
-    setupTruthAssociation_LRT()
diff --git a/Reconstruction/egamma/egammaRec/share/egammaRec_jobOptions.py b/Reconstruction/egamma/egammaRec/share/egammaRec_jobOptions.py
deleted file mode 100755
index 7ac2adcfcd9beacd29b5cc2ff34465a7491025f4..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaRec/share/egammaRec_jobOptions.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# all these tests, except egamma, should be in egammaGetter
-from CaloRec.CaloRecFlags import jobproperties as caloproperties
-from egammaRec.egammaRecFlags import jobproperties
-from RecExConfig.RecFlags import rec
-from AthenaCommon.Resilience import treatException
-from AthenaCommon.DetFlags import DetFlags
-from AthenaCommon.AlgSequence import AlgSequence
-
-topSequence = AlgSequence()
-jobproperties.egammaRecFlags.print_JobProperties("full")
-
-# The simple cases where we can disable a flag
-
-# Truth
-if not rec.doTruth():
-    jobproperties.egammaRecFlags.doEgammaTruthAssociation = False
-
-# GSF and vertex building need the inner detector
-if not DetFlags.detdescr.ID_on():
-    jobproperties.egammaRecFlags.doBremFinding = False
-    jobproperties.egammaRecFlags.doVertexBuilding = False
-
-# We can not run without having the Calo
-if not (rec.readESD() or caloproperties.CaloRecFlags.doCaloTopoCluster()):
-    jobproperties.egammaRecFlags.doEgammaCaloSeeded = False
-    jobproperties.egammaRecFlags.doEgammaForwardSeeded = False
-
-
-# Function to schedule the GSF
-
-
-def setupGSF():
-    try:
-        from egammaAlgs.egammaSelectedTrackCopy import (
-            egammaSelectedTrackCopy)
-        egammaSelectedTrackCopy(doPrint=False)
-    except Exception:
-        treatException(
-            "Could not set up the egamma track Selection for GSF."
-            "Switch Brem Building off !")
-        jobproperties.egammaRecFlags.doBremFinding = False
-    try:
-        from egammaAlgs.EMBremCollectionBuilder import (
-            EMBremCollectionBuilder)
-        EMBremCollectionBuilder(doPrint=False)
-    except Exception:
-        treatException(
-            "Could not set up EMBremCollectionBuilder."
-            "Switch Brem Building off !")
-        jobproperties.egammaRecFlags.doBremFinding = False
-    try:
-        from egammaAlgs.EMGSFCaloExtensionBuilder import (
-            EMGSFCaloExtensionBuilder)
-        EMGSFCaloExtensionBuilder(doPrint=False)
-    except Exception:
-        treatException("Could not set up EMGSFCaloExtensionBuilder.")
-
-# Function to schedule the conversion vertices reconstructions
-
-
-def setupVertices():
-    # Conversion vertex builder can not run in the default mode without GSF
-    try:
-        from egammaAlgs.EMVertexBuilder import EMVertexBuilder
-        EMVertexBuilder(doPrint=False)
-    except Exception:
-        treatException(
-            "Could not set up the conversion vertex building."
-            "Switch vertex building off !")
-        jobproperties.egammaRecFlags.doVertexBuilding = False
-
-# Function to schedule the Topo cluster based egamma
-
-
-def setupTopoSeededEgamma():
-    try:
-        from egammaRec.topoEgammaGetter import topoEgammaGetter
-        topoEgammaGetter(ignoreExistingDataObject=True)
-    except Exception:
-        treatException("Could not set up  topoEgammaGetter. Switch it off !")
-        # If we wanted Topo based cluster seeded egamma it just failed
-        jobproperties.egammaRecFlags.doEgammaCaloSeeded = False
-        topoEgammaGetter(disable=True)
-
-# Function to schedule the  Fwd egamma
-
-
-def setupFwdSeededEgamma():
-    try:
-        from egammaRec.egammaForwardGetter import egammaForwardGetter
-        egammaForwardGetter(ignoreExistingDataObject=True)
-    except Exception:
-        treatException("Could not set up egammaForwardGetter. Switch it off !")
-        jobproperties.egammaRecFlags.doEgammaForwardSeeded = False
-        egammaForwardGetter(disable=True)
-
-# Function to schedule the Truth Association
-
-
-def setupTruthAssociation():
-    try:
-        from egammaRec.egammaTruthAssociationAlg import (
-            egammaTruthAssociationGetter)
-        egammaTruthAssociationGetter(ignoreExistingDataObject=True)
-    except Exception:
-        treatException(
-            "Could not set up egammaTruthAssociationAlg. Switched off !")
-        jobproperties.egammaRecFlags.doEgammaTruthAssociation = False
-        egammaTruthAssociationGetter(disable=True)
-
-
-# Do the actual scheduling
-
-if jobproperties.egammaRecFlags.doBremFinding():
-    setupGSF()
-
-if jobproperties.egammaRecFlags.doVertexBuilding():
-    setupVertices()
-
-if jobproperties.egammaRecFlags.doEgammaCaloSeeded():
-    setupTopoSeededEgamma()
-
-if jobproperties.egammaRecFlags.doEgammaForwardSeeded():
-    setupFwdSeededEgamma()
-
-if (jobproperties.egammaRecFlags.doEgammaTruthAssociation()
-        and jobproperties.egammaRecFlags.doEgammaCaloSeeded()):
-    setupTruthAssociation()
diff --git a/Reconstruction/egamma/egammaTools/python/EMTrackMatchBuilder.py b/Reconstruction/egamma/egammaTools/python/EMTrackMatchBuilder.py
deleted file mode 100644
index 5dab286d0120f3edfccb6a58b2f7dcdcb4174dc7..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaTools/python/EMTrackMatchBuilder.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-__doc__ = """ToolFactory to instantiate
-EMTrackMatchBuilder with default configuration"""
-__author__ = "Bruno Lenzi"
-
-from egammaTools import egammaToolsConf
-from egammaRec.Factories import ToolFactory
-from egammaRec import egammaKeys
-from AthenaCommon.BeamFlags import jobproperties
-from egammaTrackTools.egammaTrackToolsFactories import (
-    EMExtrapolationToolsCache)
-
-EMTrackMatchBuilder = ToolFactory(
-    egammaToolsConf.EMTrackMatchBuilder,
-    TrackParticlesName=egammaKeys.outputTrackParticleKey(),
-    ExtrapolationTool=EMExtrapolationToolsCache,
-    broadDeltaEta=0.1,  # candidate match is done in 2 times this  so +- 0.2
-    broadDeltaPhi=0.15,  # candidate match is done in 2 times this  so +- 0.3
-    useCandidateMatch=True,
-    useScoring=True,
-    SecondPassRescale=True,
-    UseRescaleMetric=True,
-    isCosmics=(jobproperties.Beam.beamType() == "cosmics")
-)
diff --git a/Reconstruction/egamma/egammaTools/python/egammaExtrapolators.py b/Reconstruction/egamma/egammaTools/python/egammaExtrapolators.py
index ffccdf6af29de497fb43db50db18d0d00bb3b4e8..62201322425777057a891966bc3feb7cc2a4a9e9 100644
--- a/Reconstruction/egamma/egammaTools/python/egammaExtrapolators.py
+++ b/Reconstruction/egamma/egammaTools/python/egammaExtrapolators.py
@@ -1,6 +1,6 @@
 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
-from egammaRec.Factories import ToolFactory, PublicToolFactory
+from egammaRec.Factories import ToolFactory
 from TrkExTools.AtlasExtrapolator import AtlasExtrapolator
 __doc__ = """ToolFactories to instantiate InDet tools
 for egamma with default configuration"""
@@ -74,13 +74,6 @@ egammaExtrapolator = ToolFactory(
     AtlasExtrapolator,
     name='egammaExtrapolator')
 
-# The general use extrapolator same as ATLAS default.
-# Public as still needed due to some InnerDetector/Tracking
-# tools
-AtlasPublicExtrapolator = PublicToolFactory(
-    AtlasExtrapolator,
-    name='AtlasPublicExtrapolator')
-
 # Extrapolator specialized for the e/gamma specific calo extrapolations
 # i.e ignore material effect that are not relevant.
 egammaCaloExtrapolator = ToolFactory(
diff --git a/Reconstruction/egamma/egammaTools/python/egammaOQFlagsBuilder.py b/Reconstruction/egamma/egammaTools/python/egammaOQFlagsBuilder.py
deleted file mode 100644
index 5f381654c9276edb832b04bb56fbd3079385ea74..0000000000000000000000000000000000000000
--- a/Reconstruction/egamma/egammaTools/python/egammaOQFlagsBuilder.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-
-from egammaTools import egammaToolsConf
-from egammaRec.Factories import ToolFactory
-from egammaRec import egammaKeys
-
-from CaloTools.CaloToolsConf import CaloAffectedTool
-
-egammaOQFlagsBuilder = ToolFactory(
-    egammaToolsConf.egammaOQFlagsBuilder,
-    QCellCut=4000.,
-    QCellHECCut=60000.,
-    QCellSporCut=4000.,
-    LArQCut=0.8,
-    TCut=10.,
-    TCutVsE=2.,
-    RcellCut=0.8,
-    CellsName=egammaKeys.caloCellKey(),
-    affectedTool=CaloAffectedTool())
diff --git a/Reconstruction/egamma/egammaTools/python/egammaOQFlagsBuilderConfig.py b/Reconstruction/egamma/egammaTools/python/egammaOQFlagsBuilderConfig.py
index ec2fe346e297db40eb5d44b9570695c32462a94d..ba0c718ea3178b99bf20db46d92146845d107f59 100644
--- a/Reconstruction/egamma/egammaTools/python/egammaOQFlagsBuilderConfig.py
+++ b/Reconstruction/egamma/egammaTools/python/egammaOQFlagsBuilderConfig.py
@@ -12,7 +12,8 @@ def egammaOQFlagsBuilderCfg(flags, name='egammaOQFlagsBuilder', **kwargs):
     mlog = logging.getLogger(name)
     mlog.debug('Start configuration')
 
-    acc = ComponentAccumulator()
+    from LArCalibUtils.LArHVScaleConfig import LArHVScaleCfg
+    acc = LArHVScaleCfg(flags)
 
     kwargs.setdefault("CellsName", flags.Egamma.Keys.Input.CaloCells)
     kwargs.setdefault("affectedTool", CompFactory.CaloAffectedTool())
diff --git a/Reconstruction/egamma/egammaTools/python/egammaToolsFactories.py b/Reconstruction/egamma/egammaTools/python/egammaToolsFactories.py
index 9414f306eb680becdb6056e924a18653650547cd..c732496369722b93668110bb2c300a963a40fdbb 100644
--- a/Reconstruction/egamma/egammaTools/python/egammaToolsFactories.py
+++ b/Reconstruction/egamma/egammaTools/python/egammaToolsFactories.py
@@ -5,13 +5,9 @@ all egammaTools with default configuration"""
 __author__ = "Bruno Lenzi"
 
 
-from ElectronPhotonSelectorTools.EgammaPIDdefs import egammaPID
-from ElectronPhotonSelectorTools.ConfiguredAsgForwardElectronIsEMSelectors \
-    import ConfiguredAsgForwardElectronIsEMSelector
 from .EMPIDBuilderBase import EMPIDBuilderPhotonBase
 from .EMPIDBuilderBase import EMPIDBuilderElectronBase
 from ElectronPhotonSelectorTools import ElectronPhotonSelectorToolsConf
-from egammaTrackTools.egammaTrackToolsFactories import EMExtrapolationTools
 from egammaMVACalib.egammaMVACalibFactories import egammaMVASvc
 
 
@@ -29,25 +25,6 @@ _clusterTypes = dict(
 )
 
 
-# Configure fixed-size (non-supercell) corrections
-def configureFixedSizeClusterCorrections(swTool):
-    """Add attributes ClusterCorrectionToolsXX to egammaSwTool
-       object for fixed-size cluster corrections."""
-    from CaloClusterCorrection.CaloSwCorrections import make_CaloSwCorrections
-    from CaloRec.CaloRecMakers import _process_tools
-
-    for attrName, clName in _clusterTypes.items():
-        x = 'ClusterCorrectionTools' + attrName
-        if not hasattr(swTool, x) or getattr(swTool, x):
-            continue
-        y = make_CaloSwCorrections(
-            clName,
-            suffix='EG',
-            version=jobproperties.egammaRecFlags.clusterCorrectionVersion(),
-            cells_name=egammaKeys.caloCellKey())
-        setattr(swTool, x, _process_tools(swTool, y))
-
-
 # Configure corrections for superclusters.
 def configureSuperClusterCorrections(swTool):
     """Add attributes ClusterCorrectionToolsXX to egammaSwTool
@@ -69,12 +46,6 @@ def configureSuperClusterCorrections(swTool):
                 cells_name=egammaKeys.caloCellKey())))
 
 
-# At the end we could keep only one version of the tools
-# below
-egammaSwTool = ToolFactory(egammaToolsConf.egammaSwTool,
-                           postInit=[configureSuperClusterCorrections])
-
-
 egammaSwSuperClusterTool = ToolFactory(
     egammaToolsConf.egammaSwTool,
     postInit=[configureSuperClusterCorrections])
@@ -86,32 +57,11 @@ EMClusterTool = ToolFactory(
     MVACalibSvc=egammaMVASvc
 )
 
-
-EMConversionBuilder = ToolFactory(
-    egammaToolsConf.EMConversionBuilder,
-    ConversionContainerName=egammaKeys.outputConversionKey(),
-    ExtrapolationTool=EMExtrapolationTools)
-
 EGammaAmbiguityTool = ToolFactory(
     ElectronPhotonSelectorToolsConf.EGammaAmbiguityTool)
 
 EMFourMomBuilder = ToolFactory(egammaToolsConf.EMFourMomBuilder)
 
-egammaLargeClusterMakerTool = ToolFactory(
-    egammaToolsConf.egammaLargeClusterMaker,
-    name="egammaLCMakerTool",
-    InputClusterCollection=egammaKeys.ClusterKey(),
-    CellsName=egammaKeys.caloCellKey()
-)
-
-egammaLargeFWDClusterMakerTool = ToolFactory(
-    egammaToolsConf.egammaLargeClusterMaker,
-    name="egammaLCFWDMakerTool",
-    InputClusterCollection=egammaKeys.FwdClusterKey(),
-    CellsName=egammaKeys.caloCellKey(),
-    doFWDelesurraundingWindows=True
-)
-
 # Electron Selectors
 ElectronPIDBuilder = ToolFactory(
     EMPIDBuilderElectronBase,
@@ -122,24 +72,7 @@ PhotonPIDBuilder = ToolFactory(
     EMPIDBuilderPhotonBase,
     name="PhotonPIDBuilder")
 
-# ForwardElectron Selectors
-
-LooseForwardElectronSelector = ToolFactory(
-    ConfiguredAsgForwardElectronIsEMSelector,
-    name="LooseForwardElectronSelector",
-    quality=egammaPID.ForwardElectronIDLoose)
-MediumForwardElectronSelector = ToolFactory(
-    ConfiguredAsgForwardElectronIsEMSelector,
-    name="MediumForwardElectronSelector",
-    quality=egammaPID.ForwardElectronIDMedium)
-TightForwardElectronSelector = ToolFactory(
-    ConfiguredAsgForwardElectronIsEMSelector,
-    name="TightForwardElectronSelector",
-    quality=egammaPID.ForwardElectronIDTight)
-
 # -------------------------
 
 # Import the factories that are not defined here
-from .EMTrackMatchBuilder import EMTrackMatchBuilder    # noqa: F401
-from .egammaOQFlagsBuilder import egammaOQFlagsBuilder  # noqa: F401
 from .EMShowerBuilder import EMShowerBuilder            # noqa: F401
diff --git a/Reconstruction/egamma/egammaTrackTools/python/GSFTrackFitterConfig.py b/Reconstruction/egamma/egammaTrackTools/python/GSFTrackFitterConfig.py
index 7b1058ff18d991bb420a408a95ebc96110e53959..03f721bd273b19489f7b0a743afbf8993b490c9b 100644
--- a/Reconstruction/egamma/egammaTrackTools/python/GSFTrackFitterConfig.py
+++ b/Reconstruction/egamma/egammaTrackTools/python/GSFTrackFitterConfig.py
@@ -10,9 +10,6 @@ from TrkConfig.AtlasExtrapolatorToolsConfig import AtlasNavigatorCfg
 
 def EMGSFExtrapolatorToolCfg(flags, **kwargs):
 
-    mlog = logging.getLogger('EMGSFExtrapolatorTool')
-    mlog.info('Start configuration')
-
     acc = ComponentAccumulator()
 
     if "Propagators" not in kwargs:
@@ -43,9 +40,6 @@ def EMGSFExtrapolatorToolCfg(flags, **kwargs):
 
 def EMGSFTrackFitterCfg(flags, name='EMGSFTrackFitter', **kwargs):
 
-    mlog = logging.getLogger(name)
-    mlog.info('Start configuration')
-
     acc = ComponentAccumulator()
 
     if "RefitOnMeasurementBase" not in kwargs:
@@ -53,9 +47,14 @@ def EMGSFTrackFitterCfg(flags, name='EMGSFTrackFitter', **kwargs):
 
     kwargs["ToolForROTCreation"] = None
     if not kwargs["RefitOnMeasurementBase"]:
-        from InDetConfig.TrackingCommonConfig import InDetRotCreatorCfg
-        kwargs["ToolForROTCreation"] = acc.popToolsAndMerge(
-            InDetRotCreatorCfg(flags))
+        if flags.Detector.EnableITk:
+            from InDetConfig.ITkTrackingCommonConfig import ITkRotCreatorCfg
+            kwargs["ToolForROTCreation"] = acc.popToolsAndMerge(
+                ITkRotCreatorCfg(flags))
+        else:
+            from InDetConfig.TrackingCommonConfig import InDetRotCreatorCfg
+            kwargs["ToolForROTCreation"] = acc.popToolsAndMerge(
+                InDetRotCreatorCfg(flags))
 
     if "ToolForExtrapolation" not in kwargs:
         gsfextrap = EMGSFExtrapolatorToolCfg(flags)
diff --git a/Reconstruction/egamma/egammaTrackTools/python/egammaTrackToolsConfig.py b/Reconstruction/egamma/egammaTrackTools/python/egammaTrackToolsConfig.py
index 0acb175d5e136883f9db73fe5bb4d2788f9df844..90ec4db7537ac4adccc65d5463e1ee8ff94e92d8 100644
--- a/Reconstruction/egamma/egammaTrackTools/python/egammaTrackToolsConfig.py
+++ b/Reconstruction/egamma/egammaTrackTools/python/egammaTrackToolsConfig.py
@@ -11,11 +11,37 @@ from TrkConfig.AtlasExtrapolatorConfig import (
 from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg
 
 
+def egCaloDepthCfg(flags, **kwargs):
+    acc = ComponentAccumulator()
+    kwargs.setdefault("name", "egCaloDepthToolmiddle")
+    kwargs.setdefault("DepthChoice", "middle")
+    acc.setPrivateTools(
+        CompFactory.CaloDepthTool(**kwargs))
+    return acc
+
+
+def egCaloSurfaceBuilderCfg(flags, **kwargs):
+    acc = ComponentAccumulator()
+    kwargs.setdefault(
+        "CaloDepthTool",
+        acc.popToolsAndMerge(egCaloDepthCfg(flags)))
+
+    acc.setPrivateTools(
+        CompFactory.CaloSurfaceBuilder(**kwargs)
+    )
+    return acc
+
+
 def EMLastCaloExtensionToolCfg(flags, **kwargs):
+    acc = ComponentAccumulator()
     kwargs.setdefault("name", "EMLastCaloExtensionTool")
     kwargs.setdefault("ParticleType", "electron")
+
+    if "CaloSurfaceBuilder" not in kwargs:
+        kwargs["CaloSurfaceBuilder"] = acc.popToolsAndMerge(
+            egCaloSurfaceBuilderCfg(flags))
+
     if "Extrapolator" not in kwargs:
-        acc = ComponentAccumulator()
         extrapAcc = egammaCaloExtrapolatorCfg(flags)
         kwargs["Extrapolator"] = acc.popToolsAndMerge(extrapAcc)
     return ParticleCaloExtensionToolCfg(flags, **kwargs)
@@ -33,7 +59,6 @@ def EMExtrapolationToolsCfg(flags, **kwargs):
     mlog.debug('Start configuration')
 
     acc = ComponentAccumulator()
-    EMExtrapolationTools = CompFactory.EMExtrapolationTools
 
     # in the std config, it is egammaExtrapolator
     # (called AtlasExtrapolator now). Should this be egammaCaloExtrapolator ?
@@ -49,7 +74,9 @@ def EMExtrapolationToolsCfg(flags, **kwargs):
         kwargs["LastCaloExtensionTool"] = acc.popToolsAndMerge(
             EMLastCaloExtensionToolCfg(flags))
 
-    emExtrapolationTools = EMExtrapolationTools(**kwargs)
+    kwargs["EnableTRT"] = flags.Detector.GeometryTRT
+
+    emExtrapolationTools = CompFactory.EMExtrapolationTools(**kwargs)
     acc.setPrivateTools(emExtrapolationTools)
     return acc
 
diff --git a/Reconstruction/egamma/egammaTrackTools/python/egammaTrackToolsFactories.py b/Reconstruction/egamma/egammaTrackTools/python/egammaTrackToolsFactories.py
index 2e954ab0004359458890e4a2fc49813d59efcd2e..5726df84bee9acb3a91fa2e5d495c401277647e2 100644
--- a/Reconstruction/egamma/egammaTrackTools/python/egammaTrackToolsFactories.py
+++ b/Reconstruction/egamma/egammaTrackTools/python/egammaTrackToolsFactories.py
@@ -3,23 +3,38 @@
 __doc__ = """ToolFactories to instantiate all
 egammaCaloTools with default configuration"""
 __author__ = "Bruno Lenzi , Christos Anastopoulos"
-from egammaRec.Factories import ToolFactory
+from egammaRec.Factories import ToolFactory, PublicToolFactory
 from egammaTrackTools import egammaTrackToolsConf
 from egammaTools.egammaExtrapolators import (
     egammaCaloExtrapolator, egammaExtrapolator)
 import AthenaCommon.CfgMgr as CfgMgr
 
+
+egCaloDepthTool = PublicToolFactory(
+    CfgMgr.CaloDepthTool,
+    name="egCaloDepthTool",
+    DepthChoice="middle"
+)
+
+egCaloSurfaceBuilder = ToolFactory(
+    CfgMgr.CaloSurfaceBuilder,
+    name="egCaloSurfaceBuilder",
+    CaloDepthTool=egCaloDepthTool
+)
+
 EMLastCaloExtensionTool = ToolFactory(
     CfgMgr.Trk__ParticleCaloExtensionTool,
     name="EMLastCaloExtensionTool",
     Extrapolator=egammaCaloExtrapolator,
-    ParticleType="electron")
+    ParticleType="electron",
+    CaloSurfaceBuilder=egCaloSurfaceBuilder)
 
 EMParticleCaloExtensionTool = ToolFactory(
     CfgMgr.Trk__ParticleCaloExtensionTool,
     name="EMParticleCaloExtensionTool",
     Extrapolator=egammaCaloExtrapolator,
     ParticleType="electron",
+    CaloSurfaceBuilder=egCaloSurfaceBuilder,
     StartFromPerigee=True)
 
 
@@ -33,26 +48,3 @@ EMExtrapolationTools = ToolFactory(
     useLastCaching=False
 )
 
-
-EMExtrapolationToolsCache = ToolFactory(
-    egammaTrackToolsConf.EMExtrapolationTools,
-    name="EMExtrapolationToolsCache",
-    LastCaloExtensionTool=EMLastCaloExtensionTool,
-    PerigeeCaloExtensionTool=EMParticleCaloExtensionTool,
-    Extrapolator=egammaExtrapolator,
-    PerigeeCache='GSFPerigeeCaloExtension',
-    LastCache='GSFLastCaloExtension',
-    useCaching=True,
-    useLastCaching=True
-)
-
-EMExtrapolationToolsCommonCache = ToolFactory(
-    egammaTrackToolsConf.EMExtrapolationTools,
-    name="EMExtrapolationToolsCommonCache",
-    LastCaloExtensionTool=EMLastCaloExtensionTool,
-    PerigeeCaloExtensionTool=EMParticleCaloExtensionTool,
-    Extrapolator=egammaExtrapolator,
-    LastCache='ParticleCaloExtension',
-    useCaching=False,
-    useLastCaching=True
-)
diff --git a/Reconstruction/egamma/egammaTrackTools/src/EMExtrapolationTools.cxx b/Reconstruction/egamma/egammaTrackTools/src/EMExtrapolationTools.cxx
index 76f559ea6e0cbfda061db4811a0410b255a62bc1..34a85055c7c9a2230f5386033281ca5d68e30990 100644
--- a/Reconstruction/egamma/egammaTrackTools/src/EMExtrapolationTools.cxx
+++ b/Reconstruction/egamma/egammaTrackTools/src/EMExtrapolationTools.cxx
@@ -106,7 +106,7 @@ EMExtrapolationTools::initialize()
   ATH_CHECK(m_extrapolator.retrieve());
 
   // retrieve TRT-ID helper
-  if (detStore()->contains<TRT_ID>("TRT_ID")) {
+  if (m_enableTRT && detStore()->contains<TRT_ID>("TRT_ID")) {
     StatusCode sc = detStore()->retrieve(m_trtId, "TRT_ID");
     if (sc.isFailure() || !m_trtId->is_valid()) {
       // TRT is not present for sLHC
@@ -139,7 +139,7 @@ StatusCode
 EMExtrapolationTools::getMatchAtCalo(const EventContext& ctx,
                                      const xAOD::CaloCluster& cluster,
                                      const xAOD::TrackParticle& trkPB,
-                                     Trk::PropDirection direction,
+                                     Trk::PropDirection,
                                      std::array<double, 4>& eta,
                                      std::array<double, 4>& phi,
                                      std::array<double, 4>& deltaEta,
@@ -169,12 +169,13 @@ EMExtrapolationTools::getMatchAtCalo(const EventContext& ctx,
      */
     case fromPerigeeRescaled: {
       Trk::Perigee trkPar = getRescaledPerigee(trkPB, cluster);
-      std::unique_ptr<Trk::CaloExtension> extension =
-        m_perigeeParticleCaloExtensionTool->caloExtension(
-          ctx, trkPar, direction, Trk::muon);
-      didExtension = extension != nullptr;
-      if (didExtension) {
-        intersections = getIntersections(*extension, cluster);
+      const auto extension =
+        m_perigeeParticleCaloExtensionTool->egammaCaloExtension(
+          ctx, trkPar, cluster);
+      didExtension = !extension.empty();
+      for (const auto& i : extension) {
+        intersections.emplace_back(
+          i.first, i.second->position().eta(), i.second->position().phi());
       }
     } break;
       /* For the other cases
@@ -354,7 +355,7 @@ EMExtrapolationTools::getEtaPhiAtCalo(const EventContext& ctx,
   if (!vertex) {
     return false;
   }
-  Amg::Vector3D momentum = getMomentumAtVertex(ctx,*vertex);
+  Amg::Vector3D momentum = getMomentumAtVertex(ctx, *vertex);
   if (momentum.mag() < 1e-5) {
     ATH_MSG_DEBUG("Intersection failed");
     return false;
@@ -366,7 +367,7 @@ EMExtrapolationTools::getEtaPhiAtCalo(const EventContext& ctx,
   Trk::PerigeeSurface surface(vertex->position());
   Trk::Perigee trkPar(
     vertex->position(), momentum.unit() * 1.e10, +1, surface, std::nullopt);
-  bool success = getEtaPhiAtCalo(ctx,&trkPar, etaAtCalo, phiAtCalo);
+  bool success = getEtaPhiAtCalo(ctx, &trkPar, etaAtCalo, phiAtCalo);
   return success;
 }
 /*  The actual calculation happens here*/
@@ -488,9 +489,9 @@ EMExtrapolationTools::getMomentumAtVertex(const EventContext& ctx,
     ATH_MSG_DEBUG("getMomentumAtVertex : getting from auxdata");
     return Amg::Vector3D(accPx(vertex), accPy(vertex), accPz(vertex));
   }
-    for (unsigned int i = 0; i < vertex.nTrackParticles(); ++i) {
-      momentum += getMomentumAtVertex(ctx, vertex, i);
-    }
+  for (unsigned int i = 0; i < vertex.nTrackParticles(); ++i) {
+    momentum += getMomentumAtVertex(ctx, vertex, i);
+  }
 
   return momentum;
 }
diff --git a/Reconstruction/egamma/egammaTrackTools/src/EMExtrapolationTools.h b/Reconstruction/egamma/egammaTrackTools/src/EMExtrapolationTools.h
index 068855ca27c2707b2f1bc01b2a1c2c6197a5cde9..2ac63564b4a0616dbb44c9a075c22c850dc299b2 100644
--- a/Reconstruction/egamma/egammaTrackTools/src/EMExtrapolationTools.h
+++ b/Reconstruction/egamma/egammaTrackTools/src/EMExtrapolationTools.h
@@ -148,6 +148,7 @@ private:
 
   // ID TRT helper
   const TRT_ID* m_trtId;
+  Gaudi::Property<bool> m_enableTRT{ this, "EnableTRT", true };
 
   // Cache collections for GSF Track Particle extrapolation Perigee
   SG::ReadHandleKey<CaloExtensionCollection> m_PerigeeCacheKey{
diff --git a/Reconstruction/tauRecTools/Root/TauCombinedTES.cxx b/Reconstruction/tauRecTools/Root/TauCombinedTES.cxx
index e3c7884d4f573f52ace749b39959fda93c549995..dccec0dd9f539306643a2960828778eff139ed49 100644
--- a/Reconstruction/tauRecTools/Root/TauCombinedTES.cxx
+++ b/Reconstruction/tauRecTools/Root/TauCombinedTES.cxx
@@ -14,6 +14,7 @@ TauCombinedTES::TauCombinedTES(const std::string& name) :
   TauRecToolBase(name) {
   declareProperty("addCalibrationResultVariables", m_addCalibrationResultVariables = false);
   declareProperty("WeightFileName", m_calFileName = "");
+  declareProperty("useMvaResolution", m_useMvaResolution = false);
 }
 
 
@@ -109,6 +110,21 @@ StatusCode TauCombinedTES::initialize() {
         ATH_MSG_FATAL("Failed to get an object with name " << graphName);
        	return StatusCode::FAILURE;
       }
+
+      // MVA resolution, optional
+      if(m_useMvaResolution) {
+	graphName = "FinalCalib/Graph_from_ResolutionEt_FinalCalib_" + m_decayModeNames[decayModeIndex] + "_" + m_etaBinNames[etaIndex];
+	graph = dynamic_cast<TGraph*> (calFile->Get(graphName.c_str()));
+	if(graph){
+	  m_mvaResMaxEt[decayModeIndex][etaIndex] = TMath::MaxElement(graph->GetN(), graph->GetX());
+	  m_mvaRes[decayModeIndex][etaIndex] = std::unique_ptr<TGraph>(graph);
+	  ATH_MSG_DEBUG("Adding graph: " << graphName);
+	}
+	else {
+	  ATH_MSG_FATAL("Failed to get an object with name " << graphName);
+	  return StatusCode::FAILURE;
+	}
+      }
     }
   }
   calFile->Close();
@@ -258,7 +274,7 @@ double TauCombinedTES::getCaloCalEt(const double& caloEt,
   // ratio stored in the calibration graph equals (caloEt-truthEt)/caloEt
   double ratio = 0.0;
 
-  // FIXME: If caloEt is larger then max et, could we use the ratio at
+  // FIXME: If caloEt is larger than max et, could we use the ratio at
   // max et, instead of setting it to zero
   if (caloEt <= m_caloRelBiasMaxEt[decayModeIndex][etaIndex]) {
     ratio = m_caloRelBias[decayModeIndex][etaIndex]->Eval(caloEt);
@@ -277,7 +293,7 @@ double TauCombinedTES::getPanTauCalEt(const double& panTauEt,
   // ratio stored in the calibration graph equals (panTauEt-truthEt)/panTauEt
   double ratio = 0.0;
 
-  // Substructure is bad determined at high pt, as track momentum is pooryly measured
+  // Substructure is badly determined at high pt, as track momentum is pooryly measured
   if (panTauEt <= m_panTauRelBiasMaxEt[decayModeIndex][etaIndex]) {
     ratio = m_panTauRelBias[decayModeIndex][etaIndex]->Eval(panTauEt);
   }
@@ -289,16 +305,20 @@ double TauCombinedTES::getPanTauCalEt(const double& panTauEt,
 
 
 
-double TauCombinedTES::getCaloResolution(const xAOD::TauJet& tau) const {
-  // Assume the resolution to be 100% when no calibraction is available
-  if (! isValid(tau)) return 1.0;
+double TauCombinedTES::getMvaEnergyResolution(const xAOD::TauJet& tau) const {
+  // Assume the resolution to be 100% when no parametrisation is available
+  // "validity" criteria might have to be revised if such "invalid taus" end up in analyses
+  if (!isValid(tau) || !m_useMvaResolution) return 1.0;
 
   xAOD::TauJetParameters::DecayMode decayMode = getDecayMode(tau);
   int decayModeIndex = getDecayModeIndex(decayMode);
 
-  int etaIndex = getEtaIndex(tau.etaTauEnergyScale());
+  int etaIndex = getEtaIndex(tau.etaFinalCalib());
 
-  return getCaloResolution(tau.ptTauEnergyScale(), etaIndex, decayModeIndex);
+  double pt = std::min(tau.ptFinalCalib(), m_mvaResMaxEt[decayModeIndex][etaIndex]);
+  double resolution = m_mvaRes[decayModeIndex][etaIndex]->Eval(pt);
+
+  return resolution;
 }
 
 
diff --git a/Reconstruction/tauRecTools/src/TauVertexVariables.cxx b/Reconstruction/tauRecTools/src/TauVertexVariables.cxx
index 458d2911ad9b2c1363ea561924f6ef68dd28821d..971e28b39961b1a252d18b3c9018e94c7f417d5a 100644
--- a/Reconstruction/tauRecTools/src/TauVertexVariables.cxx
+++ b/Reconstruction/tauRecTools/src/TauVertexVariables.cxx
@@ -73,6 +73,7 @@ StatusCode TauVertexVariables::executeVertexVariables(xAOD::TauJet& pTau, xAOD::
   }
 
   // origTrackParameters should be empty in standard reconstruction, origTracks should be empty when re-running from xAOD
+  // cppcheck-suppress invalidLifetime
   if(!origTracks.empty() && !origTrackParameters.empty()) {
     ATH_MSG_ERROR("Inconsistent mix of Trk::Track and Trk::TrackParameter");
     return StatusCode::FAILURE;
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauCombinedTES.h b/Reconstruction/tauRecTools/tauRecTools/TauCombinedTES.h
index a9d6809ac285e004054c4a57a83d59bb18cb327f..c141032b96e363f228c9c3f0d97aff7d24cc5a38 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauCombinedTES.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauCombinedTES.h
@@ -29,10 +29,20 @@ public:
   /** Whether to use calo pt, invoked by TauSmearing tool */
   bool getUseCaloPtFlag(const xAOD::TauJet& tau) const;
   
-  /** Get the resolution of Et at the calo TES, invoked by METSignificance */
-  double getCaloResolution(const xAOD::TauJet& tau) const;
+  /** Get MVA Et resolution, invoked by METSignificance */
+  double getMvaEnergyResolution(const xAOD::TauJet& tau) const;
 
 private:
+    
+  /// Switch for decorating the intermediate results, for combined TES tuning
+  bool m_addCalibrationResultVariables;
+  
+  /// Name of the calibration file 
+  std::string m_calFileName;
+
+  /// Use MVA TES resolution (for MET significance)
+  bool m_useMvaResolution;
+  
   struct Variables
   {
     double pt_constituent{0.0};
@@ -93,12 +103,6 @@ private:
   
   /** Get the allowed difference between calo TES and PanTau */ 
   double getNsigmaCompatibility(const double& caloEt, const int& decayModeIndex) const;
-
-  /// Switch of adding the intermediate results
-  bool m_addCalibrationResultVariables;
-  
-  /// Name of the calibration file 
-  std::string m_calFileName;
   
   /// Binning in the calibraction graph/hist
   enum Binning {DecayModeBinning = 5, EtaBinning = 5};
@@ -132,6 +136,12 @@ private:
   
   /// Maximum Et of m_panTauRes
   std::array<std::array<double, EtaBinning>, DecayModeBinning> m_panTauResMaxEt; //!
+
+  /// Calibration graph: MVA TES resolution as a function of MVA pt
+  std::array<std::array<std::unique_ptr<TGraph>, EtaBinning>, DecayModeBinning> m_mvaRes; //!
+  
+  /// Maximum Et of m_mvaRes
+  std::array<std::array<double, EtaBinning>, DecayModeBinning> m_mvaResMaxEt; //!
   
   /// Calibration histogram: correlation coefficient of calo TES and PanTau
   std::array<std::unique_ptr<TH1F>, DecayModeBinning> m_correlationHists; //!
diff --git a/Simulation/G4Utilities/G4DebuggingTools/python/PostIncludes.py b/Simulation/G4Utilities/G4DebuggingTools/python/PostIncludes.py
index 12e3fa99795622f0a9a7536b1bdfbd80c49c61f2..5a76e8c8adc2b42b5928e863ce0f233d1a9fedc0 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/python/PostIncludes.py
+++ b/Simulation/G4Utilities/G4DebuggingTools/python/PostIncludes.py
@@ -2,6 +2,11 @@
 
 from G4DebuggingTools.G4DebuggingToolsConfigNew import VolumeDebugger
 
+def VolumeDebuggerAtlas(configFlags, name="G4UA::ISFFullUserActionSvc", **kwargs):
+    kwargs.setdefault("TargetVolume","Atlas::Atlas")
+    result = VolumeDebugger(configFlags,name,**kwargs)
+    return result
+
 def VolumeDebuggerITk(configFlags, name="G4UA::ISFFullUserActionSvc", **kwargs):
     kwargs.setdefault("TargetVolume","ITK::ITK")
     result = VolumeDebugger(configFlags,name,**kwargs)
diff --git a/Simulation/G4Utilities/G4DebuggingTools/python/__init__.py b/Simulation/G4Utilities/G4DebuggingTools/python/__init__.py
index 19390759b937a96dac569f5adb3ded0c615384a7..1eadde61a47f151acb966716402e92c0a53c7042 100644
--- a/Simulation/G4Utilities/G4DebuggingTools/python/__init__.py
+++ b/Simulation/G4Utilities/G4DebuggingTools/python/__init__.py
@@ -1,5 +1,5 @@
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
-from .PostIncludes import VolumeDebuggerITk, VolumeDebuggerITkPixel, VolumeDebuggerITkStrip, VolumeDebuggerHGTD
+from .PostIncludes import VolumeDebuggerAtlas, VolumeDebuggerITk, VolumeDebuggerITkPixel, VolumeDebuggerITkStrip, VolumeDebuggerHGTD
  
-__all__ = ['VolumeDebuggerITk','VolumeDebuggerITkPixel','VolumeDebuggerITkStrip','VolumeDebuggerHGTD']
+__all__ = ['VolumeDebuggerAtlas','VolumeDebuggerITk','VolumeDebuggerITkPixel','VolumeDebuggerITkStrip','VolumeDebuggerHGTD']
diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlaySkeleton.py b/Simulation/Overlay/OverlayConfiguration/python/OverlaySkeleton.py
index e22042fffe8623a020422ec32865d051a16ed079..34ed672296be5c86e8ef1b60348ddd09219234cd 100644
--- a/Simulation/Overlay/OverlayConfiguration/python/OverlaySkeleton.py
+++ b/Simulation/Overlay/OverlayConfiguration/python/OverlaySkeleton.py
@@ -4,6 +4,7 @@ import sys
 
 from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags
 from PyJobTransforms.TransformUtils import processPreExec, processPreInclude, processPostExec, processPostInclude
+from SimuJobTransforms.CommonSimulationSteering import specialConfigPreInclude, specialConfigPostInclude
 
 
 def defaultOverlayFlags(configFlags):
@@ -101,6 +102,9 @@ def fromRunArgs(runArgs):
     if hasattr(runArgs, 'triggerConfig') and runArgs.triggerConfig == 'NONE':
         ConfigFlags.Detector.EnableL1Calo = False
 
+    # Special Configuration preInclude
+    specialConfigPreInclude(ConfigFlags)
+
     # Pre-include
     processPreInclude(runArgs, ConfigFlags)
 
@@ -121,6 +125,9 @@ def fromRunArgs(runArgs):
     from Digitization.DigitizationSteering import DigitizationMessageSvcCfg
     cfg.merge(DigitizationMessageSvcCfg(ConfigFlags))
 
+    # Special Configuration postInclude
+    specialConfigPostInclude(ConfigFlags, cfg)
+
     # Post-include
     processPostInclude(runArgs, ConfigFlags, cfg)
 
diff --git a/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py b/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py
index b6a1cf42b88ec05f5b3b921fc5f79f0cd32d67ed..65810363423ea996bd9b32bfc6646a11b4b98256 100644
--- a/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py
+++ b/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py
@@ -71,6 +71,7 @@ if hasattr(overlayArgs, 'maxEvents'):
     athenaCommonFlags.EvtMax.set_Value_and_Lock(overlayArgs.maxEvents)
 
 if hasattr(overlayArgs, 'inputHITSFile'):
+    if not overlayFlags.isDataOverlay(): athenaCommonFlags.FilesInput.set_Value_and_Lock(overlayArgs.inputHITSFile)
     athenaCommonFlags.PoolHitsInput.set_Value_and_Lock(overlayArgs.inputHITSFile)
 else:
     raise RuntimeError('No input HITS file defined')
diff --git a/Simulation/SimuJobTransforms/python/HITtoRDO_Skeleton.py b/Simulation/SimuJobTransforms/python/HITtoRDO_Skeleton.py
index ff109d12a336ab1d93744869d4287e8473ecbf18..d30c0a0728e49716084016335403c79b36df17e3 100644
--- a/Simulation/SimuJobTransforms/python/HITtoRDO_Skeleton.py
+++ b/Simulation/SimuJobTransforms/python/HITtoRDO_Skeleton.py
@@ -4,6 +4,7 @@ import sys
 
 from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags
 from PyJobTransforms.TransformUtils import processPreExec, processPreInclude, processPostExec, processPostInclude
+from SimuJobTransforms.CommonSimulationSteering import specialConfigPreInclude, specialConfigPostInclude
 
 
 def fromRunArgs(runArgs):
@@ -52,6 +53,9 @@ def fromRunArgs(runArgs):
         from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
         setupDetectorsFromList(ConfigFlags, detectors)
 
+    # Special Configuration preInclude
+    specialConfigPreInclude(ConfigFlags)
+
     # Pre-include
     processPreInclude(runArgs, ConfigFlags)
 
@@ -81,6 +85,9 @@ def fromRunArgs(runArgs):
     from Digitization.DigitizationSteering import DigitizationMessageSvcCfg
     cfg.merge(DigitizationMessageSvcCfg(ConfigFlags))
 
+    # Special Configuration postInclude
+    specialConfigPostInclude(ConfigFlags, cfg)
+
     # Post-include
     processPostInclude(runArgs, ConfigFlags, cfg)
 
diff --git a/Simulation/SimulationJobOptions/share/g4/preInclude.G4Optimizations.py b/Simulation/SimulationJobOptions/share/g4/preInclude.G4Optimizations.py
index db824e7f8d78b009ef5a8d03bacfec22e0c2f5bf..d6f9acc2a0dfcbea709b84928c20bdf59fbf203a 100644
--- a/Simulation/SimulationJobOptions/share/g4/preInclude.G4Optimizations.py
+++ b/Simulation/SimulationJobOptions/share/g4/preInclude.G4Optimizations.py
@@ -84,3 +84,16 @@ else:
 from G4AtlasApps import callbacks
 callbacks.turn_on_gamma_range_cuts()
 
+
+##########################################################
+#
+# Activate the G4GammaGeneralProcess and the corresponding
+# job options
+#  
+##########################################################
+
+from G4AtlasApps.SimFlags import simFlags
+simFlags.G4Commands+=["/process/em/UseGeneralProcess true"];
+simFlags.OptionalUserActionList.addAction("G4UA::FixG4CreatorProcessTool")
+
+
diff --git a/TestBeam/TBRec/src/TBBeamQualityMC.cxx b/TestBeam/TBRec/src/TBBeamQualityMC.cxx
index 799a07d6b321279c8542170131c25c1452f73530..5454b788ba62d88736af56bf47a1c4d0ecc021f9 100644
--- a/TestBeam/TBRec/src/TBBeamQualityMC.cxx
+++ b/TestBeam/TBRec/src/TBBeamQualityMC.cxx
@@ -28,7 +28,7 @@ TBBeamQualityMC::TBBeamQualityMC(const std::string & name, ISvcLocator * pSvcLoc
    declareProperty("CheckVetoScint",m_check_veto=true);
    declareProperty("CheckClusters",m_check_clus=false);
    declareProperty("CheckTrackReco",m_check_trackreco=false);
-   declareProperty("ClusterCollectionName",m_clusterCollName="CaloTopoCluster");
+   declareProperty("ClusterCollectionName",m_clusterCollName="CaloTopoClusters");
 }
 
 StatusCode TBBeamQualityMC::initialize() {
diff --git a/TileCalorimeter/TileConditions/python/TileCablingSvcConfig.py b/TileCalorimeter/TileConditions/python/TileCablingSvcConfig.py
index 66ab034a08695ca1ef98e563f7260121ad2c75db..c3994d4dc377180fe7e9b19f8a196e621e0fc444 100644
--- a/TileCalorimeter/TileConditions/python/TileCablingSvcConfig.py
+++ b/TileCalorimeter/TileConditions/python/TileCablingSvcConfig.py
@@ -25,26 +25,37 @@ def TileCablingSvcCfg(flags):
     tileCablingSvc = CompFactory.TileCablingSvc()
 
     geometry = flags.GeoModel.AtlasVersion
-    runNumber = flags.Input.RunNumber[0]
     run = flags.GeoModel.Run
-    if run == 'RUN1':
-        if runNumber > 219651: 
-            # Choose RUN2 cabling for old geometry tags starting from 26-MAR-2013
-            tileCablingSvc.CablingType = 4
-            msg.warning("Forcing RUN2 cabling for run %s with geometry %s", runNumber, geometry)
-
-    elif run == 'RUN2':
-        if (flags.Input.isMC and runNumber >= 310000) or runNumber >= 343000 or runNumber < 1:
-            # Choose RUN2a cabling for R2 geometry tags starting from 31-Jan-2018
-            tileCablingSvc.CablingType = 5
-            msg.info("Forcing RUN2a (2018) cabling for run %s with geometry %s", runNumber, geometry)
-
-        else:
-            tileCablingSvc.CablingType = 4
-            msg.info("Forcing RUN2 (2014-2017) cabling for run %s with geometry %s", runNumber, geometry)
-    elif run == 'RUN3':
-        tileCablingSvc.CablingType = 6
-        msg.info("Forcing RUN3 cabling for run %s with geometry %s", run, geometry)
+
+    if not flags.Common.isOnline:
+      runNumber = flags.Input.RunNumber[0]
+      if run == 'RUN1':
+          if runNumber > 219651:
+              # Choose RUN2 cabling for old geometry tags starting from 26-MAR-2013
+              tileCablingSvc.CablingType = 4
+              msg.warning("Forcing RUN2 cabling for run %s with geometry %s", runNumber, geometry)
+
+      elif run == 'RUN2':
+          if (flags.Input.isMC and runNumber >= 310000) or runNumber >= 343000 or runNumber < 1:
+              # Choose RUN2a cabling for R2 geometry tags starting from 31-Jan-2018
+              tileCablingSvc.CablingType = 5
+              msg.info("Forcing RUN2a (2018) cabling for run %s with geometry %s", runNumber, geometry)
+
+          else:
+              tileCablingSvc.CablingType = 4
+              msg.info("Forcing RUN2 (2014-2017) cabling for run %s with geometry %s", runNumber, geometry)
+      elif run == 'RUN3':
+          tileCablingSvc.CablingType = 6
+          msg.info("Forcing RUN3 cabling for run %s with geometry %s", run, geometry)
+    else: #Running online or simulating running online: either way, do not access run number
+      if run == 'RUN2':
+          tileCablingSvc.CablingType = 5
+          msg.info("Forcing RUN2a (2018) cabling for online run with geometry %s", geometry)
+      elif run == 'RUN3':
+          tileCablingSvc.CablingType = 6
+          msg.info("Forcing RUN3 cabling for online run with geometry %s", geometry)
+      else:
+          log.error("CablingType only defined for Run 2 and Run 3 geometries")
 
     acc.addService(tileCablingSvc, primary = True)
 
diff --git a/TileCalorimeter/TileConfiguration/python/TileConfigFlags.py b/TileCalorimeter/TileConfiguration/python/TileConfigFlags.py
index 07368f70b3bcf4649388ec0ef56f6bb97456fc41..46865d9d5d7f03cae8f8d561efa32398a88cf578 100644
--- a/TileCalorimeter/TileConfiguration/python/TileConfigFlags.py
+++ b/TileCalorimeter/TileConfiguration/python/TileConfigFlags.py
@@ -39,6 +39,13 @@ def createTileConfigFlags():
 
 
 def _doOpt2ByDefault(prevFlags):
+      #For online operation don't check run number
+     if prevFlags.Common.isOnline:
+          if 'collisions' in prevFlags.Beam.Type:
+               return False  # Use OF without iterations for collisions
+          else:
+               return True
+
      runNumber = prevFlags.Input.RunNumber[0]
      # Run Optimal Filter with iterations (Opt2) by default,
      # both for cosmics and collisions data before 2011
diff --git a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref
index 5d11f6ee703db0c23eb9a90b5886a1412d9f5f11..e4cc3b14f643208dcb6f88379de3ad67e7cdf613 100644
--- a/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref
+++ b/TileCalorimeter/TileRecUtils/share/TileCellBuilderFromHit_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:34:52 CET 2021
+Wed Nov 17 09:56:16 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileRecUtils/TileCellBuilderFromHit_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:35:14 2021
+                                          running on pcaz004 on Wed Nov 17 09:56:21 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6623 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -190,7 +185,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -202,9 +197,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -252,22 +247,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -295,7 +274,7 @@ xAODMaker::Even...   INFO Beam conditions service not available
 xAODMaker::Even...   INFO Will not fill beam spot information into xAOD::EventInfo
 PyComponentMgr       INFO Initializing PyComponentMgr...
 testalg1             INFO Initializing testalg1...
-ClassIDSvc           INFO getRegistryEntries: read 5996 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6006 CLIDRegistry entries for module ALL
 ToolSvc.tool1        INFO Storing MBTS cells in MBTSContainer
 ToolSvc.tool1        INFO Noise Sigma 0 MeV is selected!
 AthRNGSvc            INFO Creating engine ToolSvc.tool1
@@ -357,6 +336,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -379,7 +372,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [177530,l:0]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -391,8 +383,8 @@ TileBadChannels...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; N
 TileBadChannels...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
 TileBadChannels...   INFO TileBchStatus::isWrongBCID() is defined by: Wrong BCID; Online wrong BCID; 
 TileBadChannels...   INFO No drawer trips probabilities found in DB
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
 tilecellbuilder...   INFO No TileBchStatus::isBad() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoisy() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -404,8 +396,8 @@ tilecellbuilder...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; N
 tilecellbuilder...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
 tilecellbuilder...   INFO TileBchStatus::isWrongBCID() is defined by: Wrong BCID; Online wrong BCID; 
 tilecellbuilder...   INFO No drawer trips probabilities found in DB
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/build1/tsulaia/athena-loc/build/TileCalorimeter/TileRecUtils/CMakeFiles/unitTestRun/tilecellbuilder_bct2.bch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/home/wlampl/master/build/TileCalorimeter/TileRecUtils/CMakeFiles/unitTestRun/tilecellbuilder_bct2.bch"
 tilecellbuilder...   INFO No TileBchStatus::isBad() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoisy() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -437,22 +429,22 @@ testalg1             INFO Finalizing testalg1...
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
 IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.05 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.07 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.04 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.05 ))s
-IOVDbSvc             INFO  bytes in ((      0.41 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.07 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.06 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
+IOVDbSvc             INFO  bytes in ((      0.53 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.08 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.33 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.06 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.48 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.tool3        INFO Finalizing
@@ -461,9 +453,9 @@ ToolSvc.tool1        INFO Finalizing
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  110 [ms] Ave/Min/Max=    27.5(+-    42.1)/       0/     100 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  140 [ms] Ave/Min/Max=    9.33(+-      30)/       0/     120 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 26.4  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   70 [ms] Ave/Min/Max=    17.5(+-    30.3)/       0/      70 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=   90 [ms] Ave/Min/Max=       6(+-    19.9)/       0/      80 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 18.1  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.ref b/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.ref
index 4b8d83f1b6449031c794f42335172c2e4ad83e8c..4c958a03cd292497f31cb804944a90c95db6078d 100644
--- a/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.ref
+++ b/TileCalorimeter/TileRecUtils/share/TileCellBuilder_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:34:52 CET 2021
+Wed Nov 17 09:55:48 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileRecUtils/TileCellBuilder_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:35:14 2021
+                                          running on pcaz004 on Wed Nov 17 09:55:53 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6623 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -190,7 +185,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -202,9 +197,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -252,22 +247,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -289,7 +268,7 @@ TileTimingCondA...   INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondP
 tilecellbuilder...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
 tilecellbuilder...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
 ClassIDSvc           INFO getRegistryEntries: read 452 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 4979 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 4986 CLIDRegistry entries for module ALL
 xAODMaker::Even...   INFO Initializing xAODMaker::EventInfoCnvAlg
 xAODMaker::Even...   INFO Beam conditions service not available
 xAODMaker::Even...   INFO Will not fill beam spot information into xAOD::EventInfo
@@ -297,7 +276,7 @@ PyComponentMgr       INFO Initializing PyComponentMgr...
 prepalg1             INFO Initializing prepalg1...
 ClassIDSvc           INFO getRegistryEntries: read 108 CLIDRegistry entries for module ALL
 testalg1             INFO Initializing testalg1...
-ClassIDSvc           INFO getRegistryEntries: read 1180 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 1183 CLIDRegistry entries for module ALL
 ToolSvc.tool1        INFO Storing MBTS cells in MBTSContainer
 ToolSvc.tool1        INFO none of thresholds set, all RawChannels will be converted to Cells
 ToolSvc.tool1        INFO taking RawChannels from 'TileRawChannelCnt'
@@ -386,6 +365,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -408,7 +401,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [177530,l:0]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -420,8 +412,8 @@ TileBadChannels...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; N
 TileBadChannels...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
 TileBadChannels...   INFO TileBchStatus::isWrongBCID() is defined by: Wrong BCID; Online wrong BCID; 
 TileBadChannels...   INFO No drawer trips probabilities found in DB
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct1Cond.tilecellbuilder_bct1_ofl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
 tilecellbuilder...   INFO No TileBchStatus::isBad() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoisy() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -433,8 +425,8 @@ tilecellbuilder...   INFO TileBchStatus::isNoGainL1() is defined by: ADC dead; N
 tilecellbuilder...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing; Online bad timing; 
 tilecellbuilder...   INFO TileBchStatus::isWrongBCID() is defined by: Wrong BCID; Online wrong BCID; 
 tilecellbuilder...   INFO No drawer trips probabilities found in DB
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
-tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/build1/tsulaia/athena-loc/build/TileCalorimeter/TileRecUtils/CMakeFiles/unitTestRun/tilecellbuilder_bct2.bch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_onl) for ASCII file name: "/cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNoBad.oflBch"
+tilecellbuilder...   INFO Creating TileCondProxyFile(tilecellbuilder_bct2Cond.tilecellbuilder_bct2_ofl) for ASCII file name: "/home/wlampl/master/build/TileCalorimeter/TileRecUtils/CMakeFiles/unitTestRun/tilecellbuilder_bct2.bch"
 tilecellbuilder...   INFO No TileBchStatus::isBad() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoisy() definition found in DB, using defaults
 tilecellbuilder...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -485,23 +477,23 @@ prepalg1             INFO Finalizing prepalg1...
 testalg1             INFO Finalizing testalg1...
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.05 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.05 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.05 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.05 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.06 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
 IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
-IOVDbSvc             INFO  bytes in ((      0.28 ))s
+IOVDbSvc             INFO  bytes in ((      0.51 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.05 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.23 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.07 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.44 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.tool11       INFO Finalizing
@@ -517,8 +509,8 @@ ToolSvc.tool1        INFO Finalizing
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
 cObjR_ALL            INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      25(+-    37.7)/       0/      90 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    8.67(+-    27.5)/       0/     110 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 27.8  [s]  #=  1
+cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    8.67(+-    27.3)/       0/     110 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 18.6  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileRecUtils/share/TileDQstatusAlg_test.ref b/TileCalorimeter/TileRecUtils/share/TileDQstatusAlg_test.ref
index d3c563a46ff5c9484a3b39fbddd2b6989120303f..aa25f2f8389d72b48441f641afb90ca0ac2f3ee4 100644
--- a/TileCalorimeter/TileRecUtils/share/TileDQstatusAlg_test.ref
+++ b/TileCalorimeter/TileRecUtils/share/TileDQstatusAlg_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:34:52 CET 2021
+Wed Nov 17 09:57:50 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileRecUtils/TileDQstatusAlg_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:35:14 2021
+                                          running on pcaz004 on Wed Nov 17 09:57:55 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6623 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -187,7 +182,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.43S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.3S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -198,7 +193,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -210,9 +205,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -249,7 +244,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 4552Kb 	 Time = 0.13S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.09S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -294,22 +289,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -328,7 +307,7 @@ TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCond
 TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OnlEms) for folder: "/TILE/OFL02/CALIB/EMS"
 TileSampleNoise...   INFO Creating TileCondProxyCool(TileSampleNoiseCondAlg.TileCondProxyCool_NoiseSample) for folder: "/TILE/OFL02/NOISE/SAMPLE"
 TileTimingCondA...   INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
-ClassIDSvc           INFO getRegistryEntries: read 4996 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 5003 CLIDRegistry entries for module ALL
 PyComponentMgr       INFO Initializing PyComponentMgr...
 record1              INFO Initializing record1...
 ClassIDSvc           INFO getRegistryEntries: read 108 CLIDRegistry entries for module ALL
@@ -369,6 +348,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -391,7 +384,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [177530,l:0]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -404,7 +396,7 @@ TileBadChannels...   INFO TileBchStatus::isBadTiming() is defined by: Bad timing
 TileBadChannels...   INFO TileBchStatus::isWrongBCID() is defined by: Wrong BCID; Online wrong BCID; 
 TileBadChannels...   INFO No drawer trips probabilities found in DB
 ClassIDSvc           INFO getRegistryEntries: read 648 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 1287 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 1290 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO getRegistryEntries: read 3 CLIDRegistry entries for module ALL
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #1 1 events processed so far  <<<===
 /cvmfs/atlas-co...   INFO Database being retired...
@@ -421,31 +413,31 @@ record1              INFO Finalizing record1...
 check1               INFO Finalizing check1...
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.05 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.03 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.04 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.06 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
 IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
-IOVDbSvc             INFO  bytes in ((      0.27 ))s
+IOVDbSvc             INFO  bytes in ((      0.43 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.08 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.20 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.07 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.36 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      30(+-    46.4)/       0/     110 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  150 [ms] Ave/Min/Max=      10(+-    32.5)/       0/     130 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 26.1  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   60 [ms] Ave/Min/Max=      15(+-      26)/       0/      60 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=   90 [ms] Ave/Min/Max=       6(+-    19.9)/       0/      80 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 17.4  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileRecUtils/share/TileDQstatusTool_test.ref b/TileCalorimeter/TileRecUtils/share/TileDQstatusTool_test.ref
index 5a1a77409edb420f593c5044afa6e0c697cd45d4..d93faf0791591f89aacf7126c1e7663eb6a875b7 100644
--- a/TileCalorimeter/TileRecUtils/share/TileDQstatusTool_test.ref
+++ b/TileCalorimeter/TileRecUtils/share/TileDQstatusTool_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:34:52 CET 2021
+Wed Nov 17 09:58:15 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileRecUtils/TileDQstatusTool_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:35:14 2021
+                                          running on pcaz004 on Wed Nov 17 09:58:20 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6623 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -187,7 +182,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.46S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.29S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -198,7 +193,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -210,9 +205,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -249,7 +244,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.11S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.1S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -294,22 +289,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -330,7 +309,7 @@ TileSampleNoise...   INFO Creating TileCondProxyCool(TileSampleNoiseCondAlg.Tile
 TileTimingCondA...   INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 PyComponentMgr       INFO Initializing PyComponentMgr...
 test1                INFO Initializing test1...
-ClassIDSvc           INFO getRegistryEntries: read 8188 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 8198 CLIDRegistry entries for module ALL
 ApplicationMgr       INFO Application Manager Initialized successfully
 ClassIDSvc           INFO getRegistryEntries: read 270 CLIDRegistry entries for module ALL
 CondInputLoader      INFO created CondCont<CaloRec::CaloCellPositionShift> with key 'ConditionStore+LArCellPositionShift'
@@ -368,6 +347,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -390,7 +383,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [177530,l:0]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -425,31 +417,31 @@ CondInputLoader      INFO Finalizing CondInputLoader...
 test1                INFO Finalizing test1...
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.02 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.03 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.02 ))s
-IOVDbSvc             INFO  bytes in ((      0.23 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
+IOVDbSvc             INFO  bytes in ((      0.32 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.04 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.19 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.06 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.26 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      25(+-    37.7)/       0/      90 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    8.67(+-    25.5)/       0/     100 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 27.9  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   70 [ms] Ave/Min/Max=    17.5(+-    24.9)/       0/      60 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=  100 [ms] Ave/Min/Max=    6.67(+-    19.9)/       0/      80 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 18.7  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileRecUtils/share/TileRawChannelBuilder_test.ref b/TileCalorimeter/TileRecUtils/share/TileRawChannelBuilder_test.ref
index e83f57bf7e5ebe53cfa1fe506c28dd8a3baae6bb..75fa82b8ab205263c820dd50699447715a2ea861 100644
--- a/TileCalorimeter/TileRecUtils/share/TileRawChannelBuilder_test.ref
+++ b/TileCalorimeter/TileRecUtils/share/TileRawChannelBuilder_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:34:52 CET 2021
+Wed Nov 17 09:56:42 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileRecUtils/TileRawChannelBuilder_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:35:14 2021
+                                          running on pcaz004 on Wed Nov 17 09:57:29 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6623 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -187,7 +182,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.48S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.28S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -198,7 +193,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -210,9 +205,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -249,7 +244,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 4552Kb 	 Time = 0.1S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.1S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -294,22 +289,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -329,7 +308,7 @@ TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCond
 TileSampleNoise...   INFO Creating TileCondProxyCool(TileSampleNoiseCondAlg.TileCondProxyCool_NoiseSample) for folder: "/TILE/OFL02/NOISE/SAMPLE"
 TileTimingCondA...   INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 ClassIDSvc           INFO getRegistryEntries: read 452 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 4979 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 4986 CLIDRegistry entries for module ALL
 xAODMaker::Even...   INFO Initializing xAODMaker::EventInfoCnvAlg
 xAODMaker::Even...   INFO Beam conditions service not available
 xAODMaker::Even...   INFO Will not fill beam spot information into xAOD::EventInfo
@@ -337,7 +316,7 @@ PyComponentMgr       INFO Initializing PyComponentMgr...
 prepalg1             INFO Initializing prepalg1...
 ClassIDSvc           INFO getRegistryEntries: read 108 CLIDRegistry entries for module ALL
 testalg1             INFO Initializing testalg1...
-ClassIDSvc           INFO getRegistryEntries: read 3109 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 3112 CLIDRegistry entries for module ALL
 ToolSvc.tool1        INFO TileRawChannelBuilder::initialize()
 ToolSvc.tool2        INFO TileRawChannelBuilder::initialize()
 ToolSvc.tool2.n...   INFO Initializing...
@@ -377,6 +356,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -399,7 +392,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[0,l:0] - [177530,l:0]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[0,t:0,l:0] - [177530,l:0]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -432,23 +424,23 @@ prepalg1             INFO Finalizing prepalg1...
 testalg1             INFO Finalizing testalg1...
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.04 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.01 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641476 ((     0.05 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/97884 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.02 ))s
-IOVDbSvc             INFO  bytes in ((      0.26 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
+IOVDbSvc             INFO  bytes in ((      0.36 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.04 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.21 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.06 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.30 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.tool2        INFO Finalizing
@@ -456,9 +448,9 @@ ToolSvc.tool1        INFO Finalizing
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      25(+-    43.3)/       0/     100 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    8.67(+-    29.9)/       0/     120 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 26.5  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   80 [ms] Ave/Min/Max=      20(+-    29.2)/       0/      70 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=   90 [ms] Ave/Min/Max=       6(+-    17.8)/       0/      70 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 17.6  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileSvc/TileByteStream/share/TileBeamElemContByteStreamCnv_test.ref b/TileCalorimeter/TileSvc/TileByteStream/share/TileBeamElemContByteStreamCnv_test.ref
index 7d50372182089d7c50eae0968ba8f7eec6e24ed2..00a5e15cba6b86da8d607d8a5f9ec14b31c4dafa 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/share/TileBeamElemContByteStreamCnv_test.ref
+++ b/TileCalorimeter/TileSvc/TileByteStream/share/TileBeamElemContByteStreamCnv_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:42:55 CET 2021
+Wed Nov 17 10:00:43 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileBeamElemContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:17 2021
+                                          running on pcaz004 on Wed Nov 17 10:00:48 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -90,7 +85,7 @@ IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/STATUS/ADC
 IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY
 IOVDbSvc             INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC
 IOVDbSvc             INFO Added taginfo remove for /LAR/LArCellPositionShift
-ClassIDSvc           INFO getRegistryEntries: read 1848 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 1853 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL
 DetDescrCnvSvc       INFO  initializing 
 DetDescrCnvSvc       INFO Found DetectorStore service
@@ -193,7 +188,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.48S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.34S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -204,7 +199,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -216,9 +211,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -255,7 +250,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.13S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.08S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -300,22 +295,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -386,6 +365,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -408,7 +401,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[177530,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -635,22 +627,22 @@ Finalize: compared 10 dumps
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
 IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641504 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/93060 ((     0.06 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641504 ((     0.06 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/93060 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
 IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
-IOVDbSvc             INFO  bytes in ((      0.32 ))s
+IOVDbSvc             INFO  bytes in ((      0.39 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
 IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.06 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.26 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.33 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.TileROD...   INFO Finalizing
@@ -658,18 +650,18 @@ ToolSvc.ByteStr...   INFO in finalize()
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      30(+-      52)/       0/     120 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  150 [ms] Ave/Min/Max=      10(+-    32.5)/       0/     130 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 5.94  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   70 [ms] Ave/Min/Max=    17.5(+-    24.9)/       0/      60 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=  110 [ms] Ave/Min/Max=    7.33(+-    22.6)/       0/      90 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 4.89  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
 ApplicationMgr       INFO Application Manager Terminated successfully
 Py:Athena            INFO leaving with code 0: "successful run"
-Mon Nov  1 22:43:31 CET 2021
+Wed Nov 17 10:00:56 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [4] concurrent threads and [4] concurrent events
@@ -678,14 +670,9 @@ Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileBeamElemContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -704,20 +691,20 @@ MessageSvc           INFO Activating in a separate thread
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:52 2021
+                                          running on pcaz004 on Wed Nov 17 10:01:01 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc                                                  INFO in initialize...
 AthDictLoaderSvc                                                  INFO acquired Dso-registry
-ClassIDSvc                                                        INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc                                                       INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc                                                       INFO Initializing MetaDataSvc
 PoolSvc                                                           INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc                                                           INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc                                                           INFO Frontier compression level set to 5
 DBReplicaSvc                                                      INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc                                                      INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc                                                      INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc                                                           INFO Successfully setup replica sorting algorithm
 PoolSvc                                                           INFO Setting up APR FileCatalog and Streams
 PoolSvc                                                           INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -761,7 +748,7 @@ IOVDbSvc                                                          INFO Added tag
 IOVDbSvc                                                          INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY
 IOVDbSvc                                                          INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC
 IOVDbSvc                                                          INFO Added taginfo remove for /LAR/LArCellPositionShift
-ClassIDSvc                                                        INFO getRegistryEntries: read 1848 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 1853 CLIDRegistry entries for module ALL
 ClassIDSvc                                                        INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL
 DetDescrCnvSvc                                                    INFO  initializing 
 DetDescrCnvSvc                                                    INFO Found DetectorStore service
@@ -864,7 +851,7 @@ EMECConstruction                                                  INFO multi-lay
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstruction                                              INFO Start building EC electronics geometry
-GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.44S
+GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.3S
 GeoModelSvc.TileDetectorTool                                      INFO  Entering TileDetectorTool::create()
 TileDddbManager                                                   INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager                                                   INFO n_tiglob = 5
@@ -875,7 +862,7 @@ TileDddbManager                                                   INFO n_tilb =
 TileDddbManager                                                   INFO n_tileSwitches = 1
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDescrCnv                                               INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID                                                          INFO initialize_from_dictionary 
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
@@ -887,9 +874,9 @@ CaloIDHelper_IDDetDescrCnv                                        INFO in create
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID                                                    INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -926,7 +913,7 @@ GeoModelSvc.TileDetectorTool                                      INFO  Global p
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrManager                                               INFO Entering create_elements()
-GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 4552Kb 	 Time = 0.14S
+GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 4552Kb 	 Time = 0.08S
 ClassIDSvc                                                        INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -974,22 +961,6 @@ CondInputLoader                                              0    INFO Will crea
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc                                                   0    INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-TileNeighbour                                                0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloSuperCellAlignCondAlg.CaloSuperCellIDTool                0    INFO Done with initIDMap
 TileBadChannelsCondAlg.TileCondProxyCool_OnlBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannelsCondAlg.TileCondProxyCool_OflBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannelsCondAlg                                       0    INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -1010,7 +981,7 @@ TileSampleNoiseCon...TileCondProxyCool_NoiseSample           0    INFO Creating
 TileTimingCondAlg.TileCondProxyCool_AdcOffset                0    INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 ThreadPoolSvc                                                0    INFO no thread init tools attached
 AvalancheSchedulerSvc                                        0    INFO Activating scheduler in a separate thread
-AvalancheSchedulerSvc                                        0    INFO Found 17 algorithms
+AvalancheSchedulerSvc                                        0    INFO Found 16 algorithms
 AvalancheSchedulerSvc                                        0    INFO Will attribute the following unmet INPUT dependencies to "SGInputLoader/SGInputLoader" Algorithm
 AvalancheSchedulerSvc                                        0    INFO    o  ( 'TileBeamElemContainer' , 'StoreGateSvc+TileBeamElemCnt' )     required by Algorithm: 
 AvalancheSchedulerSvc                                        0    INFO        * TileBeamElemCntDumper
@@ -1074,6 +1045,20 @@ AtlasDetectorID                                        0     0    INFO initializ
 CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID                                             0     0    INFO initialize_from_dictionary
 AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+TileNeighbour                                          0     0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
 CaloIdMgrDetDescrCnv                                   0     0    INFO  Finished 
 CaloIdMgrDetDescrCnv                                   0     0    INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]                                       0     0    INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -1288,7 +1273,7 @@ AthenaHiveEventLoopMgr                                99     1    INFO   ===>>>
 AthenaHiveEventLoopMgr                                97     2    INFO   ===>>>  done processing event #1148893, run #204073 on slot 2,  98 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                98     0    INFO   ===>>>  done processing event #1156938, run #204073 on slot 0,  99 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                99     1    INFO   ===>>>  done processing event #1156351, run #204073 on slot 1,  100 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     1    INFO ---> Loop Finished (seconds): 3.30858
+AthenaHiveEventLoopMgr                                99     1    INFO ---> Loop Finished (seconds): 3.3893
 Domain[ROOT_All]                                                  INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr                                                    INFO Application Manager Stopped successfully
 SGInputLoader                                                     INFO Finalizing SGInputLoader...
@@ -1324,9 +1309,9 @@ ToolSvc.ByteStreamMetadataTool                                    INFO in finali
 *****Chrono*****                                                  INFO WARNING: MT job; statistics are unreliable
 *****Chrono*****                                                  INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****                                                  INFO ****************************************************************************************************
-cObjR_ALL                                                         INFO Time User   : Tot=  110 [ms] Ave/Min/Max=      55(+-      45)/      10/     100 [ms] #=  2
-cObj_ALL                                                          INFO Time User   : Tot=  140 [ms] Ave/Min/Max=      70(+-      50)/      20/     120 [ms] #=  2
-ChronoStatSvc                                                     INFO Time User   : Tot= 5.36  [s]  #=  1
+cObjR_ALL                                                         INFO Time User   : Tot=   60 [ms] Ave/Min/Max=      30(+-      30)/       0/      60 [ms] #=  2
+cObj_ALL                                                          INFO Time User   : Tot=   70 [ms] Ave/Min/Max=      35(+-      25)/      10/      60 [ms] #=  2
+ChronoStatSvc                                                     INFO Time User   : Tot= 4.86  [s]  #=  1
 *****Chrono*****                                                  INFO ****************************************************************************************************
 ChronoStatSvc.finalize()                                          INFO  Service finalized successfully 
 ApplicationMgr                                                    INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileSvc/TileByteStream/share/TileDigitsContByteStreamCnv_test.ref b/TileCalorimeter/TileSvc/TileByteStream/share/TileDigitsContByteStreamCnv_test.ref
index 2762e2981a9d0046d0358f8bd9bee6ac15e35e9f..42eb086fb4281bd036ef9c6a82a7bc68e520bdb0 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/share/TileDigitsContByteStreamCnv_test.ref
+++ b/TileCalorimeter/TileSvc/TileByteStream/share/TileDigitsContByteStreamCnv_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:42:55 CET 2021
+Wed Nov 17 09:59:37 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileDigitsContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:17 2021
+                                          running on pcaz004 on Wed Nov 17 09:59:42 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -72,7 +67,7 @@ ClassIDSvc           INFO getRegistryEntries: read 2821 CLIDRegistry entries for
 IOVDbSvc             INFO preLoadAddresses: Removing folder /TagInfo. It should only be in the file meta data and was not found.
 IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 ClassIDSvc           INFO getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 1848 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 1853 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvc.IOVSvcTool    INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLOFL_TILE/OFLP200
@@ -193,7 +188,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.45S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.28S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -204,7 +199,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -216,9 +211,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -255,7 +250,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.14S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.11S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -300,22 +295,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -386,6 +365,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -408,7 +401,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[177530,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -635,23 +627,23 @@ Finalizer            INFO Finalizing Finalizer...
 Finalize: compared 20 dumps
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.04 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.03 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.01 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641504 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/93060 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
-IOVDbSvc             INFO  bytes in ((      0.22 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641504 ((     0.05 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/93060 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.04 ))s
+IOVDbSvc             INFO  bytes in ((      0.40 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.05 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.17 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.08 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.32 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.TileDig...   INFO Finalizing TileDigitsContByteStreamTool successfuly
@@ -660,18 +652,18 @@ ToolSvc.ByteStr...   INFO in finalize()
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    32.5(+-    50.7)/       0/     120 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  160 [ms] Ave/Min/Max=    10.7(+-    34.9)/       0/     140 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 7.54  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   70 [ms] Ave/Min/Max=    17.5(+-    24.9)/       0/      60 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=  110 [ms] Ave/Min/Max=    7.33(+-    22.4)/       0/      90 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 5.84  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
 ApplicationMgr       INFO Application Manager Terminated successfully
 Py:Athena            INFO leaving with code 0: "successful run"
-Mon Nov  1 22:43:35 CET 2021
+Wed Nov 17 09:59:58 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [4] concurrent threads and [4] concurrent events
@@ -680,14 +672,9 @@ Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileDigitsContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -706,20 +693,20 @@ MessageSvc           INFO Activating in a separate thread
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:55 2021
+                                          running on pcaz004 on Wed Nov 17 10:00:03 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc                                                  INFO in initialize...
 AthDictLoaderSvc                                                  INFO acquired Dso-registry
-ClassIDSvc                                                        INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc                                                       INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc                                                       INFO Initializing MetaDataSvc
 PoolSvc                                                           INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc                                                           INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc                                                           INFO Frontier compression level set to 5
 DBReplicaSvc                                                      INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc                                                      INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc                                                      INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc                                                           INFO Successfully setup replica sorting algorithm
 PoolSvc                                                           INFO Setting up APR FileCatalog and Streams
 PoolSvc                                                           INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -745,7 +732,7 @@ ClassIDSvc                                                        INFO getRegist
 IOVDbSvc                                                          INFO preLoadAddresses: Removing folder /TagInfo. It should only be in the file meta data and was not found.
 IOVDbSvc                                                          INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 ClassIDSvc                                                        INFO getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-ClassIDSvc                                                        INFO getRegistryEntries: read 1848 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 1853 CLIDRegistry entries for module ALL
 IOVSvc                                                            INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvc.IOVSvcTool                                                 INFO IOVRanges will be checked at every Event
 IOVDbSvc                                                          INFO Opening COOL connection for COOLOFL_TILE/OFLP200
@@ -866,7 +853,7 @@ EMECConstruction                                                  INFO multi-lay
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstruction                                              INFO Start building EC electronics geometry
-GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.37S
+GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.37S
 GeoModelSvc.TileDetectorTool                                      INFO  Entering TileDetectorTool::create()
 TileDddbManager                                                   INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager                                                   INFO n_tiglob = 5
@@ -877,7 +864,7 @@ TileDddbManager                                                   INFO n_tilb =
 TileDddbManager                                                   INFO n_tileSwitches = 1
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDescrCnv                                               INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID                                                          INFO initialize_from_dictionary 
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
@@ -889,9 +876,9 @@ CaloIDHelper_IDDetDescrCnv                                        INFO in create
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID                                                    INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -928,7 +915,7 @@ GeoModelSvc.TileDetectorTool                                      INFO  Global p
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrManager                                               INFO Entering create_elements()
-GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 4552Kb 	 Time = 0.11S
+GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.1S
 ClassIDSvc                                                        INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -976,22 +963,6 @@ CondInputLoader                                              0    INFO Will crea
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc                                                   0    INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-TileNeighbour                                                0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloSuperCellAlignCondAlg.CaloSuperCellIDTool                0    INFO Done with initIDMap
 TileBadChannelsCondAlg.TileCondProxyCool_OnlBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannelsCondAlg.TileCondProxyCool_OflBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannelsCondAlg                                       0    INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -1012,7 +983,7 @@ TileSampleNoiseCon...TileCondProxyCool_NoiseSample           0    INFO Creating
 TileTimingCondAlg.TileCondProxyCool_AdcOffset                0    INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 ThreadPoolSvc                                                0    INFO no thread init tools attached
 AvalancheSchedulerSvc                                        0    INFO Activating scheduler in a separate thread
-AvalancheSchedulerSvc                                        0    INFO Found 18 algorithms
+AvalancheSchedulerSvc                                        0    INFO Found 17 algorithms
 AvalancheSchedulerSvc                                        0    INFO Will attribute the following unmet INPUT dependencies to "SGInputLoader/SGInputLoader" Algorithm
 AvalancheSchedulerSvc                                        0    INFO    o  ( 'TileDigitsContainer' , 'StoreGateSvc+MuRcvDigitsCnt' )     required by Algorithm: 
 AvalancheSchedulerSvc                                        0    INFO        * MuRcvDigitsCntDumper
@@ -1078,6 +1049,20 @@ AtlasDetectorID                                        0     0    INFO initializ
 CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID                                             0     0    INFO initialize_from_dictionary
 AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+TileNeighbour                                          0     0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
 CaloIdMgrDetDescrCnv                                   0     0    INFO  Finished 
 CaloIdMgrDetDescrCnv                                   0     0    INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]                                       0     0    INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -1293,7 +1278,7 @@ AthenaHiveEventLoopMgr                                99     1    INFO   ===>>>
 AthenaHiveEventLoopMgr                                97     2    INFO   ===>>>  done processing event #1148893, run #204073 on slot 2,  98 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                98     0    INFO   ===>>>  done processing event #1156938, run #204073 on slot 0,  99 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                99     1    INFO   ===>>>  done processing event #1156351, run #204073 on slot 1,  100 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     1    INFO ---> Loop Finished (seconds): 3.26441
+AthenaHiveEventLoopMgr                                99     1    INFO ---> Loop Finished (seconds): 3.42684
 Domain[ROOT_All]                                                  INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr                                                    INFO Application Manager Stopped successfully
 SGInputLoader                                                     INFO Finalizing SGInputLoader...
@@ -1330,9 +1315,9 @@ ToolSvc.ByteStreamMetadataTool                                    INFO in finali
 *****Chrono*****                                                  INFO WARNING: MT job; statistics are unreliable
 *****Chrono*****                                                  INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****                                                  INFO ****************************************************************************************************
-cObjR_ALL                                                         INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      50(+-      50)/       0/     100 [ms] #=  2
-cObj_ALL                                                          INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      60(+-      50)/      10/     110 [ms] #=  2
-ChronoStatSvc                                                     INFO Time User   : Tot= 6.69  [s]  #=  1
+cObjR_ALL                                                         INFO Time User   : Tot=   60 [ms] Ave/Min/Max=      30(+-      30)/       0/      60 [ms] #=  2
+cObj_ALL                                                          INFO Time User   : Tot=   80 [ms] Ave/Min/Max=      40(+-      30)/      10/      70 [ms] #=  2
+ChronoStatSvc                                                     INFO Time User   : Tot= 6.12  [s]  #=  1
 *****Chrono*****                                                  INFO ****************************************************************************************************
 ChronoStatSvc.finalize()                                          INFO  Service finalized successfully 
 ApplicationMgr                                                    INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileSvc/TileByteStream/share/TileL2ContByteStreamCnv_test.ref b/TileCalorimeter/TileSvc/TileByteStream/share/TileL2ContByteStreamCnv_test.ref
index 0289b211ec9578b3f263179ad514774ca7b422b1..05478493f8eba9d5ec541039000e5eeaa3b2019a 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/share/TileL2ContByteStreamCnv_test.ref
+++ b/TileCalorimeter/TileSvc/TileByteStream/share/TileL2ContByteStreamCnv_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:42:55 CET 2021
+Wed Nov 17 10:28:28 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileL2ContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:17 2021
+                                          running on pcaz004 on Wed Nov 17 10:28:33 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -90,7 +85,7 @@ IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/STATUS/ADC
 IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY
 IOVDbSvc             INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC
 IOVDbSvc             INFO Added taginfo remove for /LAR/LArCellPositionShift
-ClassIDSvc           INFO getRegistryEntries: read 1858 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 1863 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL
 DetDescrCnvSvc       INFO  initializing 
 DetDescrCnvSvc       INFO Found DetectorStore service
@@ -193,7 +188,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.45S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 24048Kb 	 Time = 0.34S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -204,7 +199,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -216,9 +211,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -255,7 +250,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.11S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.08S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -300,22 +295,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -386,6 +365,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -408,7 +401,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[177530,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -636,22 +628,22 @@ Finalize: compared 10 dumps
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
 IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.01 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641504 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/93060 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641504 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/93060 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
 IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.02 ))s
-IOVDbSvc             INFO  bytes in ((      0.21 ))s
+IOVDbSvc             INFO  bytes in ((      0.30 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
 IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.04 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.17 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.25 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.TileROD...   INFO Finalizing
@@ -659,18 +651,18 @@ ToolSvc.ByteStr...   INFO in finalize()
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      25(+-    43.3)/       0/     100 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    8.67(+-    27.5)/       0/     110 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot=  6.3  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   70 [ms] Ave/Min/Max=    17.5(+-    24.9)/       0/      60 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=   80 [ms] Ave/Min/Max=    5.33(+-    17.5)/       0/      70 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 5.16  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
 ApplicationMgr       INFO Application Manager Terminated successfully
 Py:Athena            INFO leaving with code 0: "successful run"
-Mon Nov  1 22:43:31 CET 2021
+Wed Nov 17 10:28:40 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [4] concurrent threads and [4] concurrent events
@@ -679,14 +671,9 @@ Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileL2ContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -705,20 +692,20 @@ MessageSvc           INFO Activating in a separate thread
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:52 2021
+                                          running on pcaz004 on Wed Nov 17 10:28:45 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc                                                  INFO in initialize...
 AthDictLoaderSvc                                                  INFO acquired Dso-registry
-ClassIDSvc                                                        INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc                                                       INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc                                                       INFO Initializing MetaDataSvc
 PoolSvc                                                           INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc                                                           INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc                                                           INFO Frontier compression level set to 5
 DBReplicaSvc                                                      INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc                                                      INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc                                                      INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc                                                           INFO Successfully setup replica sorting algorithm
 PoolSvc                                                           INFO Setting up APR FileCatalog and Streams
 PoolSvc                                                           INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -762,7 +749,7 @@ IOVDbSvc                                                          INFO Added tag
 IOVDbSvc                                                          INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY
 IOVDbSvc                                                          INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC
 IOVDbSvc                                                          INFO Added taginfo remove for /LAR/LArCellPositionShift
-ClassIDSvc                                                        INFO getRegistryEntries: read 1858 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 1863 CLIDRegistry entries for module ALL
 ClassIDSvc                                                        INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL
 DetDescrCnvSvc                                                    INFO  initializing 
 DetDescrCnvSvc                                                    INFO Found DetectorStore service
@@ -865,7 +852,7 @@ EMECConstruction                                                  INFO multi-lay
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstruction                                              INFO Start building EC electronics geometry
-GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 24052Kb 	 Time = 0.4S
+GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.29S
 GeoModelSvc.TileDetectorTool                                      INFO  Entering TileDetectorTool::create()
 TileDddbManager                                                   INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager                                                   INFO n_tiglob = 5
@@ -876,7 +863,7 @@ TileDddbManager                                                   INFO n_tilb =
 TileDddbManager                                                   INFO n_tileSwitches = 1
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDescrCnv                                               INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID                                                          INFO initialize_from_dictionary 
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
@@ -888,9 +875,9 @@ CaloIDHelper_IDDetDescrCnv                                        INFO in create
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID                                                    INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -927,7 +914,7 @@ GeoModelSvc.TileDetectorTool                                      INFO  Global p
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrManager                                               INFO Entering create_elements()
-GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 4552Kb 	 Time = 0.13S
+GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.11S
 ClassIDSvc                                                        INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -975,22 +962,6 @@ CondInputLoader                                              0    INFO Will crea
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc                                                   0    INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-TileNeighbour                                                0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloSuperCellAlignCondAlg.CaloSuperCellIDTool                0    INFO Done with initIDMap
 TileBadChannelsCondAlg.TileCondProxyCool_OnlBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannelsCondAlg.TileCondProxyCool_OflBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannelsCondAlg                                       0    INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -1011,7 +982,7 @@ TileSampleNoiseCon...TileCondProxyCool_NoiseSample           0    INFO Creating
 TileTimingCondAlg.TileCondProxyCool_AdcOffset                0    INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 ThreadPoolSvc                                                0    INFO no thread init tools attached
 AvalancheSchedulerSvc                                        0    INFO Activating scheduler in a separate thread
-AvalancheSchedulerSvc                                        0    INFO Found 17 algorithms
+AvalancheSchedulerSvc                                        0    INFO Found 16 algorithms
 AvalancheSchedulerSvc                                        0    INFO Will attribute the following unmet INPUT dependencies to "SGInputLoader/SGInputLoader" Algorithm
 AvalancheSchedulerSvc                                        0    INFO    o  ( 'TileL2Container' , 'StoreGateSvc+TileL2Cnt' )     required by Algorithm: 
 AvalancheSchedulerSvc                                        0    INFO        * TileL2CntDumper
@@ -1075,6 +1046,20 @@ AtlasDetectorID                                        0     0    INFO initializ
 CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID                                             0     0    INFO initialize_from_dictionary
 AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+TileNeighbour                                          0     0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
 CaloIdMgrDetDescrCnv                                   0     0    INFO  Finished 
 CaloIdMgrDetDescrCnv                                   0     0    INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]                                       0     0    INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -1290,7 +1275,7 @@ AthenaHiveEventLoopMgr                                99     1    INFO   ===>>>
 AthenaHiveEventLoopMgr                                97     2    INFO   ===>>>  done processing event #1148893, run #204073 on slot 2,  98 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                98     0    INFO   ===>>>  done processing event #1156938, run #204073 on slot 0,  99 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                99     1    INFO   ===>>>  done processing event #1156351, run #204073 on slot 1,  100 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     1    INFO ---> Loop Finished (seconds): 3.38631
+AthenaHiveEventLoopMgr                                99     1    INFO ---> Loop Finished (seconds): 3.28374
 Domain[ROOT_All]                                                  INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr                                                    INFO Application Manager Stopped successfully
 SGInputLoader                                                     INFO Finalizing SGInputLoader...
@@ -1313,10 +1298,10 @@ IOVDbFolder                                                       INFO Folder /T
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
 IOVDbFolder                                                       INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
-IOVDbFolder                                                       INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 ((     0.01 ))s
-IOVDbSvc                                                          INFO  bytes in ((      0.03 ))s
+IOVDbFolder                                                       INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 ((     0.02 ))s
+IOVDbSvc                                                          INFO  bytes in ((      0.04 ))s
 IOVDbSvc                                                          INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc                                                          INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: ((     0.03 ))s
+IOVDbSvc                                                          INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: ((     0.04 ))s
 IOVDbSvc                                                          INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 1 nFolders: 11 ReadTime: ((     0.00 ))s
 AthDictLoaderSvc                                                  INFO in finalize...
 ToolSvc                                                           INFO Removing all tools created by ToolSvc
@@ -1326,9 +1311,9 @@ ToolSvc.ByteStreamMetadataTool                                    INFO in finali
 *****Chrono*****                                                  INFO WARNING: MT job; statistics are unreliable
 *****Chrono*****                                                  INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****                                                  INFO ****************************************************************************************************
-cObjR_ALL                                                         INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      50(+-      50)/       0/     100 [ms] #=  2
-cObj_ALL                                                          INFO Time User   : Tot=  130 [ms] Ave/Min/Max=      65(+-      45)/      20/     110 [ms] #=  2
-ChronoStatSvc                                                     INFO Time User   : Tot= 6.07  [s]  #=  1
+cObjR_ALL                                                         INFO Time User   : Tot=   60 [ms] Ave/Min/Max=      30(+-      30)/       0/      60 [ms] #=  2
+cObj_ALL                                                          INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      50(+-      40)/      10/      90 [ms] #=  2
+ChronoStatSvc                                                     INFO Time User   : Tot= 5.19  [s]  #=  1
 *****Chrono*****                                                  INFO ****************************************************************************************************
 ChronoStatSvc.finalize()                                          INFO  Service finalized successfully 
 ApplicationMgr                                                    INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileSvc/TileByteStream/share/TileLaserObjByteStreamCnv_test.ref b/TileCalorimeter/TileSvc/TileByteStream/share/TileLaserObjByteStreamCnv_test.ref
index 3f12590b6d78afd32cc13a908fdc78bfd8fd8dd6..1319fbb969d21e482cb8f06ef6f950787fbe0270 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/share/TileLaserObjByteStreamCnv_test.ref
+++ b/TileCalorimeter/TileSvc/TileByteStream/share/TileLaserObjByteStreamCnv_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:42:55 CET 2021
+Wed Nov 17 10:28:54 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileLaserObjByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:17 2021
+                                          running on pcaz004 on Wed Nov 17 10:28:59 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -192,7 +187,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.38S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.31S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -203,7 +198,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -215,9 +210,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -254,7 +249,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 2504Kb 	 Time = 0.11S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.08S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -299,22 +294,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -333,7 +312,7 @@ TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCond
 TileEMScaleCond...   INFO Creating TileCondProxyCool(TileEMScaleCondAlg.TileCondProxyCool_OnlEms) for folder: "/TILE/OFL02/CALIB/EMS"
 TileSampleNoise...   INFO Creating TileCondProxyCool(TileSampleNoiseCondAlg.TileCondProxyCool_NoiseSample) for folder: "/TILE/OFL02/NOISE/SAMPLE"
 TileTimingCondA...   INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
-ClassIDSvc           INFO getRegistryEntries: read 4730 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 4732 CLIDRegistry entries for module ALL
 PyComponentMgr       INFO Initializing PyComponentMgr...
 Finalizer            INFO Initializing Finalizer...
 ByteStreamInputSvc   INFO Initializing
@@ -385,6 +364,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -407,7 +400,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[177530,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -633,23 +625,23 @@ Finalizer            INFO Finalizing Finalizer...
 Finalize: compared 10 dumps
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.02 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/104912 ((     0.03 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641536 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/43176 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.02 ))s
-IOVDbSvc             INFO  bytes in ((      0.22 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.05 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641536 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/43176 ((     0.02 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
+IOVDbSvc             INFO  bytes in ((      0.41 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.05 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.18 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.06 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.36 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.TileROD...   INFO Finalizing
@@ -657,18 +649,18 @@ ToolSvc.ByteStr...   INFO in finalize()
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  130 [ms] Ave/Min/Max=    32.5(+-    50.7)/       0/     120 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  150 [ms] Ave/Min/Max=      10(+-    32.5)/       0/     130 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 2.75  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   80 [ms] Ave/Min/Max=      20(+-    29.2)/       0/      70 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=   90 [ms] Ave/Min/Max=       6(+-    19.9)/       0/      80 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 2.09  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
 ApplicationMgr       INFO Application Manager Terminated successfully
 Py:Athena            INFO leaving with code 0: "successful run"
-Mon Nov  1 22:43:27 CET 2021
+Wed Nov 17 10:29:03 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [4] concurrent threads and [4] concurrent events
@@ -677,14 +669,9 @@ Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileLaserObjByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -703,20 +690,20 @@ MessageSvc           INFO Activating in a separate thread
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:48 2021
+                                          running on pcaz004 on Wed Nov 17 10:29:08 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc                                                  INFO in initialize...
 AthDictLoaderSvc                                                  INFO acquired Dso-registry
-ClassIDSvc                                                        INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc                                                       INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc                                                       INFO Initializing MetaDataSvc
 PoolSvc                                                           INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc                                                           INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc                                                           INFO Frontier compression level set to 5
 DBReplicaSvc                                                      INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc                                                      INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc                                                      INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc                                                           INFO Successfully setup replica sorting algorithm
 PoolSvc                                                           INFO Setting up APR FileCatalog and Streams
 PoolSvc                                                           INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -862,7 +849,7 @@ EMECConstruction                                                  INFO multi-lay
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstruction                                              INFO Start building EC electronics geometry
-GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.45S
+GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.28S
 GeoModelSvc.TileDetectorTool                                      INFO  Entering TileDetectorTool::create()
 TileDddbManager                                                   INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager                                                   INFO n_tiglob = 5
@@ -873,7 +860,7 @@ TileDddbManager                                                   INFO n_tilb =
 TileDddbManager                                                   INFO n_tileSwitches = 1
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDescrCnv                                               INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID                                                          INFO initialize_from_dictionary 
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
@@ -885,9 +872,9 @@ CaloIDHelper_IDDetDescrCnv                                        INFO in create
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID                                                    INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -924,7 +911,7 @@ GeoModelSvc.TileDetectorTool                                      INFO  Global p
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrManager                                               INFO Entering create_elements()
-GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.14S
+GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.08S
 ClassIDSvc                                                        INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -937,7 +924,7 @@ TileCablingSvc                                                    INFO RUN2 ATLA
 TileCablingSvc                                                    INFO Cabling for RUN2a (2018) ATLAS geometry is set via jobOptions 
 TileCablingSvc                                                    INFO Setting Cabling type to 5
 AthenaHiveEventLoopMgr                                            INFO Initializing AthenaHiveEventLoopMgr
-ClassIDSvc                                                   0    INFO getRegistryEntries: read 5000 CLIDRegistry entries for module ALL
+ClassIDSvc                                                   0    INFO getRegistryEntries: read 5002 CLIDRegistry entries for module ALL
 PyComponentMgr                                               0    INFO Initializing PyComponentMgr...
 Finalizer                                                    0    INFO Initializing Finalizer...
 ClassIDSvc                                                   0    INFO getRegistryEntries: read 553 CLIDRegistry entries for module ALL
@@ -972,22 +959,6 @@ CondInputLoader                                              0    INFO Will crea
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc                                                   0    INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-TileNeighbour                                                0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloSuperCellAlignCondAlg.CaloSuperCellIDTool                0    INFO Done with initIDMap
 TileBadChannelsCondAlg.TileCondProxyCool_OnlBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannelsCondAlg.TileCondProxyCool_OflBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannelsCondAlg                                       0    INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -1008,7 +979,7 @@ TileSampleNoiseCon...TileCondProxyCool_NoiseSample           0    INFO Creating
 TileTimingCondAlg.TileCondProxyCool_AdcOffset                0    INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 ThreadPoolSvc                                                0    INFO no thread init tools attached
 AvalancheSchedulerSvc                                        0    INFO Activating scheduler in a separate thread
-AvalancheSchedulerSvc                                        0    INFO Found 17 algorithms
+AvalancheSchedulerSvc                                        0    INFO Found 16 algorithms
 AvalancheSchedulerSvc                                        0    INFO Will attribute the following unmet INPUT dependencies to "SGInputLoader/SGInputLoader" Algorithm
 AvalancheSchedulerSvc                                        0    INFO    o  ( 'TileLaserObject' , 'StoreGateSvc+TileLaserObj' )     required by Algorithm: 
 AvalancheSchedulerSvc                                        0    INFO        * TileLaserObjectDumper
@@ -1072,6 +1043,20 @@ AtlasDetectorID                                        0     0    INFO initializ
 CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID                                             0     0    INFO initialize_from_dictionary
 AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+TileNeighbour                                          0     0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
 CaloIdMgrDetDescrCnv                                   0     0    INFO  Finished 
 CaloIdMgrDetDescrCnv                                   0     0    INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]                                       0     0    INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -1092,34 +1077,34 @@ AthenaHiveEventLoopMgr                                 1     0    INFO   ===>>>
 AthenaHiveEventLoopMgr                                 2     1    INFO   ===>>>  start processing event #18126, run #363899 on slot 1,  1 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 3     2    INFO   ===>>>  start processing event #18127, run #363899 on slot 2,  1 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 4     3    INFO   ===>>>  start processing event #18128, run #363899 on slot 3,  1 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 2     1    INFO   ===>>>  done processing event #18126, run #363899 on slot 1,  2 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 5     1    INFO   ===>>>  start processing event #18129, run #363899 on slot 1,  2 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 3     2    INFO   ===>>>  done processing event #18127, run #363899 on slot 2,  3 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 1     0    INFO   ===>>>  done processing event #18125, run #363899 on slot 0,  4 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 6     0    INFO   ===>>>  start processing event #18130, run #363899 on slot 0,  4 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 7     2    INFO   ===>>>  start processing event #18131, run #363899 on slot 2,  4 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 4     3    INFO   ===>>>  done processing event #18128, run #363899 on slot 3,  5 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 3     2    INFO   ===>>>  done processing event #18127, run #363899 on slot 2,  2 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 5     2    INFO   ===>>>  start processing event #18129, run #363899 on slot 2,  2 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 2     1    INFO   ===>>>  done processing event #18126, run #363899 on slot 1,  3 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 4     3    INFO   ===>>>  done processing event #18128, run #363899 on slot 3,  4 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 1     0    INFO   ===>>>  done processing event #18125, run #363899 on slot 0,  5 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 6     0    INFO   ===>>>  start processing event #18130, run #363899 on slot 0,  5 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 7     1    INFO   ===>>>  start processing event #18131, run #363899 on slot 1,  5 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 8     3    INFO   ===>>>  start processing event #18132, run #363899 on slot 3,  5 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 6     0    INFO   ===>>>  done processing event #18130, run #363899 on slot 0,  6 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 9     0    INFO   ===>>>  start processing event #18133, run #363899 on slot 0,  6 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 5     1    INFO   ===>>>  done processing event #18129, run #363899 on slot 1,  7 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 7     2    INFO   ===>>>  done processing event #18131, run #363899 on slot 2,  8 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                10     1    INFO   ===>>>  start processing event #18134, run #363899 on slot 1,  8 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                11     2    INFO   ===>>>  start processing event #18135, run #363899 on slot 2,  8 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 5     2    INFO   ===>>>  done processing event #18129, run #363899 on slot 2,  6 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 9     2    INFO   ===>>>  start processing event #18133, run #363899 on slot 2,  6 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 6     0    INFO   ===>>>  done processing event #18130, run #363899 on slot 0,  7 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                10     0    INFO   ===>>>  start processing event #18134, run #363899 on slot 0,  7 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 7     1    INFO   ===>>>  done processing event #18131, run #363899 on slot 1,  8 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 8     3    INFO   ===>>>  done processing event #18132, run #363899 on slot 3,  9 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 9     0    INFO   ===>>>  done processing event #18133, run #363899 on slot 0,  10 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                12     0    INFO   ===>>>  start processing event #18136, run #363899 on slot 0,  10 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                13     3    INFO   ===>>>  start processing event #18137, run #363899 on slot 3,  10 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                10     1    INFO   ===>>>  done processing event #18134, run #363899 on slot 1,  11 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                14     1    INFO   ===>>>  start processing event #18138, run #363899 on slot 1,  11 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                11     2    INFO   ===>>>  done processing event #18135, run #363899 on slot 2,  12 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                15     2    INFO   ===>>>  start processing event #18139, run #363899 on slot 2,  12 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                12     0    INFO   ===>>>  done processing event #18136, run #363899 on slot 0,  13 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                13     3    INFO   ===>>>  done processing event #18137, run #363899 on slot 3,  14 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                11     1    INFO   ===>>>  start processing event #18135, run #363899 on slot 1,  9 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                12     3    INFO   ===>>>  start processing event #18136, run #363899 on slot 3,  9 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 9     2    INFO   ===>>>  done processing event #18133, run #363899 on slot 2,  10 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                10     0    INFO   ===>>>  done processing event #18134, run #363899 on slot 0,  11 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                13     0    INFO   ===>>>  start processing event #18137, run #363899 on slot 0,  11 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                14     2    INFO   ===>>>  start processing event #18138, run #363899 on slot 2,  11 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                11     1    INFO   ===>>>  done processing event #18135, run #363899 on slot 1,  12 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                15     1    INFO   ===>>>  start processing event #18139, run #363899 on slot 1,  12 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                12     3    INFO   ===>>>  done processing event #18136, run #363899 on slot 3,  13 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                13     0    INFO   ===>>>  done processing event #18137, run #363899 on slot 0,  14 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                16     0    INFO   ===>>>  start processing event #18140, run #363899 on slot 0,  14 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                17     3    INFO   ===>>>  start processing event #18141, run #363899 on slot 3,  14 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                14     1    INFO   ===>>>  done processing event #18138, run #363899 on slot 1,  15 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                15     2    INFO   ===>>>  done processing event #18139, run #363899 on slot 2,  16 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                14     2    INFO   ===>>>  done processing event #18138, run #363899 on slot 2,  15 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                15     1    INFO   ===>>>  done processing event #18139, run #363899 on slot 1,  16 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                18     1    INFO   ===>>>  start processing event #18142, run #363899 on slot 1,  16 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                19     2    INFO   ===>>>  start processing event #18143, run #363899 on slot 2,  16 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                16     0    INFO   ===>>>  done processing event #18140, run #363899 on slot 0,  17 events processed so far  <<<===
@@ -1135,107 +1120,107 @@ AthenaHiveEventLoopMgr                                21     3    INFO   ===>>>
 AthenaHiveEventLoopMgr                                24     0    INFO   ===>>>  start processing event #18148, run #363899 on slot 0,  22 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                25     3    INFO   ===>>>  start processing event #18149, run #363899 on slot 3,  22 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                22     1    INFO   ===>>>  done processing event #18146, run #363899 on slot 1,  23 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                26     1    INFO   ===>>>  start processing event #18150, run #363899 on slot 1,  23 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                23     2    INFO   ===>>>  done processing event #18147, run #363899 on slot 2,  24 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                26     1    INFO   ===>>>  start processing event #18150, run #363899 on slot 1,  24 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                27     2    INFO   ===>>>  start processing event #18151, run #363899 on slot 2,  24 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                24     0    INFO   ===>>>  done processing event #18148, run #363899 on slot 0,  25 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                25     3    INFO   ===>>>  done processing event #18149, run #363899 on slot 3,  26 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                28     0    INFO   ===>>>  start processing event #18152, run #363899 on slot 0,  26 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                29     3    INFO   ===>>>  start processing event #18153, run #363899 on slot 3,  26 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                26     1    INFO   ===>>>  done processing event #18150, run #363899 on slot 1,  27 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                30     1    INFO   ===>>>  start processing event #18154, run #363899 on slot 1,  27 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                27     2    INFO   ===>>>  done processing event #18151, run #363899 on slot 2,  28 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                30     1    INFO   ===>>>  start processing event #18154, run #363899 on slot 1,  28 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                31     2    INFO   ===>>>  start processing event #18155, run #363899 on slot 2,  28 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                28     0    INFO   ===>>>  done processing event #18152, run #363899 on slot 0,  29 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                31     0    INFO   ===>>>  start processing event #18155, run #363899 on slot 0,  29 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                32     2    INFO   ===>>>  start processing event #18156, run #363899 on slot 2,  29 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                29     3    INFO   ===>>>  done processing event #18153, run #363899 on slot 3,  30 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                32     0    INFO   ===>>>  start processing event #18156, run #363899 on slot 0,  30 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                33     3    INFO   ===>>>  start processing event #18157, run #363899 on slot 3,  30 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                30     1    INFO   ===>>>  done processing event #18154, run #363899 on slot 1,  31 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                31     2    INFO   ===>>>  done processing event #18155, run #363899 on slot 2,  32 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                34     1    INFO   ===>>>  start processing event #18158, run #363899 on slot 1,  32 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                35     2    INFO   ===>>>  start processing event #18159, run #363899 on slot 2,  32 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                32     0    INFO   ===>>>  done processing event #18156, run #363899 on slot 0,  33 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                33     3    INFO   ===>>>  done processing event #18157, run #363899 on slot 3,  34 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                36     0    INFO   ===>>>  start processing event #18160, run #363899 on slot 0,  34 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                37     3    INFO   ===>>>  start processing event #18161, run #363899 on slot 3,  34 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                34     1    INFO   ===>>>  done processing event #18158, run #363899 on slot 1,  35 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                35     2    INFO   ===>>>  done processing event #18159, run #363899 on slot 2,  36 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                38     1    INFO   ===>>>  start processing event #18162, run #363899 on slot 1,  36 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                39     2    INFO   ===>>>  start processing event #18163, run #363899 on slot 2,  36 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                36     0    INFO   ===>>>  done processing event #18160, run #363899 on slot 0,  37 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                37     3    INFO   ===>>>  done processing event #18161, run #363899 on slot 3,  38 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                40     0    INFO   ===>>>  start processing event #18164, run #363899 on slot 0,  38 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                41     3    INFO   ===>>>  start processing event #18165, run #363899 on slot 3,  38 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                38     1    INFO   ===>>>  done processing event #18162, run #363899 on slot 1,  39 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                39     2    INFO   ===>>>  done processing event #18163, run #363899 on slot 2,  40 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                42     1    INFO   ===>>>  start processing event #18166, run #363899 on slot 1,  40 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                43     2    INFO   ===>>>  start processing event #18167, run #363899 on slot 2,  40 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                40     0    INFO   ===>>>  done processing event #18164, run #363899 on slot 0,  41 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                41     3    INFO   ===>>>  done processing event #18165, run #363899 on slot 3,  42 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                44     0    INFO   ===>>>  start processing event #18168, run #363899 on slot 0,  42 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                45     3    INFO   ===>>>  start processing event #18169, run #363899 on slot 3,  42 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                42     1    INFO   ===>>>  done processing event #18166, run #363899 on slot 1,  43 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                43     2    INFO   ===>>>  done processing event #18167, run #363899 on slot 2,  44 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                46     1    INFO   ===>>>  start processing event #18170, run #363899 on slot 1,  44 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                47     2    INFO   ===>>>  start processing event #18171, run #363899 on slot 2,  44 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                44     0    INFO   ===>>>  done processing event #18168, run #363899 on slot 0,  45 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                45     3    INFO   ===>>>  done processing event #18169, run #363899 on slot 3,  46 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                48     0    INFO   ===>>>  start processing event #18172, run #363899 on slot 0,  46 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                49     3    INFO   ===>>>  start processing event #18173, run #363899 on slot 3,  46 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                46     1    INFO   ===>>>  done processing event #18170, run #363899 on slot 1,  47 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                47     2    INFO   ===>>>  done processing event #18171, run #363899 on slot 2,  48 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                50     1    INFO   ===>>>  start processing event #18174, run #363899 on slot 1,  48 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                51     2    INFO   ===>>>  start processing event #18175, run #363899 on slot 2,  48 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                48     0    INFO   ===>>>  done processing event #18172, run #363899 on slot 0,  49 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                49     3    INFO   ===>>>  done processing event #18173, run #363899 on slot 3,  50 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                52     0    INFO   ===>>>  start processing event #18176, run #363899 on slot 0,  50 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                53     3    INFO   ===>>>  start processing event #18177, run #363899 on slot 3,  50 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                50     1    INFO   ===>>>  done processing event #18174, run #363899 on slot 1,  51 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                51     2    INFO   ===>>>  done processing event #18175, run #363899 on slot 2,  52 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                54     1    INFO   ===>>>  start processing event #18178, run #363899 on slot 1,  52 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                55     2    INFO   ===>>>  start processing event #18179, run #363899 on slot 2,  52 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                52     0    INFO   ===>>>  done processing event #18176, run #363899 on slot 0,  53 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                53     3    INFO   ===>>>  done processing event #18177, run #363899 on slot 3,  54 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                56     0    INFO   ===>>>  start processing event #18180, run #363899 on slot 0,  54 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                57     3    INFO   ===>>>  start processing event #18181, run #363899 on slot 3,  54 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                54     1    INFO   ===>>>  done processing event #18178, run #363899 on slot 1,  55 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                55     2    INFO   ===>>>  done processing event #18179, run #363899 on slot 2,  56 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                58     1    INFO   ===>>>  start processing event #18182, run #363899 on slot 1,  56 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                59     2    INFO   ===>>>  start processing event #18183, run #363899 on slot 2,  56 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                56     0    INFO   ===>>>  done processing event #18180, run #363899 on slot 0,  57 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                57     3    INFO   ===>>>  done processing event #18181, run #363899 on slot 3,  58 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                60     0    INFO   ===>>>  start processing event #18184, run #363899 on slot 0,  58 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                61     3    INFO   ===>>>  start processing event #18185, run #363899 on slot 3,  58 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                58     1    INFO   ===>>>  done processing event #18182, run #363899 on slot 1,  59 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                59     2    INFO   ===>>>  done processing event #18183, run #363899 on slot 2,  60 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                62     1    INFO   ===>>>  start processing event #18186, run #363899 on slot 1,  60 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                63     2    INFO   ===>>>  start processing event #18187, run #363899 on slot 2,  60 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                60     0    INFO   ===>>>  done processing event #18184, run #363899 on slot 0,  61 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                61     3    INFO   ===>>>  done processing event #18185, run #363899 on slot 3,  62 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                64     0    INFO   ===>>>  start processing event #18188, run #363899 on slot 0,  62 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                65     3    INFO   ===>>>  start processing event #18189, run #363899 on slot 3,  62 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                62     1    INFO   ===>>>  done processing event #18186, run #363899 on slot 1,  63 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                63     2    INFO   ===>>>  done processing event #18187, run #363899 on slot 2,  64 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                66     1    INFO   ===>>>  start processing event #18190, run #363899 on slot 1,  64 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                67     2    INFO   ===>>>  start processing event #18191, run #363899 on slot 2,  64 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                64     0    INFO   ===>>>  done processing event #18188, run #363899 on slot 0,  65 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                65     3    INFO   ===>>>  done processing event #18189, run #363899 on slot 3,  66 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                68     0    INFO   ===>>>  start processing event #18192, run #363899 on slot 0,  66 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                69     3    INFO   ===>>>  start processing event #18193, run #363899 on slot 3,  66 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                66     1    INFO   ===>>>  done processing event #18190, run #363899 on slot 1,  67 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                67     2    INFO   ===>>>  done processing event #18191, run #363899 on slot 2,  68 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                70     1    INFO   ===>>>  start processing event #18194, run #363899 on slot 1,  68 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                71     2    INFO   ===>>>  start processing event #18195, run #363899 on slot 2,  68 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                68     0    INFO   ===>>>  done processing event #18192, run #363899 on slot 0,  69 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                69     3    INFO   ===>>>  done processing event #18193, run #363899 on slot 3,  70 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                72     0    INFO   ===>>>  start processing event #18196, run #363899 on slot 0,  70 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                73     3    INFO   ===>>>  start processing event #18197, run #363899 on slot 3,  70 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                70     1    INFO   ===>>>  done processing event #18194, run #363899 on slot 1,  71 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                71     2    INFO   ===>>>  done processing event #18195, run #363899 on slot 2,  72 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                33     1    INFO   ===>>>  start processing event #18157, run #363899 on slot 1,  31 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                34     3    INFO   ===>>>  start processing event #18158, run #363899 on slot 3,  31 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                31     0    INFO   ===>>>  done processing event #18155, run #363899 on slot 0,  32 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                35     0    INFO   ===>>>  start processing event #18159, run #363899 on slot 0,  32 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                32     2    INFO   ===>>>  done processing event #18156, run #363899 on slot 2,  33 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                33     1    INFO   ===>>>  done processing event #18157, run #363899 on slot 1,  34 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                36     1    INFO   ===>>>  start processing event #18160, run #363899 on slot 1,  34 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                37     2    INFO   ===>>>  start processing event #18161, run #363899 on slot 2,  34 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                34     3    INFO   ===>>>  done processing event #18158, run #363899 on slot 3,  35 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                38     3    INFO   ===>>>  start processing event #18162, run #363899 on slot 3,  35 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                35     0    INFO   ===>>>  done processing event #18159, run #363899 on slot 0,  36 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                39     0    INFO   ===>>>  start processing event #18163, run #363899 on slot 0,  36 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                36     1    INFO   ===>>>  done processing event #18160, run #363899 on slot 1,  37 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                40     1    INFO   ===>>>  start processing event #18164, run #363899 on slot 1,  37 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                37     2    INFO   ===>>>  done processing event #18161, run #363899 on slot 2,  38 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                38     3    INFO   ===>>>  done processing event #18162, run #363899 on slot 3,  39 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                41     2    INFO   ===>>>  start processing event #18165, run #363899 on slot 2,  39 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                42     3    INFO   ===>>>  start processing event #18166, run #363899 on slot 3,  39 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                39     0    INFO   ===>>>  done processing event #18163, run #363899 on slot 0,  40 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                40     1    INFO   ===>>>  done processing event #18164, run #363899 on slot 1,  41 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                43     0    INFO   ===>>>  start processing event #18167, run #363899 on slot 0,  41 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                44     1    INFO   ===>>>  start processing event #18168, run #363899 on slot 1,  41 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                41     2    INFO   ===>>>  done processing event #18165, run #363899 on slot 2,  42 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                42     3    INFO   ===>>>  done processing event #18166, run #363899 on slot 3,  43 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                45     2    INFO   ===>>>  start processing event #18169, run #363899 on slot 2,  43 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                46     3    INFO   ===>>>  start processing event #18170, run #363899 on slot 3,  43 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                43     0    INFO   ===>>>  done processing event #18167, run #363899 on slot 0,  44 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                47     0    INFO   ===>>>  start processing event #18171, run #363899 on slot 0,  44 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                44     1    INFO   ===>>>  done processing event #18168, run #363899 on slot 1,  45 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                48     1    INFO   ===>>>  start processing event #18172, run #363899 on slot 1,  45 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                45     2    INFO   ===>>>  done processing event #18169, run #363899 on slot 2,  46 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                46     3    INFO   ===>>>  done processing event #18170, run #363899 on slot 3,  47 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                49     2    INFO   ===>>>  start processing event #18173, run #363899 on slot 2,  47 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                50     3    INFO   ===>>>  start processing event #18174, run #363899 on slot 3,  47 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                47     0    INFO   ===>>>  done processing event #18171, run #363899 on slot 0,  48 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                51     0    INFO   ===>>>  start processing event #18175, run #363899 on slot 0,  48 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                48     1    INFO   ===>>>  done processing event #18172, run #363899 on slot 1,  49 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                52     1    INFO   ===>>>  start processing event #18176, run #363899 on slot 1,  49 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                49     2    INFO   ===>>>  done processing event #18173, run #363899 on slot 2,  50 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                53     2    INFO   ===>>>  start processing event #18177, run #363899 on slot 2,  50 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                50     3    INFO   ===>>>  done processing event #18174, run #363899 on slot 3,  51 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                51     0    INFO   ===>>>  done processing event #18175, run #363899 on slot 0,  52 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                54     0    INFO   ===>>>  start processing event #18178, run #363899 on slot 0,  52 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                55     3    INFO   ===>>>  start processing event #18179, run #363899 on slot 3,  52 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                52     1    INFO   ===>>>  done processing event #18176, run #363899 on slot 1,  53 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                53     2    INFO   ===>>>  done processing event #18177, run #363899 on slot 2,  54 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                56     1    INFO   ===>>>  start processing event #18180, run #363899 on slot 1,  54 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                57     2    INFO   ===>>>  start processing event #18181, run #363899 on slot 2,  54 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                54     0    INFO   ===>>>  done processing event #18178, run #363899 on slot 0,  55 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                55     3    INFO   ===>>>  done processing event #18179, run #363899 on slot 3,  56 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                58     0    INFO   ===>>>  start processing event #18182, run #363899 on slot 0,  56 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                59     3    INFO   ===>>>  start processing event #18183, run #363899 on slot 3,  56 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                56     1    INFO   ===>>>  done processing event #18180, run #363899 on slot 1,  57 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                57     2    INFO   ===>>>  done processing event #18181, run #363899 on slot 2,  58 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                60     1    INFO   ===>>>  start processing event #18184, run #363899 on slot 1,  58 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                61     2    INFO   ===>>>  start processing event #18185, run #363899 on slot 2,  58 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                58     0    INFO   ===>>>  done processing event #18182, run #363899 on slot 0,  59 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                59     3    INFO   ===>>>  done processing event #18183, run #363899 on slot 3,  60 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                62     0    INFO   ===>>>  start processing event #18186, run #363899 on slot 0,  60 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                63     3    INFO   ===>>>  start processing event #18187, run #363899 on slot 3,  60 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                60     1    INFO   ===>>>  done processing event #18184, run #363899 on slot 1,  61 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                61     2    INFO   ===>>>  done processing event #18185, run #363899 on slot 2,  62 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                64     1    INFO   ===>>>  start processing event #18188, run #363899 on slot 1,  62 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                65     2    INFO   ===>>>  start processing event #18189, run #363899 on slot 2,  62 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                62     0    INFO   ===>>>  done processing event #18186, run #363899 on slot 0,  63 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                66     0    INFO   ===>>>  start processing event #18190, run #363899 on slot 0,  63 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                63     3    INFO   ===>>>  done processing event #18187, run #363899 on slot 3,  64 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                64     1    INFO   ===>>>  done processing event #18188, run #363899 on slot 1,  65 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                67     1    INFO   ===>>>  start processing event #18191, run #363899 on slot 1,  65 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                68     3    INFO   ===>>>  start processing event #18192, run #363899 on slot 3,  65 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                65     2    INFO   ===>>>  done processing event #18189, run #363899 on slot 2,  66 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                66     0    INFO   ===>>>  done processing event #18190, run #363899 on slot 0,  67 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                69     0    INFO   ===>>>  start processing event #18193, run #363899 on slot 0,  67 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                70     2    INFO   ===>>>  start processing event #18194, run #363899 on slot 2,  67 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                67     1    INFO   ===>>>  done processing event #18191, run #363899 on slot 1,  68 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                68     3    INFO   ===>>>  done processing event #18192, run #363899 on slot 3,  69 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                71     1    INFO   ===>>>  start processing event #18195, run #363899 on slot 1,  69 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                72     3    INFO   ===>>>  start processing event #18196, run #363899 on slot 3,  69 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                69     0    INFO   ===>>>  done processing event #18193, run #363899 on slot 0,  70 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                73     0    INFO   ===>>>  start processing event #18197, run #363899 on slot 0,  70 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                70     2    INFO   ===>>>  done processing event #18194, run #363899 on slot 2,  71 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                71     1    INFO   ===>>>  done processing event #18195, run #363899 on slot 1,  72 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                74     1    INFO   ===>>>  start processing event #18198, run #363899 on slot 1,  72 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                75     2    INFO   ===>>>  start processing event #18199, run #363899 on slot 2,  72 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                72     0    INFO   ===>>>  done processing event #18196, run #363899 on slot 0,  73 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                73     3    INFO   ===>>>  done processing event #18197, run #363899 on slot 3,  74 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                72     3    INFO   ===>>>  done processing event #18196, run #363899 on slot 3,  73 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                73     0    INFO   ===>>>  done processing event #18197, run #363899 on slot 0,  74 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                76     0    INFO   ===>>>  start processing event #18200, run #363899 on slot 0,  74 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                77     3    INFO   ===>>>  start processing event #18201, run #363899 on slot 3,  74 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                74     1    INFO   ===>>>  done processing event #18198, run #363899 on slot 1,  75 events processed so far  <<<===
@@ -1251,42 +1236,42 @@ AthenaHiveEventLoopMgr                                79     2    INFO   ===>>>
 AthenaHiveEventLoopMgr                                82     1    INFO   ===>>>  start processing event #18206, run #363899 on slot 1,  80 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                83     2    INFO   ===>>>  start processing event #18207, run #363899 on slot 2,  80 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                80     0    INFO   ===>>>  done processing event #18204, run #363899 on slot 0,  81 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                84     0    INFO   ===>>>  start processing event #18208, run #363899 on slot 0,  81 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                81     3    INFO   ===>>>  done processing event #18205, run #363899 on slot 3,  82 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                84     0    INFO   ===>>>  start processing event #18208, run #363899 on slot 0,  82 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                85     3    INFO   ===>>>  start processing event #18209, run #363899 on slot 3,  82 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                82     1    INFO   ===>>>  done processing event #18206, run #363899 on slot 1,  83 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                85     1    INFO   ===>>>  start processing event #18209, run #363899 on slot 1,  83 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                86     3    INFO   ===>>>  start processing event #18210, run #363899 on slot 3,  83 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                83     2    INFO   ===>>>  done processing event #18207, run #363899 on slot 2,  84 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                86     1    INFO   ===>>>  start processing event #18210, run #363899 on slot 1,  84 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                87     2    INFO   ===>>>  start processing event #18211, run #363899 on slot 2,  84 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                84     0    INFO   ===>>>  done processing event #18208, run #363899 on slot 0,  85 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                85     3    INFO   ===>>>  done processing event #18209, run #363899 on slot 3,  86 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                88     0    INFO   ===>>>  start processing event #18212, run #363899 on slot 0,  86 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                89     3    INFO   ===>>>  start processing event #18213, run #363899 on slot 3,  86 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                86     1    INFO   ===>>>  done processing event #18210, run #363899 on slot 1,  87 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                87     2    INFO   ===>>>  done processing event #18211, run #363899 on slot 2,  88 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                90     1    INFO   ===>>>  start processing event #18214, run #363899 on slot 1,  88 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                91     2    INFO   ===>>>  start processing event #18215, run #363899 on slot 2,  88 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                88     0    INFO   ===>>>  done processing event #18212, run #363899 on slot 0,  89 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                89     3    INFO   ===>>>  done processing event #18213, run #363899 on slot 3,  90 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                92     0    INFO   ===>>>  start processing event #18216, run #363899 on slot 0,  90 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                93     3    INFO   ===>>>  start processing event #18217, run #363899 on slot 3,  90 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                90     1    INFO   ===>>>  done processing event #18214, run #363899 on slot 1,  91 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                91     2    INFO   ===>>>  done processing event #18215, run #363899 on slot 2,  92 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                94     1    INFO   ===>>>  start processing event #18218, run #363899 on slot 1,  92 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                95     2    INFO   ===>>>  start processing event #18219, run #363899 on slot 2,  92 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                92     0    INFO   ===>>>  done processing event #18216, run #363899 on slot 0,  93 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                96     0    INFO   ===>>>  start processing event #18220, run #363899 on slot 0,  93 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                93     3    INFO   ===>>>  done processing event #18217, run #363899 on slot 3,  94 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                97     3    INFO   ===>>>  start processing event #18221, run #363899 on slot 3,  94 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                94     1    INFO   ===>>>  done processing event #18218, run #363899 on slot 1,  95 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                95     2    INFO   ===>>>  done processing event #18219, run #363899 on slot 2,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                98     1    INFO   ===>>>  start processing event #18222, run #363899 on slot 1,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     2    INFO   ===>>>  start processing event #18223, run #363899 on slot 2,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                96     0    INFO   ===>>>  done processing event #18220, run #363899 on slot 0,  97 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                97     3    INFO   ===>>>  done processing event #18221, run #363899 on slot 3,  98 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                98     1    INFO   ===>>>  done processing event #18222, run #363899 on slot 1,  99 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     2    INFO   ===>>>  done processing event #18223, run #363899 on slot 2,  100 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     2    INFO ---> Loop Finished (seconds): 0.657828
+AthenaHiveEventLoopMgr                                87     0    INFO   ===>>>  start processing event #18211, run #363899 on slot 0,  85 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                88     2    INFO   ===>>>  start processing event #18212, run #363899 on slot 2,  85 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                85     1    INFO   ===>>>  done processing event #18209, run #363899 on slot 1,  86 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                86     3    INFO   ===>>>  done processing event #18210, run #363899 on slot 3,  87 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                89     1    INFO   ===>>>  start processing event #18213, run #363899 on slot 1,  87 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                90     3    INFO   ===>>>  start processing event #18214, run #363899 on slot 3,  87 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                87     0    INFO   ===>>>  done processing event #18211, run #363899 on slot 0,  88 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                88     2    INFO   ===>>>  done processing event #18212, run #363899 on slot 2,  89 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                91     0    INFO   ===>>>  start processing event #18215, run #363899 on slot 0,  89 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                92     2    INFO   ===>>>  start processing event #18216, run #363899 on slot 2,  89 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                89     1    INFO   ===>>>  done processing event #18213, run #363899 on slot 1,  90 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                90     3    INFO   ===>>>  done processing event #18214, run #363899 on slot 3,  91 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                93     1    INFO   ===>>>  start processing event #18217, run #363899 on slot 1,  91 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                94     3    INFO   ===>>>  start processing event #18218, run #363899 on slot 3,  91 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                91     0    INFO   ===>>>  done processing event #18215, run #363899 on slot 0,  92 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                92     2    INFO   ===>>>  done processing event #18216, run #363899 on slot 2,  93 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                95     0    INFO   ===>>>  start processing event #18219, run #363899 on slot 0,  93 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                96     2    INFO   ===>>>  start processing event #18220, run #363899 on slot 2,  93 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                93     1    INFO   ===>>>  done processing event #18217, run #363899 on slot 1,  94 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                94     3    INFO   ===>>>  done processing event #18218, run #363899 on slot 3,  95 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                97     1    INFO   ===>>>  start processing event #18221, run #363899 on slot 1,  95 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                98     3    INFO   ===>>>  start processing event #18222, run #363899 on slot 3,  95 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                95     0    INFO   ===>>>  done processing event #18219, run #363899 on slot 0,  96 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                96     2    INFO   ===>>>  done processing event #18220, run #363899 on slot 2,  97 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                99     0    INFO   ===>>>  start processing event #18223, run #363899 on slot 0,  97 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                97     1    INFO   ===>>>  done processing event #18221, run #363899 on slot 1,  98 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                98     3    INFO   ===>>>  done processing event #18222, run #363899 on slot 3,  99 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                99     0    INFO   ===>>>  done processing event #18223, run #363899 on slot 0,  100 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                99     0    INFO ---> Loop Finished (seconds): 0.420126
 Domain[ROOT_All]                                                  INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr                                                    INFO Application Manager Stopped successfully
 SGInputLoader                                                     INFO Finalizing SGInputLoader...
@@ -1297,7 +1282,7 @@ AvalancheSchedulerSvc                                             INFO Joining S
 PyComponentMgr                                                    INFO Finalizing PyComponentMgr...
 EventDataSvc                                                      INFO Finalizing EventDataSvc
 IdDictDetDescrCnv                                                 INFO in finalize
-IOVDbFolder                                                       INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 ((     0.02 ))s
+IOVDbFolder                                                       INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 ((     0.03 ))s
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
@@ -1322,9 +1307,9 @@ ToolSvc.ByteStreamMetadataTool                                    INFO in finali
 *****Chrono*****                                                  INFO WARNING: MT job; statistics are unreliable
 *****Chrono*****                                                  INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****                                                  INFO ****************************************************************************************************
-cObjR_ALL                                                         INFO Time User   : Tot=   90 [ms] Ave/Min/Max=      45(+-      35)/      10/      80 [ms] #=  2
-cObj_ALL                                                          INFO Time User   : Tot=  110 [ms] Ave/Min/Max=      55(+-      35)/      20/      90 [ms] #=  2
-ChronoStatSvc                                                     INFO Time User   : Tot= 2.73  [s]  #=  1
+cObjR_ALL                                                         INFO Time User   : Tot=   70 [ms] Ave/Min/Max=      35(+-      25)/      10/      60 [ms] #=  2
+cObj_ALL                                                          INFO Time User   : Tot=   90 [ms] Ave/Min/Max=      45(+-      25)/      20/      70 [ms] #=  2
+ChronoStatSvc                                                     INFO Time User   : Tot= 1.84  [s]  #=  1
 *****Chrono*****                                                  INFO ****************************************************************************************************
 ChronoStatSvc.finalize()                                          INFO  Service finalized successfully 
 ApplicationMgr                                                    INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileSvc/TileByteStream/share/TileMuRcvContByteStreamCnv_test.ref b/TileCalorimeter/TileSvc/TileByteStream/share/TileMuRcvContByteStreamCnv_test.ref
index d600545a3e0c65562748af8d5780302c952b0450..1c7a934eaeedc5e7d79faca143790cc318f96f94 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/share/TileMuRcvContByteStreamCnv_test.ref
+++ b/TileCalorimeter/TileSvc/TileByteStream/share/TileMuRcvContByteStreamCnv_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:42:55 CET 2021
+Wed Nov 17 10:29:14 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileMuRcvContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:17 2021
+                                          running on pcaz004 on Wed Nov 17 10:29:19 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -90,7 +85,7 @@ IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/STATUS/ADC
 IOVDbSvc             INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY
 IOVDbSvc             INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC
 IOVDbSvc             INFO Added taginfo remove for /LAR/LArCellPositionShift
-ClassIDSvc           INFO getRegistryEntries: read 1858 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 1863 CLIDRegistry entries for module ALL
 ClassIDSvc           INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL
 DetDescrCnvSvc       INFO  initializing 
 DetDescrCnvSvc       INFO Found DetectorStore service
@@ -193,7 +188,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.43S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 24048Kb 	 Time = 0.3S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -204,7 +199,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -216,9 +211,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -255,7 +250,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.12S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.08S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -300,22 +295,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -386,6 +365,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -408,7 +401,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[177530,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -635,23 +627,23 @@ Finalizer            INFO Finalizing Finalizer...
 Finalize: compared 10 dumps
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
-IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.03 ))s
+IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/104912 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.04 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641536 ((     0.04 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/43176 ((     0.07 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/43176 ((     0.03 ))s
 IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.02 ))s
 IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
-IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.05 ))s
-IOVDbSvc             INFO  bytes in ((      0.33 ))s
+IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.03 ))s
+IOVDbSvc             INFO  bytes in ((      0.36 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.08 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.25 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.05 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.31 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.TileMuR...   INFO Finalizing TileMuRcvContByteStreamTool successfuly
@@ -660,18 +652,18 @@ ToolSvc.ByteStr...   INFO in finalize()
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      30(+-    46.4)/       0/     110 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  140 [ms] Ave/Min/Max=    9.33(+-      30)/       0/     120 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 3.08  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   70 [ms] Ave/Min/Max=    17.5(+-    24.9)/       0/      60 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=   90 [ms] Ave/Min/Max=       6(+-    17.4)/       0/      70 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 2.11  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
 ApplicationMgr       INFO Application Manager Terminated successfully
 Py:Athena            INFO leaving with code 0: "successful run"
-Mon Nov  1 22:43:28 CET 2021
+Wed Nov 17 10:29:23 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [4] concurrent threads and [4] concurrent events
@@ -680,14 +672,9 @@ Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileMuRcvContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -706,20 +693,20 @@ MessageSvc           INFO Activating in a separate thread
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:48 2021
+                                          running on pcaz004 on Wed Nov 17 10:29:28 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc                                                  INFO in initialize...
 AthDictLoaderSvc                                                  INFO acquired Dso-registry
-ClassIDSvc                                                        INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc                                                       INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc                                                       INFO Initializing MetaDataSvc
 PoolSvc                                                           INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc                                                           INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc                                                           INFO Frontier compression level set to 5
 DBReplicaSvc                                                      INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc                                                      INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc                                                      INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc                                                           INFO Successfully setup replica sorting algorithm
 PoolSvc                                                           INFO Setting up APR FileCatalog and Streams
 PoolSvc                                                           INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -763,7 +750,7 @@ IOVDbSvc                                                          INFO Added tag
 IOVDbSvc                                                          INFO Added taginfo remove for /TILE/OFL02/TIME/CHANNELOFFSET/PHY
 IOVDbSvc                                                          INFO Added taginfo remove for /TILE/ONL01/STATUS/ADC
 IOVDbSvc                                                          INFO Added taginfo remove for /LAR/LArCellPositionShift
-ClassIDSvc                                                        INFO getRegistryEntries: read 1858 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 1863 CLIDRegistry entries for module ALL
 ClassIDSvc                                                        INFO getRegistryEntries: read 23 CLIDRegistry entries for module ALL
 DetDescrCnvSvc                                                    INFO  initializing 
 DetDescrCnvSvc                                                    INFO Found DetectorStore service
@@ -866,7 +853,7 @@ EMECConstruction                                                  INFO multi-lay
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstruction                                              INFO Start building EC electronics geometry
-GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.57S
+GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.27S
 GeoModelSvc.TileDetectorTool                                      INFO  Entering TileDetectorTool::create()
 TileDddbManager                                                   INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager                                                   INFO n_tiglob = 5
@@ -877,7 +864,7 @@ TileDddbManager                                                   INFO n_tilb =
 TileDddbManager                                                   INFO n_tileSwitches = 1
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDescrCnv                                               INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID                                                          INFO initialize_from_dictionary 
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
@@ -889,9 +876,9 @@ CaloIDHelper_IDDetDescrCnv                                        INFO in create
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID                                                    INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -928,7 +915,7 @@ GeoModelSvc.TileDetectorTool                                      INFO  Global p
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrManager                                               INFO Entering create_elements()
-GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.16S
+GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 2504Kb 	 Time = 0.07S
 ClassIDSvc                                                        INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -976,22 +963,6 @@ CondInputLoader                                              0    INFO Will crea
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc                                                   0    INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-TileNeighbour                                                0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloSuperCellAlignCondAlg.CaloSuperCellIDTool                0    INFO Done with initIDMap
 TileBadChannelsCondAlg.TileCondProxyCool_OnlBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannelsCondAlg.TileCondProxyCool_OflBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannelsCondAlg                                       0    INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -1012,7 +983,7 @@ TileSampleNoiseCon...TileCondProxyCool_NoiseSample           0    INFO Creating
 TileTimingCondAlg.TileCondProxyCool_AdcOffset                0    INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 ThreadPoolSvc                                                0    INFO no thread init tools attached
 AvalancheSchedulerSvc                                        0    INFO Activating scheduler in a separate thread
-AvalancheSchedulerSvc                                        0    INFO Found 17 algorithms
+AvalancheSchedulerSvc                                        0    INFO Found 16 algorithms
 AvalancheSchedulerSvc                                        0    INFO Will attribute the following unmet INPUT dependencies to "SGInputLoader/SGInputLoader" Algorithm
 AvalancheSchedulerSvc                                        0    INFO    o  ( 'TileMuonReceiverContainer' , 'StoreGateSvc+TileMuRcvCnt' )     required by Algorithm: 
 AvalancheSchedulerSvc                                        0    INFO        * TileMuonReceiverDumper
@@ -1076,6 +1047,20 @@ AtlasDetectorID                                        0     0    INFO initializ
 CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID                                             0     0    INFO initialize_from_dictionary
 AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+TileNeighbour                                          0     0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
 CaloIdMgrDetDescrCnv                                   0     0    INFO  Finished 
 CaloIdMgrDetDescrCnv                                   0     0    INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]                                       0     0    INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -1100,27 +1085,27 @@ AthenaHiveEventLoopMgr                                 4     3    INFO   ===>>>
 AthenaHiveEventLoopMgr                                 1     0    INFO   ===>>>  done processing event #18125, run #363899 on slot 0,  2 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 5     0    INFO   ===>>>  start processing event #18129, run #363899 on slot 0,  2 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 3     2    INFO   ===>>>  done processing event #18127, run #363899 on slot 2,  3 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 6     2    INFO   ===>>>  start processing event #18130, run #363899 on slot 2,  3 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 2     1    INFO   ===>>>  done processing event #18126, run #363899 on slot 1,  4 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 4     3    INFO   ===>>>  done processing event #18128, run #363899 on slot 3,  5 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 7     1    INFO   ===>>>  start processing event #18131, run #363899 on slot 1,  5 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 6     1    INFO   ===>>>  start processing event #18130, run #363899 on slot 1,  5 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 7     2    INFO   ===>>>  start processing event #18131, run #363899 on slot 2,  5 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 8     3    INFO   ===>>>  start processing event #18132, run #363899 on slot 3,  5 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 5     0    INFO   ===>>>  done processing event #18129, run #363899 on slot 0,  6 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 9     0    INFO   ===>>>  start processing event #18133, run #363899 on slot 0,  6 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 7     1    INFO   ===>>>  done processing event #18131, run #363899 on slot 1,  7 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 6     2    INFO   ===>>>  done processing event #18130, run #363899 on slot 2,  8 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 6     1    INFO   ===>>>  done processing event #18130, run #363899 on slot 1,  7 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 7     2    INFO   ===>>>  done processing event #18131, run #363899 on slot 2,  8 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                10     1    INFO   ===>>>  start processing event #18134, run #363899 on slot 1,  8 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                11     2    INFO   ===>>>  start processing event #18135, run #363899 on slot 2,  8 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 8     3    INFO   ===>>>  done processing event #18132, run #363899 on slot 3,  9 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                10     1    INFO   ===>>>  start processing event #18134, run #363899 on slot 1,  9 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                11     2    INFO   ===>>>  start processing event #18135, run #363899 on slot 2,  9 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                12     3    INFO   ===>>>  start processing event #18136, run #363899 on slot 3,  9 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 9     0    INFO   ===>>>  done processing event #18133, run #363899 on slot 0,  10 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                13     0    INFO   ===>>>  start processing event #18137, run #363899 on slot 0,  10 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                12     0    INFO   ===>>>  start processing event #18136, run #363899 on slot 0,  10 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                13     3    INFO   ===>>>  start processing event #18137, run #363899 on slot 3,  10 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                10     1    INFO   ===>>>  done processing event #18134, run #363899 on slot 1,  11 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                11     2    INFO   ===>>>  done processing event #18135, run #363899 on slot 2,  12 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                14     1    INFO   ===>>>  start processing event #18138, run #363899 on slot 1,  12 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                15     2    INFO   ===>>>  start processing event #18139, run #363899 on slot 2,  12 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                12     3    INFO   ===>>>  done processing event #18136, run #363899 on slot 3,  13 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                13     0    INFO   ===>>>  done processing event #18137, run #363899 on slot 0,  14 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                12     0    INFO   ===>>>  done processing event #18136, run #363899 on slot 0,  13 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                13     3    INFO   ===>>>  done processing event #18137, run #363899 on slot 3,  14 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                16     0    INFO   ===>>>  start processing event #18140, run #363899 on slot 0,  14 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                17     3    INFO   ===>>>  start processing event #18141, run #363899 on slot 3,  14 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                14     1    INFO   ===>>>  done processing event #18138, run #363899 on slot 1,  15 events processed so far  <<<===
@@ -1240,58 +1225,58 @@ AthenaHiveEventLoopMgr                                71     2    INFO   ===>>>
 AthenaHiveEventLoopMgr                                74     1    INFO   ===>>>  start processing event #18198, run #363899 on slot 1,  72 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                75     2    INFO   ===>>>  start processing event #18199, run #363899 on slot 2,  72 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                72     0    INFO   ===>>>  done processing event #18196, run #363899 on slot 0,  73 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                76     0    INFO   ===>>>  start processing event #18200, run #363899 on slot 0,  73 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                73     3    INFO   ===>>>  done processing event #18197, run #363899 on slot 3,  74 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                76     0    INFO   ===>>>  start processing event #18200, run #363899 on slot 0,  74 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                77     3    INFO   ===>>>  start processing event #18201, run #363899 on slot 3,  74 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                74     1    INFO   ===>>>  done processing event #18198, run #363899 on slot 1,  75 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                77     1    INFO   ===>>>  start processing event #18201, run #363899 on slot 1,  75 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                78     3    INFO   ===>>>  start processing event #18202, run #363899 on slot 3,  75 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                75     2    INFO   ===>>>  done processing event #18199, run #363899 on slot 2,  76 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                78     1    INFO   ===>>>  start processing event #18202, run #363899 on slot 1,  76 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                79     2    INFO   ===>>>  start processing event #18203, run #363899 on slot 2,  76 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                76     0    INFO   ===>>>  done processing event #18200, run #363899 on slot 0,  77 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                79     0    INFO   ===>>>  start processing event #18203, run #363899 on slot 0,  77 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                80     2    INFO   ===>>>  start processing event #18204, run #363899 on slot 2,  77 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                77     1    INFO   ===>>>  done processing event #18201, run #363899 on slot 1,  78 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                78     3    INFO   ===>>>  done processing event #18202, run #363899 on slot 3,  79 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                81     1    INFO   ===>>>  start processing event #18205, run #363899 on slot 1,  79 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                82     3    INFO   ===>>>  start processing event #18206, run #363899 on slot 3,  79 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                79     0    INFO   ===>>>  done processing event #18203, run #363899 on slot 0,  80 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                80     2    INFO   ===>>>  done processing event #18204, run #363899 on slot 2,  81 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                83     0    INFO   ===>>>  start processing event #18207, run #363899 on slot 0,  81 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                84     2    INFO   ===>>>  start processing event #18208, run #363899 on slot 2,  81 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                81     1    INFO   ===>>>  done processing event #18205, run #363899 on slot 1,  82 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                82     3    INFO   ===>>>  done processing event #18206, run #363899 on slot 3,  83 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                85     1    INFO   ===>>>  start processing event #18209, run #363899 on slot 1,  83 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                86     3    INFO   ===>>>  start processing event #18210, run #363899 on slot 3,  83 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                83     0    INFO   ===>>>  done processing event #18207, run #363899 on slot 0,  84 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                84     2    INFO   ===>>>  done processing event #18208, run #363899 on slot 2,  85 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                87     0    INFO   ===>>>  start processing event #18211, run #363899 on slot 0,  85 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                88     2    INFO   ===>>>  start processing event #18212, run #363899 on slot 2,  85 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                85     1    INFO   ===>>>  done processing event #18209, run #363899 on slot 1,  86 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                86     3    INFO   ===>>>  done processing event #18210, run #363899 on slot 3,  87 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                89     1    INFO   ===>>>  start processing event #18213, run #363899 on slot 1,  87 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                90     3    INFO   ===>>>  start processing event #18214, run #363899 on slot 3,  87 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                87     0    INFO   ===>>>  done processing event #18211, run #363899 on slot 0,  88 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                88     2    INFO   ===>>>  done processing event #18212, run #363899 on slot 2,  89 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                91     0    INFO   ===>>>  start processing event #18215, run #363899 on slot 0,  89 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                92     2    INFO   ===>>>  start processing event #18216, run #363899 on slot 2,  89 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                89     1    INFO   ===>>>  done processing event #18213, run #363899 on slot 1,  90 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                90     3    INFO   ===>>>  done processing event #18214, run #363899 on slot 3,  91 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                93     1    INFO   ===>>>  start processing event #18217, run #363899 on slot 1,  91 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                94     3    INFO   ===>>>  start processing event #18218, run #363899 on slot 3,  91 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                91     0    INFO   ===>>>  done processing event #18215, run #363899 on slot 0,  92 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                92     2    INFO   ===>>>  done processing event #18216, run #363899 on slot 2,  93 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                95     0    INFO   ===>>>  start processing event #18219, run #363899 on slot 0,  93 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                96     2    INFO   ===>>>  start processing event #18220, run #363899 on slot 2,  93 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                93     1    INFO   ===>>>  done processing event #18217, run #363899 on slot 1,  94 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                94     3    INFO   ===>>>  done processing event #18218, run #363899 on slot 3,  95 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                95     0    INFO   ===>>>  done processing event #18219, run #363899 on slot 0,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                97     0    INFO   ===>>>  start processing event #18221, run #363899 on slot 0,  96 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                77     3    INFO   ===>>>  done processing event #18201, run #363899 on slot 3,  78 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                80     0    INFO   ===>>>  start processing event #18204, run #363899 on slot 0,  78 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                81     3    INFO   ===>>>  start processing event #18205, run #363899 on slot 3,  78 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                78     1    INFO   ===>>>  done processing event #18202, run #363899 on slot 1,  79 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                79     2    INFO   ===>>>  done processing event #18203, run #363899 on slot 2,  80 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                82     1    INFO   ===>>>  start processing event #18206, run #363899 on slot 1,  80 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                83     2    INFO   ===>>>  start processing event #18207, run #363899 on slot 2,  80 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                80     0    INFO   ===>>>  done processing event #18204, run #363899 on slot 0,  81 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                81     3    INFO   ===>>>  done processing event #18205, run #363899 on slot 3,  82 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                84     0    INFO   ===>>>  start processing event #18208, run #363899 on slot 0,  82 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                85     3    INFO   ===>>>  start processing event #18209, run #363899 on slot 3,  82 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                82     1    INFO   ===>>>  done processing event #18206, run #363899 on slot 1,  83 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                83     2    INFO   ===>>>  done processing event #18207, run #363899 on slot 2,  84 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                86     1    INFO   ===>>>  start processing event #18210, run #363899 on slot 1,  84 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                87     2    INFO   ===>>>  start processing event #18211, run #363899 on slot 2,  84 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                84     0    INFO   ===>>>  done processing event #18208, run #363899 on slot 0,  85 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                85     3    INFO   ===>>>  done processing event #18209, run #363899 on slot 3,  86 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                88     0    INFO   ===>>>  start processing event #18212, run #363899 on slot 0,  86 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                89     3    INFO   ===>>>  start processing event #18213, run #363899 on slot 3,  86 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                86     1    INFO   ===>>>  done processing event #18210, run #363899 on slot 1,  87 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                87     2    INFO   ===>>>  done processing event #18211, run #363899 on slot 2,  88 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                90     1    INFO   ===>>>  start processing event #18214, run #363899 on slot 1,  88 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                91     2    INFO   ===>>>  start processing event #18215, run #363899 on slot 2,  88 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                88     0    INFO   ===>>>  done processing event #18212, run #363899 on slot 0,  89 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                89     3    INFO   ===>>>  done processing event #18213, run #363899 on slot 3,  90 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                92     0    INFO   ===>>>  start processing event #18216, run #363899 on slot 0,  90 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                93     3    INFO   ===>>>  start processing event #18217, run #363899 on slot 3,  90 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                90     1    INFO   ===>>>  done processing event #18214, run #363899 on slot 1,  91 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                91     2    INFO   ===>>>  done processing event #18215, run #363899 on slot 2,  92 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                94     1    INFO   ===>>>  start processing event #18218, run #363899 on slot 1,  92 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                95     2    INFO   ===>>>  start processing event #18219, run #363899 on slot 2,  92 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                92     0    INFO   ===>>>  done processing event #18216, run #363899 on slot 0,  93 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                93     3    INFO   ===>>>  done processing event #18217, run #363899 on slot 3,  94 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                96     0    INFO   ===>>>  start processing event #18220, run #363899 on slot 0,  94 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                97     3    INFO   ===>>>  start processing event #18221, run #363899 on slot 3,  94 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                94     1    INFO   ===>>>  done processing event #18218, run #363899 on slot 1,  95 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                95     2    INFO   ===>>>  done processing event #18219, run #363899 on slot 2,  96 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                98     1    INFO   ===>>>  start processing event #18222, run #363899 on slot 1,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     3    INFO   ===>>>  start processing event #18223, run #363899 on slot 3,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                96     2    INFO   ===>>>  done processing event #18220, run #363899 on slot 2,  97 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                97     0    INFO   ===>>>  done processing event #18221, run #363899 on slot 0,  98 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                99     2    INFO   ===>>>  start processing event #18223, run #363899 on slot 2,  96 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                96     0    INFO   ===>>>  done processing event #18220, run #363899 on slot 0,  97 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                97     3    INFO   ===>>>  done processing event #18221, run #363899 on slot 3,  98 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                98     1    INFO   ===>>>  done processing event #18222, run #363899 on slot 1,  99 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     3    INFO   ===>>>  done processing event #18223, run #363899 on slot 3,  100 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     3    INFO ---> Loop Finished (seconds): 0.560263
+AthenaHiveEventLoopMgr                                99     2    INFO   ===>>>  done processing event #18223, run #363899 on slot 2,  100 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                99     2    INFO ---> Loop Finished (seconds): 0.386087
 Domain[ROOT_All]                                                  INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr                                                    INFO Application Manager Stopped successfully
 SGInputLoader                                                     INFO Finalizing SGInputLoader...
@@ -1328,9 +1313,9 @@ ToolSvc.ByteStreamMetadataTool                                    INFO in finali
 *****Chrono*****                                                  INFO WARNING: MT job; statistics are unreliable
 *****Chrono*****                                                  INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****                                                  INFO ****************************************************************************************************
-cObjR_ALL                                                         INFO Time User   : Tot=   90 [ms] Ave/Min/Max=      45(+-      35)/      10/      80 [ms] #=  2
-cObj_ALL                                                          INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      60(+-      40)/      20/     100 [ms] #=  2
-ChronoStatSvc                                                     INFO Time User   : Tot=  2.8  [s]  #=  1
+cObjR_ALL                                                         INFO Time User   : Tot=   60 [ms] Ave/Min/Max=      30(+-      30)/       0/      60 [ms] #=  2
+cObj_ALL                                                          INFO Time User   : Tot=   80 [ms] Ave/Min/Max=      40(+-      30)/      10/      70 [ms] #=  2
+ChronoStatSvc                                                     INFO Time User   : Tot= 1.87  [s]  #=  1
 *****Chrono*****                                                  INFO ****************************************************************************************************
 ChronoStatSvc.finalize()                                          INFO  Service finalized successfully 
 ApplicationMgr                                                    INFO Application Manager Finalized successfully
diff --git a/TileCalorimeter/TileSvc/TileByteStream/share/TileRawChannelContByteStreamCnv_test.ref b/TileCalorimeter/TileSvc/TileByteStream/share/TileRawChannelContByteStreamCnv_test.ref
index 75759a2b79a2142b7124a9e48532be081b2e33fb..e714859827c6bfacd8cb52398fd291730a8a17b0 100644
--- a/TileCalorimeter/TileSvc/TileByteStream/share/TileRawChannelContByteStreamCnv_test.ref
+++ b/TileCalorimeter/TileSvc/TileByteStream/share/TileRawChannelContByteStreamCnv_test.ref
@@ -1,21 +1,16 @@
-Mon Nov  1 22:42:55 CET 2021
+Wed Nov 17 10:00:13 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileRawChannelContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -33,20 +28,20 @@ Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:17 2021
+                                          running on pcaz004 on Wed Nov 17 10:00:18 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc          INFO Initializing MetaDataSvc
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -72,7 +67,7 @@ ClassIDSvc           INFO getRegistryEntries: read 2821 CLIDRegistry entries for
 IOVDbSvc             INFO preLoadAddresses: Removing folder /TagInfo. It should only be in the file meta data and was not found.
 IOVDbSvc             INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 ClassIDSvc           INFO getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 1848 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO getRegistryEntries: read 1853 CLIDRegistry entries for module ALL
 IOVSvc               INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvc.IOVSvcTool    INFO IOVRanges will be checked at every Event
 IOVDbSvc             INFO Opening COOL connection for COOLOFL_TILE/OFLP200
@@ -193,7 +188,7 @@ EMECConstruction     INFO multi-layered version of absorbers activated, paramete
 EMECConstruction     INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction     INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstru...   INFO Start building EC electronics geometry
-GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.49S
+GeoModelSvc          INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.31S
 GeoModelSvc.Til...   INFO  Entering TileDetectorTool::create()
 TileDddbManager      INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager      INFO n_tiglob = 5
@@ -204,7 +199,7 @@ TileDddbManager      INFO n_tilb = 21
 TileDddbManager      INFO n_tileSwitches = 1
 CaloIDHelper_ID...   INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDesc...   INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID             INFO initialize_from_dictionary 
 AtlasDetectorID      INFO initialize_from_dictionary - OK
@@ -216,9 +211,9 @@ CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_ID helper object in th
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_ID...   INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID      INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID       INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -255,7 +250,7 @@ GeoModelSvc.Til...   INFO  Global positioning of barrel with rotation (0,0,0)) a
 GeoModelSvc.Til...   INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.Til...   INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrMan...   INFO Entering create_elements()
-GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.14S
+GeoModelSvc          INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.09S
 ClassIDSvc           INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc          INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -300,22 +295,6 @@ CondInputLoader      INFO Will create WriteCondHandle dependencies for the follo
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc           INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID      INFO initialize_from_dictionary - OK
-CaloSuperCellAl...   INFO Done with initIDMap
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannels...   INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannels...   INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -386,6 +365,20 @@ AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIDHelper_ID...   INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID           INFO initialize_from_dictionary
 AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_ID...   INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+CaloIDHelper_ID...   INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID      INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_ID...   INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID      INFO initialize_from_dictionary - OK
+TileNeighbour        INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID      INFO initialize_from_dictionary - OK
 CaloIdMgrDetDes...   INFO  Finished 
 CaloIdMgrDetDes...   INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]     INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -408,7 +401,6 @@ IOVDbFolder          INFO HVS tag OFLCOND-RUN12-SDR-35 resolved to TileOfl02Time
 IOVDbSvc             INFO Disconnecting from COOLOFL_TILE/OFLP200
 LArAlignCondAlg      INFO recorded new GeoAlignmentStore object for LAr with key LArAlignmentStore and range {[177530,l:0] - [INVALID]}
 CaloAlignCondAlg     INFO recorded new CaloDetDescr Manager condition object with key CaloDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
-CaloSuperCellAl...   INFO recorded new CaloSuperCellDetDescr Manager condition object with key CaloSuperCellDetDescrManager and range {[177530,t:0,l:0] - [INVALID]}
 TileBadChannels...   INFO Updating TileBchStatus::isBad() definition from DB
 TileBadChannels...   INFO Updating TileBchStatus::isNoisy() definition from DB
 TileBadChannels...   INFO No TileBchStatus::isNoGainL1() definition found in DB, using defaults
@@ -636,22 +628,22 @@ Finalize: compared 20 dumps
 PyComponentMgr       INFO Finalizing PyComponentMgr...
 IdDictDetDescrCnv    INFO in finalize
 IOVDbFolder          INFO Folder /LAR/Align (PoolRef) db-read 1/2 objs/chan/bytes 1/1/170 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641504 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/93060 ((     0.02 ))s
-IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.01 ))s
-IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.00 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/103344 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/80 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/EMS (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/92 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/FIBER (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/940 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/LIN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/72 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/CALIB/LAS/NLN (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/NOISE/SAMPLE (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/641504 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/93060 ((     0.03 ))s
+IOVDbFolder          INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/96 ((     0.04 ))s
+IOVDbFolder          INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 1/1 objs/chan/bytes 277/277/76 ((     0.01 ))s
 IOVDbFolder          INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 2/2 objs/chan/bytes 2/1/390 ((     0.02 ))s
-IOVDbSvc             INFO  bytes in ((      0.21 ))s
+IOVDbSvc             INFO  bytes in ((      0.40 ))s
 IOVDbSvc             INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.04 ))s
-IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.17 ))s
+IOVDbSvc             INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 3 nFolders: 2 ReadTime: ((     0.05 ))s
+IOVDbSvc             INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 2 nFolders: 11 ReadTime: ((     0.36 ))s
 AthDictLoaderSvc     INFO in finalize...
 ToolSvc              INFO Removing all tools created by ToolSvc
 ToolSvc.TileRaw...   INFO Finalizing TileRawChannelContByteStreamTool successfuly
@@ -660,18 +652,18 @@ ToolSvc.ByteStr...   INFO in finalize()
 *****Chrono*****     INFO ****************************************************************************************************
 *****Chrono*****     INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****     INFO ****************************************************************************************************
-cObjR_ALL            INFO Time User   : Tot=  120 [ms] Ave/Min/Max=      30(+-    46.4)/       0/     110 [ms] #=  4
-cObj_ALL             INFO Time User   : Tot=  150 [ms] Ave/Min/Max=      10(+-    32.5)/       0/     130 [ms] #= 15
-ChronoStatSvc        INFO Time User   : Tot= 10.1  [s]  #=  1
+cObjR_ALL            INFO Time User   : Tot=   60 [ms] Ave/Min/Max=      15(+-      26)/       0/      60 [ms] #=  4
+cObj_ALL             INFO Time User   : Tot=   80 [ms] Ave/Min/Max=    5.33(+-    17.5)/       0/      70 [ms] #= 15
+ChronoStatSvc        INFO Time User   : Tot= 6.89  [s]  #=  1
 *****Chrono*****     INFO ****************************************************************************************************
 ChronoStatSvc.f...   INFO  Service finalized successfully 
 ApplicationMgr       INFO Application Manager Finalized successfully
 ApplicationMgr       INFO Application Manager Terminated successfully
 Py:Athena            INFO leaving with code 0: "successful run"
-Mon Nov  1 22:43:38 CET 2021
+Wed Nov 17 10:00:29 CET 2021
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.47] [x86_64-centos7-gcc8-opt] [master-calosupercell-align/480d0db4e38] -- built on [2021-11-01T2206]
+Py:Athena            INFO using release [WorkDir-22.0.49] [x86_64-centos7-gcc8-opt] [Unknown/c747135] -- built on [2021-11-17T0943]
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO configuring AthenaHive with [4] concurrent threads and [4] concurrent events
@@ -680,14 +672,9 @@ Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "TileByteStream/TileRawChannelContByteStreamCnv_test.py"
 Py:Athena            INFO SetGeometryVersion.py obtained major release version 22
 Py:Athena            INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py"
-Py:ConfigurableDb    INFO Read module info for 5092 configurables from 18 genConfDb files
-Py:ConfigurableDb WARNING Found 2 duplicates among the 18 genConfDb files :
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
-Py:ConfigurableDb WARNING --------------------------------------------------
-Py:ConfigurableDb WARNING   -CaloAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-Py:ConfigurableDb WARNING   -CaloSuperCellAlignTool: CaloAlignmentTools.CaloAlignmentToolsConf - ['CaloDetDescr.CaloDetDescrConf']
-EventInfoMgtInit: Got release version  Athena-22.0.47
+Py:ConfigurableDb    INFO Read module info for 5097 configurables from 8 genConfDb files
+Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+EventInfoMgtInit: Got release version  Athena-22.0.49
 Py:IOVDbSvc.CondDB    INFO Setting up conditions DB access to instance OFLP200
 Py:Athena            INFO including file "TileConditions/TileConditions_jobOptions.py"
 Py:TileInfoConf.     INFO Adding TileCablingSvc to ServiceMgr
@@ -706,20 +693,20 @@ MessageSvc           INFO Activating in a separate thread
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on aiatlasbm004.cern.ch on Mon Nov  1 22:43:57 2021
+                                          running on pcaz004 on Wed Nov 17 10:00:34 2021
 ====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 AthDictLoaderSvc                                                  INFO in initialize...
 AthDictLoaderSvc                                                  INFO acquired Dso-registry
-ClassIDSvc                                                        INFO getRegistryEntries: read 6505 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 6418 CLIDRegistry entries for module ALL
 CoreDumpSvc                                                       INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 MetaDataSvc                                                       INFO Initializing MetaDataSvc
 PoolSvc                                                           INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc                                                           INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc                                                           INFO Frontier compression level set to 5
 DBReplicaSvc                                                      INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy-atlas.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data
-DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
-DBReplicaSvc                                                      INFO Total of 10 servers found for host aiatlasbm004.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc                                                      INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config
+DBReplicaSvc                                                      INFO Total of 10 servers found for host pcaz004.dyndns.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc                                                           INFO Successfully setup replica sorting algorithm
 PoolSvc                                                           INFO Setting up APR FileCatalog and Streams
 PoolSvc                                                           INFO Unable find catalog apcfile:poolcond/PoolCat_oflcond.xml in $ATLAS_POOLCOND_PATH and $DATAPATH
@@ -745,7 +732,7 @@ ClassIDSvc                                                        INFO getRegist
 IOVDbSvc                                                          INFO preLoadAddresses: Removing folder /TagInfo. It should only be in the file meta data and was not found.
 IOVDbSvc                                                          INFO Opening COOL connection for COOLOFL_LAR/OFLP200
 ClassIDSvc                                                        INFO getRegistryEntries: read 273 CLIDRegistry entries for module ALL
-ClassIDSvc                                                        INFO getRegistryEntries: read 1848 CLIDRegistry entries for module ALL
+ClassIDSvc                                                        INFO getRegistryEntries: read 1853 CLIDRegistry entries for module ALL
 IOVSvc                                                            INFO No IOVSvcTool associated with store "StoreGateSvc"
 IOVSvc.IOVSvcTool                                                 INFO IOVRanges will be checked at every Event
 IOVDbSvc                                                          INFO Opening COOL connection for COOLOFL_TILE/OFLP200
@@ -866,7 +853,7 @@ EMECConstruction                                                  INFO multi-lay
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::InnerWheel
 EMECConstruction                                                  INFO activating LAr::EMEC::Neg::OuterWheel
 EndcapDMConstruction                                              INFO Start building EC electronics geometry
-GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25076Kb 	 Time = 0.41S
+GeoModelSvc                                                       INFO GeoModelSvc.LArDetectorToolNV	 SZ= 25072Kb 	 Time = 0.36S
 GeoModelSvc.TileDetectorTool                                      INFO  Entering TileDetectorTool::create()
 TileDddbManager                                                   INFO m_tag = ATLAS-R2-2016-01-00-01
 TileDddbManager                                                   INFO n_tiglob = 5
@@ -877,7 +864,7 @@ TileDddbManager                                                   INFO n_tilb =
 TileDddbManager                                                   INFO n_tileSwitches = 1
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a TileID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
+TileNeighbour                                                     INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileNeighbour_reduced.txt
 TileHWIDDetDescrCnv                                               INFO in createObj: creating a TileHWID helper object in the detector store
 TileHWID                                                          INFO initialize_from_dictionary 
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
@@ -889,9 +876,9 @@ CaloIDHelper_IDDetDescrCnv                                        INFO in create
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
-LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal2DNeighbors-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsNext-April2011.txt
+LArFCAL_Base_ID                                                   INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCal3DNeighborsPrev-April2011.txt
 CaloIDHelper_IDDetDescrCnv                                        INFO in createObj: creating a LArMiniFCAL_ID helper object in the detector store
 AtlasDetectorID                                                   INFO initialize_from_dictionary - OK
 LArMiniFCAL_ID                                                    INFO  initialize_from_dict - LArCalorimeter dictionary does NOT contain miniFCAL description. Unable to initialize LArMiniFCAL_ID.
@@ -928,7 +915,7 @@ GeoModelSvc.TileDetectorTool                                      INFO  Global p
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of positive ext.barrel with rotation (0,0,0)) and translation (0,0,0) Gaudi::Units::cm
 GeoModelSvc.TileDetectorTool                                      INFO  Global positioning of negative ext.barrel with rotation (0,0,0)) and translation (0,0,1) Gaudi::Units::cm
 TileDetDescrManager                                               INFO Entering create_elements()
-GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 4552Kb 	 Time = 0.11S
+GeoModelSvc                                                       INFO GeoModelSvc.TileDetectorTool	 SZ= 3528Kb 	 Time = 0.12S
 ClassIDSvc                                                        INFO getRegistryEntries: read 324 CLIDRegistry entries for module ALL
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.LArDetectorToolNV
 GeoModelSvc                                                       INFO   AlgTool: GeoModelSvc.TileDetectorTool
@@ -976,22 +963,6 @@ CondInputLoader                                              0    INFO Will crea
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/OFL02/TIME/CHANNELOFFSET/PHY' ) 
     +  ( 'CondAttrListCollection' , 'ConditionStore+/TILE/ONL01/STATUS/ADC' ) 
     +  ( 'DetCondKeyTrans' , 'ConditionStore+/LAR/Align' ) 
-ClassIDSvc                                                   0    INFO getRegistryEntries: read 73 CLIDRegistry entries for module ALL
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
-LArFCAL_Base_ID                                              0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
-CaloIDHelper_IDDetDescrCnv                                   0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-TileNeighbour                                                0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-10-31T2101/Athena/22.0.47/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
-AtlasDetectorID                                              0    INFO initialize_from_dictionary - OK
-CaloSuperCellAlignCondAlg.CaloSuperCellIDTool                0    INFO Done with initIDMap
 TileBadChannelsCondAlg.TileCondProxyCool_OnlBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OnlBch) for folder: "/TILE/ONL01/STATUS/ADC"
 TileBadChannelsCondAlg.TileCondProxyCool_OflBch              0    INFO Creating TileCondProxyCool(TileBadChannelsCondAlg.TileCondProxyCool_OflBch) for folder: "/TILE/OFL02/STATUS/ADC"
 TileBadChannelsCondAlg                                       0    INFO ProxyOnlBch and ProxyOflBch will be used for bad channel status
@@ -1012,7 +983,7 @@ TileSampleNoiseCon...TileCondProxyCool_NoiseSample           0    INFO Creating
 TileTimingCondAlg.TileCondProxyCool_AdcOffset                0    INFO Creating TileCondProxyCool(TileTimingCondAlg.TileCondProxyCool_AdcOffset) for folder: "/TILE/OFL02/TIME/CHANNELOFFSET/PHY"
 ThreadPoolSvc                                                0    INFO no thread init tools attached
 AvalancheSchedulerSvc                                        0    INFO Activating scheduler in a separate thread
-AvalancheSchedulerSvc                                        0    INFO Found 18 algorithms
+AvalancheSchedulerSvc                                        0    INFO Found 17 algorithms
 AvalancheSchedulerSvc                                        0    INFO Will attribute the following unmet INPUT dependencies to "SGInputLoader/SGInputLoader" Algorithm
 AvalancheSchedulerSvc                                        0    INFO    o  ( 'TileRawChannelContainer' , 'StoreGateSvc+MuRcvRawChCnt' )     required by Algorithm: 
 AvalancheSchedulerSvc                                        0    INFO        * MuRcvRawChannelCntDumper
@@ -1078,6 +1049,20 @@ AtlasDetectorID                                        0     0    INFO initializ
 CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a TTOnlineID helper object in the detector store
 TTOnlineID                                             0     0    INFO initialize_from_dictionary
 AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a CaloCell_SuperCell_ID helper object in the detector store
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArEM_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArHEC_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a LArFCAL_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells2DNeighborsNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsNextNew-April2014.txt
+LArFCAL_Base_ID                                        0     0    INFO Reading file /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/FCalSuperCells3DNeighborsPrevNew-April2014.txt
+CaloIDHelper_IDDetDescrCnv                             0     0    INFO in createObj: creating a Tile_SuperCell_ID helper object in the detector store
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
+TileNeighbour                                          0     0    INFO Reading file  /cvmfs/atlas-nightlies.cern.ch/repo/sw/master_Athena_x86_64-centos7-gcc8-opt/2021-11-16T2101/Athena/22.0.49/InstallArea/x86_64-centos7-gcc8-opt/share/TileSuperCellNeighbour.txt
+AtlasDetectorID                                        0     0    INFO initialize_from_dictionary - OK
 CaloIdMgrDetDescrCnv                                   0     0    INFO  Finished 
 CaloIdMgrDetDescrCnv                                   0     0    INFO Initializing CaloIdMgr from values in CaloIdMgrDetDescrCnv 
 Domain[ROOT_All]                                       0     0    INFO ->  Access   DbDatabase   READ      [ROOT_All] 8667C6F2-1559-DE11-A611-000423D9A21A
@@ -1109,191 +1094,191 @@ AthenaHiveEventLoopMgr                                 7     2    INFO   ===>>>
 AthenaHiveEventLoopMgr                                 8     3    INFO   ===>>>  start processing event #1132092, run #204073 on slot 3,  5 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 5     0    INFO   ===>>>  done processing event #1131269, run #204073 on slot 0,  6 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 6     1    INFO   ===>>>  done processing event #1130716, run #204073 on slot 1,  7 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                 9     0    INFO   ===>>>  start processing event #1130238, run #204073 on slot 0,  7 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                10     1    INFO   ===>>>  start processing event #1134553, run #204073 on slot 1,  7 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 7     2    INFO   ===>>>  done processing event #1132019, run #204073 on slot 2,  8 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                 9     0    INFO   ===>>>  start processing event #1130238, run #204073 on slot 0,  8 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                10     1    INFO   ===>>>  start processing event #1134553, run #204073 on slot 1,  8 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                11     2    INFO   ===>>>  start processing event #1130999, run #204073 on slot 2,  8 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 8     3    INFO   ===>>>  done processing event #1132092, run #204073 on slot 3,  9 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                11     2    INFO   ===>>>  start processing event #1130999, run #204073 on slot 2,  9 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                12     3    INFO   ===>>>  start processing event #1133461, run #204073 on slot 3,  9 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                 9     0    INFO   ===>>>  done processing event #1130238, run #204073 on slot 0,  10 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                10     1    INFO   ===>>>  done processing event #1134553, run #204073 on slot 1,  11 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                13     0    INFO   ===>>>  start processing event #1131152, run #204073 on slot 0,  11 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                14     1    INFO   ===>>>  start processing event #1130142, run #204073 on slot 1,  11 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                12     0    INFO   ===>>>  start processing event #1133461, run #204073 on slot 0,  11 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                13     1    INFO   ===>>>  start processing event #1131152, run #204073 on slot 1,  11 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                14     3    INFO   ===>>>  start processing event #1130142, run #204073 on slot 3,  11 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                11     2    INFO   ===>>>  done processing event #1130999, run #204073 on slot 2,  12 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                12     3    INFO   ===>>>  done processing event #1133461, run #204073 on slot 3,  13 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                15     2    INFO   ===>>>  start processing event #1132770, run #204073 on slot 2,  13 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                16     3    INFO   ===>>>  start processing event #1132365, run #204073 on slot 3,  13 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                13     0    INFO   ===>>>  done processing event #1131152, run #204073 on slot 0,  14 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                14     1    INFO   ===>>>  done processing event #1130142, run #204073 on slot 1,  15 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                17     0    INFO   ===>>>  start processing event #1136791, run #204073 on slot 0,  15 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                18     1    INFO   ===>>>  start processing event #1133781, run #204073 on slot 1,  15 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                15     2    INFO   ===>>>  done processing event #1132770, run #204073 on slot 2,  16 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                16     3    INFO   ===>>>  done processing event #1132365, run #204073 on slot 3,  17 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                19     2    INFO   ===>>>  start processing event #1132067, run #204073 on slot 2,  17 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                20     3    INFO   ===>>>  start processing event #1138637, run #204073 on slot 3,  17 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                17     0    INFO   ===>>>  done processing event #1136791, run #204073 on slot 0,  18 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                18     1    INFO   ===>>>  done processing event #1133781, run #204073 on slot 1,  19 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                21     0    INFO   ===>>>  start processing event #1139495, run #204073 on slot 0,  19 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                22     1    INFO   ===>>>  start processing event #1140193, run #204073 on slot 1,  19 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                19     2    INFO   ===>>>  done processing event #1132067, run #204073 on slot 2,  20 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                20     3    INFO   ===>>>  done processing event #1138637, run #204073 on slot 3,  21 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                23     2    INFO   ===>>>  start processing event #1142953, run #204073 on slot 2,  21 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                24     3    INFO   ===>>>  start processing event #1139127, run #204073 on slot 3,  21 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                21     0    INFO   ===>>>  done processing event #1139495, run #204073 on slot 0,  22 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                22     1    INFO   ===>>>  done processing event #1140193, run #204073 on slot 1,  23 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                25     0    INFO   ===>>>  start processing event #1141272, run #204073 on slot 0,  23 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                26     1    INFO   ===>>>  start processing event #1137117, run #204073 on slot 1,  23 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                23     2    INFO   ===>>>  done processing event #1142953, run #204073 on slot 2,  24 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                24     3    INFO   ===>>>  done processing event #1139127, run #204073 on slot 3,  25 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                27     2    INFO   ===>>>  start processing event #1139599, run #204073 on slot 2,  25 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                28     3    INFO   ===>>>  start processing event #1140314, run #204073 on slot 3,  25 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                25     0    INFO   ===>>>  done processing event #1141272, run #204073 on slot 0,  26 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                26     1    INFO   ===>>>  done processing event #1137117, run #204073 on slot 1,  27 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                29     0    INFO   ===>>>  start processing event #1133685, run #204073 on slot 0,  27 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                30     1    INFO   ===>>>  start processing event #1143279, run #204073 on slot 1,  27 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                27     2    INFO   ===>>>  done processing event #1139599, run #204073 on slot 2,  28 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                28     3    INFO   ===>>>  done processing event #1140314, run #204073 on slot 3,  29 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                31     2    INFO   ===>>>  start processing event #1137563, run #204073 on slot 2,  29 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                32     3    INFO   ===>>>  start processing event #1139927, run #204073 on slot 3,  29 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                29     0    INFO   ===>>>  done processing event #1133685, run #204073 on slot 0,  30 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                33     0    INFO   ===>>>  start processing event #1141197, run #204073 on slot 0,  30 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                30     1    INFO   ===>>>  done processing event #1143279, run #204073 on slot 1,  31 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                31     2    INFO   ===>>>  done processing event #1137563, run #204073 on slot 2,  32 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                34     1    INFO   ===>>>  start processing event #1140039, run #204073 on slot 1,  32 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                35     2    INFO   ===>>>  start processing event #1142531, run #204073 on slot 2,  32 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                32     3    INFO   ===>>>  done processing event #1139927, run #204073 on slot 3,  33 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                33     0    INFO   ===>>>  done processing event #1141197, run #204073 on slot 0,  34 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                36     0    INFO   ===>>>  start processing event #1139475, run #204073 on slot 0,  34 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                37     3    INFO   ===>>>  start processing event #1139958, run #204073 on slot 3,  34 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                34     1    INFO   ===>>>  done processing event #1140039, run #204073 on slot 1,  35 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                35     2    INFO   ===>>>  done processing event #1142531, run #204073 on slot 2,  36 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                38     1    INFO   ===>>>  start processing event #1143765, run #204073 on slot 1,  36 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                39     2    INFO   ===>>>  start processing event #1143097, run #204073 on slot 2,  36 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                36     0    INFO   ===>>>  done processing event #1139475, run #204073 on slot 0,  37 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                37     3    INFO   ===>>>  done processing event #1139958, run #204073 on slot 3,  38 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                40     0    INFO   ===>>>  start processing event #1134147, run #204073 on slot 0,  38 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                41     3    INFO   ===>>>  start processing event #1137156, run #204073 on slot 3,  38 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                38     1    INFO   ===>>>  done processing event #1143765, run #204073 on slot 1,  39 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                39     2    INFO   ===>>>  done processing event #1143097, run #204073 on slot 2,  40 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                42     1    INFO   ===>>>  start processing event #1136377, run #204073 on slot 1,  40 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                43     2    INFO   ===>>>  start processing event #1137842, run #204073 on slot 2,  40 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                40     0    INFO   ===>>>  done processing event #1134147, run #204073 on slot 0,  41 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                41     3    INFO   ===>>>  done processing event #1137156, run #204073 on slot 3,  42 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                44     0    INFO   ===>>>  start processing event #1141705, run #204073 on slot 0,  42 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                45     3    INFO   ===>>>  start processing event #1143410, run #204073 on slot 3,  42 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                42     1    INFO   ===>>>  done processing event #1136377, run #204073 on slot 1,  43 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                43     2    INFO   ===>>>  done processing event #1137842, run #204073 on slot 2,  44 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                46     1    INFO   ===>>>  start processing event #1144170, run #204073 on slot 1,  44 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                47     2    INFO   ===>>>  start processing event #1145987, run #204073 on slot 2,  44 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                44     0    INFO   ===>>>  done processing event #1141705, run #204073 on slot 0,  45 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                45     3    INFO   ===>>>  done processing event #1143410, run #204073 on slot 3,  46 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                48     0    INFO   ===>>>  start processing event #1145633, run #204073 on slot 0,  46 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                49     3    INFO   ===>>>  start processing event #1135005, run #204073 on slot 3,  46 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                46     1    INFO   ===>>>  done processing event #1144170, run #204073 on slot 1,  47 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                47     2    INFO   ===>>>  done processing event #1145987, run #204073 on slot 2,  48 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                50     1    INFO   ===>>>  start processing event #1142167, run #204073 on slot 1,  48 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                51     2    INFO   ===>>>  start processing event #1144646, run #204073 on slot 2,  48 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                48     0    INFO   ===>>>  done processing event #1145633, run #204073 on slot 0,  49 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                49     3    INFO   ===>>>  done processing event #1135005, run #204073 on slot 3,  50 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                52     0    INFO   ===>>>  start processing event #1145027, run #204073 on slot 0,  50 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                53     3    INFO   ===>>>  start processing event #1144112, run #204073 on slot 3,  50 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                50     1    INFO   ===>>>  done processing event #1142167, run #204073 on slot 1,  51 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                51     2    INFO   ===>>>  done processing event #1144646, run #204073 on slot 2,  52 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                54     1    INFO   ===>>>  start processing event #1138485, run #204073 on slot 1,  52 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                55     2    INFO   ===>>>  start processing event #1144565, run #204073 on slot 2,  52 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                52     0    INFO   ===>>>  done processing event #1145027, run #204073 on slot 0,  53 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                53     3    INFO   ===>>>  done processing event #1144112, run #204073 on slot 3,  54 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                56     0    INFO   ===>>>  start processing event #1139498, run #204073 on slot 0,  54 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                57     3    INFO   ===>>>  start processing event #1136546, run #204073 on slot 3,  54 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                54     1    INFO   ===>>>  done processing event #1138485, run #204073 on slot 1,  55 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                58     1    INFO   ===>>>  start processing event #1143799, run #204073 on slot 1,  55 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                55     2    INFO   ===>>>  done processing event #1144565, run #204073 on slot 2,  56 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                59     2    INFO   ===>>>  start processing event #1142877, run #204073 on slot 2,  56 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                56     0    INFO   ===>>>  done processing event #1139498, run #204073 on slot 0,  57 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                57     3    INFO   ===>>>  done processing event #1136546, run #204073 on slot 3,  58 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                60     0    INFO   ===>>>  start processing event #1149894, run #204073 on slot 0,  58 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                61     3    INFO   ===>>>  start processing event #1145364, run #204073 on slot 3,  58 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                58     1    INFO   ===>>>  done processing event #1143799, run #204073 on slot 1,  59 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                59     2    INFO   ===>>>  done processing event #1142877, run #204073 on slot 2,  60 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                62     1    INFO   ===>>>  start processing event #1143770, run #204073 on slot 1,  60 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                63     2    INFO   ===>>>  start processing event #1148361, run #204073 on slot 2,  60 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                60     0    INFO   ===>>>  done processing event #1149894, run #204073 on slot 0,  61 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                61     3    INFO   ===>>>  done processing event #1145364, run #204073 on slot 3,  62 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                64     0    INFO   ===>>>  start processing event #1148167, run #204073 on slot 0,  62 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                65     3    INFO   ===>>>  start processing event #1138948, run #204073 on slot 3,  62 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                62     1    INFO   ===>>>  done processing event #1143770, run #204073 on slot 1,  63 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                63     2    INFO   ===>>>  done processing event #1148361, run #204073 on slot 2,  64 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                66     1    INFO   ===>>>  start processing event #1144808, run #204073 on slot 1,  64 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                67     2    INFO   ===>>>  start processing event #1145832, run #204073 on slot 2,  64 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                64     0    INFO   ===>>>  done processing event #1148167, run #204073 on slot 0,  65 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                65     3    INFO   ===>>>  done processing event #1138948, run #204073 on slot 3,  66 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                68     0    INFO   ===>>>  start processing event #1153100, run #204073 on slot 0,  66 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                69     3    INFO   ===>>>  start processing event #1142524, run #204073 on slot 3,  66 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                66     1    INFO   ===>>>  done processing event #1144808, run #204073 on slot 1,  67 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                67     2    INFO   ===>>>  done processing event #1145832, run #204073 on slot 2,  68 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                70     1    INFO   ===>>>  start processing event #1138294, run #204073 on slot 1,  68 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                71     2    INFO   ===>>>  start processing event #1138350, run #204073 on slot 2,  68 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                68     0    INFO   ===>>>  done processing event #1153100, run #204073 on slot 0,  69 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                69     3    INFO   ===>>>  done processing event #1142524, run #204073 on slot 3,  70 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                72     0    INFO   ===>>>  start processing event #1149424, run #204073 on slot 0,  70 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                73     3    INFO   ===>>>  start processing event #1151102, run #204073 on slot 3,  70 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                70     1    INFO   ===>>>  done processing event #1138294, run #204073 on slot 1,  71 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                71     2    INFO   ===>>>  done processing event #1138350, run #204073 on slot 2,  72 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                74     1    INFO   ===>>>  start processing event #1152242, run #204073 on slot 1,  72 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                75     2    INFO   ===>>>  start processing event #1148416, run #204073 on slot 2,  72 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                72     0    INFO   ===>>>  done processing event #1149424, run #204073 on slot 0,  73 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                76     0    INFO   ===>>>  start processing event #1142753, run #204073 on slot 0,  73 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                73     3    INFO   ===>>>  done processing event #1151102, run #204073 on slot 3,  74 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                74     1    INFO   ===>>>  done processing event #1152242, run #204073 on slot 1,  75 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                12     0    INFO   ===>>>  done processing event #1133461, run #204073 on slot 0,  13 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                15     0    INFO   ===>>>  start processing event #1132770, run #204073 on slot 0,  13 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                16     2    INFO   ===>>>  start processing event #1132365, run #204073 on slot 2,  13 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                13     1    INFO   ===>>>  done processing event #1131152, run #204073 on slot 1,  14 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                14     3    INFO   ===>>>  done processing event #1130142, run #204073 on slot 3,  15 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                17     1    INFO   ===>>>  start processing event #1136791, run #204073 on slot 1,  15 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                18     3    INFO   ===>>>  start processing event #1133781, run #204073 on slot 3,  15 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                15     0    INFO   ===>>>  done processing event #1132770, run #204073 on slot 0,  16 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                16     2    INFO   ===>>>  done processing event #1132365, run #204073 on slot 2,  17 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                19     0    INFO   ===>>>  start processing event #1132067, run #204073 on slot 0,  17 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                20     2    INFO   ===>>>  start processing event #1138637, run #204073 on slot 2,  17 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                17     1    INFO   ===>>>  done processing event #1136791, run #204073 on slot 1,  18 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                18     3    INFO   ===>>>  done processing event #1133781, run #204073 on slot 3,  19 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                21     1    INFO   ===>>>  start processing event #1139495, run #204073 on slot 1,  19 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                22     3    INFO   ===>>>  start processing event #1140193, run #204073 on slot 3,  19 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                19     0    INFO   ===>>>  done processing event #1132067, run #204073 on slot 0,  20 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                20     2    INFO   ===>>>  done processing event #1138637, run #204073 on slot 2,  21 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                23     0    INFO   ===>>>  start processing event #1142953, run #204073 on slot 0,  21 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                24     2    INFO   ===>>>  start processing event #1139127, run #204073 on slot 2,  21 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                21     1    INFO   ===>>>  done processing event #1139495, run #204073 on slot 1,  22 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                22     3    INFO   ===>>>  done processing event #1140193, run #204073 on slot 3,  23 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                25     1    INFO   ===>>>  start processing event #1141272, run #204073 on slot 1,  23 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                26     3    INFO   ===>>>  start processing event #1137117, run #204073 on slot 3,  23 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                23     0    INFO   ===>>>  done processing event #1142953, run #204073 on slot 0,  24 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                24     2    INFO   ===>>>  done processing event #1139127, run #204073 on slot 2,  25 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                27     0    INFO   ===>>>  start processing event #1139599, run #204073 on slot 0,  25 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                28     2    INFO   ===>>>  start processing event #1140314, run #204073 on slot 2,  25 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                25     1    INFO   ===>>>  done processing event #1141272, run #204073 on slot 1,  26 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                26     3    INFO   ===>>>  done processing event #1137117, run #204073 on slot 3,  27 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                29     1    INFO   ===>>>  start processing event #1133685, run #204073 on slot 1,  27 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                30     3    INFO   ===>>>  start processing event #1143279, run #204073 on slot 3,  27 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                27     0    INFO   ===>>>  done processing event #1139599, run #204073 on slot 0,  28 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                28     2    INFO   ===>>>  done processing event #1140314, run #204073 on slot 2,  29 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                31     0    INFO   ===>>>  start processing event #1137563, run #204073 on slot 0,  29 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                32     2    INFO   ===>>>  start processing event #1139927, run #204073 on slot 2,  29 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                29     1    INFO   ===>>>  done processing event #1133685, run #204073 on slot 1,  30 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                30     3    INFO   ===>>>  done processing event #1143279, run #204073 on slot 3,  31 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                33     1    INFO   ===>>>  start processing event #1141197, run #204073 on slot 1,  31 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                34     3    INFO   ===>>>  start processing event #1140039, run #204073 on slot 3,  31 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                31     0    INFO   ===>>>  done processing event #1137563, run #204073 on slot 0,  32 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                32     2    INFO   ===>>>  done processing event #1139927, run #204073 on slot 2,  33 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                35     0    INFO   ===>>>  start processing event #1142531, run #204073 on slot 0,  33 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                36     2    INFO   ===>>>  start processing event #1139475, run #204073 on slot 2,  33 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                33     1    INFO   ===>>>  done processing event #1141197, run #204073 on slot 1,  34 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                34     3    INFO   ===>>>  done processing event #1140039, run #204073 on slot 3,  35 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                37     1    INFO   ===>>>  start processing event #1139958, run #204073 on slot 1,  35 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                38     3    INFO   ===>>>  start processing event #1143765, run #204073 on slot 3,  35 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                35     0    INFO   ===>>>  done processing event #1142531, run #204073 on slot 0,  36 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                36     2    INFO   ===>>>  done processing event #1139475, run #204073 on slot 2,  37 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                39     0    INFO   ===>>>  start processing event #1143097, run #204073 on slot 0,  37 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                40     2    INFO   ===>>>  start processing event #1134147, run #204073 on slot 2,  37 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                37     1    INFO   ===>>>  done processing event #1139958, run #204073 on slot 1,  38 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                38     3    INFO   ===>>>  done processing event #1143765, run #204073 on slot 3,  39 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                41     1    INFO   ===>>>  start processing event #1137156, run #204073 on slot 1,  39 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                42     3    INFO   ===>>>  start processing event #1136377, run #204073 on slot 3,  39 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                39     0    INFO   ===>>>  done processing event #1143097, run #204073 on slot 0,  40 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                40     2    INFO   ===>>>  done processing event #1134147, run #204073 on slot 2,  41 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                43     0    INFO   ===>>>  start processing event #1137842, run #204073 on slot 0,  41 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                44     2    INFO   ===>>>  start processing event #1141705, run #204073 on slot 2,  41 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                41     1    INFO   ===>>>  done processing event #1137156, run #204073 on slot 1,  42 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                42     3    INFO   ===>>>  done processing event #1136377, run #204073 on slot 3,  43 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                45     1    INFO   ===>>>  start processing event #1143410, run #204073 on slot 1,  43 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                46     3    INFO   ===>>>  start processing event #1144170, run #204073 on slot 3,  43 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                43     0    INFO   ===>>>  done processing event #1137842, run #204073 on slot 0,  44 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                44     2    INFO   ===>>>  done processing event #1141705, run #204073 on slot 2,  45 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                47     0    INFO   ===>>>  start processing event #1145987, run #204073 on slot 0,  45 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                48     2    INFO   ===>>>  start processing event #1145633, run #204073 on slot 2,  45 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                45     1    INFO   ===>>>  done processing event #1143410, run #204073 on slot 1,  46 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                46     3    INFO   ===>>>  done processing event #1144170, run #204073 on slot 3,  47 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                49     1    INFO   ===>>>  start processing event #1135005, run #204073 on slot 1,  47 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                50     3    INFO   ===>>>  start processing event #1142167, run #204073 on slot 3,  47 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                47     0    INFO   ===>>>  done processing event #1145987, run #204073 on slot 0,  48 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                48     2    INFO   ===>>>  done processing event #1145633, run #204073 on slot 2,  49 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                51     0    INFO   ===>>>  start processing event #1144646, run #204073 on slot 0,  49 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                52     2    INFO   ===>>>  start processing event #1145027, run #204073 on slot 2,  49 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                49     1    INFO   ===>>>  done processing event #1135005, run #204073 on slot 1,  50 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                50     3    INFO   ===>>>  done processing event #1142167, run #204073 on slot 3,  51 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                53     1    INFO   ===>>>  start processing event #1144112, run #204073 on slot 1,  51 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                54     3    INFO   ===>>>  start processing event #1138485, run #204073 on slot 3,  51 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                51     0    INFO   ===>>>  done processing event #1144646, run #204073 on slot 0,  52 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                52     2    INFO   ===>>>  done processing event #1145027, run #204073 on slot 2,  53 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                55     0    INFO   ===>>>  start processing event #1144565, run #204073 on slot 0,  53 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                56     2    INFO   ===>>>  start processing event #1139498, run #204073 on slot 2,  53 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                53     1    INFO   ===>>>  done processing event #1144112, run #204073 on slot 1,  54 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                54     3    INFO   ===>>>  done processing event #1138485, run #204073 on slot 3,  55 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                57     1    INFO   ===>>>  start processing event #1136546, run #204073 on slot 1,  55 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                58     3    INFO   ===>>>  start processing event #1143799, run #204073 on slot 3,  55 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                55     0    INFO   ===>>>  done processing event #1144565, run #204073 on slot 0,  56 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                56     2    INFO   ===>>>  done processing event #1139498, run #204073 on slot 2,  57 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                59     0    INFO   ===>>>  start processing event #1142877, run #204073 on slot 0,  57 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                60     2    INFO   ===>>>  start processing event #1149894, run #204073 on slot 2,  57 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                57     1    INFO   ===>>>  done processing event #1136546, run #204073 on slot 1,  58 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                58     3    INFO   ===>>>  done processing event #1143799, run #204073 on slot 3,  59 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                61     1    INFO   ===>>>  start processing event #1145364, run #204073 on slot 1,  59 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                62     3    INFO   ===>>>  start processing event #1143770, run #204073 on slot 3,  59 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                59     0    INFO   ===>>>  done processing event #1142877, run #204073 on slot 0,  60 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                60     2    INFO   ===>>>  done processing event #1149894, run #204073 on slot 2,  61 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                63     0    INFO   ===>>>  start processing event #1148361, run #204073 on slot 0,  61 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                64     2    INFO   ===>>>  start processing event #1148167, run #204073 on slot 2,  61 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                61     1    INFO   ===>>>  done processing event #1145364, run #204073 on slot 1,  62 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                62     3    INFO   ===>>>  done processing event #1143770, run #204073 on slot 3,  63 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                65     1    INFO   ===>>>  start processing event #1138948, run #204073 on slot 1,  63 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                66     3    INFO   ===>>>  start processing event #1144808, run #204073 on slot 3,  63 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                63     0    INFO   ===>>>  done processing event #1148361, run #204073 on slot 0,  64 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                64     2    INFO   ===>>>  done processing event #1148167, run #204073 on slot 2,  65 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                67     0    INFO   ===>>>  start processing event #1145832, run #204073 on slot 0,  65 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                68     2    INFO   ===>>>  start processing event #1153100, run #204073 on slot 2,  65 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                65     1    INFO   ===>>>  done processing event #1138948, run #204073 on slot 1,  66 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                66     3    INFO   ===>>>  done processing event #1144808, run #204073 on slot 3,  67 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                69     1    INFO   ===>>>  start processing event #1142524, run #204073 on slot 1,  67 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                70     3    INFO   ===>>>  start processing event #1138294, run #204073 on slot 3,  67 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                67     0    INFO   ===>>>  done processing event #1145832, run #204073 on slot 0,  68 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                68     2    INFO   ===>>>  done processing event #1153100, run #204073 on slot 2,  69 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                71     0    INFO   ===>>>  start processing event #1138350, run #204073 on slot 0,  69 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                72     2    INFO   ===>>>  start processing event #1149424, run #204073 on slot 2,  69 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                69     1    INFO   ===>>>  done processing event #1142524, run #204073 on slot 1,  70 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                70     3    INFO   ===>>>  done processing event #1138294, run #204073 on slot 3,  71 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                73     1    INFO   ===>>>  start processing event #1151102, run #204073 on slot 1,  71 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                74     3    INFO   ===>>>  start processing event #1152242, run #204073 on slot 3,  71 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                71     0    INFO   ===>>>  done processing event #1138350, run #204073 on slot 0,  72 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                72     2    INFO   ===>>>  done processing event #1149424, run #204073 on slot 2,  73 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                75     0    INFO   ===>>>  start processing event #1148416, run #204073 on slot 0,  73 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                76     2    INFO   ===>>>  start processing event #1142753, run #204073 on slot 2,  73 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                73     1    INFO   ===>>>  done processing event #1151102, run #204073 on slot 1,  74 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                74     3    INFO   ===>>>  done processing event #1152242, run #204073 on slot 3,  75 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                77     1    INFO   ===>>>  start processing event #1149997, run #204073 on slot 1,  75 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                78     3    INFO   ===>>>  start processing event #1151617, run #204073 on slot 3,  75 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                75     2    INFO   ===>>>  done processing event #1148416, run #204073 on slot 2,  76 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                79     2    INFO   ===>>>  start processing event #1149794, run #204073 on slot 2,  76 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                76     0    INFO   ===>>>  done processing event #1142753, run #204073 on slot 0,  77 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                75     0    INFO   ===>>>  done processing event #1148416, run #204073 on slot 0,  76 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                76     2    INFO   ===>>>  done processing event #1142753, run #204073 on slot 2,  77 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                79     0    INFO   ===>>>  start processing event #1149794, run #204073 on slot 0,  77 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                80     2    INFO   ===>>>  start processing event #1152504, run #204073 on slot 2,  77 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                77     1    INFO   ===>>>  done processing event #1149997, run #204073 on slot 1,  78 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                80     0    INFO   ===>>>  start processing event #1152504, run #204073 on slot 0,  78 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                81     1    INFO   ===>>>  start processing event #1142485, run #204073 on slot 1,  78 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                78     3    INFO   ===>>>  done processing event #1151617, run #204073 on slot 3,  79 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                79     2    INFO   ===>>>  done processing event #1149794, run #204073 on slot 2,  80 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                82     2    INFO   ===>>>  start processing event #1151364, run #204073 on slot 2,  80 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                83     3    INFO   ===>>>  start processing event #1143901, run #204073 on slot 3,  80 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                80     0    INFO   ===>>>  done processing event #1152504, run #204073 on slot 0,  81 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                81     1    INFO   ===>>>  start processing event #1142485, run #204073 on slot 1,  79 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                82     3    INFO   ===>>>  start processing event #1151364, run #204073 on slot 3,  79 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                79     0    INFO   ===>>>  done processing event #1149794, run #204073 on slot 0,  80 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                80     2    INFO   ===>>>  done processing event #1152504, run #204073 on slot 2,  81 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                83     0    INFO   ===>>>  start processing event #1143901, run #204073 on slot 0,  81 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                84     2    INFO   ===>>>  start processing event #1153979, run #204073 on slot 2,  81 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                81     1    INFO   ===>>>  done processing event #1142485, run #204073 on slot 1,  82 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                84     0    INFO   ===>>>  start processing event #1153979, run #204073 on slot 0,  82 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                85     1    INFO   ===>>>  start processing event #1150212, run #204073 on slot 1,  82 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                82     2    INFO   ===>>>  done processing event #1151364, run #204073 on slot 2,  83 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                83     3    INFO   ===>>>  done processing event #1143901, run #204073 on slot 3,  84 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                86     2    INFO   ===>>>  start processing event #1152633, run #204073 on slot 2,  84 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                87     3    INFO   ===>>>  start processing event #1155482, run #204073 on slot 3,  84 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                84     0    INFO   ===>>>  done processing event #1153979, run #204073 on slot 0,  85 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                82     3    INFO   ===>>>  done processing event #1151364, run #204073 on slot 3,  83 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                85     1    INFO   ===>>>  start processing event #1150212, run #204073 on slot 1,  83 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                86     3    INFO   ===>>>  start processing event #1152633, run #204073 on slot 3,  83 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                83     0    INFO   ===>>>  done processing event #1143901, run #204073 on slot 0,  84 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                84     2    INFO   ===>>>  done processing event #1153979, run #204073 on slot 2,  85 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                87     0    INFO   ===>>>  start processing event #1155482, run #204073 on slot 0,  85 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                88     2    INFO   ===>>>  start processing event #1150472, run #204073 on slot 2,  85 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                85     1    INFO   ===>>>  done processing event #1150212, run #204073 on slot 1,  86 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                88     0    INFO   ===>>>  start processing event #1150472, run #204073 on slot 0,  86 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                89     1    INFO   ===>>>  start processing event #1140275, run #204073 on slot 1,  86 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                86     2    INFO   ===>>>  done processing event #1152633, run #204073 on slot 2,  87 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                87     3    INFO   ===>>>  done processing event #1155482, run #204073 on slot 3,  88 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                90     2    INFO   ===>>>  start processing event #1145882, run #204073 on slot 2,  88 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                91     3    INFO   ===>>>  start processing event #1151732, run #204073 on slot 3,  88 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                88     0    INFO   ===>>>  done processing event #1150472, run #204073 on slot 0,  89 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                86     3    INFO   ===>>>  done processing event #1152633, run #204073 on slot 3,  87 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                89     1    INFO   ===>>>  start processing event #1140275, run #204073 on slot 1,  87 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                90     3    INFO   ===>>>  start processing event #1145882, run #204073 on slot 3,  87 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                87     0    INFO   ===>>>  done processing event #1155482, run #204073 on slot 0,  88 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                88     2    INFO   ===>>>  done processing event #1150472, run #204073 on slot 2,  89 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                91     0    INFO   ===>>>  start processing event #1151732, run #204073 on slot 0,  89 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                92     2    INFO   ===>>>  start processing event #1137896, run #204073 on slot 2,  89 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                89     1    INFO   ===>>>  done processing event #1140275, run #204073 on slot 1,  90 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                92     0    INFO   ===>>>  start processing event #1137896, run #204073 on slot 0,  90 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                93     1    INFO   ===>>>  start processing event #1156381, run #204073 on slot 1,  90 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                90     2    INFO   ===>>>  done processing event #1145882, run #204073 on slot 2,  91 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                91     3    INFO   ===>>>  done processing event #1151732, run #204073 on slot 3,  92 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                94     2    INFO   ===>>>  start processing event #1149161, run #204073 on slot 2,  92 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                95     3    INFO   ===>>>  start processing event #1153794, run #204073 on slot 3,  92 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                92     0    INFO   ===>>>  done processing event #1137896, run #204073 on slot 0,  93 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                90     3    INFO   ===>>>  done processing event #1145882, run #204073 on slot 3,  91 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                93     1    INFO   ===>>>  start processing event #1156381, run #204073 on slot 1,  91 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                94     3    INFO   ===>>>  start processing event #1149161, run #204073 on slot 3,  91 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                91     0    INFO   ===>>>  done processing event #1151732, run #204073 on slot 0,  92 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                92     2    INFO   ===>>>  done processing event #1137896, run #204073 on slot 2,  93 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                95     0    INFO   ===>>>  start processing event #1153794, run #204073 on slot 0,  93 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                96     2    INFO   ===>>>  start processing event #1151312, run #204073 on slot 2,  93 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                93     1    INFO   ===>>>  done processing event #1156381, run #204073 on slot 1,  94 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                96     0    INFO   ===>>>  start processing event #1151312, run #204073 on slot 0,  94 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                97     1    INFO   ===>>>  start processing event #1148893, run #204073 on slot 1,  94 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                94     2    INFO   ===>>>  done processing event #1149161, run #204073 on slot 2,  95 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                95     3    INFO   ===>>>  done processing event #1153794, run #204073 on slot 3,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                98     2    INFO   ===>>>  start processing event #1156938, run #204073 on slot 2,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     3    INFO   ===>>>  start processing event #1156351, run #204073 on slot 3,  96 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                96     0    INFO   ===>>>  done processing event #1151312, run #204073 on slot 0,  97 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                94     3    INFO   ===>>>  done processing event #1149161, run #204073 on slot 3,  95 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                97     1    INFO   ===>>>  start processing event #1148893, run #204073 on slot 1,  95 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                98     3    INFO   ===>>>  start processing event #1156938, run #204073 on slot 3,  95 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                95     0    INFO   ===>>>  done processing event #1153794, run #204073 on slot 0,  96 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                96     2    INFO   ===>>>  done processing event #1151312, run #204073 on slot 2,  97 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                99     0    INFO   ===>>>  start processing event #1156351, run #204073 on slot 0,  97 events processed so far  <<<===
 AthenaHiveEventLoopMgr                                97     1    INFO   ===>>>  done processing event #1148893, run #204073 on slot 1,  98 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                98     2    INFO   ===>>>  done processing event #1156938, run #204073 on slot 2,  99 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     3    INFO   ===>>>  done processing event #1156351, run #204073 on slot 3,  100 events processed so far  <<<===
-AthenaHiveEventLoopMgr                                99     3    INFO ---> Loop Finished (seconds): 3.26726
+AthenaHiveEventLoopMgr                                98     3    INFO   ===>>>  done processing event #1156938, run #204073 on slot 3,  99 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                99     0    INFO   ===>>>  done processing event #1156351, run #204073 on slot 0,  100 events processed so far  <<<===
+AthenaHiveEventLoopMgr                                99     0    INFO ---> Loop Finished (seconds): 3.19344
 Domain[ROOT_All]                                                  INFO >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr                                                    INFO Application Manager Stopped successfully
 SGInputLoader                                                     INFO Finalizing SGInputLoader...
@@ -1304,7 +1289,7 @@ AvalancheSchedulerSvc                                             INFO Joining S
 PyComponentMgr                                                    INFO Finalizing PyComponentMgr...
 EventDataSvc                                                      INFO Finalizing EventDataSvc
 IdDictDetDescrCnv                                                 INFO in finalize
-IOVDbFolder                                                       INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 ((     0.02 ))s
+IOVDbFolder                                                       INFO Folder /LAR/Align (PoolRef) db-read 1/1 objs/chan/bytes 1/1/170 ((     0.04 ))s
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/CALIB/CES (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/CALIB/CIS/FIT/LIN (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/CALIB/CIS/FIT/NLN (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
@@ -1316,10 +1301,10 @@ IOVDbFolder                                                       INFO Folder /T
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/STATUS/ADC (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
 IOVDbFolder                                                       INFO Folder /TILE/OFL02/TIME/CHANNELOFFSET/PHY (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
 IOVDbFolder                                                       INFO Folder /TILE/ONL01/STATUS/ADC (AttrListColl) db-read 0/0 objs/chan/bytes 0/277/0 ((     0.00 ))s
-IOVDbFolder                                                       INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 ((     0.01 ))s
-IOVDbSvc                                                          INFO  bytes in ((      0.03 ))s
+IOVDbFolder                                                       INFO Folder /LAR/LArCellPositionShift (PoolRef) db-read 1/1 objs/chan/bytes 1/1/195 ((     0.02 ))s
+IOVDbSvc                                                          INFO  bytes in ((      0.06 ))s
 IOVDbSvc                                                          INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: ((     0.00 ))s
-IOVDbSvc                                                          INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: ((     0.03 ))s
+IOVDbSvc                                                          INFO Connection COOLOFL_LAR/OFLP200 : nConnect: 2 nFolders: 2 ReadTime: ((     0.06 ))s
 IOVDbSvc                                                          INFO Connection COOLOFL_TILE/OFLP200 : nConnect: 1 nFolders: 11 ReadTime: ((     0.00 ))s
 AthDictLoaderSvc                                                  INFO in finalize...
 ToolSvc                                                           INFO Removing all tools created by ToolSvc
@@ -1330,9 +1315,9 @@ ToolSvc.ByteStreamMetadataTool                                    INFO in finali
 *****Chrono*****                                                  INFO WARNING: MT job; statistics are unreliable
 *****Chrono*****                                                  INFO  The Final CPU consumption ( Chrono ) Table (ordered)
 *****Chrono*****                                                  INFO ****************************************************************************************************
-cObjR_ALL                                                         INFO Time User   : Tot=   90 [ms] Ave/Min/Max=      45(+-      45)/       0/      90 [ms] #=  2
-cObj_ALL                                                          INFO Time User   : Tot=  110 [ms] Ave/Min/Max=      55(+-      45)/      10/     100 [ms] #=  2
-ChronoStatSvc                                                     INFO Time User   : Tot= 10.1  [s]  #=  1
+cObjR_ALL                                                         INFO Time User   : Tot=   60 [ms] Ave/Min/Max=      30(+-      30)/       0/      60 [ms] #=  2
+cObj_ALL                                                          INFO Time User   : Tot=  100 [ms] Ave/Min/Max=      50(+-      40)/      10/      90 [ms] #=  2
+ChronoStatSvc                                                     INFO Time User   : Tot= 7.48  [s]  #=  1
 *****Chrono*****                                                  INFO ****************************************************************************************************
 ChronoStatSvc.finalize()                                          INFO  Service finalized successfully 
 ApplicationMgr                                                    INFO Application Manager Finalized successfully
diff --git a/Tools/PROCTools/data/master_q431_AOD_digest_500events.ref b/Tools/PROCTools/data/master_q431_AOD_digest_500events.ref
index d35524664b4d302e6f2c7c96089b43c0c737217a..385021080b1fa774b558561069f859a8a207b2bc 100644
--- a/Tools/PROCTools/data/master_q431_AOD_digest_500events.ref
+++ b/Tools/PROCTools/data/master_q431_AOD_digest_500events.ref
@@ -22,7 +22,7 @@
       330470  1183732647         467         503         100           7           1           8           0           8          20           0          20
       330470  1183733040         381         290          21           3           2           5           0           5          10           0          10
       330470  1183733070         431         553         141           9           1          16           0          16          24           0          24
-      330470  1183733727         678         789         132          10           1           5           0           5          35           0          35
+      330470  1183733727         678         789         132          10           1           6           0           6          35           0          35
       330470  1183734651         361         374          75           7           3           5           0           5          18           0          18
       330470  1183734704         438         446          41           6           6           2           0           2          23           0          23
       330470  1183734871         556         602         117           8           2          14           0          14          21           0          21
@@ -30,7 +30,7 @@
       330470  1183735593         480         451          71           7           1           5           0           5          26           0          26
       330470  1183735786         311         217           8           2           1           0           0           0           8           0           8
       330470  1183736050         589         694          67           5           1          11           0          11          29           0          29
-      330470  1183736197         453         486          94           7           5           7           0           7          15           0          15
+      330470  1183736197         453         486          94           7           5           6           0           6          15           0          15
       330470  1183736364         427         407          54           5           1           6           0           6          16           0          16
       330470  1183736418         466         487          61           5           2          13           0          13          17           0          17
       330470  1183736475         741         711          98           8           1           2           0           2          22           0          22
@@ -101,11 +101,11 @@
       330470  1183764842         585         645         127          11           1          15           0          15          29           0          29
       330470  1183765366         464         522          99           8           1           6           0           6          10           0          10
       330470  1183765436         301         213          26           3           0           5           0           5           5           0           5
-      330470  1183767528         668         643          93           7           1           9           0           9          28           0          28
+      330470  1183767528         668         643          93           7           1           8           0           8          28           0          28
       330470  1183767718         467         454         131          12           2          15           0          15          17           0          17
       330470  1183768132         410         432          40           4           2           4           0           4          15           0          15
       330470  1183768747         598         594         164          12           3          24           0          24          25           0          25
-      330470  1183768758         656         729         136           8           3          15           0          15          24           0          24
+      330470  1183768758         656         729         136           8           3          16           0          16          24           0          24
       330470  1183769295         342         338          16           2           2           0           0           0           6           0           6
       330470  1183769514         383         372          29           4           2           2           0           2          14           0          14
       330470  1183769648         527         579          46           5           4           6           0           6          17           0          17
@@ -139,7 +139,7 @@
       330470  1183782928         539         645          91           8           3           8           0           8          25           0          25
       330470  1183783289         507         599         110           7           1          15           0          15          20           0          20
       330470  1183783835         437         472         116           6           3          15           0          15          30           0          30
-      330470  1183783921         518         489         104           6           1          22           0          22          32           0          32
+      330470  1183783921         518         489         104           6           1          21           0          21          32           0          32
       330470  1183784212         561         538         142          10           0          36           0          36          28           0          28
       330470  1183784686         458         490         141          14           7           5           0           5          23           0          23
       330470  1183784788         350         327          69           5           3          18           0          18          16           0          16
@@ -183,7 +183,7 @@
       330470  1183800710         470         476          39           5           1           5           0           5          17           0          17
       330470  1183801077         415         446          47           5           1           5           0           5          22           0          22
       330470  1183801428         382         344          57           6           1           4           0           4           9           0           9
-      330470  1183802242         434         392          41           6           3           8           0           8          19           0          19
+      330470  1183802242         434         392          41           6           3           7           0           7          19           0          19
       330470  1183804252         552         594          92           6           2          12           0          12          21           0          21
       330470  1183804485         453         502          97           7           1          16           0          16          21           0          21
       330470  1183804522         298         235          14           4           1           0           0           0           7           0           7
@@ -226,7 +226,7 @@
       330470  1183823625         409         340          58           5           3          10           0          10          16           0          16
       330470  1183824371         362         307          24           5           0           2           0           2          12           0          12
       330470  1183824531         393         363          78           8           5          13           0          13          17           0          17
-      330470  1183824603         479         406          72           5           1          14           0          14          27           0          27
+      330470  1183824603         479         406          72           5           1          15           0          15          27           0          27
       330470  1183824788         473         361          67           9           3           6           0           6          28           0          28
       330470  1183824934         357         456          78           6           2           7           0           7          13           0          13
       330470  1183825276         370         333          33           6           1           2           0           2          10           0          10
@@ -266,13 +266,13 @@
       330470  1183842339         196         156           9           2           0           0           0           0           3           0           3
       330470  1183842483         550         508          38           5           0           5           0           5          19           0          19
       330470  1183842622         404         444          74           7           1           9           0           9          21           0          21
-      330470  1183842772         432         461          74           5           1          16           0          16          23           0          23
+      330470  1183842772         432         461          74           5           1          15           0          15          23           0          23
       330470  1183843837         357         374          33           2           0           7           0           7          13           0          13
       330470  1183844385         400         394          41           5           1           4           0           4           8           0           8
       330470  1183846886         385         267          19           4           0           4           0           4          20           0          20
       330470  1183847401         470         461          51           6           2           8           0           8          18           0          18
       330470  1183847806         433         488         116           9           1          15           0          15          20           0          20
-      330470  1183848014         277         272          88           7           1          14           0          14          11           0          11
+      330470  1183848014         277         272          88           7           1          14           0          14          12           0          12
       330470  1183848066         352         393          75           6           1          10           0          10          20           0          20
       330470  1183848576         546         592          76           6           5           5           0           5          24           0          24
       330470  1183848643         540         480          40           4           6           5           0           5          31           0          31
@@ -320,7 +320,7 @@
       330470  1183871236         389         313          19           3           0           5           0           5          14           0          14
       330470  1183872430         298         309          49           6           2           2           0           2          11           0          11
       330470  1183873300         384         372          54           5           3           5           0           5          15           0          15
-      330470  1183874095         543         642         191          15           4           8           0           8          25           0          25
+      330470  1183874095         543         642         191          15           4           9           0           9          25           0          25
       330470  1183874756         311         209          16           3           1           1           0           1           9           0           9
       330470  1183875240         638         762         111          11           1           9           0           9          28           0          28
       330470  1183875307         387         283          26           4           2           2           0           2          13           0          13
@@ -335,7 +335,7 @@
       330470  1183879154         597         628          52           4           4           8           0           8          28           0          28
       330470  1183879547         423         439          15           2           2           0           0           0          13           0          13
       330470  1183879670         489         525         120           8           2          13           0          13          21           0          21
-      330470  1183879957         494         578         147          13           0          12           0          12          26           0          26
+      330470  1183879957         494         578         147          13           0          12           0          12          25           0          25
       330470  1183880152         349         453          49           6           3           1           0           1          16           0          16
       330470  1183880330         714         571         175          13           4          25           0          25          52           0          52
       330470  1183880565         526         371          92          12           1          10           0          10          35           0          35
@@ -419,7 +419,7 @@
       330470  1183931811         465         375          57           7           0           8           0           8          18           0          18
       330470  1183932465         456         541          83           7           3          11           0          11          17           0          17
       330470  1183933264         514         450          32           5           2           4           0           4          10           0          10
-      330470  1183934061         556         608         150          10           2          15           0          15          31           0          31
+      330470  1183934061         556         608         150          10           2          14           0          14          31           0          31
       330470  1183934188         559         640         135          12           0          11           0          11          28           0          28
       330470  1183935176         505         635         103           9           1           7           0           7          21           0          21
       330470  1183935243         406         422         117           7           3          15           0          15          26           0          26
diff --git a/Tracking/Acts/ActsGeantFollowing/CMakeLists.txt b/Tracking/Acts/ActsGeantFollowing/CMakeLists.txt
new file mode 100755
index 0000000000000000000000000000000000000000..04e13d87ff52ba58d360eab4f4438e7f480f2419
--- /dev/null
+++ b/Tracking/Acts/ActsGeantFollowing/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+
+# Declare the package name:
+atlas_subdir( ActsGeantFollowing )
+
+# External dependencies:
+find_package( Acts COMPONENTS Core )
+find_package( Boost )
+find_package( ROOT COMPONENTS Core Tree RIO )
+
+atlas_add_component( ActsGeantFollowing
+                     src/*.cxx
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES}
+                     ActsCore
+                     ActsGeometryInterfacesLib
+                     ActsGeometryLib
+                     ActsInteropLib
+                     EventPrimitives
+                     GeoPrimitives
+                     AthenaBaseComps
+                     AthenaKernel
+                     CaloDetDescrLib
+                     EventInfo
+                     G4AtlasInterfaces 
+                     G4AtlasToolsLib 
+                     GaudiKernel
+                     StoreGateLib
+                     TRT_ReadoutGeometry
+                     TrkGeometry
+                     TrkExInterfaces
+                     TrkParameters
+                     TrkSurfaces)                  
+
+# Install files from the package:
+atlas_install_joboptions( share/*.py )
+atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
\ No newline at end of file
diff --git a/Tracking/Acts/ActsGeantFollowing/python/ActsGeantFollowingConfig.py b/Tracking/Acts/ActsGeantFollowing/python/ActsGeantFollowingConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..1ff1104b0f42574820a3dc88fbe5fedf24487c7a
--- /dev/null
+++ b/Tracking/Acts/ActsGeantFollowing/python/ActsGeantFollowingConfig.py
@@ -0,0 +1,13 @@
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator 
+from AthenaConfiguration.ComponentFactory import CompFactory
+
+def ActsGeantFollowerToolCfg(configFlags, name="ActsGeantFollowerTool", **kwargs):
+  THistSvc= CompFactory.THistSvc
+  result = ComponentAccumulator()
+  histsvc = THistSvc(name="THistSvc")
+  histsvc.Output = ["val DATAFILE='GeantFollowing.root' OPT='RECREATE'"]
+  result.addService(histsvc)
+  result.setPrivateTools(CompFactory.ActsGeantFollowerTool(name, **kwargs))
+  
+  return result
diff --git a/Tracking/Acts/ActsGeantFollowing/python/__init__.py b/Tracking/Acts/ActsGeantFollowing/python/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Tracking/Acts/ActsGeometry/share/ActsGeantFollowing_jobOptions.py b/Tracking/Acts/ActsGeantFollowing/share/ActsGeantFollowing_jobOptions.py
similarity index 61%
rename from Tracking/Acts/ActsGeometry/share/ActsGeantFollowing_jobOptions.py
rename to Tracking/Acts/ActsGeantFollowing/share/ActsGeantFollowing_jobOptions.py
index 58dfcf968c0642c667df12e6363fe1a7f8c89b9e..b4de2a3cc0a2813cbe1c3c708da7ffe9fd46cef7 100644
--- a/Tracking/Acts/ActsGeometry/share/ActsGeantFollowing_jobOptions.py
+++ b/Tracking/Acts/ActsGeantFollowing/share/ActsGeantFollowing_jobOptions.py
@@ -12,6 +12,8 @@
 from AthenaCommon.AlgSequence import AlgSequence
 topSeq = AlgSequence()
 
+from AthenaCommon.AlgSequence import AthSequencer
+condSeq = AthSequencer("AthCondSeq")
 #topSeq.ContinueEventloopOnFPE = True
 from RecExConfig.RecFlags import rec as rec
 rec.doFloatingPointException.set_Value_and_Lock(True)
@@ -135,93 +137,10 @@ from AthenaCommon.AppMgr import ToolSvc
 from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags
 from TrkDetDescrSvc.AtlasTrackingGeometrySvc import AtlasTrackingGeometrySvc
 
-# PROPAGATOR DEFAULTS --------------------------------------------------------------------------------------
-
-TestEnergyLossUpdator  = []
-from TrkExTools.TrkExToolsConf import Trk__EnergyLossUpdator
-AtlasEnergyLossUpdator = Trk__EnergyLossUpdator(name="AtlasEnergyLossUpdator")
-ToolSvc  += AtlasEnergyLossUpdator
-ToolSvc.AtlasEnergyLossUpdator.DetailedEloss = True
-TestEnergyLossUpdator  += [AtlasEnergyLossUpdator]
-
-TestPropagators  = []
-
-from TrkExRungeKuttaPropagator.TrkExRungeKuttaPropagatorConf import Trk__RungeKuttaPropagator as Propagator
-TestPropagator = Propagator(name = 'TestPropagator')
-ToolSvc += TestPropagator
-
-TestPropagators += [ TestPropagator ]
-
-from TrkExSTEP_Propagator.TrkExSTEP_PropagatorConf import Trk__STEP_Propagator as STEP_Propagator
-TestSTEP_Propagator = STEP_Propagator(name = 'TestSTEP_Propagator')
-ToolSvc += TestSTEP_Propagator
-TestSTEP_Propagator.DetailedEloss = True
-
-TestPropagators += [TestSTEP_Propagator]
-
-# UPDATOR DEFAULTS -----------------------------------------------------------------------------------------
-
-TestUpdators    = []
-
-from TrkExTools.TrkExToolsConf import Trk__MaterialEffectsUpdator as MaterialEffectsUpdator
-TestMaterialEffectsUpdator = MaterialEffectsUpdator(name = 'TestMaterialEffectsUpdator')
-ToolSvc += TestMaterialEffectsUpdator
-if myPDG == 998 or myPDG == 999:
-    TestMaterialEffectsUpdator.EnergyLoss           = False
-    TestMaterialEffectsUpdator.MultipleScattering   = False
-
-TestUpdators    += [ TestMaterialEffectsUpdator ]
-
-TestMaterialEffectsUpdatorLandau = MaterialEffectsUpdator(name = 'TestMaterialEffectsUpdatorLandau')
-TestMaterialEffectsUpdatorLandau.LandauMode           = True
-ToolSvc += TestMaterialEffectsUpdatorLandau
-if myPDG == 998 or myPDG == 999 :
-    TestMaterialEffectsUpdatorLandau.EnergyLoss           = False
-    TestMaterialEffectsUpdatorLandau.MultipleScattering   = False
-
-##TestUpdators    += [ TestMaterialEffectsUpdatorLandau ]
-
-# the UNIQUE NAVIGATOR ( === UNIQUE GEOMETRY) --------------------------------------------------------------
-from TrkExTools.TrkExToolsConf import Trk__Navigator
-TestNavigator = Trk__Navigator(name = 'TestNavigator')
-TestNavigator.TrackingGeometrySvc = "Trk::TrackingGeometrySvc/AtlasTrackingGeometrySvc"
-ToolSvc += TestNavigator
-
-# CONFIGURE PROPAGATORS/UPDATORS ACCORDING TO GEOMETRY SIGNATURE
-
-TestSubPropagators = []
-TestSubUpdators = []
-
-# -------------------- set it depending on the geometry ----------------------------------------------------
-# default for ID is (Rk,Mat)
-TestSubPropagators += [ TestPropagator.name() ]
-TestSubUpdators    += [ TestMaterialEffectsUpdator.name() ]
-
-# default for Calo is (Rk,MatLandau)
-TestSubPropagators += [ TestPropagator.name() ]
-TestSubUpdators    += [ TestMaterialEffectsUpdator.name() ]
-
-TestSubPropagators += [ TestPropagator.name() ]
-TestSubUpdators    += [ TestMaterialEffectsUpdator.name() ]
-
-# default for MS is (STEP,Mat)
-TestSubPropagators += [ TestSTEP_Propagator.name() ]
-TestSubUpdators    += [ TestMaterialEffectsUpdator.name() ]
-
-TestSubPropagators += [ TestSTEP_Propagator.name() ]
-TestSubUpdators    += [ TestMaterialEffectsUpdator.name() ]
-
-TestSubPropagators += [ TestPropagator.name() ]
-TestSubUpdators    += [ TestMaterialEffectsUpdator.name() ]
-# ----------------------------------------------------------------------------------------------------------
-
-
 # SET UP ALIGNMENT CONDITIONS ALGORITHM
 from IOVSvc.IOVSvcConf import CondSvc
-svcMgr += CondSvc( OutputLevel=INFO )
+ServiceMgr += CondSvc( OutputLevel=INFO )
 from ActsGeometry import ActsGeometryConf
-from AthenaCommon.AlgSequence import AthSequencer
-condSeq = AthSequencer("AthCondSeq")
 
 condSeq += ActsGeometryConf.NominalAlignmentCondAlg("NominalAlignmentCondAlg",
                                                      OutputLevel=INFO)
@@ -229,22 +148,9 @@ condSeq += ActsGeometryConf.NominalAlignmentCondAlg("NominalAlignmentCondAlg",
 # We need the Magnetic fiels
 import MagFieldServices.SetupField
 
-# call the base class constructor
-from TrkExTools.TrkExToolsConf import Trk__Extrapolator
-TestExtrapolator = Trk__Extrapolator('TestExtrapolator',\
-                           Navigator = TestNavigator,\
-                           MaterialEffectsUpdators = TestUpdators,\
-                           Propagators = TestPropagators,\
-                           EnergyLossUpdators = TestEnergyLossUpdator,\
-                           STEP_Propagator = TestSTEP_Propagator.name(),\
-                           SubPropagators = TestSubPropagators,\
-                           SubMEUpdators = TestSubUpdators)
-ToolSvc += TestExtrapolator
-
-from AthenaCommon.AppMgr import ServiceMgr
 # set up and configure the acts geometry construction
 from ActsGeometry.ActsGeometryConf import ActsTrackingGeometrySvc
-trkGeomSvc = ActsTrackingGeometrySvc()
+trkGeomSvc = ActsTrackingGeometrySvc("ActsTrackingGeometrySvc")
 # used for the proxies during material mapping
 trkGeomSvc.OutputLevel = INFO
 trkGeomSvc.BuildSubDetectors = [
@@ -253,8 +159,10 @@ trkGeomSvc.BuildSubDetectors = [
   "TRT",
   "Calo"
 ]
+from AthenaConfiguration.ComponentFactory import CompFactory
+trkGeomSvc.CaloVolumeBuilder = CompFactory.ActsCaloTrackingVolumeBuilder()
 trkGeomSvc.UseMaterialMap = True
-trkGeomSvc.MaterialMapInputFile = "material-maps.json"
+trkGeomSvc.MaterialMapInputFile = "/eos/project-a/acts/public/MaterialMaps/ATLAS-material-maps.json"
 ServiceMgr += trkGeomSvc
 
 # sets up the extrapolation tool
@@ -277,13 +185,20 @@ if myPDG == 998 or myPDG == 999 :
 # For each event, the GAS for the IOV needs to be set from the algorithm.
 trkGeomTool = CfgMgr.ActsTrackingGeometryTool("ActsTrackingGeometryTool")
 trkGeomTool.OutputLevel = INFO
+ToolSvc += trkGeomTool
+
 ActsExtrapolator.TrackingGeometryTool = trkGeomTool
 ToolSvc += ActsExtrapolator
 
-from ActsGeometry.ActsGeometryConf import ActsGeantFollowerHelper
+
+from TrkExEngine.AtlasExtrapolationEngine import AtlasExtrapolationEngine
+ExtrapolationEngine = AtlasExtrapolationEngine(name='Extrapolation', nameprefix='Atlas')
+ToolSvc += ExtrapolationEngine
+
+from ActsGeantFollowing.ActsGeantFollowingConf import ActsGeantFollowerHelper
 ActsGeantFollowerHelper = ActsGeantFollowerHelper(name="ActsGeantFollowerHelper")
-ActsGeantFollowerHelper.Extrapolator             = TestExtrapolator
 ActsGeantFollowerHelper.ActsExtrapolator         = ActsExtrapolator
+ActsGeantFollowerHelper.ExtrapolationEngine      = ExtrapolationEngine
 ActsGeantFollowerHelper.ExtrapolateDirectly      = False
 ActsGeantFollowerHelper.ExtrapolateIncrementally = False
 ActsGeantFollowerHelper.OutputLevel = INFO
@@ -294,9 +209,10 @@ simFlags.OptionalUserActionList.addAction('ActsGeantFollowerTool')
 ############### The output collection #######################
 
 from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
-
-from GaudiSvc.GaudiSvcConf import THistSvc
-ServiceMgr += THistSvc()
+from AthenaCommon.AppMgr import ServiceMgr
+if not hasattr(ServiceMgr, 'THistSvc'):
+    from GaudiSvc.GaudiSvcConf import THistSvc
+    ServiceMgr += THistSvc()
 ServiceMgr.THistSvc.Output += [ "val DATAFILE='GeantFollowing.root' TYPE='ROOT' OPT='RECREATE'" ]
 
 ##############################################################
@@ -311,15 +227,16 @@ topSeq += getAlgorithm("BeamEffectsAlg", tryDefaultConfigurable=True)
 topSeq += getAlgorithm("G4AtlasAlg",tryDefaultConfigurable=True)
 
 # Conditions sequence for Athena MT
+from AthenaCommon.AlgSequence import AthSequencer
 if not hasattr(condSeq, "BeamSpotCondAlg"):
    from BeamSpotConditions.BeamSpotConditionsConf import BeamSpotCondAlg
    condSeq += BeamSpotCondAlg( "BeamSpotCondAlg" )
 
-TestSTEP_Propagator.Straggling = False
+# TestSTEP_Propagator.Straggling = False
 
-if myPDG == 998 or myPDG == 999 :
-    TestSTEP_Propagator.MultipleScattering = False
-    TestSTEP_Propagator.EnergyLoss = False
+# if myPDG == 998 or myPDG == 999 :
+#     TestSTEP_Propagator.MultipleScattering = False
+#     TestSTEP_Propagator.EnergyLoss = False
 
 from AthenaCommon.ConfigurationShelve import saveToAscii
 saveToAscii("config.txt")
diff --git a/Tracking/Acts/ActsGeantFollowing/share/ActsGeantFollowing_jobOptions_ITk.py b/Tracking/Acts/ActsGeantFollowing/share/ActsGeantFollowing_jobOptions_ITk.py
new file mode 100644
index 0000000000000000000000000000000000000000..8fabcb68b512fe24ceeb2ccea441e4a57dfa524a
--- /dev/null
+++ b/Tracking/Acts/ActsGeantFollowing/share/ActsGeantFollowing_jobOptions_ITk.py
@@ -0,0 +1,226 @@
+#==============================================================
+#
+#
+#		This job option runs the G4 simulation
+#		of the ATLAS detector and the GeantFollower in ID (and MS)
+#		It can be run using athena.py
+#
+#==============================================================
+
+
+from __future__ import print_function
+
+import sys
+from argparse import ArgumentParser
+
+from AthenaCommon.Configurable import Configurable
+from AthenaCommon.Constants import INFO, VERBOSE
+from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.ComponentFactory import CompFactory
+
+from ActsGeometry.ActsGeometryConfig import ActsAlignmentCondAlgCfg
+from ActsGeometry.ActsGeometryConfig import ActsExtrapolationToolCfg
+
+# Set up logging and new style config
+Configurable.configurableRun3Behavior = True
+
+def defaultTestFlags(configFlags, args):
+
+
+    ## Just enable ID for the moment.
+    ConfigFlags.Input.isMC             = True
+    ConfigFlags.GeoModel.useLocalGeometry = False
+    detectors = [
+      "ITkPixel",
+      "ITkStrip",
+      "Bpipe"
+    ]
+ 
+    from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
+    setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
+
+
+    ConfigFlags.GeoModel.AtlasVersion = "ATLAS-P2-ITK-24-00-00"
+    ConfigFlags.IOVDb.GlobalTag = "OFLCOND-SIM-00-00-00"
+    ConfigFlags.GeoModel.Align.Dynamic = False
+    #ConfigFlags.TrackingGeometry.MaterialSource = "Input"
+    # ConfigFlags.TrackingGeometry.MaterialSource = "material-maps.json"
+    ConfigFlags.Beam.Type =''
+
+    ConfigFlags.Detector.GeometryCalo = False
+    ConfigFlags.Detector.GeometryMuon = False
+
+    # # This should run serially for the moment.
+    # ConfigFlags.Concurrency.NumThreads = 1
+    ConfigFlags.Concurrency.NumConcurrentEvents = 1
+
+    configFlags.Input.Files = [args.inputevntfile]
+    
+    configFlags.Output.HITSFileName = args.outputhitsfile
+
+    configFlags.Sim.CalibrationRun = "Off"
+    configFlags.Sim.RecordStepInfo = False
+    configFlags.Sim.CavernBG = "Signal"
+    configFlags.Sim.ISFRun = False
+    configFlags.Sim.BeamPipeSimMode = 'FastSim'
+    configFlags.Sim.ReleaseGeoModel = False
+
+
+    configFlags.Input.RunNumber = [284500]
+    configFlags.Input.OverrideRunNumber = True
+    configFlags.Input.LumiBlockNumber = [1]
+
+def printAndRun(accessor, configFlags, args):
+    """debugging and execution"""
+    # Dump config
+    if args.verboseAccumulators:
+        accessor.printConfig(withDetails=True)
+    if args.verboseStoreGate:
+        accessor.getService("StoreGateSvc").Dump = True
+    configFlags.dump()
+
+    # Execute and finish
+    sc = accessor.run(maxEvents=args.maxEvents)
+
+    # Dump config summary
+    accessor.printConfig(withDetails=False)
+
+    # Success should be 0
+    return not sc.isSuccess()
+
+
+def ITkCfg(configFlags):
+    acc = MainServicesCfg(configFlags)
+    from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+    from AthenaPoolCnvSvc.PoolWriteConfig import PoolWriteCfg
+    acc.merge(PoolReadCfg(configFlags))
+    acc.merge(PoolWriteCfg(configFlags))
+
+    # add BeamEffectsAlg
+    from BeamEffects.BeamEffectsAlgConfig import BeamEffectsAlgCfg
+    acc.merge(BeamEffectsAlgCfg(configFlags))
+
+    from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
+    itkPixel = ITkPixelReadoutGeometryCfg(ConfigFlags)
+    acc.merge(itkPixel)
+
+    from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
+    itkStrip = ITkStripReadoutGeometryCfg(ConfigFlags)
+    acc.merge(itkStrip)
+
+    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
+    acc.merge(BeamPipeGeometryCfg(ConfigFlags))
+
+    from AtlasGeoModel.GeoModelConfig import GeoModelCfg
+    gmsAcc = GeoModelCfg(configFlags)
+    acc.merge(gmsAcc)
+
+    return acc
+
+def ActsGeantFollowerCfg(configFlags, name="ActsGeantFollowerTool", **kwargs):
+    
+    result = ComponentAccumulator()
+    
+    import InDetRecExample.TrackingCommon as TrackingCommon
+
+    from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
+    result.merge(TrackingGeometrySvcCfg(configFlags))
+
+    from ActsGeometry.ActsGeometryConfig import NominalAlignmentCondAlgCfg
+    nomAli = NominalAlignmentCondAlgCfg(configFlags, OutputLevel=INFO)
+    result.merge(nomAli)
+
+    from ActsGeometry.ActsGeometryConfig import ActsTrackingGeometrySvcCfg, ActsPropStepRootWriterSvcCfg, ActsExtrapolationAlgCfg
+    tgSvc = ActsTrackingGeometrySvcCfg(configFlags, OutputLevel=INFO)
+    result.merge(tgSvc)
+
+    print('DEF WRITER : ')
+    Actsextrapol = ActsExtrapolationToolCfg(ConfigFlags,
+                                        InteractionMultiScatering = True,
+                                        InteractionEloss = True,
+                                        InteractionRecord=True,
+                                        OutputLevel=INFO)                                 
+    result.merge(Actsextrapol)
+
+    from TrkConfig.AtlasExtrapolationEngineConfig import AtlasExtrapolationEngineCfg
+    extrapAcc = AtlasExtrapolationEngineCfg(configFlags)
+    AtlasExtrapolationEngine = extrapAcc.getPrimary()
+    result.merge(extrapAcc)
+
+
+    #Setup Helper
+    followingHelper = CompFactory.ActsGeantFollowerHelper("ActsGeantFollowerHelper",
+                                                          **kwargs,
+                                                          ExtrapolationEngine=AtlasExtrapolationEngine,
+                                                          ActsExtrapolator=Actsextrapol.getPrimary(),
+                                                          ExtrapolateDirectly=False,
+                                                          ExtrapolateIncrementally=True,
+                                                          OutputLevel=INFO)
+    result.addPublicTool(followingHelper)
+
+    #Setting up the CA for the ActsGeantFollower
+    from ActsGeantFollowing.ActsGeantFollowingConfig import ActsGeantFollowerToolCfg
+    actionAcc = ComponentAccumulator()
+    actions = []
+    actions += [actionAcc.popToolsAndMerge(ActsGeantFollowerToolCfg(configFlags))]
+    actionAcc.setPrivateTools(actions)
+    ActsGeantFollowerAction = result.popToolsAndMerge(actionAcc)
+    
+    #Retrieving the default action list
+    from G4AtlasServices.G4AtlasUserActionConfigNew import getDefaultActions
+    defaultActions = result.popToolsAndMerge(getDefaultActions(configFlags))
+
+    #Adding LengthIntegrator to defaults
+    actionList = (defaultActions + ActsGeantFollowerAction)
+
+    #Setting up UserActionsService
+    kwargs.setdefault("UserActionTools",actionList)
+    result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs))
+
+    return result
+
+
+# Argument parsing
+parser = ArgumentParser("ActsGeantFollowing_jobOption_ITk.py")
+parser.add_argument("--simulate", default=True, action="store_true",
+                    help="Run Simulation")
+parser.add_argument("-V", "--verboseAccumulators", default=False, 
+                    action="store_true",
+                    help="Print full details of the AlgSequence")
+parser.add_argument("-S", "--verboseStoreGate", default=False, 
+                    action="store_true",
+                    help="Dump the StoreGate(s) each event iteration")
+parser.add_argument("--maxEvents",default=-1, type=int,
+                    help="The number of events to run. 0 skips execution")
+parser.add_argument("--inputevntfile",
+                    # default="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/e_E50_eta0-25.evgen.pool.root",
+                    default="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/InDetSLHC_Example/inputs/pgun_2M_10GeV_geantinos_Eta6_v2_EVNT.root",
+                    # default="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/InDetSLHC_Example/inputs/EVNT.09244569._000001.pool.root.1",
+                    help="The input EVNT file to use")
+parser.add_argument("--outputhitsfile",default="myHITS.pool.root", type=str,
+                    help="The output HITS filename")
+args = parser.parse_args()
+
+# Configure
+defaultTestFlags(ConfigFlags, args)
+ConfigFlags.lock()
+
+# Construct our accumulator to run
+acc = ITkCfg(ConfigFlags)
+kwargs = {}
+
+svcName = "ActsGeantFollowerTool"
+acc.merge(ActsGeantFollowerCfg(ConfigFlags,svcName,**kwargs))
+kwargs.update(UserActionSvc=svcName)
+
+from G4AtlasAlg.G4AtlasAlgConfigNew import G4AtlasAlgCfg
+acc.merge(G4AtlasAlgCfg(ConfigFlags, "ITkG4AtlasAlg", **kwargs))
+
+# dump pickle
+with open("ITkTest.pkl", "wb") as f:
+    acc.store(f)
+
+# Print and run
+sys.exit(printAndRun(acc, ConfigFlags, args))
diff --git a/Tracking/Acts/ActsGeometry/src/ActsGeantFollower.cxx b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollower.cxx
similarity index 75%
rename from Tracking/Acts/ActsGeometry/src/ActsGeantFollower.cxx
rename to Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollower.cxx
index 64fc63fad6cb998b52b7e9db33988e12b11f93a8..78ec0a5039aae02e82a48f2bc9ff30863c30d0bb 100755
--- a/Tracking/Acts/ActsGeometry/src/ActsGeantFollower.cxx
+++ b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollower.cxx
@@ -6,8 +6,8 @@
 // GeantFollower.cxx, (c) ATLAS Detector software
 ///////////////////////////////////////////////////////////////////
 
-#include "ActsGeometry/ActsGeantFollower.h"
-#include "ActsGeometry/IActsGeantFollowerHelper.h"
+#include "ActsGeantFollower.h"
+#include "IActsGeantFollowerHelper.h"
 #include "CxxUtils/AthUnlikelyMacros.h"
 
 #include "G4Event.hh"
@@ -18,6 +18,7 @@
 #include "G4LogicalVolume.hh"
 #include "G4DynamicParticle.hh"
 #include "G4Track.hh"
+#include "G4VSensitiveDetector.hh"
 
 ActsGeantFollower::ActsGeantFollower(){}
 
@@ -48,6 +49,15 @@ void ActsGeantFollower::UserSteppingAction(const G4Step* aStep)
   // kill secondaries and low momentum particles
   if (aStep->GetTrack()->GetParentID() || aStep->GetPreStepPoint()->GetMomentum().mag()<500 )
     {
+      std::cout << "low pt" << std::endl;
+      aStep->GetTrack()->SetTrackStatus(fStopAndKill);
+      return;
+    }
+
+  // kill Particles outiside the tracking volume 
+  if (aStep->GetPreStepPoint()->GetPosition().z()>3000 || sqrt(aStep->GetPreStepPoint()->GetPosition().x()*aStep->GetPreStepPoint()->GetPosition().x()+aStep->GetPreStepPoint()->GetPosition().y()*aStep->GetPreStepPoint()->GetPosition().y())>1050 )
+    {
+      std::cout << "out" << std::endl;
       aStep->GetTrack()->SetTrackStatus(fStopAndKill);
       return;
     }
@@ -73,8 +83,11 @@ void ActsGeantFollower::UserSteppingAction(const G4Step* aStep)
           double steplength     = aStep->GetStepLength();
           // the position information
           double X0             = mat->GetRadlen();
-          // update the track follower
-          m_helper->trackParticle(g4Position,g4Momentum,g4DynParticle->GetPDGcode(),g4DynParticle->GetCharge(),steplength,X0);
+          // update the track follower when a sensor is encountered
+          // bool isSensitive = (lv->GetSensitiveDetector() != nullptr);
+          bool isSensitive = true;
+          m_helper->trackParticle(g4Position, g4Momentum, g4DynParticle->GetPDGcode(), g4DynParticle->GetCharge(), steplength, X0, isSensitive);
+          
         }
       else
          {
diff --git a/Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollower.h b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollower.h
similarity index 95%
rename from Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollower.h
rename to Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollower.h
index e8abe75cb1a40f4a57f1dd1e524185754e302382..ffe549cd6656fd8ce9bc1d1bd51fe843d96fa70e 100755
--- a/Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollower.h
+++ b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollower.h
@@ -9,7 +9,7 @@
 
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
-#include "ActsGeometry/IActsGeantFollowerHelper.h"
+#include "IActsGeantFollowerHelper.h"
 #include <string>
 #include <vector>
 
diff --git a/Tracking/Acts/ActsGeometry/src/ActsGeantFollowerHelper.cxx b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerHelper.cxx
similarity index 77%
rename from Tracking/Acts/ActsGeometry/src/ActsGeantFollowerHelper.cxx
rename to Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerHelper.cxx
index e8efa2b0c89cb75a4897ce7acbaa259211d43a57..a58b8d02ec27bdf084d295fcc1e2e632870bf7f6 100755
--- a/Tracking/Acts/ActsGeometry/src/ActsGeantFollowerHelper.cxx
+++ b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerHelper.cxx
@@ -7,7 +7,7 @@
 ///////////////////////////////////////////////////////////////////
 
 // StoreGate
-#include "ActsGeometry/ActsGeantFollowerHelper.h"
+#include "ActsGeantFollowerHelper.h"
 #include "TTree.h"
 #include "GaudiKernel/ITHistSvc.h"
 #include "GaudiKernel/EventContext.h"
@@ -22,6 +22,7 @@
 #include "GeoPrimitives/GeoPrimitives.h"
 //other
 #include "ActsGeometryInterfaces/IActsExtrapolationTool.h"
+#include "TrkExInterfaces/IExtrapolationEngine.h"
 #include "Acts/Surfaces/PerigeeSurface.hpp"
 #include "Acts/Surfaces/PlaneSurface.hpp"
 
@@ -33,21 +34,24 @@
 // constructor
 ActsGeantFollowerHelper::ActsGeantFollowerHelper(const std::string& t, const std::string& n, const IInterface* p) :
   base_class(t,n,p),
-  m_extrapolator(""),
+  m_extrapolationEngine(""),
   m_actsExtrapolator(""),
   m_extrapolateDirectly(true),
   m_extrapolateIncrementally(true),
   m_parameterCache(nullptr),
   m_actsParameterCache(nullptr),
   m_tX0Cache(0.),
+  m_tX0NonSensitiveCache(0.),
+  m_tNonSensitiveCache(0.),
   m_tX0CacheActs(0.),
+  m_tX0CacheATLAS(0.),
   m_validationTreeName("G4Follower_"+n),
   m_validationTreeDescription("Output of the G4Follower_"),
   m_validationTreeFolder("/val/G4Follower_"+n),
   m_validationTree(nullptr)
 {
   // properties
-  declareProperty("Extrapolator",                   m_extrapolator);
+  declareProperty("ExtrapolationEngine",            m_extrapolationEngine);
   declareProperty("ActsExtrapolator",               m_actsExtrapolator);
   declareProperty("ExtrapolateDirectly",            m_extrapolateDirectly);
   declareProperty("ExtrapolateIncrementally",       m_extrapolateIncrementally);
@@ -63,11 +67,14 @@ StatusCode ActsGeantFollowerHelper::initialize()
 {
   m_treeData = std::make_unique<TreeData>();
   
-  if (m_extrapolator.retrieve().isFailure()){
-    ATH_MSG_ERROR("Could not retrieve Extrapolator " << m_extrapolator << " . Abort.");
+  // if (m_extrapolator.retrieve().isFailure()){
+  //   ATH_MSG_ERROR("Could not retrieve Extrapolator " << m_extrapolator << " . Abort.");
+  //   return StatusCode::FAILURE;
+  // }
+  if (m_extrapolationEngine.retrieve().isFailure()){
+    ATH_MSG_ERROR("Could not retrieve Extrapolator Engine " << m_extrapolationEngine << " . Abort.");
     return StatusCode::FAILURE;
   }
-
   
   if (m_actsExtrapolator.retrieve().isFailure()){
     ATH_MSG_ERROR("Could not retrieve ActsExtrapolator " << m_actsExtrapolator << " . Abort.");
@@ -110,6 +117,10 @@ StatusCode ActsGeantFollowerHelper::initialize()
   m_validationTree->Branch("TrkStepZ",     m_treeData->m_trk_z,      "trkstepZ[g4steps]/F");
   m_validationTree->Branch("TrkStepLocX",  m_treeData->m_trk_lx,     "trkstepLX[g4steps]/F");
   m_validationTree->Branch("TrkStepLocY",  m_treeData->m_trk_ly,     "trkstepLY[g4steps]/F");
+  m_validationTree->Branch("TrkStepTX0",   m_treeData->m_trk_tX0,     "trkstepTX0[g4steps]/F");
+  m_validationTree->Branch("TrkAccumX0",   m_treeData->m_trk_accX0,   "trkstepAccTX0[g4steps]/F");
+  m_validationTree->Branch("TrkStepT",     m_treeData->m_trk_t,       "trkstepTX[g4steps]/F");
+  m_validationTree->Branch("TrkStepX0",    m_treeData->m_trk_X0,      "trkstepX0[g4steps]/F");
 
   m_validationTree->Branch("ActsStepStatus",m_treeData->m_acts_status,  "actsstepStatus[g4steps]/I");
   m_validationTree->Branch("ActsVolumeId",  m_treeData->m_acts_volumeID,"actsvolumeid[g4steps]/I");
@@ -158,21 +169,25 @@ void ActsGeantFollowerHelper::beginEvent() const
   m_treeData->m_t_pdg      = 0;
   m_treeData->m_g4_steps   = 0;
   m_tX0Cache   = 0.;
+  m_tX0NonSensitiveCache = 0.;
+  m_tNonSensitiveCache = 0.;
   m_tX0CacheActs   = 0.;
+  m_tX0CacheATLAS   = 0.;
 }
 
 void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
                                              const G4ThreeVector& mom,
                                              int pdg, double charge,
-                                             float t, float X0) const
+                                             float t, float X0, bool isSensitive) const
 {
+  // const EventContext ctx;
   const EventContext &ctx = Gaudi::Hive::currentContext();
-  const ActsGeometryContext& gctx = m_actsExtrapolator->trackingGeometryTool()->getGeometryContext(ctx);
+  const ActsGeometryContext &gctx = m_actsExtrapolator->trackingGeometryTool()->getGeometryContext(ctx);
   auto trackingGeometry = m_actsExtrapolator->trackingGeometryTool()->trackingGeometry();
   // construct the initial parameters
   Amg::Vector3D npos(pos.x(),pos.y(),pos.z());
   Amg::Vector3D nmom(mom.x(),mom.y(),mom.z());
-  if (!m_treeData->m_g4_steps){
+  if(m_treeData->m_g4_steps == 0 && m_tNonSensitiveCache == 0){
     ATH_MSG_INFO("Initial step ... preparing event cache.");
     m_treeData->m_t_x        = pos.x();
     m_treeData->m_t_y        = pos.y();
@@ -196,6 +211,16 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
     Acts::Vector3 dir = nmom.normalized();
     m_actsParameterCache = std::make_unique<const Acts::BoundTrackParameters>(Acts::BoundTrackParameters::create(surface, gctx.context(), actsStart, dir, mom.mag()/1000, charge).value());
   }
+
+  // Store material in cache
+  float tX0 = X0 > 10e-5 ? t/X0 : 0.;
+  m_tX0NonSensitiveCache += tX0;
+  m_tNonSensitiveCache += t;
+  if (!isSensitive)
+  {
+    return;
+  }
+
   // jumping over inital step
   m_treeData->m_g4_steps = (m_treeData->m_g4_steps == -1) ? 0 : m_treeData->m_g4_steps;
 
@@ -208,7 +233,6 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
     ATH_MSG_WARNING("Maximum number of " << MAXPROBES << " reached, step is ignored.");
     return;
   }
-  
   // Use the G4 pdgId as the particle hypothesis
   Trk::ParticleHypothesis particleHypo = m_pdgToParticleHypothesis.convert(m_treeData->m_t_pdg, m_treeData->m_t_charge);
   // parameters of the G4 step point
@@ -216,9 +240,19 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
   // destination surface
   const Trk::PlaneSurface& destinationSurface = g4Parameters->associatedSurface();
   // extrapolate to the destination surface
-  const Trk::TrackParameters* trkParameters = m_extrapolateDirectly ?
-    m_extrapolator->extrapolateDirectly(*m_parameterCache,destinationSurface,Trk::alongMomentum,false, particleHypo) :
-    m_extrapolator->extrapolate(*m_parameterCache,destinationSurface,Trk::alongMomentum,false, particleHypo);
+  Trk::ExtrapolationCell<Trk::TrackParameters> ecc(*m_parameterCache);
+  ecc.setParticleHypothesis((Trk::ParticleHypothesis) particleHypo);
+  ecc.addConfigurationMode(Trk::ExtrapolationMode::StopAtBoundary);
+  ecc.addConfigurationMode(Trk::ExtrapolationMode::CollectMaterial);
+  // call the extrapolation engine
+  auto eCodeSteps = m_extrapolationEngine->extrapolate(ecc, &destinationSurface);
+  const Trk::TrackParameters *trkParameters = ecc.endParameters;
+  float X0ATLAS = ecc.materialX0;
+
+  if(eCodeSteps.code != 2 ){
+    ATH_MSG_ERROR("Error in the Extrapolator Engine, skip the current step");  
+    return;
+  }
 
   // create a Acts::Surface that correspond to the Trk::Surface
   auto destinationSurfaceActs = Acts::Surface::makeShared<Acts::PlaneSurface>(destinationSurface.center(), destinationSurface.normal());
@@ -228,12 +262,18 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
                                                                                                    Acts::forward,
                                                                                                    std::numeric_limits<double>::max(),
                                                                                                    particleHypo);
-  double X0Acts = m_actsExtrapolator->propagationSteps(ctx,
+
+  float X0Acts = m_actsExtrapolator->propagationSteps(ctx,
                                                        *m_actsParameterCache, 
                                                        *destinationSurfaceActs,
                                                        Acts::forward,
                                                        std::numeric_limits<double>::max(),
                                                        particleHypo).second.materialInX0;
+                                                       
+  if(actsParameters == nullptr){
+    ATH_MSG_ERROR("Error in the Acts extrapolation, skip the current step");  
+    return;
+  }
   int volID = trackingGeometry->lowestTrackingVolume(gctx.context(), actsParameters->position(gctx.context()))->geometryId().volume();
 
   // fill the geant information and the trk information
@@ -244,12 +284,12 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
   m_treeData->m_g4_x[m_treeData->m_g4_steps]       =  pos.x();
   m_treeData->m_g4_y[m_treeData->m_g4_steps]       =  pos.y();
   m_treeData->m_g4_z[m_treeData->m_g4_steps]       =  pos.z();
-  float tX0 = X0 > 10e-5 ? t/X0 : 0.;
-  m_tX0Cache              += tX0;
-  m_treeData->m_g4_tX0[m_treeData->m_g4_steps]     = tX0;
+  
+  m_tX0Cache                                       += m_tX0NonSensitiveCache;
+  m_treeData->m_g4_tX0[m_treeData->m_g4_steps]     = m_tX0NonSensitiveCache;
   m_treeData->m_g4_accX0[m_treeData->m_g4_steps]   = m_tX0Cache;
-  m_treeData->m_g4_t[m_treeData->m_g4_steps]       = t;
-  m_treeData->m_g4_X0[m_treeData->m_g4_steps]      = X0;
+  m_treeData->m_g4_t[m_treeData->m_g4_steps]       = m_tNonSensitiveCache;
+  m_treeData->m_g4_X0[m_treeData->m_g4_steps]      = m_tNonSensitiveCache/m_tX0NonSensitiveCache;
 
   m_treeData->m_trk_status[m_treeData->m_g4_steps] = trkParameters ? 1 : 0;
   m_treeData->m_trk_pt[m_treeData->m_g4_steps]      = trkParameters ? trkParameters->pT()      : 0.;
@@ -261,6 +301,26 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
   m_treeData->m_trk_z[m_treeData->m_g4_steps]      = trkParameters ? trkParameters->position().z()        : 0.;
   m_treeData->m_trk_lx[m_treeData->m_g4_steps]     = trkParameters ? trkParameters->parameters()[Trk::locX] : 0.;
   m_treeData->m_trk_ly[m_treeData->m_g4_steps]     = trkParameters ? trkParameters->parameters()[Trk::locY] : 0.;
+  // Incremental extrapolation, the extrapolation correspond to one step
+  if(m_extrapolateIncrementally || m_treeData->m_g4_steps == 0){
+    float tATLAS = (trkParameters->position() - m_parameterCache->position()).norm();
+    m_tX0CacheATLAS                                  += X0ATLAS;
+    m_treeData->m_trk_tX0[m_treeData->m_g4_steps]     = X0ATLAS;
+    m_treeData->m_trk_accX0[m_treeData->m_g4_steps]   = m_tX0CacheATLAS;
+    m_treeData->m_trk_t[m_treeData->m_g4_steps]       = tATLAS;
+    m_treeData->m_trk_X0[m_treeData->m_g4_steps]      = tATLAS/X0ATLAS;
+  }
+  // Extrapolation perform from the start, step varaible need to be computed by comparing to the last extrapolation.
+  else{
+    Amg::Vector3D previousPos(m_treeData->m_trk_x[m_treeData->m_g4_steps-1],
+                              m_treeData->m_trk_y[m_treeData->m_g4_steps-1],
+                              m_treeData->m_trk_z[m_treeData->m_g4_steps-1]);
+    float tATLAS = (trkParameters->position() - previousPos).norm();
+    m_treeData->m_trk_tX0[m_treeData->m_g4_steps]     = X0ATLAS - m_treeData->m_trk_accX0[m_treeData->m_g4_steps-1]   ;
+    m_treeData->m_trk_accX0[m_treeData->m_g4_steps]   = X0ATLAS;
+    m_treeData->m_trk_t[m_treeData->m_g4_steps]       = tATLAS;
+    m_treeData->m_trk_X0[m_treeData->m_g4_steps]      = tATLAS/m_treeData->m_trk_tX0[m_treeData->m_g4_steps];
+  }
 
   m_treeData->m_acts_status[m_treeData->m_g4_steps] = actsParameters ? 1 : 0;
   m_treeData->m_acts_volumeID[m_treeData->m_g4_steps] = actsParameters ? volID : 0;
@@ -274,7 +334,7 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
   // Incremental extrapolation, the extrapolation correspond to one step
   if(m_extrapolateIncrementally || m_treeData->m_g4_steps == 0){
     float tActs = (actsParameters->position(gctx.context()) - m_actsParameterCache->position(gctx.context())).norm();
-    m_tX0CacheActs              += X0Acts;
+    m_tX0CacheActs                                    += X0Acts;
     m_treeData->m_acts_tX0[m_treeData->m_g4_steps]     = X0Acts;
     m_treeData->m_acts_accX0[m_treeData->m_g4_steps]   = m_tX0CacheActs;
     m_treeData->m_acts_t[m_treeData->m_g4_steps]       = tActs;
@@ -282,9 +342,9 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
   }
   // Extrapolation perform from the start, step varaible need to be computed by comparing to the last extrapolation.
   else{
-    Acts::Vector3 previousPos(m_treeData->m_trk_x[m_treeData->m_g4_steps-1],
-                               m_treeData->m_trk_y[m_treeData->m_g4_steps-1],
-                               m_treeData->m_trk_z[m_treeData->m_g4_steps-1]);
+    Acts::Vector3 previousPos(m_treeData->m_acts_x[m_treeData->m_g4_steps-1],
+                               m_treeData->m_acts_y[m_treeData->m_g4_steps-1],
+                               m_treeData->m_acts_z[m_treeData->m_g4_steps-1]);
     float tActs = (actsParameters->position(gctx.context()) - previousPos).norm();
     m_treeData->m_acts_tX0[m_treeData->m_g4_steps]     = X0Acts - m_treeData->m_acts_accX0[m_treeData->m_g4_steps-1]   ;
     m_treeData->m_acts_accX0[m_treeData->m_g4_steps]   = X0Acts;
@@ -302,13 +362,18 @@ void ActsGeantFollowerHelper::trackParticle(const G4ThreeVector& pos,
   // delete cache and increment
   delete g4Parameters;
   destinationSurfaceActs.reset();
+  m_tX0NonSensitiveCache = 0.;
+  m_tNonSensitiveCache = 0.;
   ++m_treeData->m_g4_steps;
 }
 
 void ActsGeantFollowerHelper::endEvent() const
 {
-  // fill the validation tree
-  m_validationTree->Fill();
-  delete m_parameterCache;
-  m_actsParameterCache.reset();
+  if (m_tX0Cache != 0)
+  {
+    // fill the validation tree
+    m_validationTree->Fill();
+    delete m_parameterCache;
+    m_actsParameterCache.reset();
+  }
 }
diff --git a/Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollowerHelper.h b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerHelper.h
similarity index 89%
rename from Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollowerHelper.h
rename to Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerHelper.h
index 756d9333ddbed202598e57f2a328739c383dc6d5..84f4dcf9ad5c1def771cfd48514074ef5e513b65 100755
--- a/Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollowerHelper.h
+++ b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerHelper.h
@@ -8,7 +8,7 @@
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ToolHandle.h"
 #include "TrkParameters/TrackParameters.h" //typedef, can't fwd declare
-#include "ActsGeometry/IActsGeantFollowerHelper.h"
+#include "IActsGeantFollowerHelper.h"
 #include "G4ThreeVector.hh" //typedef, can't fwd declare
 #include "TrkEventPrimitives/ParticleHypothesis.h"
 #include "TrkEventPrimitives/PdgToParticleHypothesis.h"
@@ -27,7 +27,8 @@ class TTree;
 namespace Trk
 {
   class IExtrapolator;
-}
+  class IExtrapolationEngine;
+} // namespace Trk
 
 class IActsExtrapolationTool;
 
@@ -47,13 +48,14 @@ class ActsGeantFollowerHelper : public extends<AthAlgTool, IActsGeantFollowerHel
     // a) begin event - initialize follower process
     void beginEvent() const;
     // b) track the particle
-    void trackParticle(const G4ThreeVector& pos, const G4ThreeVector& mom, int pdg, double charge, float t, float X0) const;
+    void trackParticle(const G4ThreeVector& pos, const G4ThreeVector& mom, int pdg, double charge, float t, float X0, bool isSensitive) const;
     // c) end event - ntuple writing
     void endEvent() const;
 
   private:
 
-    ToolHandle<Trk::IExtrapolator>       m_extrapolator;
+    // ToolHandle<Trk::IExtrapolator>       m_extrapolator;
+    ToolHandle<Trk::IExtrapolationEngine>     m_extrapolationEngine;
     ToolHandle<IActsExtrapolationTool>   m_actsExtrapolator;
     bool                                 m_extrapolateDirectly;
     bool                                 m_extrapolateIncrementally;
@@ -65,7 +67,10 @@ class ActsGeantFollowerHelper : public extends<AthAlgTool, IActsGeantFollowerHel
     // Hypothesis to pdg converter
     Trk::PdgToParticleHypothesis m_pdgToParticleHypothesis;
     mutable float m_tX0Cache;
+    mutable float m_tX0NonSensitiveCache;
+    mutable float m_tNonSensitiveCache;
     mutable float m_tX0CacheActs;
+    mutable float m_tX0CacheATLAS;
 
     // put some validation code is
     std::string                    m_validationTreeName;        //!< validation tree name - to be acessed by this from root
@@ -111,6 +116,10 @@ class ActsGeantFollowerHelper : public extends<AthAlgTool, IActsGeantFollowerHel
         mutable float                  m_trk_z[MAXPROBES] {0};
         mutable float                  m_trk_lx[MAXPROBES] {0};
         mutable float                  m_trk_ly[MAXPROBES] {0};
+        mutable float                  m_trk_tX0[MAXPROBES] {0};
+        mutable float                  m_trk_accX0[MAXPROBES] {0};        
+        mutable float                  m_trk_t[MAXPROBES] {0};
+        mutable float                  m_trk_X0[MAXPROBES] {0};
         /** Ntuple variables : acts follow up parameters */
         mutable int                    m_acts_status[MAXPROBES] {0};
         mutable int                    m_acts_volumeID[MAXPROBES] {0};
diff --git a/Tracking/Acts/ActsGeometry/src/ActsGeantFollowerTool.cxx b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerTool.cxx
similarity index 94%
rename from Tracking/Acts/ActsGeometry/src/ActsGeantFollowerTool.cxx
rename to Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerTool.cxx
index e150edefd14efac1a2a6d4cf621aead94fbbeb61..3336c561250eb856d2f8dc2b832e0d1f480d89f7 100755
--- a/Tracking/Acts/ActsGeometry/src/ActsGeantFollowerTool.cxx
+++ b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerTool.cxx
@@ -2,7 +2,7 @@
   Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "ActsGeometry/ActsGeantFollowerTool.h"
+#include "ActsGeantFollowerTool.h"
 
 ActsGeantFollowerTool::ActsGeantFollowerTool(const std::string& type,
                                              const std::string& name,
diff --git a/Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollowerTool.h b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerTool.h
similarity index 94%
rename from Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollowerTool.h
rename to Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerTool.h
index d0a85862809180a387c7555362434e6256da5695..962f7ab010056132bffb15756f6fc424690fc212 100755
--- a/Tracking/Acts/ActsGeometry/ActsGeometry/ActsGeantFollowerTool.h
+++ b/Tracking/Acts/ActsGeantFollowing/src/ActsGeantFollowerTool.h
@@ -9,7 +9,7 @@
 #include "G4AtlasTools/UserActionToolBase.h"
 
 // Local includes
-#include "ActsGeometry/ActsGeantFollower.h"
+#include "ActsGeantFollower.h"
 
 
 /// @class ActsGeantFollowerTool
diff --git a/Tracking/Acts/ActsGeometry/ActsGeometry/IActsGeantFollowerHelper.h b/Tracking/Acts/ActsGeantFollowing/src/IActsGeantFollowerHelper.h
similarity index 91%
rename from Tracking/Acts/ActsGeometry/ActsGeometry/IActsGeantFollowerHelper.h
rename to Tracking/Acts/ActsGeantFollowing/src/IActsGeantFollowerHelper.h
index 6e5636b48df477ab870f3929397d67481b1f609c..c6190d05f28b054668186e141b76aaa72ee3051c 100644
--- a/Tracking/Acts/ActsGeometry/ActsGeometry/IActsGeantFollowerHelper.h
+++ b/Tracking/Acts/ActsGeantFollowing/src/IActsGeantFollowerHelper.h
@@ -26,7 +26,7 @@ class IActsGeantFollowerHelper : virtual public IAlgTool {
     // a) begin event - initialize follower process
     virtual void beginEvent() const = 0;
     // b) track the particle
-    virtual void trackParticle(const G4ThreeVector& pos, const G4ThreeVector& mom, int pdg, double charge, float t, float X0) const = 0;
+    virtual void trackParticle(const G4ThreeVector& pos, const G4ThreeVector& mom, int pdg, double charge, float t, float X0, bool isSensitive) const = 0;
     // c) end event - ntuple writing
     virtual void endEvent() const = 0;
 
diff --git a/Tracking/Acts/ActsGeantFollowing/src/components/ActsFollowing_entries.cxx b/Tracking/Acts/ActsGeantFollowing/src/components/ActsFollowing_entries.cxx
new file mode 100755
index 0000000000000000000000000000000000000000..d53176e3b0514fb37b5729b31556e1e9274b788d
--- /dev/null
+++ b/Tracking/Acts/ActsGeantFollowing/src/components/ActsFollowing_entries.cxx
@@ -0,0 +1,9 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "../ActsGeantFollowerHelper.h"
+#include "../ActsGeantFollowerTool.h"
+
+DECLARE_COMPONENT( ActsGeantFollowerHelper )
+DECLARE_COMPONENT( ActsGeantFollowerTool )
\ No newline at end of file
diff --git a/Tracking/Acts/ActsGeometry/ActsGeometry/ActsATLASConverterTool.h b/Tracking/Acts/ActsGeometry/ActsGeometry/ActsATLASConverterTool.h
index b593f70dc133f3c4335fbc8a879f5c84e8633019..842c6dc35881e6751b7c2ecf0921f925baf5c106 100644
--- a/Tracking/Acts/ActsGeometry/ActsGeometry/ActsATLASConverterTool.h
+++ b/Tracking/Acts/ActsGeometry/ActsGeometry/ActsATLASConverterTool.h
@@ -11,6 +11,7 @@
 #include "GaudiKernel/ServiceHandle.h"
 #include "Gaudi/Property.h"
 #include "GaudiKernel/EventContext.h"
+#include "TrkParameters/TrackParameters.h"
 
 // PACKAGE
 #include "ActsGeometryInterfaces/IActsATLASConverterTool.h"
diff --git a/Tracking/Acts/ActsGeometry/CMakeLists.txt b/Tracking/Acts/ActsGeometry/CMakeLists.txt
index d0963d06a818bb574239a165da6b5a77defde39f..d28316142f91ca18472a8943bd10e07e0b57c0c0 100755
--- a/Tracking/Acts/ActsGeometry/CMakeLists.txt
+++ b/Tracking/Acts/ActsGeometry/CMakeLists.txt
@@ -7,7 +7,6 @@ atlas_subdir( ActsGeometry )
 find_package( Acts COMPONENTS Core PluginJson )
 find_package( Boost )
 find_package( CLHEP )
-find_package( Geant4 )
 find_package( GeoModel COMPONENTS GeoModelKernel )
 find_package( ROOT COMPONENTS Core Tree RIO )
 find_package( TBB )
@@ -21,8 +20,8 @@ atlas_add_library( ActsGeometryLib
                    src/ActsTrackingGeometrySvc.cxx
                    src/util/*.cxx
                    PUBLIC_HEADERS ActsGeometry
-                   INCLUDE_DIRS ${GEANT4_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${TBB_INCLUDE_DIRS}
-                   LINK_LIBRARIES ${GEANT4_LIBRARIES} ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${TBB_LIBRARIES}
+                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS} ${TBB_INCLUDE_DIRS}
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${ROOT_LIBRARIES} ${TBB_LIBRARIES}
                    ActsCore
                    ActsGeometryInterfacesLib
                    ActsInteropLib
@@ -68,9 +67,6 @@ atlas_add_component( ActsGeometry
                      src/ActsTrackingGeometryTool.cxx
                      src/ActsPropStepRootWriterSvc.cxx
                      src/ActsCaloTrackingVolumeBuilder.cxx
-                     src/ActsGeantFollower.cxx
-                     src/ActsGeantFollowerHelper.cxx
-                     src/ActsGeantFollowerTool.cxx
                      src/ActsATLASConverterTool.cxx
                      src/components/*.cxx
                      INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} ${GEOMODEL_INCLUDE_DIRS} ${ROOT_INCLUDE_DIRS}
diff --git a/Tracking/Acts/ActsGeometry/src/components/ActsGeometry_entries.cxx b/Tracking/Acts/ActsGeometry/src/components/ActsGeometry_entries.cxx
index e48cac1707854d115e2e313f6fb63c68c3e20965..c96e5c7c1fe36154a82eb1bf991eac38331c5064 100755
--- a/Tracking/Acts/ActsGeometry/src/components/ActsGeometry_entries.cxx
+++ b/Tracking/Acts/ActsGeometry/src/components/ActsGeometry_entries.cxx
@@ -1,9 +1,7 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
-#include "ActsGeometry/ActsGeantFollowerHelper.h"
-#include "ActsGeometry/ActsGeantFollowerTool.h"
 #include "ActsGeometry/ActsATLASConverterTool.h"
 
 #include "ActsGeometry/ActsExtrapolationAlg.h"
@@ -52,7 +50,4 @@ DECLARE_COMPONENT( ActsPropStepRootWriterSvc )
 DECLARE_COMPONENT( ActsAlignmentCondAlg )
 DECLARE_COMPONENT( ActsCaloTrackingVolumeBuilder )
 
-DECLARE_COMPONENT( ActsGeantFollowerTool )
-DECLARE_COMPONENT( ActsGeantFollowerHelper )
-
 DECLARE_COMPONENT( ActsATLASConverterTool )
\ No newline at end of file
diff --git a/Tracking/Acts/ActsTrkFitting/share/postInclude_ActsRefitting.py b/Tracking/Acts/ActsTrkFitting/share/postInclude_ActsRefitting.py
index dccbfccf8c94ad7acf9579ce553d08a15b2f4894..b9e3c59667616300ca1adc0bafc4acbad88ef5a2 100644
--- a/Tracking/Acts/ActsTrkFitting/share/postInclude_ActsRefitting.py
+++ b/Tracking/Acts/ActsTrkFitting/share/postInclude_ActsRefitting.py
@@ -17,10 +17,13 @@ class ConfiguredActsRefittingTrackingGeometry( ActsTrackingGeometryTool ) :
     subDetectors += ["SCT"]
     subDetectors += ["TRT"]
     subDetectors += ["Calo"]
-     
+
     from ActsGeometry.ActsGeometryConf import ActsTrackingGeometrySvc
     ActsTrackingGeometrySvc = ActsTrackingGeometrySvc(name = "ActsTrackingGeometrySvc",
                                                       BuildSubDetectors=subDetectors)
+    
+    from AthenaConfiguration.ComponentFactory import CompFactory
+    ActsTrackingGeometrySvc.CaloVolumeBuilder = CompFactory.ActsCaloTrackingVolumeBuilder()                                                  
     ActsTrackingGeometrySvc.UseMaterialMap = True
     ActsTrackingGeometrySvc.MaterialMapInputFile = "/eos/project-a/acts/public/MaterialMaps/ATLAS-material-maps.json"
     from AthenaCommon.AppMgr import ServiceMgr
diff --git a/Tracking/Acts/ActsTrkFitting/src/ActsKalmanFitter.cxx b/Tracking/Acts/ActsTrkFitting/src/ActsKalmanFitter.cxx
index c038f57fe88477a2887b848140e621d0c2583c2a..f49a5792f0a7ebb496e523bfdba73ce00e96085c 100755
--- a/Tracking/Acts/ActsTrkFitting/src/ActsKalmanFitter.cxx
+++ b/Tracking/Acts/ActsTrkFitting/src/ActsKalmanFitter.cxx
@@ -71,6 +71,8 @@ ActsKalmanFitter::ActsKalmanFitter(const std::string& t,const std::string& n,
   // -- job options - 
   declareProperty("OutlierChi2Cut",m_option_outlierChi2Cut=12.5,
 		              "Chi2 cut used by the outlier finder");
+  declareProperty("ReverseFilteringPt",m_option_ReverseFilteringPt=1.0,
+		              "Pt cut used for the ReverseFiltering logic");
   declareProperty("MaxPropagationStep",m_option_maxPropagationStep=5000,
                   "Maximum number of steps for one propagate call");
   declareProperty("SeedCovarianceScale",m_option_seedCovarianceScale=100.,
@@ -138,9 +140,9 @@ ActsKalmanFitter::fit(const EventContext& ctx,
   Acts::PropagatorPlainOptions propagationOption;
   propagationOption.maxSteps = m_option_maxPropagationStep;
   // Set the KalmanFitter options
-  Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator, ATLASOutlierFinder>
+  Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator, ATLASOutlierFinder, ReverseFilteringLogic>
       kfOptions(tgContext, mfContext, calContext,
-                ATLASSourceLinkCalibrator(), ATLASOutlierFinder{m_option_outlierChi2Cut},
+                ATLASSourceLinkCalibrator(), ATLASOutlierFinder{m_option_outlierChi2Cut}, ReverseFilteringLogic{m_option_ReverseFilteringPt},
                 Acts::LoggerWrapper{logger()}, propagationOption,
                 &(*pSurface));
   std::vector<ATLASSourceLink> trackSourceLinks = m_ATLASConverterTool->ATLASTrackToSourceLink(inputTrack);
@@ -201,9 +203,9 @@ ActsKalmanFitter::fit(const EventContext& ctx,
   Acts::PropagatorPlainOptions propagationOption;
   propagationOption.maxSteps = m_option_maxPropagationStep;
   // Set the KalmanFitter options
-  Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator, ATLASOutlierFinder>
+  Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator, ATLASOutlierFinder, ReverseFilteringLogic>
       kfOptions(tgContext, mfContext, calContext,
-                ATLASSourceLinkCalibrator(), ATLASOutlierFinder{m_option_outlierChi2Cut},
+                ATLASSourceLinkCalibrator(), ATLASOutlierFinder{m_option_outlierChi2Cut}, ReverseFilteringLogic{m_option_ReverseFilteringPt},
                 Acts::LoggerWrapper{logger()}, propagationOption,
                 &(*pSurface));
 
@@ -287,9 +289,9 @@ ActsKalmanFitter::fit(const EventContext& ctx,
   Acts::PropagatorPlainOptions propagationOption;
   propagationOption.maxSteps = m_option_maxPropagationStep;
   // Set the KalmanFitter options
-  Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator, ATLASOutlierFinder>
+  Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator, ATLASOutlierFinder, ReverseFilteringLogic>
       kfOptions(tgContext, mfContext, calContext,
-                ATLASSourceLinkCalibrator(), ATLASOutlierFinder{m_option_outlierChi2Cut},
+                ATLASSourceLinkCalibrator(), ATLASOutlierFinder{m_option_outlierChi2Cut}, ReverseFilteringLogic{m_option_ReverseFilteringPt},
                 Acts::LoggerWrapper{logger()}, propagationOption,
                 &(*pSurface));
 
@@ -373,9 +375,9 @@ ActsKalmanFitter::fit(const EventContext& ctx,
   Acts::PropagatorPlainOptions propagationOption;
   propagationOption.maxSteps = m_option_maxPropagationStep;
   // Set the KalmanFitter options
-  Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator, ATLASOutlierFinder>
+  Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator, ATLASOutlierFinder, ReverseFilteringLogic>
       kfOptions(tgContext, mfContext, calContext,
-                ATLASSourceLinkCalibrator(), ATLASOutlierFinder{m_option_outlierChi2Cut},
+                ATLASSourceLinkCalibrator(), ATLASOutlierFinder{m_option_outlierChi2Cut}, ReverseFilteringLogic{m_option_ReverseFilteringPt},
                 Acts::LoggerWrapper{logger()}, propagationOption,
                 &(*pSurface));
 
diff --git a/Tracking/Acts/ActsTrkFitting/src/ActsKalmanFitter.h b/Tracking/Acts/ActsTrkFitting/src/ActsKalmanFitter.h
index 0a1fbb403a8822172158a71654d81b73757df8b2..fdbddb9d4e23482bc9408a7220d4df7e7dfe6f38 100755
--- a/Tracking/Acts/ActsTrkFitting/src/ActsKalmanFitter.h
+++ b/Tracking/Acts/ActsTrkFitting/src/ActsKalmanFitter.h
@@ -129,10 +129,32 @@ public:
     }
   };
 
+  /// Determine if the smoothing of a track should be done with or without reverse
+  /// filtering
+  struct ReverseFilteringLogic {
+    double momentumMax = std::numeric_limits<double>::max();
+
+    /// Determine if the smoothing of a track should be done with or without reverse
+    /// filtering
+    ///
+    /// @tparam track_state_t Type of the track state
+    /// @param trackState The trackState of the last measurement
+    /// @retval False if we don't use the reverse filtering for the smoothing of the track
+    /// @retval True if we use the reverse filtering for the smoothing of the track
+    template <typename track_state_t>
+    bool operator()(const track_state_t& trackState) const {
+      // can't determine an outlier w/o a measurement or predicted parameters
+      auto momentum = fabs(1 / trackState.filtered()[Acts::eBoundQOverP]);
+      return (momentum <= momentumMax);
+    }
+  };
+
   /// Track fitter function that takes input measurements, initial trackstate
   //  and fitter options and returns some track-fitter-specific result.
   using TrackFitterOptions = Acts::KalmanFitterOptions<ATLASSourceLinkCalibrator,
-                                                       ATLASOutlierFinder>;
+                                                       ATLASOutlierFinder,
+                                                       ReverseFilteringLogic>;
+
   using TrackFitterResult =
       Acts::Result<Acts::KalmanFitterResult<ATLASSourceLink>>;
 
@@ -168,6 +190,7 @@ private:
 
     // the settable job options
     double m_option_outlierChi2Cut;
+    double m_option_ReverseFilteringPt;
     int    m_option_maxPropagationStep;
     double m_option_seedCovarianceScale;
 
diff --git a/Tracking/TrkAlgorithms/TrkTruthAlgs/TrkTruthAlgs/TrackTruthSimilaritySelector.h b/Tracking/TrkAlgorithms/TrkTruthAlgs/TrkTruthAlgs/TrackTruthSimilaritySelector.h
index 957e20d582489c0d65290b1c43050a082648caaf..02365722cb116204793ee1c14dbb72fb3bbd2114 100644
--- a/Tracking/TrkAlgorithms/TrkTruthAlgs/TrkTruthAlgs/TrackTruthSimilaritySelector.h
+++ b/Tracking/TrkAlgorithms/TrkTruthAlgs/TrkTruthAlgs/TrackTruthSimilaritySelector.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRACKTRUTHSIMILARITYSELECTOR_H
@@ -30,7 +30,8 @@ private:
   SG::WriteHandle<TrackTruthCollection> m_out; //std::string m_outputName;
 
   // Match quality tool
-  ToolHandle<Trk::IDetailedTrackTruthSimilarity> m_matchTool;
+  ToolHandle<Trk::IDetailedTrackTruthSimilarity> m_matchTool
+    {this, "TrackTruthSimilarityTool", "Trk::TruthMatchRatio", "Track-truth similarity tool"};
   
   void fillOutput(TrackTruthCollection *out, const DetailedTrackTruthCollection *in);
 };
diff --git a/Tracking/TrkAlgorithms/TrkTruthAlgs/src/TrackTruthSimilaritySelector.cxx b/Tracking/TrkAlgorithms/TrkTruthAlgs/src/TrackTruthSimilaritySelector.cxx
index 5ff36fefd34052b79bb9de3356a2668fe5903874..10697a6392c2016dae78da8284cb7d1132f4e381 100644
--- a/Tracking/TrkAlgorithms/TrkTruthAlgs/src/TrackTruthSimilaritySelector.cxx
+++ b/Tracking/TrkAlgorithms/TrkTruthAlgs/src/TrackTruthSimilaritySelector.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include <memory>
@@ -12,9 +12,7 @@
 TrackTruthSimilaritySelector::TrackTruthSimilaritySelector(const std::string &name,ISvcLocator *pSvcLocator)
   : AthAlgorithm(name,pSvcLocator),
   m_detailed("DetailedTrackTruth"), m_out("TrackTruthNew")
-  , m_matchTool("Trk::TruthMatchRatio")
 {
-  declareProperty("TrackTruthSimilarityTool", m_matchTool, "Track-truth similarity tool");
   declareProperty("DetailedTrackTruthName",  m_detailed);
   declareProperty("OutputName",  m_out);
 }
diff --git a/Tracking/TrkConditions/TrackingGeometryCondAlg/python/AtlasTrackingGeometryCondAlg.py b/Tracking/TrkConditions/TrackingGeometryCondAlg/python/AtlasTrackingGeometryCondAlg.py
index 3168de231737a0ddb487b74440a3bf96dcf382a3..9afa7ce795baf39e573df7b5afbb87c96d18cc3a 100644
--- a/Tracking/TrkConditions/TrackingGeometryCondAlg/python/AtlasTrackingGeometryCondAlg.py
+++ b/Tracking/TrkConditions/TrackingGeometryCondAlg/python/AtlasTrackingGeometryCondAlg.py
@@ -75,11 +75,18 @@ class ConfiguredTrackingGeometryCondAlg( Trk__TrackingGeometryCondAlg ) :
 #              if hasattr(ToolSvc, TrkDetFlags.InDetTrackingGeometryBuilderName()):
 #                  InDetTrackingGeometryBuilder = getattr(ToolSvc, TrkDetFlags.InDetTrackingGeometryBuilderName())
 #          else:
+
           if not TrkDetFlags.InDetStagedGeometryBuilder():
-              from InDetTrackingGeometry.ConfiguredInDetTrackingGeometryBuilderCond import ConfiguredInDetTrackingGeometryBuilderCond as IDGeometryBuilder
+              from InDetTrackingGeometry.ConfiguredInDetTrackingGeometryBuilderCond import(
+                  ConfiguredInDetTrackingGeometryBuilderCond as IDGeometryBuilder)
           else:
-              from InDetTrackingGeometry.ConfiguredStagedTrackingGeometryBuilderCond import ConfiguredStagedTrackingGeometryBuilderCond as IDGeometryBuilder
-          InDetTrackingGeometryBuilder = IDGeometryBuilder(name ='InDetTrackingGeometryBuilder'+nameSuffix,nameSuffix=nameSuffix)
+              from InDetTrackingGeometry.ConfiguredStagedTrackingGeometryBuilderCond import (
+                  ConfiguredStagedTrackingGeometryBuilderCond as IDGeometryBuilder)
+          from AthenaCommon.BeamFlags import jobproperties
+          InDetTrackingGeometryBuilder = IDGeometryBuilder(
+              name='InDetTrackingGeometryBuilder'+nameSuffix,
+              nameSuffix=nameSuffix,
+              buildTrtStrawLayers=(jobproperties.Beam.beamType == "cosmics"))
 
           InDetTrackingGeometryBuilder.EnvelopeDefinitionSvc = AtlasEnvelopeSvc
           InDetTrackingGeometryBuilder.OutputLevel = TrkDetFlags.InDetBuildingOutputLevel()
diff --git a/Tracking/TrkConditions/TrackingGeometryCondAlg/python/AtlasTrackingGeometryCondAlgConfig.py b/Tracking/TrkConditions/TrackingGeometryCondAlg/python/AtlasTrackingGeometryCondAlgConfig.py
index 098ded2296af39da27fe660c0856f1e76594fa23..930d71d1a0ddf721ac27e201898113b5514b4d2f 100644
--- a/Tracking/TrkConditions/TrackingGeometryCondAlg/python/AtlasTrackingGeometryCondAlgConfig.py
+++ b/Tracking/TrkConditions/TrackingGeometryCondAlg/python/AtlasTrackingGeometryCondAlgConfig.py
@@ -5,7 +5,7 @@ from GaudiKernel.GaudiHandles import PrivateToolHandleArray
 from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
-
+from AthenaConfiguration.AccumulatorCache import AccumulatorCache
 
 def _setupCondDB(flags, CoolDataBaseFolder, quiet=True):
 
@@ -61,6 +61,14 @@ def _getInDetTrackingGeometryBuilder(name, flags,
     binnings = []
     colors = []
 
+    # Material due to InDet services
+    if (flags.Detector.GeometryPixel
+        or flags.Detector.GeometrySCT
+            or flags.Detector.GeometryTRT):
+        from InDetServMatGeoModel.InDetServMatGeoModelConfig import (
+            InDetServiceMaterialCfg)
+        result.merge(InDetServiceMaterialCfg(flags))
+
     # Pixel
     if flags.Detector.GeometryPixel:
         # for Pixel DetectorElement conditions data :
@@ -98,7 +106,8 @@ def _getInDetTrackingGeometryBuilder(name, flags,
         binnings += [PixelLayerBinning]
         colors += [3]
 
-        # add artifical dependencies to Pixel DetectorElement conditions algs to ensure that the IOV
+        # add artifical dependencies to Pixel DetectorElement
+        # conditions algs to ensure that the IOV
         # is identical to the IOV of the tracking geoemtry cond alg
         from PixelConditionsAlgorithms.PixelConditionsConfig import PixelDetectorElementCondAlgCfg
         result.merge(PixelDetectorElementCondAlgCfg(
@@ -145,7 +154,8 @@ def _getInDetTrackingGeometryBuilder(name, flags,
         binnings += [SCT_LayerBinning]
         colors += [4]
 
-        from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConfig import SCT_DetectorElementCondAlgCfg
+        from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConfig import (
+            SCT_DetectorElementCondAlgCfg)
         result.merge(SCT_DetectorElementCondAlgCfg(
             flags,
             MuonManagerKey=[
@@ -442,7 +452,8 @@ def _getITkTrackingGeometryBuilder(name, flags, result,
         ReplaceAllJointBoundaries=True,
         BuildBoundaryLayers=True,
         ExitVolumeName='InDet::Containers::InnerDetector',
-        RemoveHGTD=flags.Detector.GeometryHGTD)
+        RemoveHGTD=(flags.GeoModel.Run not in ["RUN1", "RUN2", "RUN3"]),
+        ZminHGTD=3420.)
 
 
 def _getCaloTrackingGeometryBuilder(name, flags, result,
@@ -541,7 +552,6 @@ def _getHGTD_TrackingGeometryBuilder(name, flags, result,
     if (namePrefix+name+nameSuffix).find('CondCond') >= 0:
         raise Exception('Invalid name composition %s + %s + %s ' %
                         (namePrefix, name, nameSuffix))
-
     # the hgtd tracking geometry builder
     HGTD_TrackingGeometryBuilder = CompFactory.HGTD_TrackingGeometryBuilderCond
     return HGTD_TrackingGeometryBuilder(namePrefix+name+nameSuffix,
@@ -553,7 +563,7 @@ def _getHGTD_TrackingGeometryBuilder(name, flags, result,
 # and TrkDetFlags.MaterialValidation().
 # For new configuration, (temporarily?) pass as parameters.
 
-
+@AccumulatorCache
 def TrackingGeometryCondAlgCfg(flags, name='AtlasTrackingGeometryCondAlg', doMaterialValidation=False):
     """
     Sets up the Tracking Geometry Conditions Algorithm
@@ -577,7 +587,7 @@ def TrackingGeometryCondAlgCfg(flags, name='AtlasTrackingGeometryCondAlg', doMat
 
     # Depending on the job configuration, setup the various detector builders, and add to atlas_geometry_builder
     if flags.Detector.GeometryID:
-        # TODO Not sure how to handle TrkDetFlags, specifically 
+        # TODO Not sure how to handle TrkDetFlags, specifically
         # ISF_FatrasCustomGeometry, XMLFastCustomGeometry
         # So, here we only setup the default InDet geometry builder!
         inDetTrackingGeometryBuilder = _getInDetTrackingGeometryBuilder(
@@ -601,18 +611,15 @@ def TrackingGeometryCondAlgCfg(flags, name='AtlasTrackingGeometryCondAlg', doMat
             nameSuffix=nameSuffix)
         atlas_geometry_builder.InDetTrackingGeometryBuilder = inDetTrackingGeometryBuilder
 
-    # Temporarily disabled
-    '''
     if flags.Detector.GeometryHGTD:
-      hgtdTrackingGeometryBuilder = _getHGTD_TrackingGeometryBuilder(name ='HGTD_TrackingGeometryBuilder',
+        hgtdTrackingGeometryBuilder = _getHGTD_TrackingGeometryBuilder(name ='HGTD_TrackingGeometryBuilder',
                                                                      flags=flags,
                                                                      result=result,
                                                                      envelopeDefinitionSvc=atlas_env_def_service,
                                                                      namePrefix=namePrefix,
                                                                      nameSuffix=nameSuffix)
-      atlas_geometry_builder.HGTD_TrackingGeometryBuilder = hgtdTrackingGeometryBuilder
-    '''
-
+        atlas_geometry_builder.HGTD_TrackingGeometryBuilder = hgtdTrackingGeometryBuilder
+    
     if flags.Detector.GeometryCalo:
         Trk__CylinderVolumeCreator = CompFactory.Trk.CylinderVolumeCreator
         caloVolumeCreator = Trk__CylinderVolumeCreator(
@@ -635,7 +642,7 @@ def TrackingGeometryCondAlgCfg(flags, name='AtlasTrackingGeometryCondAlg', doMat
         atlas_geometry_builder.CaloTrackingGeometryBuilder = caloTrackingGeometryBuilder
 
     if flags.Detector.GeometryMuon:
-        # Copied from from MuonTrackingGeometry.ConfiguredMuonTrackingGeometry 
+        # Copied from from MuonTrackingGeometry.ConfiguredMuonTrackingGeometry
         # import MuonTrackingGeometryBuilder
         # Add the muon geometry model to the CA
         from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
@@ -700,6 +707,8 @@ def TrackingGeometryCondAlgCfg(flags, name='AtlasTrackingGeometryCondAlg', doMat
         GeometryProcessors=PrivateToolHandleArray(atlas_geometry_processors))
     result.addCondAlgo(condAlg, primary=True)
 
+     
+
     # Hack for Single Threaded Athena: manually move dependencies of SCT_DetectorElementCondAlg
     # and PixelDetectorElementCondAlg such that these are executed after their dependencies.
 
@@ -724,6 +733,24 @@ def TrackingGeometryCondAlgCfg(flags, name='AtlasTrackingGeometryCondAlg', doMat
         prependList.extend(appendList)
         condAlgs = prependList
         result._conditionsAlgs = condAlgs
+      
+    # Hack for running on  RecExCommon  via CAtoGlobalWrapper.
+    # We need to be sure
+    # we set "all" DetectorTools otherwise
+    # we get Py:conf2toConfigurable WARNINGs
+    # due to conflicts.
+    # "all" can include forward detectors
+    # when enabled (the module below check for this internally)
+    #
+    # Also we need this only when called via
+    # CAtoGlobalWrapper
+    import inspect
+    stack = inspect.stack()
+    if len(stack) >= 2:
+        functions = list(map(lambda x: x.function, stack))
+        if 'CAtoGlobalWrapper' in functions:
+            from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
+            result.merge(ForDetGeometryCfg(flags))
 
     return result
 
diff --git a/Tracking/TrkConfig/python/AtlasExtrapolatorConfig.py b/Tracking/TrkConfig/python/AtlasExtrapolatorConfig.py
index 72a00a1ff8f9a864e61e03d3a0932ef557221a7e..0857e78a333ef55f9a97ef99c4eacccbf50c6192 100644
--- a/Tracking/TrkConfig/python/AtlasExtrapolatorConfig.py
+++ b/Tracking/TrkConfig/python/AtlasExtrapolatorConfig.py
@@ -21,10 +21,16 @@ def AtlasExtrapolatorCfg(flags, name='AtlasExtrapolator'):
         TC.AtlasRKPropagatorCfg(flags))
     AtlasSTEP_Propagator = result.getPrimaryAndMerge(
         TC.AtlasSTEP_PropagatorCfg(flags))
+    ITkPropagator = None
+    if flags.Detector.GeometryITk:
+        ITkPropagator = result.getPrimaryAndMerge(
+            TC.ITkPropagatorCfg(flags))
 
     AtlasPropagators = []
     AtlasPropagators += [AtlasRungeKuttaPropagator]
     AtlasPropagators += [AtlasSTEP_Propagator]
+    if flags.Detector.GeometryITk:
+        AtlasPropagators += [ITkPropagator]
 
     # UPDATOR DEFAULTS --------------------------------------------------
 
@@ -32,10 +38,16 @@ def AtlasExtrapolatorCfg(flags, name='AtlasExtrapolator'):
         TC.AtlasMaterialEffectsUpdatorCfg(flags))
     AtlasMaterialEffectsUpdatorLandau = result.getPrimaryAndMerge(
         TC.AtlasMaterialEffectsUpdatorLandauCfg(flags))
+    ITkMaterialEffectsUpdator = None
+    if flags.Detector.GeometryITk:
+        ITkMaterialEffectsUpdator = result.getPrimaryAndMerge(
+            TC.ITkMaterialEffectsUpdatorCfg(flags))
 
     AtlasUpdators = []
     AtlasUpdators += [AtlasMaterialEffectsUpdator]
     AtlasUpdators += [AtlasMaterialEffectsUpdatorLandau]
+    if flags.Detector.GeometryITk:
+        AtlasUpdators += [ITkMaterialEffectsUpdator]
 
     AtlasNavigator = result.getPrimaryAndMerge(TC.AtlasNavigatorCfg(flags))
 
@@ -43,7 +55,10 @@ def AtlasExtrapolatorCfg(flags, name='AtlasExtrapolator'):
 
     AtlasSubPropagators = []
     AtlasSubPropagators += [AtlasRungeKuttaPropagator.name]  # Global
-    AtlasSubPropagators += [AtlasRungeKuttaPropagator.name]  # ID
+    if flags.Detector.GeometryITk:
+        AtlasSubPropagators += [ITkPropagator.name]  # ITk
+    else:
+        AtlasSubPropagators += [AtlasRungeKuttaPropagator.name]  # ID
     AtlasSubPropagators += [AtlasSTEP_Propagator.name]  # BeamPipe
     AtlasSubPropagators += [AtlasSTEP_Propagator.name]  # Calo
     AtlasSubPropagators += [AtlasSTEP_Propagator.name]  # MS
@@ -51,7 +66,10 @@ def AtlasExtrapolatorCfg(flags, name='AtlasExtrapolator'):
 
     AtlasSubUpdators = []
     AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name]  # Global
-    AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name]  # ID
+    if flags.Detector.GeometryITk:
+        AtlasSubUpdators += [ITkMaterialEffectsUpdator.name]  # ITk
+    else:
+        AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name]  # ID
     AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name]  # BeamPipe
     AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name]  # Calo
     AtlasSubUpdators += [AtlasMaterialEffectsUpdator.name]  # MS
@@ -59,15 +77,14 @@ def AtlasExtrapolatorCfg(flags, name='AtlasExtrapolator'):
 
     # call the base class constructor
     Extrapolator = CompFactory.Trk.Extrapolator(name,
-                                     Navigator=AtlasNavigator,
-                                     MaterialEffectsUpdators=AtlasUpdators,
-                                     Propagators=AtlasPropagators,
-                                     SubPropagators=AtlasSubPropagators,
-                                     SubMEUpdators=AtlasSubUpdators
-                                     )
+                                                Navigator=AtlasNavigator,
+                                                MaterialEffectsUpdators=AtlasUpdators,
+                                                Propagators=AtlasPropagators,
+                                                SubPropagators=AtlasSubPropagators,
+                                                SubMEUpdators=AtlasSubUpdators
+                                                )
 
     result.setPrivateTools(Extrapolator)
-
     return result
 
 
@@ -82,25 +99,40 @@ def egammaCaloExtrapolatorCfg(flags, name='egammaCaloExtrapolator'):
         TC.AtlasRKPropagatorCfg(flags))
     NoMatSTEP_Propagator = result.getPrimaryAndMerge(
         TC.AtlasNoMatSTEP_PropagatorCfg(flags))
+    ITkPropagator = None
+    if flags.Detector.GeometryITk:
+        ITkPropagator = result.getPrimaryAndMerge(
+            TC.ITkPropagatorCfg(flags))
 
     egammaPropagators = []
     egammaPropagators += [RungeKuttaPropagator]
     egammaPropagators += [NoMatSTEP_Propagator]
+    if flags.Detector.GeometryITk:
+        egammaPropagators += [ITkPropagator]
 
     MaterialEffectsUpdator = result.getPrimaryAndMerge(
         TC.AtlasMaterialEffectsUpdatorCfg(flags))
     NoElossMaterialEffectsUpdator = result.getPrimaryAndMerge(
         TC.AtlasNoElossMaterialEffectsUpdatorCfg(flags))
+    ITkMaterialEffectsUpdator = None
+    if flags.Detector.GeometryITk:
+        ITkMaterialEffectsUpdator = result.getPrimaryAndMerge(
+            TC.ITkMaterialEffectsUpdatorCfg(flags))
 
     egammaUpdators = []
     egammaUpdators += [MaterialEffectsUpdator]
     egammaUpdators += [NoElossMaterialEffectsUpdator]
+    if flags.Detector.GeometryITk:
+        egammaUpdators += [ITkMaterialEffectsUpdator]
 
     # CONFIGURE PROPAGATORS/UPDATORS ACCORDING TO GEOMETRY SIGNATURE
 
     egammaSubPropagators = []
     egammaSubPropagators += [RungeKuttaPropagator.name]  # Global
-    egammaSubPropagators += [RungeKuttaPropagator.name]  # ID
+    if flags.Detector.GeometryITk:
+        egammaSubPropagators += [ITkPropagator.name]  # ITk
+    else:
+        egammaSubPropagators += [RungeKuttaPropagator.name]  # ID
     # BeamPipe (default is STEP)
     egammaSubPropagators += [RungeKuttaPropagator.name]
     # Calo (default is STEP)
@@ -110,7 +142,10 @@ def egammaCaloExtrapolatorCfg(flags, name='egammaCaloExtrapolator'):
 
     egammaSubUpdators = []
     egammaSubUpdators += [MaterialEffectsUpdator.name]  # Global
-    egammaSubUpdators += [MaterialEffectsUpdator.name]  # ID
+    if flags.Detector.GeometryITk:
+        egammaSubUpdators += [ITkMaterialEffectsUpdator.name]  # ID
+    else:
+        egammaSubUpdators += [MaterialEffectsUpdator.name]  # ID
     egammaSubUpdators += [MaterialEffectsUpdator.name]  # BeamPipe
     # Calo (default is Mat)
     egammaSubUpdators += [NoElossMaterialEffectsUpdator.name]
@@ -126,7 +161,6 @@ def egammaCaloExtrapolatorCfg(flags, name='egammaCaloExtrapolator'):
     egammaExtrapolator.STEP_Propagator = NoMatSTEP_Propagator
 
     result.setPrivateTools(egammaExtrapolator)
-
     return result
 
 
@@ -157,7 +191,6 @@ def MCTruthClassifierExtrapolatorCfg(flags, name='MCTruthClassifierExtrapolator'
     MCTruthExtrapolator.SubMEUpdators = MCTruthSubUpdators
 
     result.setPrivateTools(MCTruthExtrapolator)
-
     return result
 
 
diff --git a/Tracking/TrkConfig/python/AtlasTrackSummaryToolConfig.py b/Tracking/TrkConfig/python/AtlasTrackSummaryToolConfig.py
index b0f76f2154f61172435fcedcc330c4887add9811..96946646cc01744192f5a89716cb6b09eaf8beaa 100644
--- a/Tracking/TrkConfig/python/AtlasTrackSummaryToolConfig.py
+++ b/Tracking/TrkConfig/python/AtlasTrackSummaryToolConfig.py
@@ -3,8 +3,9 @@
 # from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
 from AthenaConfiguration.ComponentFactory import CompFactory
+from AthenaConfiguration.AccumulatorCache import AccumulatorCache
 
-
+@AccumulatorCache
 def AtlasTrackSummaryToolCfg(flags, name="", **kwargs):
     # Based on AtlasTrackSummaryTool.py
     # FIXME - check all of this once the ID configuration is available, because probably we can simplify this a lot
diff --git a/Tracking/TrkConfig/python/AtlasUpgradeExtrapolatorConfig.py b/Tracking/TrkConfig/python/AtlasUpgradeExtrapolatorConfig.py
deleted file mode 100644
index ea06c61a7cbb411be5265b461a426dfaa1296336..0000000000000000000000000000000000000000
--- a/Tracking/TrkConfig/python/AtlasUpgradeExtrapolatorConfig.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-
-# New configuration for ATLAS extrapolator for Run 4
-
-from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-from AthenaConfiguration.ComponentFactory import CompFactory
-from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
-import TrkConfig.AtlasExtrapolatorToolsConfig as TC
-
-# import the Extrapolator configurable
-Trk__Extrapolator=CompFactory.Trk.Extrapolator
-
-# define the class
-def AtlasUpgradeExtrapolatorCfg( flags, name = 'AtlasUpgradeExtrapolator' ):
-       result=ComponentAccumulator()
-
-       acc  = MagneticFieldSvcCfg(flags)
-       result.merge(acc)
-
-       # PROPAGATOR DEFAULTS --------------------------------------------------------------------------------------
-
-       AtlasRungeKuttaPropagator = result.getPrimaryAndMerge( TC.AtlasRKPropagatorCfg(flags) )
-       AtlasSTEP_Propagator = result.getPrimaryAndMerge( TC.AtlasSTEP_PropagatorCfg(flags) )
-       ITkPropagator = result.getPrimaryAndMerge( TC.ITkPropagatorCfg(flags) )
-
-       AtlasPropagators  = []
-       AtlasPropagators += [AtlasRungeKuttaPropagator]
-       AtlasPropagators += [AtlasSTEP_Propagator]
-       AtlasPropagators += [ITkPropagator]
-
-       # UPDATOR DEFAULTS -----------------------------------------------------------------------------------------       
-
-       AtlasMaterialEffectsUpdator = result.getPrimaryAndMerge( TC.AtlasMaterialEffectsUpdatorCfg(flags) )
-       AtlasMaterialEffectsUpdatorLandau = result.getPrimaryAndMerge( TC.AtlasMaterialEffectsUpdatorLandauCfg(flags) )
-       ITkMaterialEffectsUpdator = result.getPrimaryAndMerge( TC.ITkMaterialEffectsUpdatorCfg(flags) )
-
-       AtlasUpdators    = []
-       AtlasUpdators    += [ AtlasMaterialEffectsUpdator ]
-       AtlasUpdators    += [ AtlasMaterialEffectsUpdatorLandau ]
-       AtlasUpdators    += [ ITkMaterialEffectsUpdator ]
-
-       AtlasNavigator = result.getPrimaryAndMerge( TC.AtlasNavigatorCfg(flags) )
-
-       # CONFIGURE PROPAGATORS/UPDATORS ACCORDING TO GEOMETRY SIGNATURE
-
-       AtlasSubPropagators = []
-       AtlasSubPropagators += [ AtlasRungeKuttaPropagator.name ] # Global
-       AtlasSubPropagators += [ ITkPropagator.name ] # ID
-       AtlasSubPropagators += [ AtlasSTEP_Propagator.name ] # BeamPipe
-       AtlasSubPropagators += [ AtlasSTEP_Propagator.name ] # Calo
-       AtlasSubPropagators += [ AtlasSTEP_Propagator.name ] # MS
-       AtlasSubPropagators += [ AtlasRungeKuttaPropagator.name ] # Cavern
-
-       AtlasSubUpdators = []
-       AtlasSubUpdators    += [ AtlasMaterialEffectsUpdator.name ] # Global
-       AtlasSubUpdators    += [ ITkMaterialEffectsUpdator.name ] # ID
-       AtlasSubUpdators    += [ AtlasMaterialEffectsUpdator.name ] # BeamPipe
-       AtlasSubUpdators    += [ AtlasMaterialEffectsUpdator.name ] # Calo
-       AtlasSubUpdators    += [ AtlasMaterialEffectsUpdator.name ] # MS
-       AtlasSubUpdators    += [ AtlasMaterialEffectsUpdator.name ] # Cavern
-       
-       # call the base class constructor
-       Extrapolator = Trk__Extrapolator(name,\
-                                  Navigator = AtlasNavigator,\
-                                  MaterialEffectsUpdators = AtlasUpdators,\
-                                  Propagators = AtlasPropagators,\
-                                  SubPropagators = AtlasSubPropagators,\
-                                  SubMEUpdators = AtlasSubUpdators
-                                  )
-
-
-       result.addPublicTool(Extrapolator, primary=True)
-
-       return result
-
-
-# Based on Reconstruction/egamma/egammaTools/python/egammaExtrapolators.py
-def egammaCaloUpgradeExtrapolatorCfg( flags, name = 'egammaCaloUpgradeExtrapolator' ):
-       result=ComponentAccumulator()
-
-       egammaExtrapolator = result.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags, name))
-
-
-       RungeKuttaPropagator = result.getPrimaryAndMerge( TC.AtlasRKPropagatorCfg(flags) )
-       NoMatSTEP_Propagator = result.getPrimaryAndMerge( TC.AtlasNoMatSTEP_PropagatorCfg(flags) )
-       ITkPropagator = result.getPrimaryAndMerge( TC.ITkPropagatorCfg(flags) )
-
-       egammaPropagators  = []
-       egammaPropagators += [RungeKuttaPropagator]
-       egammaPropagators += [NoMatSTEP_Propagator]
-       egammaPropagators += [ITkPropagator]
-
-       MaterialEffectsUpdator = result.getPrimaryAndMerge( TC.AtlasMaterialEffectsUpdatorCfg(flags) )
-       NoElossMaterialEffectsUpdator = result.getPrimaryAndMerge( TC.AtlasNoElossMaterialEffectsUpdatorCfg(flags) )
-       ITkMaterialEffectsUpdator = result.getPrimaryAndMerge( TC.ITkMaterialEffectsUpdatorCfg(flags) )
-
-       egammaUpdators    = []
-       egammaUpdators    += [ MaterialEffectsUpdator ]
-       egammaUpdators    += [ NoElossMaterialEffectsUpdator ]
-       egammaUpdators    += [ ITkMaterialEffectsUpdator ]
-
-       # CONFIGURE PROPAGATORS/UPDATORS ACCORDING TO GEOMETRY SIGNATURE
-
-       egammaSubPropagators = []
-       egammaSubPropagators += [ RungeKuttaPropagator.name ] # Global
-       egammaSubPropagators += [ ITkPropagator.name ] # ID
-       egammaSubPropagators += [ RungeKuttaPropagator.name ] # BeamPipe (default is STEP)
-       egammaSubPropagators += [ RungeKuttaPropagator.name ] # Calo (default is STEP)
-       egammaSubPropagators += [ NoMatSTEP_Propagator.name ] # MS (default is STEP)
-       egammaSubPropagators += [ RungeKuttaPropagator.name ] # Cavern
-
-       egammaSubUpdators = []
-       egammaSubUpdators    += [ MaterialEffectsUpdator.name ] # Global
-       egammaSubUpdators    += [ ITkMaterialEffectsUpdator.name ] # ID
-       egammaSubUpdators    += [ MaterialEffectsUpdator.name ] # BeamPipe
-       egammaSubUpdators    += [ NoElossMaterialEffectsUpdator.name ] # Calo (default is Mat)
-       egammaSubUpdators    += [ NoElossMaterialEffectsUpdator.name ] # MS (default is Mat)
-       egammaSubUpdators    += [ MaterialEffectsUpdator.name ] # Cavern
-
-       egammaExtrapolator.MaterialEffectsUpdators = egammaUpdators
-       egammaExtrapolator.SubMEUpdators = egammaSubUpdators
-       egammaExtrapolator.Propagators = egammaPropagators
-       egammaExtrapolator.SubPropagators = egammaSubPropagators
-       # egamma STEP with no eloss for calo intersections
-       egammaExtrapolator.STEP_Propagator = NoMatSTEP_Propagator
-
-       result.addPublicTool(egammaExtrapolator, primary=True)
-
-       return result
-
-
-
-# Based on PhysicsAnalysis/MCTruthClassifier/python/MCTruthClassifierBase.py
-def MCTruthClassifierUpgradeExtrapolatorCfg( flags, name = 'MCTruthClassifierUpgradeExtrapolator' ):
-       result=ComponentAccumulator()
-
-       MCTruthExtrapolator = result.getPrimaryAndMerge(AtlasUpgradeExtrapolatorCfg(flags, name))
-
-       MCTruthUpdators    = []
-
-       NoElossMaterialEffectsUpdator = result.getPrimaryAndMerge( TC.AtlasNoElossMaterialEffectsUpdatorCfg(flags) )
-       MCTruthUpdators    += [ NoElossMaterialEffectsUpdator ]
-
-       MCTruthSubUpdators = []
-
-       # -------------------- set it depending on the geometry ----------------------------------------------------
-       MCTruthSubUpdators    += [ NoElossMaterialEffectsUpdator.name ] # Global
-       MCTruthSubUpdators    += [ NoElossMaterialEffectsUpdator.name ] # ID
-       MCTruthSubUpdators    += [ NoElossMaterialEffectsUpdator.name ] # beampipe
-       MCTruthSubUpdators    += [ NoElossMaterialEffectsUpdator.name ] # calo
-       MCTruthSubUpdators    += [ NoElossMaterialEffectsUpdator.name ] # MS
-       MCTruthSubUpdators    += [ NoElossMaterialEffectsUpdator.name ] # cavern
-
-       MCTruthExtrapolator.MaterialEffectsUpdators = MCTruthUpdators
-       MCTruthExtrapolator.SubMEUpdators = MCTruthSubUpdators
-
-       result.addPublicTool(MCTruthExtrapolator, primary=True)
-
-       return result
diff --git a/Tracking/TrkDetDescr/TrkDetDescrAlgs/python/TrkDetDescrAlgsConfig.py b/Tracking/TrkDetDescr/TrkDetDescrAlgs/python/TrkDetDescrAlgsConfig.py
index 32e28a5df207a2e155a804d0161f4cf272713b4a..0f8e3536e631d586e4002a262ac67dbfadafc8a6 100644
--- a/Tracking/TrkDetDescr/TrkDetDescrAlgs/python/TrkDetDescrAlgsConfig.py
+++ b/Tracking/TrkDetDescr/TrkDetDescrAlgs/python/TrkDetDescrAlgsConfig.py
@@ -14,23 +14,16 @@ def ITkMaterialMappingCfg(flags, name="ITkMaterialMapping", **kwargs):
   LayerMaterialDirectory = '/GLOBAL/TrackingGeo/'
 
   # get the correct TrackingGeometry setup
-  geom_svc=None
-  geom_cond_key=''
-  from InDetRecExample.TrackingCommon import use_tracking_geometry_cond_alg
-  if not use_tracking_geometry_cond_alg :
-     from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
-     acc = TrackingGeometrySvcCfg(flags)
-     geom_svc = acc.getPrimary()
-     result.merge(acc)      
-     kwargs.setdefault("TrackingGeometrySvc", geom_svc)
-  else :
-     from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
-     result.merge( TrackingGeometryCondAlgCfg(flags) )
-     geom_cond_key = 'AtlasTrackingGeometry'
-     kwargs.setdefault("TrackingGeometryReadKey", geom_cond_key)    
+  from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
+  result.merge( TrackingGeometryCondAlgCfg(flags) )
+  geom_cond_key = 'AtlasTrackingGeometry'
+  kwargs.setdefault("TrackingGeometryReadKey", geom_cond_key)    
     
   if 'MappingVolumeName' not in kwargs :
-      kwargs.setdefault("MappingVolumeName", 'InDet::Containers::InnerDetector')
+      if flags.Detector.GeometryHGTD:
+        kwargs.setdefault("MappingVolumeName", 'HGTD::Detectors::HGTD')
+      else: 
+        kwargs.setdefault("MappingVolumeName", 'InDet::Containers::InnerDetector')        
   
   if 'ExtrapolationEngine' not in kwargs :
       from TrkConfig.AtlasExtrapolationEngineConfig import AtlasExtrapolationEngineCfg
@@ -77,26 +70,15 @@ def ITkMaterialMappingCfg(flags, name="ITkMaterialMapping", **kwargs):
   return result
   
   
-def ITkMaterialValidationCfg(flags, name="MaterialValidation", **kwargs):
+def MaterialValidationCfg(flags, name="MaterialValidation", **kwargs):
   """Return configured ComponentAccumulator and tool for MaterialMapping"""
   result=ComponentAccumulator()
-
+  
   # get the correct TrackingGeometry setup
-  geom_svc=None
-  geom_cond_key=''
-  from InDetRecExample.TrackingCommon import use_tracking_geometry_cond_alg
-  if not use_tracking_geometry_cond_alg :
-     from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
-     acc = TrackingGeometrySvcCfg(flags)
-     geom_svc = acc.getPrimary()
-     result.merge(acc)      
-     kwargs.setdefault("TrackingGeometrySvc", geom_svc)
-  else :
-     from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
-     result.merge( TrackingGeometryCondAlgCfg(flags) )
-     geom_cond_key = 'AtlasTrackingGeometry'
-     kwargs.setdefault("TrackingGeometryReadKey", geom_cond_key)    
-    
+  from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import TrackingGeometryCondAlgCfg
+  result.merge( TrackingGeometryCondAlgCfg(flags) )
+  geom_cond_key = 'AtlasTrackingGeometry'
+  kwargs.setdefault("TrackingGeometryReadKey", geom_cond_key)    
   
   if 'MaterialMapper' not in kwargs :
       MaterialMapper = CompFactory.Trk.MaterialMapper("MaterialMapper")
diff --git a/Tracking/TrkDetDescr/TrkDetDescrAlgs/scripts/RunMaterialMappingITk.py b/Tracking/TrkDetDescr/TrkDetDescrAlgs/scripts/RunMaterialMappingITk.py
index 610a438406e09f397a500ac3bbccb3a301d196f1..4270fd5f1c59aa305e52a5287ef1e121f27846f6 100644
--- a/Tracking/TrkDetDescr/TrkDetDescrAlgs/scripts/RunMaterialMappingITk.py
+++ b/Tracking/TrkDetDescr/TrkDetDescrAlgs/scripts/RunMaterialMappingITk.py
@@ -62,7 +62,7 @@ if args.localgeo:
   ConfigFlags.GeoModel.useLocalGeometry = True
   
 from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
-detectors = args.detectors if 'detectors' in args and args.detectors else ['ITkPixel', 'ITkStrip']
+detectors = args.detectors if 'detectors' in args and args.detectors else ['ITkPixel', 'ITkStrip', 'HGTD']
 detectors.append('Bpipe')  # always run with beam pipe
 setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
 
@@ -102,7 +102,8 @@ from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
 cfg.merge(PoolReadCfg(ConfigFlags))
 
 from TrkDetDescrAlgs.TrkDetDescrAlgsConfig import ITkMaterialMappingCfg
-cfg.merge(ITkMaterialMappingCfg(ConfigFlags))
+cfg.merge(ITkMaterialMappingCfg(ConfigFlags, 
+                                name="ITkMaterialMapping"))
   
 cfg.printConfig(withDetails = True, summariseProps = True)
 
diff --git a/Tracking/TrkDetDescr/TrkDetDescrAlgs/scripts/RunMaterialValidationITk.py b/Tracking/TrkDetDescr/TrkDetDescrAlgs/scripts/RunMaterialValidationITk.py
index 2dfea523a6a09f0b3ce444075a28c45d2d82cac1..8fdcfd60dc4720f534b960b47465966ba732d3b8 100644
--- a/Tracking/TrkDetDescr/TrkDetDescrAlgs/scripts/RunMaterialValidationITk.py
+++ b/Tracking/TrkDetDescr/TrkDetDescrAlgs/scripts/RunMaterialValidationITk.py
@@ -44,7 +44,7 @@ if args.localgeo:
   ConfigFlags.GeoModel.useLocalGeometry = True
   
 from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
-detectors = args.detectors if 'detectors' in args and args.detectors else ['ITkPixel', 'ITkStrip']
+detectors = args.detectors if 'detectors' in args and args.detectors else ['ITkPixel', 'ITkStrip', 'HGTD']
 detectors.append('Bpipe')  # always run with beam pipe
 setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
 
@@ -80,8 +80,8 @@ if args.verboseStoreGate:
 log.debug('Dumping of ConfigFlags now.')
 ConfigFlags.dump()
 
-from TrkDetDescrAlgs.TrkDetDescrAlgsConfig import ITkMaterialValidationCfg
-cfg.merge(ITkMaterialValidationCfg(ConfigFlags))
+from TrkDetDescrAlgs.TrkDetDescrAlgsConfig import MaterialValidationCfg
+cfg.merge(MaterialValidationCfg(ConfigFlags))
   
 cfg.printConfig(withDetails = True, summariseProps = True)
 
diff --git a/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/DummyMaterialEffectsUpdator.h b/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/DummyMaterialEffectsUpdator.h
deleted file mode 100755
index da39213793ad3051c008b9aa913177084488b5b1..0000000000000000000000000000000000000000
--- a/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/DummyMaterialEffectsUpdator.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-   Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
- */
-
-///////////////////////////////////////////////////////////////////
-// DummyMaterialEffectsUpdator.h, c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-
-#ifndef TRKEXTOOLS_DUMMYMATERIALEFFECTSUPDATOR_H
-#define TRKEXTOOLS_DUMMYMATERIALEFFECTSUPDATOR_H
-
-// Gaudi
-#include "AthenaBaseComps/AthAlgTool.h"
-#include "GaudiKernel/ToolHandle.h"
-#include "GaudiKernel/MsgStream.h"
-// Trk
-#include "TrkExInterfaces/IMaterialEffectsUpdator.h"
-#include "TrkEventPrimitives/PropDirection.h"
-#include "TrkEventPrimitives/ParticleHypothesis.h"
-#include "TrkParameters/TrackParameters.h"
-
-namespace Trk {
-class Layer;
-//class TrackParameters;
-class MaterialProperties;
-class IMaterialMapper;
-
-/** @class DummyMaterialEffectsUpdator
-
-  Debug tool for navigation tests
-
-  @author Andreas.Salzburger@cern.ch
-  */
-class DummyMaterialEffectsUpdator : public AthAlgTool,
-  virtual public IMaterialEffectsUpdator {
-  public:
-
-    /** AlgTool like constructor */
-    DummyMaterialEffectsUpdator(const std::string&,const std::string&,const IInterface*);
-
-    /**Virtual destructor*/
-    virtual ~DummyMaterialEffectsUpdator();
-
-    /** AlgTool initailize method.*/
-    StatusCode initialize() override;
-    /** AlgTool finalize method */
-    StatusCode finalize() override;
-
-    /** Updator interface (full update for a layer): Dummy full update
-    */
-    std::unique_ptr<TrackParameters> update(
-      const TrackParameters* parm,
-      const Layer& sf,
-      PropDirection dir = alongMomentum,
-      ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override;
-
-    /** User updator interface (full update for a layer):
-      The parmeters are given as a pointer, they are deleted inside the update method.
-      Update occurs on the place where the parameters parm are according to the specified MaterialEffectsOnTrack
-      */
-    virtual std::unique_ptr<TrackParameters> update(
-      const TrackParameters* parm,
-      const MaterialEffectsOnTrack& meff,
-      ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override {
-      (void)meff;
-      (void)particle;
-      (void)matupmode;
-      return std::unique_ptr<TrackParameters>(parm->clone());
-    }
-
-    /** Updator interface (pre-update for a layer): Dummy pre update
-    */
-    virtual std::unique_ptr<TrackParameters> preUpdate(
-      const TrackParameters* parm,
-      const Layer& sf,
-      PropDirection dir = alongMomentum,
-      ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override;
-
-    /** Updator interface (post-update for a layer): Dummy post update
-    */
-    virtual std::unique_ptr<TrackParameters> postUpdate(
-      const TrackParameters& parm,
-      const Layer& sf,
-      PropDirection dir = alongMomentum,
-      ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override;
-
-    /** Updator interface:
-      The parmeters are given as a pointer, they are delete inside the update method.
-      MaterialProperties based material update
-      - used by all Layer-based methods
-      */
-    virtual std::unique_ptr<TrackParameters> update(
-      const TrackParameters& parm,
-      const MaterialProperties& mprop,
-      double pathcorrection,
-      PropDirection dir = alongMomentum,
-      ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override;
-
-    virtual void validationAction() const override {};
-
-    virtual void modelAction(const TrackParameters* parm=nullptr) const override{
-      if(parm) return;
-    }
-
-    typedef IMaterialEffectsUpdator::ICache ICache;
-    class Cache : public ICache
-    {
-    public:
-      virtual MaterialCacheType type() const override final
-      {
-        return ICache::DummyMaterialEffects;
-      }
-    };
-
-    virtual std::unique_ptr<ICache> getCache() const override{
-      return std::make_unique<Cache>();
-    }
-
-    virtual std::unique_ptr<TrackParameters> update(
-      ICache& icache,
-      const TrackParameters* parm,
-      const Layer& sf,
-      PropDirection dir = alongMomentum,
-      ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override {
-      (void)icache;
-      return update(parm, sf, dir, particle, matupmode);
-    }
-
-    virtual std::unique_ptr<TrackParameters> update(
-      ICache& icache,
-      const TrackParameters* parm,
-      const MaterialEffectsOnTrack& meff,
-      Trk::ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override {
-      (void)icache;
-      return update(parm, meff, particle, matupmode);
-    }
-
-    virtual std::unique_ptr<TrackParameters> preUpdate(
-      ICache& icache,
-      const TrackParameters* parm,
-      const Layer& sf,
-      PropDirection dir = alongMomentum,
-      ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override {
-      (void)icache;
-      return preUpdate(parm, sf, dir, particle, matupmode);
-    }
-
-    virtual std::unique_ptr<TrackParameters> postUpdate(
-      ICache& icache,
-      const TrackParameters& parm,
-      const Layer& sf,
-      PropDirection dir = alongMomentum,
-      ParticleHypothesis particle = pion,
-      MaterialUpdateMode matupmode = addNoise
-    ) const override {
-      (void)icache;
-      return postUpdate(parm,sf,dir,particle,matupmode);
-    }
-
-    virtual std::unique_ptr<TrackParameters> update(
-      ICache& icache, const TrackParameters& parm,
-      const MaterialProperties& mprop,
-      double pathcorrection,
-      PropDirection dir=alongMomentum,
-      ParticleHypothesis particle=pion,
-      MaterialUpdateMode matupmode=addNoise
-    ) const override {
-      (void) icache;
-      return update(parm,mprop,pathcorrection,dir,particle,matupmode);
-    }
-
-    /** Validation Action: */
-    virtual void validationAction(ICache& icache) const override {
-      (void) icache;
-      validationAction();
-    }
-
-    /** Model Action:*/
-    virtual void modelAction(ICache& icache,const TrackParameters* parm=nullptr) const override{
-      (void) icache;
-      modelAction(parm);
-    }
-
-
-  private:
-
-    // ---------------- validation mode ------------------
-    bool                         m_validationMode;            //!< boolean switch for the validation mode
-    int                          m_validationDirectionSwitch; //!< jO switch for PropDirection
-    PropDirection                m_validationDirection;       //!< distinction between forward and backward validation
-    ToolHandle< IMaterialMapper > m_materialMapper;            //!< the material mapper for recording the layer material
-  };
-
-} // end of namespace
-
-
-#endif // TRKEXTOOLS_DUMMYMATERIALEFFECTSUPDATOR_H
-
diff --git a/Tracking/TrkExtrapolation/TrkExTools/src/DummyMaterialEffectsUpdator.cxx b/Tracking/TrkExtrapolation/TrkExTools/src/DummyMaterialEffectsUpdator.cxx
deleted file mode 100755
index 6d6ecf806df553d6f7983333903661ece305a4cc..0000000000000000000000000000000000000000
--- a/Tracking/TrkExtrapolation/TrkExTools/src/DummyMaterialEffectsUpdator.cxx
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-*/
-
-///////////////////////////////////////////////////////////////////
-// DummyMaterialEffectsUpdator.cxx, (c) ATLAS Detector software
-///////////////////////////////////////////////////////////////////
-
-// Trk include
-#include "TrkExTools/DummyMaterialEffectsUpdator.h"
-#include "TrkExInterfaces/IEnergyLossUpdator.h"
-#include "TrkExInterfaces/IMultipleScatteringUpdator.h"
-#include "TrkParameters/TrackParameters.h"
-#include "TrkEventPrimitives/ParamDefs.h"
-#include "TrkSurfaces/Surface.h"
-#include "TrkGeometry/Layer.h"
-#include "TrkGeometry/MaterialProperties.h"
-#include "TrkGeometry/AssociatedMaterial.h"
-#include "TrkGeometry/TrackingVolume.h"
-#include "TrkDetDescrInterfaces/IMaterialMapper.h"
-
-// constructor
-Trk::DummyMaterialEffectsUpdator::DummyMaterialEffectsUpdator(const std::string &t, const std::string &n,
-                                                              const IInterface *p) :
-  AthAlgTool(t, n, p),
-  m_validationMode(false),
-  m_validationDirectionSwitch(1),
-  m_validationDirection(Trk::alongMomentum),
-  m_materialMapper("Trk::MaterialMapper"){
-  declareInterface<IMaterialEffectsUpdator>(this);
-  declareProperty("ValidationMode", m_validationMode);
-  declareProperty("ValidationDirection", m_validationDirectionSwitch);
-  declareProperty("ValidationMaterialMapper", m_materialMapper);
-}
-
-// destructor
-Trk::DummyMaterialEffectsUpdator::~DummyMaterialEffectsUpdator() = default;
-
-// Athena standard methods
-// initialize
-StatusCode
-Trk::DummyMaterialEffectsUpdator::initialize() {
-  if (m_materialMapper.retrieve().isFailure()) {
-    ATH_MSG_FATAL("Failed to retrieve tool " << m_materialMapper);
-    return StatusCode::FAILURE;
-  }
-    ATH_MSG_INFO("Retrieved tool " << m_materialMapper);
-
-
-  // set the validation switch
-  m_validationDirection = (m_validationDirectionSwitch == 1) ? Trk::alongMomentum : Trk::oppositeMomentum;
-
-  ATH_MSG_INFO("initialize() successful");
-  return StatusCode::SUCCESS;
-}
-
-// finalize
-StatusCode
-Trk::DummyMaterialEffectsUpdator::finalize() {
-  ATH_MSG_INFO("finalize() successful");
-  return StatusCode::SUCCESS;
-}
-
-std::unique_ptr<Trk::TrackParameters>
-Trk::DummyMaterialEffectsUpdator::update(
-  const TrackParameters *parm,
-  const Layer &lay,
-  PropDirection,
-  ParticleHypothesis,
-  MaterialUpdateMode
-) const {
-  if (m_validationMode && parm) {
-    // get the numbers according
-    const Trk::TrackingVolume *tvol = lay.enclosingTrackingVolume();
-    const Trk::MaterialProperties *mprop = lay.fullUpdateMaterialProperties(*parm);
-
-    const Trk::MaterialProperties *updateProperties
-      = dynamic_cast<const Trk::MaterialProperties *>(mprop);
-
-    if (tvol && updateProperties) {
-      double correctionFactor = fabs(lay.surfaceRepresentation().pathCorrection(parm->position(), parm->momentum()));
-      // material properties
-      double pathInX0 = updateProperties->thicknessInX0();
-      double x0 = updateProperties->x0();
-      double l0 = updateProperties->l0();
-      double A = updateProperties->averageA();
-      double Z = updateProperties->averageZ();
-      double rho = updateProperties->averageRho();
-      // correct
-      pathInX0 *= fabs(correctionFactor);
-      // create the extended material step
-      Trk::AssociatedMaterial assMatHit(parm->position(),
-                                        pathInX0,
-                                        x0, l0, A, Z, rho,
-                                        correctionFactor,
-                                        lay.enclosingTrackingVolume(),
-                                        &lay);
-
-      // record it
-      m_materialMapper->recordMaterialHit(assMatHit, parm->momentum());
-    }else {
-      ATH_MSG_WARNING("update() ... dynamic cast to MaterialProperties failed!");
-    }
-  }
-  return std::unique_ptr<TrackParameters>(parm->clone());
-}
-
-std::unique_ptr<Trk::TrackParameters>
-Trk::DummyMaterialEffectsUpdator::preUpdate(
-  const TrackParameters *parm,
-  const Layer &lay,
-  PropDirection dir,
-  ParticleHypothesis,
-  MaterialUpdateMode
-) const {
-  if (m_validationMode && dir == m_validationDirection && parm) {
-    // get the numbers according
-    const Trk::TrackingVolume *tvol = lay.enclosingTrackingVolume();
-    // the preFactor
-    double preFactor = lay.preUpdateMaterialFactor(*parm, dir);
-    // return if the preFactor is too small
-    if (preFactor < 0.1) {
-      return std::unique_ptr<TrackParameters>(parm->clone());
-    }
-
-    double correctionFactor = fabs(lay.surfaceRepresentation().pathCorrection(parm->position(), parm->momentum()));
-    /** surfaceValidation is never used
-       bool  surfaceValidation = false;
-     **/
-    // get the material properties
-    const Trk::MaterialProperties *updateProperties = lay.fullUpdateMaterialProperties(*parm);
-
-    correctionFactor *= preFactor;
-
-    if (tvol && updateProperties) {
-      // material properties
-      double pathInX0 = updateProperties->thicknessInX0();
-      double x0 = updateProperties->x0();
-      double l0 = updateProperties->l0();
-      double A = updateProperties->averageA();
-      double Z = updateProperties->averageZ();
-      double rho = updateProperties->averageRho();
-      // correct
-      pathInX0 *= fabs(correctionFactor) * preFactor;
-      // create the extended material step
-      Trk::AssociatedMaterial assMatHit(parm->position(),
-                                        pathInX0,
-                                        x0, l0, A, Z, rho,
-                                        correctionFactor,
-                                        lay.enclosingTrackingVolume(),
-                                        &lay);
-      // record it
-      m_materialMapper->recordMaterialHit(assMatHit, parm->momentum());
-      // and if it was a reference material : the SurfaceValidation
-      /** sroe: surfaceValidation must be false at this point, so the following line is redundant **/
-      // if (surfaceValidation)  m_materialMapper->recordSurfaceHit(parm->localPosition(),assMatHit);
-    } else {
-      ATH_MSG_WARNING("preUpdate() ... dynamic cast to MaterialProperties failed!");
-    }
-  }
-  return std::unique_ptr<TrackParameters>(parm->clone());
-}
-
-std::unique_ptr<Trk::TrackParameters>
-Trk::DummyMaterialEffectsUpdator::postUpdate(
-  const TrackParameters &parm,
-  const Layer &lay,
-  PropDirection dir,
-  ParticleHypothesis,
-  MaterialUpdateMode
-) const {
-  if (m_validationMode && dir == m_validationDirection) {
-    const Trk::TrackingVolume *tvol = lay.enclosingTrackingVolume();
-
-    // get the quantities
-    double postFactor = lay.postUpdateMaterialFactor(parm, dir);
-
-    if (postFactor < 0.1) {
-      return nullptr;
-    }
-
-    // the correction Factor to the layer
-    double correctionFactor = fabs(lay.surfaceRepresentation().pathCorrection(parm.position(), parm.momentum()));
-    // get the material properties
-    const Trk::MaterialProperties *updateProperties = lay.fullUpdateMaterialProperties(parm);
-    correctionFactor *= postFactor;
-
-    if (tvol && updateProperties) {
-      // material properties
-      double pathInX0 = updateProperties->thicknessInX0();
-      double x0 = updateProperties->x0();
-      double l0 = updateProperties->l0();
-      double A = updateProperties->averageA();
-      double Z = updateProperties->averageZ();
-      double rho = updateProperties->averageRho();
-      // correct
-      pathInX0 *= fabs(correctionFactor);
-      // create the extended material step
-      Trk::AssociatedMaterial assMatHit(parm.position(),
-                                        pathInX0,
-                                        x0, l0, A, Z, rho,
-                                        correctionFactor,
-                                        lay.enclosingTrackingVolume(),
-                                        &lay);
-      // record it
-      m_materialMapper->recordMaterialHit(assMatHit, parm.momentum());
-    }else {
-      ATH_MSG_WARNING("postUpdate() ... dynamic cast to MaterialProperties failed!");
-    }
-  }
-  return std::unique_ptr<TrackParameters>(parm.clone());
-}
-
-// actual update method
-std::unique_ptr<Trk::TrackParameters>
-Trk::DummyMaterialEffectsUpdator::update(
-  const TrackParameters &parm,
-  const MaterialProperties &,
-  double,
-  PropDirection,
-  ParticleHypothesis,
-  MaterialUpdateMode
-) const {
-  return std::unique_ptr<TrackParameters>(parm.clone());
-}
-
-
diff --git a/Tracking/TrkExtrapolation/TrkExTools/src/components/TrkExTools_entries.cxx b/Tracking/TrkExtrapolation/TrkExTools/src/components/TrkExTools_entries.cxx
index c31296adb1f4aad2f14436b42094e6b144fb7bf6..ecca772c41c908614d4bccf92485de7a0604098b 100644
--- a/Tracking/TrkExtrapolation/TrkExTools/src/components/TrkExTools_entries.cxx
+++ b/Tracking/TrkExtrapolation/TrkExTools/src/components/TrkExTools_entries.cxx
@@ -1,7 +1,6 @@
 #include "TrkExTools/Extrapolator.h"
 #include "TrkExTools/Navigator.h"
 #include "TrkExTools/MaterialEffectsUpdator.h"
-#include "TrkExTools/DummyMaterialEffectsUpdator.h"
 #include "TrkExTools/EnergyLossUpdator.h"
 #include "TrkExTools/MultipleScatteringUpdator.h"
 #include "TrkExTools/TimedExtrapolator.h"
@@ -12,7 +11,6 @@ using namespace Trk;
 DECLARE_COMPONENT( Extrapolator )
 DECLARE_COMPONENT( Navigator )
 DECLARE_COMPONENT( MaterialEffectsUpdator )
-DECLARE_COMPONENT( DummyMaterialEffectsUpdator )
 DECLARE_COMPONENT( EnergyLossUpdator )
 DECLARE_COMPONENT( MultipleScatteringUpdator )
 DECLARE_COMPONENT( NIMatEffUpdator )
diff --git a/Tracking/TrkExtrapolation/TrkExUnitTests/python/TrkExUnitTestsConfig.py b/Tracking/TrkExtrapolation/TrkExUnitTests/python/TrkExUnitTestsConfig.py
index 73bdd41f8b2edf39cf3d8f5aafc71c875303deb1..fdd20a82413b6e5ed76f1f62e0c01609b0a856c2 100644
--- a/Tracking/TrkExtrapolation/TrkExUnitTests/python/TrkExUnitTestsConfig.py
+++ b/Tracking/TrkExtrapolation/TrkExUnitTests/python/TrkExUnitTestsConfig.py
@@ -41,35 +41,3 @@ def ExtrapolationEngineTestCfg(configFlags, name = "ExtrapolationEngineTest", **
   result.addEventAlgo(extrapolationTest)
   
   return result
-
-def ExtrapolationEngineTestITkCfg(configFlags, name = "ExtrapolationEngineTest", **kwargs ) :
-  from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator 
-  from AthenaConfiguration.ComponentFactory import CompFactory
-  
-  result=ComponentAccumulator()  
-
-  from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
-  result.merge(TrackingGeometrySvcCfg(configFlags))
-  
-  histSvc = CompFactory.THistSvc(Output = ["val DATAFILE='ExtrapolationEngineTestITk.root' TYPE='ROOT' OPT='RECREATE'"])
-  result.addService( histSvc )
-  
-  from AtlasGeoModel.GeoModelConfig import GeoModelCfg
-  gmsAcc = GeoModelCfg(configFlags)
-  result.merge(gmsAcc)
-
-  from TrkConfig.AtlasExtrapolationEngineConfig import AtlasExtrapolationEngineCfg
-  extrapAcc = AtlasExtrapolationEngineCfg(configFlags)
-  extrapolationEngine = extrapAcc.getPrimary()
-  result.merge(extrapAcc)
-  kwargs["ExtrapolationEngine"] = extrapolationEngine
-
-  posMomAcc, posMomWriter = PositionMomentumWriterCfg(configFlags)
-  result.merge(posMomAcc)
-  kwargs.setdefault('PositionMomentumWriter', posMomWriter)
-     
-  Trk__ExtrapolationEngineTest = CompFactory.Trk.ExtrapolationEngineTest
-  extrapolationTest = Trk__ExtrapolationEngineTest(name, **kwargs)
-  result.addEventAlgo(extrapolationTest)
-  
-  return result
diff --git a/Tracking/TrkExtrapolation/TrkExUnitTests/scripts/RunExEngineTestITk.py b/Tracking/TrkExtrapolation/TrkExUnitTests/scripts/RunExEngineTestITk.py
index d4f53f80f8df16d82a34b85b7a8c173d0a20256b..3281dee8fd2f9781b84bca7e5fa0f50c629752e4 100644
--- a/Tracking/TrkExtrapolation/TrkExUnitTests/scripts/RunExEngineTestITk.py
+++ b/Tracking/TrkExtrapolation/TrkExUnitTests/scripts/RunExEngineTestITk.py
@@ -11,15 +11,14 @@ Configurable.configurableRun3Behavior = True
 ConfigFlags.Input.isMC             = True
 
 ConfigFlags.GeoModel.useLocalGeometry = False
-detectors = [
-  "HGTD",
-  "ITkPixel",
-  "ITkStrip",
-  "Bpipe"
-]
-
-from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
-setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
+if ConfigFlags.GeoModel.useLocalGeometry:
+  detectors = [
+    "ITkPixel",
+    "ITkStrip",
+    "Bpipe"
+  ]
+  from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
+  setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
 
 ConfigFlags.GeoModel.AtlasVersion = "ATLAS-P2-ITK-24-00-00"
 ConfigFlags.IOVDb.GlobalTag = "OFLCOND-SIM-00-00-00"
@@ -42,32 +41,32 @@ ConfigFlags.dump()
 
 cfg=MainServicesCfg(ConfigFlags)    
 
-from TrkExUnitTests.TrkExUnitTestsConfig import ExtrapolationEngineTestITkCfg
-topoAcc=ExtrapolationEngineTestITkCfg(ConfigFlags,
-                                      NumberOfTestsPerEvent   = 100,
-                                      # parameters mode: 0 - neutral tracks, 1 - charged particles 
-                                      ParametersMode          = 1,
-                                      # do the full test backwards as well            
-                                      BackExtrapolation       = False,
-                                      # Smear the production vertex - standard primary vertex paramters
-                                      SmearOrigin             = True,
-                                      SimgaOriginD0           = 2./3.,
-                                      SimgaOriginZ0           = 50.,
-                                      # pT range for testing
-                                      PtMin                   = 1000,
-                                      PtMax                   = 1000,
-                                      # The test range in Eta                      
-                                      EtaMin                  =  -5.,
-                                      EtaMax                  =   5.,
-                                      # Configure how you wanna run                  
-                                      CollectSensitive        = True,
-                                      CollectPassive          = True,
-                                      CollectBoundary         = True,
-                                      CollectMaterial         = True,
-                                      UseHGTD                 = ConfigFlags.Detector.GeometryHGTD,
-                                      # the path limit to test                        
-                                      PathLimit               = -1.,
-                                      )
+from TrkExUnitTests.TrkExUnitTestsConfig import ExtrapolationEngineTestCfg
+topoAcc=ExtrapolationEngineTestCfg(ConfigFlags,
+                                   NumberOfTestsPerEvent   = 100,
+                                   # parameters mode: 0 - neutral tracks, 1 - charged particles
+                                   ParametersMode          = 1,
+                                   # do the full test backwards as well
+                                   BackExtrapolation       = False,
+                                   # Smear the production vertex - standard primary vertex paramters
+                                   SmearOrigin             = True,
+                                   SimgaOriginD0           = 2./3.,
+                                   SimgaOriginZ0           = 50.,
+                                   # pT range for testing
+                                   PtMin                   = 1000,
+                                   PtMax                   = 1000,
+                                   # The test range in Eta
+                                   EtaMin                  =  -5.,
+                                   EtaMax                  =   5.,
+                                   # Configure how you wanna run
+                                   CollectSensitive        = True,
+                                   CollectPassive          = True,
+                                   CollectBoundary         = True,
+                                   CollectMaterial         = True,
+                                   UseHGTD                 = ConfigFlags.Detector.GeometryHGTD,
+                                   # the path limit to test
+                                   PathLimit               = -1.,
+                                   )
 
 cfg.merge(topoAcc)
 
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h
index 91a6991ce9acf49c6e38c92d7109b3714ad74daf..dcbbdf3fb7e7cd9e87dcd4e23e9f95dd72c5c75f 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h
+++ b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/KalmanFitter.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 //////////////////////////////////////////////////////////////////
@@ -33,6 +33,13 @@
 #include "TrkFitterInterfaces/ITrackBreakpointAnalyser.h"
 #include "TrkFitterInterfaces/IKalmanPiecewiseAnnealingFilter.h"
 
+#include "TrkValInterfaces/IValidationNtupleTool.h"
+#include "TrkDetDescrInterfaces/IAlignableSurfaceProvider.h"
+#include "TrkExInterfaces/IExtrapolator.h"
+#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
+#include "TrkToolInterfaces/IUpdator.h"
+#include "TrkFitterInterfaces/IMeasurementRecalibrator.h"
+
 #include "GeoPrimitives/GeoPrimitives.h"
 #include <array>
 #include <memory>
@@ -46,14 +53,7 @@ namespace Trk {
   class PerigeeSurface;
   class FitQuality;
 
-  class IValidationNtupleTool;   // validation tool to write intermediate results to ntuple
-  class IAlignableSurfaceProvider; // tool to enable Kalman-alignment
-    
-  class IExtrapolator;           // Extrapolation Tool
-  class IUpdator;                // If class for Estimator updating
-  class IRIO_OnTrackCreator;     // Interface for creation of ROT
   class ProtoTrajectoryUtility;  // helper to analyse current trajectory
-  class IMeasurementRecalibrator;// steering if and which ROTs to re-do
   class TrackFitInputPreparator; // helper to fill internal trajectories
   typedef std::vector<Trk::ProtoTrackStateOnSurface> Trajectory;
   typedef DataVector<const TrackStateOnSurface>::const_iterator TS_iterator;
@@ -201,31 +201,44 @@ private:
     mutable MsgStream             m_log;         //!< msgstream as private member (-> speed)
 
     //! extrapolation tool: does propagation and applies material effects
-    ToolHandle< IExtrapolator >             m_extrapolator;
+    PublicToolHandle< IExtrapolator >             m_extrapolator
+      {this, "ExtrapolatorHandle", "Trk::Extrapolator/AtlasExtrapolator", "Extrapolation tool for transporting track pars and handling material effects"};
     //! measurement updator: implements the Kalman filtering formulae
-    ToolHandle< IUpdator >                  m_updator;
+    ToolHandle< IUpdator >                  m_updator
+      {this, "MeasurementUpdatorHandle", "Trk::KalmanUpdator/KalmanUpdator", "Tool to perform measurement update and chi2 calculation"};
     //! Trk::RIO_OnTrack creation: re-calibrates hits (special interface/option only)
-    ToolHandle< IRIO_OnTrackCreator >       m_ROTcreator;
+    ToolHandle< IRIO_OnTrackCreator >       m_ROTcreator
+      {this, "RIO_OnTrackCreatorHandle", "Trk::RIO_OnTrackCreator/RIO_OnTrackCreator", "Tool to create RIO_OnTrack out of PrepRawData input"};
     //! dynamic noise adjustment tool: adds momentum noise for electron brem
-    ToolHandle< IDynamicNoiseAdjustor >     m_dynamicNoiseAdjustor;
+    ToolHandle< IDynamicNoiseAdjustor >     m_dynamicNoiseAdjustor
+      {this, "DynamicNoiseAdjustorHandle", "", "Tool to handle brem as dynamically adjusted q/p noise"};
     //! dynamic noise adjustment tool: confirm brem breakpoint or not
-    ToolHandle< ITrackBreakpointAnalyser >  m_brempointAnalyser;
+    ToolHandle< ITrackBreakpointAnalyser >  m_brempointAnalyser
+      {this, "BrempointAnalyserHandle", "", "Tool to confirm if DNA activity is due to brem or not"};
     //! tool to extend KF to be Kalman-Alignment-Fitter
-    ToolHandle< IAlignableSurfaceProvider > m_alignableSfProvider;
+    ToolHandle< IAlignableSurfaceProvider > m_alignableSfProvider
+      {this, "AlignableSurfaceProviderHandle", "", "Tool to replace measurement surface by an alignable one"};
     //! tool to remake ROTs if configured
-    ToolHandle< IMeasurementRecalibrator >  m_recalibrator;
+    ToolHandle< IMeasurementRecalibrator >  m_recalibrator
+      {this, "RecalibratorHandle", ""};
     //! tool to do L/R driftcircle solving
-    ToolHandle< IKalmanPiecewiseAnnealingFilter > m_internalDAF;
+    ToolHandle< IKalmanPiecewiseAnnealingFilter > m_internalDAF
+      {this, "InternalDAFHandle", ""};
     //! forward filtering tool: code structuring
-    ToolHandle< IForwardKalmanFitter >      m_forwardFitter;
+    ToolHandle< IForwardKalmanFitter >      m_forwardFitter
+      {this, "ForwardKalmanFitterHandle", "Trk::ForwardKalmanFitter/FKF", "Tool for running the forward filter along the internal trajectory"};
     //! backward filtering and smoothing tool: code structuring
-    ToolHandle< IKalmanSmoother >           m_smoother;
+    ToolHandle< IKalmanSmoother >           m_smoother
+      {this, "KalmanSmootherHandle", "Trk::KalmanSmoother/BKS", "Tool for performing the backward smoothing on the internal trajectory"};
     //! outlier logic tool: track quality and cleaning
-    ToolHandle< IKalmanOutlierLogic >       m_outlierLogic;
+    ToolHandle< IKalmanOutlierLogic >       m_outlierLogic
+      {this, "KalmanOutlierLogicHandle", "Trk::KalmanOutlierLogic/KOL", "Tool for fit quality analysis and outlier flagging"};
     //! outlier logic tool: outlier recovery and tuning
-    ToolHandle< IKalmanOutlierLogic >       m_outlierRecovery;
+    ToolHandle< IKalmanOutlierLogic >       m_outlierRecovery
+      {this, "KalmanOutlierRecoveryHandle", "Trk::KalmanOutlierRecovery_InDet/KOL_RecoveryID", "Tool for fit quality analysis and outlier recovery"};
     //! performance/error validation tool
-    ToolHandle< IValidationNtupleTool >     m_FitterValidationTool;
+    ToolHandle< IValidationNtupleTool >     m_FitterValidationTool
+      {this, "FitterValidationToolHandle", "", "Tool for fitter validation (writes intermediate results to ntuple)"};
 
     // the settable job options
     bool                          m_option_enforceSorting;
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/MeasRecalibSteeringTool.h b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/MeasRecalibSteeringTool.h
index 79f3dea90b3722d13e1aca88f92ed73b7238f7b7..a5b9255441eda4a9d5e6d690b5c1e96bd8edcbb9 100644
--- a/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/MeasRecalibSteeringTool.h
+++ b/Tracking/TrkFitter/TrkKalmanFitter/TrkKalmanFitter/MeasRecalibSteeringTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -13,6 +13,7 @@
 #include "GaudiKernel/ToolHandle.h"
 #include "TrkFitterInterfaces/IMeasurementRecalibrator.h"
 #include "TrkParameters/TrackParameters.h"
+#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
 
 namespace Trk 
 {
@@ -20,7 +21,6 @@ namespace Trk
   class MeasurementBase;
   class RIO_OnTrack;
   class MeasurementTypeID;
-  class IRIO_OnTrackCreator;
 
   /** @class MeasRecalibSteeringTool
       @brief tool to repeat the calibration PrepRawData to RIO_OnTrack on an
@@ -59,13 +59,17 @@ namespace Trk
     private:
       
       // tool handles for a whole zoo of ROT creators
-      ToolHandle< IRIO_OnTrackCreator >   m_rotCreator;
-      ToolHandle< IRIO_OnTrackCreator >   m_broadPixelClusterCreator;
-      ToolHandle< IRIO_OnTrackCreator >   m_broadSctClusterCreator;
-      ToolHandle< IRIO_OnTrackCreator >   m_trtDriftCircleCreator;
-      ToolHandle< IRIO_OnTrackCreator >   m_trtTubeHitCreator;
+      ToolHandle< IRIO_OnTrackCreator >   m_rotCreator
+	{this, "CommonRotCreator", "Trk::RIO_OnTrackCreator/InDetRefitRotCreator"};
+      ToolHandle< IRIO_OnTrackCreator >   m_broadPixelClusterCreator
+	{this, "BroadPixelClusterOnTrackTool", "InDet::PixelClusterOnTrackTool/InDetBroadPixelClusterOnTrackTool"};
+      ToolHandle< IRIO_OnTrackCreator >   m_broadSctClusterCreator
+	{this, "BroadSCT_ClusterOnTrackTool", "InDet::SCT_ClusterOnTrackTool/InDetBroadSCT_ClusterOnTrackTool"};
+      ToolHandle< IRIO_OnTrackCreator >   m_trtDriftCircleCreator
+	{this, "TRT_DriftCircleOnTrackTool", "InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"};
+      ToolHandle< IRIO_OnTrackCreator >   m_trtTubeHitCreator
+	{this, "TRT_StrawTubeOnTrackTool", "InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_StrawTubeOnTrackTool"};
       bool                                m_haveInDetTools;
-      //bool                                m_haveMuonTools;
 
       //! Helper to detect type of sub-detector
       const AtlasDetectorID*            m_idHelper;
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
index 8e789008fccea0e364bbc305843195c710154cb9..0e3c49736f9e2edcad640ed077833cc404bab4df 100755
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/KalmanFitter.cxx
@@ -27,12 +27,6 @@
 #include "TrkTrack/TrackInfo.h"
 #include "TrkParameters/TrackParameters.h"
 
-#include "TrkValInterfaces/IValidationNtupleTool.h"
-#include "TrkDetDescrInterfaces/IAlignableSurfaceProvider.h"
-#include "TrkExInterfaces/IExtrapolator.h"
-#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
-#include "TrkToolInterfaces/IUpdator.h"
-#include "TrkFitterInterfaces/IMeasurementRecalibrator.h"
 #include "TrkEventUtils/PrepRawDataComparisonFunction.h"
 #include "TrkEventUtils/MeasurementBaseComparisonFunction.h"
 #include "TrkEventUtils/IdentifierExtractor.h"
@@ -52,19 +46,6 @@ Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n,
                                 const IInterface* p) :
   AthAlgTool (t,n,p),
   m_log(msgSvc(), n),
-  m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"),
-  m_updator("Trk::KalmanUpdator/KalmanUpdator"),
-  m_ROTcreator("Trk::RIO_OnTrackCreator/RIO_OnTrackCreator"),
-  m_dynamicNoiseAdjustor(""),
-  m_brempointAnalyser(""),
-  m_alignableSfProvider(""),
-  m_recalibrator(""),
-  m_internalDAF(), // or "Trk::KalmanPiecewiseAnnealingFilter/KalmanInternalDAF"
-  m_forwardFitter("Trk::ForwardKalmanFitter/FKF"),
-  m_smoother("Trk::KalmanSmoother/BKS"),
-  m_outlierLogic("Trk::KalmanOutlierLogic/KOL"),
-  m_outlierRecovery("Trk::KalmanOutlierRecovery_InDet/KOL_RecoveryID"),
-  m_FitterValidationTool(""),
   m_option_callValidationToolForFailedFitsOnly(false),
   m_option_sortingRefPoint{0.,0.,0.},
   m_callValidationTool(false),
@@ -85,32 +66,6 @@ Trk::KalmanFitter::KalmanFitter(const std::string& t,const std::string& n,
 
   m_trajectory.reserve(100);
 
-  // --- tools used by KalmanFitter, passed as ToolHandles
-  declareProperty("ExtrapolatorHandle",m_extrapolator,
-                  "Extrapolation tool for transporting track pars and handling material effects");
-  declareProperty("RIO_OnTrackCreatorHandle",m_ROTcreator,
-                  "Tool to create RIO_OnTrack out of PrepRawData input");
-  declareProperty("MeasurementUpdatorHandle",m_updator,
-                  "Tool to perform measurement update and chi2 calculation");
-  declareProperty("DynamicNoiseAdjustorHandle",m_dynamicNoiseAdjustor,
-                  "Tool to handle brem as dynamically adjusted q/p noise");
-  declareProperty("BrempointAnalyserHandle",m_brempointAnalyser,
-                  "Tool to confirm if DNA activity is due to brem or not");
-  declareProperty("AlignableSurfaceProviderHandle",m_alignableSfProvider,
-                  "Tool to replace measurement surface by an alignable one");
-  declareProperty("RecalibratorHandle", m_recalibrator);
-  declareProperty("InternalDAFHandle", m_internalDAF);
-  declareProperty("ForwardKalmanFitterHandle",m_forwardFitter,
-                  "Tool for running the forward filter along the internal trajectory");
-  declareProperty("KalmanSmootherHandle",m_smoother,
-                  "Tool for performing the backward smoothing on the internal trajectory");
-  declareProperty("KalmanOutlierLogicHandle",m_outlierLogic,
-                  "Tool for fit quality analysis and outlier flagging");
-  declareProperty("KalmanOutlierRecoveryHandle",m_outlierRecovery,
-                  "Tool for fit quality analysis and outlier recovery");
-  declareProperty("FitterValidationToolHandle", m_FitterValidationTool,
-                  "Tool for fitter validation (writes intermediate results to ntuple)");
-
   // -- job options - do NOT modify defaults to achieve detector-specific tuning!
   declareProperty("DoDNAForElectronsOnly",m_doDNAForElectronsOnly,
 		  "for new ID bremfit: DNA active only for tracks with particleHypothesis electron");
diff --git a/Tracking/TrkFitter/TrkKalmanFitter/src/MeasRecalibSteeringTool.cxx b/Tracking/TrkFitter/TrkKalmanFitter/src/MeasRecalibSteeringTool.cxx
index 85ae0bd130a3196594e86f975e59a1ac2c8d8102..c6e29b85d285c365352961a5e0f65da722d47bab 100644
--- a/Tracking/TrkFitter/TrkKalmanFitter/src/MeasRecalibSteeringTool.cxx
+++ b/Tracking/TrkFitter/TrkKalmanFitter/src/MeasRecalibSteeringTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -14,7 +14,6 @@
 #include "TrkEventUtils/RoT_Extractor.h"
 #include "TrkEventUtils/MeasurementTypeID.h"
 #include "TrkMeasurementBase/MeasurementBase.h"
-#include "TrkToolInterfaces/IRIO_OnTrackCreator.h"
 
 using namespace Trk;
 using namespace Trk::TrackState;
@@ -26,24 +25,11 @@ Trk::MeasRecalibSteeringTool::MeasRecalibSteeringTool(const std::string& t,
 			  const IInterface*  p )
   :
   AthAlgTool(t,n,p),
-  m_rotCreator("Trk::RIO_OnTrackCreator/InDetRefitRotCreator"),
-  m_broadPixelClusterCreator("InDet::PixelClusterOnTrackTool/InDetBroadPixelClusterOnTrackTool"),
-  m_broadSctClusterCreator("InDet::SCT_ClusterOnTrackTool/InDetBroadSCT_ClusterOnTrackTool"),
-  m_trtDriftCircleCreator("InDet::TRT_DriftCircleOnTrackTool/TRT_DriftCircleOnTrackTool"),
-  m_trtTubeHitCreator("InDet::TRT_DriftCircleOnTrackNoDriftTimeTool/TRT_StrawTubeOnTrackTool"),
   m_haveInDetTools(true),
-  //m_haveMuonTools(false),
   m_idHelper(nullptr),
   m_mbHelper(nullptr)
 {
   declareInterface<IMeasurementRecalibrator>(this);
-
-  //  template for property decalration
-  declareProperty("CommonRotCreator",             m_rotCreator);
-  declareProperty("BroadPixelClusterOnTrackTool", m_broadPixelClusterCreator);
-  declareProperty("BroadSCT_ClusterOnTrackTool",  m_broadSctClusterCreator);
-  declareProperty("TRT_DriftCircleOnTrackTool",   m_trtDriftCircleCreator);
-  declareProperty("TRT_StrawTubeOnTrackTool",     m_trtTubeHitCreator);
 }
 
 //================ Destructor =================================================
diff --git a/Tracking/TrkG4Components/TrkG4UserActions/python/TrkG4UserActionsConfigNew.py b/Tracking/TrkG4Components/TrkG4UserActions/python/TrkG4UserActionsConfigNew.py
index 4c3962d5cd51dce5bb9deb1f71abe3aea7ec664d..321598f8b9878ce703ce908c360ffd30c6ff8ac0 100644
--- a/Tracking/TrkG4Components/TrkG4UserActions/python/TrkG4UserActionsConfigNew.py
+++ b/Tracking/TrkG4Components/TrkG4UserActions/python/TrkG4UserActionsConfigNew.py
@@ -31,7 +31,54 @@ def MaterialStepRecorderUserActionSvcCfg(configFlags, name="G4UA::MaterialStepRe
   actionList = (defaultActions + MaterialStepRecorderAction)
 
   #Setting up UserActionsService
-  kwargs.setdefault("UserActionTools",actionList)
-  result.addService(CompFactory.G4UA.UserActionSvc(name, **kwargs))    
+  ##We clear it here because UserActionsTools also wants kwargs, different
+  ##from the tool above - probably this can be improved...
+  kwargs_UATools = {}
+  kwargs_UATools.setdefault("UserActionTools",actionList)
+  result.addService(CompFactory.G4UA.UserActionSvc(name,**kwargs_UATools))    
     
   return result
+
+def MaterialStepRecorder(configFlags, name="G4UA::ISFFullUserActionSvc", **kwargs):
+  
+  from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+  from AthenaConfiguration.ComponentFactory import CompFactory
+
+  result = ComponentAccumulator()
+  #Setting up the CA
+  actionAcc = ComponentAccumulator()
+  actions = []
+  actions += [actionAcc.popToolsAndMerge(MaterialStepRecorderCfg(configFlags,**kwargs))]
+  actionAcc.setPrivateTools(actions)
+  MaterialStepRecorderAction = result.popToolsAndMerge(actionAcc)
+  
+  actionList = MaterialStepRecorderAction
+  #We clear it here because UserActionsTools also wants kwargs, different
+  #from the tool above - probably this caq be improved...
+  kwargs_UATools = {}
+  kwargs_UATools.setdefault("UserActionTools",actionList)
+  result.addService(CompFactory.G4UA.UserActionSvc(name,**kwargs_UATools))
+  
+  AthenaOutputStream=CompFactory.AthenaOutputStream
+  AthenaOutputStreamTool=CompFactory.AthenaOutputStreamTool
+  writingTool = AthenaOutputStreamTool( "MaterialStepCollectionStreamTool" )
+  
+  outputStream = AthenaOutputStream(name = "MaterialStepCollectionStream",
+                                    WritingTool = writingTool,
+                                    ItemList=['EventInfo#*', 'Trk::MaterialStepCollection#*'],
+                                    MetadataItemList = [ "EventStreamInfo#MaterialStepCollectionStream", "IOVMetaDataContainer#*" ],
+                                    OutputFile = "MaterialStepCollection.root")
+  
+  StoreGateSvc=CompFactory.StoreGateSvc
+  result.addService(StoreGateSvc("MetaDataStore"))
+  outputStream.MetadataStore = result.getService("MetaDataStore")
+  
+  MakeEventStreamInfo=CompFactory.MakeEventStreamInfo
+  streamInfoTool = MakeEventStreamInfo( "MaterialStepCollectionStream_MakeEventStreamInfo" )
+  streamInfoTool.Key = "MaterialStepCollectionStream"
+  streamInfoTool.EventInfoKey = "EventInfo"
+  outputStream.HelperTools.append(streamInfoTool)
+      
+  result.addEventAlgo(outputStream)
+  
+  return result
diff --git a/Tracking/TrkG4Components/TrkG4UserActions/python/__init__.py b/Tracking/TrkG4Components/TrkG4UserActions/python/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e5636cdfecd3f0525c4210d2725e3bf913307f14 100644
--- a/Tracking/TrkG4Components/TrkG4UserActions/python/__init__.py
+++ b/Tracking/TrkG4Components/TrkG4UserActions/python/__init__.py
@@ -0,0 +1,5 @@
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+
+from .TrkG4UserActionsConfigNew import MaterialStepRecorder
+
+__all__ = ['MaterialStepRecorder']
diff --git a/Tracking/TrkG4Components/TrkG4UserActions/scripts/RunGeantinoStepRecordingITk.py b/Tracking/TrkG4Components/TrkG4UserActions/scripts/RunGeantinoStepRecordingITk.py
index 4ec2d962faeed7b1e244ae9c822cbfd4cd2e3ae9..2bc2b4168d3f61567c08f01f4889851be45b5510 100755
--- a/Tracking/TrkG4Components/TrkG4UserActions/scripts/RunGeantinoStepRecordingITk.py
+++ b/Tracking/TrkG4Components/TrkG4UserActions/scripts/RunGeantinoStepRecordingITk.py
@@ -36,7 +36,7 @@ parser.add_argument("--skipEvents",default=0, type=int,
 parser.add_argument("--geometrytag",default="ATLAS-P2-ITK-24-00-00", type=str,
                     help="The geometry tag to use")
 parser.add_argument("--inputevntfile",
-                    default="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/InDetSLHC_Example/inputs/pgun_2M_10GeV_geantinos_Eta6_v2_EVNT.root",
+                    default="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/PhaseIIUpgrade/EVNT/mc15_14TeV.singlegeantino_E10GeV_etaFlatnp0_6.5M.evgen.EVNT.pool.root",
                     help="The input EVNT file to use")
 parser.add_argument("--outputhitsfile",default="myHITS.pool.root", type=str,
                     help="The output HITS filename")
@@ -70,7 +70,7 @@ ConfigFlags.GeoModel.Align.Dynamic = False
 ConfigFlags.Exec.SkipEvents = args.skipEvents
 
 from AthenaConfiguration.DetectorConfigFlags import setupDetectorsFromList
-detectors = args.detectors if 'detectors' in args and args.detectors else ['ITkPixel', 'ITkStrip']
+detectors = args.detectors if 'detectors' in args and args.detectors else ['ITkPixel', 'ITkStrip', 'HGTD']
 detectors.append('Bpipe')  # always run with beam pipe
 setupDetectorsFromList(ConfigFlags, detectors, toggle_geometry=True)
   
@@ -98,6 +98,18 @@ acc.merge(PoolWriteCfg(ConfigFlags))
 from BeamEffects.BeamEffectsAlgConfig import BeamEffectsAlgCfg
 acc.merge(BeamEffectsAlgCfg(ConfigFlags))
 
+beamcond = acc.getCondAlgo("BeamSpotCondAlg")
+
+beamcond.useDB=False
+beamcond.posX=0.0
+beamcond.posY=0.0
+beamcond.posZ=0.0
+beamcond.sigmaX=0.0
+beamcond.sigmaY=0.0
+beamcond.sigmaZ=0.0
+beamcond.tiltX=0.0
+beamcond.tiltY=0.0
+
 kwargs = {}
 
 svcName = "G4UA::MaterialStepRecorderUserActionSvc"
diff --git a/Tracking/TrkG4Components/TrkG4UserActions/src/MaterialStepRecorder.cxx b/Tracking/TrkG4Components/TrkG4UserActions/src/MaterialStepRecorder.cxx
index 5c0dda4435a83568416ac362c002fa3f93501b9a..5b692255197257f1eac4701fce678bbaee248684 100644
--- a/Tracking/TrkG4Components/TrkG4UserActions/src/MaterialStepRecorder.cxx
+++ b/Tracking/TrkG4Components/TrkG4UserActions/src/MaterialStepRecorder.cxx
@@ -101,7 +101,7 @@ namespace G4UA
     // G4LogicalVolume
     G4LogicalVolume *lv= touchHist ? touchHist->GetVolume()->GetLogicalVolume() : nullptr;
     G4Material *mat    = lv ? lv->GetMaterial() : nullptr;
-
+    
     std::vector<unsigned char> elements;
     std::vector<unsigned char> fractions;
 
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.cxx
index fbe5865e984901d6c438d8ca51b357184e3453c4..55430402faf9628e76a92cc1541f32a193c89294 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.cxx
@@ -1,9 +1,8 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "AmbiguityProcessorBase.h"
-#include "TrackScoringTool.h"
 #include "AmbiguityProcessorUtility.h"
 
 #include "GaudiKernel/ToolVisitor.h"
@@ -13,8 +12,7 @@ namespace Trk {
   AmbiguityProcessorBase::AmbiguityProcessorBase(const std::string& t, const std::string& n, const IInterface*  p ):
     AthAlgTool(t,n,p), 
     m_etaBounds{0.8, 1.6, 2.5, 4.0}, 
-    m_stat(m_etaBounds),
-    m_scoringTool("Trk::TrackScoringTool/TrackScoringTool"){
+    m_stat(m_etaBounds){
       declareProperty("ObserverTool", m_observerTool, "track observer tool");
 }
   //
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.h
index 7598c27a5c2da475da1c00418af018365d8e0668..6985c4200e3a9ffc485d6a37c9f7c7bb9f2d0e51 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.h
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/AmbiguityProcessorBase.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef AmbiguityProcessorBase_h
@@ -15,6 +15,7 @@
 #include "TrkEventPrimitives/TrackScore.h"
 #include "TrkEventUtils/ClusterSplitProbabilityContainer.h"
 #include "TrkValInterfaces/ITrkObserverTool.h"
+#include "TrackScoringTool.h"
 #include "AmbiguityProcessorUtility.h"
 
 #include <vector>
@@ -26,7 +27,6 @@
 
 namespace Trk {
   //fwd declare
-  class ITrackScoringTool;
   class Track;
   class PRDtoTrackMap;
 
@@ -126,7 +126,7 @@ namespace Trk {
     /**Scoring tool
        This tool is used to 'score' the tracks, i.e. to quantify what a good track is.
        @todo The actual tool that is used should be configured through job options*/
-    ToolHandle<ITrackScoringTool> m_scoringTool;
+    ToolHandle<ITrackScoringTool> m_scoringTool{this, "ScoringTool", "", "track scoring tool"};
     /**Observer tool      This tool is used to observe the tracks and their 'score' */
     PublicToolHandle<Trk::ITrkObserverTool> m_observerTool{this, "TrackObserverTool", "", "track observer within ambiguity solver"};
     ToolHandle<Trk::IExtendedTrackSummaryTool> m_trackSummaryTool{this, "TrackSummaryTool", "InDetTrackSummaryToolNoHoleSearch"};
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
index d01f2cb8ec9237e6ae9595c4c31dc3ad7ec9bd49..88f0714edea3f2577f4a4f005872e92b6c9ce45e 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "DenseEnvironmentsAmbiguityProcessorTool.h"
@@ -39,12 +39,12 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::checkTrack( const Trk::Track *trac
 
 //==================================================================================================
 Trk::DenseEnvironmentsAmbiguityProcessorTool::DenseEnvironmentsAmbiguityProcessorTool(const std::string& t, 
-                                const std::string& n,
-                                const IInterface*  p )
+										      const std::string& n,
+										      const IInterface*  p )
   :
   AmbiguityProcessorBase(t,n,p),
-  m_extrapolatorTool("Trk::Extrapolator/AtlasExtrapolator"),
-  m_selectionTool("InDet::InDetDenseEnvAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool"){
+  m_fitterTool(this),
+  m_extrapolatorTool("Trk::Extrapolator/AtlasExtrapolator"){
   // statitics stuff
 
   m_fitterTool.push_back("Trk::KalmanFitter/InDetTrackFitter");
@@ -52,8 +52,6 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::DenseEnvironmentsAmbiguityProcesso
   declareInterface<ITrackAmbiguityProcessorTool>(this);
   declareProperty("RefitPrds"            , m_refitPrds          = true); //  True to allow for updated NN information to be taken into account
   declareProperty("MatEffects"           , m_matEffects         = 3); // pion
-  declareProperty("ScoringTool"          , m_scoringTool);
-  declareProperty("SelectionTool"        , m_selectionTool);
   declareProperty("Fitter"               , m_fitterTool );
   declareProperty("TrackExtrapolator"    , m_extrapolatorTool);
   declareProperty("SuppressHoleSearch"   , m_suppressHoleSearch = false);
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h
index e656a2e43e6e9d670b10b1a83cd3394d4bca1ee7..e9b51ce2fc162fbaa89f5ac41ece92c37036e4be 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef DenseEnvironmentsAmbiguityProcessorTool_H
@@ -105,7 +105,8 @@ namespace Trk {
 
     /** selection tool - here the decision which hits remain on a track and
         which are removed are made */
-    ToolHandle<IAmbiTrackSelectionTool> m_selectionTool;
+    ToolHandle<IAmbiTrackSelectionTool> m_selectionTool
+      {this, "SelectionTool", "InDet::InDetDenseEnvAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool"};
 
     /**Observer tool      This tool is used to observe the tracks and their 'score' */
     PublicToolHandle<Trk::ITrkObserverTool> m_observerToolWriter{this, "TrackObserverToolWriter", "", "track observer writer within ambiguity solver"};
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx
index dcb2217f0570abd6b3fe0fadb4ba6f790caea4fd..f6a571bc7b870f365cb2bef777326eeb0653dfec 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx
@@ -9,7 +9,6 @@
 #include "TrkParameters/TrackParameters.h"
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
 #include "TrkTrack/TrackInfo.h"
-#include "InDetRecToolInterfaces/IPixelClusterSplitProbTool.h"
 #include "TrkTrackSummary/TrackSummary.h"
 
 #include <map>
@@ -27,15 +26,11 @@ Trk::DenseEnvironmentsAmbiguityScoreProcessorTool::DenseEnvironmentsAmbiguitySco
                                 const IInterface*  p )
   :
   AthAlgTool(t,n,p),
-  m_scoringTool("Trk::TrackScoringTool/TrackScoringTool"), 
-  m_splitProbTool("InDet::NnPixelClusterSplitProbTool/NnPixelClusterSplitProbTool"),
   m_etaBounds{0.8, 1.6, 2.5,4.0},
   m_stat(m_etaBounds)
 {
 
   declareInterface<ITrackAmbiguityScoreProcessorTool>(this);
-  declareProperty("ScoringTool"          , m_scoringTool);
-  declareProperty("SplitProbTool"        , m_splitProbTool);
   declareProperty("SplitClusterMap_old"  , m_splitClusterMapKey_last);
   declareProperty("SplitClusterMap_new"  , m_splitClusterMapKey);
   declareProperty("sharedProbCut"        , m_sharedProbCut           = 0.3);
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.h
index 8d96ef17461fd83baf5e71aea96b9eae66b5d496..a32fb1800f1cc1b302bdf2806e21d1699ddc3639 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.h
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityScoreProcessorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef DenseEnvironmentsAmbiguityScoreProcessorTool_H
@@ -21,6 +21,7 @@
 
 #include "TrkToolInterfaces/IPRDtoTrackMapTool.h"
 #include "TrkEventUtils/PRDtoTrackMap.h"
+#include "InDetRecToolInterfaces/IPixelClusterSplitProbTool.h"
 #include "TrkEventUtils/ClusterSplitProbabilityContainer.h"
 #include "AmbiCounter.icc"
 #include <map>
@@ -28,7 +29,6 @@
 #include <vector>
 
 namespace InDet{
-  class IPixelClusterSplitProbTool;
   class PixelCluster;
   class SCT_Cluster;
 }
@@ -92,7 +92,8 @@ namespace Trk {
       /**Scoring tool
          This tool is used to 'score' the tracks, i.e. to quantify what a good track is.
          @todo The actual tool that is used should be configured through job options*/
-      ToolHandle<ITrackScoringTool> m_scoringTool;
+      ToolHandle<ITrackScoringTool> m_scoringTool
+	 {this, "ScoringTool", "Trk::TrackScoringTool/TrackScoringTool" };
       
       ToolHandle<Trk::IPRDtoTrackMapTool>         m_assoTool
          {this, "AssociationTool", "InDet::InDetPRDtoTrackMapToolGangedPixels" };
@@ -101,7 +102,8 @@ namespace Trk {
          {this, "AssociationToolNotGanged", "Trk::PRDtoTrackMapTool" };  // @TODO why are ganged pixels ignored ?
        
       /** recalculate split prob tool **/
-      ToolHandle<InDet::IPixelClusterSplitProbTool> m_splitProbTool; 
+      ToolHandle<InDet::IPixelClusterSplitProbTool> m_splitProbTool
+	 {this, "SplitProbTool", "InDet::NnPixelClusterSplitProbTool/NnPixelClusterSplitProbTool" };
 
       /**Observer tool      This tool is used to observe the tracks and their 'score' */
       PublicToolHandle<Trk::ITrkObserverTool> m_observerTool{this, "TrackObserverTool", "", "track observer within ambiguity solver"};
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx
index 5a6e9b354a845a9e4641ebed23d4dbd5bd44edf9..1014db5e0b8999d75e4bcc795ba0b449183133c4 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "SimpleAmbiguityProcessorTool.h"
@@ -21,9 +21,7 @@ Trk::SimpleAmbiguityProcessorTool::SimpleAmbiguityProcessorTool(const std::strin
                 const std::string& n,
                 const IInterface*  p )
   :
-  AmbiguityProcessorBase(t,n,p),
-  m_fitterTool ("Trk::KalmanFitter/InDetTrackFitter"), 
-  m_selectionTool("InDet::InDetAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool"){
+  AmbiguityProcessorBase(t,n,p){
   // statistics stuff
 
   declareInterface<ITrackAmbiguityProcessorTool>(this);
@@ -31,9 +29,6 @@ Trk::SimpleAmbiguityProcessorTool::SimpleAmbiguityProcessorTool(const std::strin
   declareProperty("ForceRefit"           , m_forceRefit         = true);
   declareProperty("RefitPrds"            , m_refitPrds          = false);
   declareProperty("MatEffects"           , m_matEffects         = 3); // pion
-  declareProperty("ScoringTool"          , m_scoringTool);
-  declareProperty("SelectionTool"        , m_selectionTool);
-  declareProperty("Fitter"               , m_fitterTool );
   declareProperty("SuppressHoleSearch"   , m_suppressHoleSearch = false);
   declareProperty("SuppressTrackFit"     , m_suppressTrackFit   = false);
   declareProperty("tryBremFit"           , m_tryBremFit         = false);
diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.h
index 0dd677921d8e84b151781dbeba4995cdb2da1e41..e410c6978cf5a630500847bb02d54c22fd913183 100644
--- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.h
+++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/SimpleAmbiguityProcessorTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef SIMPLEAMBIGUITYPROCESSORTOOL_H
@@ -113,11 +113,11 @@ namespace Trk {
   
       /** refitting tool - used to refit tracks once shared hits are removed. 
       Refitting tool used is configured via jobOptions.*/
-      ToolHandle<ITrackFitter> m_fitterTool;
+      ToolHandle<ITrackFitter> m_fitterTool{this, "Fitter", "Trk::KalmanFitter/InDetTrackFitter"};
       /** association tool **/
       ToolHandle<Trk::IPRDtoTrackMapTool>         m_assoTool{this, "AssociationTool", "Trk::PRDtoTrackMapTool" };
       /** selection tool - here the decision which hits remain on a track and which are removed are made */
-      ToolHandle<IAmbiTrackSelectionTool> m_selectionTool;
+      ToolHandle<IAmbiTrackSelectionTool> m_selectionTool{this, "SelectionTool", "InDet::InDetAmbiTrackSelectionTool/InDetAmbiTrackSelectionTool"};
 
     };
 } //end ns
diff --git a/Tracking/TrkTools/TrkParticleCreator/TrkParticleCreator/TrackParticleCreatorTool.h b/Tracking/TrkTools/TrkParticleCreator/TrkParticleCreator/TrackParticleCreatorTool.h
index c179d8528c65258d1c5aaa3ee0b707318b14c697..ef10e9a823402aa8482a367eb31bfc12f989a9cf 100644
--- a/Tracking/TrkTools/TrkParticleCreator/TrkParticleCreator/TrackParticleCreatorTool.h
+++ b/Tracking/TrkTools/TrkParticleCreator/TrkParticleCreator/TrackParticleCreatorTool.h
@@ -193,10 +193,14 @@ private:
   ToolHandle<Muon::IMuonHitSummaryTool> m_hitSummaryTool{
     this,
     "MuonSummaryTool",
-    "Muon::MuonHitSummaryTool/MuonHitSummaryTool"
+    ""
   };
 
-  ServiceHandle<IBLParameterSvc> m_IBLParameterSvc;
+  ServiceHandle<IBLParameterSvc> m_IBLParameterSvc{
+    this,
+    "IBLParameterSvc",
+    "IBLParameterSvc"
+  };
 
   SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey{
     this,
@@ -224,8 +228,6 @@ private:
   static const SG::AuxElement::Accessor<uint8_t> s_trtdEdxUsedHitsDecoration;
 
   bool m_doIBL;
-  bool m_useTrackSummaryTool;
-  bool m_useMuonSummaryTool;
   ///< if the track contains a summary, the shared, expected hit, and PID
   ///< information will be recomputed. The summary of the track is not updated.
   bool m_computeAdditionalInfo;
@@ -249,7 +251,6 @@ private:
   bool m_checkConversion;
   int m_minSiHits;
   double m_minPt;
-  bool m_doITk;
 };
 
 } // end of namespace Trk
diff --git a/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx b/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx
index 9a1a5cb68cb76a1521229a662fc6ec238ca0e0f5..a5f7e5b3edb79a6c82782d81532a7bc9ffa86549 100644
--- a/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx
+++ b/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx
@@ -113,15 +113,12 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t,
   : base_class(t, n, p)
   , m_detID(nullptr)
   , m_pixelID(nullptr)
-  , m_IBLParameterSvc("IBLParameterSvc", n)
   , m_copyExtraSummaryName{ "eProbabilityComb",  "eProbabilityHT", "eProbabilityNN",
                             "TRTTrackOccupancy", "TRTdEdx",        "TRTdEdxUsedHits" }
   , m_copyEProbabilities{}
   , m_decorateEProbabilities{}
   , m_decorateSummaryTypes{}
   , m_doIBL(false)
-  , m_useTrackSummaryTool(true)
-  , m_useMuonSummaryTool(false)
   , m_computeAdditionalInfo(false)
   , m_keepParameters(false)
   , m_keepFirstParameters(false)
@@ -130,8 +127,6 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t,
   , m_perigeeExpression("BeamLine")
 {
   declareProperty("ComputeAdditionalInfo", m_computeAdditionalInfo);
-  declareProperty("UseTrackSummaryTool", m_useTrackSummaryTool);
-  declareProperty("UseMuonSummaryTool", m_useMuonSummaryTool);
   declareProperty("KeepParameters", m_keepParameters);
   declareProperty("KeepFirstParameters", m_keepFirstParameters);
   declareProperty("KeepAllPerigee", m_keepAllPerigee);
@@ -144,7 +139,6 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t,
   // and size
   declareProperty("BadClusterID", m_badclusterID = 0);
   declareProperty("ExtraSummaryTypes", m_copyExtraSummaryName);
-  declareProperty("DoITk", m_doITk = false);
 }
 
 StatusCode
@@ -167,7 +161,7 @@ TrackParticleCreatorTool::initialize()
   }
 
   /* Retrieve track summary tool */
-  if (m_useTrackSummaryTool) {
+  if (!m_trackSummaryTool.empty()) {
     if (m_trackSummaryTool.retrieve().isFailure()) {
       ATH_MSG_FATAL("Failed to retrieve tool " << m_trackSummaryTool);
       return StatusCode::FAILURE;
@@ -188,7 +182,7 @@ TrackParticleCreatorTool::initialize()
     return StatusCode::FAILURE;
   }
 
-  if (!m_doITk) {
+  if (!m_IBLParameterSvc.empty()) {
     if (m_IBLParameterSvc.retrieve().isFailure()) {
       ATH_MSG_FATAL("Could not retrieve IBLParameterSvc");
       return StatusCode::FAILURE;
@@ -196,7 +190,7 @@ TrackParticleCreatorTool::initialize()
     ATH_MSG_INFO("Retrieved tool " << m_IBLParameterSvc);
   }
 
-  m_doIBL = !m_doITk && m_IBLParameterSvc->containsIBL();
+  m_doIBL = !m_IBLParameterSvc.empty() && m_IBLParameterSvc->containsIBL();
   ATH_MSG_INFO("doIBL set to " << m_doIBL);
 
   if (m_doIBL && !m_IBLParameterSvc->contains3D()) {
@@ -210,7 +204,7 @@ TrackParticleCreatorTool::initialize()
   }
   ATH_MSG_DEBUG("Retrieved tool " << m_trackToVertex);
 
-  if (m_useMuonSummaryTool) {
+  if (!m_hitSummaryTool.empty()) {
     /* Retrieve hit summary tool from ToolService */
     if (m_hitSummaryTool.retrieve().isFailure()) {
       ATH_MSG_FATAL("Failed to retrieve tool " << m_hitSummaryTool);
@@ -930,7 +924,7 @@ TrackParticleCreatorTool::setTrackSummary(xAOD::TrackParticle& tp, const TrackSu
   tp.setSummaryValue(fvalue, static_cast<xAOD::SummaryType>(51));
 
   // muon hit info
-  if (m_useMuonSummaryTool) {
+  if (!m_hitSummaryTool.empty()) {
     ATH_MSG_DEBUG("now do muon hit info");
     Muon::IMuonHitSummaryTool::CompactSummary msSummary = m_hitSummaryTool->summary(summary);
     uint8_t numberOfPrecisionLayers = msSummary.nprecisionLayers;
diff --git a/Trigger/TrigAlgorithms/TrigCaloRec/python/TrigCaloRecConfig.py b/Trigger/TrigAlgorithms/TrigCaloRec/python/TrigCaloRecConfig.py
index 886c27a3c6418d7afec4351d75b98e6dd442b1c6..39a03868cfe4cb17523dbac6fc694ba41f554f0e 100755
--- a/Trigger/TrigAlgorithms/TrigCaloRec/python/TrigCaloRecConfig.py
+++ b/Trigger/TrigAlgorithms/TrigCaloRec/python/TrigCaloRecConfig.py
@@ -707,6 +707,23 @@ def hltCaloCellMakerCfg(flags, name=None, roisKey='UNSPECIFIED'):
     acc.addEventAlgo(cellMaker, primary=True)
     return acc
 
+def hltCaloCellSeedlessMakerCfg(flags, roisKey='UNSPECIFIED'):
+    acc = ComponentAccumulator()
+    from TrigT2CaloCommon.TrigCaloDataAccessConfig import trigCaloDataAccessSvcCfg, CaloDataAccessSvcDependencies
+    acc.merge(trigCaloDataAccessSvcCfg(flags))
+
+    hltCaloCellSeedLessMaker = CompFactory.HLTCaloCellMaker("CaloCellSeedLessFS", ExtraInputs = CaloDataAccessSvcDependencies,
+                                                            RoIs = roisKey,
+                                                            CellsName ="SeedLessFS")
+
+    acc.addEventAlgo(hltCaloCellSeedLessMaker, primary=True)
+
+    from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
+    acc.merge(CaloNoiseCondAlgCfg(flags, noisetype="electronicNoise"))
+    acc.addCondAlgo(CompFactory.CaloNoiseSigmaDiffCondAlg())
+
+    return acc
+
 def hltTopoClusterMakerCfg(flags, name, clustersKey, cellsKey="CaloCells"):
     acc = ComponentAccumulator()
     from CaloRec.CaloTopoClusterConfig import (
diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig.py b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig.py
index 34c3e1f6abdf58365cd8e5058e8b8d41fa881629..58fd8233a20605b51cde341652d05b949213202f 100644
--- a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig.py
+++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig.py
@@ -10,6 +10,9 @@ from AthenaCommon.Logging import logging
 log = logging.getLogger('TrigL2MuonSAConfig')
 
 theStationFitter     = MuonSA.TrigL2MuonSA__MuFastStationFitter(PtFromAlphaBeta = MuonSA.TrigL2MuonSA__PtFromAlphaBeta())
+from AtlasGeoModel.MuonGMJobProperties import MuonGeometryFlags
+if not MuonGeometryFlags.hasSTGC() and not MuonGeometryFlags.hasMM():
+    theStationFitter.NswStationFitter=""
 
 from TrigT1MuonRecRoiTool.TrigT1MuonRecRoiToolConf import LVL1__TrigT1RPCRecRoiTool
 trigRpcRoiTool = LVL1__TrigT1RPCRecRoiTool("RPCRecRoiTool", UseRun3Config=ConfigFlags.Trigger.enableL1MuonPhase1)
@@ -21,7 +24,6 @@ theDataPreparator.TGCDataPreparator  = MuonSA.TrigL2MuonSA__TgcDataPreparator()
 theDataPreparator.RpcRoadDefiner     = MuonSA.TrigL2MuonSA__RpcRoadDefiner()
 theDataPreparator.TgcRoadDefiner     = MuonSA.TrigL2MuonSA__TgcRoadDefiner()
 
-from AtlasGeoModel.MuonGMJobProperties import MuonGeometryFlags
 if MuonGeometryFlags.hasSTGC():
     theDataPreparator.STGCDataPreparator = MuonSA.TrigL2MuonSA__StgcDataPreparator()
 else:
diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py
index e004eeeccd0592e0792ad03ebbec8c76fec5b4ac..a293d5414ae00b2de81db10c5ca74a5a4ebc8685 100644
--- a/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py
+++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/python/TrigL2MuonSAConfig_newJO.py
@@ -11,7 +11,6 @@ from AthenaConfiguration.ComponentFactory import CompFactory
 ### Output Name ###
 muFastInfo = "MuonL2SAInfo"
 
-from AtlasGeoModel.MuonGMJobProperties import MuonGeometryFlags
 
 # Get Rpc data decoder for MuFast data preparator 
 def RpcDataPreparatorCfg( flags, roisKey ):
@@ -140,21 +139,21 @@ def muFastSteeringCfg( flags, roisKey, setup="" ):
     acc.merge( mdtAcc )
 
     # Get CSC decoder
-    if MuonGeometryFlags.hasCSC():
+    if flags.Detector.GeometryCSC:
         cscAcc, CscDataPreparator = CscDataPreparatorCfg( flags, roisKey )
         acc.merge( cscAcc )
     else:
         CscDataPreparator = ""
 
     # Get sTGC decoder
-    if MuonGeometryFlags.hasSTGC():
+    if flags.Detector.GeometrysTGC:
         stgcAcc, StgcDataPreparator = StgcDataPreparatorCfg( flags, roisKey )
         acc.merge( stgcAcc )
     else:
         StgcDataPreparator = ""
 
     # Get MM decoder
-    if MuonGeometryFlags.hasMM():
+    if flags.Detector.GeometryMM:
         mmAcc, MmDataPreparator = MmDataPreparatorCfg( flags, roisKey )
         acc.merge( mmAcc )
     else:
@@ -201,6 +200,9 @@ def muFastSteeringCfg( flags, roisKey, setup="" ):
     MuCalStreamerTool       = TrigL2MuonSA__MuCalStreamerTool()
     CscSegmentMaker         = TrigL2MuonSA__CscSegmentMaker()
 
+    if not flags.Detector.GeometrysTGC and not flags.Detector.GeometryMM:
+        MuFastStationFitter.NswStationFitter=""
+
     # Set Reco alg of muFast step
     #from TrigL2MuonSA.TrigL2MuonSAMonitoring import TrigL2MuonSAMonitoring
     MuFastSteering=CompFactory.MuFastSteering
@@ -283,6 +285,10 @@ def PtEndcapLUTSvcCfg( flags ):
     ptEndcapLUTSvc.FileName = "pt_endcap.lut"
     ptEndcapLUTSvc.EMeanLUT = "pt_comb_mean.lut"
     ptEndcapLUTSvc.ESigmaLUT = "pt_comb_sigma.lut"
+    if flags.Detector.GeometrysTGC or flags.Detector.GeometryMM:
+        ptEndcapLUTSvc.UseRun3LUT = True
+    else:
+        ptEndcapLUTSvc.UseRun3LUT = False
     acc.addService( ptEndcapLUTSvc )
 
     return acc, ptEndcapLUTSvc
@@ -294,6 +300,10 @@ def PtEndcapLUTSvcCfg_MC( flags ):
     ptEndcapLUTSvc_MC.FileName = "pt_endcap.mc10.lut"
     ptEndcapLUTSvc_MC.EMeanLUT = "pt_comb_mean.lut"
     ptEndcapLUTSvc_MC.ESigmaLUT = "pt_comb_sigma.lut"
+    if flags.Detector.GeometrysTGC or flags.Detector.GeometryMM:
+        ptEndcapLUTSvc_MC.UseRun3LUT = True
+    else:
+        ptEndcapLUTSvc_MC.UseRun3LUT = False
     acc.addService( ptEndcapLUTSvc_MC )
 
     return acc, ptEndcapLUTSvc_MC
diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastStationFitter.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastStationFitter.cxx
index 212e8ca1e8e4b644b85d64689695d5c426eafff2..b97f9be3e59ceee8973caf5c91dfa7457e93b3e7 100644
--- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastStationFitter.cxx
+++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MuFastStationFitter.cxx
@@ -43,7 +43,7 @@ StatusCode TrigL2MuonSA::MuFastStationFitter::initialize()
    ATH_CHECK( m_ptFromAlphaBeta.retrieve() );
    ATH_MSG_DEBUG("Retrieved service " << m_ptFromAlphaBeta);
 
-   ATH_CHECK( m_nswStationFitter.retrieve() );
+   ATH_CHECK( m_nswStationFitter.retrieve(DisableTool{m_nswStationFitter.empty()}) );
 
    return StatusCode::SUCCESS;
 }
@@ -136,7 +136,8 @@ StatusCode TrigL2MuonSA::MuFastStationFitter::findSuperPointsSimple(const TrigRo
 
     ATH_CHECK( superPointFitter(itTrack) );
 
-    ATH_CHECK( m_nswStationFitter->superPointFitter(p_roids, itTrack) );
+    if(!m_nswStationFitter.empty())
+      ATH_CHECK( m_nswStationFitter->superPointFitter(p_roids, itTrack) );
   }
   //
   return StatusCode::SUCCESS;
@@ -176,7 +177,8 @@ StatusCode TrigL2MuonSA::MuFastStationFitter::findSuperPoints(const TrigRoiDescr
     double aw = muonRoad.aw[3][0];
     if(exInnerA !=0 ) updateInnSP(itTrack, exInnerA, aw,bw);
 
-    ATH_CHECK( m_nswStationFitter->superPointFitter(p_roids, itTrack) );
+    if(!m_nswStationFitter.empty())
+      ATH_CHECK( m_nswStationFitter->superPointFitter(p_roids, itTrack) );
 
   }
   //
diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.cxx
index fd9b432f04f7223cce3d8faddad24ff5cba34c03..f566d5a98734e1a63906d066a22c88d3d54ee01d 100644
--- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.cxx
+++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/NswStationFitter.cxx
@@ -232,7 +232,7 @@ StatusCode TrigL2MuonSA::NswStationFitter::calcWeightedSumHit(TrigL2MuonSA::Trac
 StatusCode TrigL2MuonSA::NswStationFitter::findStgcHitsInSegment(TrigL2MuonSA::StgcHits& stgcHits) const
 {
   if(stgcHits.size() < 9) {
-    ATH_MSG_WARNING("Number of STGC hits is too small, at least 9 hits required : "<<stgcHits.size()<<" hits");
+    ATH_MSG_INFO("Number of STGC hits is too small, at least 9 hits required : "<<stgcHits.size()<<" hits");
     return StatusCode::SUCCESS;
     } else if(stgcHits.size() > 100) {
     ATH_MSG_WARNING("Number of STGC hits is too large, at most (2^16 - 1) hits allowed : "<<stgcHits.size()<<" hits");
@@ -1019,7 +1019,7 @@ StatusCode TrigL2MuonSA::NswStationFitter::calcMergedHit(TrigL2MuonSA::TrackPatt
 StatusCode TrigL2MuonSA::NswStationFitter::findMmHitsInSegment(TrigL2MuonSA::MmHits& mmHits) const
 {
   if(mmHits.size() < 6) {
-    ATH_MSG_WARNING("Number of MM hits is too small, at least 6 hits required : "<<mmHits.size()<<" hits");
+    ATH_MSG_INFO("Number of MM hits is too small, at least 6 hits required : "<<mmHits.size()<<" hits");
     return StatusCode::SUCCESS;
     } else if(mmHits.size() > 100) {
     ATH_MSG_WARNING("Number of MM hits is too large, at most (2^16 - 1) hits allowed : "<<mmHits.size()<<" hits");
diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py
index 1dbff9617220366220e6ee89e07a75c70cb7e124..1d3f57e58679a7b3543849be1101e72a8ca32976 100644
--- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py
+++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/python/CaloDef.py
@@ -253,8 +253,10 @@ def HLTRoITopoRecoSequence(ConfigFlags, RoIs, algSuffix=''):
 
 
 def HLTHIRoITopoRecoSequence(ConfigFlags, RoIs, algSuffix=''):
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences import precisionCaloMenuDefs
-    eventShape = precisionCaloMenuDefs.egEventShape
+
+    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import  getTrigEgammaKeys
+    TrigEgammaKeys = getTrigEgammaKeys()
+    eventShape = TrigEgammaKeys.egEventShape
 
     import AthenaCommon.CfgMgr as CfgMgr
     HLTRoITopoRecoSequenceVDV = CfgMgr.AthViews__ViewDataVerifier("HLTHIRoITopoRecoSequenceVDV")
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py
index 77f9bb915e22acf941f04b7659f38de896641fbe..5707ecaea17d7a35ac5ee3ad62fa0013244c8d58 100644
--- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py
+++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecConfigMT.py
@@ -41,7 +41,7 @@ class TrigTauRecMerged_TauCaloOnlyMVA (TrigTauRecMerged) :
 
 class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMerged) :
 
-        def __init__(self, name = "TrigTauRecMerged_TauPrecisionMVA", doMVATES=False, doTrackBDT=False, doRNN=False, doLLP=False):
+        def __init__(self, name = "TrigTauRecMerged_TauPrecisionMVA", doTrackBDT=False, doRNN=False, doLLP=False):
         
             super( TrigTauRecMerged_TauPrecisionMVA , self ).__init__( name )
             self.MonTool = tauMonitoringPrecisionMVA()
@@ -61,13 +61,8 @@ class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMerged) :
 
             tools.append(taualgs.getTauAxis())
             
-            # for now, use 'doMVATES=False' to detect tracktwoEF, instead of introducing new flag
-            if not doMVATES:
-                # Count tracks with deltaZ0 cut of 1mm for tracktwoEF           
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=1))
-            else:
-                # tightened to 0.75 mm for tracktwoMVA (until the track BDT can be used)
-                tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=0.75, prefix='TrigTauTightDZ_'))            
+            # tightened to 0.75 mm for tracktwoMVA (until the track BDT can be used)
+            tools.append(taualgs.getTauTrackFinder(applyZ0cut=True, maxDeltaZ0=0.75, prefix='TrigTauTightDZ_'))            
             
             # Decorate the clusters
             tools.append(taualgs.getTauClusterFinder())
@@ -80,10 +75,9 @@ class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMerged) :
             # Calibrate to calo TES
             tools.append(taualgs.getEnergyCalibrationLC())
 
-            if doMVATES:
-                # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt()
-                tools.append(taualgs.getMvaTESVariableDecorator())
-                tools.append(taualgs.getMvaTESEvaluator())
+            # Compute MVA TES (ATR-17649), stores MVA TES as default tau pt()
+            tools.append(taualgs.getMvaTESVariableDecorator())
+            tools.append(taualgs.getMvaTESEvaluator())
 
             # Calculate cell-based quantities: strip variables, EM and Had energies/radii, centFrac, isolFrac and ring energies
             tools.append(taualgs.getCellVariables(cellConeSize=0.2))
@@ -103,8 +97,17 @@ class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMerged) :
                
 
             if doLLP:
-                    doRNN = False
-            if doRNN:
+                # RNN tau ID for displaced tau signatures (placeholder configs)
+                tools.append(taualgs.getTauJetRNNEvaluator(NetworkFile0P="llpdev/net_experimental_llz_0p.json",
+                                                           NetworkFile1P="llpdev/net_experimental_llz_1p.json",
+                                                           NetworkFile3P="llpdev/net_experimental_llz_mp.json",
+                                                           MaxTracks=10,
+                                                           MaxClusters=6,
+                                                           MaxClusterDR=1.0,
+                                                           suffix = "_LLP"))
+                # flattened RNN score and WP
+                tools.append(taualgs.getTauWPDecoratorJetLLP())       
+            elif doRNN:
                 # RNN tau ID
                 tools.append(taualgs.getTauJetRNNEvaluator(NetworkFile0P="rnnid_config_0p_v3.json",
                                                            NetworkFile1P="rnnid_config_1p_v3.json",
@@ -115,19 +118,6 @@ class TrigTauRecMerged_TauPrecisionMVA (TrigTauRecMerged) :
                 # flattened RNN score and WP
                 tools.append(taualgs.getTauWPDecoratorJetRNN())
 
-            if doLLP:
-                # RNN tau ID for displaced tau signatures (placeholder configs)
-                tools.append(taualgs.getTauJetRNNEvaluator(NetworkFile0P="llpdev/net_experimental_llz_0p.json",
-                                                           NetworkFile1P="llpdev/net_experimental_llz_1p.json",
-                                                           NetworkFile3P="llpdev/net_experimental_llz_mp.json",
-                                                           MaxTracks=10, 
-                                                           MaxClusters=6,
-                                                           MaxClusterDR=1.0,
-                                                           suffix = "_LLP"))
-                # flattened RNN score and WP
-                tools.append(taualgs.getTauWPDecoratorJetLLP())
-
-
             for tool in tools:
                 tool.inTrigger = True
                 tool.calibFolder = 'TrigTauRec/00-11-02/'
@@ -191,7 +181,7 @@ def TrigTauRecMergedOnlyMVACfg(flags):
     alg.Key_trackPartInputContainer = ''
     alg.Key_trigJetSeedOutputKey = 'HLT_jet_seed' 
     alg.Key_trigTauJetInputContainer = ''
-    alg.Key_trigTauJetOutputContainer = 'HLT_TrigTauRecMerged_CaloOnly'
+    alg.Key_trigTauJetOutputContainer = 'HLT_TrigTauRecMerged_CaloMVAOnly'
     alg.Key_trigTauTrackInputContainer = ''
     alg.Key_trigTauTrackOutputContainer = 'HLT_tautrack_dummy' 
     alg.Key_vertexInputContainer = ''
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py
index c105547e4bfcea746b3ae94afa20b02aef75b55f..99e33f135a26fbc339d08c58e042551a45f51137 100644
--- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py
+++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauRecMonitoring.py
@@ -5,50 +5,51 @@ from AthenaMonitoringKernel.GenericMonitoringTool import GenericMonitoringTool
 def tauMonitoringCaloOnlyMVA():
    monTool = GenericMonitoringTool('MonTool')
   
-   monTool.defineHistogram('track_errors',path='EXPERT', type='TH1F', title=" EF Track Errors ; nRoIs", xbins=2, xmin=-0.5, xmax=1.5) 
-   monTool.defineHistogram('calo_errors',path='EXPERT', type='TH1F', title=" EF Calo Errors ; nRoIs", xbins=10, xmin=-0.5, xmax=9.5)
-   monTool.defineHistogram('mEflowApprox',path="EXPERT", type='TH1F', title=" EF RNN scalar mEflowApprox; Log10(max(mEflowApprox 140.)", xbins=50, xmin=0., xmax=5.)
-   monTool.defineHistogram('ptRatioEflowApprox', path="EXPERT",type='TH1F', title=" EF RNN scalar ptRatioEflowApprox; min(ptRatioEflowApprox 4.)", xbins=50, xmin=0., xmax=4.)
-   monTool.defineHistogram('ptDetectorAxis', path='EXPERT',type='TH1F', title=" EF RNN ptDetectorAxis log; ptDetectorAxis_log ", xbins=50, xmin=0., xmax=5.)
-   monTool.defineHistogram('pt_jetseed_log', path='EXPERT',type='TH1F', title=" EF RNN scalar pt_jetseed_log; Log10(tau.ptJetSeed)", xbins=50, xmin=3.5, xmax=7.)
-   monTool.defineHistogram('RNN_clusternumber',path='EXPERT', type='TH1F', title=" EF RNN cluster number; N RNNClusters", xbins=15, xmin=0., xmax=15.)
-   monTool.defineHistogram('cluster_et_log',path="EXPERT", type='TH1F', title=" EF RNN cluster et_log; Log10(cluster E_{T})", xbins=50, xmin=1., xmax=7.) 
-   monTool.defineHistogram('cluster_dEta',path="EXPERT", type='TH1F', title=" EF RNN cluster dEta; #Delta#eta(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5)
-   monTool.defineHistogram('cluster_dPhi',path="EXPERT", type='TH1F', title=" EF RNN cluster dPhi; #Delta#phi(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5)
-   monTool.defineHistogram('cluster_log_SECOND_R',path="EXPERT",type='TH1F',title='cluster_SECOND_R_log10; cluster_SECOND_R_log10;Events',xbins=50,xmin=-3,xmax=7)
-   monTool.defineHistogram('cluster_SECOND_LAMBDA',path="EXPERT",type='TH1F',title='cluster_SECOND_LAMBDA_log10; cluster_SECOND_LAMBDA_log10;Events',xbins=50,xmin=-3,xmax=7)
-   monTool.defineHistogram('cluster_CENTER_LAMBDA',path="EXPERT",type='TH1F',title='cluster_CENTER_LAMBDA_log10; cluster_CENTER_LAMBDA_log10;Events',xbins=50,xmin=-2,xmax=5)
-   monTool.defineHistogram('RNN_tracknumber',path='EXPERT', type='TH1F', title=" EF RNN track number; N RNNTracks", xbins=20, xmin=0., xmax=20.)
+   monTool.defineHistogram('track_errors', path='EXPERT', type='TH1F', title="EF Track Errors; nRoIs", xbins=2, xmin=-0.5, xmax=1.5) 
+   monTool.defineHistogram('calo_errors', path='EXPERT', type='TH1F', title="EF Calo Errors; nRoIs", xbins=10, xmin=-0.5, xmax=9.5)
+   monTool.defineHistogram('mEflowApprox', path="EXPERT", type='TH1F', title="EF RNN scalar mEflowApprox; Log10(max(mEflowApprox 140.)", xbins=50, xmin=0., xmax=5.)
+   monTool.defineHistogram('ptRatioEflowApprox', path="EXPERT", type='TH1F', title="EF RNN scalar ptRatioEflowApprox; min(ptRatioEflowApprox 4.)", xbins=50, xmin=0., xmax=4.)
+   monTool.defineHistogram('ptDetectorAxis', path='EXPERT', type='TH1F', title="EF RNN ptDetectorAxis; ptDetectorAxis", xbins=50, xmin=1., xmax=1000.)
+   monTool.defineHistogram('ptDetectorAxis_log', path='EXPERT', type='TH1F', title=" EF RNN ptDetectorAxis log; ptDetectorAxis_log", xbins=50, xmin=0., xmax=5.)
+   monTool.defineHistogram('pt_jetseed_log', path='EXPERT', type='TH1F', title="EF RNN scalar pt_jetseed_log; Log10(tau.ptJetSeed)", xbins=50, xmin=3.5, xmax=7.)
+   monTool.defineHistogram('RNN_clusternumber', path='EXPERT', type='TH1F', title="EF RNN cluster number; N RNNClusters", xbins=15, xmin=0., xmax=15.)
+   monTool.defineHistogram('cluster_et_log', path="EXPERT", type='TH1F', title="EF RNN cluster et_log; Log10(cluster E_{T})", xbins=50, xmin=1., xmax=7.) 
+   monTool.defineHistogram('cluster_dEta', path="EXPERT", type='TH1F', title="EF RNN cluster dEta; #Delta#eta(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5)
+   monTool.defineHistogram('cluster_dPhi', path="EXPERT", type='TH1F', title="EF RNN cluster dPhi; #Delta#phi(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5)
+   monTool.defineHistogram('cluster_log_SECOND_R', path="EXPERT",type='TH1F', title='cluster_SECOND_R_log10; cluster_SECOND_R_log10; Events',xbins=50,xmin=-3,xmax=7)
+   monTool.defineHistogram('cluster_SECOND_LAMBDA', path="EXPERT",type='TH1F', title='cluster_SECOND_LAMBDA_log10; cluster_SECOND_LAMBDA_log10; Events',xbins=50,xmin=-3,xmax=7)
+   monTool.defineHistogram('cluster_CENTER_LAMBDA', path="EXPERT",type='TH1F', title='cluster_CENTER_LAMBDA_log10; cluster_CENTER_LAMBDA_log10; Events',xbins=50,xmin=-2,xmax=5)
+   monTool.defineHistogram('RNN_tracknumber', path='EXPERT', type='TH1F', title=" EF RNN track number; N RNNTracks", xbins=20, xmin=0., xmax=20.)
    monTool.defineHistogram('nRoI_EFTauCells', path='EXPERT', type='TH1F', title="EF N RoI cells; N Cells; nRoIs", xbins=100, xmin=0., xmax=6000.)
    monTool.defineHistogram('EtFinal', path='EXPERT', type='TH1F', title="Et Final; Et Final; nRoIs", xbins=100, xmin=0, xmax=1000)
-   monTool.defineHistogram('dPhiEFTau_RoI', path='EXPERT', type='TH1F', title="diff EF vs RoI phi ; Dphi; nRoIs", xbins=100, xmin=-0.15, xmax=0.15)
-   monTool.defineHistogram('dEtaEFTau_RoI', path='EXPERT', type='TH1F', title="diff EF vs RoI eta ; Deta; nRoIs", xbins=80, xmin=-0.4, xmax=0.4)
-   monTool.defineHistogram('dEtaEFTau_RoI, dPhiEFTau_RoI', path='EXPERT', type='TH2F', title="dEta vs dPhi in TrigTauRec FEX; Delta-eta; Delta-phi",
-                                                           xbins=40 , xmin=-0.2, xmax=0.2,
-                                                           ybins=40 , ymin=-0.2, ymax=0.2)
+   monTool.defineHistogram('dPhiEFTau_RoI', path='EXPERT', type='TH1F', title="RoI vs diff EF phi; Dphi; nRoIs", xbins=100, xmin=-0.15, xmax=0.15)
+   monTool.defineHistogram('dEtaEFTau_RoI', path='EXPERT', type='TH1F', title="RoI vs diff EF eta; Deta; nRoIs", xbins=100, xmin=-0.4, xmax=0.4)
+   monTool.defineHistogram('dEtaEFTau_RoI, dPhiEFTau_RoI', path='EXPERT', type='TH2F', title="dPhi vs dEta in TrigTauRec FEX; Delta-eta; Delta-phi",
+                                                           xbins=100 , xmin=-0.4, xmax=0.4,
+                                                           ybins=100 , ymin=-0.15, ymax=0.15)
    monTool.defineHistogram('EMRadius', path='EXPERT', type='TH1F', title="EF EMRadius; EM radius; nRoIs", xbins=50, xmin=-0.1, xmax=1.)
    monTool.defineHistogram('HadRadius', path='EXPERT', type='TH1F', title="EF HadRadius; Had radius; nRoIs", xbins=50, xmin=-0.1, xmax=1.)
-   monTool.defineHistogram('EtHad, EtEm', path='EXPERT', type='TH2F', title="EF Et had vs Em in TrigTauRecMerged FEX; Et Had (at EM scale) [GeV]; Et EM (at EM scale) [GeV]",
+   monTool.defineHistogram('EtHad, EtEm', path='EXPERT', type='TH2F', title="EF Et Em vs Et had in TrigTauRecMerged FEX; Et Had (at EM scale) [GeV]; Et EM (at EM scale) [GeV]",
                                                 xbins=30, xmin=0., xmax=150.,
                                                 ybins=30, ymin=0., ymax=150.)
-   monTool.defineHistogram('EMFrac', path='EXPERT', type='TH1F', title="EM Fraction;EM Fraction;nRoIs", xbins=70, xmin=-0.1, xmax=1.3)
-   monTool.defineHistogram('IsoFrac', path='EXPERT', type='TH1F', title="Isolation Fraction;Isolation Fraction; nRoIs", xbins=80, xmin=-0.4, xmax=1.2)
-   monTool.defineHistogram('centFrac', path='EXPERT', type='TH1F', title="EF central Fraction;central Fraction; nRoIs", xbins=80, xmin=-0.4, xmax=1.2)
-   monTool.defineHistogram('nCand', path='EXPERT', type='TH1F', title="Number of tau candidates;Number of tau candidates; nevents", xbins=10, xmin=-1.0, xmax=9.)
+   monTool.defineHistogram('EMFrac', path='EXPERT', type='TH1F', title="EM Fraction; EM Fraction; nRoIs", xbins=70, xmin=-0.1, xmax=1.3)
+   monTool.defineHistogram('IsoFrac', path='EXPERT', type='TH1F', title="Isolation Fraction; Isolation Fraction; nRoIs", xbins=80, xmin=-0.4, xmax=1.2)
+   monTool.defineHistogram('centFrac', path='EXPERT', type='TH1F', title="EF central Fraction; central Fraction; nRoIs", xbins=80, xmin=-0.4, xmax=1.2)
+   monTool.defineHistogram('nCand', path='EXPERT', type='TH1F', title="Number of tau candidates; Number of tau candidates; nevents", xbins=10, xmin=-1.0, xmax=9.)
    monTool.defineHistogram('EtaL1', path='EXPERT', type='TH1F', title="L1 RoI Eta; L1 RoI Eta; nRoIs", xbins=100, xmin=-2.6, xmax=2.6)
    monTool.defineHistogram('PhiL1', path='EXPERT', type='TH1F', title="L1 RoI Phi; L1 RoI Phi; nRoIs", xbins=100, xmin=-3.2, xmax=3.2)
-   monTool.defineHistogram('EtaL1, PhiL1', path='EXPERT', type='TH2F', title="L1 ROI Eta vs Phi in TrigTauRecMerged FEX; #eta; #phi",
+   monTool.defineHistogram('EtaL1, PhiL1', path='EXPERT', type='TH2F', title="L1 ROI Phi vs Eta in TrigTauRecMerged FEX; #eta; #phi",
                                            xbins=100, xmin=-2.6, xmax=2.6,
                                            ybins=100, ymin=-3.2, ymax=3.2)
-   monTool.defineHistogram('EtaEF', path='EXPERT', type='TH1F', title="EF ROI Eta; nRoIs", xbins=100, xmin=-2.6, xmax=2.6)
-   monTool.defineHistogram('PhiEF', path='EXPERT', type='TH1F', title="EF ROI Phi; nRoIs", xbins=100, xmin=-3.2, xmax=3.2)
-   monTool.defineHistogram('EtaEF, PhiEF', path='EXPERT', type='TH2F', title="EF ROI Eta vs Phi in TrigTauRecMerged FEX; #eta; #phi",
+   monTool.defineHistogram('EtaEF', path='EXPERT', type='TH1F', title="EF RoI Eta; EF RoI Eta; nRoIs", xbins=100, xmin=-2.6, xmax=2.6)
+   monTool.defineHistogram('PhiEF', path='EXPERT', type='TH1F', title="EF RoI Phi; EF RoI Phi; nRoIs", xbins=100, xmin=-3.2, xmax=3.2)
+   monTool.defineHistogram('EtaEF, PhiEF', path='EXPERT', type='TH2F', title="EF RoI Phi vs Eta in TrigTauRecMerged FEX; #eta; #phi",
                                            xbins=100, xmin=-2.6, xmax=2.6,
                                            ybins=100, ymin=-3.2, ymax=3.2)
-   monTool.defineHistogram('EtFinal, EtaEF', path='EXPERT', type='TH2F', title="Et Final vs Eta EF; Et Final; Eta EF",
+   monTool.defineHistogram('EtFinal, EtaEF', path='EXPERT', type='TH2F', title="Eta EF vs Et Final; Et Final; Eta EF",
                                                            xbins=100 , xmin=0, xmax=1000,
                                                            ybins=100, ymin=-2.6, ymax=2.6)
-   monTool.defineHistogram('EtFinal, PhiEF', path='EXPERT', type='TH2F', title="Et Final vs Phi EF; Et Final; Phi EF",
+   monTool.defineHistogram('EtFinal, PhiEF', path='EXPERT', type='TH2F', title="Phi EF vs Et Final; Et Final; Phi EF",
                                                            xbins=100 , xmin=0, xmax=1000,
                                                            ybins=100, ymin=-3.2, ymax=3.2)
 
@@ -57,80 +58,77 @@ def tauMonitoringCaloOnlyMVA():
 def tauMonitoringPrecisionMVA():
    monTool = GenericMonitoringTool('MonTool')
 
-   monTool.defineHistogram('track_errors',path='EXPERT', type='TH1F', title=" EF Track Errors ; nRoIs", xbins=2, xmin=-0.5, xmax=1.5)
-   monTool.defineHistogram('calo_errors',path='EXPERT', type='TH1F', title=" EF Calo Errors ; nRoIs", xbins=10, xmin=-0.5, xmax=9.5)
-   monTool.defineHistogram('mEflowApprox',path="EXPERT", type='TH1F', title=" EF RNN scalar mEflowApprox; Log10(max(mEflowApprox 140.)", xbins=50, xmin=0., xmax=5.)
-   monTool.defineHistogram('ptRatioEflowApprox', path="EXPERT",type='TH1F', title=" EF RNN scalar ptRatioEflowApprox; min(ptRatioEflowApprox 4.)", xbins=50, xmin=0., xmax=4.)
-   monTool.defineHistogram('pt_jetseed_log', path='EXPERT',type='TH1F', title=" EF RNN scalar pt_jetseed_log; Log10(tau.ptJetSeed)", xbins=50, xmin=3.5, xmax=7.)
-   monTool.defineHistogram('ptDetectorAxis', path='EXPERT',type='TH1F', title=" EF RNN ptDetectorAxis log; ptDetectorAxis_log ", xbins=50, xmin=0., xmax=5.)
-   monTool.defineHistogram('RNN_clusternumber',path='EXPERT', type='TH1F', title=" EF RNN cluster number; N RNNClusters", xbins=20, xmin=0., xmax=20.)
-   monTool.defineHistogram('cluster_et_log',path="EXPERT", type='TH1F', title=" EF RNN cluster et_log; Log10(cluster E_{T})", xbins=50, xmin=1., xmax=7.)
-   monTool.defineHistogram('cluster_dEta',path="EXPERT", type='TH1F', title=" EF RNN cluster dEta; #Delta#eta(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5)
-   monTool.defineHistogram('cluster_dPhi',path="EXPERT", type='TH1F', title=" EF RNN cluster dPhi; #Delta#phi(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5)
-   monTool.defineHistogram('cluster_log_SECOND_R',path="EXPERT",type='TH1F',title='cluster_SECOND_R_log10; cluster_SECOND_R_log10;Events',xbins=50,xmin=-3,xmax=7)
-   monTool.defineHistogram('cluster_SECOND_LAMBDA',path="EXPERT",type='TH1F',title='cluster_SECOND_LAMBDA_log10; cluster_SECOND_LAMBDA_log10;Events',xbins=50,xmin=-3,xmax=7)
-   monTool.defineHistogram('cluster_CENTER_LAMBDA',path="EXPERT",type='TH1F',title='cluster_CENTER_LAMBDA_log10; cluster_CENTER_LAMBDA_log10;Events',xbins=50,xmin=-2,xmax=5)
-   monTool.defineHistogram('RNN_tracknumber',path='EXPERT', type='TH1F', title=" EF RNN track number; N RNNTracks", xbins=20, xmin=0., xmax=20.)
-   monTool.defineHistogram('track_pt_log',path='EXPERT', type='TH1F', title=" EF RNN track pt_log; Log10(track p_{T})", xbins=50, xmin=2.7, xmax=7.)
-   monTool.defineHistogram('track_dEta',path='EXPERT', type='TH1F', title=" EF RNN track dEta; #Delta#eta(track tau)", xbins=50, xmin=-0.5, xmax=0.5)
-   monTool.defineHistogram('track_dPhi',path='EXPERT', type='TH1F', title=" EF RNN track dPhi; #Delta#phi(track xtau)", xbins=50, xmin=-0.5, xmax=0.5)
-   monTool.defineHistogram('track_d0_abs_log',path='EXPERT',type='TH1F', title=" EF RNN track d0_abs_log; Log10(Abs(track.d0()) + 1e-6)", xbins=50, xmin=-6.1, xmax=2.)
-   monTool.defineHistogram('track_z0sinThetaTJVA_abs_log',path='EXPERT', type='TH1F', title=" EF RNN track z0sinThetaTJVA_abs_log; Log10(Abs(track.z0sinThetaTJVA(tau)) + 1e-6)", xbins=50, xmin=-6.1, xmax=4.)
-   monTool.defineHistogram('track_nPixelHitsPlusDeadSensors',path='EXPERT', type='TH1F', title=" EF RNN track nPixelHitsPlusDeadSensors; nPixelHits", xbins=11, xmin=0., xmax=11.)
-   monTool.defineHistogram('track_nSCTHitsPlusDeadSensors',path='EXPERT', type='TH1F', title=" EF RNN track nSCTHitsPlusDeadSensors; nSCTHits", xbins=20, xmin=0., xmax=20.)
+   monTool.defineHistogram('track_errors', path='EXPERT', type='TH1F', title="EF Track Errors; nRoIs", xbins=2, xmin=-0.5, xmax=1.5)
+   monTool.defineHistogram('calo_errors', path='EXPERT', type='TH1F', title="EF Calo Errors; nRoIs", xbins=10, xmin=-0.5, xmax=9.5)
+   monTool.defineHistogram('mEflowApprox', path="EXPERT", type='TH1F', title="EF RNN scalar mEflowApprox; Log10(max(mEflowApprox 140.)", xbins=50, xmin=0., xmax=5.)
+   monTool.defineHistogram('ptRatioEflowApprox', path="EXPERT", type='TH1F', title="EF RNN scalar ptRatioEflowApprox; min(ptRatioEflowApprox 4.)", xbins=50, xmin=0., xmax=4.)
+   monTool.defineHistogram('pt_jetseed_log', path='EXPERT', type='TH1F', title="EF RNN scalar pt_jetseed_log; Log10(tau.ptJetSeed)", xbins=50, xmin=3.5, xmax=7.)
+   monTool.defineHistogram('ptDetectorAxis', path='EXPERT', type='TH1F', title="EF RNN ptDetectorAxis; ptDetectorAxis", xbins=50, xmin=1., xmax=1000.)
+   monTool.defineHistogram('ptDetectorAxis_log', path='EXPERT', type='TH1F', title="EF RNN ptDetectorAxis log; ptDetectorAxis_log", xbins=50, xmin=0., xmax=5.)
+   monTool.defineHistogram('RNN_clusternumber', path='EXPERT', type='TH1F', title="EF RNN cluster number; N RNNClusters", xbins=20, xmin=0., xmax=20.)
+   monTool.defineHistogram('cluster_et_log', path="EXPERT", type='TH1F', title="EF RNN cluster et_log; Log10(cluster E_{T})", xbins=50, xmin=1., xmax=7.)
+   monTool.defineHistogram('cluster_dEta', path="EXPERT", type='TH1F', title="EF RNN cluster dEta; #Delta#eta(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5)
+   monTool.defineHistogram('cluster_dPhi', path="EXPERT", type='TH1F', title="EF RNN cluster dPhi; #Delta#phi(cluster tau)", xbins=50, xmin=-0.5, xmax=0.5)
+   monTool.defineHistogram('cluster_log_SECOND_R', path="EXPERT",type='TH1F',title='cluster_SECOND_R_log10; cluster_SECOND_R_log10; Events',xbins=50,xmin=-3,xmax=7)
+   monTool.defineHistogram('cluster_SECOND_LAMBDA', path="EXPERT",type='TH1F',title='cluster_SECOND_LAMBDA_log10; cluster_SECOND_LAMBDA_log10; Events',xbins=50,xmin=-3,xmax=7)
+   monTool.defineHistogram('cluster_CENTER_LAMBDA', path="EXPERT",type='TH1F',title='cluster_CENTER_LAMBDA_log10; cluster_CENTER_LAMBDA_log10; Events',xbins=50,xmin=-2,xmax=5)
+   monTool.defineHistogram('RNN_tracknumber', path='EXPERT', type='TH1F', title="EF RNN track number; N RNNTracks", xbins=20, xmin=0., xmax=20.)
+   monTool.defineHistogram('track_pt_log', path='EXPERT', type='TH1F', title="EF RNN track pt_log; Log10(track p_{T})", xbins=50, xmin=2.7, xmax=7.)
+   monTool.defineHistogram('track_dEta', path='EXPERT', type='TH1F', title="EF RNN track dEta; #Delta#eta(track tau)", xbins=50, xmin=-0.5, xmax=0.5)
+   monTool.defineHistogram('track_dPhi', path='EXPERT', type='TH1F', title="EF RNN track dPhi; #Delta#phi(track xtau)", xbins=50, xmin=-0.5, xmax=0.5)
+   monTool.defineHistogram('track_d0_abs_log', path='EXPERT',type='TH1F', title="EF RNN track d0_abs_log; Log10(Abs(track.d0()) + 1e-6)", xbins=50, xmin=-6.1, xmax=2.)
+   monTool.defineHistogram('track_z0sinThetaTJVA_abs_log', path='EXPERT', type='TH1F', title="EF RNN track z0sinThetaTJVA_abs_log; Log10(Abs(track.z0sinThetaTJVA(tau)) + 1e-6)", xbins=50, xmin=-6.1, xmax=4.)
+   monTool.defineHistogram('track_nPixelHitsPlusDeadSensors', path='EXPERT', type='TH1F', title="EF RNN track nPixelHitsPlusDeadSensors; nPixelHits", xbins=11, xmin=0., xmax=11.)
+   monTool.defineHistogram('track_nSCTHitsPlusDeadSensors', path='EXPERT', type='TH1F', title="EF RNN track nSCTHitsPlusDeadSensors; nSCTHits", xbins=20, xmin=0., xmax=20.)
    monTool.defineHistogram('nRoI_EFTauCells', path='EXPERT', type='TH1F', title="EF N RoI cells; N Cells; nRoIs", xbins=100, xmin=0., xmax=6000.)
    monTool.defineHistogram('nRoI_EFTauTracks', path='EXPERT', type='TH1F', title="EF N RoI Tracks; N Tracks; nRoIs", xbins=17, xmin=-2.0, xmax=15.)
    monTool.defineHistogram('EtFinal', path='EXPERT', type='TH1F', title="Et Final; Et Final; nRoIs", xbins=100, xmin=0, xmax=1000)
-   monTool.defineHistogram('dPhiEFTau_RoI', path='EXPERT', type='TH1F', title="diff EF vs RoI phi ; Dphi; nRoIs", xbins=100, xmin=-0.15, xmax=0.15)
-   monTool.defineHistogram('dEtaEFTau_RoI', path='EXPERT', type='TH1F', title="diff EF vs RoI eta ; Deta; nRoIs", xbins=80, xmin=-0.4, xmax=0.4)
-   monTool.defineHistogram('dEtaEFTau_RoI, dPhiEFTau_RoI', path='EXPERT', type='TH2F', title="dEta vs dPhi in TrigTauRec FEX; Delta-eta; Delta-phi",
-                                                           xbins=40 , xmin=-0.2, xmax=0.2,
-                                                           ybins=40 , ymin=-0.2, ymax=0.2)
+   monTool.defineHistogram('dPhiEFTau_RoI', path='EXPERT', type='TH1F', title="RoI vs diff EF phi; Dphi; nRoIs", xbins=100, xmin=-0.15, xmax=0.15)
+   monTool.defineHistogram('dEtaEFTau_RoI', path='EXPERT', type='TH1F', title="RoI vs diff EF eta; Deta; nRoIs", xbins=100, xmin=-0.4, xmax=0.4)
+   monTool.defineHistogram('dEtaEFTau_RoI, dPhiEFTau_RoI', path='EXPERT', type='TH2F', title="dPhi vs dEta in TrigTauRec FEX; Delta-eta; Delta-phi",
+                                                           xbins=100 , xmin=-0.4, xmax=0.4,
+                                                           ybins=100 , ymin=-0.15, ymax=0.15)
    monTool.defineHistogram('EMRadius', path='EXPERT', type='TH1F', title="EF EMRadius; EM radius; nRoIs", xbins=50, xmin=-0.1, xmax=1.)
    monTool.defineHistogram('HadRadius', path='EXPERT', type='TH1F', title="EF HadRadius; Had radius; nRoIs", xbins=50, xmin=-0.1, xmax=1.)
-   monTool.defineHistogram('EtHad, EtEm', path='EXPERT', type='TH2F', title="EF Et had vs Em in TrigTauRecMerged FEX; Et Had (at EM scale) [GeV]; Et EM (at EM scale) [GeV]",
+   monTool.defineHistogram('EtHad, EtEm', path='EXPERT', type='TH2F', title="EF Et Em vs Et had in TrigTauRecMerged FEX; Et Had (at EM scale) [GeV]; Et EM (at EM scale) [GeV]",
                                                 xbins=30, xmin=0., xmax=150.,
                                                 ybins=30, ymin=0., ymax=150.)
-   monTool.defineHistogram('EMFrac', path='EXPERT', type='TH1F', title="EM Fraction;EM Fraction;nRoIs", xbins=70, xmin=-0.1, xmax=1.3)
-   monTool.defineHistogram('IsoFrac', path='EXPERT', type='TH1F', title="Isolation Fraction;Isolation Fraction; nRoIs", xbins=80, xmin=-0.4, xmax=1.2)
-   monTool.defineHistogram('centFrac', path='EXPERT', type='TH1F', title="EF central Fraction;central Fraction; nRoIs", xbins=80, xmin=-0.4, xmax=1.2)
-   monTool.defineHistogram('nWideTrk', path='EXPERT', type='TH1F', title="EF N Wide Tracks;N Wide Tracks; nRoIs", xbins=17, xmin=-2.0, xmax=15.)
-   monTool.defineHistogram('ipSigLeadTrk', path='EXPERT', type='TH1F', title="EF IPsig Leading Track;iIPsig Leading Track; nRoIs", xbins=100, xmin=-50., xmax=50)
-   monTool.defineHistogram('trFlightPathSig', path='EXPERT', type='TH1F', title="EF Flightpath sig Track;Flightpath sig Track; nRoIs", xbins=100, xmin=-20., xmax=40)
-   monTool.defineHistogram('massTrkSys', path='EXPERT', type='TH1F', title="EF Mass Trk Sys;Mass Trk Sys [GeV]; nRoIs", xbins=100, xmin=0., xmax=50.)
-   monTool.defineHistogram('dRmax', path='EXPERT', type='TH1F', title="EF dR max;dR max; nRoIs", xbins=50, xmin=-0., xmax=0.25)
-   monTool.defineHistogram('NTrk', path='EXPERT', type='TH1F', title="Number of tracks;Number of tracks; nRoIs", xbins=17, xmin=-2.0, xmax=15.)
+   monTool.defineHistogram('EMFrac', path='EXPERT', type='TH1F', title="EM Fraction; EM Fraction; nRoIs", xbins=70, xmin=-0.1, xmax=1.3)
+   monTool.defineHistogram('IsoFrac', path='EXPERT', type='TH1F', title="Isolation Fraction; Isolation Fraction; nRoIs", xbins=80, xmin=-0.4, xmax=1.2)
+   monTool.defineHistogram('centFrac', path='EXPERT', type='TH1F', title="EF central Fraction; central Fraction; nRoIs", xbins=80, xmin=-0.4, xmax=1.2)
+   monTool.defineHistogram('nWideTrk', path='EXPERT', type='TH1F', title="EF N Wide Tracks; N Wide Tracks; nRoIs", xbins=17, xmin=-2.0, xmax=15.)
+   monTool.defineHistogram('ipSigLeadTrk', path='EXPERT', type='TH1F', title="EF IPsig Leading Track; iIPsig Leading Track; nRoIs", xbins=100, xmin=-50., xmax=50)
+   monTool.defineHistogram('trFlightPathSig', path='EXPERT', type='TH1F', title="EF Flightpath sig Track; Flightpath sig Track; nRoIs", xbins=100, xmin=-20., xmax=40)
+   monTool.defineHistogram('massTrkSys', path='EXPERT', type='TH1F', title="EF Mass Trk Sys; Mass Trk Sys [GeV]; nRoIs", xbins=100, xmin=0., xmax=50.)
+   monTool.defineHistogram('dRmax', path='EXPERT', type='TH1F', title="EF dR max; dR max; nRoIs", xbins=50, xmin=-0., xmax=0.25)
+   monTool.defineHistogram('NTrk', path='EXPERT', type='TH1F', title="Number of tracks; Number of tracks; nRoIs", xbins=17, xmin=-2.0, xmax=15.)
    monTool.defineHistogram('TrkAvgDist', path='EXPERT', type='TH1F', title="Track Average Distance; TrkAvgDist; nRoIs", xbins=41, xmin=-0.01, xmax=0.4)
    monTool.defineHistogram('EtovPtLead', path='EXPERT', type='TH1F', title="Et over lead track Pt; EtovPtLead; nRoIs", xbins=41, xmin=-0.5, xmax=20.0)
-   monTool.defineHistogram('PSSFraction', path='EXPERT', type='TH1F', title="EF Presampler strip energy fraction;PSS energy fraction; nRoIs", xbins=50, xmin=-0.5, xmax=1.)
-   monTool.defineHistogram('EMPOverTrkSysP', path='EXPERT', type='TH1F', title="EF EMP over TrkSysP;EMP over TrkSysP; nRoIs", xbins=41, xmin=-0.5, xmax=20.0)
-   monTool.defineHistogram('ChPiEMEOverCaloEME', path='EXPERT', type='TH1F', title="EF EM energy of charged pions over calorimetric EM energy;ChPiEME over CaloEME; nRoIs", xbins=40, xmin=-20., xmax=20.)
+   monTool.defineHistogram('PSSFraction', path='EXPERT', type='TH1F', title="EF Presampler strip energy fraction; PSS energy fraction; nRoIs", xbins=50, xmin=-0.5, xmax=1.)
+   monTool.defineHistogram('EMPOverTrkSysP', path='EXPERT', type='TH1F', title="EF EMP over TrkSysP; EMP over TrkSysP; nRoIs", xbins=41, xmin=-0.5, xmax=20.0)
+   monTool.defineHistogram('ChPiEMEOverCaloEME', path='EXPERT', type='TH1F', title="EF EM energy of charged pions over calorimetric EM energy; ChPiEME over CaloEME; nRoIs", xbins=40, xmin=-20., xmax=20.)
    monTool.defineHistogram('innerTrkAvgDist', path='EXPERT', type='TH1F', title="EF inner track average distance; innerTrkAvgDist; nRoIs", xbins=40, xmin=-0.05, xmax=0.5)
-   monTool.defineHistogram('nCand', path='EXPERT', type='TH1F', title="Number of tau candidates;Number of tau candidates; nevents", xbins=10, xmin=-1.0, xmax=9.)
+   monTool.defineHistogram('nCand', path='EXPERT', type='TH1F', title="Number of tau candidates; Number of tau candidates; nevents", xbins=10, xmin=-1.0, xmax=9.)
    monTool.defineHistogram('EtaL1', path='EXPERT', type='TH1F', title="L1 RoI Eta; L1 RoI Eta; nRoIs", xbins=100, xmin=-2.6, xmax=2.6)
    monTool.defineHistogram('PhiL1', path='EXPERT', type='TH1F', title="L1 RoI Phi; L1 RoI Phi; nRoIs", xbins=100, xmin=-3.2, xmax=3.2)
-   monTool.defineHistogram('EtaL1, PhiL1', path='EXPERT', type='TH2F', title="L1 ROI Eta vs Phi in TrigTauRecMerged FEX; #eta; #phi",
+   monTool.defineHistogram('EtaL1, PhiL1', path='EXPERT', type='TH2F', title="L1 ROI Phi vs Eta in TrigTauRecMerged FEX; #eta; #phi",
                                            xbins=100, xmin=-2.6, xmax=2.6,
                                            ybins=100, ymin=-3.2, ymax=3.2)
-   monTool.defineHistogram('EtaEF', path='EXPERT', type='TH1F', title="EF ROI Eta; nRoIs", xbins=100, xmin=-2.6, xmax=2.6)
-   monTool.defineHistogram('PhiEF', path='EXPERT', type='TH1F', title="EF ROI Phi; nRoIs", xbins=100, xmin=-3.2, xmax=3.2)
-   monTool.defineHistogram('EtaEF, PhiEF', path='EXPERT', type='TH2F', title="EF ROI Eta vs Phi in TrigTauRecMerged FEX; #eta; #phi",
+   monTool.defineHistogram('EtaEF', path='EXPERT', type='TH1F', title="EF RoI Eta; EF RoI Eta; nRoIs", xbins=100, xmin=-2.6, xmax=2.6)
+   monTool.defineHistogram('PhiEF', path='EXPERT', type='TH1F', title="EF RoI Phi; EF_RoI Phi; nRoIs", xbins=100, xmin=-3.2, xmax=3.2)
+   monTool.defineHistogram('EtaEF, PhiEF', path='EXPERT', type='TH2F', title="EF RoI Phi vs Eta in TrigTauRecMerged FEX; #eta; #phi",
                                            xbins=100, xmin=-2.6, xmax=2.6,
                                            ybins=100, ymin=-3.2, ymax=3.2)
-   monTool.defineHistogram('vertex_x', path='EXPERT', type='TH1F', title="EF ROI Vertex x; Vertex x; nROIS", xbins=100, xmin=-1, xmax=1)
-   monTool.defineHistogram('vertex_y', path='EXPERT', type='TH1F', title="EF ROI Vertex y; Vertex y; nROIS", xbins=100, xmin=-2, xmax=0)
-   monTool.defineHistogram('vertex_z', path='EXPERT', type='TH1F', title="EF ROI Vertex z; Vertex z; nROIS", xbins=120, xmin=-120, xmax=120)
+   monTool.defineHistogram('vertex_x', path='EXPERT', type='TH1F', title="EF RoI Vertex x; Vertex x; nRoIS", xbins=100, xmin=-1, xmax=1)
+   monTool.defineHistogram('vertex_y', path='EXPERT', type='TH1F', title="EF RoI Vertex y; Vertex y; nRoIS", xbins=100, xmin=-2, xmax=0)
+   monTool.defineHistogram('vertex_z', path='EXPERT', type='TH1F', title="EF RoI Vertex z; Vertex z; nRoIS", xbins=120, xmin=-120, xmax=120)
    monTool.defineHistogram('RNNJetScore', path='EXPERT', type='TH1F', title="EF RNN score; RNN score; nTaus", xbins=40, xmin=0, xmax=1) 
    monTool.defineHistogram('RNNJetScoreSigTrans', path='EXPERT', type='TH1F', title="EF RNN score; RNN score sig trans; nTaus", xbins=40, xmin=0, xmax=1)
-   monTool.defineHistogram('EtFinal, EtaEF', path='EXPERT', type='TH2F', title="Et Final vs Eta EF; Et Final; Eta EF",
+   monTool.defineHistogram('EtFinal, EtaEF', path='EXPERT', type='TH2F', title="Eta EF vs Et Final; Et Final; Eta EF",
                                                            xbins=100 , xmin=0, xmax=1000,
                                                            ybins=100, ymin=-2.6, ymax=2.6)
-   monTool.defineHistogram('EtFinal, PhiEF', path='EXPERT', type='TH2F', title="Et Final vs Phi EF; Et Final; Phi EF",
+   monTool.defineHistogram('EtFinal, PhiEF', path='EXPERT', type='TH2F', title="Phi Ef vs Et Final; Et Final; Phi EF",
                                                            xbins=100 , xmin=0, xmax=1000,
                                                            ybins=100, ymin=-3.2, ymax=3.2)
 
    return monTool
-
-
-
-
diff --git a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
index 93c4070af839bd8f867b1341125a5dfdca69fa7b..2d827555e7bf46313b82e6f82d7d5418b9d9066d 100644
--- a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
+++ b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMerged.cxx
@@ -145,6 +145,7 @@ StatusCode TrigTauRecMerged::execute(const EventContext& ctx) const
   auto ptRatioEflowApprox = Monitored::Scalar<float>("ptRatioEflowApprox", -99.9);
   auto pt_jetseed_log     = Monitored::Scalar<float>("pt_jetseed_log",-99.9);
   auto ptDetectorAxis     = Monitored::Scalar<float>("ptDetectorAxis",-99.9);
+  auto ptDetectorAxis_log  = Monitored::Scalar<float>("ptDetectorAxis_log",-99.9);
   auto RNN_tracknumber    = Monitored::Scalar<int>("RNN_tracknumber",0);
   auto RNN_clusternumber  = Monitored::Scalar<int>("RNN_clusternumber",0); 
   auto RNNJetScore         = Monitored::Scalar<float>("RNNJetScore",0);
@@ -176,7 +177,7 @@ StatusCode TrigTauRecMerged::execute(const EventContext& ctx) const
   auto monitorIt = Monitored::Group( m_monTool, nCells, nTracks, dEta, dPhi, emRadius, hadRadius,
                    EtFinal, Et, EtHad, EtEm, EMFrac, IsoFrac, centFrac, nWideTrk, ipSigLeadTrk, trFlightPathSig, massTrkSys,
                    dRmax, numTrack, trkAvgDist, etovPtLead, PSSFraction, EMPOverTrkSysP, ChPiEMEOverCaloEME, SumPtTrkFrac,
-                   innerTrkAvgDist, Ncand, EtaL1, PhiL1, EtaEF, PhiEF, mEflowApprox, ptRatioEflowApprox, pt_jetseed_log, ptDetectorAxis, RNN_clusternumber, RNNJetScore, RNNJetScoreSigTrans, Cluster_et_log, Cluster_dEta, Cluster_dPhi, Cluster_log_SECOND_R,
+				     innerTrkAvgDist, Ncand, EtaL1, PhiL1, EtaEF, PhiEF, mEflowApprox, ptRatioEflowApprox, pt_jetseed_log, ptDetectorAxis, ptDetectorAxis_log, RNN_clusternumber, RNNJetScore, RNNJetScoreSigTrans, Cluster_et_log, Cluster_dEta, Cluster_dPhi, Cluster_log_SECOND_R,
                    Cluster_SECOND_LAMBDA, Cluster_CENTER_LAMBDA, RNN_tracknumber, EF_vertex_x, EF_vertex_y, EF_vertex_z, EF_calo_errors, EF_track_errors, Track_pt_log, Track_dEta, Track_dPhi, Track_z0sinThetaTJVA_abs_log, Track_d0_abs_log, Track_nIBLHitsAndExp,
                    Track_nPixelHitsPlusDeadSensors, Track_nSCTHitsPlusDeadSensors); 
 
@@ -508,7 +509,8 @@ StatusCode TrigTauRecMerged::execute(const EventContext& ctx) const
     
     pt_jetseed_log  = std::log10(p_tau->ptJetSeed());
 
-    ptDetectorAxis  =  std::log10(std::min(p_tau->ptDetectorAxis() / 1000.0, 10000.0));
+    ptDetectorAxis  =  std::min(p_tau->ptDetectorAxis() / 1000.0, 10000.0);
+    ptDetectorAxis_log  =  std::log10(std::min(p_tau->ptDetectorAxis() / 1000.0, 10000.0));
     
     if( p_tau->nTracks() > 0 ) {
       ipSigLeadTrk = std::abs(p_tau->track(0)->d0SigTJVA());
diff --git a/Trigger/TrigAnalysis/TrigDecisionTool/python/TrigDecisionToolConfig.py b/Trigger/TrigAnalysis/TrigDecisionTool/python/TrigDecisionToolConfig.py
index 5308fd3a2f44442816cf844daddce2fe5220a9cc..bed4ea3899ebbf53c8d17b075ca36a5c02457d96 100644
--- a/Trigger/TrigAnalysis/TrigDecisionTool/python/TrigDecisionToolConfig.py
+++ b/Trigger/TrigAnalysis/TrigDecisionTool/python/TrigDecisionToolConfig.py
@@ -28,7 +28,7 @@ possible_keys = [
 
 def getRun3NavigationContainerFromInput(ConfigFlags):
     # What to return if we cannot look in the file
-    default_key = "HLTNav_Summary_OnlineSlimmed"
+    default_key = "HLTNav_Summary_OnlineSlimmed" if ConfigFlags.Trigger.doOnlineNavigationCompactification else "HLTNav_Summary"
     to_return = default_key
 
     for key in possible_keys:
diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h
index ed5346938d2fab7c41d13e59e975fce4063d6c3e..c20ee80a1c6575ec386442a8df484730e5c11d7f 100644
--- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h
+++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h
@@ -223,7 +223,7 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_ptMinToTopoMeV1;
           if(module=="2C" || module=="2A") return m_ptMinToTopoMeV2;
           if(module=="3C" || module=="3A") return m_ptMinToTopoMeV3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jEM ptMinToTopo");
       }
       float ptMinxTOB(const std::string& module) const { return ptMinxTOBMeV(module)/ 1000.0; }
       unsigned int ptMinxTOBCounts(const std::string& module) const { return energyInCounts(ptMinxTOBMeV(module), resolutionMeV()); }
@@ -231,7 +231,7 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_ptMinxTOBMeV1;
           if(module=="2C" || module=="2A") return m_ptMinxTOBMeV2;
           if(module=="3C" || module=="3A") return m_ptMinxTOBMeV3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jEM ptMinxTOB");
       }
    private:
       /** Update the internal members */
@@ -315,7 +315,7 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_ptMinToTopoMeV1;
           if(module=="2C" || module=="2A") return m_ptMinToTopoMeV2;
           if(module=="3C" || module=="3A") return m_ptMinToTopoMeV3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jTAU ptMinToTopo");
       }
       float ptMinxTOB(const std::string& module) const { return ptMinxTOBMeV(module)/ 1000.0; }
       unsigned int ptMinxTOBCounts(const std::string& module) const { return energyInCounts(ptMinxTOBMeV(module), resolutionMeV()); }
@@ -323,7 +323,7 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_ptMinxTOBMeV1;
           if(module=="2C" || module=="2A") return m_ptMinxTOBMeV2;
           if(module=="3C" || module=="3A") return m_ptMinxTOBMeV3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jTAU ptMinxTOB");
       }
    private:
       /** Update the internal members */
@@ -379,7 +379,7 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_ptMinToTopoMeV1;
           if(module=="2C" || module=="2A") return m_ptMinToTopoMeV2;
           if(module=="3C" || module=="3A") return m_ptMinToTopoMeV3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jJ ptMinToTopo");
       }
       float ptMinxTOB(const std::string& module) const { return ptMinxTOBMeV(module)/ 1000.0; }
       unsigned int ptMinxTOBCounts(const std::string& module) const { return energyInCounts(ptMinxTOBMeV(module), resolutionMeV()); }
@@ -387,7 +387,7 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_ptMinxTOBMeV1;
           if(module=="2C" || module=="2A") return m_ptMinxTOBMeV2;
           if(module=="3C" || module=="3A") return m_ptMinxTOBMeV3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jJ ptMinxTOB");
       }
    private:
       /** Update the internal members */
@@ -413,7 +413,7 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_ptMinToTopoMeV1;
           if(module=="2C" || module=="2A") return m_ptMinToTopoMeV2;
           if(module=="3C" || module=="3A") return m_ptMinToTopoMeV3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jLJ ptMinToTopo");
       }
       float ptMinxTOB(const std::string& module) const { return ptMinxTOBMeV(module)/ 1000.0; }
       unsigned int ptMinxTOBCounts(const std::string& module) const { return energyInCounts(ptMinxTOBMeV(module), resolutionMeV()); }
@@ -421,7 +421,7 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_ptMinxTOBMeV1;
           if(module=="2C" || module=="2A") return m_ptMinxTOBMeV2;
           if(module=="3C" || module=="3A") return m_ptMinxTOBMeV3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jLJ ptMinxTOB");
       }
    private:
       /** Update the internal members */
@@ -441,21 +441,19 @@ namespace TrigConf {
          L1ThrExtraInfoBase(thrTypeName, data) { load(); }
       virtual ~L1ThrExtraInfo_gJ() = default;
       virtual std::string className() const { return "L1ThrExtraInfo_gJ"; }
-      float ptMinToTopo(const std::string& fpga) const { return ptMinToTopoMeV(fpga)/ 1000.0; }
-      unsigned int ptMinToTopoCounts(const std::string& fpga) const { return energyInCounts(ptMinToTopoMeV(fpga), resolutionMeV()); }
-      unsigned int ptMinToTopoMeV(const std::string& fpga) const {
-          if(fpga=="A") return m_ptMinToTopoMeVA;
-          if(fpga=="B") return m_ptMinToTopoMeVB;
-          if(fpga=="C") return m_ptMinToTopoMeVC;
-          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised");
+      float ptMinToTopo(const unsigned int eta_range) const { return ptMinToTopoMeV(eta_range)/ 1000.0; }
+      unsigned int ptMinToTopoCounts(const unsigned int eta_range) const { return energyInCounts(ptMinToTopoMeV(eta_range), resolutionMeV()); }
+      unsigned int ptMinToTopoMeV(const unsigned int eta_range) const {
+          if(eta_range==1) return m_ptMinToTopoMeV1;
+          if(eta_range==2) return m_ptMinToTopoMeV2;
+          throw std::runtime_error("L1ThrExtraInfo: Eta range " + std::to_string(eta_range) + " not valid for gJ ptMinToTopo");
       }
    private:
       /** Update the internal members */
       void load();
       /** gJ specific data */
-      unsigned int m_ptMinToTopoMeVA{0};
-      unsigned int m_ptMinToTopoMeVB{0};
-      unsigned int m_ptMinToTopoMeVC{0};
+      unsigned int m_ptMinToTopoMeV1{0};
+      unsigned int m_ptMinToTopoMeV2{0};
    };
 
    class L1ThrExtraInfo_gLJ final : public L1ThrExtraInfoBase {
@@ -464,21 +462,50 @@ namespace TrigConf {
          L1ThrExtraInfoBase(thrTypeName, data) { load(); }
       virtual ~L1ThrExtraInfo_gLJ() = default;
       virtual std::string className() const { return "L1ThrExtraInfo_gLJ"; }
-      float ptMinToTopo(const std::string& fpga) const { return ptMinToTopoMeV(fpga)/ 1000.0; }
-      unsigned int ptMinToTopoCounts(const std::string& fpga) const { return energyInCounts(ptMinToTopoMeV(fpga), resolutionMeV()); }
-      unsigned int ptMinToTopoMeV(const std::string& fpga) const {
-          if(fpga=="A") return m_ptMinToTopoMeVA;
-          if(fpga=="B") return m_ptMinToTopoMeVB;
-          if(fpga=="C") return m_ptMinToTopoMeVC;
-          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised");
+      float ptMinToTopo(const unsigned int eta_range) const { return ptMinToTopoMeV(eta_range)/ 1000.0; }
+      unsigned int ptMinToTopoCounts(const unsigned int eta_range) const { return energyInCounts(ptMinToTopoMeV(eta_range), resolutionMeV()); }
+      unsigned int ptMinToTopoMeV(const unsigned int eta_range) const {
+          if(eta_range==1) return m_ptMinToTopoMeV1;
+          if(eta_range==2) return m_ptMinToTopoMeV2;
+          throw std::runtime_error("L1ThrExtraInfo: Eta range " + std::to_string(eta_range) + " not valid for gLJ ptMinToTopo");
+      }
+      float seedThr(const std::string& fpga) const { return seedThrMeV(fpga)/ 1000.0; }
+      unsigned int seedThrCounts(const std::string& fpga) const { return energyInCounts(seedThrMeV(fpga), resolutionMeV()); }
+      unsigned int seedThrMeV(const std::string& fpga) const {
+          if(fpga=="A") return m_seedThrMeVA;
+          if(fpga=="B") return m_seedThrMeVB;
+          if(fpga=="C") return m_seedThrMeVC;
+          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised for gLJ seedThr");
+      }
+      float rhoTowerMin(const std::string& fpga) const { return rhoTowerMinMeV(fpga)/ 1000.0; }
+      int rhoTowerMinMeV(const std::string& fpga) const {
+          if(fpga=="A") return m_rhoTowerMinMeVA;
+          if(fpga=="B") return m_rhoTowerMinMeVB;
+          if(fpga=="C") return m_rhoTowerMinMeVC;
+          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised for gLJ rhoTowerMin");
+      }
+      float rhoTowerMax(const std::string& fpga) const { return rhoTowerMaxMeV(fpga)/ 1000.0; }
+      int rhoTowerMaxMeV(const std::string& fpga) const {
+          if(fpga=="A") return m_rhoTowerMaxMeVA;
+          if(fpga=="B") return m_rhoTowerMaxMeVB;
+          if(fpga=="C") return m_rhoTowerMaxMeVC;
+          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised for gLJ rhoTowerMax");
       }
    private:
       /** Update the internal members */
       void load();
       /** gLJ specific data */
-      unsigned int m_ptMinToTopoMeVA{0};
-      unsigned int m_ptMinToTopoMeVB{0};
-      unsigned int m_ptMinToTopoMeVC{0};
+      unsigned int m_ptMinToTopoMeV1{0};
+      unsigned int m_ptMinToTopoMeV2{0};
+      unsigned int m_seedThrMeVA{0};
+      unsigned int m_seedThrMeVB{0};
+      unsigned int m_seedThrMeVC{0};
+      int m_rhoTowerMaxMeVA{0};
+      int m_rhoTowerMaxMeVB{0};
+      int m_rhoTowerMaxMeVC{0};
+      int m_rhoTowerMinMeVA{0};
+      int m_rhoTowerMinMeVB{0};
+      int m_rhoTowerMinMeVC{0};
    };
 
    class L1ThrExtraInfo_jXE final : public L1ThrExtraInfoBase {
@@ -503,13 +530,13 @@ namespace TrigConf {
           if(module=="1C" || module=="1A") return m_etaBoundary1_fw;
           if(module=="2C" || module=="2A") return m_etaBoundary2_fw;
           if(module=="3C" || module=="3A") return m_etaBoundary3_fw; 
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised"); 
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jTE etaBoundary_fw"); 
       }
       unsigned int etaBoundary(const std::string& module) const {
           if(module=="1C" || module=="1A") return m_etaBoundary1;
           if(module=="2C" || module=="2A") return m_etaBoundary2;
           if(module=="3C" || module=="3A") return m_etaBoundary3;
-          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised");
+          throw std::runtime_error("L1ThrExtraInfo: Module" + module + " not recongnised for jTE etaBoundary");
       }
    private:
       /** Update the internal members */
@@ -529,10 +556,57 @@ namespace TrigConf {
          L1ThrExtraInfoBase(thrTypeName, data) { load(); }
       virtual ~L1ThrExtraInfo_gXE() = default;
       virtual std::string className() const { return "L1ThrExtraInfo_gXE"; }
+      float seedThr(const std::string& fpga) const { return seedThrMeV(fpga)/ 1000.0; }
+      unsigned int seedThrCounts(const std::string& fpga) const { return energyInCounts(seedThrMeV(fpga), resolutionMeV()); }
+      unsigned int seedThrMeV(const std::string& fpga) const {
+          if(fpga=="A") return m_seedThrMeVA;
+          if(fpga=="B") return m_seedThrMeVB;
+          if(fpga=="C") return m_seedThrMeVC;
+          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised for gXE seedThr");
+      }
+      unsigned int XERHO_param(const std::string& fpga, const std::string& sigma) const {
+          if(fpga=="A" && sigma=="pos") return m_XERHO_sigmaPosA;
+          if(fpga=="B" && sigma=="pos") return m_XERHO_sigmaPosB;
+          if(fpga=="C" && sigma=="pos") return m_XERHO_sigmaPosC;
+          if(fpga=="A" && sigma=="neg") return m_XERHO_sigmaNegA;
+          if(fpga=="B" && sigma=="neg") return m_XERHO_sigmaNegB;
+          if(fpga=="C" && sigma=="neg") return m_XERHO_sigmaNegC;
+          throw std::runtime_error("L1ThrExtraInfo: " + fpga + " and " + sigma + " not recongnised for gXE XERHO_param");
+      }
+      unsigned int JWOJ_param(const std::string& fpga, const std::string& param) const {
+          if(fpga=="A" && param=="a") return m_XEJWOJ_a_A;
+          if(fpga=="B" && param=="a") return m_XEJWOJ_a_B;
+          if(fpga=="C" && param=="a") return m_XEJWOJ_a_C;
+          if(fpga=="A" && param=="b") return m_XEJWOJ_b_A;
+          if(fpga=="B" && param=="b") return m_XEJWOJ_b_B;
+          if(fpga=="C" && param=="b") return m_XEJWOJ_b_C;
+          if(fpga=="A" && param=="c") return m_XEJWOJ_c_A;
+          if(fpga=="B" && param=="c") return m_XEJWOJ_c_B;
+          if(fpga=="C" && param=="c") return m_XEJWOJ_c_C;
+          throw std::runtime_error("L1ThrExtraInfo: " + fpga + " and " + param  + " not recongnised for gXE JWOJ_param");
+      }
    private:
       /** Update the internal members */
       void load();
       /** gXE specific data */
+      unsigned int m_XERHO_sigmaPosA{0};
+      unsigned int m_XERHO_sigmaPosB{0};
+      unsigned int m_XERHO_sigmaPosC{0};
+      unsigned int m_XERHO_sigmaNegA{0};
+      unsigned int m_XERHO_sigmaNegB{0};
+      unsigned int m_XERHO_sigmaNegC{0};
+      unsigned int m_seedThrMeVA{0};
+      unsigned int m_seedThrMeVB{0};
+      unsigned int m_seedThrMeVC{0};
+      unsigned int m_XEJWOJ_a_A{0};
+      unsigned int m_XEJWOJ_a_B{0};
+      unsigned int m_XEJWOJ_a_C{0};
+      unsigned int m_XEJWOJ_b_A{0};
+      unsigned int m_XEJWOJ_b_B{0};
+      unsigned int m_XEJWOJ_b_C{0};
+      unsigned int m_XEJWOJ_c_A{0};
+      unsigned int m_XEJWOJ_c_B{0};
+      unsigned int m_XEJWOJ_c_C{0};
    };
 
    class L1ThrExtraInfo_gTE final : public L1ThrExtraInfoBase {
diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h
index 8dd9c1c87cbe93621a77edf55d892c1286a33a83..d20414ba3a363149e1165331ac97107fb71f692a 100644
--- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h
+++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h
@@ -118,9 +118,9 @@ namespace TrigConf {
           jTEFWD  = 4, 
           jTEFWDA = 5, 
           jTEFWDC = 6, 
-          gXE     = 7, 
+          gXEJWOJ = 7, 
           gXERHO  = 8, 
-          gXEPUFIT = 9, 
+          gXENC   = 9, 
           gTE     = 10,
           jXEPerf = 11, // Only for simulation studies!
       };
@@ -133,9 +133,9 @@ namespace TrigConf {
           if(flavInt==int(FLAV::jTEFWD))  return "jTEFWD";
           if(flavInt==int(FLAV::jTEFWDA)) return "jTEFWDA";
           if(flavInt==int(FLAV::jTEFWDC)) return "jTEFWDC";
-          if(flavInt==int(FLAV::gXE))     return "gXE";
+          if(flavInt==int(FLAV::gXEJWOJ)) return "gXEJWOJ";
           if(flavInt==int(FLAV::gXERHO))  return "gXERHO";
-          if(flavInt==int(FLAV::gXEPUFIT)) return "gXEPUFIT";
+          if(flavInt==int(FLAV::gXENC))   return "gXENC";
           if(flavInt==int(FLAV::gTE))     return "gTE";
           if(flavInt==int(FLAV::jXEPerf))     return "jXEPerf";
           throw std::runtime_error("Flavour " + std::to_string(flavInt) + " for EnergyThreshold algorithm not recongnised!");
@@ -148,9 +148,11 @@ namespace TrigConf {
           if(flavStr=="jTEFWD")  return int(FLAV::jTEFWD);
           if(flavStr=="jTEFWDA") return int(FLAV::jTEFWDA);
           if(flavStr=="jTEFWDC") return int(FLAV::jTEFWDC);
-          if(flavStr=="gXE")     return int(FLAV::gXE);
+          if(flavStr=="gXE")     return int(FLAV::gXEJWOJ); // for backward compatibility
+          if(flavStr=="gXEJWOJ") return int(FLAV::gXEJWOJ);
           if(flavStr=="gXERHO")  return int(FLAV::gXERHO);
-          if(flavStr=="gXEPUFIT") return int(FLAV::gXEPUFIT);
+          if(flavStr=="gXEPUFIT") return int(FLAV::gXENC); // for backward compatibility
+          if(flavStr=="gXENC")   return int(FLAV::gXENC);
           if(flavStr=="gTE")     return int(FLAV::gTE);
           if(flavStr=="jXEPerf")     return int(FLAV::jXEPerf);
           throw std::runtime_error("Flavour " + flavStr + " for EnergyThreshold algorithm not recongnised!");
diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx
index 7e0d18269aa47d6290e508bf59360e039afd7857..6e65cbac923ec06fb27626626b912406da4a16de 100644
--- a/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx
+++ b/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx
@@ -547,13 +547,11 @@ void
 TrigConf::L1ThrExtraInfo_gJ::load()
 {
    for( auto & x : m_extraInfo ) {
-      if( x.first == "ptMinToTopoA" ) {
-         m_ptMinToTopoMeVA = 1000*x.second.getValue<unsigned int>();
-      } else if( x.first == "ptMinToTopoB" ){
-         m_ptMinToTopoMeVB = 1000*x.second.getValue<unsigned int>();
-      } else if( x.first == "ptMinToTopoC" ){
-         m_ptMinToTopoMeVC = 1000*x.second.getValue<unsigned int>();
-      } 
+      if( x.first == "ptMinToTopo1" ) {
+         m_ptMinToTopoMeV1 = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "ptMinToTopo2" ){
+         m_ptMinToTopoMeV2 = 1000*x.second.getValue<unsigned int>();
+      }
    }
 }
 
@@ -564,12 +562,46 @@ void
 TrigConf::L1ThrExtraInfo_gLJ::load()
 {
    for( auto & x : m_extraInfo ) {
-      if( x.first == "ptMinToTopoA" ) {
-         m_ptMinToTopoMeVA = 1000*x.second.getValue<unsigned int>();
-      } else if( x.first == "ptMinToTopoB" ){
-         m_ptMinToTopoMeVB = 1000*x.second.getValue<unsigned int>();
-      } else if( x.first == "ptMinToTopoC" ){
-         m_ptMinToTopoMeVC = 1000*x.second.getValue<unsigned int>();
+      if( x.first == "ptMinToTopo1" ) {
+         m_ptMinToTopoMeV1 = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "ptMinToTopo2" ){
+         m_ptMinToTopoMeV2 = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "seedThrA" ){
+         m_seedThrMeVA = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "seedThrB" ){
+         m_seedThrMeVB = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "seedThrC" ){
+         m_seedThrMeVC = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "rhoTowerMinA" ){
+         float rhoTower_tmp = 1000*x.second.getValue<float>();
+         if( (int)rhoTower_tmp != rhoTower_tmp)
+             throw std::runtime_error("gLJ: rhoTower param " + std::to_string(rhoTower_tmp/1000.) + " cannot be converted in MeV" ); 
+         m_rhoTowerMinMeVA = (int)rhoTower_tmp;        
+      } else if( x.first == "rhoTowerMinB" ){
+         float rhoTower_tmp = 1000*x.second.getValue<float>();
+         if( (int)rhoTower_tmp != rhoTower_tmp)
+             throw std::runtime_error("gLJ: rhoTower param " + std::to_string(rhoTower_tmp/1000.) + " cannot be converted in MeV" );  
+         m_rhoTowerMinMeVB = (int)rhoTower_tmp; 
+      } else if( x.first == "rhoTowerMinC" ){
+         float rhoTower_tmp = 1000*x.second.getValue<float>();
+         if( (int)rhoTower_tmp != rhoTower_tmp)
+             throw std::runtime_error("gLJ: rhoTower param " + std::to_string(rhoTower_tmp/1000.) + " cannot be converted in MeV" );  
+         m_rhoTowerMinMeVC = (int)rhoTower_tmp; 
+      } else if( x.first == "rhoTowerMaxA" ){
+         float rhoTower_tmp = 1000*x.second.getValue<float>();
+         if( (int)rhoTower_tmp != rhoTower_tmp)
+             throw std::runtime_error("gLJ: rhoTower param " + std::to_string(rhoTower_tmp/1000.) + " cannot be converted in MeV" );  
+         m_rhoTowerMaxMeVA = (int)rhoTower_tmp; 
+      } else if( x.first == "rhoTowerMaxB" ){
+         float rhoTower_tmp = 1000*x.second.getValue<float>();
+         if( (int)rhoTower_tmp != rhoTower_tmp)
+             throw std::runtime_error("gLJ: rhoTower param " + std::to_string(rhoTower_tmp/1000.) + " cannot be converted in MeV" );
+         m_rhoTowerMaxMeVB = (int)rhoTower_tmp;
+      } else if( x.first == "rhoTowerMaxC" ){
+         float rhoTower_tmp = 1000*x.second.getValue<float>();
+         if( (int)rhoTower_tmp != rhoTower_tmp)
+             throw std::runtime_error("gLJ: rhoTower param " + std::to_string(rhoTower_tmp/1000.) + " cannot be converted in MeV" );
+         m_rhoTowerMaxMeVC = (int)rhoTower_tmp;
       }
    }  
 }
@@ -611,6 +643,45 @@ TrigConf::L1ThrExtraInfo_jTE::load()
 void
 TrigConf::L1ThrExtraInfo_gXE::load()
 {
+   for( auto & x : m_extraInfo ) {
+      if( x.first == "seedThrA" ){
+         m_seedThrMeVA = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "seedThrB" ){
+         m_seedThrMeVB = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "seedThrC" ){
+         m_seedThrMeVC = 1000*x.second.getValue<unsigned int>();
+      } else if( x.first == "XERHO_sigmaPosA" ){
+         m_XERHO_sigmaPosA = x.second.getValue<unsigned int>();
+      } else if( x.first == "XERHO_sigmaPosB" ){
+         m_XERHO_sigmaPosB = x.second.getValue<unsigned int>();
+      } else if( x.first == "XERHO_sigmaPosC" ){
+         m_XERHO_sigmaPosC = x.second.getValue<unsigned int>();
+      } else if( x.first == "XERHO_sigmaNegA" ){
+         m_XERHO_sigmaNegA = x.second.getValue<unsigned int>();
+      } else if( x.first == "XERHO_sigmaNegB" ){
+         m_XERHO_sigmaNegB = x.second.getValue<unsigned int>();
+      } else if( x.first == "XERHO_sigmaNegC" ){
+         m_XERHO_sigmaNegC = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_a_A" ){
+         m_XEJWOJ_a_A = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_a_B" ){
+         m_XEJWOJ_a_B = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_a_C" ){
+         m_XEJWOJ_a_C = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_b_A" ){
+         m_XEJWOJ_b_A = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_b_B" ){
+         m_XEJWOJ_b_B = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_b_C" ){
+         m_XEJWOJ_b_C = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_c_A" ){
+         m_XEJWOJ_c_A = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_c_B" ){
+         m_XEJWOJ_c_B = x.second.getValue<unsigned int>();
+      } else if( x.first == "XEJWOJ_c_C" ){
+         m_XEJWOJ_c_C = x.second.getValue<unsigned int>();
+      }
+   }
 }
 
 /*******
diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriterL1.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriterL1.cxx
index c717a3d39731ea57b22eea85bba995c90bf76c2b..df8b472bf185dc45f5a708f54a416b3e77466df8 100644
--- a/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriterL1.cxx
+++ b/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriterL1.cxx
@@ -569,16 +569,40 @@ TrigConf::JsonFileWriterL1::writeJsonFile(const std::string & filename, const L1
 
       if(thrType == "gJ") {
          auto & gjinfo = l1menu.thrExtraInfo().gJ();
-         jThrType["ptMinToTopoA"] = (int)gjinfo.ptMinToTopo("A");
-         jThrType["ptMinToTopoB"] = (int)gjinfo.ptMinToTopo("B");
-         jThrType["ptMinToTopoC"] = (int)gjinfo.ptMinToTopo("C");     
+         jThrType["ptMinToTopo1"] = (int)gjinfo.ptMinToTopo(1);
+         jThrType["ptMinToTopo2"] = (int)gjinfo.ptMinToTopo(2);
       }
 
       if(thrType == "gLJ") {
          auto & gljinfo = l1menu.thrExtraInfo().gLJ();
-         jThrType["ptMinToTopoA"] = (int)gljinfo.ptMinToTopo("A");
-         jThrType["ptMinToTopoB"] = (int)gljinfo.ptMinToTopo("B");
-         jThrType["ptMinToTopoC"] = (int)gljinfo.ptMinToTopo("C");
+         jThrType["ptMinToTopo1"] = (int)gljinfo.ptMinToTopo(1);
+         jThrType["ptMinToTopo2"] = (int)gljinfo.ptMinToTopo(2);
+         jThrType["seedThrA"] = (int)gljinfo.seedThr("A");
+         jThrType["seedThrB"] = (int)gljinfo.seedThr("B");
+         jThrType["seedThrC"] = (int)gljinfo.seedThr("C");
+         std::stringstream stream;
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin("A");
+         jThrType["rhoTowerMinA"] = std::stod(stream.str());
+         stream.str("");
+         stream.clear(); 
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin("B");
+         jThrType["rhoTowerMinB"] = std::stod(stream.str());
+         stream.str("");
+         stream.clear();      
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin("C");
+         jThrType["rhoTowerMinC"] = std::stod(stream.str());
+         stream.str("");
+         stream.clear(); 
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax("A");
+         jThrType["rhoTowerMaxA"] = std::stod(stream.str());
+         stream.str("");
+         stream.clear();      
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax("B");
+         jThrType["rhoTowerMaxB"] = std::stod(stream.str());
+         stream.str("");
+         stream.clear();
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax("C");
+         jThrType["rhoTowerMaxC"] = std::stod(stream.str());
       }
 
       if(thrType == "jXE") {
@@ -596,7 +620,25 @@ TrigConf::JsonFileWriterL1::writeJsonFile(const std::string & filename, const L1
       }
 
       if(thrType == "gXE") {
-          // nothing to do for now...
+         auto & ei = l1menu.thrExtraInfo().gXE();
+         jThrType["seedThrA"] = (int)ei.seedThr("A");
+         jThrType["seedThrB"] = (int)ei.seedThr("B");
+         jThrType["seedThrC"] = (int)ei.seedThr("C");
+         jThrType["XERHO_sigmaPosA"] = ei.XERHO_param("A","pos");
+         jThrType["XERHO_sigmaPosB"] = ei.XERHO_param("B","pos");
+         jThrType["XERHO_sigmaPosC"] = ei.XERHO_param("C","pos");
+         jThrType["XERHO_sigmaNegA"] = ei.XERHO_param("A","neg");
+         jThrType["XERHO_sigmaNegB"] = ei.XERHO_param("B","neg");
+         jThrType["XERHO_sigmaNegC"] = ei.XERHO_param("C","neg");
+         jThrType["XEJWOJ_a_A"] = ei.JWOJ_param("A","a");
+         jThrType["XEJWOJ_a_B"] = ei.JWOJ_param("B","a");
+         jThrType["XEJWOJ_a_C"] = ei.JWOJ_param("C","a");
+         jThrType["XEJWOJ_b_A"] = ei.JWOJ_param("A","b");
+         jThrType["XEJWOJ_b_B"] = ei.JWOJ_param("B","b");
+         jThrType["XEJWOJ_b_C"] = ei.JWOJ_param("C","b");
+         jThrType["XEJWOJ_c_A"] = ei.JWOJ_param("A","c");
+         jThrType["XEJWOJ_c_B"] = ei.JWOJ_param("B","c");
+         jThrType["XEJWOJ_c_C"] = ei.JWOJ_param("C","c");
       }
 
       if(thrType == "gTE") {
diff --git a/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx b/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx
index 330515369e6b39ca7f918326a55833878ccb9804..cb892306c47e8935d15095a3ebdba8c8f62b4381 100644
--- a/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx
+++ b/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx
@@ -294,8 +294,8 @@ testL1Menu_Thresholds(const TrigConf::L1Menu & l1menu, bool printdetail)
       }
    }
 
-   const auto & thrjEM = dynamic_cast<const TrigConf::L1Threshold_jEM&>(l1menu.threshold("jEM18M"));
-   cout << "jEM18M isolation: iso = " << (int)thrjEM.iso() << ", frac = " << (int)thrjEM.frac() << ", frac2 = " << (int)thrjEM.frac2() << endl;
+   const auto & thrjEM = dynamic_cast<const TrigConf::L1Threshold_jEM&>(l1menu.threshold("jEM15M"));
+   cout << "jEM15M isolation: iso = " << (int)thrjEM.iso() << ", frac = " << (int)thrjEM.frac() << ", frac2 = " << (int)thrjEM.frac2() << endl;
 
    const auto & thrjJET = dynamic_cast<const TrigConf::L1Threshold_jJ&>(l1menu.threshold("jJ12p0ETA25"));
    if(thrjJET) {
@@ -466,6 +466,32 @@ testL1Menu_Extrainfo(const TrigConf::L1Menu & l1menu)
       cout << "    ptMinxTOB (MeV) " << ex.ptMinxTOBMeV("1A") << endl;
       cout << "    ptMinxTOB (counts) " << ex.ptMinxTOBCounts("1A") << endl;
    }
+   {  
+      auto & ex = l1menu.thrExtraInfo().gLJ();
+      cout << "  gLJ" << endl;
+      cout << "    energy resolution (MeV) " << ex.resolutionMeV() << endl;
+      cout << "    ptMinToTopo (eta range "<<std::to_string(1)<<") in GeV " << ex.ptMinToTopo(1) << endl; 
+      cout << "    ptMinToTopo (MeV) " << ex.ptMinToTopoMeV(1) << endl; 
+      cout << "    ptMinToTopo (counts) " << ex.ptMinToTopoCounts(1) << endl;
+      cout << "    seedThr(A) " << ex.seedThr("A") << endl; 
+      cout << "    seedThr(A) (MeV) " << ex.seedThrMeV("A") << endl; 
+      cout << "    rhoTowerMin(B) " << ex.rhoTowerMin("B") << endl;   
+      cout << "    rhoTowerMin(B) (MeV) " << ex.rhoTowerMinMeV("B") << endl;  
+      cout << "    rhoTowerMax(C) " << ex.rhoTowerMax("C") << endl;
+      cout << "    rhoTowerMax(C) (MeV) " << ex.rhoTowerMaxMeV("C") << endl;
+   }
+   {
+      auto & ex = l1menu.thrExtraInfo().gXE();
+      cout << "  gXE" << endl;
+      cout << "    energy resolution (MeV) " << ex.resolutionMeV() << endl;
+      cout << "    seedThr(A) " << ex.seedThr("A") << endl;
+      cout << "    seedThr(A) (MeV) " << ex.seedThrMeV("A") << endl;
+      cout << "    XERHO_sigmaPosA " << ex.XERHO_param("A","pos") << endl;
+      cout << "    XERHO_sigmaNegB " << ex.XERHO_param("B","neg") << endl;
+      cout << "    XEJWOJ_a_C " << ex.JWOJ_param("C","a") << endl;
+      cout << "    XEJWOJ_b_B " << ex.JWOJ_param("B","b") << endl;
+      cout << "    XEJWOJ_c_A " << ex.JWOJ_param("A","c") << endl;
+   }
    {
       auto & ex = l1menu.thrExtraInfo().eTAU();
       cout << "  eTAU" << endl;
diff --git a/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py b/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py
index 8d5f41f3166155d8153624b77f0924634d978d4b..869c74d6af5751e7a58dcf3b3c50bcc4e2370976 100644
--- a/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py
+++ b/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py
@@ -6,12 +6,22 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.AccumulatorCache import AccumulatorCache
 
 from collections import OrderedDict as odict
-from functools import lru_cache
+from functools import cache
 import json
 
 log = logging.getLogger('TrigConfigSvcCfg')
 
-@lru_cache(maxsize=None)
+# To avoid accidental overrwrite of the L1 JSON menu, only allow one L1 menu generation.
+# Either via JSON conversion from Run-1&2 or native Run-3 (see ATR-24531).
+def l1menu_generated():
+    try:
+        return l1menu_generated._hasRun
+    except AttributeError:
+        l1menu_generated._hasRun = True
+        return False
+
+
+@cache
 def getTrigConfFromCool(runNumber, lumiBlock):
     from TrigConfStorage.TriggerCoolUtil import TriggerCoolUtil 
     db = TriggerCoolUtil.GetConnection('CONDBR2' if runNumber > 230000 else 'COMP200')
@@ -47,11 +57,15 @@ def getTrigConfFromCool(runNumber, lumiBlock):
     return d
 
 
-@lru_cache(maxsize=None)
+@cache
 def createJsonMenuFiles(run, lb):
     """Retrieve Run-2 trigger configuration from the DB and save as Run3 .JSON files"""
     import subprocess
 
+    if l1menu_generated():
+        log.error("L1 menu has already been generated")
+        return None
+
     log.info("Configuring Run-1&2 to Run-3 configuration metadata conversion")
     triggerDBKeys = getTrigConfFromCool(run, lb)
     triggerDBKeys['DB'] = 'TRIGGERDB' if run > 230000 else 'TRIGGERDB_RUN1'
@@ -176,6 +190,10 @@ def createL1PrescalesFileFromMenu( flags ):
 
 # L1 menu generation
 def generateL1Menu( flags ):
+    if l1menu_generated():
+        log.error("L1 menu has already been generated")
+        return
+
     log.info("Generating L1 menu %s", flags.Trigger.triggerMenuSetup)
     from TriggerMenuMT.L1.L1MenuConfig import L1MenuConfig
     l1cfg = L1MenuConfig(menuName = flags.Trigger.triggerMenuSetup)
@@ -321,6 +339,10 @@ if __name__ == "__main__":
 
     class Tests(unittest.TestCase):
 
+        def setUp(self):
+            # Allow multiple L1 menu generations for these tests
+            l1menu_generated._hasRun = False
+
         def test_currentMenu(self):
             from AthenaConfiguration.AllConfigFlags import _createCfgFlags
             ConfigFlags = _createCfgFlags()
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBmumuxComboHypoConfig.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBmumuxComboHypoConfig.py
index 2b1874949c0ad8f2721925f4851942896de29769..86984952459cfd6daab71496d24f47e822ec37e5 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBmumuxComboHypoConfig.py
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBmumuxComboHypoConfig.py
@@ -97,6 +97,18 @@ def BmumuxComboHypoCfg(name):
         BcToDplusMuMu_dimuonMassRange = (2500., 4300.),
         BcToDplusMuMu_DplusMassRange = (1750., 2000.),
         BcToDplusMuMu_chi2 = 60.,
+        # B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+)
+        BcToDstarMuMu = True,
+        BcToDstarMuMu_makeDstar = True,
+        BcToDstarMuMu_minD0KaonPt = 1000.,
+        BcToDstarMuMu_minD0PionPt = 1000.,
+        BcToDstarMuMu_minDstarPionPt = 500.,
+        BcToDstarMuMu_maxDstarPionZ0 = 5.,
+        BcToDstarMuMu_massRange = (5500., 7300.),
+        BcToDstarMuMu_dimuonMassRange = (2500., 4300.),
+        BcToDstarMuMu_D0MassRange = (1750., 2000.),
+        BcToDstarMuMu_DstarMassRange = (-1., 2110.),
+        BcToDstarMuMu_chi2 = 60.,
         MonTool = TrigBmumuxComboHypoMonitoring('TrigBmumuxComboHypoMonitoring'))
 
     return hypo
@@ -115,14 +127,16 @@ class TrigBmumuxComboHypoConfig(object):
 
         tool = CompFactory.TrigBmumuxComboHypoTool(topoAlgs)
         decay = chainDict['topo'][-1]
-        trigDecayDict = {     # xAOD::TrigBphys::pType
-            'BpmumuKp':   7,  # BKMUMU
-            'BcmumuPi':  21,  # BCPIMUMU
-            'BsmumuPhi':  9,  # BSPHIMUMU
-            'BdmumuKst':  8,  # BDKSTMUMU
-            'LbPqKm':    22,  # LBPQMUMU
-            'BcmumuDploose' : 13,  # BCDPMUMU
-            'BcmumuDsloose' : 11   # BCDSMUMU
+        trigDecayDict = {             # xAOD::TrigBphys::pType
+            'BpmumuKp':           7,  # BKMUMU
+            'BcmumuPi':          21,  # BCPIMUMU
+            'BsmumuPhi':          9,  # BSPHIMUMU
+            'BdmumuKst':          8,  # BDKSTMUMU
+            'LbPqKm':            22,  # LBPQMUMU
+            'BcmumuDploose' :    13,  # BCDPMUMU
+            'BcmumuDsloose' :    11,  # BCDSMUMU
+            'BcmumuD0Xloose' :   19,  # DZKPI
+            'BcmumuDstarloose' : 14   # BCDSTMUMU
         }
 
         tool.Decay = trigDecayDict[decay]
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.cxx
deleted file mode 100644
index 6bc093f11960ab9be30f0d6e2fdaa5bbe3c7581a..0000000000000000000000000000000000000000
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.cxx
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "BtrigUtils.h"
-
-#include <math.h>
-
-//----------------------------------------------
-// pT calculation using xAOD::TrackParticle.
-//----------------------------------------------
-
-double PtVal(const std::vector<const xAOD::TrackParticle*> & tracks) {
-
-  std::vector<const xAOD::TrackParticle*>::const_iterator trkItr    = tracks.begin();
-  std::vector<const xAOD::TrackParticle*>::const_iterator trkItrEnd = tracks.end();
-
-  double px_sum = 0;
-  double py_sum = 0;
-
-  for ( ; trkItr!=trkItrEnd; trkItr++ ) {
-    px_sum += std::abs((*trkItr)->pt()) * cos((*trkItr)->phi());
-    py_sum += std::abs((*trkItr)->pt()) * sin((*trkItr)->phi());
-  }
-
-  double pt2 = px_sum*px_sum + py_sum*py_sum;
-
-  if ( pt2 < 0 ) return 0;
-  else          return sqrt(pt2);
-}
-
-//------------------------------------------------------------
-// L_xy calculation using Trk::Track and two vertex positions.
-//------------------------------------------------------------
-
-double LxyVal(const double px, const double py, const Amg::Vector3D &Vertex0, const Amg::Vector3D &Vertex1) {
-
-  double rdx = Vertex1[0] - Vertex0[0];
-  double rdy = Vertex1[1] - Vertex0[1];
-
-  double pt  = std::sqrt(px*px+py*py);
-  double rxy = std::sqrt(rdx*rdx+rdy*rdy);
-
-  double cosxy = 0.;
-  if ( rxy != 0. ) cosxy = (px*rdx+py*rdy)/rxy/pt;
-
-  return rxy*cosxy;
-}
-
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.h
deleted file mode 100644
index 22c4b168f4c08ee3469702ed40b8380977520836..0000000000000000000000000000000000000000
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef BTRIGUTILS_H
-#define BTRIGUTILS_H
-
-#include <vector>
-#include "xAODTracking/TrackParticle.h"
-#include "GeoPrimitives/GeoPrimitives.h"  // for Vector3D
-
-double PtVal(const std::vector<const xAOD::TrackParticle*>&);
-
-double LxyVal(const double, const double, const Amg::Vector3D&, const Amg::Vector3D&);
-
-#endif // BTRIGUTILS_H
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h
index 1cab1e5542e6e03384c602700d3aa5bbed614990..07f226bf38a865aaec7aa9841583fb0f380d29ac 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h
@@ -1,37 +1,10 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #ifndef TRIGBPHYSHYPO_CONSTANTS_H
 #define TRIGBPHYSHYPO_CONSTANTS_H
 
-constexpr double EPSILON     =      1.0E-6;
-constexpr double PROTONMASS  =    938.272;    //MeV
-constexpr double EMASS       =      0.511003;//MeV
-constexpr double MUMASS      =    105.65837; //MeV
-constexpr double PIMASS      =    139.57;    //MeV
-constexpr double JPSIMASS    =   3096.916;   //MeV
-constexpr double KMASS       =    493.677;   //MeV
-constexpr double PHIMASS     =   1020.;      //MeV
-constexpr double DSMASS      =   1968.2;     //MeV
-constexpr double KPLUSMASS   =    493.67700; //MeV
-constexpr double BPLUSMASS   =   5279.13;    //MeV
-constexpr double BSMASS      =   5369.3;     //MeV
-constexpr double KSTARMASS   =    891.66;    //MeV
-constexpr double BDMASS      =   5279.5;     //MeV
-constexpr double LAMBDAMASS  =   1115.683;   //MeV
-constexpr double LAMBDABMASS =   5620.2;     //MeV
-constexpr double BCMASS      =   6277.0;     //MeV
-
-/// list of decay constexprants BMuMuX
-constexpr int di_to_muons = 0;
-constexpr int b_to_K = 1;           // to recognize type of decay B+/- ->K+/-      mu+ mu-
-constexpr int bD_to_Kstar = 2; 		// to recognize type of decay Bd   ->K*(K+Pi-) mu+ mu-
-constexpr int bS_to_Phi = 3; 		// to recognize type of decay Bs   ->Phi(K+K-) mu+ mu-
-constexpr int lB_to_L = 4; 		    // to recognize type of decay Lb   ->L(PPi-)   mu+ mu-
-constexpr int bC_to_PiPi = 5; 	// to recognize type of decay Bc   ->D+(K-pi+pi+) mu+ mu-
-constexpr int di_to_electrons = 6;
-
 // PDG'2020
 struct PDG20 {
   static constexpr double
@@ -42,6 +15,7 @@ struct PDG20 {
     mKaon       =  493.677,
     mK_S0       =  497.611,
     mPhi1020    = 1019.461,
+    mD0         = 1864.83,
     mProton     =  938.2720813,
     mLambda0    = 1115.683,
     mJpsi       = 3096.900,
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.cxx
index e7a48021e83fe6aa5e97c5e6c337e67e69551ff1..4d7dee16aa62a2246a9624fa42bfe5656d66d357 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.cxx
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.cxx
@@ -37,11 +37,13 @@ using ROOT::Math::XYVector;
 
 
 const std::vector<std::vector<double>> TrigBmumuxComboHypo::s_trkMass{
-  {PDG::mMuon, PDG::mMuon},
-  {PDG::mMuon, PDG::mMuon, PDG::mKaon},
-  {PDG::mMuon, PDG::mMuon, PDG::mKaon, PDG::mKaon},
-  {PDG::mKaon, PDG::mKaon, PDG::mPion},
-  {PDG::mPion, PDG::mPion, PDG::mKaon}
+  {PDG::mMuon, PDG::mMuon},                          // {Psi.mu1, Psi.mu2}
+  {PDG::mMuon, PDG::mMuon, PDG::mKaon},              // {Psi.mu1, Psi.mu2, trk1}
+  {PDG::mMuon, PDG::mMuon, PDG::mKaon, PDG::mKaon},  // {Psi.mu1, Psi.mu2, trk1, trk2}
+  {PDG::mKaon, PDG::mKaon, PDG::mPion},              // {D_s+.K+, D_s+.K-, D_s+.pi+}
+  {PDG::mPion, PDG::mPion, PDG::mKaon},              // {D+.pi+, D+.pi+, D+.K-}
+  {PDG::mKaon, PDG::mPion},                          // {D0.K-, D0.pi+}
+  {PDG::mMuon, PDG::mMuon, PDG::mPion}               // {Psi.mu1, Psi.mu2, D*+.pi+}
 };
 
 TrigBmumuxComboHypo::TrigBmumuxComboHypo(const std::string& name, ISvcLocator* pSvcLocator)
@@ -332,11 +334,14 @@ StatusCode TrigBmumuxComboHypo::findBmumuxCandidates(TrigBmumuxState& state) con
     // we can safely omit tracks with large z0
     std::vector<ElementLink<xAOD::TrackParticleContainer>> selectedTracks;
     selectedTracks.reserve(tracks.size());
+    std::vector<double> selectedTrackZ0;
+    selectedTrackZ0.reserve(tracks.size());
     if (m_trkZ0 > 0.) {
       for (const auto& trackEL : tracks) {
         const Trk::Perigee* perigee = m_trackToVertexTool->perigeeAtVertex(**trackEL, dimuon->position());
         if (fabs(perigee->parameters()[Trk::z0]) < m_trkZ0) {
           selectedTracks.push_back(trackEL);
+          selectedTrackZ0.push_back(perigee->parameters()[Trk::z0]);
         }
         delete perigee;
       }
@@ -546,7 +551,87 @@ StatusCode TrigBmumuxComboHypo::findBmumuxCandidates(TrigBmumuxState& state) con
         }
       }
     }
-  }
+
+    // B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+)
+    if (m_BcToDstarMuMu && isInMassRange(p_dimuon.M(), m_BcToDstarMuMu_dimuonMassRange)) {
+      std::vector<ElementLink<xAOD::TrackParticleContainer>> trackParticleLinks_D0(2);  // {K-, pi+}
+
+      for (size_t itrk1 = 0; itrk1 < selectedTracks.size(); ++itrk1) {
+        const xAOD::TrackParticle* trk1 = *selectedTracks[itrk1];
+        if (isIdenticalTracks(mu1, trk1) || isIdenticalTracks(mu2, trk1)) continue;
+
+        trackParticleLinks_D0[0] = selectedTracks[itrk1];
+        auto p_trk1 = trk1->genvecP4();
+        p_trk1.SetM(PDG::mKaon);
+        auto charge1 = trk1->charge();
+
+        for (size_t itrk2 = 0; itrk2 < selectedTracks.size(); ++itrk2) {
+          if (itrk2 == itrk1) continue;
+          const xAOD::TrackParticle* trk2 = *selectedTracks[itrk2];
+          if (isIdenticalTracks(mu1, trk2) || isIdenticalTracks(mu2, trk2)) continue;
+
+          trackParticleLinks_D0[1] = selectedTracks[itrk2];
+          auto p_trk2 = trk2->genvecP4();
+          p_trk2.SetM(PDG::mPion);
+          auto charge2 = trk2->charge();
+
+          std::unique_ptr<xAOD::Vertex> D0;
+          if (charge1 * charge2 < 0. &&
+              p_trk1.Pt() > m_BcToDstarMuMu_minD0KaonPt &&
+              p_trk2.Pt() > m_BcToDstarMuMu_minD0PionPt &&
+              isInMassRange((p_trk1 + p_trk2).M(), m_BcToDstarMuMu_D0MassRange) &&
+              isInMassRange((p_dimuon + p_trk1 + p_trk2).M() - p_dimuon.M() + PDG::mJpsi, m_BcToDstarMuMu_massRange)) {
+            D0 = fit(state.context(), trackParticleLinks_D0, kD0, dimuon);
+          }
+          bool isValidD0 = false;
+          if (D0 && D0->chiSquared() < m_BcToDstarMuMu_chi2 && Lxy(dimuon->position(), *D0) > 0.) {
+            isValidD0 = true;
+            ATH_MSG_DEBUG( "Partially reconstructed B_c+(-> mu+ mu- D0 X) candidate has been created" );
+            xAOD::TrigBphys* trigBphys = makeTriggerObject(state, *D0, xAOD::TrigBphys::DZKPI, s_trkMass[kD0], dimuonTriggerObjectEL);
+            ATH_CHECK( state.addTriggerObject(trigBphys) );
+          }
+
+          if (m_BcToDstarMuMu_makeDstar && isValidD0) {  // full B_c+ reconstruction
+            xAOD::TrackParticle::GenVecFourMom_t p_D0 = momentum(*D0, s_trkMass[kD0]);
+
+            for (size_t itrk3 = 0; itrk3 < selectedTracks.size(); ++itrk3) {
+              const xAOD::TrackParticle* trk3 = *selectedTracks[itrk3];
+              if (itrk3 == itrk1 || itrk3 == itrk2 || isIdenticalTracks(mu1, trk3) || isIdenticalTracks(mu2, trk3)) continue;
+
+              // J/psi + pion from D*+
+              trackParticleLinks_vtx1[2] = selectedTracks[itrk3];
+              auto p_trk3 = trk3->genvecP4();
+              p_trk3.SetM(PDG::mPion);
+
+              if (p_trk3.Pt() > m_BcToDstarMuMu_minDstarPionPt &&
+                  (m_BcToDstarMuMu_maxDstarPionZ0 < 0. || fabs(selectedTrackZ0[itrk3]) < m_BcToDstarMuMu_maxDstarPionZ0) &&
+                  isInMassRange((p_D0 + p_trk3).M() - p_D0.M() + PDG::mD0, m_BcToDstarMuMu_DstarMassRange)) {
+                auto Bc_vtx1 = fit(state.context(), trackParticleLinks_vtx1, kB_PsiPi);
+
+                if (Bc_vtx1 && Bc_vtx1->chiSquared() < m_BcToDstarMuMu_chi2) {
+                  ATH_MSG_DEBUG( "Decay vertex(mu+ mu- D*+.pi+) for B_c+ candidate has been created" );
+                  xAOD::TrigBphys* triggerObject_vtx1 = makeTriggerObject(state, *Bc_vtx1, xAOD::TrigBphys::DSTDZPI, s_trkMass[kB_PsiPi], dimuonTriggerObjectEL);
+                  auto triggerObjectEL_vtx1 = ElementLink<xAOD::TrigBphysContainer>(state.trigBphysCollection(), state.trigBphysCollection().size());
+                  ATH_CHECK( state.addTriggerObject(triggerObject_vtx1) );
+                  ATH_CHECK( triggerObjectEL_vtx1.isValid() );
+
+                  // refit D0 vertex
+                  auto Bc_vtx2 = fit(state.context(), trackParticleLinks_D0, kD0, Bc_vtx1.get());
+                  if (Bc_vtx2 && Bc_vtx2->chiSquared() < m_BcToDstarMuMu_chi2) {
+                    ATH_MSG_DEBUG( "Fully reconstructed B_c+(-> mu+ mu- D*+) candidate has been created" );
+                    xAOD::TrigBphys* triggerObject_vtx2 = makeTriggerObject(state, *Bc_vtx2, xAOD::TrigBphys::BCDSTMUMU, s_trkMass[kD0], triggerObjectEL_vtx1);
+                    ATH_CHECK( state.addTriggerObject(triggerObject_vtx2) );
+                  }
+                }
+              }
+            }
+          }  // end of full B_c+ reconstruction
+
+        }
+      }
+    }  // end of B_c+ -> J/psi D*+ topology
+
+  }  // end of dimuon loop
   mon_nBPhysObject = state.trigBphysCollection().size() - mon_nBPhysObject;
 
   return StatusCode::SUCCESS;
@@ -557,7 +642,7 @@ StatusCode TrigBmumuxComboHypo::createDecisionObjects(TrigBmumuxState& state) co
 
   for (const xAOD::TrigBphys* triggerObject : state.trigBphysCollection()) {
     // skip all dimuon trigger objects, they are already linked to the Bmumux trigger objects via lowerChainLink()
-    if (triggerObject->particleType() == xAOD::TrigBphys::MULTIMU) continue;
+    if (triggerObject->particleType() == xAOD::TrigBphys::MULTIMU || triggerObject->particleType() == xAOD::TrigBphys::DSTDZPI) continue;
 
     ATH_MSG_DEBUG( "Found xAOD::TrigBphys object: mass = " << triggerObject->mass() );
 
@@ -565,6 +650,7 @@ StatusCode TrigBmumuxComboHypo::createDecisionObjects(TrigBmumuxState& state) co
     ATH_CHECK( triggerObjectEL.isValid() );
 
     const xAOD::TrigBphys* dimuonTriggerObject = triggerObject->lowerChain();
+    if (triggerObject->particleType() == xAOD::TrigBphys::BCDSTMUMU && dimuonTriggerObject) dimuonTriggerObject = dimuonTriggerObject->lowerChain();
     if (!dimuonTriggerObject) {
       ATH_MSG_ERROR( "Failed to found a valid link for preceding dimuon trigger object" );
       return StatusCode::FAILURE;
@@ -627,7 +713,7 @@ std::unique_ptr<xAOD::Vertex> TrigBmumuxComboHypo::fit(
     startingPoint = Amg::Vector3D(dimuon->x(), dimuon->y(), dimuon->z());
   }
   else {
-    if (decay != Decay::kPsi_2mu) {
+    if (decay != Decay::kPsi_2mu && decay != Decay::kB_PsiPi) {
       ATH_MSG_WARNING( "Already fitted dimuon vertex should be provided for B -> mu1 mu2 trk1 .. trkN decay as a starting point for fitter" );
     }
     int flag = 0;
@@ -643,7 +729,7 @@ std::unique_ptr<xAOD::Vertex> TrigBmumuxComboHypo::fit(
   m_vertexFitter->setMassInputParticles(s_trkMass[static_cast<size_t>(decay)], *fitterState);
 
   // the combined momentum of D+/D_s+ candidate is constrained to point to the dimuon vertex
-  if (decay == Decay::kDs || decay == Decay::kDplus) {
+  if (decay == Decay::kDs || decay == Decay::kDplus || decay == Decay::kD0) {
     m_vertexFitter->setVertexForConstraint(*dimuon, *fitterState);
     m_vertexFitter->setCnstType(8, *fitterState);
   }
@@ -676,7 +762,7 @@ xAOD::TrigBphys* TrigBmumuxComboHypo::makeTriggerObject(
     const ElementLink<xAOD::TrigBphysContainer>& dimuonLink) const {
 
   const xAOD::TrigBphys* dimuon = (type != xAOD::TrigBphys::MULTIMU ? *dimuonLink : nullptr);
-  bool isCascadeDecay = (type == xAOD::TrigBphys::BCDSMUMU || type == xAOD::TrigBphys::BCDPMUMU);
+  bool isCascadeDecay = (type == xAOD::TrigBphys::BCDSMUMU || type == xAOD::TrigBphys::BCDPMUMU || type == xAOD::TrigBphys::DZKPI || type == xAOD::TrigBphys::BCDSTMUMU);
 
   // refitted track momentum as a 4-vector for mass hypothesis defined by the given decay value
   xAOD::TrackParticle::GenVecFourMom_t momentum;
@@ -697,7 +783,10 @@ xAOD::TrigBphys* TrigBmumuxComboHypo::makeTriggerObject(
   result->makePrivateStore();
 
   float mass = momentum.M();
-  if (type != xAOD::TrigBphys::MULTIMU) {
+  if (type == xAOD::TrigBphys::BCDSTMUMU) {
+    mass += PDG::mD0 - (momenta[0] + momenta[1]).M();
+  }
+  else if (type != xAOD::TrigBphys::MULTIMU) {
     mass += PDG::mJpsi - (isCascadeDecay ? dimuon->mass() : (momenta[0] + momenta[1]).M());
   }
 
@@ -768,6 +857,18 @@ double TrigBmumuxComboHypo::Lxy(const Amg::Vector3D& productionVertex, const xAO
 }
 
 
+xAOD::TrackParticle::GenVecFourMom_t TrigBmumuxComboHypo::momentum(const xAOD::Vertex& vertex, const std::vector<double>& trkMass) const {
+
+  xAOD::TrackParticle::GenVecFourMom_t momentum;
+  for (size_t i = 0; i < vertex.vxTrackAtVertex().size(); ++i) {
+    const Trk::TrackParameters* perigee = vertex.vxTrackAtVertex()[i].perigeeAtVertex();
+    const Amg::Vector3D& p = perigee->momentum();
+    momentum += xAOD::TrackParticle::GenVecFourMom_t(p.x(), p.y(), p.z(), trkMass[i]);
+  }
+  return momentum;
+}
+
+
 bool TrigBmumuxComboHypo::passDimuonTrigger(const std::vector<const DecisionIDContainer*>& previousDecisionIDs) const {
 
   if (previousDecisionIDs.size() != 2) {
diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.h
index 8bd53b2e9731fbf091c1524396a6da3ed30cc984..2ef9dfa68977dbff157b6a6b09191ba02b798ad0 100644
--- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.h
+++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBmumuxComboHypo.h
@@ -94,7 +94,9 @@ class TrigBmumuxComboHypo: public ::ComboHypo {
     kB_2mu1trk,    // B -> mu+ mu- trk1
     kB_2mu2trk,    // B -> mu+ mu- trk1 trk2
     kDs,           // D_s+ -> K+ K- pi+
-    kDplus         // D+ -> K- pi+ pi+
+    kDplus,        // D+ -> K- pi+ pi+
+    kD0,           // D0 -> K- pi+
+    kB_PsiPi       // psi + pion from D*+
   };
 
  private:
@@ -122,6 +124,7 @@ class TrigBmumuxComboHypo: public ::ComboHypo {
   bool passDimuonTrigger(const std::vector<const TrigCompositeUtils::DecisionIDContainer*>& previousDecisionIDs) const;
   bool isInMassRange(double mass, const std::pair<double, double>& range) const { return (mass > range.first && mass < range.second); }
   double Lxy(const Amg::Vector3D& productionVertex, const xAOD::Vertex& decayVertex) const;
+  xAOD::TrackParticle::GenVecFourMom_t momentum(const xAOD::Vertex& vertex, const std::vector<double>& trkMass) const;
 
   SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trackParticleContainerKey {this,
     "TrackCollectionKey", "InDetTrackParticles", "input TrackParticle container name"};
@@ -254,6 +257,29 @@ class TrigBmumuxComboHypo: public ::ComboHypo {
   Gaudi::Property<float> m_BcToDplusMuMu_chi2 {this,
     "BcToDplusMuMu_chi2", 60., "maximum chi2 of the fitted B_c+ vertex"};
 
+  // B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+)
+  Gaudi::Property<bool> m_BcToDstarMuMu {this,
+    "BcToDstarMuMu", true, "switch on/off partial reconstruction of B_c+ -> J/psi(-> mu+ mu-) D0(-> K- pi+) X decay"};
+  Gaudi::Property<bool> m_BcToDstarMuMu_makeDstar {this,
+    "BcToDstarMuMu_makeDstar", true, "switch on/off full reconstruction of B_c+ -> J/psi(-> mu+ mu-) D*+(-> D0(-> K- pi+) pi+) decay"};
+  Gaudi::Property<double> m_BcToDstarMuMu_minD0KaonPt {this,
+    "BcToDstarMuMu_minD0KaonPt", 1000., "minimum pT of kaon track from D0"};
+  Gaudi::Property<double> m_BcToDstarMuMu_minD0PionPt {this,
+    "BcToDstarMuMu_minD0PionPt", 1000., "minimum pT of pion track from D0"};
+  Gaudi::Property<double> m_BcToDstarMuMu_minDstarPionPt {this,
+    "BcToDstarMuMu_minDstarPionPt", 500., "minimum pT of pion track from D*+"};
+  Gaudi::Property<double> m_BcToDstarMuMu_maxDstarPionZ0 {this,
+    "BcToDstarMuMu_maxDstarPionZ0", 5., "maximum z0 impact parameter of the pion track from D*+ wrt the fitted dimuon vertex; no preselection if negative"};
+  Gaudi::Property<std::pair<double, double>> m_BcToDstarMuMu_massRange {this,
+    "BcToDstarMuMu_massRange", {5500., 7300.}, "B_c+ mass range"};
+  Gaudi::Property<std::pair<double, double>> m_BcToDstarMuMu_dimuonMassRange {this,
+    "BcToDstarMuMu_dimuonMassRange", {2500., 4300.}, "dimuon mass range for B_c+ -> J/psi D+ decay"};
+  Gaudi::Property<std::pair<double, double>> m_BcToDstarMuMu_D0MassRange {this,
+    "BcToDstarMuMu_D0MassRange", {1750., 2000.}, "D0 mass range"};
+  Gaudi::Property<std::pair<double, double>> m_BcToDstarMuMu_DstarMassRange {this,
+    "BcToDstarMuMu_DstarMassRange", {-1., 2110.}, "D*+ mass range"};
+  Gaudi::Property<float> m_BcToDstarMuMu_chi2 {this,
+    "BcToDstarMuMu_chi2", 60., "maximum chi2 of the fitted B_c+ vertex"};
 
   // external tools
   ToolHandle<InDet::VertexPointEstimator> m_vertexPointEstimator {this,
diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/CMakeLists.txt b/Trigger/TrigHypothesis/TrigCaloHypo/CMakeLists.txt
index cb56f21452df15bd0b4fe8319800d8bee4e58902..30c86e60e10b1c8af2a7d62e850980d4a1eddbbc 100644
--- a/Trigger/TrigHypothesis/TrigCaloHypo/CMakeLists.txt
+++ b/Trigger/TrigHypothesis/TrigCaloHypo/CMakeLists.txt
@@ -3,12 +3,16 @@
 # Declare the package name:
 atlas_subdir( TrigCaloHypo )
 
+find_package( tdaq-common COMPONENTS hltinterface )
+
+
 # Component(s) in the package:
 atlas_add_library( TrigCaloHypoLib
                    TrigCaloHypo/*.h
                    INTERFACE
                    PUBLIC_HEADERS TrigCaloHypo
-                   LINK_LIBRARIES xAODTrigCalo CaloEvent DecisionHandlingLib GaudiKernel Identifier TrigSteeringEvent )
+                   INCLUDE_DIRS ${TDAQ-COMMON_INCLUDE_DIRS}
+                   LINK_LIBRARIES xAODTrigCalo CaloEvent DecisionHandlingLib GaudiKernel Identifier TrigSteeringEvent ${TDAQ-COMMON_LIBRARIES} )
 
 atlas_add_component( TrigCaloHypo
                      src/*.cxx src/components/*.cxx
diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.cxx b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.cxx
index e8f4784ba8ed3d04435d8c4aecf56cad0cfbafb7..5d48c619bd65b3e79f680af6f2e2748f42567f69 100644
--- a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.cxx
+++ b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.cxx
@@ -7,11 +7,16 @@
 #include "TrigCompositeUtils/TrigCompositeUtils.h"
 #include "TrigSteeringEvent/TrigRoiDescriptorCollection.h"
 
+#include "hltinterface/IInfoRegister.h"
+#include "hltinterface/ContainerFactory.h"
+
+#include <boost/property_tree/ptree.hpp>
+
 using namespace TrigCompositeUtils;
 
 TrigLArNoiseBurstAlg::TrigLArNoiseBurstAlg( const std::string& name, 
                       ISvcLocator* pSvcLocator ) :
-  ::HypoBase( name, pSvcLocator ) {}
+  ::HypoBase( name, pSvcLocator ), m_IsObject(nullptr),  m_timeTagPosToClear(240), m_publishTime(180), m_name_of_is("LArISInfo_NoiseBurstAlg"), m_timeTagPosRec(0) {}
 
 
 StatusCode TrigLArNoiseBurstAlg::initialize() {
@@ -20,13 +25,34 @@ StatusCode TrigLArNoiseBurstAlg::initialize() {
   ATH_CHECK( m_knownBadFEBsVecKey.initialize() );
   ATH_CHECK( m_knownMNBFEBsVecKey.initialize() );
   ATH_CHECK( m_hypoTools.retrieve() );
+
+  // No TDAQ structure, no publishing anyway
+  try {
+   auto cfact = hltinterface::ContainerFactory::getInstance();
+    if ( cfact ) {
+      // construct the LAr noise burst container and register it
+      ATH_MSG_DEBUG ( "Got the factory for TDAQ interface, will try to register vectors" );
+      m_IsObject = cfact->constructContainer(m_name_of_is,"LArNoiseBurstCandidates");
+      m_evntPos = cfact->addIntVector(m_IsObject,"Flag",hltinterface::GenericHLTContainer::LASTVALUE);
+      m_timeTagPos = cfact->addIntVector(m_IsObject,"TimeStamp",hltinterface::GenericHLTContainer::LASTVALUE);
+      m_timeTagPosns = cfact->addIntVector(m_IsObject,"TimeStamp_ns",hltinterface::GenericHLTContainer::LASTVALUE);
+      ATH_MSG_DEBUG ( "Registering container in IS with name /HLTObjects/" << m_name_of_is );
+      hltinterface::IInfoRegister::instance()->registerObject("/HLTObjects/",m_IsObject);
+    } // if cfact
+   } 
+    catch (std::exception& ex ) {
+      ATH_MSG_WARNING ( "Cannot use ISInfo publication. got exception " << ex.what() );
+      m_IsObject = nullptr;
+      m_timeTagPosRec=0;
+  }
+  // some initial value to clean up stuff
   
   return StatusCode::SUCCESS;
 }
 
-
 StatusCode TrigLArNoiseBurstAlg::execute( const EventContext& context ) const {  
   ATH_MSG_DEBUG ( "Executing " << name() << "..." );
+
   auto previousDecisionsHandle = SG::makeHandle( decisionInput(), context );
   ATH_CHECK( previousDecisionsHandle.isValid() );
   ATH_MSG_DEBUG( "Running with "<< previousDecisionsHandle->size() <<" previous decisions");
@@ -40,56 +66,103 @@ StatusCode TrigLArNoiseBurstAlg::execute( const EventContext& context ) const {
 
   ATH_CHECK( previousDecisionsHandle->size() == 1 );
   const auto previousDecision = previousDecisionsHandle->at(0);
-    //get RoI  
-    auto roiELInfo = findLink<TrigRoiDescriptorCollection>( previousDecision, initialRoIString() );
+  //get RoI  
+  auto roiELInfo = findLink<TrigRoiDescriptorCollection>( previousDecision, initialRoIString() );
     
-    ATH_CHECK( roiELInfo.isValid() );
-    const TrigRoiDescriptor* roi = *(roiELInfo.link);
+  ATH_CHECK( roiELInfo.isValid() );
+  const TrigRoiDescriptor* roi = *(roiELInfo.link);
 
     // get cells
-    SG::ReadHandle<CaloCellContainer> cellsHandle(m_cellContainerKey, context);
-    ATH_CHECK( cellsHandle.isValid() );
-    ATH_MSG_DEBUG ( "Cluster handle size: " << cellsHandle->size() << "..." );
-
-    // necessary conditions
-    std::set<unsigned int> bf;
-    std::vector<HWIdentifier> MNBfeb;
-    SG::ReadCondHandle<LArBadFebCont> badHdl(m_knownBadFEBsVecKey, context);
-    const LArBadFebCont* badCont=*badHdl;
-    if(badCont) {
-       for(LArBadFebCont::BadChanVec::const_iterator i = badCont->begin(); i!=badCont->end(); i++) {
-          bf.insert(i->first);
-       }
+  SG::ReadHandle<CaloCellContainer> cellsHandle(m_cellContainerKey, context);
+  ATH_CHECK( cellsHandle.isValid() );
+  ATH_MSG_DEBUG ( "Cluster handle size: " << cellsHandle->size() << "..." );
+
+  // necessary conditions
+  std::set<unsigned int> bf;
+  std::vector<HWIdentifier> MNBfeb;
+  SG::ReadCondHandle<LArBadFebCont> badHdl(m_knownBadFEBsVecKey, context);
+  const LArBadFebCont* badCont=*badHdl;
+  if(badCont) {
+    for(LArBadFebCont::BadChanVec::const_iterator i = badCont->begin(); i!=badCont->end(); i++) {
+      bf.insert(i->first);
     }
+  }
     
-    SG::ReadCondHandle<LArBadFebCont> MNBHdl(m_knownMNBFEBsVecKey, context);
-    const LArBadFebCont* MNBCont=*MNBHdl;
-    if(MNBCont) {
-       for(LArBadFebCont::BadChanVec::const_iterator i = MNBCont->begin(); i!=MNBCont->end(); i++) {
-          MNBfeb.push_back(HWIdentifier(i->first));
-       } 
-    }
+  SG::ReadCondHandle<LArBadFebCont> MNBHdl(m_knownMNBFEBsVecKey, context);
+  const LArBadFebCont* MNBCont=*MNBHdl;
+  if(MNBCont) {
+    for(LArBadFebCont::BadChanVec::const_iterator i = MNBCont->begin(); i!=MNBCont->end(); i++) {
+      MNBfeb.push_back(HWIdentifier(i->first));
+    } 
+  }
 
-    // Get new output decision, child of previousDecision
-    auto d = newDecisionIn (decisions, previousDecision, hypoAlgNodeName(), context );
+  // Get new output decision, child of previousDecision
+  auto d = newDecisionIn (decisions, previousDecision, hypoAlgNodeName(), context );
     
-    // create summary struct
-    toolInput.emplace_back( d, roi, cellsHandle.cptr(), &bf, &MNBfeb, previousDecision );
-    
-
-    // link the cluster
-    { 
-      auto cell = ElementLink<CaloCellContainer>( *cellsHandle, 0 );
-      ATH_CHECK( cell.isValid() );
-      d->setObjectLink( featureString(),  cell );
-    }
+  // create summary struct
+  toolInput.emplace_back( d, roi, cellsHandle.cptr(), &bf, &MNBfeb, previousDecision );
+  
+  // link the cluster
+  { 
+    auto cell = ElementLink<CaloCellContainer>( *cellsHandle, 0 );
+    ATH_CHECK( cell.isValid() );
+    d->setObjectLink( featureString(),  cell );
+  }
     
   ATH_MSG_DEBUG( "Found "<<toolInput.size()<<" inputs to tools");
-
-   
   for ( auto& tool: m_hypoTools ) {
     ATH_CHECK( tool->decide( toolInput ) );
   }
+  
+  bool any_passed = not d->decisions().empty();
+
+  // publish the found values in IS
+  if ( any_passed && (m_IsObject != nullptr) ) {
+    // lock the IS publishing
+    std::lock_guard<std::mutex> lock( m_pubIS_mtx );
+    const EventIDBase& EIHandle = context.eventID();
+    long int thisTimeStamp    = (EIHandle).time_stamp();
+    long int thisTimeStampns  = (EIHandle).time_stamp_ns_offset();
+    uint32_t thisLB           = (EIHandle).lumi_block();
+    unsigned long long thisEv = (EIHandle).event_number();
+    boost::property_tree::ptree event_tree;
+    event_tree.put("eventNumber",thisEv);
+    event_tree.put("LBNumber",thisLB);
+    try{
+      hltinterface::IInfoRegister::instance()->beginEvent(event_tree);
+
+      if ( ( thisTimeStamp - m_timeTagPosRec) > m_timeTagPosToClear ) {
+    
+        std::vector<long>& ee = m_IsObject->getIntVecField(m_evntPos);
+        std::vector<long>& tt = m_IsObject->getIntVecField(m_timeTagPos);
+        std::vector<long>& ttn = m_IsObject->getIntVecField(m_timeTagPosns);
+
+        int toBeCleared = 0;
+        for(unsigned int dd=0;dd<tt.size();dd++){
+	  if ( ( thisTimeStamp - tt[dd] )  < m_publishTime ) {
+	    toBeCleared = (int)dd-1;
+	    break;
+	  }
+        }
+
+        if ( toBeCleared > 0 ) {
+	  ee.erase(ee.begin(),ee.begin()+(toBeCleared) );
+	  tt.erase(tt.begin(),tt.begin()+(toBeCleared) );
+	  ttn.erase(ttn.begin(),ttn.begin()+(toBeCleared) );
+        }
+        m_timeTagPosRec = thisTimeStamp ; // records to remember when things were cleared
+      } // thisTimeStamp if check
+
+      m_IsObject->appendField(m_evntPos,std::vector<long>{0});
+      m_IsObject->appendField(m_timeTagPos,std::vector<long>{(long int)thisTimeStamp});
+      m_IsObject->appendField(m_timeTagPosns,std::vector<long>{(long int)thisTimeStampns});
+      hltinterface::IInfoRegister::instance()->endEvent(event_tree);
+    }catch(const std::exception &ex){
+      ATH_MSG_INFO("Caught exception while calling hltinterface::IInfoRegister::instance()->endEvent for event " << thisEv
+		   <<" at LB " << thisLB
+		   <<". Exception was "<<ex.what());
+    }
+  } // if m_IsObject
  
   ATH_CHECK( hypoBaseOutputProcessing(outputHandle) );
 
diff --git a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.h b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.h
index bd5dfe9f83377b2263b8a460f48324784efbf74b..2147a0fc6a1e9554034f35234a0e4abd15d01ef6 100644
--- a/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.h
+++ b/Trigger/TrigHypothesis/TrigCaloHypo/src/TrigLArNoiseBurstAlg.h
@@ -5,15 +5,22 @@
 #define TRIGCALOHYPO_TRIGLARNOISEBURSTALG
 
 #include <string>
+#include <mutex>
 
 #include "GaudiKernel/ToolHandle.h"
 #include "DecisionHandling/HypoBase.h"
 #include "StoreGate/ReadHandleKey.h"
 #include "StoreGate/ReadCondHandleKey.h"
+#include "AthenaKernel/SlotSpecificObj.h"
 #include "TrigCaloHypo/ITrigLArNoiseBurstHypoTool.h"
 #include "CaloEvent/CaloCellContainer.h"
 #include "LArRecConditions/LArBadChannelCont.h"
 
+namespace hltinterface{
+  class GenericHLTContainer;
+}
+
+
 /**
  * @class TrigLArNoiseBurstAlg
  * @brief Implements LArNoiseBurst detection for the new HLT framework
@@ -31,5 +38,17 @@ class TrigLArNoiseBurstAlg : public ::HypoBase {
   SG::ReadCondHandleKey<LArBadFebCont> m_knownBadFEBsVecKey {this, "BadFEBsKey", "LArKnownBadFEBs", "key to read the known Bad FEBs"};
   SG::ReadCondHandleKey<LArBadFebCont> m_knownMNBFEBsVecKey {this, "MNBFEBsKey", "LArKnownMNBFEBs", "key to read the known MNB FEBs"};
   ToolHandleArray< ITrigLArNoiseBurstHypoTool > m_hypoTools { this, "HypoTools", {}, "Hypo tools" };
+
+  // lock for IS publishing
+  mutable std::mutex m_pubIS_mtx;
+  std::shared_ptr<hltinterface::GenericHLTContainer> m_IsObject;
+
+  long int m_timeTagPosToClear;
+  long int m_publishTime;
+  std::string m_name_of_is;
+  size_t   m_evntPos;
+  size_t   m_timeTagPos;
+  size_t   m_timeTagPosns;
+  mutable long int m_timeTagPosRec ATLAS_THREAD_SAFE;
 }; 
 #endif
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaFastCaloHypoTool.py b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaFastCaloHypoTool.py
index dd8689d2e58651f571f329a0e61b2e8ce8d42f45..aa2d9a13b57a5b54d0c04f687407ea7537314d28 100644
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaFastCaloHypoTool.py
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaFastCaloHypoTool.py
@@ -118,7 +118,7 @@ class TrigEgammaFastCaloHypoToolConfig:
     self.__name = name
     self.__cand = cpart['trigType']
     self.__threshold  = float(cpart['threshold'])
-    self.__sel        = cpart['addInfo'][0] if cpart['addInfo'] else cpart['IDinfo']
+    self.__sel        = 'ion' if 'ion' in cpart['extra'] else (cpart['addInfo'][0] if cpart['addInfo'] else cpart['IDinfo'])
     self.__gsfinfo  = cpart['gsfInfo'] if cpart['trigType']=='e' and cpart['gsfInfo'] else ''
     self.__idperfinfo  = cpart['idperfInfo'] if cpart['trigType']=='e' and cpart['idperfInfo'] else ''
     self.__noringerinfo = cpart['L2IDAlg'] if cpart['trigType']=='e' else ''
@@ -235,7 +235,7 @@ class TrigEgammaFastCaloHypoToolConfig:
   #
   def compile(self):
 
-    if 'etcut' == self.pidname() or 'ion' in self.pidname():
+    if self.pidname() in ('etcut', 'ion'):
       self.etcut()
 
     elif self.pidname() in self.__operation_points and 'noringer' in self.noringerinfo() and self.isElectron():
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaFastPhotonHypoTool.py b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaFastPhotonHypoTool.py
index c5f472727332555c556477fd28abc5f4ec17fb26..b3e662ce0de1aca9ecf825d0a5a257896681e824 100644
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaFastPhotonHypoTool.py
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaFastPhotonHypoTool.py
@@ -24,7 +24,7 @@ class TrigEgammaFastPhotonHypoToolConfig:
     self.__log = logging.getLogger('TrigEgammaFastPhotonHypoTool')
     self.__name       = name
     self.__threshold  = float(cpart['threshold']) 
-    self.__sel        = cpart['addInfo'][0] if cpart['addInfo'] else cpart['IDinfo']
+    self.__sel        = 'ion' if 'ion' in cpart['extra'] else (cpart['addInfo'][0] if cpart['addInfo'] else cpart['IDinfo'])
     self.__monGroups  = monGroups
 
     if not tool:
@@ -87,7 +87,7 @@ class TrigEgammaFastPhotonHypoToolConfig:
   # Compile the chain
   #
   def compile(self):
-    if 'etcut' == self.pidname() or 'ion' in self.pidname():       
+    if self.pidname() in ('etcut', 'ion'):
         self.etcut()
     elif 'noalg' == self.pidname():
         self.nocut()
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPrecisionCaloHypoTool.py b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPrecisionCaloHypoTool.py
index a7ada193578df4b19db5f98347b113a7a89a4390..a207aab727aef3d8da48757f48d724143afa38f9 100644
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPrecisionCaloHypoTool.py
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/python/TrigEgammaPrecisionCaloHypoTool.py
@@ -19,10 +19,7 @@ def _IncTool(name, monGroups, threshold, sel, tool=None):
             monTool = GenericMonitoringTool("MonTool_"+name)
             monTool.Histograms = [ defineHistogram('dEta', type='TH1F', path='EXPERT', title="PrecisionCalo Hypo #Delta#eta_{L2 L1}; #Delta#eta_{L2 L1}", xbins=80, xmin=-0.01, xmax=0.01),
                                 defineHistogram('dPhi', type='TH1F', path='EXPERT', title="PrecisionCalo Hypo #Delta#phi_{L2 L1}; #Delta#phi_{L2 L1}", xbins=80, xmin=-0.01, xmax=0.01),
-                                defineHistogram('Et_em', type='TH1F', path='EXPERT', title="PrecisionCalo Hypo cluster E_{T}^{EM};E_{T}^{EM} [MeV]", xbins=50, xmin=-2000, xmax=100000),
-                                defineHistogram('Eta', type='TH1F', path='EXPERT', title="PrecisionCalo Hypo entries per Eta;Eta", xbins=100, xmin=-2.5, xmax=2.5),
-                                defineHistogram('Phi', type='TH1F', path='EXPERT', title="PrecisionCalo Hypo entries per Phi;Phi", xbins=128, xmin=-3.2, xmax=3.2),
-                                defineHistogram('EtaBin', type='TH1I', path='EXPERT', title="PrecisionCalo Hypo entries per Eta bin;Eta bin no.", xbins=11, xmin=-0.5, xmax=10.5)]
+                                defineHistogram('Et_em', type='TH1F', path='EXPERT', title="PrecisionCalo Hypo cluster E_{T}^{EM};E_{T}^{EM} [MeV]", xbins=50, xmin=-2000, xmax=100000),]
 
             cuts=['Input','#Delta #eta L2-L1', '#Delta #phi L2-L1','eta','E_{T}^{EM}']
 
@@ -48,11 +45,12 @@ def _IncTool(name, monGroups, threshold, sel, tool=None):
         tool.dETACLUSTERthr = 9999.
         tool.dPHICLUSTERthr = 9999.
 
-    elif sel == "etcut" or 'ion' in sel:
+    elif sel in ('etcut', 'ion'):
         tool.ETthr          = same( ( float( threshold ) -  3 )*GeV ) 
         # No other cuts applied
         tool.dETACLUSTERthr = 9999.
         tool.dPHICLUSTERthr = 9999.
+
  
     return tool
 
@@ -65,7 +63,7 @@ def TrigEgammaPrecisionCaloHypoToolFromDict( d, tool=None ):
         return cpart['threshold']
     
     def __sel(cpart):
-        return cpart['addInfo'][0] if cpart['addInfo'] else cpart['IDinfo'] + cpart['extra']
+        return 'ion' if 'ion' in cpart['extra'] else (cpart['addInfo'][0] if cpart['addInfo'] else cpart['IDinfo'])
     
     name = d['chainName']
     monGroups = d['monGroups']    
diff --git a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionCaloHypoTool.cxx b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionCaloHypoTool.cxx
index 2365af2431c0b2638546310077b535fd621e8141..4576b4ca80eed1b6b9bd83fabb0981edd671f7b2 100644
--- a/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionCaloHypoTool.cxx
+++ b/Trigger/TrigHypothesis/TrigEgammaHypo/src/TrigEgammaPrecisionCaloHypoTool.cxx
@@ -55,17 +55,13 @@ bool TrigEgammaPrecisionCaloHypoTool::decide( const ITrigEgammaPrecisionCaloHypo
 
   bool pass = false;
 
-  auto dEta         = Monitored::Scalar( "dEta", -1. ); 
-  auto dPhi         = Monitored::Scalar( "dPhi", -1. );
-  auto eT_Cluster   = Monitored::Scalar( "Et_em"   , -1.0 );
-  auto etaBin       = Monitored::Scalar( "EtaBin", -1. );
-  auto monEta       = Monitored::Scalar( "Eta", -99. ); 
-  auto monPhi       = Monitored::Scalar( "Phi", -99. );
+  auto dEta_mon         = Monitored::Scalar( "dEta", -1. ); 
+  auto dPhi_mon         = Monitored::Scalar( "dPhi", -1. );
+  auto eT_Cluster_mon   = Monitored::Scalar( "Et_em"   , -1.0 );
   auto PassedCuts   = Monitored::Scalar<int>( "CutCounter", -1 );  
   auto monitorIt    = Monitored::Group( m_monTool, 
-					       dEta, dPhi, eT_Cluster,
-                                               etaBin, monEta,
-					       monPhi,PassedCuts );
+					dEta_mon, dPhi_mon, eT_Cluster_mon,
+                                        PassedCuts );
  // when leaving scope it will ship data to monTool
   PassedCuts = PassedCuts + 1; //got called (data in place)
 
@@ -94,22 +90,21 @@ bool TrigEgammaPrecisionCaloHypoTool::decide( const ITrigEgammaPrecisionCaloHypo
   float absEta = fabs( pClus->eta() );
   const int cutIndex = findCutIndex( absEta );
   
-
-  
-  dEta =  pClus->eta() - etaRef;
+  float dEta =  pClus->eta() - etaRef;
   //  Deal with angle diferences greater than Pi
-  dPhi =  fabs( pClus->phi() - phiRef );
+  float dPhi =  fabs( pClus->phi() - phiRef );
   dPhi = ( dPhi < M_PI ? dPhi : 2*M_PI - dPhi ); // TB why only <
-  eT_Cluster  = pClus->et();
+  float eT_Cluster  = pClus->et();
   // apply cuts: DeltaEta( clus-ROI )
   ATH_MSG_DEBUG( "CaloCluster: eta="  << pClus->eta()
   		 << " roi eta=" << etaRef << " DeltaEta=" << dEta
   		 << " cut: <"   << m_detacluster          );
   
-  if ( fabs( pClus->eta() - etaRef ) > m_detacluster ) {
+  if ( fabs(dEta) > m_detacluster ) {
     ATH_MSG_DEBUG("REJECT Cluster dEta cut failed");
     return pass;
   }
+  dEta_mon = dEta;
   PassedCuts = PassedCuts + 1; //Deta
   
   // DeltaPhi( clus-ROI )
@@ -121,6 +116,7 @@ bool TrigEgammaPrecisionCaloHypoTool::decide( const ITrigEgammaPrecisionCaloHypo
     ATH_MSG_DEBUG("REJECT Clsuter dPhi cut failed");
     return pass;
   }
+  dPhi_mon = dPhi;
   PassedCuts = PassedCuts + 1; //DPhi
 
   // eta range
@@ -133,13 +129,12 @@ bool TrigEgammaPrecisionCaloHypoTool::decide( const ITrigEgammaPrecisionCaloHypo
   PassedCuts = PassedCuts + 1; // passed eta cut
   
   // ET_em
-  ATH_MSG_DEBUG( "CaloCluster: ET_em=" << eT_Cluster << " cut: >"  << m_eTthr[cutIndex] );
+  ATH_MSG_DEBUG( "PrecisionCaloCluster: ET_em=" << eT_Cluster << " cut: >"  << m_eTthr[cutIndex] );
   if ( eT_Cluster < m_eTthr[cutIndex] ) {
     ATH_MSG_DEBUG("REJECT et cut failed");
     return pass;
   }
-  PassedCuts = PassedCuts + 1; // ET_em
-  
+  eT_Cluster_mon = eT_Cluster;
   // got this far => passed!
   pass = true;
 
diff --git a/Trigger/TrigHypothesis/TrigTauHypo/python/TrigTauHypoTool.py b/Trigger/TrigHypothesis/TrigTauHypo/python/TrigTauHypoTool.py
index 700fb3b1ddf7ddde859dab62f8e34bbc101fb43c..2ae655c48bce831bca3e42432b8833612a50c7e1 100644
--- a/Trigger/TrigHypothesis/TrigTauHypo/python/TrigTauHypoTool.py
+++ b/Trigger/TrigHypothesis/TrigTauHypo/python/TrigTauHypoTool.py
@@ -14,44 +14,29 @@ TauCuts = namedtuple('TauCuts','numTrackMax numTrackWideTrackMax EtCalibMin leve
 thresholdsEF = {
     ('looseRNN', 20): TauCuts(3, 1, 20000.0, 1),
     ('looseRNN', 25): TauCuts(3, 1, 25000.0, 1),
-    ('looseRNN', 29): TauCuts(3, 1, 29000.0, 1),
     ('looseRNN', 35): TauCuts(3, 1, 35000.0, 1),
-    ('looseRNN', 38): TauCuts(3, 1, 38000.0, 1),
-    ('looseRNN', 50): TauCuts(3, 1, 50000.0, 1),
+    ('looseRNN', 40): TauCuts(3, 1, 40000.0, 1),
     ('looseRNN', 60): TauCuts(3, 1, 60000.0, 1),
-    ('looseRNN', 80): TauCuts(3, 1, 80000.0, 1),
-    ('looseRNN', 115): TauCuts(3, 1, 115000.0, 1),
-    ('looseRNN', 125): TauCuts(3, 1, 125000.0, 1), 
+    ('looseRNN', 80): TauCuts(3, 1, 80000.0, 1), 
     ('looseRNN', 160): TauCuts(3, 1, 160000.0, 1),
     ('looseRNN', 200): TauCuts(3, 1, 200000.0, 1),
-    ('mediumRNN', 0): TauCuts(3, 1, 0000.0, 2), 
-    ('mediumRNN', 12): TauCuts(3, 1, 12000.0, 2),
     ('mediumRNN', 20): TauCuts(3, 1, 20000.0, 2),
     ('mediumRNN', 25): TauCuts(3, 1, 25000.0, 2),
-    ('mediumRNN', 29): TauCuts(3, 1, 29000.0, 2),
     ('mediumRNN', 35): TauCuts(3, 1, 35000.0, 2),
-    ('mediumRNN', 38): TauCuts(3, 1, 38000.0, 2),
     ('mediumRNN', 40): TauCuts(3, 1, 40000.0, 2),
     ('mediumRNN', 50): TauCuts(3, 1, 50000.0, 2),
     ('mediumRNN', 60): TauCuts(3, 1, 60000.0, 2),
     ('mediumRNN', 80): TauCuts(3, 1,  80000.0, 2),
     ('mediumRNN', 100): TauCuts(3, 1, 100000.0, 2),
-    ('mediumRNN', 115): TauCuts(3, 1, 115000.0, 2),
-    ('mediumRNN', 125): TauCuts(3, 1, 125000.0, 2), 
     ('mediumRNN', 160): TauCuts(3, 1, 160000.0, 2), 
     ('mediumRNN', 180): TauCuts(3, 1, 180000.0, 2), 
     ('mediumRNN', 200): TauCuts(3, 1, 200000.0, 2),
     ('tightRNN', 20): TauCuts(3, 1, 20000.0, 3),
     ('tightRNN', 25): TauCuts(3, 1, 25000.0, 3),
-    ('tightRNN', 29): TauCuts(3, 1, 29000.0, 3),
     ('tightRNN', 35): TauCuts(3, 1, 35000.0, 3),
-    ('tightRNN', 38): TauCuts(3, 1, 38000.0, 3),
     ('tightRNN', 40): TauCuts(3, 1, 40000.0, 3),
-    ('tightRNN', 50): TauCuts(3, 1, 50000.0, 3),
     ('tightRNN', 60): TauCuts(3, 1, 60000.0, 3),
     ('tightRNN', 80): TauCuts(3, 1, 80000.0, 3),
-    ('tightRNN', 115): TauCuts(3, 1, 115000.0, 3),
-    ('tightRNN', 125): TauCuts(3, 1, 125000.0, 3), 
     ('tightRNN', 160): TauCuts(3, 1, 160000.0, 3),
     ('tightRNN', 180): TauCuts(3, 1, 180000.0, 3),
     ('tightRNN', 200): TauCuts(3, 1, 200000.0, 3),
diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitCategoryMT.py b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitCategoryMT.py
index bb0ff96564f079c561c5cbe69b75f93810ff0fea..5a63d465e2c0680c38dc203225fe479d53032659 100644
--- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitCategoryMT.py
+++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitCategoryMT.py
@@ -13,7 +13,8 @@ monitoring_photon = [
     'HLT_g35_medium_L1EM20VH',
     'HLT_g25_medium_L1EM20VH',
     'HLT_g50_loose_L1EM20VH',
-    'HLT_g140_loose_L1EM22VHI'
+    'HLT_g140_loose_L1EM22VHI',
+    'HLT_g300_etcut_L1EM22VHI'
         ]
 
 monitoring_electron = [
@@ -32,7 +33,9 @@ monitoringTP_electron = [
     'HLT_e26_lhtight_L1EM22VHI',
     'HLT_e26_lhtight_ivarmedium_L1EM22VHI',
     'HLT_e26_lhtight_gsf_L1EM22VHI',
-    'HLT_e26_lhtight_gsf_ivarloose_L1EM22VHI'
+    'HLT_e26_lhtight_gsf_ivarloose_L1EM22VHI',
+    'HLT_e60_lhmedium_gsf_L1EM22VHI',
+    'HLT_e300_etcut_L1EM22VHI'
 
         ]
 
diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py
index 807240b516291d2eee5e746923951cb6d30662f5..e86f2cfd3422f7cc5d55a5602e19ac041520c968 100644
--- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py
+++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py
@@ -374,7 +374,7 @@ class TrigEgammaMonAlgBuilder:
       self.jpsieeMonAlg.DNNResultNames=self.dnnnames
       self.jpsieeMonAlg.ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector]
       self.jpsieeMonAlg.ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector,VeryLooseLHSelector]
-      self.jpsieeMonAlg.ElectronDNNSelectorTool =[LooseDNNElectronSelector,MediumDNNElectronSelector,TightDNNElectronSelector]
+      self.jpsieeMonAlg.ElectronDNNSelectorTool =[TightDNNElectronSelector,MediumDNNElectronSelector,LooseDNNElectronSelector]
       self.jpsieeMonAlg.ZeeLowerMass=2
       self.jpsieeMonAlg.ZeeUpperMass=5
       self.jpsieeMonAlg.OfflineTagMinEt=5
@@ -714,6 +714,7 @@ class TrigEgammaMonAlgBuilder:
     self.addHistogram(monGroup, TH1F("charge","charge; charge; Count", 4,-2,2))
     self.addHistogram(monGroup, TH1F("ptcone20", "ptcone20; ptcone20; Count", 50, 0.0, 5.0))
     self.addHistogram(monGroup, TH1F("ptvarcone20", "ptcone20; ptcone20; Count", 50, 0.0, 5.0))
+    self.addHistogram(monGroup, TH1F("z0", "z0; z0 ; Count", 40, -1, 1))
     self.addHistogram(monGroup, TH1F("d0", "d0; d0 ; Count", 40, -1, 1))
     self.addHistogram(monGroup, TH1F("d0sig", "d0sig; d0sig ; Count", 40, -10, 10))
     self.addHistogram(monGroup, TH1F("pt", "p_{T}; p_{T} [GeV] ; Count", 100,0.,100.))
@@ -762,11 +763,11 @@ class TrigEgammaMonAlgBuilder:
     self.addHistogram(monGroup, TProfile("npvtx,npvtx_passed", "#epsilon(npvtx); npvtx ; Efficiency", 16, 0, 80))
 
     # Efficiency ET in eta slices
-    if self.detailedHistograms:
-      self.addHistogram(monGroup, TProfile("et_slice0,et_slice0_passed", "#epsilon(E_T) in [|#eta| <= 0.8]; E_{T} [GeV]  ; Efficiency", self._nEtbins, self._etbins))
-      self.addHistogram(monGroup, TProfile("et_slice1,et_slice1_passed", "#epsilon(E_T) in [0.8 < |#eta| <= 1.37]; E_{T} [GeV]  ; Efficiency", self._nEtbins, self._etbins))
-      self.addHistogram(monGroup, TProfile("et_slice2,et_slice2_passed", "#epsilon(E_T) in [1.37 < |#eta| <= 1.54]; E_{T} [GeV]  ; Efficiency", self._nEtbins, self._etbins))
-      self.addHistogram(monGroup, TProfile("et_slice3,et_slice3_passed", "#epsilon(E_T) in [1.54 < |#eta| <= 2.50]; E_{T} [GeV]  ; Efficiency", self._nEtbins, self._etbins))
+    
+    self.addHistogram(monGroup, TProfile("et_slice0,et_slice0_passed", "#epsilon(E_T) in [|#eta| <= 0.8]; E_{T} [GeV]  ; Efficiency", self._nEtbins, self._etbins))
+    self.addHistogram(monGroup, TProfile("et_slice1,et_slice1_passed", "#epsilon(E_T) in [0.8 < |#eta| <= 1.37]; E_{T} [GeV]  ; Efficiency", self._nEtbins, self._etbins))
+    self.addHistogram(monGroup, TProfile("et_slice2,et_slice2_passed", "#epsilon(E_T) in [1.37 < |#eta| <= 1.54]; E_{T} [GeV]  ; Efficiency", self._nEtbins, self._etbins))
+    self.addHistogram(monGroup, TProfile("et_slice3,et_slice3_passed", "#epsilon(E_T) in [1.54 < |#eta| <= 2.50]; E_{T} [GeV]  ; Efficiency", self._nEtbins, self._etbins))
 
 
   def bookL1CaloResolutions(self, monAlg, trigger):
@@ -934,6 +935,7 @@ class TrigEgammaMonAlgBuilder:
     self.addHistogram(monGroup, TH1F("res_deta2", "deta2; deta2 ; (deta2(on)-deta2(off))/deta2(off)", 100, -1., 1.))
     self.addHistogram(monGroup, TH1F("res_dphi2", "dphi2; dphi2 ; (dphi2(on)-dphi2(off))/dphi2(off)", 100, -1., 1.))
     self.addHistogram(monGroup, TH1F("res_dphiresc", "dphiresc; (dphires(on)-dphires(off))/dphires(off) ; Count", 100, -1., 1.))
+    self.addHistogram(monGroup, TH1F("res_z0", "resolution z0; (z0(on)-z0(off)) ; Count", 100, -0.5, 0.5))
     self.addHistogram(monGroup, TH1F("res_d0", "resolution d0; (d0(on)-d0(off)) ; Count", 100, -0.5, 0.5))
     self.addHistogram(monGroup, TH1F("res_d0sig", "resolution d0sig; (d0sig(on)-d0sig(off)) ; Count", 50, -10, 10))
     self.addHistogram(monGroup, TH1F("res_eprobht","resolution eProbHT; (eProbHT(on)-eProbHT(off)); Count",50, -1, 1))
diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.cxx
index 7a9654788ae74987ae0c5d8077979c84da273b4e..7ef6e9ad831244af1053ce6acbe60c2b0bf48a48 100644
--- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.cxx
+++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.cxx
@@ -658,7 +658,7 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillTracking(const std::string &trigger
     auto monGroup = getGroup( trigger + ( online ? "_Distributions_HLT" : "_Distributions_Offline") );
     
     std::vector<float> deta1_vec, deta1_EMECA_vec, deta1_EMECC_vec, deta1_EMEBA_vec, deta1_EMEBC_vec, deta2_vec, dphi2_vec,
-      dphiresc_vec, eprobht_vec, npixhits_vec, nscthits_vec, charge_vec, ptcone20_vec, ptvarcone20_vec, d0_vec, d0sig_vec,
+      dphiresc_vec, eprobht_vec, npixhits_vec, nscthits_vec, charge_vec, ptcone20_vec, ptvarcone20_vec, z0_vec, d0_vec, d0sig_vec, 
       pt_vec, ptcone20_rel_vec, ptvarcone20_rel_vec;
 
     auto deta1_col            = Monitored::Collection( "deta1"       , deta1_vec           );
@@ -675,6 +675,7 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillTracking(const std::string &trigger
     auto charge_col           = Monitored::Collection( "charge"      , charge_vec          );
     auto ptcone20_col         = Monitored::Collection( "ptcone20"    , ptcone20_vec        );
     auto ptvarcone20_col      = Monitored::Collection( "ptvarcone20" , ptvarcone20_vec     );
+    auto z0_col               = Monitored::Collection( "z0"          , z0_vec              );
     auto d0_col               = Monitored::Collection( "d0"          , d0_vec              );
     auto d0sig_col            = Monitored::Collection( "d0sig"       , d0sig_vec           );
     auto pt_col               = Monitored::Collection( "pt"          , pt_vec              );
@@ -713,6 +714,7 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillTracking(const std::string &trigger
       
       // Quantities directly from tracks
       ATH_MSG_DEBUG("Get track Quantities");
+      z0_vec.push_back( getTrack_z0(eg));
       d0_vec.push_back( getTrack_d0(eg));
       d0sig_vec.push_back(getD0sig(eg));
       pt_vec.push_back( getTrack_pt(eg)/Gaudi::Units::GeV);
@@ -726,8 +728,8 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillTracking(const std::string &trigger
     
     
     fill( monGroup, deta1_col, deta1_EMECA_col, deta1_EMECC_col, deta1_EMEBA_col, deta1_EMEBC_col, deta2_col, dphi2_col,
-      dphiresc_col, eprobht_col, npixhits_col, nscthits_col, charge_col, ptcone20_col, ptvarcone20_col, d0_col, d0sig_col,
-      pt_col, ptcone20_rel_col, ptvarcone20_rel_col);
+      dphiresc_col, eprobht_col, npixhits_col, nscthits_col, charge_col, ptcone20_col, ptvarcone20_col, z0_col, d0_col, d0sig_col,
+	  pt_col, ptcone20_rel_col, ptvarcone20_rel_col);
 }
 
 
@@ -858,7 +860,7 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillHLTElectronResolution(const std::st
     auto monGroup = getGroup( trigger + "_Resolutions_HLT" );
 
     std::vector<float> res_pt_vec, res_et_vec, res_phi_vec, res_eta_vec, res_deta1_vec, res_deta2_vec, res_dphi2_vec, res_dphiresc_vec,
-    res_d0_vec, res_d0sig_vec, res_eprobht_vec, res_npixhits_vec, res_nscthits_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec,
+    res_z0_vec, res_d0_vec, res_d0sig_vec, res_eprobht_vec, res_npixhits_vec, res_nscthits_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec,
     res_Rphi_vec, res_weta1_vec, res_weta2_vec, res_wtots1_vec, res_f1_vec, res_f3_vec, res_eratio_vec, res_ethad_vec, res_ethad1_vec,
     et_vec, eta_vec, mu_vec;
     std::vector<float> res_ptcone20_vec, res_ptcone20_rel_vec, res_ptvarcone20_vec, res_ptvarcone20_rel_vec;
@@ -897,6 +899,7 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillHLTElectronResolution(const std::st
     auto res_deta2_col            = Monitored::Collection( "res_deta2"                , res_deta2_vec               );
     auto res_dphi2_col            = Monitored::Collection( "res_dphi2"                , res_dphi2_vec               );
     auto res_dphiresc_col         = Monitored::Collection( "res_dphiresc"             , res_dphiresc_vec            );
+    auto res_z0_col               = Monitored::Collection( "res_z0"                   , res_z0_vec                  );
     auto res_d0_col               = Monitored::Collection( "res_d0"                   , res_d0_vec                  );
     auto res_d0sig_col            = Monitored::Collection( "res_d0sig"                , res_d0sig_vec               );
     auto res_eprobht_col          = Monitored::Collection( "res_eprobht"              , res_eprobht_vec             );
@@ -1104,6 +1107,14 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillHLTElectronResolution(const std::st
       
       val_off=getCaloTrackMatch_deltaPhiRescaled2(off);
       res_dphiresc_vec.push_back( (getCaloTrackMatch_deltaPhiRescaled2(onl)-val_off)/val_off );
+      // Resolution of Z0 of the track
+      val_off=getTrack_z0(off);
+      if(val_off!=0.) {
+        res_z0_vec.push_back(  getTrack_z0(onl)-val_off );
+      }else{
+        res_z0_vec.push_back(  dummy );
+      }
+      
       // Absolute resolution for impact parameter
       val_off=getTrack_d0(off);
       if(val_off!=0.) {
@@ -1182,6 +1193,7 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillHLTElectronResolution(const std::st
           res_deta2_col   , 
           res_dphi2_col   , 
           res_dphiresc_col, 
+          res_z0_col      , 
           res_d0_col      , 
           res_d0sig_col   , 
           res_eprobht_col , 
diff --git a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/CMakeLists.txt b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/CMakeLists.txt
index a3f81147d4d20bdb536b5bd4da413ccd37f3e43d..12bd872c1b6b4c46bc1120229040c218b7cc5255 100644
--- a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/CMakeLists.txt
+++ b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/CMakeLists.txt
@@ -18,4 +18,4 @@ atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} )
 
 atlas_add_test( ConfigTest
             SCRIPT  python -m  TrigMinBiasMonitoring.TrigMinBiasMonitoringMT 
-            POST nopost.sh)
\ No newline at end of file
+            POST_EXEC_SCRIPT nopost.sh)
\ No newline at end of file
diff --git a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/python/TrigMinBiasMonitoringMT.py b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/python/TrigMinBiasMonitoringMT.py
index a5df440b96e11b472eec2883ed128eff0d045a14..0b75f05b00c5dc313a51fabfe7d8b95f1ab01a2f 100644
--- a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/python/TrigMinBiasMonitoringMT.py
+++ b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/python/TrigMinBiasMonitoringMT.py
@@ -28,10 +28,21 @@ if __name__ == "__main__":
     from AthenaConfiguration.AllConfigFlags import ConfigFlags as flags
 
     flags.DQ.Environment = "AOD"
+    flags.Output.HISTFileName = 'TestMinBiasMonitorOutput.root'
     from AthenaConfiguration.TestDefaults import defaultTestFiles
 
     flags.Input.Files = defaultTestFiles.AOD
+    flags.Exec.MaxEvents = 20
+    flags.fillFromArgs()
     flags.lock()
 
-    acc = TrigMinBias(flags)
-    acc.printConfig(withDetails=True, summariseProps=True)
+    from AthenaConfiguration.MainServicesConfig import MainServicesCfg
+    from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+    cfg = MainServicesCfg(flags)
+    cfg.merge(PoolReadCfg(flags))
+    cfg.merge(TrigMinBias(flags))
+
+    status = cfg.run()
+    if status.isFailure():
+        import sys
+        sys.exit(-1)
\ No newline at end of file
diff --git a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTEfficiencyMonitoringAlg.cxx b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTEfficiencyMonitoringAlg.cxx
index 40c6ce15199f3833aaeabb7e0f7e0e7a23585736..60e5ef4e5681d90a237480dcf86f41086b6035be 100644
--- a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTEfficiencyMonitoringAlg.cxx
+++ b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTEfficiencyMonitoringAlg.cxx
@@ -43,8 +43,9 @@ StatusCode HLTEfficiencyMonitoringAlg::fillHistograms(const EventContext& contex
   auto leadingTrackPt = Scalar<double>("leadingTrackPt");
   for (const auto trk : *offlineTrkHandle)
   {
-    const double pt = std::fabs(trk->pt()) * 1e-3; // fabs used in case the charge is encoded in pt ( i.e. it is really q * pt)
-    if (m_trackSelectionTool->accept(*trk)) {
+    if (m_trackSelectionTool->accept(*trk) and std::fabs(trk->pt()) > m_minPt) {
+      const double pt = std::fabs(trk->pt()) * 1e-3; // fabs used in case the charge is encoded in pt ( i.e. it is really q * pt)
+
       ++countPassing;
       if (pt > 2.)
         ++countPassing_pt2;
diff --git a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTEfficiencyMonitoringAlg.h b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTEfficiencyMonitoringAlg.h
index ad035a89a29e0027f1f22ea96c2ed87207b25018..8535f9a5e74afb4181579365fc6eed2178243a4a 100644
--- a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTEfficiencyMonitoringAlg.h
+++ b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTEfficiencyMonitoringAlg.h
@@ -40,6 +40,8 @@ private:
   SG::ReadHandleKey<xAOD::TrackParticleContainer> m_offlineTrkKey{this, "OfflineTrkKey", "InDetTrackParticles", "Name of Offline track counts info object produced by the HLT track counting FEX algorithm"};
 
   ToolHandle<InDet::IInDetTrackSelectionTool> m_trackSelectionTool{this, "TrackSelectionTool", "InDetTrackSelectionTool", "Tool for selecting tracks"};
+  Gaudi::Property<float> m_minPt{ this, "minPt", 200.0, "Consider offline tracks only if above this threshold (in MeV)"};
+  
 };
 
 #endif // TRIGMINBIASMONITORING_HLTEFFICIENCYMONITORINGALG_H
diff --git a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTMinBiasTrkMonAlg.cxx b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTMinBiasTrkMonAlg.cxx
index dbb7ea8d24cfef80788e104f9c3b88b68b3c8a69..2a40ee01f1945d02c1a172245141de7370b53783 100644
--- a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTMinBiasTrkMonAlg.cxx
+++ b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTMinBiasTrkMonAlg.cxx
@@ -110,7 +110,7 @@ StatusCode HLTMinBiasTrkMonAlg::monitorTrkCounts(const EventContext& context) co
   int countPassing = 0;
   for (const auto trk : *offlineTrkHandle)
   {
-    if (m_trackSelectionTool->accept(*trk)) 
+    if (m_trackSelectionTool->accept(*trk) and std::fabs(trk->pt()) > m_minPt )
       ++countPassing;
   }
   ATH_MSG_DEBUG("::monitorTrkCounts countPassing  = " << countPassing);
diff --git a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTMinBiasTrkMonAlg.h b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTMinBiasTrkMonAlg.h
index 1a5ddf162fb980af112e30281cf818b82499a0a2..379fdd14917f008c71f0fbadcd094fccdc592e0a 100644
--- a/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTMinBiasTrkMonAlg.h
+++ b/Trigger/TrigMonitoring/TrigMinBiasMonitoring/src/HLTMinBiasTrkMonAlg.h
@@ -41,7 +41,8 @@ private:
 
   Gaudi::Property<std::vector<std::string>> m_triggerList{this, "triggerList",{}, "Add triggers to this to be monitored"};
   ToolHandle<InDet::IInDetTrackSelectionTool> m_trackSelectionTool {this, "TrackSelectionTool", "InDetTrackSelectionTool", "Tool for selecting tracks"};
-
+  Gaudi::Property<float> m_minPt{ this, "minPt", 200.0, "Consider offline tracks only if above this threshold (in MeV)"};
+  
   StatusCode monitorPurities(const EventContext& context) const;
   StatusCode monitorSPCounts(const EventContext& context) const;
   StatusCode monitorTrkCounts(const EventContext& context) const;
diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx
index 0527d8490683b0143d3a50730d06b7f2fba40397..6b83eec318dc0641b88aea2965016b59d68dc003 100644
--- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx
+++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx
@@ -22,10 +22,7 @@ StatusCode TrigTauMonitorAlgorithm::initialize() {
   ATH_CHECK( m_offlineTauJetKey.initialize() );
   ATH_CHECK( m_l1TauRoIKey.initialize() );
   ATH_CHECK( m_hltTauJetKey.initialize() );
-  ATH_CHECK( m_hltTauJetPrecisionKey.initialize() );
-  ATH_CHECK( m_hltTauJetPreselKey.initialize() );
-  ATH_CHECK( m_hltTauJetCaloOnlyMVAKey.initialize() );
-  ATH_CHECK( m_hltTauJetCaloOnlyKey.initialize() );
+  ATH_CHECK( m_hltTauJetCaloMVAOnlyKey.initialize() );
   ATH_CHECK( m_hltSeedJetKey.initialize());
   ATH_CHECK( m_trigDecTool.retrieve() );
 
@@ -116,16 +113,20 @@ StatusCode TrigTauMonitorAlgorithm::executeNavigation( const EventContext& ctx,
   if(trigItem.find("LLP_") != std::string::npos){
      tauContainerName="HLT_TrigTauRecMerged_LLP";
   }else if(trigItem.find("ptonly") != std::string::npos) 
-     tauContainerName="HLT_TrigTauRecMerged_CaloOnly";
+     tauContainerName="HLT_TrigTauRecMerged_CaloMVAOnly";
+
+  auto vec =  m_trigDecTool->features<xAOD::TauJetContainer>(trigItem,TrigDefs::Physics , tauContainerName );
 
   for(const auto *const Tau : *offTaus ){
 
     const TrigCompositeUtils::Decision *dec=nullptr; 
 
-    // consider only offline taus which pass RNN medium WP
+    // consider only offline taus which pass RNN medium WP 
     if( !Tau->isTau(xAOD::TauJetParameters::JetRNNSigMedium)) continue;
 
-    auto vec =  m_trigDecTool->features<xAOD::TauJetContainer>(trigItem,TrigDefs::Physics , tauContainerName );
+    // consider only offline taus which pass thinning 
+    if( Tau->isAvailable<char>("passThinning") && !Tau->auxdata<char>("passThinning") ) continue;
+
     for( auto &featLinkInfo : vec ){                                             
       if(! featLinkInfo.isValid() ) continue;
       const auto *feat = *(featLinkInfo.link);                   
@@ -196,7 +197,7 @@ void TrigTauMonitorAlgorithm::fillDistributions(const EventContext& ctx, const s
   if(trigger.find("LLP_") != std::string::npos){
      tauContainerName="HLT_TrigTauRecMerged_LLP";
   }else if(trigger.find("ptonly") != std::string::npos) 
-     tauContainerName="HLT_TrigTauRecMerged_CaloOnly";
+     tauContainerName="HLT_TrigTauRecMerged_CaloMVAOnly";
 
   ATH_MSG_DEBUG("Tau ContainerName is: " << tauContainerName);
 
diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h
index d9a8d92737877a401301aa436a058e295ffea274..e94a6db72d9bf046bce68d1da3aaf5e20f019acd 100644
--- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h
+++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h
@@ -88,10 +88,7 @@ class TrigTauMonitorAlgorithm : public AthMonitorAlgorithm {
   SG::ReadHandleKey< xAOD::TauJetContainer> m_offlineTauJetKey { this, "offlineTauJetKey", "TauJets", "Offline taujet container key" };
   SG::ReadHandleKey< xAOD::EmTauRoIContainer > m_l1TauRoIKey    { this, "l1TauRoIKey","LVL1EmTauRoIs","Tau L1 RoI key"};
   SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetKey { this, "hltTauJetKey", "HLT_TrigTauRecMerged_MVA", "HLT taujet container key" };
-  SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetPrecisionKey { this, "hltTauJetPrecisionKey", "HLT_TrigTauRecMerged_Precision", "HLT taujet container key" };
-  SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetPreselKey { this, "hltTauJetPreselKey", "HLT_TrigTauRecMerged_Presel", "HLT taujet container key" };
-  SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetCaloOnlyMVAKey { this, "hltTauJetCaloOnlyMVAKey", "HLT_TrigTauRecMerged_CaloOnlyMVA", "HLT taujet container key" };
-  SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetCaloOnlyKey { this, "hltTauJetCaloOnlyKey", "HLT_TrigTauRecMerged_CaloOnly", "HLT taujet container key" };
+  SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetCaloMVAOnlyKey { this, "hltTauJetCaloMVAOnlyKey", "HLT_TrigTauRecMerged_CaloMVAOnly", "HLT taujet container key" };
   SG::ReadHandleKey< xAOD::JetContainer> m_hltSeedJetKey { this, "hltSeedJetKey", "HLT_jet_seed", "HLT jet seed container key" };
 
 };
diff --git a/Trigger/TrigSteer/DecisionHandling/DecisionHandling/InputMakerBase.h b/Trigger/TrigSteer/DecisionHandling/DecisionHandling/InputMakerBase.h
index 03b6c3775b868935b38a1291aa6868746184435f..35b26058c81a55deabe31d2375b1cc49e761b2a6 100644
--- a/Trigger/TrigSteer/DecisionHandling/DecisionHandling/InputMakerBase.h
+++ b/Trigger/TrigSteer/DecisionHandling/DecisionHandling/InputMakerBase.h
@@ -9,13 +9,16 @@
 #include "AthenaBaseComps/AthReentrantAlgorithm.h"
 #include "StoreGate/ReadHandleKeyArray.h"
 
-
+/**
+ * @class InputMakerBase
+ * @brief Input Makers are used at the start of a sequence: retrieve filtered collection via the input decision from the previous step and write it out directly 
+ * so it can be used as input by the reconstruction algorithms that follow in sequence.
+ * This is a base class for HLT InputMakers to reduce boilerplate and enforce the common naming scheme for decision handle keys. 
+ * Derived classes implement how the reconstruction is started. Current options are via WriteHandle<TrigROIDecscriptorCollection>, as used by the
+ * InputMakerForRoI specialisation. Or via the spawning of EventView instances over a given sequencer, as used by the EventViewCreatorAlgorithm specialisation.
+ **/
 class InputMakerBase : public ::AthReentrantAlgorithm {
-  /**
-   * @class InputMakerBase
-   * @brief Input Makers are used at the start of a sequence: retrieve filtered collection via the input decision from the previous step and write it out directly so it can be used as input by the reco alg that follows in sequence.
-This is a base class for HLT InputMakers to reduce boilerplate and enforce the common naming scheme for decision handle keys. Derived classes will have to add specific reco data read & write keys to suit their purpose.
-   **/
+
  public:
   /// constructor, to be called by sub-class constructors
   InputMakerBase( const std::string& name, ISvcLocator* pSvcLocator );
@@ -25,6 +28,18 @@ This is a base class for HLT InputMakers to reduce boilerplate and enforce the c
   virtual StatusCode sysInitialize() override;
 
  protected:
+  /**
+   * @struct MatchingCache
+   * @brief Used to cache each incoming Decision object's ElementLink which is being used to identify the Decision object for the purposes of de-duplication merging
+   **/
+  struct MatchingCache {
+    void setMatchingHash(const TrigCompositeUtils::Decision* inputDecision, const uint64_t matchingHash);
+    void linkOutputToInput(const TrigCompositeUtils::Decision* outputDecision, const TrigCompositeUtils::Decision* inputDecision);
+    uint64_t getMatchingHash(const TrigCompositeUtils::Decision* outputDecision) const;
+    std::map<const TrigCompositeUtils::Decision*, const TrigCompositeUtils::Decision*> m_outputDecToInputDec;
+    std::map<const TrigCompositeUtils::Decision*, uint64_t> m_inputDecToMatchingHash;
+  };
+
   /// methods for derived classes to access handles of the base class input and output decisions; other read/write handles may be implemented by derived classes
   const SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer>& decisionInputs() const;
 
@@ -38,27 +53,36 @@ This is a base class for HLT InputMakers to reduce boilerplate and enforce the c
   Gaudi::Property<bool> m_mergeUsingFeature {this, "mergeUsingFeature", false,
     "True=the IParicle-derived feature from the previous step is used to determine identical inputs. False=the ROI located with the RoIsLink property is used to determine identical inputs" };
 
+  Gaudi::Property<bool> m_isEmptyStep {this, "isEmptyStep", false,
+    "True if this InputMaker instance is being used in an empty step. Forgoes the requirement to link an ROI, and auto-configures the 'mergeUsingFeature' property at runtime." };
+  
   // helper methods for derived classes to reduce boiler plate code  //
   /////////////////////////////////////////////////////////////////////
-  
+
   /// provides debug printout of the output of the algorithm
   void debugPrintOut(const EventContext& context, SG::WriteHandle<TrigCompositeUtils::DecisionContainer>& outputHandle) const;
 
   /// does the standard handling of input decisions: read from handles with all the checks, create merged output handles and link them, copies links and return outputHandles
-  StatusCode decisionInputToOutput(const EventContext& context, SG::WriteHandle<TrigCompositeUtils::DecisionContainer>& outputHandle) const;
+  StatusCode decisionInputToOutput(const EventContext& context, SG::WriteHandle<TrigCompositeUtils::DecisionContainer>& outputHandle) const;  
 
   /// Checks for merge-able Decision objects coming from N upstream filters. Check based on most-recent element link with name 'linkNameToMatch'. Works for any link type.
   size_t matchDecision(const TrigCompositeUtils::DecisionContainer* outDecisions, 
     const TrigCompositeUtils::Decision* toMatch, 
-    const std::string& linkNameToMatch) const;
+    const std::string& linkNameToMatch,
+    MatchingCache& matchingCache) const;
 
   /// Wrapper around matchDecision. Returns boolean if the match was successful.
-  bool matchInCollection(const TrigCompositeUtils::DecisionContainer* toMatchAgainst, 
+  bool matchInCollection(const TrigCompositeUtils::DecisionContainer* outDecisions, 
     const TrigCompositeUtils::Decision* toMatch,
-    size_t& matchIndex) const;
+    size_t& matchIndex,
+    bool& usedROIMatchingFlag,
+    MatchingCache& matchingCache) const;
+
+  /// Searches from toMatch to locate a single (type-less) Element Link with given edge name. Returns a hash corresponding to this Element Link
+  uint64_t getMatchingHashForDecision(const TrigCompositeUtils::Decision* toMatch, const std::string& linkNameToMatch) const;
 
  private:
-  
+
   /// input decisions array, will be implicit (renounced).
   SG::ReadHandleKeyArray<TrigCompositeUtils::DecisionContainer> m_inputs { this, "InputMakerInputDecisions", {}, "Input Decisions (implicit)" };
 
diff --git a/Trigger/TrigSteer/DecisionHandling/src/HypoBase.cxx b/Trigger/TrigSteer/DecisionHandling/src/HypoBase.cxx
index 2c586871882692db62d2ea50096984fc334f8268..9b1e4873564528e1e8a87a5c8b7c06a3b9990535 100644
--- a/Trigger/TrigSteer/DecisionHandling/src/HypoBase.cxx
+++ b/Trigger/TrigSteer/DecisionHandling/src/HypoBase.cxx
@@ -353,7 +353,13 @@ StatusCode HypoBase::validateHasLinks(const ElementLink<DecisionContainer>& dEL,
 
   } else if (name == inputMakerNodeName()) {
 
-    if (not (*dEL)->hasObjectLink( roiString() )) {
+    // This requirement is dropped for empty input makers to avoid unnecessary graph clutter.
+    bool exempt = false;
+    if ((*dEL)->hasDetail<int32_t>("isEmpty") and (*dEL)->getDetail<int32_t>("isEmpty") == 1) {
+      exempt = true;
+    }
+
+    if (not (*dEL)->hasObjectLink( roiString() ) and not exempt) {
       printErrorHeader(dEL, msg);
       msg << MSG::ERROR << "! Decision has no '" << roiString() << "' ElementLink." << endmsg;
       msg << MSG::ERROR << "! Every Decision created by a InputMaker must link to the ROI which reconstruction will run on for that Decision object in this Step." << endmsg;
diff --git a/Trigger/TrigSteer/DecisionHandling/src/InputMakerBase.cxx b/Trigger/TrigSteer/DecisionHandling/src/InputMakerBase.cxx
index 76a628aa8674c6f528e892fea80a7546c4a87034..783c5e0805c69dae844a8da821b26e21798711bb 100644
--- a/Trigger/TrigSteer/DecisionHandling/src/InputMakerBase.cxx
+++ b/Trigger/TrigSteer/DecisionHandling/src/InputMakerBase.cxx
@@ -7,7 +7,7 @@
 #include "TrigSteeringEvent/TrigRoiDescriptorCollection.h"
 
 using namespace TrigCompositeUtils;
-
+#define dodebug true
 
 InputMakerBase::InputMakerBase( const std::string& name, ISvcLocator* pSvcLocator )
 : ::AthReentrantAlgorithm( name, pSvcLocator ) {}
@@ -24,6 +24,9 @@ const SG::WriteHandleKey<TrigCompositeUtils::DecisionContainer>& InputMakerBase:
 
 StatusCode InputMakerBase::sysInitialize() {
   CHECK( AthReentrantAlgorithm::sysInitialize() ); // initialise base class
+  ATH_MSG_DEBUG(m_isEmptyStep);
+  ATH_MSG_DEBUG(m_mergeUsingFeature);
+  ATH_MSG_DEBUG("roisLink="<<m_roisLink);
   CHECK( m_inputs.initialize() );
   renounceArray(m_inputs); // make inputs implicit, i.e. not required by scheduler
   ATH_MSG_DEBUG("Will consume implicit decisions:" );
@@ -38,11 +41,16 @@ StatusCode InputMakerBase::sysInitialize() {
 // Create one output container and merge all inputs into this, using heuristics to identify equal Decision objects.
 // If the input is invalid or empty, the output is not created, resulting as invalid
 StatusCode InputMakerBase::decisionInputToOutput(const EventContext& context, SG::WriteHandle<TrigCompositeUtils::DecisionContainer>& outputHandle) const{
-
-  ATH_MSG_DEBUG("Creating one merged output per Decision object");
+  
+  ATH_MSG_DEBUG("Creating one merged output per Decision object, IsEmptyStep flag = " << m_isEmptyStep);
   ATH_CHECK( outputHandle.isValid() );
-  TrigCompositeUtils::DecisionContainer* outDecisions  = outputHandle.ptr();
+  TrigCompositeUtils::DecisionContainer* outDecisions = outputHandle.ptr();
 
+  // Empty IMs have a dynamic (runtime) matching configuration. But any single IM should find itself using exclusively-feature or exclusively-ROI based matching
+  size_t usedROIMatching = 0, usedFeatureMatching = 0; 
+
+  MatchingCache matchingCache; // Used to remember temporarily which hash is associated with each Decision object when performing the de-duplication matching 
+  size_t totalInput = 0;
   for ( const auto& inputKey: decisionInputs() ) {
     auto inputHandle = SG::makeHandle( inputKey, context );
 
@@ -61,83 +69,89 @@ StatusCode InputMakerBase::decisionInputToOutput(const EventContext& context, SG
     for (const TrigCompositeUtils::Decision* inputDecision : *inputHandle){
       ATH_MSG_DEBUG( " -- Input Decision " << input_counter <<": has " <<TrigCompositeUtils::getLinkToPrevious(inputDecision).size()<<" previous links");
 
+      bool usedROIMatchingFlag = false;
       size_t alreadyAddedIndex = std::numeric_limits<std::size_t>::max();
-      const bool alreadyAdded = matchInCollection(outDecisions, inputDecision, alreadyAddedIndex);
+      const bool alreadyAdded = matchInCollection(outDecisions, inputDecision, alreadyAddedIndex, usedROIMatchingFlag, matchingCache);      
 
-      TrigCompositeUtils::Decision* newDec = nullptr;
+      TrigCompositeUtils::Decision* outputDecision = nullptr;
       if (alreadyAdded) { // Already added, at alreadyAddedIndex
-        newDec = outDecisions->at( alreadyAddedIndex );
-        ATH_MSG_DEBUG( "  -- Matched to existing, " << inputKey.key() << " index " << input_counter << " is merged into existing output index " << alreadyAddedIndex);
+        if (usedROIMatchingFlag) {
+         ++usedROIMatching;
+        } else {
+          ++usedFeatureMatching;
+        }
+        outputDecision = outDecisions->at( alreadyAddedIndex );
+        ATH_MSG_DEBUG(  "  -- Matched to existing, " << inputKey.key() << " index " << input_counter << " is merged into existing output index " << alreadyAddedIndex << (usedROIMatchingFlag ? " Matched using ROI" : " Matched using Feature"));
       } else { // Not already added, make new
-        newDec = TrigCompositeUtils::newDecisionIn( outDecisions );
-        newDec->setName(inputMakerNodeName());
+        outputDecision = TrigCompositeUtils::newDecisionIn( outDecisions );
+        outputDecision->setName(inputMakerNodeName());
+        outputDecision->setDetail<int32_t>("isEmpty", static_cast<int32_t>(m_isEmptyStep)); // Transient detail (only used by runtime navigation validation, never persisted)
+        matchingCache.linkOutputToInput(outputDecision, inputDecision);
         ATH_MSG_DEBUG( "  -- Did not match to existing, " << inputKey.key() << " index " << input_counter << " creates output index " << outDecisions->size()-1);
       }
 
-      // Note: We will call linkToPrevious and insertDecisionIDs N times on a single "newDec", where N is the number of inputDecision which checkExisting determines are the same object.
-      TrigCompositeUtils::linkToPrevious( newDec, inputDecision, context ); // Link inputDecision object as the 'seed' of newDec
-      TrigCompositeUtils::insertDecisionIDs( inputDecision, newDec ); // Copy decision IDs from inputDecision into newDec
-      ATH_MSG_DEBUG("      -- This output decision now has " << TrigCompositeUtils::getLinkToPrevious(newDec).size() << " seeds and "<< newDec->decisions().size() << " decisionIds");           
+      // Note: We will call linkToPrevious and insertDecisionIDs N times on a single "outputDecision", where N is the number of inputDecision which checkExisting determines are the same object.
+      TrigCompositeUtils::linkToPrevious( outputDecision, inputDecision, context ); // Link inputDecision object as the 'seed' of outputDecision
+      TrigCompositeUtils::insertDecisionIDs( inputDecision, outputDecision ); // Copy decision IDs from inputDecision into outputDecision
+      ATH_MSG_DEBUG("      -- This output decision now has " << TrigCompositeUtils::getLinkToPrevious(outputDecision).size() << " seeds and "<< outputDecision->decisions().size() << " decisionIds");           
       input_counter++;  
     } // loop over input decisions
-
+    totalInput+=input_counter;
   } // end of: for ( auto inputKey: decisionInputs() )
 
+  if (usedROIMatching and usedFeatureMatching) {
+    // downgrade ERROR to WARNING temporarely, since we have one case of tau+jet+tauprobe chain interaction, which meets this condition
+    // stay with WARNING to monitor such cases, then remove if they seem to be ok
+    ATH_MSG_WARNING("This input maker used Feature-based mapping on " << usedFeatureMatching << " inputs and ROI-based mapping on " << usedROIMatching
+      << " inputs. The isEmptyIM flag is " << m_isEmptyStep);
+    //return StatusCode::FAILURE;
+  }
+
   // Print some debug messages summarising the content of the outputHandles.
   if (msgLvl(MSG::DEBUG)) {
     debugPrintOut(context, outputHandle);
   }
+  ATH_MSG_DEBUG("Merging complete: from "<<totalInput<<" input decision to "<<outputHandle->size()<<" output decisions");
 
   return StatusCode::SUCCESS;
 }
 
 
-bool InputMakerBase::matchInCollection(const DecisionContainer* toMatchAgainst, const Decision* toMatch, size_t& matchIndex) const {
-  if ( m_mergeUsingFeature ) {
-    matchIndex = matchDecision(toMatchAgainst, toMatch, featureString());
-  } else {
-    matchIndex = matchDecision(toMatchAgainst, toMatch, m_roisLink.value());
+bool InputMakerBase::matchInCollection(const DecisionContainer* outDecisions, const Decision* toMatch, size_t& matchIndex, bool& usedROIMatchingFlag, MatchingCache& matchingCache) const {
+  std::set<const Decision*> cache; //!< Used to accelerate the recursive typelessFindLinks.
+  std::vector<uint32_t> keys;
+  std::vector<uint32_t> clids;
+  std::vector<uint16_t> indicies;
+  std::vector<const Decision*> sources; // Unused
+  TrigCompositeUtils::typelessFindLinks(toMatch, featureString(), keys, clids, indicies, sources, TrigDefs::lastFeatureOfType, &cache);
+  bool hasFeature = false;
+  if (keys.size() != 0) hasFeature=true;
+  ATH_MSG_DEBUG("This decision hasFeature="<< hasFeature);
+  // Do feature based matching if configured to do so, or do it tentatively for empty step IMs (will not generate an ERROR if it fails for the empty step case)
+  if ( m_mergeUsingFeature == true or (m_isEmptyStep and hasFeature) ) {
+    matchIndex = matchDecision(outDecisions, toMatch, featureString(), matchingCache);
+    ATH_MSG_DEBUG("matchDecision in features: "<< matchIndex);
+  }
+  // Do ROI based batching if configured to do so, or if feature matching failed for an empty step IM.
+  else {
+    matchIndex = matchDecision(outDecisions, toMatch, m_roisLink.value(), matchingCache);
+    usedROIMatchingFlag = true;
   }
   return (matchIndex != std::numeric_limits<std::size_t>::max());
 }
 
-size_t InputMakerBase::matchDecision(const DecisionContainer* outDecisions, const Decision* toMatch, const std::string& linkNameToMatch) const {
-  
-  std::set<const Decision*> cache; //!< Used to accelerate the recursive typelessFindLinks. Should be cleared between uses.
-  std::vector<uint32_t> keysA;
-  std::vector<uint32_t> clidsA;
-  std::vector<uint16_t> indiciesA;
-  std::vector<const Decision*> sourcesA; // Unused
-  TrigCompositeUtils::typelessFindLinks(toMatch, linkNameToMatch, keysA, clidsA, indiciesA, sourcesA, TrigDefs::lastFeatureOfType, &cache);
-  
-  if (keysA.size() != 1) {
-    ATH_MSG_ERROR("InputMakerBase::matchDecision Did not locate exactly one object having searched for a link named '" << linkNameToMatch 
-      << "', found " << keysA.size() << ". Unable to match this Decision object.");
-    for (size_t i = 0; i < keysA.size(); ++i) {
-      ATH_MSG_ERROR("  -- Key:" << keysA.at(i) << " Index:" << indiciesA.at(i) << " CLID:" << clidsA.at(i)); 
-    }
-    return std::numeric_limits<std::size_t>::max();
-  }
+size_t InputMakerBase::matchDecision(const DecisionContainer* outDecisions, const Decision* toMatch, const std::string& linkNameToMatch, MatchingCache& matchingCache) const {  
+  const uint64_t matchingHash = getMatchingHashForDecision(toMatch, linkNameToMatch);
+  ATH_MSG_DEBUG("matchDecision "<<linkNameToMatch<<" with matchingHash="<<matchingHash);
+  // Cache this matching hash, so that in subsequent calls we can compare other incoming decision object's matching hash against this one
+  matchingCache.setMatchingHash(toMatch, matchingHash);
 
   // Look for match
   for (size_t index = 0; index < outDecisions->size(); ++index) {
     const TrigCompositeUtils::Decision* checkDecision = outDecisions->at(index);
-    if (checkDecision == nullptr) {
-      ATH_MSG_ERROR("Failed to get Decision object " << index << " of " << outDecisions->size());
-      return std::numeric_limits<std::size_t>::max();
-    }
-    cache.clear();
-    std::vector<uint32_t> keysB;
-    std::vector<uint32_t> clidsB;
-    std::vector<uint16_t> indiciesB;
-    std::vector<const Decision*> sourcesB; // Unused
-    TrigCompositeUtils::typelessFindLinks(checkDecision, linkNameToMatch, keysB, clidsB, indiciesB, sourcesB, TrigDefs::lastFeatureOfType, &cache);
-    if (keysB.size() != 1) {
-      ATH_MSG_ERROR("Logic error. Expect toMatch size == 1 (confirmed) and checkObject size == 1."
-        << " But have checkObject size = " << keysB.size() << ". Unable to match this Decision object.");
-      return std::numeric_limits<std::size_t>::max();
-    }
-    if (keysA.at(0) == keysB.at(0) and clidsA.at(0) == clidsB.at(0) and indiciesA.at(0) == indiciesB.at(0)) {
+    const uint64_t checkHash = matchingCache.getMatchingHash(checkDecision);
+    ATH_MSG_DEBUG("matchDecision checkHash="<<checkHash<<" index="<<index);
+    if (checkHash == matchingHash) {
       return index;
     }
   }
@@ -145,6 +159,46 @@ size_t InputMakerBase::matchDecision(const DecisionContainer* outDecisions, cons
   return std::numeric_limits<std::size_t>::max();
 }
 
+uint64_t InputMakerBase::getMatchingHashForDecision(const Decision* toMatch, const std::string& linkNameToMatch) const {
+  std::set<const Decision*> cache; //!< Used to accelerate the recursive typelessFindLinks.
+  std::vector<uint32_t> keys;
+  std::vector<uint32_t> clids;
+  std::vector<uint16_t> indicies;
+  std::vector<const Decision*> sources; // Unused
+  TrigCompositeUtils::typelessFindLinks(toMatch, linkNameToMatch, keys, clids, indicies, sources, TrigDefs::lastFeatureOfType, &cache);
+  ATH_MSG_DEBUG("getMatchingHashForDecision keys.size()="<<keys.size());
+  if (keys.size() != 1) {
+    bool suppressError = false;
+    // We silence this ERROR when the IM isEmptyStep and we are tentatively testing at runtime if there is an available "feature" link.
+    if (m_isEmptyStep and linkNameToMatch == featureString()) {
+      suppressError = true;
+    }
+    // However... we _always_ want to print the ERROR if we got here not because keys.size() == 0 but because keys.size() > 1!
+    // This is an ambiguous situation, and such things are always bad.
+    if ( keys.size() > 1) {
+      suppressError = false;
+    }
+    if (not suppressError) {
+      ATH_MSG_ERROR("InputMakerBase::getMatchingHashForDecision Did not locate exactly one object having searched for a link named '" << linkNameToMatch 
+        << "', found " << keys.size() << ". Unable to match this Decision object.");
+      for (size_t i = 0; i < keys.size(); ++i) {
+        const std::string* sgKeyStr = evtStore()->keyToString(keys.at(i));
+        ATH_MSG_ERROR("  -- Key:" << keys.at(i) << " KeyStr:" << (sgKeyStr ? *sgKeyStr : "UNKNOWN") << " Index:" << indicies.at(i) << " CLID:" << clids.at(i)); 
+      }
+      // Super verbose output
+      ATH_MSG_ERROR(" -- -- TRACKING FULL HISTORY ");
+      NavGraph navGraph;
+      recursiveGetDecisions(toMatch, navGraph);
+      navGraph.printAllPaths(msg(), MSG::ERROR); 
+    }
+    return std::numeric_limits<std::size_t>::max();
+  }
+
+  // Construct a new hash by combining the SGkey (a hash), the CLID (a hash) and the index (an offset)
+  const uint64_t matchingHash = keys.at(0) + clids.at(0) + indicies.at(0);
+  return matchingHash;
+}
+
 
 void InputMakerBase::debugPrintOut(const EventContext& context, SG::WriteHandle<TrigCompositeUtils::DecisionContainer>& outputHandle) const{
   size_t validInput=0;
@@ -172,3 +226,33 @@ void InputMakerBase::debugPrintOut(const EventContext& context, SG::WriteHandle<
   }
 }
 
+
+void InputMakerBase::MatchingCache::setMatchingHash(const Decision* inputDecision, const uint64_t matchingHash) {
+  m_inputDecToMatchingHash[inputDecision] = matchingHash;
+}
+
+
+void InputMakerBase::MatchingCache::linkOutputToInput(const Decision* outputDecision, const Decision* inputDecision) {
+  m_outputDecToInputDec[outputDecision] = inputDecision;
+}
+
+
+uint64_t InputMakerBase::MatchingCache::getMatchingHash(const Decision* outputDecision) const {
+  if (!outputDecision) {
+    throw std::runtime_error("InputMakerBase::MatchingCache::getMatchingHash: Called with nullptr.");
+  }
+
+  auto it_inDec = m_outputDecToInputDec.find(outputDecision);
+  if (it_inDec == m_outputDecToInputDec.end()) {
+    throw std::runtime_error("InputMakerBase::MatchingCache::getMatchingHash: No matching input Decision* for the supplied output Decision*");
+  }
+  const Decision* inputDecision = it_inDec->second;
+
+  auto it_hash = m_inputDecToMatchingHash.find(inputDecision);
+  if (it_hash == m_inputDecToMatchingHash.end()) {
+    throw std::runtime_error("InputMakerBase::MatchingCache::getMatchingHash: No matching hash for this input Decision*");
+  }
+  const uint64_t hash = it_hash->second;
+
+  return hash;
+}
diff --git a/Trigger/TrigSteer/DecisionHandling/src/InputMakerForRoI.cxx b/Trigger/TrigSteer/DecisionHandling/src/InputMakerForRoI.cxx
index dca20ee30aa3f24a225dd746ca75d62ab1b973dc..de90bd14a5b322a639071f5bd893ea6d1e211919 100644
--- a/Trigger/TrigSteer/DecisionHandling/src/InputMakerForRoI.cxx
+++ b/Trigger/TrigSteer/DecisionHandling/src/InputMakerForRoI.cxx
@@ -21,6 +21,10 @@ StatusCode  InputMakerForRoI::initialize() {
   ATH_MSG_DEBUG("Will produce output RoI collections: " << m_RoIs);
   ATH_CHECK( m_RoIs.initialize( SG::AllowEmpty ) );
   if (not m_roiTool.empty()) ATH_CHECK( m_roiTool.retrieve() );
+  if (m_roiTool.empty() and not m_isEmptyStep) {
+    ATH_MSG_ERROR(name() << " was not supplied an ROI tool.");
+    return StatusCode::FAILURE;
+  }
   return StatusCode::SUCCESS;
 }
 
@@ -31,7 +35,7 @@ StatusCode  InputMakerForRoI::execute( const EventContext& context ) const {
   SG::WriteHandle<DecisionContainer> outputHandle = createAndStore( decisionOutputs(), context );
   ATH_CHECK(outputHandle.isValid());
   ATH_CHECK(decisionInputToOutput(context, outputHandle));
-  ATH_MSG_DEBUG("Merging complete");
+  
 
   if( outputHandle->size() == 0) {
     ATH_MSG_DEBUG( "Have no decisions in output handle "<< outputHandle.key() << ". Handle is valid but container is empty. "
diff --git a/Trigger/TrigSteer/DecisionHandling/src/InputMakerForRoI.h b/Trigger/TrigSteer/DecisionHandling/src/InputMakerForRoI.h
index 89218ab7a64ce7cdf10b6b443e88c261db7e345b..3e54665b0f37d16c433bcf82a0cc8d7d6406cf2f 100644
--- a/Trigger/TrigSteer/DecisionHandling/src/InputMakerForRoI.h
+++ b/Trigger/TrigSteer/DecisionHandling/src/InputMakerForRoI.h
@@ -28,6 +28,8 @@
     virtual StatusCode  execute(const EventContext&) const override;
 
   private: 
+
+  
     SG::WriteHandleKey<TrigRoiDescriptorCollection> m_RoIs {this, "RoIs", "",
       "Name of the collection of ROI extrated from the input Decision Objects. Used as cocnrete starting handle for step's reconstruction."};
 
diff --git a/Trigger/TrigSteer/TrigCompositeUtils/Root/NavGraph.cxx b/Trigger/TrigSteer/TrigCompositeUtils/Root/NavGraph.cxx
index a6e134617971134ff821da93ce7082b0a96c8fb0..5f9b7fdef9deb519068f66352b54836485769309 100644
--- a/Trigger/TrigSteer/TrigCompositeUtils/Root/NavGraph.cxx
+++ b/Trigger/TrigSteer/TrigCompositeUtils/Root/NavGraph.cxx
@@ -169,22 +169,13 @@ namespace TrigCompositeUtils {
       ss << "  ";
     }
 
-    ss << "|-> " << nodeEL.dataID() << " #" << nodeEL.index() << " Name(" << node->name() << ") Passing(";
-    bool first = true;
-    for (DecisionID id : node->decisions()) {
-      if (!first) ss << ",";
-      first = false;
-      ss << id;
+    ss << "|-> " << nodeEL.dataID() << " #" << nodeEL.index() << " Name(" << node->name() << ") Passing(" << node->decisions().size() << ")";
+    if (node->hasObjectLink("feaure")) {
+      uint32_t key, clid;
+      uint16_t index;
+      node->typelessGetObjectLink("feature", key, clid, index);
+      ss << " feature(" << key << ")";
     }
-    ss << ") IParticles(";
-    std::vector<std::string> links = node->getObjectNames<xAOD::IParticleContainer>();
-    first = true;
-    for (const std::string& link : links) {
-      if (!first) ss << ",";
-      first = false;
-      ss << link;
-    }
-    ss << ")";
     log << msgLevel << ss.str() << endmsg;
     for (const NavGraphNode* seed : nav.seeds()) {
       recursivePrintNavPath(*seed, level + 1, log, msgLevel);
diff --git a/Trigger/TrigSteer/TrigCompositeUtils/share/TrigCompositeUtils_test.ref b/Trigger/TrigSteer/TrigCompositeUtils/share/TrigCompositeUtils_test.ref
index bee27322b7d9e515ba226410f7ff0a38f7965adf..93a6de86544154eeb43e01468244ae6d05b9e7c4 100644
--- a/Trigger/TrigSteer/TrigCompositeUtils/share/TrigCompositeUtils_test.ref
+++ b/Trigger/TrigSteer/TrigCompositeUtils/share/TrigCompositeUtils_test.ref
@@ -1,7 +1,8 @@
+
+
 ApplicationMgr       INFO Application Manager Configured successfully
 EventLoopMgr      WARNING Unable to locate service "EventSelector" 
 EventLoopMgr      WARNING No events will be processed from external input.
-HistogramPersis...WARNING Histograms saving not required.
 ApplicationMgr       INFO Application Manager Initialized successfully
 ApplicationMgr Ready
 Context: s: 0  e: 0
diff --git a/Trigger/TrigSteer/TrigCompositeUtils/share/TrigTraversal_test.ref b/Trigger/TrigSteer/TrigCompositeUtils/share/TrigTraversal_test.ref
index 928f4178cf35445adceb6affd640cf8445ca3323..922e2c14a5f8eafc5d37fe061358583340755d7e 100644
--- a/Trigger/TrigSteer/TrigCompositeUtils/share/TrigTraversal_test.ref
+++ b/Trigger/TrigSteer/TrigCompositeUtils/share/TrigTraversal_test.ref
@@ -1,150 +1,142 @@
 
 
-Initializing Gaudi ApplicationMgr using job opts ../share/
-ApplicationMgr    SUCCESS 
-====================================================================================================================================
-                                                   Welcome to ApplicationMgr (GaudiCoreSvc v36r2)
-                                          running on pc-tbed-pub-21.cern.ch on Fri Nov 12 10:31:56 2021
-====================================================================================================================================
 ApplicationMgr       INFO Application Manager Configured successfully
 EventLoopMgr      WARNING Unable to locate service "EventSelector" 
 EventLoopMgr      WARNING No events will be processed from external input.
 ApplicationMgr       INFO Application Manager Initialized successfully
 ApplicationMgr Ready
-ClassIDSvc           INFO getRegistryEntries: read 7409 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO getRegistryEntries: read 379 CLIDRegistry entries for module ALL
 TrigTraversal        INFO HLT_mufast_chain
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
 TrigTraversal        INFO HLT_mu_chain
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(2) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(2) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
 TrigTraversal        INFO HLT_mu_em_chain
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO HLT_em_chain
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(4) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO All
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(2) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(2) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(2) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(4) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO [All passing features] HLT_mufast_chain features size:1
   Feature  pt:20, state:ACTIVE
 
@@ -188,155 +180,155 @@ TrigTraversal        INFO [Final passing feature] All chains features size:3
 
  ---------- Now Include Failing Features 
 TrigTraversal        INFO HLT_mufast_chain
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #4 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #4 Name(F) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
 TrigTraversal        INFO HLT_mu_chain
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #4 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(2) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(2) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #4 Name(F) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
 TrigTraversal        INFO HLT_mu_em_chain
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #5 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #5 Name(F) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO HLT_em_chain
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(4) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO All
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #4 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #5 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(2) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(2) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(2) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(1,2) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(4) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(4) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(3) IParticles()
-TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #4 Name(F) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #5 Name(F) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #15 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #16 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #9 Name(F) Passing(2)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #10 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #27 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #28 Name(F) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #22 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO                   |-> HLTNav_Summary_OnlineSlimmed #23 Name(F) Passing(1)
+TrigTraversal        INFO                     |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO [All passing/failing features] HLT_mufast_chain features size:2
   Feature  pt:20, state:ACTIVE
   Feature  pt:5, state:INACTIVE
@@ -391,180 +383,179 @@ TrigTraversal        INFO [Final passing/failing feature] All chains features si
  ----------
  ----------
  ---------- Thinning out 'F' nodes.
-----------
 TrigTraversal        INFO HLT_mufast_chain goes from 10 nodes, 11 edges, to 8 nodes, 6 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
 TrigTraversal        INFO HLT_mu_chain goes from 13 nodes, 11 edges, to 10 nodes, 8 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(2) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
 TrigTraversal        INFO HLT_mu_em_chain goes from 25 nodes, 23 edges, to 20 nodes, 18 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO HLT_em_chain goes from 9 nodes, 8 edges, to 7 nodes, 6 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(4) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO All goes from 33 nodes, 39 edges, to 23 nodes, 26 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(2) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(4) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #14 Name(CH) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #26 Name(CH) Passing(1)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #25 Name(H) Passing(2)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #24 Name(IM) Passing(2)
+TrigTraversal        INFO                 |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
  ----------
  ---------- Thinning with mode 'keepOnlyFinalFeatures'.
  ----------
 TrigTraversal        INFO HLT_mufast_chain goes from 8 nodes, 8 edges, to 8 nodes, 6 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
 TrigTraversal        INFO HLT_mu_chain goes from 10 nodes, 8 edges, to 8 nodes, 6 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(2) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
 TrigTraversal        INFO [HLT_mu_em_chain goes from 20 nodes, 18 edges, to 14 nodes, 12 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO HLT_em_chain goes from 9 nodes, 6 edges, to 5 nodes, 4 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(4) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
 TrigTraversal        INFO All goes from 23 nodes, 26 edges, to 19 nodes, 20 edges.
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing() IParticles(feature)
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(1,2,3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(2) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2,3) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2,3) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(1,2,3) IParticles(feature)
-TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(1,2,3) IParticles()
-TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(1,2,3) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(4) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
-TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(3) IParticles()
-TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(3) IParticles()
-TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(3,4) IParticles(feature)
-TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(3,4) IParticles()
-TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(3,4) IParticles()
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #7 Name(H) Passing(0)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #6 Name(IM) Passing(3)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #0 Name(L1) Passing(3)
+TrigTraversal        INFO |-> HLTNav_Summary_OnlineSlimmed #3 Name(HLTPassRaw) Passing(4)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #13 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #19 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #21 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #20 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #18 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #17 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #12 Name(H) Passing(3)
+TrigTraversal        INFO             |-> HLTNav_Summary_OnlineSlimmed #11 Name(IM) Passing(3)
+TrigTraversal        INFO               |-> HLTNav_Summary_OnlineSlimmed #1 Name(L1) Passing(3)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #31 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
+TrigTraversal        INFO   |-> HLTNav_Summary_OnlineSlimmed #33 Name(SF) Passing(1)
+TrigTraversal        INFO     |-> HLTNav_Summary_OnlineSlimmed #32 Name(CH) Passing(1)
+TrigTraversal        INFO       |-> HLTNav_Summary_OnlineSlimmed #30 Name(H) Passing(2)
+TrigTraversal        INFO         |-> HLTNav_Summary_OnlineSlimmed #29 Name(IM) Passing(2)
+TrigTraversal        INFO           |-> HLTNav_Summary_OnlineSlimmed #2 Name(L1) Passing(2)
  ----------
  ---------- Check Explicit Type 
  ----------
diff --git a/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h b/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h
index b9013e09f82d2a0de7f2acbab188755e627d9ff7..d6a9bf2d8334b12cecfcfe7989237bbb6fb20bdf 100644
--- a/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h
+++ b/Trigger/TrigSteer/TrigOutputHandling/TrigOutputHandling/TriggerEDMAuxAccessors.h
@@ -96,6 +96,12 @@ auto floatAccessors = initAccessors<float>(
   "dipsLoose20210517_pb",
   "dipsLoose20210517_pc",
   "dipsLoose20210517_pu",
+  "DL1dv00_pb",
+  "DL1dv00_pc",
+  "DL1dv00_pu",
+  "dipsLoose20210729_pb",
+  "dipsLoose20210729_pc",
+  "dipsLoose20210729_pu",
   "DetectorEta", "DetectorPhi",
   "EMFrac", "HECFrac", "JVFCorr", "seed_eta", "seed_phi", "trk_a0beam",
   "btagIp_d0", "btagIp_d0Uncertainty", "btagIp_z0SinTheta", "btagIp_z0SinThetaUncertainty",
diff --git a/Trigger/TrigSteer/ViewAlgs/src/EventViewCreatorAlgorithm.cxx b/Trigger/TrigSteer/ViewAlgs/src/EventViewCreatorAlgorithm.cxx
index 9051f3ca0dd50fe5caeb5a8872f3020ba2fb79b9..eace07e4063db576901cb7c5dc677fbae720654b 100644
--- a/Trigger/TrigSteer/ViewAlgs/src/EventViewCreatorAlgorithm.cxx
+++ b/Trigger/TrigSteer/ViewAlgs/src/EventViewCreatorAlgorithm.cxx
@@ -29,6 +29,11 @@ StatusCode EventViewCreatorAlgorithm::initialize() {
     renounce(m_cachedViewsKey); // Reading in and using cached inputs is optional, not guarenteed to be produced in every event.
   }
 
+  if (m_isEmptyStep) {
+    ATH_MSG_ERROR("The EventViewCreatorAlgorithm class cannot be used as the InputMaker for an empty step.");
+    return StatusCode::FAILURE;
+  }
+
   // Muon slice code
   ATH_CHECK( m_inViewMuons.initialize(m_placeMuonInView) );
   ATH_CHECK( m_inViewMuonCandidates.initialize(m_placeMuonInView) );
@@ -56,11 +61,13 @@ StatusCode EventViewCreatorAlgorithm::execute( const EventContext& context ) con
 
   // Check for an optional input handle to use as a source of cached, already-executed, views.
   const DecisionContainer* cachedViews = nullptr;
+  MatchingCache matchingCache; // Used to remember temporarily which hash is associated with each DecisionObject when performing maching in a PROBE IM to TAG IM DecisionObjects
   if (!m_cachedViewsKey.empty()) {
     SG::ReadHandle<DecisionContainer> cachedRH = SG::makeHandle(m_cachedViewsKey, context);
     // Even if the handle is configured, this precursor EventViewCreatorAlg may not have executed in a given event
     if (cachedRH.isValid()) {
       cachedViews = cachedRH.ptr();
+      ATH_CHECK(populateMatchingCacheWithCachedViews(cachedViews, matchingCache));
     }
   }
 
@@ -94,7 +101,7 @@ StatusCode EventViewCreatorAlgorithm::execute( const EventContext& context ) con
       
     // cachedIndex and useCached are to do with a)
     size_t cachedIndex = std::numeric_limits<std::size_t>::max();
-    const bool useCached = checkCache(cachedViews, outputDecision, cachedIndex);
+    const bool useCached = checkCache(cachedViews, outputDecision, cachedIndex, matchingCache);
 
     // roiIt is to do with b) and c)
     auto roiIt = find(RoIsFromDecision.begin(), RoIsFromDecision.end(), roiEL);
@@ -167,11 +174,32 @@ StatusCode EventViewCreatorAlgorithm::execute( const EventContext& context ) con
   return StatusCode::SUCCESS;
 }
 
-bool EventViewCreatorAlgorithm::checkCache(const DecisionContainer* cachedViews, const Decision* outputDecision, size_t& cachedIndex) const {
+bool EventViewCreatorAlgorithm::checkCache(const DecisionContainer* cachedViews, const Decision* outputDecision, size_t& cachedIndex, MatchingCache& matchingCache) const {
   if (cachedViews == nullptr or m_cacheDisabled) {
     return false; // No cached input configured, which is fine.
   }
-  return matchInCollection(cachedViews, outputDecision, cachedIndex);
+
+  bool usedROIMatchingFlag; // Sanity check
+  const bool result = matchInCollection(cachedViews, outputDecision, cachedIndex, usedROIMatchingFlag, matchingCache);
+  if (usedROIMatchingFlag and m_mergeUsingFeature) {
+    ATH_MSG_ERROR("Called matchInCollection in an EVCA configured with mergeUsingFeature=True, however ROI matching was used instead?! Should not be possible.");
+  }
+  return result;
+}
+
+
+StatusCode EventViewCreatorAlgorithm::populateMatchingCacheWithCachedViews(const DecisionContainer* cachedViews, MatchingCache& matchingCache) const {
+  const std::string linkNameToMatch = m_mergeUsingFeature ? featureString() : m_roisLink.value();
+  for (const Decision* cachedView : *cachedViews) {
+    const uint64_t matchingHash = getMatchingHashForDecision(cachedView, linkNameToMatch);
+    if (matchingHash == std::numeric_limits<std::size_t>::max()) {
+      return StatusCode::FAILURE;
+    }
+    matchingCache.setMatchingHash(cachedView, matchingHash);
+    // There is no output-to-input redirection required when we're matching against the old TAG collection in the PROBE EVCA, so we can set key=value in this redirection map
+    matchingCache.linkOutputToInput(cachedView, cachedView);
+  }
+  return StatusCode::SUCCESS;
 }
 
 
diff --git a/Trigger/TrigSteer/ViewAlgs/src/EventViewCreatorAlgorithm.h b/Trigger/TrigSteer/ViewAlgs/src/EventViewCreatorAlgorithm.h
index 649fd5d6403f443714a0dc95d3e35440ff7374cb..e34a767a04d65685edc499e7d10d0a017c7e666b 100644
--- a/Trigger/TrigSteer/ViewAlgs/src/EventViewCreatorAlgorithm.h
+++ b/Trigger/TrigSteer/ViewAlgs/src/EventViewCreatorAlgorithm.h
@@ -136,12 +136,19 @@ class EventViewCreatorAlgorithm : public ::InputMakerBase
     /**
      * @brief Allow for the re-use of EventViews run in a previous Step in another EVCA instance configured
      * to spawn EventViews using the same reconstruction sequence (i.e. both algs should share a common ViewNodeName).
-     *
-     * NOTE: This is a potential future CPU saving feature. Nothing currently uses this.
      **/
     bool checkCache(const TrigCompositeUtils::DecisionContainer* cachedViews, 
       const TrigCompositeUtils::Decision* outputDecision, 
-      size_t& cachedIndex) const;
+      size_t& cachedIndex,
+      MatchingCache& matchingCache) const;
+
+    /**
+     * @brief We look for matching Decision Objects in a matchingCache.
+     * When we are trying in a PROBE InputMaker to match against the Decision Objects created prior in a TAG InputMaker
+     * then we need to pre-populate the cache with the data from the TAG InputMaker.
+     **/
+    StatusCode populateMatchingCacheWithCachedViews(const TrigCompositeUtils::DecisionContainer* cachedViews, MatchingCache& matchingCache) const;
+
 
 };
 
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXFPGA.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXFPGA.h
index 59f8ae5f3e971943fef0e2970e5328ab81526e47..16cfa7428ad5d7fb1232f43cd46686b0eb09113b 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXFPGA.h
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXFPGA.h
@@ -24,6 +24,7 @@
 #include "L1CaloFEXToolInterfaces/IjFEXsumETAlgo.h"
 #include "L1CaloFEXToolInterfaces/IjFEXmetAlgo.h"
 #include "L1CaloFEXToolInterfaces/IjFEXForwardJetsAlgo.h"
+#include "L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h"
 #include "L1CaloFEXToolInterfaces/IjFEXPileupAndNoise.h"
 #include "CaloEvent/CaloCellContainer.h"
 #include "CaloIdentifier/CaloIdManager.h"
@@ -135,8 +136,7 @@ namespace LVL1 {
     ToolHandle<IjFEXsumETAlgo> m_jFEXsumETAlgoTool         {this, "jFEXsumETAlgoTool"    , "LVL1::jFEXsumETAlgo"    , "Tool that runs the jFEX sumET algorithm"};
     ToolHandle<IjFEXmetAlgo> m_jFEXmetAlgoTool             {this, "jFEXmetAlgoTool"      , "LVL1::jFEXmetAlgo"      , "Tool that runs the jFEX met algorithm"};
     ToolHandle<IjFEXForwardJetsAlgo> m_jFEXForwardJetsAlgoTool {this, "jFEXForwardJetsAlgoTool"      , "LVL1::jFEXForwardJetsAlgo"      , "Tool that runs the jFEX FCAL Jets algorithm"};
-
-    //ToolHandle<IjFEXegAlgo> m_jFEXegAlgoTool {this, "jFEXegAlgoTool", "LVL1::jFEXegAlgo", "Tool that runs the jFEX e/gamma algorithm"};
+    ToolHandle<IjFEXForwardElecAlgo> m_jFEXForwardElecAlgoTool {this, "jFEXForwardElecAlgoTool"      , "LVL1::jFEXForwardElecAlgo"      , "Tool that runs the jFEX FCAL Electrons algorithm"};
     ToolHandle<IjFEXPileupAndNoise> m_jFEXPileupAndNoiseTool {this, "jFEXPileupAndNoiseTool", "LVL1::jFEXPileupAndNoise", "Tool that applies Pileup and Noise"};
     
     int getTTowerET_SG(unsigned int TTID);
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardElecAlgo.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardElecAlgo.h
new file mode 100644
index 0000000000000000000000000000000000000000..1ca8a0451ab928eb482ba0fddf33aff2af0d8ea8
--- /dev/null
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardElecAlgo.h
@@ -0,0 +1,70 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+//***************************************************************************
+//		jFEXForwardElecAlgo - Algorithm for Forward Electron Algorithm in jFEX
+//                              -------------------
+//     begin                : 16 11 2021
+//     email                : Sergi.Rodriguez@cern.ch
+//***************************************************************************
+
+#ifndef jFEXForwardElecAlgo_H
+#define jFEXForwardElecAlgo_H
+
+
+#include "AthenaBaseComps/AthAlgTool.h"
+#include "L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h"
+#include "AthenaKernel/CLASS_DEF.h"
+#include "L1CaloFEXSim/jTowerContainer.h"
+
+#include "CaloEvent/CaloCellContainer.h"
+#include "CaloIdentifier/CaloIdManager.h"
+#include "CaloIdentifier/CaloCell_SuperCell_ID.h"
+#include "AthenaBaseComps/AthAlgorithm.h"
+#include "StoreGate/StoreGateSvc.h"
+
+
+namespace LVL1 {
+
+class jFEXForwardElecAlgo : public AthAlgTool, virtual public IjFEXForwardElecAlgo {
+
+    public:
+        /** Constructors **/
+        jFEXForwardElecAlgo(const std::string& type, const std::string& name, const IInterface* parent);
+
+        /** standard Athena-Algorithm method **/
+        virtual StatusCode initialize() override;
+
+        /** Destructor **/
+        virtual ~jFEXForwardElecAlgo();
+
+        virtual StatusCode safetyTest() override;
+        virtual StatusCode reset() override;
+        virtual void setup() override;
+
+
+        virtual void setFPGAEnergy(std::unordered_map<int,std::vector<int> > et_map_EM,std::unordered_map<int,std::vector<int> > et_map_HAD)  override;
+
+    protected:
+
+    private:
+
+        SG::ReadHandleKey<LVL1::jTowerContainer> m_jFEXFwElecAlgo_jTowerContainerKey {this, "MyjTowers", "jTowerContainer", "Input container for jTowers"};
+        SG::ReadHandle<jTowerContainer> m_jTowerContainer;
+        std::unordered_map<int,std::vector<int> > m_map_Etvalues_EM;
+        std::unordered_map<int,std::vector<int> > m_map_Etvalues_HAD;
+        
+        int getTTowerET_EM(unsigned int TTID );
+        int getTTowerET_HAD(unsigned int TTID );
+        int getTTowerTotalET(unsigned int TTID );
+        int getPhi(unsigned int TTID  );
+        int getEta(unsigned int TTID  );        
+        
+
+};
+
+}//end of namespace
+
+CLASS_DEF( LVL1::jFEXForwardElecAlgo, 71453331, 1 )
+
+#endif
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardJetsAlgo.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardJetsAlgo.h
index 1dcb91aefc02297962f7acdcf5e7513a19a53301..295cd3f35a1cdbfad541e1f5c35e5b7c5c5afc75 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardJetsAlgo.h
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardJetsAlgo.h
@@ -66,6 +66,7 @@ namespace LVL1 {
         int m_jfex;
         int m_fpga;
         static constexpr float m_TT_Size_phi = M_PI/32;
+        static constexpr float m_2PI = 2*M_PI;
         
         
         //This flag determines if the TT ID which are in the first and second energy rings are stored
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/python/L1CaloFEXSimCfg.py b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/python/L1CaloFEXSimCfg.py
index feeb56db43dc0dcd23fba45c766f2552d1fcb189..b0baeff31ae37c19c200750195db34b5d74a5089 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/python/L1CaloFEXSimCfg.py
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/python/L1CaloFEXSimCfg.py
@@ -6,28 +6,31 @@ def L1CaloFEXSimCfg(flags):
     from AthenaConfiguration.ComponentFactory import CompFactory
     acc = ComponentAccumulator()
 
-    from TrigT1CaloFexPerf.L1PerfControlFlags import L1Phase1PerfFlags as simflags
     if flags.Input.isMC:
-      SCellType = "SCell"
+      sCellType = "SCell"
     else:
-      SCellType = simflags.Calo.SCellType()
+      sCellType = "EmulatedSCell"
+      from TrigT1CaloFexPerf.EmulationConfig import emulateSC_Cfg
+      acc.merge(emulateSC_Cfg(flags,SCOut=sCellType))
+
+
     eFEX = CompFactory.LVL1.eFEXDriver('eFEXDriver',
-        SCell=SCellType )
-    eFEX.eSuperCellTowerMapperTool.SCell=SCellType
-    eFEX.eFEXSysSimTool.SCell=SCellType
+        SCell=sCellType )
+    eFEX.eSuperCellTowerMapperTool = CompFactory.LVL1.eSuperCellTowerMapper('eSuperCellTowerMapper', SCell=sCellType)
+    eFEX.eFEXSysSimTool = CompFactory.LVL1.eFEXSysSim('eFEXSysSimTool', SCell=sCellType)
     acc.addEventAlgo(eFEX)
 
     # jFEX part
     jFEX = CompFactory.LVL1.jFEXDriver('jFEXDriver',
-        SCell=SCellType )
-    jFEX.jSuperCellTowerMapperTool.SCell=SCellType
-    jFEX.jFEXSysSimTool.SCell=SCellType
+        SCell=sCellType )
+    jFEX.jSuperCellTowerMapperTool = CompFactory.LVL1.jSuperCellTowerMapper('jSuperCellTowerMapper', SCell=sCellType)
+    jFEX.jFEXSysSimTool = CompFactory.LVL1.jFEXSysSim('jFEXSysSimTool', SCell=sCellType)
     acc.addEventAlgo(jFEX)
 
     gFEX = CompFactory.LVL1.gFEXDriver('gFEXDriver',
-        SCell=SCellType )
-    gFEX.gSuperCellTowerMapperTool.SCell=SCellType
-    gFEX.gFEXSysSimTool.SCell=SCellType
+        SCell=sCellType )
+    gFEX.gSuperCellTowerMapperTool = CompFactory.LVL1.gSuperCellTowerMapper('gSuperCellTowerMapper', SCell=sCellType)
+    gFEX.gFEXSysSimTool = CompFactory.LVL1.gFEXSysSim('gFEXSysSimTool', SCell=sCellType)
     acc.addEventAlgo(gFEX)
 
     return acc
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/eFEXDriverJobOptions.py b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/eFEXDriverJobOptions.py
index c3920d269da0cd7fe9006fab366035950faae383..ba0f104fe9f5816f16282cab4b07ac41f1ca4296 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/eFEXDriverJobOptions.py
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/eFEXDriverJobOptions.py
@@ -50,10 +50,13 @@ include("RecExCond/AllDet_detDescr.py")
 
 # menu with default configuration for testing
 from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper
-from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.AllConfigFlags import ConfigFlags as flags
 from TrigConfigSvc.TrigConfigSvcCfg import L1ConfigSvcCfg
-ConfigFlags.lock() 
-CAtoGlobalWrapper(L1ConfigSvcCfg,ConfigFlags)
+flags.lock()
+CAtoGlobalWrapper(L1ConfigSvcCfg,flags)
+
+from TrigConfigSvc.TrigConfigSvcCfg import generateL1Menu
+generateL1Menu(flags)
 
 svcMgr += CfgMgr.THistSvc()
 #svcMgr.THistSvc.Output += ["ISO DATAFILE='tobIso.root' OPT='RECREATE'"]
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/gFEXDriverJobOptions.py b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/gFEXDriverJobOptions.py
index 74806cbb534c8a305816aa93ce8c23befc45af01..ac6bd9f5939b1a5cf165b11780e5ddd9d367d52f 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/gFEXDriverJobOptions.py
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/gFEXDriverJobOptions.py
@@ -36,9 +36,14 @@ include("RecExCond/AllDet_detDescr.py")
 
 # menu with default configuration for testing
 from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper
-from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.AllConfigFlags import ConfigFlags as flags
 from TrigConfigSvc.TrigConfigSvcCfg import L1ConfigSvcCfg
-CAtoGlobalWrapper(L1ConfigSvcCfg,ConfigFlags)
+flags.lock()
+CAtoGlobalWrapper(L1ConfigSvcCfg,flags)
+
+from TrigConfigSvc.TrigConfigSvcCfg import generateL1Menu
+generateL1Menu(flags)
+
 
 svcMgr += CfgMgr.THistSvc()
 svcMgr.THistSvc.Output += ["ANALYSIS DATAFILE='myfile.root' OPT='RECREATE'"]
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/jFEXDriverJobOptions.py b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/jFEXDriverJobOptions.py
index 9d2c4b56a2857542cf63794897266a521dac706c..af06ea6c526340fe07e4f03c232cc67951ccd2a1 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/jFEXDriverJobOptions.py
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/share/jFEXDriverJobOptions.py
@@ -36,10 +36,13 @@ include("RecExCond/AllDet_detDescr.py")
 
 # menu with default configuration for testing
 from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper
-from AthenaConfiguration.AllConfigFlags import ConfigFlags
+from AthenaConfiguration.AllConfigFlags import ConfigFlags as flags
 from TrigConfigSvc.TrigConfigSvcCfg import L1ConfigSvcCfg
-ConfigFlags.lock() 
-CAtoGlobalWrapper(L1ConfigSvcCfg,ConfigFlags)
+flags.lock()
+CAtoGlobalWrapper(L1ConfigSvcCfg,flags)
+
+from TrigConfigSvc.TrigConfigSvcCfg import generateL1Menu
+generateL1Menu(flags)
 
 svcMgr += CfgMgr.THistSvc()
 svcMgr.THistSvc.Output += ["ANALYSIS DATAFILE='myfile_jfex.root' OPT='RECREATE'"]
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/components/FEXDriver_entries.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/components/FEXDriver_entries.cxx
index 2d053fcc4c039bab6cda775be12ac980fd071ab7..7292d02ce519c307212f995989d9c2d0b0acf971 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/components/FEXDriver_entries.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/components/FEXDriver_entries.cxx
@@ -21,6 +21,7 @@
 #include "L1CaloFEXSim/jFEXmetAlgo.h"
 #include "L1CaloFEXSim/jFEXLargeRJetAlgo.h"
 #include "L1CaloFEXSim/jFEXForwardJetsAlgo.h"
+#include "L1CaloFEXSim/jFEXForwardElecAlgo.h"
 #include "L1CaloFEXSim/jFEXNtupleWriter.h"
 #include "L1CaloFEXSim/eFEXFPGATowerIdProvider.h"
 #include "L1CaloFEXSim/eFEXSuperCellTowerIdProvider.h"
@@ -67,6 +68,7 @@ DECLARE_COMPONENT(jFEXsumETAlgo)
 DECLARE_COMPONENT(jFEXmetAlgo)
 DECLARE_COMPONENT(jFEXLargeRJetAlgo)
 DECLARE_COMPONENT(jFEXForwardJetsAlgo)
+DECLARE_COMPONENT(jFEXForwardElecAlgo)
 DECLARE_COMPONENT(jFEXNtupleWriter)
 
 DECLARE_COMPONENT(gFEXDriver)
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXFPGA.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXFPGA.cxx
index 49434855294aae1a164bc6f9b69ef095c3d6a6d4..847c3c21222449640e94c398dc102ece0459952e 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXFPGA.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXFPGA.cxx
@@ -25,6 +25,7 @@
 #include "L1CaloFEXSim/jFEXmetTOB.h"  
 #include "L1CaloFEXSim/jFEXForwardJetsAlgo.h"
 #include "L1CaloFEXSim/jFEXForwardJetsInfo.h"
+#include "L1CaloFEXSim/jFEXForwardElecAlgo.h"
 #include "L1CaloFEXSim/jFEXPileupAndNoise.h"
 #include "CaloEvent/CaloCellContainer.h"
 #include "CaloIdentifier/CaloIdManager.h"
@@ -85,6 +86,8 @@ void jFEXFPGA::reset() {
     m_sumET_tobwords.clear();
     m_Met_tobwords.clear();
     m_map_Etvalues_FPGA.clear();
+    m_map_EM_Etvalues_FPGA.clear();
+    m_map_HAD_Etvalues_FPGA.clear();
 
 }
 
@@ -324,10 +327,13 @@ StatusCode jFEXFPGA::execute(jFEXOutputCollection* inputOutputCollection) {
     inputOutputCollection->fill_smallRJet();
     inputOutputCollection->fill_largeRJet();
 
-    //**********Forward Jets***********************
+    
 
     //FCAL region algorithm
     if(m_jfexid ==0 || m_jfexid ==5) {
+        
+        
+        //**********Forward Jets***********************
         ATH_CHECK(m_jFEXForwardJetsAlgoTool->reset());
         ATH_CHECK(m_jFEXForwardJetsAlgoTool->safetyTest());
         m_jFEXForwardJetsAlgoTool->setFPGAEnergy(m_map_Etvalues_FPGA);
@@ -337,7 +343,9 @@ StatusCode jFEXFPGA::execute(jFEXOutputCollection* inputOutputCollection) {
 
         for(std::unordered_map<int, jFEXForwardJetsInfo>::iterator it = m_FCALJets.begin(); it!=(m_FCALJets.end()); ++it) {
 
+            uint32_t TTID = it->first;
             jFEXForwardJetsInfo FCALJets = it->second;
+            
 
             int iphi = FCALJets.getCentreLocalTTPhi();
             int ieta = FCALJets.getCentreLocalTTEta();
@@ -350,12 +358,13 @@ StatusCode jFEXFPGA::execute(jFEXOutputCollection* inputOutputCollection) {
             m_LRJetET = m_SRJetET + FCALJets.getSecondEnergyRingET();
             
             
+            
             uint32_t SRFCAL_Jet_tobword = formSmallRJetTOB(iphi, ieta);
-            std::vector<uint32_t> SRtob_aux{SRFCAL_Jet_tobword,(uint32_t) it->first};
+            std::vector<uint32_t> SRtob_aux{SRFCAL_Jet_tobword,TTID};
             if ( SRFCAL_Jet_tobword != 0 ) m_SRJet_tobwords.push_back(SRtob_aux);
             
             uint32_t LRFCAL_Jet_tobword = formLargeRJetTOB(iphi, ieta);
-            std::vector<uint32_t> LRtob_aux{LRFCAL_Jet_tobword,(uint32_t) it->first};
+            std::vector<uint32_t> LRtob_aux{LRFCAL_Jet_tobword,TTID};
             if ( LRFCAL_Jet_tobword != 0 ) m_LRJet_tobwords.push_back(LRtob_aux);
             
             
@@ -419,7 +428,20 @@ StatusCode jFEXFPGA::execute(jFEXOutputCollection* inputOutputCollection) {
 
         inputOutputCollection->fill_smallRJet();
         inputOutputCollection->fill_largeRJet();
-
+        
+        
+        
+        //********** Forward Electrons ***********************
+        ATH_CHECK(m_jFEXForwardElecAlgoTool->reset());
+        ATH_CHECK(m_jFEXForwardElecAlgoTool->safetyTest());
+        m_jFEXForwardElecAlgoTool->setFPGAEnergy(m_map_EM_Etvalues_FPGA,m_map_HAD_Etvalues_FPGA);
+        
+        /* This is a work in progress, PLEASE DO NOT REMOVE IT YET
+         * To enter in the algorithm, just uncomment the line below
+         * it should also enter when is a FWD FPGA so 8 times per eventloop
+        m_jFEXForwardElecAlgoTool->setup();        
+        */
+        
 
     } //end of if statement for checking if in central jfex modules
     //******************************** TAU **********************************************
@@ -570,7 +592,7 @@ std::vector <std::vector <uint32_t>> jFEXFPGA::getSmallRJetTOBs()
         tobsSort.push_back(v);
     }
     tobsSort.resize(7);
-       
+
     return tobsSort;
 
 }
@@ -651,6 +673,7 @@ uint32_t jFEXFPGA::formSmallRJetTOB(int &iphi, int &ieta) {
     const TrigConf::L1ThrExtraInfo_jJ & thr_jJ = l1Menu->thrExtraInfo().jJ();
     std::string str_jfexname = m_jfex_string[m_jfexid];
     unsigned int minEtThreshold = thr_jJ.ptMinToTopoMeV(str_jfexname)/jFEXETResolution;
+    
     if (jFEXSmallRJetTOBEt < minEtThreshold) return 0;
     else return tobWord;
 }
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardElecAlgo.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardElecAlgo.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..5545314c0a79160354a56820d45f8e559b109769
--- /dev/null
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardElecAlgo.cxx
@@ -0,0 +1,128 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+//***************************************************************************
+//		jFEXForwardElecAlgo - Algorithm for Forward Electron Algorithm in jFEX
+//                              -------------------
+//     begin                : 16 11 2021
+//     email                : Sergi.Rodriguez@cern.ch
+//***************************************************************************
+#include <iostream>
+#include <vector>
+#include <stdio.h>
+#include <math.h>
+#include "L1CaloFEXSim/jFEXForwardElecAlgo.h"
+#include "L1CaloFEXSim/jTower.h"
+#include "L1CaloFEXSim/jTowerContainer.h"
+#include "CaloEvent/CaloCellContainer.h"
+#include "CaloIdentifier/CaloIdManager.h"
+#include "CaloIdentifier/CaloCell_SuperCell_ID.h"
+#include "AthenaBaseComps/AthAlgorithm.h"
+#include "StoreGate/StoreGateSvc.h"
+
+namespace LVL1 {
+
+//Default Constructor
+LVL1::jFEXForwardElecAlgo::jFEXForwardElecAlgo(const std::string& type, const std::string& name, const IInterface* parent): AthAlgTool(type, name, parent) {
+    declareInterface<IjFEXForwardElecAlgo>(this);
+}
+
+/** Destructor */
+LVL1::jFEXForwardElecAlgo::~jFEXForwardElecAlgo() {
+}
+
+StatusCode LVL1::jFEXForwardElecAlgo::initialize() {
+    ATH_CHECK(m_jFEXFwElecAlgo_jTowerContainerKey.initialize());
+    return StatusCode::SUCCESS;
+}
+
+//calls container for TT
+StatusCode LVL1::jFEXForwardElecAlgo::safetyTest() {
+
+    if(! m_jTowerContainer.isValid()) {
+        ATH_MSG_FATAL("Could not retrieve m_jTowerContainer " << m_jFEXFwElecAlgo_jTowerContainerKey.key());
+        return StatusCode::FAILURE;
+    }
+
+    return StatusCode::SUCCESS;
+}
+
+StatusCode LVL1::jFEXForwardElecAlgo::reset() {
+    
+    m_jTowerContainer = SG::ReadHandle<jTowerContainer>(m_jFEXFwElecAlgo_jTowerContainerKey);
+    return StatusCode::SUCCESS;
+}
+
+void LVL1::jFEXForwardElecAlgo::setup() {
+    
+    // this is just to setup the algorithm, you will need more functions (you can take a look at jTau or jJ algorithms) 
+    ATH_MSG_DEBUG("---------------- jFEXForwardElecAlgo::setup ----------------");
+
+}
+
+
+
+
+//Gets the EM Et for the TT.
+int LVL1::jFEXForwardElecAlgo::getTTowerET_EM(unsigned int TTID ) {
+    if(TTID == 0) {
+        return 0;
+    }
+
+    if(m_map_Etvalues_EM.find(TTID) != m_map_Etvalues_EM.end()) {
+        return m_map_Etvalues_EM[TTID][0];
+    }
+
+    //we shouldn't arrive here
+    return 0;
+
+}
+
+//Gets the HAD Et for the TT.
+int LVL1::jFEXForwardElecAlgo::getTTowerET_HAD(unsigned int TTID ) {
+    if(TTID == 0) {
+        return 0;
+    }
+
+    if(m_map_Etvalues_HAD.find(TTID) != m_map_Etvalues_HAD.end()) {
+        return m_map_Etvalues_HAD[TTID][0];
+    }
+
+    //we shouldn't arrive here
+    return 0;
+
+}
+
+//Gets the Total Et for the TT.
+int LVL1::jFEXForwardElecAlgo::getTTowerTotalET(unsigned int TTID ) {
+    return getTTowerET_HAD(TTID) + getTTowerET_EM(TTID);
+
+}
+
+//Gets Phi of the TT
+int LVL1::jFEXForwardElecAlgo::getPhi(unsigned int TTID ) {
+    if(TTID == 0) {
+        return 0;
+    }
+
+    const LVL1::jTower * tmpTower = m_jTowerContainer->findTower(TTID);
+    return tmpTower->centrePhi();
+}
+//Gets Eta of the TT
+int LVL1::jFEXForwardElecAlgo::getEta(unsigned int TTID ) {
+    if(TTID == 0) {
+        return 0;
+    }
+
+    const LVL1::jTower * tmpTower = m_jTowerContainer->findTower(TTID);
+    return tmpTower->centreEta();
+}
+
+void LVL1::jFEXForwardElecAlgo::setFPGAEnergy(std::unordered_map<int,std::vector<int> > et_map_EM,std::unordered_map<int,std::vector<int> > et_map_HAD) {
+    m_map_Etvalues_EM=et_map_EM;
+    m_map_Etvalues_HAD=et_map_HAD;
+}
+
+
+
+}// end of namespace LVL1
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardJetsAlgo.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardJetsAlgo.cxx
index 4c37864a92c8457ece51732e2dacab3727595270..f43afa7f0501edca2a24b378825509d62019f054 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardJetsAlgo.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardJetsAlgo.cxx
@@ -64,6 +64,7 @@ void LVL1::jFEXForwardJetsAlgo::setup(int inputTable[FEXAlgoSpaceDefs::jFEX_algo
     std::copy(&inputTable[0][0], &inputTable[0][0] + (FEXAlgoSpaceDefs::jFEX_algoSpace_height*FEXAlgoSpaceDefs::jFEX_wide_algoSpace_width), &m_jFEXalgoTowerID[0][0]);
     m_jfex=jfex;
     m_fpga=fpga;
+    
 }
 
 //Gets geometric global centre Phi coord of the TT
@@ -194,16 +195,18 @@ std::unordered_map<int, jFEXForwardJetsInfo> LVL1::jFEXForwardJetsAlgo::FcalJets
                         float TT_eta = globalEta(auxTTID);
                         float TT_phi = globalPhi(auxTTID);
                         
+                        if(auxTTID == myTTIDKey || auxTTID == 0) continue;
+                        
                         //This corrects the overlap of FPGA 0 with FPGA 3 and viceversa
                         if(m_fpga==0 || m_fpga==3) { 
                             if(m_fpga==0) {
                                 if(TT_phi>M_PI){
-                                   TT_phi = TT_phi-6.4; 
+                                   TT_phi = TT_phi-m_2PI; 
                                 }
                             }
                             else {
                                 if(TT_phi<M_PI){
-                                   TT_phi = TT_phi+6.4; 
+                                   TT_phi = TT_phi+m_2PI; 
                                 }
                             }
                         }
@@ -255,7 +258,7 @@ std::unordered_map<int, jFEXForwardJetsInfo> LVL1::jFEXForwardJetsAlgo::isSeedLo
     std::unordered_map<int, jFEXForwardJetsInfo> localMaximaCandidates = FcalJetsTowerIDLists();
     std::unordered_map<int, jFEXForwardJetsInfo> localMaximaList ;
 
-    size_t isLocalMaxima = 0;
+    uint isLocalMaxima = 0;
     
     for (std::pair<int, jFEXForwardJetsInfo> element : localMaximaCandidates){
         
@@ -269,7 +272,6 @@ std::unordered_map<int, jFEXForwardJetsInfo> LVL1::jFEXForwardJetsAlgo::isSeedLo
         int centre_energy = myFCALJetInfoClass.getSeedET();
 
         const std::vector<int> TTinSW = myFCALJetInfoClass.getTTinSearchWindow();
-        const std::vector<int> v = myFCALJetInfoClass.getTTinSeed();  
         
         for (const int iTTinSW : TTinSW) {
             if(iTTinSW == myTTKey) continue;
@@ -301,12 +303,12 @@ std::unordered_map<int, jFEXForwardJetsInfo> LVL1::jFEXForwardJetsAlgo::isSeedLo
                         if(m_fpga==0 || m_fpga==3) { 
                             if(m_fpga==0) {
                                 if(TT_phi>M_PI){
-                                   TT_phi = TT_phi-6.4; 
+                                   TT_phi = TT_phi-m_2PI; 
                                 }
                             }
                             else {
                                 if(TT_phi<M_PI){
-                                   TT_phi = TT_phi+6.4; 
+                                   TT_phi = TT_phi+m_2PI; 
                                 }
                             }
                         }
@@ -369,12 +371,12 @@ std::unordered_map<int, jFEXForwardJetsInfo> LVL1::jFEXForwardJetsAlgo::calculat
                 if(m_fpga==0 || m_fpga==3) {
                     if(m_fpga==0) {
                         if(TT_phi>M_PI) {
-                            TT_phi = TT_phi-6.4;
+                            TT_phi = TT_phi-m_2PI;
                         }
                     }
                     else {
                         if(TT_phi<M_PI) {
-                            TT_phi = TT_phi+6.4;
+                            TT_phi = TT_phi+m_2PI;
                         }
                     }
                 }
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXSysSim.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXSysSim.cxx
index e1c92bcb693d81ef80983afeb98ef042721e173c..373cf7f49077ad8a63d45c54b4c386d6f14f388b 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXSysSim.cxx
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXSysSim.cxx
@@ -110,6 +110,8 @@ namespace LVL1 {
     m_allSmallRJetTobs.clear();
     m_allLargeRJetTobs.clear();
     m_alltauTobs.clear();
+    m_allMetTobs.clear();
+    m_allsumEtTobs.clear();
     // We need to split the towers into 6 blocks in eta and 4 blocks in phi.
 
     // boundaries in eta: -2.5, -1.6, -0.8, 0.0, 0.8, 1.6, 2.5
@@ -866,11 +868,11 @@ namespace LVL1 {
         uint8_t fpgaNum =0;
         for(auto &FPGA_tob : MODULE_tobs) {
             for(auto &tob: FPGA_tob) {
-                float_t eta = 0;
-                float_t phi = 0;
+                float_t eta = -99;
+                float_t phi = -99;
                 if(tob.at(1) != 0){
                     eta = (this_jTowerContainer->findTower(tob.at(1)))->centreEta();
-                    phi = (this_jTowerContainer->findTower(tob.at(1)))->centrePhi();                   
+                    phi = (this_jTowerContainer->findTower(tob.at(1)))->centrephi_toPI();                   
                 }
                 
                 ATH_CHECK(fillSRJetEDM(jfex, fpgaNum,tob.at(0), eta, phi, jSRJetContainer));
@@ -894,11 +896,11 @@ namespace LVL1 {
         uint8_t fpgaNum =0;
         for(auto &FPGA_tob : MODULE_tobs) {
             for(auto&tob: FPGA_tob) {
-                float_t eta = 0;
-                float_t phi = 0;
+                float_t eta = -99;
+                float_t phi = -99;
                 if(tob.at(1) != 0){
                     eta = (this_jTowerContainer->findTower(tob.at(1)))->centreEta();
-                    phi = (this_jTowerContainer->findTower(tob.at(1)))->centrePhi();                   
+                    phi = (this_jTowerContainer->findTower(tob.at(1)))->centrephi_toPI();                   
                 }
 
                 ATH_CHECK(fillLRJetEDM(jfex,fpgaNum, tob.at(0), eta, phi, jLRJetContainer));
@@ -921,11 +923,11 @@ namespace LVL1 {
         uint8_t fpgaNum =0;
         for(auto &FPGA_tob : MODULE_tobs) {
             for(auto &tob : FPGA_tob) {
-                float_t eta = 0;
-                float_t phi = 0;
+                float_t eta = -99;
+                float_t phi = -99;
                 if(tob.at(1) != 0){
                     eta = (this_jTowerContainer->findTower(tob.at(1)))->centreEta();
-                    phi = (this_jTowerContainer->findTower(tob.at(1)))->centrePhi();                   
+                    phi = (this_jTowerContainer->findTower(tob.at(1)))->centrephi_toPI();                   
                 }
                 
                 ATH_CHECK(fillTauEDM(jfex,fpgaNum, tob.at(0), eta, phi, jTauContainer));
@@ -964,7 +966,7 @@ namespace LVL1 {
     auto jMETContainer = std::make_unique<xAOD::jFexMETRoIContainer> ();
     std::unique_ptr< xAOD::jFexMETRoIAuxContainer > jMETAuxContainer = std::make_unique<xAOD::jFexMETRoIAuxContainer> ();
     jMETContainer->setStore(jMETAuxContainer.get());    
-    
+
     for( auto const& [jfex, MODULE_tobs] : m_allMetTobs ) {
         uint8_t fpgaNum =0;
         for(auto &FPGA_tob : MODULE_tobs) {
@@ -997,9 +999,10 @@ namespace LVL1 {
     xAOD::jFexSRJetRoI* my_EDM = new xAOD::jFexSRJetRoI();
     jContainer->push_back( my_EDM );
 
-    my_EDM->initialize(jFexNum, fpgaNumber, tobWord);
+    my_EDM->initialize(jFexNum, fpgaNumber, tobWord, eta, phi);
 
     ATH_MSG_DEBUG(" setting SRJet jFEX Number:  " << +my_EDM->jFexNumber() << " et: " << my_EDM->et() << " eta: " << my_EDM->eta() <<" / "<< eta <<  " phi: " << my_EDM->phi()<<" / "<< phi  );
+
     return StatusCode::SUCCESS;
 
   }
@@ -1009,10 +1012,11 @@ namespace LVL1 {
 
     xAOD::jFexTauRoI* my_EDM = new xAOD::jFexTauRoI();
     jContainer->push_back( my_EDM );
-    
-    my_EDM->initialize(jFexNum , fpgaNumber, tobWord);
-    
+
+    my_EDM->initialize(jFexNum, fpgaNumber, tobWord, eta, phi);
+
     ATH_MSG_DEBUG(" setting tau jFEX Number:  " << +my_EDM->jFexNumber() << " et: " << my_EDM->et() << " eta: " << my_EDM->eta() <<" / "<< eta <<  " phi: " << my_EDM->phi()<<" / "<< phi  );
+
     return StatusCode::SUCCESS;
 
   }
@@ -1023,9 +1027,10 @@ namespace LVL1 {
     xAOD::jFexLRJetRoI* my_EDM = new xAOD::jFexLRJetRoI();
     jContainer->push_back( my_EDM );
 
-    my_EDM->initialize(jFexNum ,fpgaNumber, tobWord);
+    my_EDM->initialize(jFexNum, fpgaNumber, tobWord, eta, phi);
     
     ATH_MSG_DEBUG(" setting LRJet jFEX Number:  " << +my_EDM->jFexNumber() << " et: " << my_EDM->et() << " eta: " << my_EDM->eta() <<" / "<< eta <<  " phi: " << my_EDM->phi()<<" / "<< phi  );
+
     return StatusCode::SUCCESS;
 
   }
diff --git a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h
new file mode 100644
index 0000000000000000000000000000000000000000..36d7546143d662bcbb63e5b3c67e40be600f341d
--- /dev/null
+++ b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h
@@ -0,0 +1,43 @@
+/*
+ Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+//***************************************************************************
+//             Interface for jFEXForwardElecAlgo - Algorithm for Forward Electron Algorithm in jFEX
+//                              -------------------
+//     begin                : 16 11 2021
+//     email                : Sergi.Rodriguez@cern.ch
+//***************************************************************************
+
+#ifndef IjFEXForwardElecAlgo_H
+#define IjFEXForwardElecAlgo_H
+
+#include "GaudiKernel/IAlgTool.h"
+#include "L1CaloFEXSim/jTowerContainer.h"
+
+
+namespace LVL1 {
+
+static const InterfaceID IID_IjFEXForwardElecAlgo("LVL1::IjFEXForwardElecAlgo",1, 0);
+
+class IjFEXForwardElecAlgo : virtual public IAlgTool {
+    public:
+        static const InterfaceID& interfaceID ( ) ;
+        virtual StatusCode safetyTest() = 0;
+        virtual StatusCode reset() =0;
+        virtual void setup() = 0;
+
+        virtual void setFPGAEnergy(std::unordered_map<int,std::vector<int> >,std::unordered_map<int,std::vector<int> > )  =0;
+
+
+
+    private:
+
+};
+inline const InterfaceID& LVL1::IjFEXForwardElecAlgo::interfaceID()
+{
+    return IID_IjFEXForwardElecAlgo;
+}
+
+}
+#endif
+
diff --git a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXtauAlgo.h b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXtauAlgo.h
index 293c4bf6f8ea281e35128f61f4b7c0938805ba5c..af19a639b467e7c56a89860f659894d8a69106e2 100644
--- a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXtauAlgo.h
+++ b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXtauAlgo.h
@@ -24,7 +24,6 @@ class IjFEXtauAlgo : virtual public IAlgTool {
         static const InterfaceID& interfaceID ( ) ;
         virtual StatusCode safetyTest() = 0;
         virtual void setup(int TTwindow[5][5], int seed[3][3]) = 0;
-        //virtual void setupCluster(int inputTable[4][5]) =0;
         virtual bool isSeedLocalMaxima() = 0;
         virtual void buildSeeds() = 0;
         virtual void setFirstEtRing(int First_ETring[]) =0;
diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/jLJetMultiplicity.h b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/jLJetMultiplicity.h
new file mode 100644
index 0000000000000000000000000000000000000000..e8ea49ce1b25a2025e4d2c1d8a0c9c1371f962f9
--- /dev/null
+++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/jLJetMultiplicity.h
@@ -0,0 +1,41 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef __TopoCore__jLJetMultiplicity__
+#define __TopoCore__jLJetMultiplicity__
+
+#include <iostream>
+#include <vector>
+#include "L1TopoInterfaces/CountingAlg.h"
+#include "L1TopoEvent/TOBArray.h"
+
+#include "TrigConfData/L1Threshold.h"
+
+class TH2;
+
+namespace TCS { 
+  
+   class jLJetMultiplicity : public CountingAlg {
+   public:
+      jLJetMultiplicity(const std::string & name);
+      virtual ~jLJetMultiplicity();
+
+      virtual StatusCode initialize() override;
+
+      virtual StatusCode processBitCorrect( const TCS::InputTOBArray & input,
+					    Count & count ) override final ;
+
+      virtual StatusCode process( const TCS::InputTOBArray & input,
+				  Count & count ) override final ;
+
+
+
+   private:
+     
+      TrigConf::L1Threshold const * m_threshold{nullptr};
+   };
+
+}
+
+#endif
diff --git a/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/jLJetMultiplicity.cxx b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/jLJetMultiplicity.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..b5c433c6bcdf85466e538c0afed50d889df8eec9
--- /dev/null
+++ b/Trigger/TrigT1/L1Topo/L1TopoAlgorithms/Root/jLJetMultiplicity.cxx
@@ -0,0 +1,101 @@
+/*
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+*/
+/*********************************
+ * jLJetMultiplicity
+ *
+ * @brief algorithm that computes the multiplicity for a specified list and ET threshold
+ * line 1: 0 or 1, line 1 and 2 : 2 or more, uses 2 bits
+ *
+ * @param NumberLeading largeR jets, MinET
+**********************************/
+
+#include <cmath>
+
+#include "L1TopoAlgorithms/jLJetMultiplicity.h"
+#include "L1TopoCommon/Exception.h"
+#include "L1TopoInterfaces/Count.h"
+
+#include "L1TopoEvent/TOBArray.h"
+#include "L1TopoEvent/jLargeRJetTOBArray.h"
+#include "L1TopoEvent/GenericTOB.h"
+
+REGISTER_ALG_TCS(jLJetMultiplicity)
+
+using namespace std;
+
+
+TCS::jLJetMultiplicity::jLJetMultiplicity(const std::string & name) : CountingAlg(name)
+{
+   
+   
+   setNumberOutputBits(12); //To-Do: Make this flexible to addapt to the menu. Each counting requires more than one bit
+
+}
+
+TCS::jLJetMultiplicity::~jLJetMultiplicity(){}
+
+
+TCS::StatusCode
+TCS::jLJetMultiplicity::initialize() { 
+
+  m_threshold = getThreshold();
+
+  // book histograms
+  std::string hname_accept = "hjLJetMultiplicity_accept_"+m_threshold->name();
+  bookHist(m_histAccept, hname_accept, "eta vs pT", 150, -100, 100, 30, 0., 2000.);
+
+  hname_accept = "hjLJetMultiplicity_accept_counts_"+m_threshold->name();
+  bookHist(m_histAccept, hname_accept, "Counts", 15, 0., 10. );
+
+  return StatusCode::SUCCESS;
+     
+}
+
+
+TCS::StatusCode
+TCS::jLJetMultiplicity::processBitCorrect( const TCS::InputTOBArray & input,
+					 Count & count)
+
+{
+   return process(input, count);
+}
+
+TCS::StatusCode
+TCS::jLJetMultiplicity::process( const TCS::InputTOBArray & input,
+			       Count & count )
+{
+
+  // Grab the threshold and cast it into the right type
+  auto jLJThr = dynamic_cast<const TrigConf::L1Threshold_jLJ &>(*m_threshold);
+
+  // Grab inputs
+  const jLargeRJetTOBArray & jLargeRjets = dynamic_cast<const jLargeRJetTOBArray&>(input);
+
+  int counting = 0; 
+  
+  // loop over input TOBs
+  for(jLargeRJetTOBArray::const_iterator jLargeRjet = jLargeRjets.begin();
+      jLargeRjet != jLargeRjets.end();
+      ++jLargeRjet ) {
+    
+    const GenericTOB gtob(**jLargeRjet);
+
+    // Dividing by 4 standing for converting eta from 0.025 to 0.1 granularity as it is defined in the menu as 0.1 gran.
+    bool passed = gtob.Et() >= jLJThr.thrValueCounts(gtob.eta()/4);
+
+    if (passed) {
+      counting++; 
+      fillHist2D( m_histAccept[0], gtob.eta(), gtob.EtDouble() );
+    }
+
+  }
+
+  fillHist1D( m_histAccept[1], counting);
+  
+  // Pass counting to TCS::Count object - output bits are composed there
+  count.setSizeCount(counting);
+  
+  return TCS::StatusCode::SUCCESS;
+
+}
diff --git a/Trigger/TrigT1/L1Topo/L1TopoCommon/Root/Types.cxx b/Trigger/TrigT1/L1Topo/L1TopoCommon/Root/Types.cxx
index 66193fcb95b60d28b32979cd0ff13ced8e19f2ee..d694c91e7635eb8c6610fb99cc6880183d585d5f 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoCommon/Root/Types.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoCommon/Root/Types.cxx
@@ -61,7 +61,7 @@ TCS::inputType(const std::string& input) {
    if ( input == "gJ" || input == "gJetTobArray" || input == "gJetTobs" )
       return TCS::GJET;
 
-   if ( input == "jLargeRJet" || input == "jLargeRJetTobArray" || input == "jLargeRJetTobs" )
+   if ( input == "jLargeRJet" || input == "jLargeRJetTobArray" || input == "jLargeRJetTobs" || input ==  "jLJet" || input == "jLJ")
       return TCS::JLARGERJET;
 
    if ( input == "gLargeRJet" || input == "gLargeRJetTobArray" || input == "gLargeRJetTobs" )
diff --git a/Trigger/TrigT1/L1Topo/L1TopoCoreSim/Root/TopoSteeringStructure.cxx b/Trigger/TrigT1/L1Topo/L1TopoCoreSim/Root/TopoSteeringStructure.cxx
index 792f564225cff444894308fba413d7d65c5ca47c..d0be65e05b44c865c0e8d96671f238fc54b1b98e 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoCoreSim/Root/TopoSteeringStructure.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoCoreSim/Root/TopoSteeringStructure.cxx
@@ -140,7 +140,7 @@ TCS::TopoSteeringStructure::setupFromMenu(const TrigConf::L1Menu& l1menu, bool l
 				  "jTauMultiplicity",
 				  "cTauMultiplicity",
 				  "jJetMultiplicity",
-				  "jLargeRJetMultiplicity",
+				  "jLJetMultiplicity",
 				  "gJetMultiplicity",
 				  "gLargeRJetMultiplicity",
 				  "EnergyThreshold" };
@@ -243,8 +243,8 @@ TCS::TopoSteeringStructure::setupFromMenu(const TrigConf::L1Menu& l1menu, bool l
 	      string *foundAlgo = std::find(std::begin(AvailableMultAlgs), std::end(AvailableMultAlgs), algo_klass);
 	      if (foundAlgo == std::end(AvailableMultAlgs)) cout << "TopoSteeringStructure: No L1Topo algorithm matching the configured multiplicity algorithm in the menu!" << endl;
 
-		  if ( (algo_klass != "eEmMultiplicity") && (algo_klass != "eTauMultiplicity") && (algo_klass != "jJetMultiplicity") ) continue; // Only available multiplicity algorithms so far
-            
+	      if ( (algo_klass != "eEmMultiplicity") && (algo_klass != "eTauMultiplicity") && (algo_klass != "jJetMultiplicity") && (algo_klass != "jLJetMultiplicity") ) continue; // Only available multiplicity algorithms so far
+
 	      auto it = find(storedConn.begin(), storedConn.end(), algo.name());
 	      if (it == storedConn.end()) { // Algorithm/Connector does not exist: create and store it
 
@@ -375,7 +375,7 @@ TCS::TopoSteeringStructure::setupFromMenu(const TrigConf::L1Menu& l1menu, bool l
 
       auto & l1algo = l1menu.algorithm(multAlgo, "MULTTOPO");
       
-      if ( (l1algo.klass() != "eEmMultiplicity") && (l1algo.klass() != "eEmVarMultiplicity") && (l1algo.klass() != "eTauMultiplicity") && (l1algo.klass() != "jJetMultiplicity") ) continue; // Only available multiplicities for now
+      if ( (l1algo.klass() != "eEmMultiplicity") && (l1algo.klass() != "eEmVarMultiplicity") && (l1algo.klass() != "eTauMultiplicity") && (l1algo.klass() != "jJetMultiplicity") && (l1algo.klass() != "jLJetMultiplicity") ) continue; // Only available multiplicities for now
 
       ConfigurableAlg * alg = AlgFactory::instance().algorithm(l1algo.name());
 
diff --git a/Trigger/TrigT1/L1Topo/L1TopoEvent/L1TopoEvent/GenericTOB.h b/Trigger/TrigT1/L1Topo/L1TopoEvent/L1TopoEvent/GenericTOB.h
index 50a054b0d9dffa8e0571ca414115a4d028e52812..fc05d22fec80b8e663676160a1259495979ef6c2 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoEvent/L1TopoEvent/GenericTOB.h
+++ b/Trigger/TrigT1/L1Topo/L1TopoEvent/L1TopoEvent/GenericTOB.h
@@ -123,6 +123,9 @@ namespace TCS {
       double etaDouble() const { return m_etaDouble; }
       double phiDouble() const { return m_phiDouble; }
 
+      //jtau isolation 
+      unsigned int jtauiso() const { return m_jtauiso; }
+
       virtual void print(std::ostream &o) const;
 
       void setTobType(inputTOBType_t tobType) { m_tobType = tobType; }
@@ -154,6 +157,7 @@ namespace TCS {
       unsigned int m_rhad {0};
       unsigned int m_wstot {0};
 
+      unsigned int m_jtauiso {0};
       unsigned int m_fcore {0};
       
       inputTOBType_t   m_tobType { NONE };
diff --git a/Trigger/TrigT1/L1Topo/L1TopoEvent/Root/GenericTOB.cxx b/Trigger/TrigT1/L1Topo/L1TopoEvent/Root/GenericTOB.cxx
index 14fb32cec16e5fb8b22be8cc2c12707d2a22da3c..784a938ab4bbde3901412af5f908fcf000087780 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoEvent/Root/GenericTOB.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoEvent/Root/GenericTOB.cxx
@@ -48,6 +48,7 @@ TCS::GenericTOB::GenericTOB(const jTauTOB & tau) :
    , m_EtDouble(tau.EtDouble())
    , m_etaDouble(tau.etaDouble())
    , m_phiDouble(tau.phiDouble())
+   , m_jtauiso(tau.isolation())
    , m_tobType(JET)
 {}
 
diff --git a/Trigger/TrigT1/L1Topo/L1TopoEvent/Root/jTauTOB.cxx b/Trigger/TrigT1/L1Topo/L1TopoEvent/Root/jTauTOB.cxx
index fd256c41426a2c878819b6c10ba401d2b754722c..66e6ac55b5eb0833ef2db5e9b92a5d9143f38c63 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoEvent/Root/jTauTOB.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoEvent/Root/jTauTOB.cxx
@@ -39,5 +39,5 @@ TCS::jTauTOB::clearHeap() {
 
 void
 TCS::jTauTOB::print(std::ostream &o) const {
-   o << "jTau energy: " << Et() << ", eta: " << eta() << ", phi: " << phi();
+   o << "jTau energy: " << Et() << ", eta: " << eta() << ", phi: " << phi() << ", isolation: " << isolation() ;
 }
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/python/L1TopoSimulationConfig.py b/Trigger/TrigT1/L1Topo/L1TopoSimulation/python/L1TopoSimulationConfig.py
index c0f46c9d8f960c2b7b35fcce3a7b1975502c8378..6ebd56cc0f653cef7363dddb8fe9db326e560974 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/python/L1TopoSimulationConfig.py
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/python/L1TopoSimulationConfig.py
@@ -82,6 +82,8 @@ def L1TopoSimulationOldStyleCfg(flags, isLegacy):
         topoSimSeq.EMTAUInputProvider = 'LVL1::EMTauInputProviderFEX/EMTauInputProviderFEX'
         # Need further test from inputs.
         topoSimSeq.JetInputProvider = 'LVL1::JetInputProviderFEX/JetInputProviderFEX'
+        # Need further test from inputs.
+        topoSimSeq.EnergyInputProvider = 'LVL1::EnergyInputProviderFEX/EnergyInputProviderFEX'
 
     # Muon inputs only for phase-1 Topo
     if isLegacy:
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/EnergyInputProviderFEX.cxx b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/EnergyInputProviderFEX.cxx
index c020c346d69ed0fed175baadcc522741d22f4eeb..787b80e75c2c9fbf6bd96d162fe1ec7bd25720e3 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/EnergyInputProviderFEX.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/EnergyInputProviderFEX.cxx
@@ -10,12 +10,10 @@
 #include "TrigT1CaloEvent/EnergyRoI_ClassDEF.h"
 #include "TrigT1Interfaces/TrigT1CaloDefs.h"
 
-#include "TrigT1CaloEvent/EnergyTopoData.h"
-
-#include "L1TopoEvent/ClusterTOB.h"
+#include "L1TopoEvent/MetTOB.h"
 #include "L1TopoEvent/TopoInputEvent.h"
 
-#include "GaudiKernel/PhysicalConstants.h"
+#include <unistd.h>
 
 using namespace std;
 using namespace LVL1;
@@ -23,11 +21,9 @@ using namespace LVL1;
 EnergyInputProviderFEX::EnergyInputProviderFEX(const std::string& type, const std::string& name, 
                                          const IInterface* parent) :
    base_class(type, name, parent),
-   m_histSvc("THistSvc", name),
-   m_gFEXMETLoc ("gXERHOPerf")
+   m_histSvc("THistSvc", name)
 {
    declareInterface<LVL1::IInputTOBConverter>( this );
-   declareProperty( "gFEXMETInput", m_gFEXMETLoc, "StoreGate location of default gFEX MET input" );
 }
 
 EnergyInputProviderFEX::~EnergyInputProviderFEX()
@@ -36,14 +32,21 @@ EnergyInputProviderFEX::~EnergyInputProviderFEX()
 StatusCode
 EnergyInputProviderFEX::initialize() {
 
-   CHECK(m_histSvc.retrieve());
-
-   ServiceHandle<IIncidentSvc> incidentSvc("IncidentSvc", "EnergyInputProviderFEX");
-   CHECK(incidentSvc.retrieve());
-   incidentSvc->addListener(this,"BeginRun", 100);
-   incidentSvc.release().ignore();
+  CHECK(m_histSvc.retrieve());
+  
+  ServiceHandle<IIncidentSvc> incidentSvc("IncidentSvc", "EnergyInputProviderFEX");
+  CHECK(incidentSvc.retrieve());
+  incidentSvc->addListener(this,"BeginRun", 100);
+  incidentSvc.release().ignore();
   
-   return StatusCode::SUCCESS;
+  auto is_jMet_EDMvalid = m_jMet_EDMKey.initialize();
+  
+  //Temporarily check EDM status by hand to avoid the crash!                                                                                                 
+  if (is_jMet_EDMvalid != StatusCode::SUCCESS) {
+    ATH_MSG_WARNING("No EDM found for jFEX Met..");
+  }
+
+  return StatusCode::SUCCESS;
 }
 
 
@@ -55,19 +58,19 @@ EnergyInputProviderFEX::handle(const Incident& incident) {
    string histPath = "/EXPERT/" + name() + "/";
    replace( histPath.begin(), histPath.end(), '.', '/'); 
 
-   auto hPt = std::make_unique<TH1I>( "MET", "Missing ET TOB", 200, 0, 2000);
-   hPt->SetXTitle("p_{T}");
+   auto h_met_Pt = std::make_unique<TH1I>( "MET", "Missing ET TOB", 200, 0, 2000);
+   h_met_Pt->SetXTitle("p_{T}");
 
-   auto hPhi = std::make_unique<TH1I>( "METPhi", "MET TOB Phi", 32, -3.2, 3.2);
-   hPhi->SetXTitle("#phi");
+   auto h_met_Phi = std::make_unique<TH1I>( "METPhi", "MET TOB Phi", 32, -3.2, 3.2);
+   h_met_Phi->SetXTitle("#phi");
 
-   if (m_histSvc->regShared( histPath + "MET", std::move(hPt), m_hPt ).isSuccess()){
+   if (m_histSvc->regShared( histPath + "MET", std::move(h_met_Pt), m_h_met_Pt ).isSuccess()){
      ATH_MSG_DEBUG("MET histogram has been registered successfully for EnergyProvider.");
    }
    else{
      ATH_MSG_WARNING("Could not register MET histogram for EnergyProvider");
    }
-   if (m_histSvc->regShared( histPath + "METPhi", std::move(hPhi), m_hPhi ).isSuccess()){
+   if (m_histSvc->regShared( histPath + "METPhi", std::move(h_met_Phi), m_h_met_Phi ).isSuccess()){
      ATH_MSG_DEBUG("METPhi histogram has been registered successfully for EnergyProvider.");
    }
    else{
@@ -80,28 +83,43 @@ EnergyInputProviderFEX::handle(const Incident& incident) {
 StatusCode
 EnergyInputProviderFEX::fillTopoInputEvent(TCS::TopoInputEvent& inputEvent) const {
 
-  const xAOD::EnergySumRoI* gFEXMET = nullptr; // MET from gFEX (will make it an array later)
-  if(  evtStore()->contains< xAOD::EnergySumRoI >(m_gFEXMETLoc)  ) {
-    CHECK ( evtStore()->retrieve( gFEXMET, m_gFEXMETLoc ) );
-    ATH_MSG_DEBUG( "Retrieved gFEX MET '" << m_gFEXMETLoc << "'");
-  }
-  else {
-    ATH_MSG_WARNING("No xAOD::EnergySumRoI with SG key '" << m_gFEXMETLoc.toString() << "' found in the event. No JET input for the L1Topo simulation.");
-    return StatusCode::RECOVERABLE;
+  SG::ReadHandle<xAOD::jFexMETRoIContainer> jMet_EDM(m_jMet_EDMKey);
+  //Temporarily check EDM status by hand to avoid the crash!                                                                                                  
+  if(!jMet_EDM.isValid()){
+    ATH_MSG_WARNING("Could not retrieve EDM Container " << m_jMet_EDMKey.key() << ". No jFEX MET input for L1Topo");
+     return StatusCode::SUCCESS;
   }
 
-  ATH_MSG_DEBUG( "EnergyTopoData" << dec
-		 << ": Ex = "   << gFEXMET->energyX()
-		 << ", Ey = "   << gFEXMET->energyY()
-		 << ", Et = "   << gFEXMET->energyT()
-		 );
+  // The jFEX MET container has 12 elements, 2 TOBs per jFEX module, so a total of 12. 
+  // According to the documentation https://gitlab.cern.ch/l1calo-run3-simulation/documentation/Run3L1CaloOfflineSWReqs/-/blob/master/l1caloreqs.pdf
+  // we want to do a vector sum of Etx/y for the FPGA 0 and FPGA 3.  
+  int global_et_x =0;
+  int global_et_y =0;
+
+  for(const auto it : *jMet_EDM){
+    const xAOD::jFexMETRoI *jFEXMet = it;
+    //Get the MET components in 200 MeV units
+    int et_x = jFEXMet->getE_x();
+    int et_y = jFEXMet->getE_y();
+    int jFexNumber = jFEXMet->getjFexNumber();
+    int fpgaNumber = jFEXMet->getfpgaNumber();  
+
+    if( fpgaNumber==0 || fpgaNumber==3)
+      {
+	global_et_x+=et_x;
+	global_et_y+=et_y;
+      }
+
+    ATH_MSG_DEBUG("jFEX Met Ex = " << et_x << ", Ey = " << et_y <<", jFexNumber="<<jFexNumber<<", fpgaNumber="<<fpgaNumber);
+  }
 
-  //doing this differently compared to what mentioned in the twiki https://twiki.cern.ch/twiki/bin/viewauth/Atlas/L1CaloUpgradeSimulation
-  TCS::MetTOB met( -(gFEXMET->energyX()/Gaudi::Units::GeV), -(gFEXMET->energyY()/Gaudi::Units::GeV), gFEXMET->energyT()/Gaudi::Units::GeV );
+  ATH_MSG_DEBUG("Global MET candidate Ex = " << global_et_x << ", Ey = " <<global_et_y);
+  unsigned int et =  std::sqrt( global_et_x*global_et_x + global_et_y*global_et_y );
+  TCS::MetTOB met( -(global_et_x), -(global_et_y), et );
   inputEvent.setMET( met );
-  m_hPt->Fill(met.Et());
-  m_hPhi->Fill( atan2(met.Ey(),met.Ex()) );
-
+  m_h_met_Pt->Fill(met.Et());
+  m_h_met_Phi->Fill( atan2(met.Ey(),met.Ex()) );
+    
   /* not checking overflow currently to be enabled in release 22. 
      const bool has_overflow = (topoData->ExOverflow() or
      topoData->EyOverflow() or
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/EnergyInputProviderFEX.h b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/EnergyInputProviderFEX.h
index c50010f19b997ed237ea0caaa991f4b1b25dbd8f..419a390fb0173a244a82415097c390cd8146d48c 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/EnergyInputProviderFEX.h
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/EnergyInputProviderFEX.h
@@ -9,7 +9,9 @@
 #include "L1TopoSimulation/IInputTOBConverter.h"
 #include "GaudiKernel/IIncidentListener.h"
 #include "GaudiKernel/LockedHandle.h"
-#include "xAODTrigger/EnergySumRoI.h"
+
+//EM/Tau EDMs
+#include "xAODTrigger/jFexMETRoIContainer.h"
 
 #include "TH1.h"
 
@@ -34,10 +36,10 @@ namespace LVL1 {
 
       ServiceHandle<ITHistSvc> m_histSvc;
 
-      StringProperty m_gFEXMETLoc;    //!<  EnergyROI SG key
+      SG::ReadHandleKey<xAOD::jFexMETRoIContainer> m_jMet_EDMKey {this, "L1_jFexMETRoI", "L1_jFexMETRoI", "jFEX Met EDM"};
 
-      mutable LockedHandle<TH1> m_hPt ATLAS_THREAD_SAFE;
-      mutable LockedHandle<TH1> m_hPhi ATLAS_THREAD_SAFE;
+      mutable LockedHandle<TH1> m_h_met_Pt ATLAS_THREAD_SAFE;
+      mutable LockedHandle<TH1> m_h_met_Phi ATLAS_THREAD_SAFE;
 
    };
 }
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/JetInputProviderFEX.cxx b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/JetInputProviderFEX.cxx
index e23212b05dd0680a77be677eda0217e1c1ec7670..d6d561b616f2df3463452492fd8073a73ba1a0aa 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/JetInputProviderFEX.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/JetInputProviderFEX.cxx
@@ -118,10 +118,16 @@ JetInputProviderFEX::handle(const Incident& incident) {
    auto hjTauPt = std::make_unique<TH1I>( "jTauTOBPt", "jTau TOB Pt", 40, 0, 200);
    hjTauPt->SetXTitle("p_{T}");
 
+   auto hjTauIsolation = std::make_unique<TH1I>( "jTauTOBIsolation", "jTau TOB Isolation", 200, 0, 200);
+   hjTauIsolation->SetXTitle("Isolation");
+
    auto hjTauEtaPhi = std::make_unique<TH2I>( "jTauTOBPhiEta", "jTau TOB Location", 220, -110, 110, 128, 0, 128);
    hjTauEtaPhi->SetXTitle("#eta");
    hjTauEtaPhi->SetYTitle("#phi");
 
+   auto hjTauEtaIsolation = std::make_unique<TH2I>( "jTauTOBEtaIsolation", "jTau TOB Isolation vs eta", 220, -110, 110, 200, 0, 200);
+   hjTauEtaIsolation->SetXTitle("#eta");
+   hjTauEtaIsolation->SetYTitle("Isolation");
 
    if (m_histSvc->regShared( histPath + "jTauTOBPt", std::move(hjTauPt), m_hjTauPt ).isSuccess()){
      ATH_MSG_DEBUG("jTauTOB Pt histogram has been registered successfully from JetProviderFEX.");
@@ -130,13 +136,24 @@ JetInputProviderFEX::handle(const Incident& incident) {
      ATH_MSG_WARNING("Could not register jTauTOB Pt histogram from JetProviderFEX");
    }
 
+   if (m_histSvc->regShared( histPath + "jTauTOBIsolation", std::move(hjTauIsolation), m_hjTauIsolation ).isSuccess()){
+     ATH_MSG_DEBUG("jTauTOB Isolation histogram has been registered successfully from JetProviderFEX.");
+   }
+   else{
+     ATH_MSG_WARNING("Could not register jTauTOB Isolation histogram from JetProviderFEX");
+   }
    if (m_histSvc->regShared( histPath + "jTauTOBPhiEta", std::move(hjTauEtaPhi), m_hjTauEtaPhi ).isSuccess()){
      ATH_MSG_DEBUG("jTauTOB PhiEta histogram has been registered successfully from JetProviderFEX.");
    }
    else{
      ATH_MSG_WARNING("Could not register jTauTOB PhiEta histogram from JetProviderFEX");
    }
-
+   if (m_histSvc->regShared( histPath + "jTauTOBEtaIsolation", std::move(hjTauEtaIsolation), m_hjTauEtaIsolation ).isSuccess()){
+     ATH_MSG_DEBUG("jTauTOB Eta/Isolation histogram has been registered successfully from JetProviderFEX.");
+   }
+   else{
+     ATH_MSG_WARNING("Could not register jTauTOB Eta/Isolation histogram from JetProviderFEX");
+   }
 
 }
 
@@ -178,6 +195,8 @@ JetInputProviderFEX::fillTopoInputEvent(TCS::TopoInputEvent& inputEvent) const {
 		   << jFexRoI->tobEt() // returns the et value of the jet in units of 200 MeV
 		   << " globalEta: "
 		   << jFexRoI->globalEta() // returns global eta in units of 0.1
+		   << " isolation: "
+		   << jFexRoI->tobIso() // returns isolation value in units of 200 MeV
 		   << " globalPhi: "
 		   << jFexRoI->globalPhi() // returns global phi in units of 0.1
 		   );
@@ -185,11 +204,12 @@ JetInputProviderFEX::fillTopoInputEvent(TCS::TopoInputEvent& inputEvent) const {
     unsigned int EtTopo = jFexRoI->tobEt()*2; // Convert Et to 100 MeV unit
     unsigned int phiTopo = jFexRoI->globalPhi()*2; // Convert to 0.05 granularity
     int etaTopo = jFexRoI->globalEta()*4; // Convert to 0.025 granularity
+    unsigned int isolation = jFexRoI->tobIso();  // isolation value in units of 200 MeV
    
     // Avoid the events with 0 Et (events below threshold)
     if (EtTopo==0) continue;
 
-    TCS::jTauTOB jtau( EtTopo, 0, etaTopo, phiTopo );
+    TCS::jTauTOB jtau( EtTopo, isolation, etaTopo, phiTopo );
     jtau.setEtDouble( static_cast<double>(EtTopo/10.) );
     jtau.setEtaDouble( static_cast<double>(etaTopo/40.) );
     jtau.setPhiDouble( static_cast<double>(phiTopo/20.) );
@@ -198,14 +218,15 @@ JetInputProviderFEX::fillTopoInputEvent(TCS::TopoInputEvent& inputEvent) const {
     inputEvent.addcTau( jtau );
 
     m_hjTauPt->Fill(jtau.EtDouble());
+    m_hjTauIsolation->Fill(jtau.isolation());
     m_hjTauEtaPhi->Fill(jtau.eta(),jtau.phi()); 
+    m_hjTauEtaIsolation->Fill(jtau.eta(),jtau.isolation()); 
   }
   
   for(const auto it : * JContainer) {
     const xAOD::jFexLRJetRoI* jFexRoI = it;
     ATH_MSG_DEBUG( "EDM jFex jJet Number: " 
-		   << +jFexRoI->jFexNumber() // returns an 8 bit unsigned integer referring to the jFEX number 
-		   << " et: " 
+		   << +jFexRoI->jFexNumber() // returns an 8 bit unsigned integer referring to the jFEX number		   << " et: " 
 		   << jFexRoI->et() // returns the et value of the jet in MeV unit
 	           << " tobEt: " 
 		   << jFexRoI->tobEt() // returns the et value of the jet in units of 200 MeV
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/JetInputProviderFEX.h b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/JetInputProviderFEX.h
index 3df6fdfd0c3a70c17fa743ba972743520bc66c95..9fbff8e59adf4eb091eff40d6d23d4f1ec84cf65 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/JetInputProviderFEX.h
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/JetInputProviderFEX.h
@@ -13,7 +13,7 @@
 
 #include "xAODTrigger/jFexSRJetRoIContainer.h" //small R jets from jFEX
 #include "xAODTrigger/jFexLRJetRoIContainer.h" //large R jets from jFEX
-#include "xAODTrigger/jFexTauRoIContainer.h" //large R jets from jFEX
+#include "xAODTrigger/jFexTauRoIContainer.h" //taus from jFEX
 
 #include "TH1.h"
 #include "TH2.h"
@@ -47,8 +47,10 @@ namespace LVL1 {
       mutable LockedHandle<TH2> m_hjLargeRJetEtaPhi ATLAS_THREAD_SAFE;
      
       mutable LockedHandle<TH1> m_hjTauPt ATLAS_THREAD_SAFE;
+      mutable LockedHandle<TH1> m_hjTauIsolation ATLAS_THREAD_SAFE;
       mutable LockedHandle<TH2> m_hjTauEtaPhi ATLAS_THREAD_SAFE;
-     
+      mutable LockedHandle<TH2> m_hjTauEtaIsolation ATLAS_THREAD_SAFE;
+
       SG::ReadHandleKey<xAOD::jFexSRJetRoIContainer> m_jEDMKey {this, "L1_jFexSRJetRoI", "L1_jFexSRJetRoI", "jFEX EDM"};
       SG::ReadHandleKey<xAOD::jFexLRJetRoIContainer> m_JEDMKey {this, "L1_jFexLRJetRoI", "L1_jFexLRJetRoI", "JFEX EDM"};
       SG::ReadHandleKey<xAOD::jFexTauRoIContainer> m_jTauEDMKey {this, "L1_jFexTauRoI", "L1_jFexTauRoI", "JFEX EDM"};
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/TopoEDM.cxx b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/TopoEDM.cxx
index bcf77c6ba075e02d1b8f26b735c818e2b4d9f697..588659c7ec3e7ee38db4efe21464f33212d1ad09 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/TopoEDM.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/TopoEDM.cxx
@@ -37,7 +37,7 @@ TopoEDM::Read(bool isLegacy) const {
 
   ATH_MSG_DEBUG("----got container: " << cont.key());
 
-  for(const auto& it : * cont){
+  for(const xAOD::L1TopoSimResults* it : * cont){
     l1topo_dec = it;
     ATH_MSG_DEBUG( "Reading L1Topo EDM:: BoardName: " << l1topo_dec->boardName() << " Clock: " << l1topo_dec->clock() << " Word32: " << l1topo_dec->word32() << " Word64: " << l1topo_dec->word64() << " WordOpt: " << l1topo_dec->wordOptical() );
   }
diff --git a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/components/L1TopoSimulation_entries.cxx b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/components/L1TopoSimulation_entries.cxx
index 509ed5c7c2d5ad8e431bc7051652d27262b76d28..ef5edf00282e0e89f900e49e9f2ea9f438f679c3 100644
--- a/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/components/L1TopoSimulation_entries.cxx
+++ b/Trigger/TrigT1/L1Topo/L1TopoSimulation/src/components/L1TopoSimulation_entries.cxx
@@ -5,6 +5,7 @@
 #include "../JetInputProvider.h"
 #include "../JetInputProviderFEX.h"
 #include "../EnergyInputProvider.h"
+#include "../EnergyInputProviderFEX.h"
 #include "../MuonInputProvider.h"
 #include "../RoiB2TopoInputDataCnv.h"
 #include "../TopoEDM.h"
@@ -17,6 +18,7 @@ DECLARE_COMPONENT( LVL1::EMTauInputProviderFEX )
 DECLARE_COMPONENT( LVL1::JetInputProvider )
 DECLARE_COMPONENT( LVL1::JetInputProviderFEX )
 DECLARE_COMPONENT( LVL1::EnergyInputProvider )
+DECLARE_COMPONENT( LVL1::EnergyInputProviderFEX )
 DECLARE_COMPONENT( LVL1::MuonInputProvider )
 
 DECLARE_COMPONENT( LVL1::TopoEDM )
diff --git a/Trigger/TrigT1/TrigT1CTP/python/CTPSimulationConfig.py b/Trigger/TrigT1/TrigT1CTP/python/CTPSimulationConfig.py
index 8292367ce9ce2ed72bfad36e5884198c9a3e2965..33adb177567869aa55a974ab02a7d204b60944b4 100644
--- a/Trigger/TrigT1/TrigT1CTP/python/CTPSimulationConfig.py
+++ b/Trigger/TrigT1/TrigT1CTP/python/CTPSimulationConfig.py
@@ -13,7 +13,7 @@ def CTPSimulationCfg(flags):
                                                         jFexJetInput = "",
                                                         jFexLJetInput = "",
                                                         gFexJetInput =  "",
-                                                        gFexMETPufitInput = "",
+                                                        gFexMETNCInput = "",
                                                         gFexMETRhoInput = "",
                                                         gFexMETJwoJInput = "",
                                                         eFexClusterInput = "",
diff --git a/Trigger/TrigT1/TrigT1CTP/src/CTPSimulation.cxx b/Trigger/TrigT1/TrigT1CTP/src/CTPSimulation.cxx
index d84f889bbf7f2d95b16ddaffa87b154c166c1ce2..9f04a7de1f5d2f58fc1262868764bafe71fb1569 100644
--- a/Trigger/TrigT1/TrigT1CTP/src/CTPSimulation.cxx
+++ b/Trigger/TrigT1/TrigT1CTP/src/CTPSimulation.cxx
@@ -80,7 +80,7 @@ LVL1CTP::CTPSimulation::initialize() {
    ATH_CHECK( m_iKeyJFexJets.initialize( ! m_iKeyJFexJets.empty() ) );
    ATH_CHECK( m_iKeyJFexLJets.initialize( ! m_iKeyJFexLJets.empty() ) );
    ATH_CHECK( m_iKeyGFexJets.initialize( ! m_iKeyGFexJets.empty() ) );
-   ATH_CHECK( m_iKeyGFexMETPufit.initialize( ! m_iKeyGFexMETPufit.empty() ) );
+   ATH_CHECK( m_iKeyGFexMETNC.initialize( ! m_iKeyGFexMETNC.empty() ) );
    ATH_CHECK( m_iKeyGFexMETRho.initialize( ! m_iKeyGFexMETRho.empty() ) );
    ATH_CHECK( m_iKeyGFexMETJwoJ.initialize( ! m_iKeyGFexMETJwoJ.empty() ) );
    ATH_CHECK( m_iKeyEFexCluster.initialize( ! m_iKeyEFexCluster.empty() ) );
@@ -467,13 +467,13 @@ LVL1CTP::CTPSimulation::fillInputHistograms(const EventContext& context) const {
    }
 
    // MET
-   if( not m_iKeyGFexMETPufit.empty() ) {
-      auto gFexMETPufit  = SG::makeHandle( m_iKeyGFexMETPufit, context );
+   if( not m_iKeyGFexMETNC.empty() ) {
+      auto gFexMETPufit  = SG::makeHandle( m_iKeyGFexMETNC, context );
       if( gFexMETPufit.isValid() ) {
          get1DHist("/input/met/Pufit")->Fill(gFexMETPufit->energyT()/1000.);
          get1DHist("/input/met/PufitPhi")->Fill(atan2(gFexMETPufit->energyX(), gFexMETPufit->energyY()));
       } else {
-         ATH_MSG_DEBUG("No collection " << m_iKeyGFexMETPufit);
+         ATH_MSG_DEBUG("No collection " << m_iKeyGFexMETNC);
       }
    }
 
@@ -844,8 +844,8 @@ LVL1CTP::CTPSimulation::calculateMETMultiplicity( const TrigConf::L1Threshold &
    } else {
       // new XE
       const SG::ReadHandleKey< xAOD::EnergySumRoI > * rhk { nullptr };
-      if ( confThr.name().find("gXEPUFIT")==0 ) {
-         rhk = & m_iKeyGFexMETPufit;
+      if ( confThr.name().find("gXENC")==0 ) {
+         rhk = & m_iKeyGFexMETNC;
          ATH_MSG_DEBUG("Using Pufit input for threshold " << confThr.name() );
       } else if ( confThr.name().find("gXERHO")==0 ) {
          rhk = & m_iKeyGFexMETRho;
diff --git a/Trigger/TrigT1/TrigT1CTP/src/CTPSimulation.h b/Trigger/TrigT1/TrigT1CTP/src/CTPSimulation.h
index 20e3903ad181731320b6b544c185a6b170f49f5f..0cf02bca41be8d8f9526512376b630812af8052d 100644
--- a/Trigger/TrigT1/TrigT1CTP/src/CTPSimulation.h
+++ b/Trigger/TrigT1/TrigT1CTP/src/CTPSimulation.h
@@ -135,7 +135,7 @@ namespace LVL1CTP {
       SG::ReadHandleKey< xAOD::JetRoIContainer >  m_iKeyJFexLJets{  this, "jFexLJetInput",  "jRoundLargeRJets", "Input list of jFEX large-R jets" };
       // gFEX
       SG::ReadHandleKey< xAOD::JetRoIContainer >  m_iKeyGFexJets    {  this, "gFexJetInput", "gL1Jets", "Input list of gFEX jets" };
-      SG::ReadHandleKey< xAOD::EnergySumRoI >     m_iKeyGFexMETPufit{  this, "gFexMETPufitInput", "gXEPUFIT_MET", "Input list of gFEX MET Pufit" };
+      SG::ReadHandleKey< xAOD::EnergySumRoI >     m_iKeyGFexMETNC   {  this, "gFexMETNCInput", "gXENOISECUTPerf", "Input list of gFEX MET NC" };
       SG::ReadHandleKey< xAOD::EnergySumRoI >     m_iKeyGFexMETRho  {  this, "gFexMETRhoInput", "gXERHOPerf", "Input list of gFEX MET Rho" };
       SG::ReadHandleKey< xAOD::EnergySumRoI >     m_iKeyGFexMETJwoJ {  this, "gFexMETJwoJInput", "gXEJWOJPerf", "Input list of gFEX MET JwoJ" };
       // eFEX
diff --git a/Trigger/TrigT1/TrigT1CaloFexPerf/python/EmulationConfig.py b/Trigger/TrigT1/TrigT1CaloFexPerf/python/EmulationConfig.py
index c486bbabc8f06e265bcf97e2855daefc52450580..6e2dfb28ec063d1ce221ec35120c4c18ae7709fc 100644
--- a/Trigger/TrigT1/TrigT1CaloFexPerf/python/EmulationConfig.py
+++ b/Trigger/TrigT1/TrigT1CaloFexPerf/python/EmulationConfig.py
@@ -56,3 +56,32 @@ def emulateSC(sCell_sequence, CellsIn="SeedLessFS", SCOut="EmulatedSCell"):
     if(perfFlags.Calo.ApplyEmulatedPedestal()):
         #Apply the pedestal correction. There may be cases we do not want this. 
         sCell_sequence+=larscbea
+
+def emulateSC_Cfg(flags, CellsIn="SeedLessFS", SCOut="EmulatedSCell"):
+
+    from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+    from AthenaConfiguration.ComponentFactory import CompFactory
+    acc = ComponentAccumulator()
+    if flags.Input.isMC: 
+        from LArCabling.LArCablingConfig import LArFebRodMappingCfg
+        acc.merge(LArFebRodMappingCfg(flags))
+
+    from TrigCaloRec.TrigCaloRecConfig import hltCaloCellSeedlessMakerCfg
+    acc.merge(hltCaloCellSeedlessMakerCfg(flags, roisKey = ""))
+
+
+    #Use SCEmulation tool that randomly samples time histograms to estimate time for low energy and negative cells forming a supercell 
+    acc.addEventAlgo(CompFactory.LVL1.SCEmulation(InputCells=CellsIn, OutputSuperCells = "EmulatedSCellNoBCID"))
+    
+    from LArROD.LArSCSimpleMakerConfig import LArSuperCellBCIDEmAlgCfg
+
+    larSCargs = {}
+    larSCargs["SCellContainerIn"] = "EmulatedSCellNoBCID"
+    larSCargs["SCellContainerOut"] = SCOut
+
+    if(perfFlags.Calo.ApplyEmulatedPedestal()):
+        #Apply the pedestal correction. There may be cases we do not want this. 
+    #The default input to LARSuperCellBCIDEmAlg (which applies the BCID correction) is the same: SCellContainer
+        acc.merge(LArSuperCellBCIDEmAlgCfg(flags, **larSCargs))
+
+    return acc
diff --git a/Trigger/TrigT1/TrigT1NSW/src/NSWL1Simulation.cxx b/Trigger/TrigT1/TrigT1NSW/src/NSWL1Simulation.cxx
index 972209ba01a15cf5f5252d7dda7430cfb41ee953..29c836a242ca35a66fa253c065be9d21396d4130 100644
--- a/Trigger/TrigT1/TrigT1NSW/src/NSWL1Simulation.cxx
+++ b/Trigger/TrigT1/TrigT1NSW/src/NSWL1Simulation.cxx
@@ -58,7 +58,6 @@ namespace NSWL1 {
     ATH_MSG_DEBUG( "initialize " << name() );
     ATH_CHECK( m_trigRdoContainer.initialize() );
     ATH_CHECK( m_xaodevtKey.initialize() );
-    ATH_CHECK( m_eventInfoKey.initialize() );
     // Create an register the ntuple if requested, add branch for event and run number
     if ( m_doNtuple ) {
       ITHistSvc* tHistSvc;
@@ -123,13 +122,7 @@ namespace NSWL1 {
     if (evt.isValid()) {
       m_current_run = evt->runNumber();
       m_current_evt = evt->eventNumber();
-    } else {
-      SG::ReadHandle<EventInfo> eventInfo (m_eventInfoKey);
-      if(eventInfo->event_ID()->event_number() == 0 && m_current_evt == 0) ATH_MSG_DEBUG("Start " << name());
-      else ++m_current_evt;
-      m_current_run = eventInfo->event_ID()->run_number();
     }
-
     std::vector<std::shared_ptr<PadData>> pads;
     std::vector<std::unique_ptr<PadTrigger>> padTriggers;
     std::vector<std::unique_ptr<StripData>> strips;
diff --git a/Trigger/TrigT1/TrigT1NSW/src/NSWL1Simulation.h b/Trigger/TrigT1/TrigT1NSW/src/NSWL1Simulation.h
index d27c79e527f30ff1bd42a73a5f3c68462325f689..3cd7d99e4f7f3698d2bc61cf98dfb622d14b582e 100644
--- a/Trigger/TrigT1/TrigT1NSW/src/NSWL1Simulation.h
+++ b/Trigger/TrigT1/TrigT1NSW/src/NSWL1Simulation.h
@@ -105,7 +105,6 @@ namespace NSWL1 {
 
     protected:
     SG::ReadHandleKey<xAOD::EventInfo> m_xaodevtKey{this,"xAODEventInfoKey","EventInfo","Key of xAOD::EventInfo"};
-    SG::ReadHandleKey<EventInfo> m_eventInfoKey{this,"EventInfoKey","McEventInfo","Key of RDO EventInfo"};
     SG::WriteHandleKey<Muon::NSW_TrigRawDataContainer> m_trigRdoContainer;
 
   };  // end of NSWL1Simulation class
diff --git a/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/PadTdsOfflineTool.h b/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/PadTdsOfflineTool.h
index 7e04be14f65134ab305517c3098f96fa1b51b0e8..2fb0ad7c7a6aac90736e968af11423ac55070630 100644
--- a/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/PadTdsOfflineTool.h
+++ b/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/PadTdsOfflineTool.h
@@ -15,7 +15,7 @@
 #include "PadTdsValidationTree.h"
 #include "MuonIdHelpers/IMuonIdHelperSvc.h"
 #include "GaudiKernel/IIncidentSvc.h"
-#include "AthenaKernel/IAtRndmGenSvc.h"
+#include "AthenaKernel/IAthRNGSvc.h"
 
 #include "MuonDigitContainer/sTgcDigitContainer.h"
 #include "MuonSimData/MuonSimDataCollection.h"
@@ -135,9 +135,8 @@ namespace NSWL1 {
         
         // needed Servives, Tools and Helpers
         ServiceHandle< IIncidentSvc >      m_incidentSvc;       //!< Athena/Gaudi incident Service
-        ServiceHandle< IAtRndmGenSvc >     m_rndmSvc;           //!< Athena random number service
+	ServiceHandle<IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc", ""};     //!< Random number generator engine to use
         ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
-        CLHEP::HepRandomEngine*            m_rndmEngine;        //!< Random number engine
         const MuonGM::MuonDetectorManager* m_detManager;        //!< MuonDetectorManager
 
         // hidden variables
diff --git a/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/StripClusterTool.h b/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/StripClusterTool.h
index 2ca6dcf30e69c25f30baf3433605dd1f18888f61..f06e4d38e9be2f57e67872788e56928f49cb7360 100644
--- a/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/StripClusterTool.h
+++ b/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/StripClusterTool.h
@@ -18,14 +18,9 @@
 
 //forward declarations
 class IIncidentSvc;
-class IAtRndmGenSvc;
 class sTgcDigit;
 class TTree;
 
-namespace CLHEP {
-  class HepRandomEngine;
-}
-
 namespace MuonGM {
   class MuonDetectorManager;
 }
@@ -72,7 +67,6 @@ namespace NSWL1 {
 
     // needed Servives, Tools and Helpers
     ServiceHandle< IIncidentSvc >      m_incidentSvc;       //!< Athena/Gaudi incident Service
-    ServiceHandle< IAtRndmGenSvc >     m_rndmSvc;           //!< Athena random number service
     const MuonGM::MuonDetectorManager* m_detManager;        //!< MuonDetectorManager
     ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
 
diff --git a/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/StripTdsOfflineTool.h b/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/StripTdsOfflineTool.h
index da950dfdc5cddcb0a6986b12f37b5a597317db87..3d45aeb469370c608d6385fcffc483ddad8b7f82 100644
--- a/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/StripTdsOfflineTool.h
+++ b/Trigger/TrigT1/TrigT1NSWSimTools/TrigT1NSWSimTools/StripTdsOfflineTool.h
@@ -19,14 +19,9 @@
 
 //forward declarations
 class IIncidentSvc;
-class IAtRndmGenSvc;
 class sTgcDigit;
 class TTree;
 
-namespace CLHEP {
-  class HepRandomEngine;
-}
-
 namespace MuonGM {
   class MuonDetectorManager;
 }
@@ -91,8 +86,6 @@ namespace NSWL1 {
 
     // needed Servives, Tools and Helpers
     ServiceHandle< IIncidentSvc >      m_incidentSvc;       //!< Athena/Gaudi incident Service
-    ServiceHandle< IAtRndmGenSvc >     m_rndmSvc;           //!< Athena random number service
-    CLHEP::HepRandomEngine*            m_rndmEngine;        //!< Random number engine
     const MuonGM::MuonDetectorManager* m_detManager;        //!< MuonDetectorManager
 
     // hidden variables
@@ -102,9 +95,6 @@ namespace NSWL1 {
     thread_local static cStatus m_strip_cache_status;                             //!< status of the current cache
     BooleanProperty  m_doNtuple;                            //!< property, see @link StripTdsOfflineTool::StripTdsOfflineTool @endlink
 
-    // properties: container and service names
-    StringProperty   m_rndmEngineName;                      //!< property, see @link PadTdsOfflineTool::PadTdsOfflineTool @endlink
-
     // analysis ntuple
     TTree* m_tree;                                          //!< ntuple for analysis
 
diff --git a/Trigger/TrigT1/TrigT1NSWSimTools/src/PadTdsOfflineTool.cxx b/Trigger/TrigT1/TrigT1NSWSimTools/src/PadTdsOfflineTool.cxx
index 15a02c575b5a13f792bcc8b04144fa32bf355544..5a039e738c320aab502cd51a86b5ed2c0d038e29 100644
--- a/Trigger/TrigT1/TrigT1NSWSimTools/src/PadTdsOfflineTool.cxx
+++ b/Trigger/TrigT1/TrigT1NSWSimTools/src/PadTdsOfflineTool.cxx
@@ -21,9 +21,9 @@
 
 #include "GaudiKernel/ThreadLocalContext.h"
 #include "GaudiKernel/EventContext.h"
-#include "CLHEP/Random/RandFlat.h"
 #include "CLHEP/Random/RandGauss.h"
-
+#include "AthenaKernel/IAthRNGSvc.h"
+#include "AthenaKernel/RNGWrapper.h"
 
 #include "TTree.h"
 #include "TVector3.h"
@@ -56,8 +56,6 @@ namespace NSWL1 {
     PadTdsOfflineTool::PadTdsOfflineTool( const std::string& type, const std::string& name, const IInterface* parent) :
         AthAlgTool(type,name,parent),
         m_incidentSvc("IncidentSvc",name),
-        m_rndmSvc("AtRndmGenSvc",name),
-        m_rndmEngine(0),
         m_detManager(0),
         m_pad_cache_runNumber(-1),
         m_pad_cache_eventNumber(-1),
@@ -128,13 +126,6 @@ namespace NSWL1 {
         // retrieve the Random Service
         ATH_CHECK( m_rndmSvc.retrieve() );
 
-        // retrieve the random engine
-        m_rndmEngine = m_rndmSvc->GetEngine(m_rndmEngineName);
-        if (m_rndmEngine==0) {
-            ATH_MSG_FATAL("Could not retrieve the random engine " << m_rndmEngineName);
-            return StatusCode::FAILURE;
-        }
-
         ATH_CHECK(detStore()->retrieve(m_detManager));
         ATH_CHECK(m_idHelperSvc.retrieve());
         bool testGeometryAccess=false; // for now this is just an example DG-2014-07-11
@@ -339,7 +330,9 @@ namespace NSWL1 {
     }
     //------------------------------------------------------------------------------
     double PadTdsOfflineTool::computeTimeJitter() const {
-        return CLHEP::RandGauss::shoot(m_rndmEngine, 0, m_timeJitter);
+      ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, m_rndmEngineName);
+      CLHEP::HepRandomEngine * engine = rngWrapper->getEngine(Gaudi::Hive::currentContext());
+      return CLHEP::RandGauss::shoot(engine, 0, m_timeJitter);
     }
     //------------------------------------------------------------------------------
     void PadTdsOfflineTool::simulateDeadTime(std::vector<PadHits>& h) const {
diff --git a/Trigger/TrigT1/TrigT1NSWSimTools/src/StripClusterTool.cxx b/Trigger/TrigT1/TrigT1NSWSimTools/src/StripClusterTool.cxx
index b2b3dcc1bb3c0d584a432f3df14dae25a13c4e8a..1ef98a8d4480db5818d3f652fcb41fe5a502a646 100644
--- a/Trigger/TrigT1/TrigT1NSWSimTools/src/StripClusterTool.cxx
+++ b/Trigger/TrigT1/TrigT1NSWSimTools/src/StripClusterTool.cxx
@@ -13,9 +13,6 @@
 #include "MuonDigitContainer/sTgcDigit.h"
 #include "MuonSimData/MuonSimDataCollection.h"
 #include "MuonSimData/MuonSimData.h"
-#include "AthenaKernel/IAtRndmGenSvc.h"
-#include "CLHEP/Random/RandFlat.h"
-#include "CLHEP/Random/RandGauss.h"
 
 #include "TTree.h"
 #include <functional>
@@ -28,7 +25,6 @@ namespace NSWL1 {
     StripClusterTool::StripClusterTool( const std::string& type, const std::string& name, const IInterface* parent) :
       AthAlgTool(type,name,parent),
       m_incidentSvc("IncidentSvc",name),
-      m_rndmSvc("AtRndmGenSvc",name),
       m_detManager(nullptr),
       m_tree(nullptr),
       m_clusters()
@@ -58,8 +54,6 @@ namespace NSWL1 {
     ATH_CHECK(m_incidentSvc.retrieve());
     m_incidentSvc->addListener(this,IncidentType::BeginEvent);
 
-    // retrieve the Random Service
-    ATH_CHECK(m_rndmSvc.retrieve());
     // retrieve the MuonDetectormanager
     ATH_CHECK(detStore()->retrieve( m_detManager ));
     ATH_CHECK(m_idHelperSvc.retrieve());
diff --git a/Trigger/TrigT1/TrigT1NSWSimTools/src/StripTdsOfflineTool.cxx b/Trigger/TrigT1/TrigT1NSWSimTools/src/StripTdsOfflineTool.cxx
index 2cf2ad437033bff77dadbc65cb8151f802be8cc7..0ab35d70915ba84c25ad55a72079daf5b8912bbf 100644
--- a/Trigger/TrigT1/TrigT1NSWSimTools/src/StripTdsOfflineTool.cxx
+++ b/Trigger/TrigT1/TrigT1NSWSimTools/src/StripTdsOfflineTool.cxx
@@ -17,7 +17,6 @@
 #include "MuonSimData/MuonSimData.h"
 #include "MuonAGDDDescription/sTGCDetectorDescription.h"
 #include "MuonAGDDDescription/sTGCDetectorHelper.h"
-#include "AthenaKernel/IAtRndmGenSvc.h"
 #include "GaudiKernel/ThreadLocalContext.h"
 #include "GaudiKernel/EventContext.h"
 #include "CLHEP/Random/RandFlat.h"
@@ -51,14 +50,11 @@ namespace NSWL1 {
     StripTdsOfflineTool::StripTdsOfflineTool( const std::string& type, const std::string& name, const IInterface* parent) :
       AthAlgTool(type,name,parent),
       m_incidentSvc("IncidentSvc",name),
-      m_rndmSvc("AtRndmGenSvc",name),
-      m_rndmEngine(nullptr),
       m_detManager(nullptr),
       m_tree(nullptr)
 
     {
       declareInterface<NSWL1::IStripTdsTool>(this);
-      declareProperty("RndmEngineName", m_rndmEngineName = "StripTdsOfflineTool", "the name of the random engine");
       declareProperty("DoNtuple", m_doNtuple = false, "input the StripTds branches into the analysis ntuple");
     }
 
@@ -79,7 +75,6 @@ namespace NSWL1 {
     ATH_MSG_DEBUG( "initializing " << name() );
 
     ATH_MSG_DEBUG( name() << " configuration:");
-    ATH_MSG_DEBUG(" " << std::setw(32) << std::setfill('.') << std::setiosflags(std::ios::left) << m_rndmEngineName.name() << m_rndmEngineName.value());
     ATH_MSG_DEBUG(" " << std::setw(32) << std::setfill('.') << std::setiosflags(std::ios::left) << m_doNtuple.name() << ((m_doNtuple)? "[True]":"[False]")
                        << std::setfill(' ') << std::setiosflags(std::ios::right) );
 
@@ -100,12 +95,6 @@ namespace NSWL1 {
       ATH_CHECK(this->book_branches());
       ATH_CHECK(m_incidentSvc.retrieve());
       m_incidentSvc->addListener(this,IncidentType::BeginEvent);
-      ATH_CHECK(m_rndmSvc.retrieve());
-      m_rndmEngine = m_rndmSvc->GetEngine(m_rndmEngineName);
-      if (m_rndmEngine==0) {
-        ATH_MSG_FATAL("Could not retrieve the random engine " << m_rndmEngineName);
-        return StatusCode::FAILURE;
-      }
       ATH_CHECK(detStore()->retrieve(m_detManager));
       ATH_CHECK(m_idHelperSvc.retrieve());
       return StatusCode::SUCCESS;
diff --git a/Trigger/TrigT1/TrigT1ResultByteStream/python/TrigT1ResultByteStreamConfig.py b/Trigger/TrigT1/TrigT1ResultByteStream/python/TrigT1ResultByteStreamConfig.py
index f98578da96084c7e4b59bd63407b9264ee312d25..e8fd56a1bd9f9c44e45b115f113348b276efb994 100644
--- a/Trigger/TrigT1/TrigT1ResultByteStream/python/TrigT1ResultByteStreamConfig.py
+++ b/Trigger/TrigT1/TrigT1ResultByteStream/python/TrigT1ResultByteStreamConfig.py
@@ -125,6 +125,12 @@ def L1TriggerByteStreamDecoderCfg(flags):
         # L1Topo may be missing in some runs of Run 2 when it was under commissioning
         for module_id in roibResultTool.L1TopoModuleIds:
           maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_TOPO_PROC, module_id)))
+      if flags.Trigger.EDMVersion == 2 and not flags.Trigger.doHLT:
+        # L1Calo occasional readout errors weren't caught by HLT in 2015 - ignore these in offline reco, see ATR-24493
+        for module_id in roibResultTool.JetModuleIds:
+          maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_JET_PROC_ROI, module_id)))
+        for module_id in roibResultTool.EMModuleIds:
+          maybeMissingRobs.append(int(SourceIdentifier(SubDetector.TDAQ_CALO_CLUSTER_PROC_ROI, module_id)))
 
   # Run-3 L1Muon decoding
   if flags.Trigger.enableL1MuonPhase1:
diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h
index 1c1522d83d056f421a0bcff85ba65e2c1278f784..0abfce79599751c67ac016a981ff44c239dadd40 100644
--- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h
+++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/LVL1TGCTrigger.h
@@ -155,6 +155,7 @@ namespace LVL1TGCTrigger {
     BooleanProperty   m_FULLCW{this,"FULLCW",false};   // flag for using differne CW for each octant
     BooleanProperty   m_TILEMU{this,"TILEMU",true};    // flag for using TileMu
     BooleanProperty   m_USENSW{this,"USENSW",false};     // flag for using NSW
+    BooleanProperty   m_FORCENSWCOIN{this,"FORCENSWCOIN",true};     // flag to enable innerCoincidenceFlag at the TGC sectors expecting NSW hits even if there is no NSW hit
     BooleanProperty   m_useRun3Config{this,"useRun3Config",false}; // flag for using switch between Run3 and Run2 algorithms
 
    StringProperty     m_NSWSideInfo{this,"NSWSideInfo",""};// Information about NSW geometry. It should be "" or "AC" or "A" or "C"
diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/NSWTrigOut.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/NSWTrigOut.h
index 8dc486aee22c5077661dd1783927b52250d412c9..06d9e1ed53608455dde7297d652fc7446dba809a 100644
--- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/NSWTrigOut.h
+++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/NSWTrigOut.h
@@ -26,13 +26,13 @@ class NSWTrigOut {
 protected:
   int                         m_sideID{-1};     // 0:A-side 1:C-side
   std::vector<int>            m_NSWTriggerProcessor;   // 0 ~ 15
-  std::vector<int>            m_NSWeta_8bit;     //  0.005
-  std::vector<int>            m_NSWphi_6bit;      // 10mrad
-  std::vector<int>            m_NSWDtheta_5bit;    // 1mrad
+  std::vector<uint8_t>            m_NSWeta_8bit;     //  0.005
+  std::vector<uint8_t>            m_NSWphi_6bit;      // 10mrad
+  std::vector<uint8_t>            m_NSWDtheta_5bit;    // 1mrad
 
 public:
   NSWTrigOut() = default;
-  NSWTrigOut(int side, std::vector<int> NSWTrigger, std::vector<int> NSWeta, std::vector<int> NSWphi, std::vector<int> NSWDtheta,TGCArguments* tgcargs=nullptr);
+  NSWTrigOut(int side, std::vector<int> NSWTrigger, std::vector<uint8_t> NSWeta, std::vector<uint8_t> NSWphi, std::vector<uint8_t> NSWDtheta,TGCArguments* tgcargs=nullptr);
   NSWTrigOut(int side, std::vector<int> NSWTrigger,TGCArguments* tgcargs=nullptr);
 
   NSWTrigOut& operator+=(const NSWTrigOut& right);
@@ -50,17 +50,17 @@ public:
   // set functons
   void setSide(int side){ m_sideID = side; }
   void setNSWTriggerProcessor(int NSWTP){ m_NSWTriggerProcessor.push_back(NSWTP); }
-  void setEta(int NSWeta){ m_NSWeta_8bit.push_back(NSWeta); }
-  void setPhi(int NSWphi){ m_NSWphi_6bit.push_back(NSWphi); }
-  void setDtheta(int NSWDtheta){ m_NSWDtheta_5bit.push_back(NSWDtheta); }
+  void setEta(uint8_t NSWeta){ m_NSWeta_8bit.push_back(NSWeta); }
+  void setPhi(uint8_t NSWphi){ m_NSWphi_6bit.push_back(NSWphi); }
+  void setDtheta(uint8_t NSWDtheta){ m_NSWDtheta_5bit.push_back(NSWDtheta); }
   void clear() { m_sideID=-1;m_NSWTriggerProcessor.clear(); m_NSWeta_8bit.clear();  m_NSWphi_6bit.clear(); m_NSWDtheta_5bit.clear();}
 
   // get functions
   int getSide() const { return m_sideID; }
   const std::vector<int>& getNSWTriggerProcessor() const {return m_NSWTriggerProcessor; }
-  const std::vector<int>& getNSWeta() const {return m_NSWeta_8bit; }
-  const std::vector<int>& getNSWphi() const {return m_NSWphi_6bit; }
-  const std::vector<int>& getNSWDtheta() const {return m_NSWDtheta_5bit; }
+  const std::vector<uint8_t>& getNSWeta() const {return m_NSWeta_8bit; }
+  const std::vector<uint8_t>& getNSWphi() const {return m_NSWphi_6bit; }
+  const std::vector<uint8_t>& getNSWDtheta() const {return m_NSWDtheta_5bit; }
 
   // print methods 
   void print() const;
diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCArguments.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCArguments.h
index 4b5344387cf6f185de2a8c34a387ad8b4506dfe3..06c47335b29ebefebfa958b39fb085d9b06a37fd 100644
--- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCArguments.h
+++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCArguments.h
@@ -22,6 +22,7 @@ class TGCArguments
     void set_USE_CONDDB(bool v);
     void set_useRun3Config(bool v);
     void set_USE_NSW(bool v);
+    void set_FORCE_NSW_COIN(bool v);
     void set_NSWSideInfo(std::string v);
 
     MSG::Level MSGLEVEL() const;
@@ -32,6 +33,7 @@ class TGCArguments
     bool USE_CONDDB() const;
     bool useRun3Config() const;
     bool USE_NSW() const;
+    bool FORCE_NSW_COIN() const;
     std::string NSWSideInfo() const;
 
   private:
@@ -43,6 +45,7 @@ class TGCArguments
     bool m_USE_CONDDB;
     bool m_useRun3Config;
     bool m_USE_NSW;
+    bool m_FORCE_NSW_COIN;
     std::string m_NSWSideInfo;
 
 
diff --git a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCNSW.h b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCNSW.h
index 53d85d8edc45ef4f5e7ddfd9b06f9e11024ab928..74eb0499c773cc824ab5fc54edecccea4ba36035 100644
--- a/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCNSW.h
+++ b/Trigger/TrigT1/TrigT1TGC/TrigT1TGC/TGCNSW.h
@@ -40,7 +40,7 @@ public:
   enum { NumberOfNSWTriggerProcesser = 16 };
 
   std::shared_ptr<const NSWTrigOut> getOutput(TGCRegionType region ,int side, int TGC_TriggerSector) const;
-  void  setOutput(int side, int NSWTriggerProcesser,int NSWeta_8bit,int NSWphi_6bit,int NSWDtheta_5bit); //eta:0.005 phi:10mrad Dtheta:1mrad 
+  void  setOutput(int side, int NSWTriggerProcesser,uint8_t NSWeta_8bit,uint8_t NSWphi_6bit,uint8_t NSWDtheta_5bit); //eta:0.005 phi:10mrad Dtheta:1mrad 
   void  eraseOutput();
   int   getNumberOfNSWTriggerProcesser() const { return NumberOfNSWTriggerProcesser; };   
 
diff --git a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx
index 2dff583b7c7fe85e62a6fcd5320c91a1c198a23c..aeeb2d92a95b317f385f077b309da2427e31e15d 100644
--- a/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx
+++ b/Trigger/TrigT1/TrigT1TGC/src/LVL1TGCTrigger.cxx
@@ -96,6 +96,7 @@ namespace LVL1TGCTrigger {
     m_tgcArgs.set_INNER_VETO( m_INNERVETO.value() );
     m_tgcArgs.set_TILE_MU( m_TILEMU.value() );
     m_tgcArgs.set_USE_NSW( m_USENSW.value() );
+    m_tgcArgs.set_FORCE_NSW_COIN( m_FORCENSWCOIN.value() );
 
     m_tgcArgs.set_USE_CONDDB( m_USE_CONDDB.value() );
     m_tgcArgs.set_useRun3Config( m_useRun3Config.value() );
@@ -1363,7 +1364,6 @@ void LVL1TGCTrigger::recordRdoSL(TGCSector* sector)
 
     //The following part will be available when NSW Trigger Output is available.
 
-    /*
     SG::ReadHandle<Muon::NSW_TrigRawDataContainer> readNSW_TrigRawDataContainer(m_keyNSWTrigOut);
     if(!readNSW_TrigRawDataContainer.isValid()){
       ATH_MSG_ERROR("Cannot retrieve NSW TrigRawData Container.");
@@ -1372,15 +1372,15 @@ void LVL1TGCTrigger::recordRdoSL(TGCSector* sector)
     const Muon::NSW_TrigRawDataContainer* nsw_TrigRawDataContainer = readNSW_TrigRawDataContainer.cptr();
     for(const Muon::NSW_TrigRawData* nsw_sector : *nsw_TrigRawDataContainer){
       for(const Muon::NSW_TrigRawDataSegment* nsw_trk : *nsw_sector){
-	nsw->setOutput(nsw_sector->sideId(),        // side
-		       //nsw_sector->sectorId(), // Sector number in NSW
-		       //nsw_trk->rIndex(),      // R-index
-		       //nsw_trk->phiIndex(),    // Phi-index
-		       //nsw_trk->deltaTheta() // Delta theta index
+	int nsw_sideId = (nsw_sector->sectorSide()=='A')?0:1;
+	nsw->setOutput(nsw_sideId,        // side
+		       nsw_sector->sectorId(), // Sector number in NSW
+		       nsw_trk->rIndex(),      // R-index
+		       nsw_trk->phiIndex(),    // Phi-index
+		       nsw_trk->deltaTheta() // Delta theta index
 	              );
       }
     } 
-    */
   
 
     if(sc.isFailure()){
diff --git a/Trigger/TrigT1/TrigT1TGC/src/NSWTrigOut.cxx b/Trigger/TrigT1/TrigT1TGC/src/NSWTrigOut.cxx
index 2cd83ad65dadd504070307796acaaf0de9f31b5f..b1d38001341adda023a14556673f73c62ee096e8 100644
--- a/Trigger/TrigT1/TrigT1TGC/src/NSWTrigOut.cxx
+++ b/Trigger/TrigT1/TrigT1TGC/src/NSWTrigOut.cxx
@@ -16,7 +16,7 @@ namespace LVL1TGCTrigger {
 
 
 ///////////////////////////////////////////////////////////////
-NSWTrigOut::NSWTrigOut(int side, std::vector<int> NSWTP, std::vector<int> NSWeta, std::vector<int> NSWphi, std::vector<int> NSWDtheta, TGCArguments* tgcargs)
+NSWTrigOut::NSWTrigOut(int side, std::vector<int> NSWTP, std::vector<uint8_t> NSWeta, std::vector<uint8_t> NSWphi, std::vector<uint8_t> NSWDtheta, TGCArguments* tgcargs)
   : m_sideID(side), m_NSWTriggerProcessor(NSWTP), m_NSWeta_8bit(NSWeta), m_NSWphi_6bit(NSWphi), m_NSWDtheta_5bit(NSWDtheta), m_tgcArgs(tgcargs)
 ///////////////////////////////////////////////////////////////
 {
diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx
index 766abef0b9e0f0ef744d399ef60ab4116da14e0f..2e29dc7e25961b6e4bfb13111becc6c2799f1e5f 100644
--- a/Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx
+++ b/Trigger/TrigT1/TrigT1TGC/src/TGCArguments.cxx
@@ -15,6 +15,7 @@ TGCArguments::TGCArguments()
    m_USE_CONDDB(false),
    m_useRun3Config(false),
    m_USE_NSW(false),
+   m_FORCE_NSW_COIN(false),
    m_NSWSideInfo("")
 {
 }
@@ -31,6 +32,7 @@ TGCArguments::~TGCArguments()
   void TGCArguments::set_USE_CONDDB(bool v){ m_USE_CONDDB = v;}
   void TGCArguments::set_useRun3Config(bool v){ m_useRun3Config = v;}
   void TGCArguments::set_USE_NSW(bool v){ m_USE_NSW = v;}
+  void TGCArguments::set_FORCE_NSW_COIN(bool v){ m_FORCE_NSW_COIN = v;}
   void TGCArguments::set_NSWSideInfo(std::string v){ m_NSWSideInfo = v;}
   
   MSG::Level TGCArguments::MSGLEVEL() const {return m_MSGLEVEL;}
@@ -41,6 +43,7 @@ TGCArguments::~TGCArguments()
   bool TGCArguments::USE_CONDDB() const {return m_USE_CONDDB;}
   bool TGCArguments::useRun3Config() const {return m_useRun3Config;}
   bool TGCArguments::USE_NSW() const {return m_USE_NSW;}
+  bool TGCArguments::FORCE_NSW_COIN() const {return m_FORCE_NSW_COIN;}
   std::string TGCArguments::NSWSideInfo() const { return m_NSWSideInfo;}
 
 }
diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCNSW.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCNSW.cxx
index f9a89417bb8bd474e7f6496ea11741fac66ee0ed..9901d1c6db66fdc4d5674c87594ae16763ed6e9b 100644
--- a/Trigger/TrigT1/TrigT1TGC/src/TGCNSW.cxx
+++ b/Trigger/TrigT1/TrigT1TGC/src/TGCNSW.cxx
@@ -49,48 +49,70 @@ const TGCNSW& TGCNSW::operator=(const TGCNSW& right)
 
 std::shared_ptr<const NSWTrigOut> TGCNSW::getOutput(TGCRegionType region ,int side,int TGC_TriggerSector) const
 {
-  std::shared_ptr<NSWTrigOut> tirgNSW_output;
-  tirgNSW_output.reset(new NSWTrigOut());
-  tirgNSW_output->clear();
+  std::shared_ptr<NSWTrigOut> trigNSW_output;
+  trigNSW_output.reset(new NSWTrigOut());
+  trigNSW_output->clear();
   if ( (side<0)||(side>1) ) return 0;
   if(region==ENDCAP){
     if ( TGC_TriggerSector<0 || TGC_TriggerSector>47 ) return 0;
-    ////NSW Large Secor Info
-    int NSW_TriggerSecot=(TGC_TriggerSector+1)/6*2;
-    if(NSW_TriggerSecot==16){NSW_TriggerSecot=0;}
-    if(NSW_TriggerSecot>=0 && NSW_TriggerSecot<=15){
-      *tirgNSW_output+=*m_buffer[side][NSW_TriggerSecot];
+
+    int temp=int((TGC_TriggerSector-2)/6);
+    int NSW_TriggerSector=temp*2+int((TGC_TriggerSector-1-6*temp)/5);
+    if(TGC_TriggerSector==0 || TGC_TriggerSector==1) {
+      NSW_TriggerSector=15;
     }
 
-    ////NSW Small Sector Info
-    if(TGC_TriggerSector%6==1 || TGC_TriggerSector%6==2){
-      return tirgNSW_output;
+    // SL input 0-1
+    *trigNSW_output+=*m_buffer[side][NSW_TriggerSector];
+    // SL input 2-3
+    if ( NSW_TriggerSector == 15 ) {
+      *trigNSW_output+=*m_buffer[side][0];
+    } else {
+      *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+1];    
     }
-    NSW_TriggerSecot=(TGC_TriggerSector+1+(TGC_TriggerSector-1)/6*2)/4;
-    if(NSW_TriggerSecot==0){NSW_TriggerSecot=15;}
-    if(NSW_TriggerSecot>=0 && NSW_TriggerSecot<=15){
-      *tirgNSW_output+=*m_buffer[side][NSW_TriggerSecot];
+    
+    if( !(TGC_TriggerSector%6==4 || TGC_TriggerSector%6==5) ){
+      return trigNSW_output;
     }
-
-    return tirgNSW_output;
+    
+    ////Add one more Large Sector Info
+    if ( NSW_TriggerSector==14 ) {
+      ////for TGC sector 46-47
+      *trigNSW_output+=*m_buffer[side][0];    
+    } else {
+      ////and for 4-5, 10-11, 16-17, 22-23, 28-29, 34-35, 40-41
+      *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+2];
+    }
+    
+    return trigNSW_output;
   }
 
   if(region==FORWARD){
     if ( TGC_TriggerSector<0 || TGC_TriggerSector>23 ) return 0;
-    ////NSW Large Secor Info
-    int NSW_TriggerSecot=(TGC_TriggerSector+1)/3*2;
-    if(NSW_TriggerSecot==16){NSW_TriggerSecot=0;}
-    if(NSW_TriggerSecot>=0 && NSW_TriggerSecot<=15){
-      *tirgNSW_output+=*m_buffer[side][NSW_TriggerSecot];
-    }
 
-    ///NSW Small Sector Info
-    NSW_TriggerSecot=2*(TGC_TriggerSector+2)/3-1;
-    if(NSW_TriggerSecot==-1){NSW_TriggerSecot=15;}
-    if(NSW_TriggerSecot>=0 && NSW_TriggerSecot<=15){
-      *tirgNSW_output+=*m_buffer[side][NSW_TriggerSecot];
-    }
-    return tirgNSW_output;
+    ////NSW Large Secor Info
+    int temp=int((TGC_TriggerSector-4)/6);
+    int NSW_TriggerSector=temp*4+int((TGC_TriggerSector-6*temp-4)/2)+2;
+    if(TGC_TriggerSector==0 || TGC_TriggerSector==1)
+      NSW_TriggerSector=15;
+    else if(TGC_TriggerSector==2 || TGC_TriggerSector==3)
+      NSW_TriggerSector=0;
+
+    //// SL input 0-1
+    *trigNSW_output+=*m_buffer[side][NSW_TriggerSector];
+    //// SL input 2-3, 4-5
+    if(TGC_TriggerSector==0 || TGC_TriggerSector==1){
+      *trigNSW_output+=*m_buffer[side][0];
+      *trigNSW_output+=*m_buffer[side][1];
+    }else if(TGC_TriggerSector==22 || TGC_TriggerSector==23){
+      *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+1];
+      *trigNSW_output+=*m_buffer[side][0];
+    }else{
+      *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+1];
+      *trigNSW_output+=*m_buffer[side][NSW_TriggerSector+2];
+    }    
+
+    return trigNSW_output;
   } 
 
 
@@ -98,7 +120,7 @@ std::shared_ptr<const NSWTrigOut> TGCNSW::getOutput(TGCRegionType region ,int si
 }
 
 
-void TGCNSW::setOutput(int side, int NSWTriggerProcesser, int NSWeta_8bit, int NSWphi_6bit, int NSWDtheta_5bit)
+void TGCNSW::setOutput(int side, int NSWTriggerProcesser, uint8_t NSWeta_8bit, uint8_t NSWphi_6bit, uint8_t NSWDtheta_5bit)
 {
   if ( (side<0)||(side>1) ) return;//side 0::Aside 1::Cside
   if ( (NSWTriggerProcesser<0) || (NSWTriggerProcesser>=NumberOfNSWTriggerProcesser) ) return;
@@ -108,7 +130,7 @@ void TGCNSW::setOutput(int side, int NSWTriggerProcesser, int NSWeta_8bit, int N
   m_buffer[side][NSWTriggerProcesser]->setPhi(NSWphi_6bit);
   m_buffer[side][NSWTriggerProcesser]->setDtheta(NSWDtheta_5bit);
 }
-
+ 
 void TGCNSW::eraseOutput()
 {
   for(int idx1=0; idx1<2; idx1++){
diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCNSWCoincidenceMap.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCNSWCoincidenceMap.cxx
index 3444599d5ef5f9616087896e99570b213ee2badd..2f6c13d5ca3e743a98d9c84850f07e3f424450a3 100644
--- a/Trigger/TrigT1/TrigT1TGC/src/TGCNSWCoincidenceMap.cxx
+++ b/Trigger/TrigT1/TrigT1TGC/src/TGCNSWCoincidenceMap.cxx
@@ -103,8 +103,8 @@ namespace LVL1TGCTrigger {
   //TGC-NSW Eta-Phi Coincidence
   int TGCNSWCoincidenceMap::TGCNSW_pTcalcu_EtaPhi(const NSWTrigOut *nswOut,int roi) const
   {
-    std::vector<int> nswEta_vec=nswOut->getNSWeta();
-    std::vector<int> nswPhi_vec=nswOut->getNSWphi();
+    std::vector<uint8_t> nswEta_vec=nswOut->getNSWeta();
+    std::vector<uint8_t> nswPhi_vec=nswOut->getNSWphi();
     int highest_pT=0;
 
     for(unsigned int nswTrk_id=0;nswTrk_id!=nswEta_vec.size();nswTrk_id++){
@@ -117,16 +117,16 @@ namespace LVL1TGCTrigger {
 	highest_pT=m_EtaPhi_CW[eta_decode][phi_decode][roi];
       }
     }
-
-    return highest_pT;
+    
+    return 1; /// just for now. before we finalize the strategy, we always return the lowest pT value if we can find the NSW hit
   }
 
 
   //TGC-NSW Eta-DeltaTheta Coincidence
    int TGCNSWCoincidenceMap::TGCNSW_pTcalcu_EtaDtheta(const NSWTrigOut *nswOut,int roi) const
   {
-    std::vector<int> nswEta_vec=nswOut->getNSWeta();
-    std::vector<int> nswDtheta_vec=nswOut->getNSWDtheta();
+    std::vector<uint8_t> nswEta_vec=nswOut->getNSWeta();
+    std::vector<uint8_t> nswDtheta_vec=nswOut->getNSWDtheta();
     int highest_pT=0;
 
     for(unsigned int nswTrk_id=0;nswTrk_id!=nswEta_vec.size();nswTrk_id++){
@@ -138,7 +138,7 @@ namespace LVL1TGCTrigger {
       }
     }
 
-    return highest_pT;
+    return 1; /// just for now. before we finalize the strategy, we always return the lowest pT value if we can find the NSW hit
   }
 
 
diff --git a/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx b/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx
index 1e59c66d6aa4bc3f4182aecab9cdd8a39962c2b3..1a163a133cde2a5f8e99ac710131571a731be369 100644
--- a/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx
+++ b/Trigger/TrigT1/TrigT1TGC/src/TGCSectorLogic.cxx
@@ -554,16 +554,20 @@ void TGCSectorLogic::doInnerCoincidence(const SG::ReadCondHandleKey<TGCTriggerDa
       int pos = 4*coincidenceOut->getR() +  coincidenceOut->getPhi();
       bool validFI = (m_mapEIFI->getFlagROI(pos, coincidenceOut->getIdSSC(), m_sectorId) == 1) && m_region==ENDCAP;
 
-      if(tgcArgs()->USE_NSW() && m_nswSide){ //this function will be implemented.There is a NSW on A-side only in early Run3;
-	doTGCNSWCoincidence(coincidenceOut);
+      if(tgcArgs()->USE_NSW() && m_nswSide){
+	if(tgcArgs()->FORCE_NSW_COIN()){
+	  coincidenceOut->setInnerCoincidenceFlag(true);
+	}
+	else{
+	  doTGCNSWCoincidence(coincidenceOut);
+	}
       }
       else if(!m_nswSide && validFI){
 	if(m_useEIFI){
 	  coincidenceOut->setInnerCoincidenceFlag( doTGCFICoincidence(coincidenceOut) );
 	}
       }
-      else{coincidenceOut->setInnerCoincidenceFlag(true);}
-
+      else{coincidenceOut->setInnerCoincidenceFlag(true);} // ?
     }
 
 
@@ -576,7 +580,6 @@ void TGCSectorLogic::doInnerCoincidence(const SG::ReadCondHandleKey<TGCTriggerDa
     int pt_EtaPhi=0,pt_EtaDtheta=0;
 
     //////// calculate pT //////
-
     std::shared_ptr<const NSWTrigOut> pNSWOut = m_nsw->getOutput(m_region,m_sideId,m_sectorId);
     pt_EtaPhi = m_mapNSW->TGCNSW_pTcalcu_EtaPhi(
 						pNSWOut.get(),
@@ -596,23 +599,8 @@ void TGCSectorLogic::doInnerCoincidence(const SG::ReadCondHandleKey<TGCTriggerDa
       coincidenceOut->setInnerCoincidenceFlag(true);
     }
 
-
-    //////  select lowest pT   ///// will be replaced with pT merger
-    int nsw_pT;
-    if(pt_EtaPhi==0 || pt_EtaDtheta==0){
-      nsw_pT = pt_EtaPhi!=0 ? pt_EtaPhi :  pt_EtaDtheta;
-    }
-    else{
-      nsw_pT = pt_EtaPhi<pt_EtaDtheta ? pt_EtaPhi :  pt_EtaDtheta;
-    }
-
-    if(nsw_pT>coincidenceOut->getpT()){
-      return;
-    }
-    else{
-      coincidenceOut->setpT(nsw_pT);
-      return;
-    }
+    return;
+    // pT merger will be implemented later
 
   }
 
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/ConfigSettings.py b/Trigger/TrigTools/TrigInDetConfig/python/ConfigSettings.py
index 23100250e56f6dbcb8ee8be73243e2bd33a1f909..4700a3f40a90c4dee04198713a777fc74e62aad7 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/ConfigSettings.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/ConfigSettings.py
@@ -124,6 +124,18 @@ class _ConfigSettings_bjet( _ConfigSettingsBase ):
       self._phiHalfWidth    = 0.4
 
 
+class _ConfigSettings_jetSuper( _ConfigSettingsBase ):
+   def __init__( self ):
+      _ConfigSettingsBase.__init__(self)
+      self._name     = "jetSuper"
+      self._suffix   = "JetSuper"
+      self._vertex   = "HLT_IDVertex_JetSuper"
+      self._adaptiveVertex = True
+      self._addSingleTrackVertices = True
+      self._roi      = "HLT_Roi_JetSuper"
+      self._doFullScan = True
+      self._pTmin      = 1*GeV
+
 
 class _ConfigSettings_minBias( _ConfigSettingsBase ):
    def __init__( self ):
@@ -439,6 +451,8 @@ _ConfigSettings = {
     "fullScan"    : _ConfigSettings_fullScan(),
     "FS"          : _ConfigSettings_fullScan(),
 
+    "jetSuper"    : _ConfigSettings_jetSuper(),
+
     "beamSpot"    : _ConfigSettings_beamSpot(),
     "BeamSpot"    : _ConfigSettings_beamSpot(),
     "beamSpotFS"  : _ConfigSettings_beamSpotFS(),
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
index b36d170491db97d306083917744cce881a305b07..5191179e5bc084a69ed149fc653338fde26614be 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetConfig.py
@@ -227,7 +227,7 @@ def InDetTrackSummaryHelperToolCfg(flags, name="InDetTrigSummaryHelper"):
   acc.addPublicTool( tool, primary=True )
   return acc
 
-def TrackSummaryToolCfg(flags, name="InDetTrackSummaryTool", summaryHelperTool=None, makePublic=True, useTRT=False):
+def TrackSummaryToolCfg(flags, name="InDetTrigTrackSummaryTool", summaryHelperTool=None, makePublic=True, useTRT=False):
   acc = ComponentAccumulator()
   if not summaryHelperTool:
     summaryHelperTool = acc.getPrimaryAndMerge( InDetTrackSummaryHelperToolCfg( flags, "InDetTrigSummaryHelper") )
@@ -930,7 +930,12 @@ def FitterToolCfg(flags):
   from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
   from TrkConfig.AtlasExtrapolatorToolsConfig import AtlasNavigatorCfg
   from TrkConfig.AtlasExtrapolatorConfig import InDetExtrapolatorCfg
-  cond_alg = None #TODO may need to pull AtlasTrackingGeometryCondAlg and use it later
+  from TrackingGeometryCondAlg.AtlasTrackingGeometryCondAlgConfig import (
+      TrackingGeometryCondAlgCfg)
+  cond_alg = TrackingGeometryCondAlgCfg(flags)
+  geom_cond_key = cond_alg.getPrimary().TrackingGeometryWriteKey
+  acc.merge(cond_alg)
+
   fitter = CompFactory.Trk.GlobalChi2Fitter(name                  = 'InDetTrigTrackFitter',
                                                  ExtrapolationTool     = acc.getPrimaryAndMerge(InDetExtrapolatorCfg(flags, name="InDetTrigExtrapolator")),
                                                  NavigatorTool         = acc.getPrimaryAndMerge(AtlasNavigatorCfg(flags, name="InDetTrigNavigator")),
@@ -952,7 +957,7 @@ def FitterToolCfg(flags):
                                                  Acceleration          = True,
                                                  #Momentum=1000.,
                                                  Momentum=0.,
-                                                 TrackingGeometryReadKey=cond_alg.TrackingGeometryWriteKey if cond_alg is not None else ''
+                                                 TrackingGeometryReadKey=geom_cond_key
                                                  )
   acc.addPublicTool(fitter, primary=True)
   #TODO come back to these settings                                                 
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetPriVtxConfig.py b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetPriVtxConfig.py
index 4c3ec8929422114987cbf20e7de97aaa4eaf536c..85850399447b0d24cfa8a7868e08f144508d9d7e 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetPriVtxConfig.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/TrigInDetPriVtxConfig.py
@@ -55,7 +55,7 @@ def iterativeVertexFinderCfg(flags, signature):
     acc = ComponentAccumulator()
     vtx_cuts = ConfiguredTrigVtxCuts()
     # TODO - should this have isHLT = True? This isn't set in the non-CA version
-    summary_tool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
+    summary_tool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
     extrapolator_acc = InDetExtrapolatorCfg(flags)
     extrapolator = extrapolator_acc.getPrimary()
     acc.merge(extrapolator_acc)
@@ -107,7 +107,7 @@ def adaptiveMultiVertexFinderCfg(flags, signature):
 
     acc = ComponentAccumulator()
     # TODO - should this have isHLT = True? This isn't set in the non-CA version
-    summary_tool = acc.popToolsAndMerge(InDetTrackSummaryToolCfg(flags))
+    summary_tool = acc.getPrimaryAndMerge(InDetTrackSummaryToolCfg(flags))
     extrapolator_acc = InDetExtrapolatorCfg(flags)
     extrapolator = extrapolator_acc.getPrimary()
     acc.merge(extrapolator_acc)
diff --git a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref
index 338ca457c6b9519d46276761ffe249b85a1820db..119caf8de84f981f5adb00538a0fa4eb9156bd95 100644
--- a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref
+++ b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref
@@ -293,11 +293,11 @@ HLT_2g50_tight_L1EM7_EMPTY:
 HLT_2g50_tight_L1EM7_UNPAIRED_ISO:
   eventCount: 0
 HLT_2j100_L1CEP-CjJ50:
-  eventCount: 2
+  eventCount: 1
   stepCounts:
-    0: 2
+    0: 1
   stepFeatures:
-    0: 4
+    0: 2
 HLT_2j100_L1CEP-CjJ60:
   eventCount: 0
 HLT_2j110_a10sd_cssk_pf_jes_ftf_0eta200_ExoticPTF0p0dR1p2_L13J50:
@@ -635,12 +635,12 @@ HLT_2j35_0eta240_020jvt_pf_ftf_bdl1r60_2j35_0eta240_020jvt_pf_ftf_presel4j25_L14
 HLT_2j35_0eta240_020jvt_pf_ftf_bdl1r60_2j35_0eta240_020jvt_pf_ftf_presel4j25_L14jJ15p0ETA25:
   eventCount: 1
   stepCounts:
-    0: 14
-    1: 8
+    0: 20
+    1: 9
     2: 1
   stepFeatures:
-    0: 28
-    1: 80
+    0: 40
+    1: 90
     2: 5
 HLT_2j35_0eta240_2j35_0eta240_L14J15p0ETA25:
   eventCount: 8
@@ -667,15 +667,15 @@ HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r60_3j35_pf_ftf_0eta320_presel5j25_L15J15p0ET
     1: 35
     2: 1
 HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r60_3j35_pf_ftf_0eta320_presel5j25_L15jJ15p0ETA25:
-  eventCount: 1
+  eventCount: 2
   stepCounts:
-    0: 8
-    1: 6
-    2: 1
+    0: 17
+    1: 11
+    2: 2
   stepFeatures:
-    0: 16
-    1: 70
-    2: 3
+    0: 34
+    1: 122
+    2: 8
 HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r70_2j35_0eta290_020jvt_pf_ftf_bdl1r85_L14J15p0ETA25:
   eventCount: 0
   stepCounts:
@@ -697,12 +697,12 @@ HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r70_2j35_0eta290_020jvt_pf_ftf_bdl1r85_presel
 HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r70_2j35_0eta290_020jvt_pf_ftf_bdl1r85_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 14
-    1: 10
+    0: 20
+    1: 11
   stepFeatures:
-    0: 28
-    1: 104
-    2: 21
+    0: 40
+    1: 116
+    2: 22
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_2j45_pf_ftf_L14J15p0ETA25:
   eventCount: 1
   stepCounts:
@@ -726,12 +726,12 @@ HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_2j45_pf_ftf_presel4j25_L14J15p0ETA25:
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_2j45_pf_ftf_presel4j25_L14jJ15p0ETA25:
   eventCount: 1
   stepCounts:
-    0: 14
-    1: 8
+    0: 20
+    1: 9
     2: 1
   stepFeatures:
-    0: 28
-    1: 71
+    0: 40
+    1: 81
     2: 6
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_3j45_pf_ftf_0eta320_L15J15p0ETA25:
   eventCount: 0
@@ -752,12 +752,12 @@ HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_3j45_pf_ftf_0eta320_presel5j25_L15J15p0ET
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_3j45_pf_ftf_0eta320_presel5j25_L15jJ15p0ETA25:
   eventCount: 1
   stepCounts:
-    0: 8
-    1: 3
+    0: 17
+    1: 4
     2: 1
   stepFeatures:
-    0: 16
-    1: 32
+    0: 34
+    1: 42
     2: 2
 HLT_2j45_pf_ftf_bdl1r60_xe50_cell_xe85_pfopufit_L12J15_XE55:
   eventCount: 1
@@ -790,7 +790,15 @@ HLT_2j45_pf_ftf_bdl1r70_j0_pf_ftf_HT300_j0_pf_ftf_DJMASS700j35_L1HT150-J20s5pETA
     1: 12
     2: 2
 HLT_2j45_pf_ftf_bdl1r70_j0_pf_ftf_HT300_j0_pf_ftf_DJMASS700j35_L1jHT150-jJ20s5pETA31_jMJJ-400-CF:
-  eventCount: 0
+  eventCount: 1
+  stepCounts:
+    0: 1
+    1: 1
+    2: 1
+  stepFeatures:
+    0: 3
+    1: 14
+    2: 2
 HLT_2j55_0eta290_020jvt_pf_ftf_bdl1r60_2j55_pf_ftf_0eta320_L14J15p0ETA25:
   eventCount: 0
   stepCounts:
@@ -812,10 +820,10 @@ HLT_2j55_0eta290_020jvt_pf_ftf_bdl1r60_2j55_pf_ftf_0eta320_presel4j25_L14J15p0ET
 HLT_2j55_0eta290_020jvt_pf_ftf_bdl1r60_2j55_pf_ftf_0eta320_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 14
+    0: 20
     1: 6
   stepFeatures:
-    0: 28
+    0: 40
     1: 48
     2: 3
 HLT_2mu10_bJpsimumu_L12MU8F:
@@ -926,6 +934,19 @@ HLT_2mu4_bBmumu_L1BPH-2M9-0DR15-2MU3V:
   eventCount: 0
 HLT_2mu4_bBmumu_Lxy0_L1BPH-2M9-0DR15-2MU3V:
   eventCount: 0
+HLT_2mu4_bBmumux_BcmumuD0Xloose_L12MU3V:
+  eventCount: 0
+  stepCounts:
+    0: 4
+    1: 3
+    2: 3
+    3: 1
+  stepFeatures:
+    0: 9
+    1: 9
+    2: 10
+    3: 6
+    4: 4
 HLT_2mu4_bBmumux_BcmumuDploose_L12MU3V:
   eventCount: 0
   stepCounts:
@@ -952,6 +973,19 @@ HLT_2mu4_bBmumux_BcmumuDsloose_L12MU3V:
     2: 10
     3: 6
     4: 4
+HLT_2mu4_bBmumux_BcmumuDstarloose_L12MU3V:
+  eventCount: 0
+  stepCounts:
+    0: 4
+    1: 3
+    2: 3
+    3: 1
+  stepFeatures:
+    0: 9
+    1: 9
+    2: 10
+    3: 6
+    4: 4
 HLT_2mu4_bBmumux_BcmumuPi_L12MU3V:
   eventCount: 0
   stepCounts:
@@ -1398,12 +1432,12 @@ HLT_3j35_0eta290_020jvt_pf_ftf_bdl1r70_j35_pf_ftf_0eta320_presel4j25_L14J15p0ETA
 HLT_3j35_0eta290_020jvt_pf_ftf_bdl1r70_j35_pf_ftf_0eta320_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 14
-    1: 12
+    0: 20
+    1: 14
   stepFeatures:
-    0: 28
-    1: 124
-    2: 10
+    0: 40
+    1: 143
+    2: 11
 HLT_3j35_pf_ftf_bdl1r60_xe50_cell_xe70_pfopufit_L13J15p0ETA25_XE40:
   eventCount: 0
   stepCounts:
@@ -1470,10 +1504,10 @@ HLT_3j65_0eta290_020jvt_pf_ftf_bdl1r77_presel3j45_L13J35p0ETA23:
 HLT_3j65_0eta290_020jvt_pf_ftf_bdl1r77_presel3j45_L13jJ35p0ETA23:
   eventCount: 0
   stepCounts:
-    0: 11
+    0: 12
     1: 7
   stepFeatures:
-    0: 11
+    0: 12
     1: 23
     2: 6
 HLT_3j65_0eta290_020jvt_pf_ftf_bdl1r85_L1J45p0ETA21_3J15p0ETA25:
@@ -1667,12 +1701,12 @@ HLT_4j35_0eta290_020jvt_pf_ftf_bdl1r77_presel4j25_L14J15p0ETA25:
 HLT_4j35_0eta290_020jvt_pf_ftf_bdl1r77_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 14
-    1: 10
+    0: 20
+    1: 11
   stepFeatures:
-    0: 14
-    1: 52
-    2: 9
+    0: 20
+    1: 58
+    2: 10
 HLT_4j35_0eta290_020jvt_pf_ftf_bdl1r85_L1J45p0ETA21_3J15p0ETA25:
   eventCount: 0
   stepCounts:
@@ -1729,11 +1763,11 @@ HLT_5j35_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_bdl1r60_presel6c25_L14J
 HLT_5j35_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_bdl1r60_presel6c25_L14jJ15:
   eventCount: 2
   stepCounts:
-    0: 13
+    0: 15
     1: 5
     2: 2
   stepFeatures:
-    0: 26
+    0: 30
     1: 59
     2: 2
 HLT_5j45_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_bdl1r60_L14J15:
@@ -1755,10 +1789,10 @@ HLT_5j45_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_bdl1r60_presel6c25_L14J
 HLT_5j45_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_bdl1r60_presel6c25_L14jJ15:
   eventCount: 0
   stepCounts:
-    0: 13
+    0: 15
     1: 1
   stepFeatures:
-    0: 26
+    0: 30
     1: 11
 HLT_5j70_0eta240_L14J15:
   eventCount: 0
@@ -1939,10 +1973,10 @@ HLT_6j35_pf_ftf_0eta240_020jvt_presel6c25_L14J15:
 HLT_6j35_pf_ftf_0eta240_020jvt_presel6c25_L14jJ15:
   eventCount: 1
   stepCounts:
-    0: 13
+    0: 15
     1: 1
   stepFeatures:
-    0: 13
+    0: 15
     1: 6
 HLT_6j35_pf_ftf_0eta240_050jvt_L14J15:
   eventCount: 1
@@ -2007,9 +2041,9 @@ HLT_6j45_pf_ftf_0eta240_020jvt_presel6c25_L14J15:
 HLT_6j45_pf_ftf_0eta240_020jvt_presel6c25_L14jJ15:
   eventCount: 0
   stepCounts:
-    0: 13
+    0: 15
   stepFeatures:
-    0: 13
+    0: 15
 HLT_6j45_pf_ftf_0eta240_050jvt_L14J15:
   eventCount: 0
   stepCounts:
@@ -2371,7 +2405,19 @@ HLT_e20_lhloose_L1EM7_AFP_A_AND_C:
 HLT_e20_lhloose_L1EM7_AFP_A_OR_C:
   eventCount: 0
 HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM15M:
-  eventCount: 0
+  eventCount: 1
+  stepCounts:
+    0: 1
+    1: 1
+    2: 1
+    3: 1
+    4: 1
+  stepFeatures:
+    0: 1
+    1: 1
+    2: 1
+    3: 1
+    4: 1
 HLT_e20_lhvloose_L1EM15VH:
   eventCount: 6
   stepCounts:
@@ -4644,7 +4690,23 @@ HLT_g20_tight_icaloloose_j35_pf_ftf_bdl1r77_3j35_pf_ftf_0eta490_j0_pf_ftf_DJMASS
     5: 31
     6: 3
 HLT_g20_tight_icaloloose_j35_pf_ftf_bdl1r77_3j35_pf_ftf_0eta490_j0_pf_ftf_DJMASS500j35_L1eEM18M_jMJJ-300-NFF:
-  eventCount: 0
+  eventCount: 1
+  stepCounts:
+    0: 1
+    1: 1
+    2: 1
+    3: 1
+    4: 1
+    5: 1
+    6: 1
+  stepFeatures:
+    0: 1
+    1: 1
+    2: 1
+    3: 1
+    4: 3
+    5: 16
+    6: 2
 HLT_g22_tight_L1EM15VHI:
   eventCount: 6
   stepCounts:
@@ -5361,15 +5423,15 @@ HLT_g45_loose_6j45_L14J15p0ETA25:
 HLT_g45_loose_6j45_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 8
-    1: 6
-    2: 6
-    3: 5
+    0: 4
+    1: 3
+    2: 3
+    3: 2
   stepFeatures:
-    0: 13
-    1: 9
-    2: 9
-    3: 5
+    0: 9
+    1: 7
+    2: 7
+    3: 2
 HLT_g45_tight_icaloloose_2j55_pf_ftf_0eta200_ExoticPTF0p0dR0p4_L1EM22VHI:
   eventCount: 0
   stepCounts:
@@ -5951,15 +6013,15 @@ HLT_j100_0eta290_020jvt_pf_ftf_boffperf_preselj80_L1J50:
     1: 18
     2: 18
 HLT_j100_0eta290_020jvt_pf_ftf_boffperf_preselj80_L1jJ50:
-  eventCount: 9
+  eventCount: 10
   stepCounts:
-    0: 11
-    1: 9
-    2: 9
+    0: 12
+    1: 10
+    2: 10
   stepFeatures:
-    0: 11
-    1: 17
-    2: 17
+    0: 12
+    1: 18
+    2: 18
 HLT_j100_pf_ftf_0eta320_j20_0eta290_pf_ftf_boffperf_L1HT190-J15s5pETA21:
   eventCount: 5
   stepCounts:
@@ -6211,11 +6273,11 @@ HLT_j150_0eta290_020jvt_pf_ftf_boffperf_preselj120_L1J100:
 HLT_j150_0eta290_020jvt_pf_ftf_boffperf_preselj120_L1jJ100:
   eventCount: 5
   stepCounts:
-    0: 8
+    0: 9
     1: 5
     2: 5
   stepFeatures:
-    0: 8
+    0: 9
     1: 9
     2: 9
 HLT_j150_0eta320_pf_ftf_2j55_0eta290_020jvt_pf_ftf_bdl1r70_L1J85_3J30:
@@ -6241,11 +6303,11 @@ HLT_j150_0eta320_pf_ftf_2j55_0eta290_020jvt_pf_ftf_bdl1r70_preselj80XX2j45_L1J85
 HLT_j150_0eta320_pf_ftf_2j55_0eta290_020jvt_pf_ftf_bdl1r70_preselj80XX2j45_L1jJ85_3jJ30:
   eventCount: 1
   stepCounts:
-    0: 8
+    0: 9
     1: 5
     2: 1
   stepFeatures:
-    0: 16
+    0: 18
     1: 27
     2: 4
 HLT_j15_320eta490_L1RD0_FILLED:
@@ -6434,10 +6496,10 @@ HLT_j175_a10sd_cssk_pf_jes_ftf_preselj140_L1J50:
 HLT_j175_a10sd_cssk_pf_jes_ftf_preselj140_L1jJ50:
   eventCount: 7
   stepCounts:
-    0: 13
+    0: 14
     1: 7
   stepFeatures:
-    0: 13
+    0: 14
     1: 10
 HLT_j175_a10sd_pf_nojcalib_ftf_0eta200_TracklessdR1p2_L1J100:
   eventCount: 0
@@ -6454,11 +6516,11 @@ HLT_j175_a10t_lcw_jes_L1J50:
   stepFeatures:
     0: 14
 HLT_j175_a10t_lcw_jes_L1jJ50:
-  eventCount: 9
+  eventCount: 10
   stepCounts:
-    0: 9
+    0: 10
   stepFeatures:
-    0: 15
+    0: 16
 HLT_j175_pf_ftf_preselj140_L1J50:
   eventCount: 4
   stepCounts:
@@ -6538,15 +6600,15 @@ HLT_j20_PhysicsTLA_L1HT190-J15s5pETA21:
     1: 57
     2: 5
 HLT_j20_PhysicsTLA_L1HT190-jJ15s5pETA21:
-  eventCount: 6
+  eventCount: 7
   stepCounts:
-    0: 6
-    1: 6
-    2: 6
+    0: 7
+    1: 7
+    2: 7
   stepFeatures:
-    0: 67
-    1: 67
-    2: 6
+    0: 77
+    1: 77
+    2: 7
 HLT_j20_PhysicsTLA_L1J100:
   eventCount: 5
   stepCounts:
@@ -6568,15 +6630,15 @@ HLT_j20_PhysicsTLA_L1J50_DETA20-J50J:
     1: 111
     2: 10
 HLT_j20_PhysicsTLA_L1jJ100:
-  eventCount: 11
+  eventCount: 14
   stepCounts:
-    0: 11
-    1: 11
-    2: 11
+    0: 14
+    1: 14
+    2: 14
   stepFeatures:
-    0: 110
-    1: 110
-    2: 11
+    0: 140
+    1: 140
+    2: 14
 HLT_j20_PhysicsTLA_L1jJ50_DETA20-jJ50J:
   eventCount: 10
   stepCounts:
@@ -6584,8 +6646,8 @@ HLT_j20_PhysicsTLA_L1jJ50_DETA20-jJ50J:
     1: 10
     2: 10
   stepFeatures:
-    0: 98
-    1: 98
+    0: 107
+    1: 107
     2: 10
 HLT_j225_0eta290_020jvt_pf_ftf_bmv2c1040_L1J100:
   eventCount: 1
@@ -8162,15 +8224,15 @@ HLT_j60_0eta290_020jvt_pf_ftf_boffperf_L1J50:
     1: 35
     2: 35
 HLT_j60_0eta290_020jvt_pf_ftf_boffperf_L1jJ50:
-  eventCount: 18
+  eventCount: 19
   stepCounts:
-    0: 18
-    1: 18
-    2: 18
+    0: 20
+    1: 19
+    2: 19
   stepFeatures:
-    0: 18
-    1: 46
-    2: 46
+    0: 20
+    1: 47
+    2: 47
 HLT_j60_320eta490_L1J20p31ETA49:
   eventCount: 0
 HLT_j60_320eta490_L1jJ20p31ETA49:
@@ -8322,13 +8384,13 @@ HLT_j75_320eta490_LArPEBHLT_L1J30p31ETA49:
 ? HLT_j75_pf_ftf_0eta240_020jvt_j50_pf_ftf_0eta240_020jvt_j35_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_SHARED_2j25_pf_ftf_0eta240_020jvt_bdl1r77_preselc60XXc45XXc25XXc20_L1jJ45p0ETA21_3jJ15p0ETA25
 : eventCount: 2
   stepCounts:
-    0: 15
-    1: 7
+    0: 17
+    1: 8
     2: 2
   stepFeatures:
-    0: 75
-    1: 156
-    2: 7
+    0: 85
+    1: 171
+    2: 8
 ? HLT_j75_pf_ftf_0eta240_020jvt_j50_pf_ftf_0eta240_020jvt_j35_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_SHARED_2j25_pf_ftf_0eta240_020jvt_bdl1r85_L1J45p0ETA21_3J15p0ETA25
 : eventCount: 4
   stepCounts:
@@ -8378,12 +8440,12 @@ HLT_j75_320eta490_LArPEBHLT_L1J30p31ETA49:
 ? HLT_j75_pf_ftf_0eta240_020jvt_j50_pf_ftf_0eta240_020jvt_j35_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_SHARED_3j25_pf_ftf_0eta240_020jvt_bdl1r85_preselc60XXc45XXc25XXc20_L1jJ45p0ETA21_3jJ15p0ETA25
 : eventCount: 0
   stepCounts:
-    0: 15
-    1: 7
+    0: 17
+    1: 8
   stepFeatures:
-    0: 75
-    1: 156
-    2: 10
+    0: 85
+    1: 171
+    2: 11
 ? HLT_j75_pf_ftf_0eta240_020jvt_j50_pf_ftf_0eta240_020jvt_j35_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_SHARED_j35_pf_ftf_0eta240_020jvt_bdl1r60_j25_pf_ftf_0eta240_020jvt_bdl1r60_L1J45p0ETA21_3J15p0ETA25
 : eventCount: 1
   stepCounts:
@@ -8407,13 +8469,13 @@ HLT_j75_320eta490_LArPEBHLT_L1J30p31ETA49:
 ? HLT_j75_pf_ftf_0eta240_020jvt_j50_pf_ftf_0eta240_020jvt_j35_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_SHARED_j35_pf_ftf_0eta240_020jvt_bdl1r60_j25_pf_ftf_0eta240_020jvt_bdl1r60_preselc60XXc45XXc25XXc20_L1jJ45p0ETA21_3jJ15p0ETA25
 : eventCount: 1
   stepCounts:
-    0: 15
-    1: 7
+    0: 17
+    1: 8
     2: 1
   stepFeatures:
-    0: 90
-    1: 191
-    2: 10
+    0: 102
+    1: 209
+    2: 12
 ? HLT_j75_pf_ftf_0eta240_020jvt_j50_pf_ftf_0eta240_020jvt_j35_pf_ftf_0eta240_020jvt_j25_pf_ftf_0eta240_020jvt_SHARED_j35_pf_ftf_0eta240_020jvt_bdl1r70_j25_pf_ftf_0eta240_020jvt_bdl1r70_L1J45p0ETA21_3J15p0ETA25
 : eventCount: 2
   stepCounts:
@@ -8484,15 +8546,15 @@ HLT_j80_0eta290_020jvt_pf_ftf_boffperf_L1J50:
     1: 25
     2: 25
 HLT_j80_0eta290_020jvt_pf_ftf_boffperf_L1jJ50:
-  eventCount: 12
+  eventCount: 13
   stepCounts:
-    0: 18
-    1: 12
-    2: 12
+    0: 20
+    1: 13
+    2: 13
   stepFeatures:
-    0: 18
-    1: 24
-    2: 24
+    0: 20
+    1: 25
+    2: 25
 HLT_j80_j60_SHARED_j40__L1J15:
   eventCount: 9
   stepCounts:
@@ -8566,11 +8628,11 @@ HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jv
 ? HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jvt_j20_pf_ftf_0eta240_020jvt_SHARED_2j20_pf_ftf_0eta240_020jvt_bdl1r77_preselc60XXc45XXc25XXc20_L1jJ45p0ETA21_3jJ15p0ETA25
 : eventCount: 3
   stepCounts:
-    0: 15
+    0: 17
     1: 8
     2: 3
   stepFeatures:
-    0: 75
+    0: 85
     1: 189
     2: 10
 ? HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jvt_j20_pf_ftf_0eta240_020jvt_SHARED_2j20_pf_ftf_0eta240_020jvt_bdl1r85_L1J45p0ETA21_3J15p0ETA25
@@ -8624,11 +8686,11 @@ HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jv
 ? HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jvt_j20_pf_ftf_0eta240_020jvt_SHARED_3j20_pf_ftf_0eta240_020jvt_bdl1r85_preselc60XXc45XXc25XXc20_L1jJ45p0ETA21_3jJ15p0ETA25
 : eventCount: 1
   stepCounts:
-    0: 15
+    0: 17
     1: 8
     2: 1
   stepFeatures:
-    0: 75
+    0: 85
     1: 189
     2: 13
 ? HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jvt_j20_pf_ftf_0eta240_020jvt_SHARED_j28_pf_ftf_0eta240_020jvt_bdl1r60_j20_pf_ftf_0eta240_020jvt_bdl1r60_L1J45p0ETA21_3J15p0ETA25
@@ -8654,11 +8716,11 @@ HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jv
 ? HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jvt_j20_pf_ftf_0eta240_020jvt_SHARED_j28_pf_ftf_0eta240_020jvt_bdl1r60_j20_pf_ftf_0eta240_020jvt_bdl1r60_preselc60XXc45XXc25XXc20_L1jJ45p0ETA21_3jJ15p0ETA25
 : eventCount: 2
   stepCounts:
-    0: 15
+    0: 17
     1: 8
     2: 2
   stepFeatures:
-    0: 90
+    0: 102
     1: 230
     2: 13
 ? HLT_j80_pf_ftf_0eta240_020jvt_j55_pf_ftf_0eta240_020jvt_j28_pf_ftf_0eta240_020jvt_j20_pf_ftf_0eta240_020jvt_SHARED_j28_pf_ftf_0eta240_020jvt_bdl1r70_j20_pf_ftf_0eta240_020jvt_bdl1r70_L1J45p0ETA21_3J15p0ETA25
@@ -8784,7 +8846,15 @@ HLT_j80_pf_ftf_0eta240_j55_pf_ftf_0eta240_j28_pf_ftf_0eta240_j20_pf_ftf_0eta240_
     1: 12
     2: 2
 ? HLT_j80_pf_ftf_0eta240_j60_pf_ftf_0eta320_j45_pf_ftf_320eta490_SHARED_2j45_pf_ftf_0eta290_bdl1r60_preselc60XXj45XXf40_L1jJ40p0ETA25_2jJ25_jJ20p31ETA49
-: eventCount: 0
+: eventCount: 1
+  stepCounts:
+    0: 1
+    1: 1
+    2: 1
+  stepFeatures:
+    0: 4
+    1: 12
+    2: 2
 HLT_j80_pf_ftf_0eta320_bdl1r70_j60_pf_ftf_0eta320_bdl1r85_j45_pf_ftf_320eta490_L1J40p0ETA25_2J25_J20p31ETA49:
   eventCount: 0
   stepCounts:
@@ -8805,6 +8875,13 @@ HLT_j80_pf_ftf_0eta320_bdl1r70_j60_pf_ftf_0eta320_bdl1r85_j45_pf_ftf_320eta490_L
     2: 2
 ? HLT_j80_pf_ftf_0eta320_bdl1r70_j60_pf_ftf_0eta320_bdl1r85_j45_pf_ftf_320eta490_preselj60XXj45XXf40_L1jJ40p0ETA25_2jJ25_jJ20p31ETA49
 : eventCount: 0
+  stepCounts:
+    0: 1
+    1: 1
+  stepFeatures:
+    0: 3
+    1: 7
+    2: 2
 HLT_j80_pf_ftf_bdl1r60_xe60_cell_L12J50_XE40:
   eventCount: 2
   stepCounts:
@@ -11508,6 +11585,8 @@ HLT_noalg_L1RD0_FILLED:
   eventCount: 0
 HLT_noalg_L1RD0_FIRSTEMPTY:
   eventCount: 0
+HLT_noalg_L1RD0_UNPAIRED_ISO:
+  eventCount: 0
 HLT_noalg_L1RD1_EMPTY:
   eventCount: 0
 HLT_noalg_L1RD2_EMPTY:
@@ -11620,15 +11699,15 @@ HLT_noalg_L1eTAU8:
   eventCount: 20
 HLT_noalg_L1gTE50:
   eventCount: 0
-HLT_noalg_L1gXE30:
+HLT_noalg_L1gXEJWOJ30:
   eventCount: 0
-HLT_noalg_L1gXE40:
+HLT_noalg_L1gXEJWOJ40:
   eventCount: 0
-HLT_noalg_L1gXE50:
+HLT_noalg_L1gXEJWOJ50:
   eventCount: 0
-HLT_noalg_L1gXEPUFIT30:
+HLT_noalg_L1gXENC30:
   eventCount: 0
-HLT_noalg_L1gXEPUFIT50:
+HLT_noalg_L1gXENC50:
   eventCount: 0
 HLT_noalg_L1gXERHO30:
   eventCount: 0
@@ -11639,11 +11718,11 @@ HLT_noalg_L1jEM15:
 HLT_noalg_L1jEM15M:
   eventCount: 0
 HLT_noalg_L1jJ100:
-  eventCount: 11
+  eventCount: 14
 HLT_noalg_L1jJ12:
   eventCount: 20
 HLT_noalg_L1jJ120:
-  eventCount: 9
+  eventCount: 13
 HLT_noalg_L1jJ12p0ETA25:
   eventCount: 20
 HLT_noalg_L1jJ15:
@@ -11651,11 +11730,11 @@ HLT_noalg_L1jJ15:
 HLT_noalg_L1jJ15p0ETA25:
   eventCount: 20
 HLT_noalg_L1jJ15p31ETA49:
-  eventCount: 0
+  eventCount: 10
 HLT_noalg_L1jJ20:
   eventCount: 20
 HLT_noalg_L1jJ20p31ETA49:
-  eventCount: 0
+  eventCount: 10
 HLT_noalg_L1jJ25:
   eventCount: 20
 HLT_noalg_L1jJ25p0ETA23:
@@ -11663,37 +11742,37 @@ HLT_noalg_L1jJ25p0ETA23:
 HLT_noalg_L1jJ30:
   eventCount: 20
 HLT_noalg_L1jJ30p31ETA49:
-  eventCount: 0
+  eventCount: 10
 HLT_noalg_L1jJ35p0ETA23:
-  eventCount: 19
+  eventCount: 20
 HLT_noalg_L1jJ40:
-  eventCount: 18
+  eventCount: 20
 HLT_noalg_L1jJ400:
   eventCount: 1
 HLT_noalg_L1jJ400_LAR:
   eventCount: 1
 HLT_noalg_L1jJ40p0ETA25:
-  eventCount: 18
+  eventCount: 20
 HLT_noalg_L1jJ45p0ETA21:
-  eventCount: 18
+  eventCount: 20
 HLT_noalg_L1jJ50:
-  eventCount: 18
+  eventCount: 20
 HLT_noalg_L1jJ50p31ETA49:
-  eventCount: 0
+  eventCount: 1
 HLT_noalg_L1jJ75:
-  eventCount: 15
+  eventCount: 19
 HLT_noalg_L1jJ75p31ETA49:
   eventCount: 0
 HLT_noalg_L1jJ85:
-  eventCount: 12
+  eventCount: 16
 HLT_noalg_L1jLJ100:
-  eventCount: 0
+  eventCount: 20
 HLT_noalg_L1jLJ140:
-  eventCount: 0
+  eventCount: 18
 HLT_noalg_L1jLJ160:
-  eventCount: 0
+  eventCount: 15
 HLT_noalg_L1jLJ80:
-  eventCount: 0
+  eventCount: 20
 HLT_noalg_L1jTAU12:
   eventCount: 0
 HLT_noalg_L1jTAU20:
@@ -13167,11 +13246,11 @@ HLT_unconvtrk260_hitdv_medium_L1J100:
 HLT_unconvtrk260_hitdv_medium_L1jJ100:
   eventCount: 0
   stepCounts:
-    0: 11
-    1: 11
+    0: 14
+    1: 14
   stepFeatures:
-    0: 11
-    1: 11
+    0: 14
+    1: 14
 HLT_unconvtrk260_hitdv_tight_L1J100:
   eventCount: 0
   stepCounts:
@@ -13183,11 +13262,11 @@ HLT_unconvtrk260_hitdv_tight_L1J100:
 HLT_unconvtrk260_hitdv_tight_L1jJ100:
   eventCount: 0
   stepCounts:
-    0: 11
-    1: 11
+    0: 14
+    1: 14
   stepFeatures:
-    0: 11
-    1: 11
+    0: 14
+    1: 14
 HLT_unconvtrk50_isohpttrack_L1XE50:
   eventCount: 3
   stepCounts:
diff --git a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoDAOD_v1Dev_grid.py b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoDAOD_v1Dev_grid.py
index 5b76c2787a5f0c07332c07efd65b6256f1ae0728..03d7362841ef88899269f0b30cc5c8ebda2ecba1 100755
--- a/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoDAOD_v1Dev_grid.py
+++ b/Trigger/TrigValidation/TrigAnalysisTest/test/test_trigAna_RDOtoDAOD_v1Dev_grid.py
@@ -44,7 +44,7 @@ aod2daod.input = ''
 aod2daod.forks = 4
 aod2daod.explicit_input = True
 aod2daod.args = '--inputAODFile=AOD.pool.root --sharedWriter=True --runNumber=300001 --digiSeedOffset1=1 --digiSeedOffset2=1 --outputDAODFile=DAOD.pool.root --reductionConf=PHYS'
-aod2daod.args += ' --preExec="default:from AthenaCommon.DetFlags import DetFlags; DetFlags.detdescr.all_setOff(); DetFlags.detdescr.Calo_setOn(); DetFlags.BField_setOn(); DetFlags.pileup.all_setOff(); DetFlags.overlay.all_setOff(); from AthenaMP.AthenaMPFlags import jobproperties as ampjp; ampjp.AthenaMPFlags.ChunkSize=100;"'
+aod2daod.args += ' --preExec="default:from AthenaCommon.DetFlags import DetFlags; DetFlags.detdescr.all_setOff(); DetFlags.detdescr.Calo_setOn(); DetFlags.BField_setOn(); DetFlags.pileup.all_setOff(); DetFlags.overlay.all_setOff(); DetFlags.digitize.all_setOff(); from AthenaMP.AthenaMPFlags import jobproperties as ampjp; ampjp.AthenaMPFlags.ChunkSize=100;"'
 aod2daod.args += ' --postExec="default:from IOVDbSvc.CondDB import conddb; conddb.addFolderSplitOnline(\\\"INDET\\\",\\\"/Indet/Onl/Beampos\\\",\\\"/Indet/Beampos\\\", className=\\\"AthenaAttributeList\\\"); from AthenaCommon.AlgSequence import AthSequencer; condSeq = AthSequencer(\\\"AthCondSeq\\\"); from BeamSpotConditions.BeamSpotConditionsConf import BeamSpotCondAlg; condSeq += BeamSpotCondAlg( \\\"BeamSpotCondAlg\\\" );"'
 
 test = Test.Test()
diff --git a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref
index be1c9693240f91c85bddd57c3338ab871bb5bb1f..34768a336982dac87bb56d13d6b0e9f05e5eb56e 100644
--- a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref
+++ b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref
@@ -272,9 +272,12 @@ HLT_2j35_0eta240_020jvt_pf_ftf_bdl1r60_2j35_0eta240_020jvt_pf_ftf_presel4j25_L14
 HLT_2j35_0eta240_020jvt_pf_ftf_bdl1r60_2j35_0eta240_020jvt_pf_ftf_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 11
+    0: 13
+    1: 2
   stepFeatures:
-    0: 22
+    0: 26
+    1: 16
+    2: 1
 HLT_2j35_0eta240_2j35_0eta240_L14J15p0ETA25:
   eventCount: 0
 HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r60_3j35_pf_ftf_0eta320_L15J15p0ETA25:
@@ -284,9 +287,9 @@ HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r60_3j35_pf_ftf_0eta320_presel5j25_L15J15p0ET
 HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r60_3j35_pf_ftf_0eta320_presel5j25_L15jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 5
+    0: 6
   stepFeatures:
-    0: 10
+    0: 12
 HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r70_2j35_0eta290_020jvt_pf_ftf_bdl1r85_L14J15p0ETA25:
   eventCount: 0
 HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r70_2j35_0eta290_020jvt_pf_ftf_bdl1r85_presel4j25_L14J15p0ETA25:
@@ -294,9 +297,12 @@ HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r70_2j35_0eta290_020jvt_pf_ftf_bdl1r85_presel
 HLT_2j35_0eta290_020jvt_pf_ftf_bdl1r70_2j35_0eta290_020jvt_pf_ftf_bdl1r85_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 11
+    0: 13
+    1: 2
   stepFeatures:
-    0: 22
+    0: 26
+    1: 16
+    2: 2
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_2j45_pf_ftf_L14J15p0ETA25:
   eventCount: 0
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_2j45_pf_ftf_presel4j25_L14J15p0ETA25:
@@ -304,9 +310,11 @@ HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_2j45_pf_ftf_presel4j25_L14J15p0ETA25:
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_2j45_pf_ftf_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 11
+    0: 13
+    1: 1
   stepFeatures:
-    0: 22
+    0: 26
+    1: 8
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_3j45_pf_ftf_0eta320_L15J15p0ETA25:
   eventCount: 0
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_3j45_pf_ftf_0eta320_presel5j25_L15J15p0ETA25:
@@ -314,9 +322,9 @@ HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_3j45_pf_ftf_0eta320_presel5j25_L15J15p0ET
 HLT_2j45_0eta290_020jvt_pf_ftf_bdl1r60_3j45_pf_ftf_0eta320_presel5j25_L15jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 5
+    0: 6
   stepFeatures:
-    0: 10
+    0: 12
 HLT_2j45_pf_ftf_bdl1r60_xe50_cell_xe85_pfopufit_L12J15_XE55:
   eventCount: 0
 HLT_2j45_pf_ftf_bdl1r60_xe50_cell_xe85_tcpufit_L12J15_XE55:
@@ -332,9 +340,9 @@ HLT_2j55_0eta290_020jvt_pf_ftf_bdl1r60_2j55_pf_ftf_0eta320_presel4j25_L14J15p0ET
 HLT_2j55_0eta290_020jvt_pf_ftf_bdl1r60_2j55_pf_ftf_0eta320_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 11
+    0: 13
   stepFeatures:
-    0: 22
+    0: 26
 HLT_2mu10_bJpsimumu_L12MU8F:
   eventCount: 0
 HLT_2mu10_bUpsimumu_L12MU8F:
@@ -373,6 +381,12 @@ HLT_2mu4_bBmumu_L1BPH-2M9-0DR15-2MU3V:
   eventCount: 0
 HLT_2mu4_bBmumu_Lxy0_L1BPH-2M9-0DR15-2MU3V:
   eventCount: 0
+HLT_2mu4_bBmumux_BcmumuD0Xloose_L12MU3V:
+  eventCount: 0
+  stepCounts:
+    0: 1
+  stepFeatures:
+    0: 2
 HLT_2mu4_bBmumux_BcmumuDploose_L12MU3V:
   eventCount: 0
   stepCounts:
@@ -385,6 +399,12 @@ HLT_2mu4_bBmumux_BcmumuDsloose_L12MU3V:
     0: 1
   stepFeatures:
     0: 2
+HLT_2mu4_bBmumux_BcmumuDstarloose_L12MU3V:
+  eventCount: 0
+  stepCounts:
+    0: 1
+  stepFeatures:
+    0: 2
 HLT_2mu4_bBmumux_BcmumuPi_L12MU3V:
   eventCount: 0
   stepCounts:
@@ -576,12 +596,12 @@ HLT_3j35_0eta290_020jvt_pf_ftf_bdl1r70_j35_pf_ftf_0eta320_presel4j25_L14J15p0ETA
 HLT_3j35_0eta290_020jvt_pf_ftf_bdl1r70_j35_pf_ftf_0eta320_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 11
-    1: 1
+    0: 13
+    1: 3
   stepFeatures:
-    0: 22
-    1: 7
-    2: 1
+    0: 26
+    1: 23
+    2: 2
 HLT_3j35_pf_ftf_bdl1r60_xe50_cell_xe70_pfopufit_L13J15p0ETA25_XE40:
   eventCount: 0
 HLT_3j35_pf_ftf_bdl1r60_xe50_cell_xe70_tcpufit_L13J15p0ETA25_XE40:
@@ -667,9 +687,12 @@ HLT_4j35_0eta290_020jvt_pf_ftf_bdl1r77_presel4j25_L14J15p0ETA25:
 HLT_4j35_0eta290_020jvt_pf_ftf_bdl1r77_presel4j25_L14jJ15p0ETA25:
   eventCount: 0
   stepCounts:
-    0: 11
+    0: 13
+    1: 2
   stepFeatures:
-    0: 11
+    0: 13
+    1: 8
+    2: 1
 HLT_4j35_0eta290_020jvt_pf_ftf_bdl1r85_L1J45p0ETA21_3J15p0ETA25:
   eventCount: 0
 HLT_4mu4_L14MU3V:
@@ -2057,15 +2080,15 @@ HLT_j100_0eta290_020jvt_pf_ftf_boffperf_preselj80_L1J50:
     1: 3
     2: 3
 HLT_j100_0eta290_020jvt_pf_ftf_boffperf_preselj80_L1jJ50:
-  eventCount: 1
+  eventCount: 2
   stepCounts:
-    0: 4
-    1: 1
-    2: 1
-  stepFeatures:
-    0: 4
+    0: 5
     1: 2
     2: 2
+  stepFeatures:
+    0: 5
+    1: 3
+    2: 3
 HLT_j100_pf_ftf_0eta320_j20_0eta290_pf_ftf_boffperf_L1HT190-J15s5pETA21:
   eventCount: 0
 HLT_j100_pf_ftf_bdl1r60_xe50_cell_xe85_pfopufit_L1XE55:
@@ -2224,6 +2247,10 @@ HLT_j150_0eta320_pf_ftf_2j55_0eta290_020jvt_pf_ftf_bdl1r70_preselj80XX2j45_L1J85
   eventCount: 0
 HLT_j150_0eta320_pf_ftf_2j55_0eta290_020jvt_pf_ftf_bdl1r70_preselj80XX2j45_L1jJ85_3jJ30:
   eventCount: 0
+  stepCounts:
+    0: 1
+  stepFeatures:
+    0: 2
 HLT_j15_320eta490_L1RD0_FILLED:
   eventCount: 10
   stepCounts:
@@ -2341,25 +2368,25 @@ HLT_j20_PhysicsTLA_L1J50_DETA20-J50J:
     1: 6
     2: 1
 HLT_j20_PhysicsTLA_L1jJ100:
-  eventCount: 4
+  eventCount: 5
   stepCounts:
-    0: 4
-    1: 4
-    2: 4
+    0: 5
+    1: 5
+    2: 5
   stepFeatures:
-    0: 16
-    1: 16
-    2: 4
+    0: 22
+    1: 22
+    2: 5
 HLT_j20_PhysicsTLA_L1jJ50_DETA20-jJ50J:
-  eventCount: 3
+  eventCount: 2
   stepCounts:
-    0: 3
-    1: 3
-    2: 3
+    0: 2
+    1: 2
+    2: 2
   stepFeatures:
-    0: 13
-    1: 13
-    2: 3
+    0: 9
+    1: 9
+    2: 2
 HLT_j225_0eta290_020jvt_pf_ftf_bmv2c1040_L1J100:
   eventCount: 0
 HLT_j225_0eta290_020jvt_pf_ftf_bmv2c1040_preselj180_L1J100:
@@ -2495,15 +2522,15 @@ HLT_j30_0eta290_020jvt_pf_ftf_boffperf_L1J20:
     1: 28
     2: 28
 HLT_j30_0eta290_020jvt_pf_ftf_boffperf_L1jJ20:
-  eventCount: 22
+  eventCount: 23
   stepCounts:
-    0: 39
-    1: 22
-    2: 22
+    0: 41
+    1: 23
+    2: 23
   stepFeatures:
-    0: 39
-    1: 44
-    2: 44
+    0: 41
+    1: 45
+    2: 45
 HLT_j35_320eta490_L1RD0_FILLED:
   eventCount: 2
   stepCounts:
@@ -2691,15 +2718,15 @@ HLT_j45_0eta290_020jvt_pf_ftf_boffperf_L1J20:
     1: 20
     2: 20
 HLT_j45_0eta290_020jvt_pf_ftf_boffperf_L1jJ20:
-  eventCount: 13
+  eventCount: 14
   stepCounts:
-    0: 39
-    1: 13
-    2: 13
+    0: 41
+    1: 14
+    2: 14
   stepFeatures:
-    0: 39
-    1: 21
-    2: 21
+    0: 41
+    1: 22
+    2: 22
 HLT_j45_0eta290_020jvt_pf_ftf_boffperf_split_L1J20:
   eventCount: 12
   stepCounts:
@@ -2717,7 +2744,11 @@ HLT_j45_320eta490_L1J15p31ETA49:
   stepFeatures:
     0: 1
 HLT_j45_320eta490_L1jJ15p31ETA49:
-  eventCount: 0
+  eventCount: 1
+  stepCounts:
+    0: 1
+  stepFeatures:
+    0: 1
 HLT_j45_L1J15:
   eventCount: 0
 HLT_j45_cssk_nojcalib_L1J15:
@@ -2797,13 +2828,13 @@ HLT_j45_pf_ftf_preselj20_L1RD0_FILLED:
     0: 44
     1: 25
 HLT_j45_pf_ftf_preselj20_L1jJ15:
-  eventCount: 15
+  eventCount: 16
   stepCounts:
-    0: 37
-    1: 15
+    0: 39
+    1: 16
   stepFeatures:
-    0: 37
-    1: 24
+    0: 39
+    1: 25
 HLT_j45_pf_nojcalib_ftf_L1J15:
   eventCount: 12
   stepCounts:
@@ -3011,15 +3042,15 @@ HLT_j60_0eta290_020jvt_pf_ftf_boffperf_L1J50:
     1: 5
     2: 5
 HLT_j60_0eta290_020jvt_pf_ftf_boffperf_L1jJ50:
-  eventCount: 7
+  eventCount: 8
   stepCounts:
-    0: 16
-    1: 7
-    2: 7
-  stepFeatures:
-    0: 16
+    0: 22
     1: 8
     2: 8
+  stepFeatures:
+    0: 22
+    1: 9
+    2: 9
 HLT_j60_320eta490_L1J20p31ETA49:
   eventCount: 1
   stepCounts:
@@ -3027,7 +3058,11 @@ HLT_j60_320eta490_L1J20p31ETA49:
   stepFeatures:
     0: 1
 HLT_j60_320eta490_L1jJ20p31ETA49:
-  eventCount: 0
+  eventCount: 1
+  stepCounts:
+    0: 1
+  stepFeatures:
+    0: 1
 HLT_j60_j0_FBDJSHARED_L1J20:
   eventCount: 1
   stepCounts:
@@ -3047,10 +3082,10 @@ HLT_j60_pf_ftf_preselj50_L1J20:
 HLT_j60_pf_ftf_preselj50_L1jJ20:
   eventCount: 8
   stepCounts:
-    0: 15
+    0: 16
     1: 8
   stepFeatures:
-    0: 15
+    0: 16
     1: 10
 HLT_j70_0eta320_j50_0eta490_j0_DJMASS1000j50dphi200x400deta_L1MJJ-500-NFF:
   eventCount: 0
@@ -3145,15 +3180,15 @@ HLT_j80_0eta290_020jvt_pf_ftf_boffperf_L1J50:
     1: 5
     2: 5
 HLT_j80_0eta290_020jvt_pf_ftf_boffperf_L1jJ50:
-  eventCount: 4
+  eventCount: 5
   stepCounts:
-    0: 16
-    1: 4
-    2: 4
-  stepFeatures:
-    0: 16
+    0: 22
     1: 5
     2: 5
+  stepFeatures:
+    0: 22
+    1: 6
+    2: 6
 HLT_j80_j60_SHARED_j40__L1J15:
   eventCount: 2
   stepCounts:
@@ -3407,10 +3442,10 @@ HLT_j85_pf_ftf_preselj50_L1J20:
 HLT_j85_pf_ftf_preselj50_L1jJ20:
   eventCount: 5
   stepCounts:
-    0: 15
+    0: 16
     1: 5
   stepFeatures:
-    0: 15
+    0: 16
     1: 7
 HLT_l1topodebug_legacy_L1All:
   eventCount: 0
@@ -4581,6 +4616,8 @@ HLT_noalg_L1RD0_FILLED:
   eventCount: 0
 HLT_noalg_L1RD0_FIRSTEMPTY:
   eventCount: 0
+HLT_noalg_L1RD0_UNPAIRED_ISO:
+  eventCount: 0
 HLT_noalg_L1RD1_EMPTY:
   eventCount: 0
 HLT_noalg_L1RD2_EMPTY:
@@ -4693,15 +4730,15 @@ HLT_noalg_L1eTAU8:
   eventCount: 44
 HLT_noalg_L1gTE50:
   eventCount: 0
-HLT_noalg_L1gXE30:
+HLT_noalg_L1gXEJWOJ30:
   eventCount: 0
-HLT_noalg_L1gXE40:
+HLT_noalg_L1gXEJWOJ40:
   eventCount: 0
-HLT_noalg_L1gXE50:
+HLT_noalg_L1gXEJWOJ50:
   eventCount: 0
-HLT_noalg_L1gXEPUFIT30:
+HLT_noalg_L1gXENC30:
   eventCount: 0
-HLT_noalg_L1gXEPUFIT50:
+HLT_noalg_L1gXENC50:
   eventCount: 0
 HLT_noalg_L1gXERHO30:
   eventCount: 0
@@ -4712,61 +4749,61 @@ HLT_noalg_L1jEM15:
 HLT_noalg_L1jEM15M:
   eventCount: 0
 HLT_noalg_L1jJ100:
-  eventCount: 4
+  eventCount: 5
 HLT_noalg_L1jJ12:
-  eventCount: 39
+  eventCount: 41
 HLT_noalg_L1jJ120:
-  eventCount: 3
+  eventCount: 4
 HLT_noalg_L1jJ12p0ETA25:
-  eventCount: 39
+  eventCount: 41
 HLT_noalg_L1jJ15:
-  eventCount: 39
+  eventCount: 41
 HLT_noalg_L1jJ15p0ETA25:
-  eventCount: 39
+  eventCount: 41
 HLT_noalg_L1jJ15p31ETA49:
-  eventCount: 0
+  eventCount: 3
 HLT_noalg_L1jJ20:
-  eventCount: 39
+  eventCount: 41
 HLT_noalg_L1jJ20p31ETA49:
-  eventCount: 0
+  eventCount: 3
 HLT_noalg_L1jJ25:
-  eventCount: 39
+  eventCount: 41
 HLT_noalg_L1jJ25p0ETA23:
-  eventCount: 39
+  eventCount: 41
 HLT_noalg_L1jJ30:
-  eventCount: 39
+  eventCount: 41
 HLT_noalg_L1jJ30p31ETA49:
-  eventCount: 0
+  eventCount: 3
 HLT_noalg_L1jJ35p0ETA23:
-  eventCount: 34
+  eventCount: 36
 HLT_noalg_L1jJ40:
-  eventCount: 24
+  eventCount: 28
 HLT_noalg_L1jJ400:
   eventCount: 0
 HLT_noalg_L1jJ400_LAR:
   eventCount: 0
 HLT_noalg_L1jJ40p0ETA25:
-  eventCount: 24
+  eventCount: 28
 HLT_noalg_L1jJ45p0ETA21:
-  eventCount: 18
+  eventCount: 22
 HLT_noalg_L1jJ50:
-  eventCount: 16
+  eventCount: 22
 HLT_noalg_L1jJ50p31ETA49:
-  eventCount: 0
+  eventCount: 1
 HLT_noalg_L1jJ75:
-  eventCount: 8
+  eventCount: 9
 HLT_noalg_L1jJ75p31ETA49:
   eventCount: 0
 HLT_noalg_L1jJ85:
-  eventCount: 6
+  eventCount: 7
 HLT_noalg_L1jLJ100:
-  eventCount: 0
+  eventCount: 35
 HLT_noalg_L1jLJ140:
-  eventCount: 0
+  eventCount: 10
 HLT_noalg_L1jLJ160:
-  eventCount: 0
+  eventCount: 7
 HLT_noalg_L1jLJ80:
-  eventCount: 0
+  eventCount: 44
 HLT_noalg_L1jTAU12:
   eventCount: 0
 HLT_noalg_L1jTAU20:
@@ -5568,21 +5605,21 @@ HLT_unconvtrk260_hitdv_medium_L1J100:
 HLT_unconvtrk260_hitdv_medium_L1jJ100:
   eventCount: 0
   stepCounts:
-    0: 4
-    1: 4
+    0: 5
+    1: 5
   stepFeatures:
-    0: 4
-    1: 4
+    0: 5
+    1: 5
 HLT_unconvtrk260_hitdv_tight_L1J100:
   eventCount: 0
 HLT_unconvtrk260_hitdv_tight_L1jJ100:
   eventCount: 0
   stepCounts:
-    0: 4
-    1: 4
+    0: 5
+    1: 5
   stepFeatures:
-    0: 4
-    1: 4
+    0: 5
+    1: 5
 HLT_unconvtrk50_isohpttrack_L1XE50:
   eventCount: 0
   stepCounts:
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_T0MonTrf_build.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_T0MonTrf_build.py
index f98892a64e91dc234698222c059f314468b9a125..02821b38c56cefd1232b14242e99ab5409cbfbea 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_T0MonTrf_build.py
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_T0MonTrf_build.py
@@ -21,6 +21,7 @@ hlt.args += ' --outputBSFile=RAW.pool.root'
 hlt.args += ' --outputHIST_HLTMONFile=hltmon.root'
 hlt.args += ' --outputDRAW_TRIGCOSTFile=TRIGCOST.pool.root'
 hlt.args += ' --outputNTUP_TRIGCOSTFile=cost.ntup.root'
+hlt.args += ' --runNumber 360026'  # RunNumber is set by Panda, but ignored by Trf to avoid changes from !48070
 hlt.input = 'data'
 
 #====================================================================================================
diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_T0Mon_grid.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_T0Mon_grid.py
index 9e1c9acc9801d76dbb665ccf2ea0c9bad858d60a..5a224189155d04609c95b206b8fd5edcef3eb3b7 100755
--- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_T0Mon_grid.py
+++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_v1PhysP1_T0Mon_grid.py
@@ -67,7 +67,7 @@ tzmon.executable = 'Run3DQTestingDriver.py'
 tzmon.input = ''
 tzmon.args = '--threads=4'
 tzmon.args += ' --dqOffByDefault'
-tzmon.args += ' Input.Files="[\'AOD.pool.root\']" DQ.Steering.doHLTMon=True'
+tzmon.args += ' Input.Files="[\'AOD.pool.root\']" DQ.Steering.doHLTMon=True Trigger.triggerMenuSetup=\'PhysicsP1_pp_run3_v1\''
 
 # The full test
 test = Test.Test()
diff --git a/Trigger/TrigValidation/TriggerTest/share/checklogTriggerTest.conf b/Trigger/TrigValidation/TriggerTest/share/checklogTriggerTest.conf
index 94875e1b69f1501db17a925ff8684a4cd90565e3..018b1ef0ec8a6e0aed39566609238cfb84f0010c 100644
--- a/Trigger/TrigValidation/TriggerTest/share/checklogTriggerTest.conf
+++ b/Trigger/TrigValidation/TriggerTest/share/checklogTriggerTest.conf
@@ -2,3 +2,5 @@ ignore 'WARNING - AttributeError for beamGasHitsFile'
 ignore 'WARNING - AttributeError for cavernHitsFile'
 ignore 'WARNING - AttributeError for beamHaloHitsFile'
 ignore 'TrailerOverflowError'
+ignore 'Py:Configurable     ERROR attempt to add a duplicate \(egammaFSRecoSequence\.HLTCaloCellMakerEGFS\) \.\.\. dupe ignored'
+ignore 'Py:Configurable     ERROR attempt to add a duplicate \(egammaFSRecoSequence\.HLTEventShapeMakerEG\) \.\.\. dupe ignored'
diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
index 474989fbca17be36bc89389869209993ca6a4558..1c14200a7aa3a7e648989339a1b520b9b8b17d53 100644
--- a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
+++ b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py
@@ -113,6 +113,8 @@ three_output_taggers = [
     'dips20210517',
     'DL1d20210519r22',          # uses dipsLoose
     'DL1d20210528r22',          # uses IP3D track selection dips
+    'dipsLoose20210729',        # DIPS offline retraining in r22
+    'DL1dv00',                  # first 'official' offlline r22
 ]
 BTagOutput_highLevelTaggers = [
     'MV2c10_discriminant',
@@ -341,14 +343,14 @@ TriggerHLTListRun3 = [
     ('xAOD::CaloClusterTrigAuxContainer#HLT_TopoCaloClustersHIRoIAux.nCells',   'BS ESD AODFULL', 'Egamma'),
 
     # These are for precision photon and precision Electron Keeping same names as in Run2
-    ('xAOD::ElectronContainer#HLT_egamma_Electrons',                'BS ESD AODFULL', 'Egamma', 'inViews:precisionElectronViews'),
+    ('xAOD::ElectronContainer#HLT_egamma_Electrons',                'BS ESD AODFULL', 'Egamma', 'inViews:precisionElectronViews,precisionHIElectronViews'),
     ('xAOD::ElectronAuxContainer#HLT_egamma_ElectronsAux.'+ElVars,     'BS ESD AODFULL', 'Egamma'),
     ('xAOD::ElectronContainer#HLT_egamma_Electrons_GSF',                'BS ESD AODFULL', 'Egamma', 'inViews:precisionElectronViews_GSF'),
     ('xAOD::ElectronAuxContainer#HLT_egamma_Electrons_GSFAux.'+ElVars,     'BS ESD AODFULL', 'Egamma'),
     ('xAOD::ElectronContainer#HLT_egamma_Electrons_LRT',                'BS ESD AODFULL', 'Egamma', 'inViews:precisionElectronViews_LRT'),
     ('xAOD::ElectronAuxContainer#HLT_egamma_Electrons_LRTAux.'+ElVars,     'BS ESD AODFULL', 'Egamma'),
 
-    ('xAOD::PhotonContainer#HLT_egamma_Photons',                    'BS ESD AODFULL', 'Egamma', 'inViews:precisionPhotonViews'),
+    ('xAOD::PhotonContainer#HLT_egamma_Photons',                    'BS ESD AODFULL', 'Egamma', 'inViews:precisionPhotonViews,precisionHIPhotonViews'),
     ('xAOD::PhotonAuxContainer#HLT_egamma_PhotonsAux.'+PhVars,         'BS ESD AODFULL', 'Egamma'),
 
     ('TrigRoiDescriptorCollection#HLT_Roi_FastElectron',            'BS ESD AODFULL', 'Egamma'),
@@ -507,6 +509,7 @@ TriggerHLTListRun3 = [
     ('xAOD::TrackParticleAuxContainer#HLT_IDTrack_Tau_IDTrigAux.',          'BS ESD AODFULL', 'Tau'),
 
     ('xAOD::VertexContainer#HLT_IDVertex_Tau',                  'BS ESD AODFULL', 'Tau', 'inViews:TAUFTFIdViews,TAUPrecIsoViews'),
+
     ('xAOD::VertexAuxContainer#HLT_IDVertex_TauAux.',           'BS ESD AODFULL', 'Tau'),
 
     ('TrigRoiDescriptorCollection#HLT_Roi_Tau',              'BS ESD AODFULL AODSLIM',  'Steer'),
@@ -729,11 +732,8 @@ TriggerHLTListRun3 = [
 
     # tau
     # will enable when needed
-    ('xAOD::TauJetContainer#HLT_TrigTauRecMerged_CaloOnly',                         'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUCaloMVAViews'),
-    ('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_CaloOnlyAux.',                  'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
-
-    #('xAOD::TauJetContainer#HLT_TrigTauRecMerged_CaloOnlyMVA',                         'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUCaloMVAViews'),
-    #('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_CaloOnlyMVAAux.',                  'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
+    ('xAOD::TauJetContainer#HLT_TrigTauRecMerged_CaloMVAOnly',                         'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUCaloMVAViews'),
+    ('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_CaloMVAOnlyAux.',                  'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
 
     ('xAOD::TauJetContainer#HLT_TrigTauRecMerged_MVA',                     'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUMVAViews'),
     ('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_MVAAux.',              'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
@@ -741,10 +741,6 @@ TriggerHLTListRun3 = [
     ('xAOD::TauJetContainer#HLT_TrigTauRecMerged_LLP',                     'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAULLPViews'),
     ('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_LLPAux.',              'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
 
-    
-    ('xAOD::TauJetContainer#HLT_TrigTauRecMerged_Precision',                     'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUFTFIdViews,TAUFTFTrackViews,TAUTrackTwoViews,TAUEFViews'),
-    ('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_PrecisionAux.',              'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
-
     # tau calo clusters
     ('xAOD::CaloClusterContainer#HLT_TopoCaloClustersLC',                  'BS ESD AODFULL', 'Tau', 'inViews:TAUCaloMVAViews'),
     ('xAOD::CaloClusterTrigAuxContainer#HLT_TopoCaloClustersLCAux.nCells' ,'BS ESD AODFULL', 'Tau'),
@@ -754,12 +750,22 @@ TriggerHLTListRun3 = [
     ('xAOD::TauTrackAuxContainer#HLT_tautrack_MVAAux.'+TauTrackVars,       'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
     ('xAOD::TauTrackContainer#HLT_tautrack_LLP',                           'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAULLPViews'),
     ('xAOD::TauTrackAuxContainer#HLT_tautrack_LLPAux.',                    'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
-    ('xAOD::TauTrackContainer#HLT_tautrack_Precision',                     'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUFTFIdViews,TAUFTFTrackViews,TAUEFViews'),
-    ('xAOD::TauTrackAuxContainer#HLT_tautrack_PrecisionAux.',              'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'),
 
     # bjet RoI Descriptor used for EventView creation
     ('TrigRoiDescriptorCollection#HLT_Roi_Bjet',                   'BS ESD AODFULL', 'Bjet'),
 
+
+    # jet superRoI Descriptor and associated track and vertex class used for EventView creation
+    # commented for the time being ...
+
+    #    ('TrigRoiDescriptorCollection#"HLT_Roi_JetSuper',                   'BS ESD AODFULL', 'Jet'),
+    #    ('xAOD::TrackParticleAuxContainer#HLT_IDTrack_JetSuper_FTF',        'BS ESD AODFULL', 'Jet'),
+    #    ('xAOD::TrackParticleAuxContainer#HLT_IDTrack_JetSuper_FTFAux',     'BS ESD AODFULL', 'Jet'),
+    #    ('xAOD::VertexContainer#HLT_IDVertex_JetSuper',                     'BS ESD AODFULL', 'Jet'),
+    #    ('xAOD::VertexContainer#HLT_IDVertex_JetSuperAux',                  'BS ESD AODFULL', 'Jet'),
+
+
+
     # bjet Second Stage Fast tracks
     ('xAOD::TrackParticleContainer#HLT_IDTrack_Bjet_FTF',        'BS ESD AODFULL', 'Bjet', 'inViews:'+BTagViewsEMTopo+','+BTagViewsEMPFlow),
     ('xAOD::TrackParticleAuxContainer#HLT_IDTrack_Bjet_FTFAux.', 'BS ESD AODFULL', 'Bjet'),
diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/HLTTriggerResultGetter.py b/Trigger/TriggerCommon/TriggerJobOpts/python/HLTTriggerResultGetter.py
index 21112b8f32f179a9cd2bd76bfe963f6d05808053..09774c54cd1f4c0814fed7254a535540bb085126 100644
--- a/Trigger/TriggerCommon/TriggerJobOpts/python/HLTTriggerResultGetter.py
+++ b/Trigger/TriggerCommon/TriggerJobOpts/python/HLTTriggerResultGetter.py
@@ -52,10 +52,12 @@ class ByteStreamUnpackGetter(Configured):
         # Define the decoding sequence
         from TrigHLTResultByteStream.TrigHLTResultByteStreamConf import HLTResultMTByteStreamDecoderAlg
         from TrigOutputHandling.TrigOutputHandlingConf import TriggerEDMDeserialiserAlg
+        from TrigDecisionTool.TrigDecisionToolConfig import getRun3NavigationContainerFromInput
         from AthenaCommon.CFElements import seqAND
         decoder = HLTResultMTByteStreamDecoderAlg()
         deserialiser = TriggerEDMDeserialiserAlg("TrigDeserialiser")
-        deserialiser.ExtraOutputs += [('xAOD::TrigCompositeContainer' , 'StoreGateSvc+HLTNav_Summary_OnlineSlimmed')]
+        nav_collection = getRun3NavigationContainerFromInput(ConfigFlags)
+        deserialiser.ExtraOutputs += [('xAOD::TrigCompositeContainer' , 'StoreGateSvc+%s' % nav_collection)]  
         decodingSeq = seqAND("HLTDecodingSeq")
         decodingSeq += decoder  # BS -> HLTResultMT
         decodingSeq += deserialiser  # HLTResultMT -> xAOD
diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/Lvl1SimulationConfig.py b/Trigger/TriggerCommon/TriggerJobOpts/python/Lvl1SimulationConfig.py
index e113c6211e254fbd915fdad3e00765f7d829b897..87465d3264b59137cc69f297096c9ad709011211 100644
--- a/Trigger/TriggerCommon/TriggerJobOpts/python/Lvl1SimulationConfig.py
+++ b/Trigger/TriggerCommon/TriggerJobOpts/python/Lvl1SimulationConfig.py
@@ -167,7 +167,7 @@ def Lvl1SimulationSequence( ConfigFlags ):
         ctp.jFexJetInput = ""
         ctp.jFexLJetInput = ""
         ctp.gFexJetInput = ""
-        ctp.gFexMETPufitInput = ""
+        ctp.gFexMETNCInput = ""
         ctp.gFexMETRhoInput = ""
         ctp.gFexMETJwoJInput = ""
         ctp.eFexClusterInput = ""
@@ -205,9 +205,11 @@ def Lvl1SimulationCfg(flags, seqName = None):
     from TrigT1CaloSim.TrigT1CaloSimRun2Config import L1CaloLegacySimCfg
     acc.merge(L1CaloLegacySimCfg(flags), sequenceName='L1CaloLegacySimSeq')
 
-    #acc.addSequence(seqAND('L1CaloSimSeq'), parentName='L1SimSeq')
-    #from TrigT1CaloSim.TrigT1CaloSimRun2Config import L1CaloSimCfg
-    #acc.merge(L1CaloSimCfg(flags), sequenceName='L1CaloSimSeq')
+    acc.addSequence(seqAND('L1CaloSimSeq'), parentName='L1SimSeq')
+
+    if flags.Trigger.enableL1CaloPhase1:
+        from L1CaloFEXSim.L1CaloFEXSimCfg import L1CaloFEXSimCfg
+        acc.merge(L1CaloFEXSimCfg(flags), sequenceName = 'L1CaloSimSeq')
 
     acc.addSequence(seqAND('L1MuonSimSeq'), parentName='L1SimSeq')
     from TriggerJobOpts.Lvl1MuonSimulationConfig import Lvl1MuonSimulationCfg
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Bjet/BjetFlavourTaggingConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Bjet/BjetFlavourTaggingConfiguration.py
index 3411b514ecbd9ac0c50f0dc99424a47a9bdae931..bdbd7b95746001c47b834912a441b6c0c9f7503e 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Bjet/BjetFlavourTaggingConfiguration.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Bjet/BjetFlavourTaggingConfiguration.py
@@ -69,6 +69,15 @@ def getFlavourTagging( inputJets, inputVertex, inputTracks, BTagName,
         'BTagging/20210519r22/dl1d/antikt4empflow/network.json',
         # DL1d, uses IP3D dips above
         'BTagging/20210528r22/dl1d/antikt4empflow/network.json',
+
+        # The following were the best offline R22 taggers according to
+        #
+        # https://ftag-docs.docs.cern.ch/algorithms/available_taggers/
+        #
+        # R22 retraining for DIPS, provides dipsLoose20210729
+        'BTagging/20210729/dipsLoose/antikt4empflow/network.json',
+        # R22 retraining with the above DIPS, provides DL1dv00
+        'BTagging/20210824r22/dl1dLoose/antikt4empflow/network.json',
     ]
     for jsonFile in tagger_list:
         acc.merge(HighLevelBTagAlgCfg(ConfigFlags, BTaggingCollection=BTagName, TrackCollection=inputTracks, NNFile=jsonFile) )
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/HipTRTMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/HipTRTMenuSequences.py
index db78a9473cbb2d9958ce4227d68308d090a5d428..4705b4c9df6af6f474eec2645446547d446399de 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/HipTRTMenuSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/HipTRTMenuSequences.py
@@ -12,10 +12,13 @@ from AthenaCommon.GlobalFlags import globalflags
 from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 #from DecisionHandling.DecisionHandlingConf import ViewCreatorPreviousROITool
 from DecisionHandling.DecisionHandlingConf import ViewCreatorCentredOnClusterROITool
-from TrigEDMConfig.TriggerEDMRun3 import recordable
 from TrigTRTHighTHitCounter.TrigTRTHTHCounterConfig import TrigTRTHTHCounterFex
 
 def TRTHitGeneratorSequence(ConfigFlags):
+
+    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import  getTrigEgammaKeys
+    TrigEgammaKeys = getTrigEgammaKeys()
+
     """ hipTRT step ....."""
     InViewRoIs = "TRTHitGenerator"
     # EVCreator:
@@ -47,7 +50,7 @@ def TRTHitGeneratorSequence(ConfigFlags):
     trtHTHFex = TrigTRTHTHCounterFex("TrigTRTH_fex")
     trtHTHFex.RoIs = trtViewsMaker.InViewRoIs
     trtHTHFex.TRT_DC_ContainerName = "TRT_TrigDriftCircles" 
-    trtHTHFex.RNNOutputName = recordable("HLT_TrigTRTHTCounts")
+    trtHTHFex.RNNOutputName = TrigEgammaKeys.TrigTRTHTCountsContainer
     sequenceOut = trtHTHFex.RNNOutputName    
     
     trtInviewAlgs = parOR("trtInviewAlgs", trtInviewAlgs + [ViewVerify,trtHTHFex])
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences_FWD.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences_FWD.py
deleted file mode 100644
index c6841906e62935aec28a0b75fc27ddc232be515d..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences_FWD.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-#  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-#
-
-# menu components   
-from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool
-from AthenaCommon.CFElements import seqAND
-from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
-from DecisionHandling.DecisionHandlingConf import ViewCreatorPreviousROITool
-from AthenaConfiguration.AllConfigFlags import ConfigFlags
-from TrigEDMConfig.TriggerEDMRun3 import recordable
-      
-class precisionCaloMenuDefs_FWD(object):
-      """Static class to collect all string manipulation in Calo sequences """
-      precisionCaloClusters= recordable("HLT_CaloEMClusters_FWD")
-
-
-def precisionCaloSequence_FWD(ConfigFlags):
-    """ Creates PrecisionCalo sequence """
-    # EV creator
-    InViewRoIs="PrecisionCaloRoIs_FWD"     
-    precisionCaloViewsMaker = EventViewCreatorAlgorithm( "IMprecisionCaloElectron_FWD")
-    precisionCaloViewsMaker.ViewFallThrough = True
-    precisionCaloViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI
-    roiTool = ViewCreatorPreviousROITool()
-    # Note: This step processes Decision Objects which have followed either Electron reco, Photon reco, or both.
-    # For Decision Object which have followed both, there is an ambiguity about which ROI should be used in this
-    # merged step. In such cases we break the ambiguity by specifying that the Electron ROI is to be used.
-    #roiTool.RoISGKey = "HLT_Roi_FastElectron_FWD"
-    precisionCaloViewsMaker.RoITool = roiTool
-    precisionCaloViewsMaker.InViewRoIs = InViewRoIs
-    precisionCaloViewsMaker.Views = "precisionCaloElectronViews_FWD"
-    precisionCaloViewsMaker.RequireParentView = True
-
-    # reco sequence
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloRecoSequences import precisionCaloRecoSequence_FWD
-    (precisionCaloInViewSequence, sequenceOut) = precisionCaloRecoSequence_FWD(None,InViewRoIs)
-
-    precisionCaloViewsMaker.ViewNodeName = precisionCaloInViewSequence.name()
-
-    # connect EVC and reco
-    theSequence = seqAND("precisionCaloElectronSequence_FWD", [precisionCaloViewsMaker, precisionCaloInViewSequence] )
-    return (theSequence, precisionCaloViewsMaker, sequenceOut)
-
-
-def precisionCaloMenuSequence_FWD(name, is_probe_leg=False):
-    """ Creates precisionCalo FWD MENU sequence """
-    (sequence, precisionCaloViewsMaker, sequenceOut) = RecoFragmentsPool.retrieve(precisionCaloSequence_FWD, ConfigFlags)
-
-    #Hypo
-    from TrigEgammaForwardHypo.TrigEgammaForwardHypoConf import TrigEgammaForwardPrecisionCaloHypoAlg
-    from TrigEgammaForwardHypo.TrigEgammaForwardPrecisionCaloHypoTool import TrigEgammaForwardPrecisionCaloHypoToolFromDict
-
-    thePrecisionCaloHypo = TrigEgammaForwardPrecisionCaloHypoAlg(name+"precisionCaloElectronHypo_FWD")
-    thePrecisionCaloHypo.CaloClusters = sequenceOut
-
-    return MenuSequence( Sequence    = sequence,
-                         Maker       = precisionCaloViewsMaker, 
-                         Hypo        = thePrecisionCaloHypo,
-                         HypoToolGen = TrigEgammaForwardPrecisionCaloHypoToolFromDict,
-                         IsProbe     = is_probe_leg )
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloRecoSequences.py
deleted file mode 100644
index f1f55cdbd1999c4e46a028180ea1988aacdec0e7..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloRecoSequences.py
+++ /dev/null
@@ -1,141 +0,0 @@
-#
-#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-#
-
-from egammaAlgs import egammaAlgsConf
-from egammaRec.Factories import AlgFactory
-from AthenaCommon.CFElements import parOR
-from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import RecoFragmentsPool
-from .PrecisionCaloMenuSequences import precisionCaloMenuDefs
-from .PrecisionCaloMenuSequences_LRT import precisionCaloMenuDefs_LRT
-from .PrecisionCaloMenuSequences_FWD import precisionCaloMenuDefs_FWD
-from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
-from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import TrigEgammaRec, TrigEgammaSuperClusterBuilder 
-from AthenaCommon.Logging import logging
-
-TrigEgammaKeys = getTrigEgammaKeys()
-
-log = logging.getLogger(__name__)
-
-
-
-# Dummy flag arg needed so that each reco sequence is held separately
-# in the RecoFragmentsPool -- only the RoIs are used to distinguish
-# different sequences. New convention is just to pass "None" for flags
-# taken from Jet/JetRecoSequences.py
-def precisionCaloRecoSequence(DummyFlag, RoIs, ion=False, is_photon=False):
-    log.debug('DummyFlag = %s',str(DummyFlag))
-    log.debug('RoIs = %s',RoIs)
-
-    from TrigT2CaloCommon.CaloDef import HLTRoITopoRecoSequence, HLTHIRoITopoRecoSequence
-    topoRecoSequence = HLTHIRoITopoRecoSequence if ion is True else HLTRoITopoRecoSequence
-    (caloRecoSequence, caloclusters) = RecoFragmentsPool.retrieve(topoRecoSequence, None, RoIs=RoIs, algSuffix='')
-
-    tag = 'HI' if ion is True else '' 
-    outputCaloClusters = precisionCaloMenuDefs.caloClusters(ion)
-    log.debug('precisionOutputCaloClusters = %s',outputCaloClusters)
-
-    egammaTopoClusterCopier = AlgFactory( egammaAlgsConf.egammaTopoClusterCopier,
-                                          name = ('g' if is_photon else 'e') + 'TrigEgammaTopoClusterCopier' + tag + RoIs ,
-                                          InputTopoCollection = caloclusters,
-                                          OutputTopoCollection = TrigEgammaKeys.outputTopoCollection,
-                                          OutputTopoCollectionShallow = "tmp_" + TrigEgammaKeys.outputTopoCollection,
-                                          doAdd = False )
-
-    algo = egammaTopoClusterCopier()
-    precisionRecoSequence = parOR( ('photon' if is_photon else 'electron')+"RoITopoRecoSequence"+tag)
-    precisionRecoSequence += caloRecoSequence
-    precisionRecoSequence += algo
-    _trigEgammaRec = TrigEgammaRec(name = ('g' if is_photon else 'e') + 'TrigEgammaRec%s' % RoIs)
-    precisionRecoSequence += _trigEgammaRec
-    _trigEgammaSuperClusterBuilder = TrigEgammaSuperClusterBuilder(name = ('g' if is_photon else 'e') + 'TrigEgammaSuperClusterBuilder%s' % RoIs)
-    _trigEgammaSuperClusterBuilder.SuperClusterCollectionName = outputCaloClusters
-    _trigEgammaSuperClusterBuilder.CalibrationType = 'photon' if is_photon else 'electron'
-    precisionRecoSequence +=  _trigEgammaSuperClusterBuilder
-    sequenceOut = outputCaloClusters
-
-    return (precisionRecoSequence, sequenceOut)
-
-
-def precisionCaloRecoSequence_LRT(DummyFlag, RoIs):
-    log.info('DummyFlag_LRT = %s',str(DummyFlag))
-    log.info('RoIs_LRT = %s',RoIs)
-
-    egammaTopoClusterCopier = AlgFactory( egammaAlgsConf.egammaTopoClusterCopier,
-                                          name = 'eTrigEgammaTopoClusterCopier%s' % RoIs ,
-                                          InputTopoCollection= "caloclusters",
-                                          OutputTopoCollection=TrigEgammaKeys.outputTopoCollection,
-                                          OutputTopoCollectionShallow="tmp_"+TrigEgammaKeys.outputTopoCollection,
-                                          doAdd = False )
-
-    from TrigT2CaloCommon.CaloDef import HLTRoITopoRecoSequence
-    (caloRecoSequence, caloclusters) = RecoFragmentsPool.retrieve(HLTRoITopoRecoSequence, None, RoIs=RoIs,algSuffix='_LRT')
-    precisionRecoSequence = parOR( "electronRoITopoRecoSequence_LRT")
-    precisionRecoSequence += caloRecoSequence
-    algo = egammaTopoClusterCopier()
-    algo.InputTopoCollection = caloclusters
-    precisionRecoSequence += algo
-    _trigEgammaRec = TrigEgammaRec(name ='eTrigEgammaRec%s' % RoIs)
-    precisionRecoSequence += _trigEgammaRec
-    _trigEgammaSuperClusterBuilder = TrigEgammaSuperClusterBuilder('eTrigEgammaSuperClusterBuilder%s' % RoIs)
-    _trigEgammaSuperClusterBuilder.SuperClusterCollectionName = precisionCaloMenuDefs_LRT.precisionCaloClusters
-    _trigEgammaSuperClusterBuilder.CalibrationType = 'electron'
-    precisionRecoSequence += _trigEgammaSuperClusterBuilder
-    sequenceOut = precisionCaloMenuDefs_LRT.precisionCaloClusters
-
-    return (precisionRecoSequence, sequenceOut)
-
-
-
-
-def precisionCaloRecoSequence_FWD(DummyFlag, RoIs):
-    log.info('DummyFlag_FWD = %s',str(DummyFlag))
-    log.info('RoIs_FWD = %s',RoIs)
-
-    egammaTopoClusterCopier = AlgFactory( egammaAlgsConf.egammaTopoClusterCopier,
-                                          name = 'eTrigEgammaTopoClusterCopier%s' % RoIs ,
-                                          InputTopoCollection= "caloclusters",
-                                          OutputTopoCollection=TrigEgammaKeys.outputTopoCollection,
-                                          OutputTopoCollectionShallow="tmp_"+TrigEgammaKeys.outputTopoCollection,
-                                          doAdd = False )
-
-    from TrigT2CaloCommon.CaloDef import HLTRoITopoRecoSequence
-    (caloRecoSequence, caloclusters) = RecoFragmentsPool.retrieve(HLTRoITopoRecoSequence, None, RoIs=RoIs,algSuffix='_FWD')
-
-    precisionRecoSequence = parOR( "electronRoITopoRecoSequence_FWD")
-    precisionRecoSequence += caloRecoSequence
-    algo = egammaTopoClusterCopier()
-    algo.InputTopoCollection = caloclusters
-    precisionRecoSequence += algo
-    _trigEgammaRec = TrigEgammaRec(name ='eTrigEgammaRec%s' % RoIs)
-    precisionRecoSequence +=  _trigEgammaRec
-    _trigEgammaSuperClusterBuilder = TrigEgammaSuperClusterBuilder(name ='eTrigEgammaSuperClusterBuilder%s' % RoIs)
-    _trigEgammaSuperClusterBuilder.SuperClusterCollectionName = precisionCaloMenuDefs_FWD.precisionCaloClusters
-    _trigEgammaSuperClusterBuilder.CalibrationType = 'electron'
-    precisionRecoSequence += _trigEgammaSuperClusterBuilder
-    sequenceOut = precisionCaloMenuDefs_FWD.precisionCaloClusters
-
-    return (precisionRecoSequence, sequenceOut)
-
-
-def egammaFSCaloRecoSequence():
-    from TrigT2CaloCommon.CaloDef import setMinimalCaloSetup
-    setMinimalCaloSetup()
-
-    from AthenaCommon.AppMgr import ServiceMgr as svcMgr
-    from HLTSeeding.HLTSeedingConfig import mapThresholdToL1RoICollection
-    from TrigCaloRec.TrigCaloRecConfig import HLTCaloCellMaker
-
-    cellMaker = HLTCaloCellMaker('HLTCaloCellMakerEGFS')
-    cellMaker.RoIs = mapThresholdToL1RoICollection('FSNOSEED')
-    cellMaker.TrigDataAccessMT = svcMgr.TrigCaloDataAccessSvc
-    cellMaker.CellsName = 'CaloCellsEGFS'
-
-    from TrigT2CaloCommon.CaloDef import _algoHLTHIEventShape
-    eventShapeMaker = _algoHLTHIEventShape(
-        name='HLTEventShapeMakerEG',
-        inputEDM=cellMaker.CellsName,
-        outputEDM=precisionCaloMenuDefs.egEventShape
-    )
-
-    return parOR("egammaFSRecoSequence", [cellMaker, eventShapeMaker])
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaDefs.py
index 4eb4fb6d22b2726eafe4864dac07da0e9277b9aa..85d3175f6a4d10b898ee66c70495d2a390d9847e 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaDefs.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaDefs.py
@@ -14,9 +14,7 @@ if not Configurable.configurableRun3Behavior:
     from AthenaCommon.AppMgr import ServiceMgr
     ServiceMgr += AthONNX__ONNXRuntimeSvc()
 
-from TrigInDetConfig.ConfigSettings import getInDetTrigConfig
-from TrigEDMConfig.TriggerEDMRun3 import recordable
-from .TrigEgammaKeys import getTrigEgammaKeys
+from .TrigEgammaSliceFlags import TrigEgammaSliceFlags
 from egammaRec.egammaRecFlags import jobproperties
 from egammaRec.Factories import ToolFactory, ServiceFactory
 from egammaMVACalib import egammaMVACalibConf
@@ -26,27 +24,14 @@ log = logging.getLogger(__name__)
 
 
 
-class TrigEgammaKeys_LRT(object):
-      """Static class to collect all string manipulation in Electron_LRT sequences """
-      outputElectronKey_LRT = recordable('HLT_egamma_Electrons_LRT')
-      IDTrigConfig_LRT = getInDetTrigConfig('electronLRT')
-      TrigElectronTracksCollectionName_LRT = IDTrigConfig_LRT.tracks_IDTrig()
-
-class TrigEgammaKeys_GSF(object):
-      """Static class to collect all string manipulation in Electron sequences """
-      outputElectronKey_GSF = recordable('HLT_egamma_Electrons_GSF')
-      outputTrackKey_GSF = 'HLT_IDTrkTrack_Electron_GSF'
-      outputTrackParticleKey_GSF = recordable('HLT_IDTrack_Electron_GSF')
-
 #
 # Electron DNN Selectors
 #
 def TrigEgammaPrecisionElectronDNNSelectorCfg(name='TrigEgammaPrecisionElectronDNNSelector', ConfigFilePath=None):
     acc = ComponentAccumulator()
     # We should include the DNN here
-    TrigEgammaKeys = getTrigEgammaKeys() # default configuration 
     if not ConfigFilePath:
-      ConfigFilePath = 'ElectronPhotonSelectorTools/trigger/'+TrigEgammaKeys.dnnVersion
+      ConfigFilePath = 'ElectronPhotonSelectorTools/trigger/'+TrigEgammaSliceFlags.dnnVersion()
   
     import collections
     SelectorNames = collections.OrderedDict({
@@ -77,10 +62,9 @@ def TrigEgammaPrecisionElectronLHSelectorCfg( name='TrigEgammaPrecisionElectronL
 
     # Configure the LH selectors
     acc = ComponentAccumulator()
-    TrigEgammaKeys = getTrigEgammaKeys() # default configuration 
-    #TrigEgammaKeys.pidVersion.set_On()
+    #TrigEgammaSliceFlags.pidVersion.set_On()
     if not ConfigFilePath:
-        ConfigFilePath = 'ElectronPhotonSelectorTools/trigger/'+TrigEgammaKeys.pidVersion
+        ConfigFilePath = 'ElectronPhotonSelectorTools/trigger/'+TrigEgammaSliceFlags.pidVersion()
 
     import collections
     SelectorNames = collections.OrderedDict({
@@ -121,7 +105,6 @@ def TrigEgammaPrecisionElectronLHSelectorCfg( name='TrigEgammaPrecisionElectronL
 
 def TrigEgammaPrecisionElectronCBSelectorCfg(name='TrigEgammaPrecisionElectronCBSelector', ConfigFilePath=None):
     acc = ComponentAccumulator()
-    TrigEgammaKeys = getTrigEgammaKeys() # default configuration 
     from ElectronPhotonSelectorTools.TrigEGammaPIDdefs import BitDefElectron
 
     ElectronLooseHI = (0
@@ -144,7 +127,7 @@ def TrigEgammaPrecisionElectronCBSelectorCfg(name='TrigEgammaPrecisionElectronCB
     )
 
     if not ConfigFilePath:
-        ConfigFilePath = 'ElectronPhotonSelectorTools/trigger/'+TrigEgammaKeys.pidVersion
+        ConfigFilePath = 'ElectronPhotonSelectorTools/trigger/'+TrigEgammaSliceFlags.pidVersion()
 
     from collections import OrderedDict
     SelectorNames = OrderedDict({
@@ -179,10 +162,9 @@ def TrigEgammaPrecisionElectronCBSelectorCfg(name='TrigEgammaPrecisionElectronCB
 #
 def createTrigEgammaPrecisionPhotonSelectors(ConfigFilePath=None):
     from ElectronPhotonSelectorTools.ConfiguredAsgPhotonIsEMSelectors import ConfiguredAsgPhotonIsEMSelector
-    TrigEgammaKeys = getTrigEgammaKeys() # default configuration 
 
     if not ConfigFilePath:
-      ConfigFilePath = 'ElectronPhotonSelectorTools/trigger/'+TrigEgammaKeys.pidVersion
+      ConfigFilePath = 'ElectronPhotonSelectorTools/trigger/'+TrigEgammaSliceFlags.pidVersion()
 
     import collections
     # Configure the IsEM selectors
@@ -225,11 +207,10 @@ def createTrigEgammaPrecisionPhotonSelectors(ConfigFilePath=None):
 def createTrigEgammaFastCaloSelectors(ConfigFilePath=None):
 
     import collections
-    TrigEgammaKeys = getTrigEgammaKeys() # default configuration 
 
     # We should include the ringer here
     if not ConfigFilePath:
-      ConfigFilePath = 'RingerSelectorTools/'+TrigEgammaKeys.ringerVersion
+      ConfigFilePath = 'RingerSelectorTools/'+TrigEgammaSliceFlags.ringerVersion()
 
   
     SelectorNames = collections.OrderedDict({
@@ -264,11 +245,9 @@ def createTrigEgammaFastCaloSelectors(ConfigFilePath=None):
 def createTrigEgammaFastElectronSelectors(ConfigFilePath=None):
 
     import collections
-    TrigEgammaKeys = getTrigEgammaKeys() # default configuration 
-
     # We should include the ringer here
     if not ConfigFilePath:
-      ConfigFilePath = 'RingerSelectorTools/'+TrigEgammaKeys.ringerVersion
+      ConfigFilePath = 'RingerSelectorTools/'+TrigEgammaSliceFlags.ringerVersion()
   
 
     SelectorNames = collections.OrderedDict({
@@ -300,10 +279,9 @@ def createTrigEgammaFastElectronSelectors(ConfigFilePath=None):
 def createTrigEgammaFastPhotonSelectors(ConfigFilePath=None):
 
     import collections
-    TrigEgammaKeys = getTrigEgammaKeys() # default configuration 
     # We should include the ringer here
     if not ConfigFilePath:
-      ConfigFilePath = 'RingerSelectorTools/'+TrigEgammaKeys.ringerVersion
+      ConfigFilePath = 'RingerSelectorTools/'+TrigEgammaSliceFlags.ringerVersion()
 
     SelectorNames = collections.OrderedDict( {
       'tight'  : 'AsgPhotonFastCaloRingerTightSelectorTool' ,
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaFactories.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaFactories.py
index bd7d5e333738893ccf5bb70296c67cb4381fb0b5..7b0f9363ec1d3e7ca598a02f6c5b04632cdc5932 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaFactories.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaFactories.py
@@ -20,53 +20,52 @@ from CaloIdentifier import SUBCALO
 
 # Egamma imports
 from egammaRec.Factories import ToolFactory, AlgFactory
-
 from egammaTools.egammaToolsFactories import egammaToolsConf, egammaMVASvc,  EMFourMomBuilder, PhotonPIDBuilder, ElectronPIDBuilder
 from egammaTools.egammaToolsFactories import egammaSwSuperClusterTool
-
 from egammaTrackTools.egammaTrackToolsFactories import EMExtrapolationTools
 
 # Load TrigEgammaKeys where we store the container names and other TrigEgamma configuration values
 from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
-TrigEgammaKeys = getTrigEgammaKeys()
-TrigEgammaKeys_LRT = getTrigEgammaKeys('_LRT')
 from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaDefs import createTrigEgammaMVASvc
+from .TrigEgammaSliceFlags import TrigEgammaSliceFlags
 
 from IsolationTool.IsolationToolConf import xAOD__TrackIsolationTool
 from ParticlesInConeTools.ParticlesInConeToolsConf import xAOD__TrackParticlesInConeTool
-
 from AthenaCommon import CfgMgr
 from egammaAlgs import egammaAlgsConf
-from .PrecisionCaloMenuSequences import precisionCaloMenuDefs
+
+
+TrigEgammaKeys = getTrigEgammaKeys()
+TrigEgammaKeys_LRT = getTrigEgammaKeys('_LRT')
 
 """ Configuring trigger precision MVA Svc """
-TrigEgammaMVASvc = createTrigEgammaMVASvc( TrigEgammaKeys.calibMVAVersion )
+TrigEgammaMVASvc = createTrigEgammaMVASvc( TrigEgammaSliceFlags.calibMVAVersion() )
 
 
 """Configuring egammaRecBuilder """
 TrigEgammaRec   = AlgFactory( egammaAlgsConf.egammaRecBuilder,
                             name = 'TrigEgammaRec',
-                            InputClusterContainerName= TrigEgammaKeys.outputTopoCollection,
-                            egammaRecContainer= TrigEgammaKeys.PrecisionCaloEgammaRecKey,
-                            doTrackMatching = False,
-                            doConversions = False,
-                            doAdd= False,
+                            InputClusterContainerName = TrigEgammaKeys.precisionCaloTopoCollection,
+                            egammaRecContainer        = TrigEgammaKeys.precisionCaloEgammaRecCollection,
+                            doTrackMatching           = False,
+                            doConversions             = False,
+                            doAdd                     = False,
                             # Builder tools
-                            TrackMatchBuilderTool = None, # Don't want to use these for trigger....
-                            ConversionBuilderTool = None,  # Don't want to use these for trigger....
+                            TrackMatchBuilderTool     = None, # Don't want to use these for trigger....
+                            ConversionBuilderTool     = None,  # Don't want to use these for trigger....
                             )
 
 #Factory for egamma SC builder
 TrigEgammaSuperClusterBuilder = AlgFactory( egammaAlgsConf.egammaSuperClusterBuilder,
         name = 'TrigEgammaSuperClusterBuilder',
-        InputEgammaRecContainerName=TrigEgammaKeys.PrecisionCaloEgammaRecKey,
-        SuperClusterCollectionName=precisionCaloMenuDefs.precisionCaloClusters,
-        ClusterCorrectionTool=egammaSwSuperClusterTool,   
-        MVACalibSvc=TrigEgammaMVASvc,
-        CalibrationType='electron',
-        EtThresholdCut = 1000,
-        doAdd = False,
-        LinkToConstituents = False,
+        InputEgammaRecContainerName = TrigEgammaKeys.precisionCaloEgammaRecCollection,
+        SuperClusterCollectionName  = TrigEgammaKeys.precisionCaloClusterContainer,
+        ClusterCorrectionTool       = egammaSwSuperClusterTool,   
+        MVACalibSvc                 = TrigEgammaMVASvc,
+        CalibrationType             = 'electron',
+        EtThresholdCut              = 1000,
+        doAdd                       = False,
+        LinkToConstituents          = False,
         )
 
 
@@ -74,7 +73,7 @@ TrigEgammaSuperClusterBuilder = AlgFactory( egammaAlgsConf.egammaSuperClusterBui
 TrigTrackParticlesInConeTool =  ToolFactory(xAOD__TrackParticlesInConeTool, name = 'TrigTrackParticlesInConeTool')
 
 tpict = CfgMgr.xAOD__TrackParticlesInConeTool('TrigTrackParticlesInConeTool')
-tpict.TrackParticleLocation = TrigEgammaKeys.TrigElectronTracksCollectionName
+tpict.TrackParticleLocation = TrigEgammaKeys.precisionTrackingContainer
 
 """Configuring TrackIsolationTool Tool """
 TrigTrackIsolationTool = ToolFactory(xAOD__TrackIsolationTool, name = 'TrigTrackIsolationTool')
@@ -82,7 +81,7 @@ tit = CfgMgr.xAOD__TrackIsolationTool('TrigTrackIsolationTool')
 tit.TrackSelectionTool.maxZ0SinTheta = 3
 tit.TrackSelectionTool.minPt         = 1000
 tit.TrackSelectionTool.CutLevel      = "Loose"
-tit.TrackParticleLocation = TrigEgammaKeys.TrigElectronTracksCollectionName
+tit.TrackParticleLocation = TrigEgammaKeys.precisionTrackingContainer
 tit.VertexLocation = ''
 tit.TracksInConeTool      = tpict
 
@@ -91,7 +90,7 @@ tit.TracksInConeTool      = tpict
 TrigTrackParticlesInConeTool_LRT =  ToolFactory(xAOD__TrackParticlesInConeTool, name = 'TrigTrackParticlesInConeTool_LRT')
 
 tpict_lrt = CfgMgr.xAOD__TrackParticlesInConeTool('TrigTrackParticlesInConeTool_LRT')
-tpict_lrt.TrackParticleLocation = TrigEgammaKeys_LRT.TrigElectronTracksCollectionName
+tpict_lrt.TrackParticleLocation = TrigEgammaKeys_LRT.precisionTrackingContainer
 
 """Configuring TrackIsolationTool Tool """
 TrigTrackIsolationTool_LRT = ToolFactory(xAOD__TrackIsolationTool, name = 'TrigTrackIsolationTool_LRT')
@@ -99,14 +98,14 @@ tit_lrt = CfgMgr.xAOD__TrackIsolationTool('TrigTrackIsolationTool_LRT')
 tit_lrt.TrackSelectionTool.maxZ0SinTheta = 3
 tit_lrt.TrackSelectionTool.minPt         = 1000
 tit_lrt.TrackSelectionTool.CutLevel      = "Loose"
-tit_lrt.TrackParticleLocation = TrigEgammaKeys_LRT.TrigElectronTracksCollectionName
+tit_lrt.TrackParticleLocation = TrigEgammaKeys_LRT.precisionTrackingContainer
 tit_lrt.VertexLocation = ''
 tit_lrt.TracksInConeTool	  = tpict_lrt
 
     
 """Configuring EMTrackMatchBuilder Tool """
 TrigEMTrackMatchBuilder = ToolFactory( egammaToolsConf.EMTrackMatchBuilder,
-                      TrackParticlesName = TrigEgammaKeys.TrigElectronTracksCollectionName,
+                      TrackParticlesName = TrigEgammaKeys.precisionTrackingContainer,
                       ExtrapolationTool  = EMExtrapolationTools,
                       broadDeltaEta      = 0.1, #candidate match is done in 2 times this  so +- 0.2
                       broadDeltaPhi      = 0.15,  #candidate match is done in 2 times this  so +- 0.3
@@ -124,6 +123,12 @@ TrigEMShowerBuilder = ToolFactory( egammaToolsConf.EMShowerBuilder,
          HadronicLeakageTool  = egammaIso,
          Print = False)
 
+TrigEMShowerBuilder_HI = ToolFactory( egammaToolsConf.EMShowerBuilder,
+         CellsName = 'CorrectedRoICaloCells',
+         CaloNums  = [SUBCALO.LAREM, SUBCALO.LARHEC, SUBCALO.TILE],
+         ShowerShapeTool      = egammaShowerShape,
+         HadronicLeakageTool  = egammaIso,
+         Print = False)
 
 """Configure the ObjectQuality tool"""
 TrigEgammaOQFlagsBuilder = ToolFactory( egammaToolsConf.egammaOQFlagsBuilder,
@@ -140,9 +145,10 @@ TrigEgammaOQFlagsBuilder = ToolFactory( egammaToolsConf.egammaOQFlagsBuilder,
 """ This is an instance of TrigEMClusterTool to be used at TrigTopoEgammaPhotons and TrigTopoEgammaElectrons """
 TrigEMClusterTool = ToolFactory(egammaToolsConf.EMClusterTool,
         name = 'TrigEMClusterTool',
-        OutputClusterContainerName = TrigEgammaKeys.TrigEMClusterToolOutputContainer, 
+        OutputClusterContainerName = TrigEgammaKeys.precisionEMClusterContainer, 
         MVACalibSvc = egammaMVASvc                             
         )
+
 from xAODPrimitives.xAODIso import xAODIso as isoPar
 from IsolationAlgs.IsolationAlgsConf import IsolationBuilder
 
@@ -150,7 +156,7 @@ def TrigElectronIsoBuilderCfg(name='TrigElectronIsolationBuilder'):
     TrigElectronIsolationBuilder = AlgFactory(IsolationBuilder,
                                     name                  = name,
                                     doAdd                 = False,
-                                    ElectronCollectionContainerName = TrigEgammaKeys.outputElectronKey,
+                                    ElectronCollectionContainerName = TrigEgammaKeys.precisionElectronContainer,
                                     CaloCellIsolationTool = None,
                                     CaloTopoIsolationTool = None,
                                     PFlowIsolationTool    = None,
@@ -166,7 +172,7 @@ def TrigElectronIsoBuilderCfg_LRT(name='TrigElectronIsolationBuilder_LRT'):
     TrigElectronIsolationBuilder = AlgFactory(IsolationBuilder,
                                     name                  = name,
                                     doAdd                 = False,
-                                    ElectronCollectionContainerName = TrigEgammaKeys_LRT.outputElectronKey,
+                                    ElectronCollectionContainerName = TrigEgammaKeys_LRT.precisionElectronContainer,
                                     CaloCellIsolationTool = None,
                                     CaloTopoIsolationTool = None,
                                     PFlowIsolationTool    = None,
@@ -190,7 +196,7 @@ cfrc = ToolFactory(
 # tool to collect topo clusters in cone
 from ParticlesInConeTools.ParticlesInConeToolsConf import xAOD__CaloClustersInConeTool
 TrigCaloClustersInConeTool = ToolFactory(xAOD__CaloClustersInConeTool,
-                                     CaloClusterLocation = TrigEgammaKeys.TrigEMClusterToolOutputContainer)
+                                     CaloClusterLocation = TrigEgammaKeys.precisionEMClusterContainer)
 
 # this is not used below...
 from IsolationCorrections.IsolationCorrectionsConf import CP__IsolationCorrectionTool as ICT
@@ -221,7 +227,7 @@ def TrigPhotonIsoBuilderCfg(name='TrigPhotonIsolationBuilder'):
     TrigPhotonIsolationBuilder = AlgFactory(IsolationBuilder,
                                     name                  = name,
                                     doAdd                 = False,
-                                    PhotonCollectionContainerName = TrigEgammaKeys.outputPhotonKey,
+                                    PhotonCollectionContainerName = TrigEgammaKeys.precisionPhotonContainer,
                                     CaloCellIsolationTool = None,
                                     CaloTopoIsolationTool = TrigCaloIsolationTool,
                                     PFlowIsolationTool    = None,
@@ -246,4 +252,29 @@ def TrigElectronDecorationTools():
     return [ ElectronPIDBuilder()]
 
 
+def egammaFSCaloRecoSequence():
+    from AthenaCommon.CFElements import parOR
+
+    from TrigT2CaloCommon.CaloDef import setMinimalCaloSetup
+    setMinimalCaloSetup()
+
+    from AthenaCommon.AppMgr import ServiceMgr as svcMgr
+    from HLTSeeding.HLTSeedingConfig import mapThresholdToL1RoICollection
+    from TrigCaloRec.TrigCaloRecConfig import HLTCaloCellMaker
+
+    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import  getTrigEgammaKeys
+    TrigEgammaKeys = getTrigEgammaKeys()
+
+    cellMaker = HLTCaloCellMaker('HLTCaloCellMakerEGFS')
+    cellMaker.RoIs = mapThresholdToL1RoICollection('FSNOSEED')
+    cellMaker.TrigDataAccessMT = svcMgr.TrigCaloDataAccessSvc
+    cellMaker.CellsName = 'CaloCellsEGFS'
+
+    from TrigT2CaloCommon.CaloDef import _algoHLTHIEventShape
+    eventShapeMaker = _algoHLTHIEventShape(
+        name='HLTEventShapeMakerEG',
+        inputEDM=cellMaker.CellsName,
+        outputEDM=TrigEgammaKeys.egEventShape
+    )
 
+    return parOR("egammaFSRecoSequence", [cellMaker, eventShapeMaker])
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaKeys.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaKeys.py
index c572386adec6b608f073e26c2bc85114f130b4eb..e7e97d2ca2db05aaec627e6a3a8d1168b1b964d8 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaKeys.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaKeys.py
@@ -1,6 +1,6 @@
 #  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
-__author__ = "Fernando Monticelli, Debottam Gupta"
+__author__ = "Fernando Monticelli, Debottam Gupta, Joao Victor Pinto"
 __doc__    = "ConfigSettings"
 __all__    = [ "getTrigEgammaKeys" ]
 
@@ -10,148 +10,101 @@ __all__    = [ "getTrigEgammaKeys" ]
 
 from TrigInDetConfig.ConfigSettings import getInDetTrigConfig
 from TrigEDMConfig.TriggerEDMRun3 import recordable
-from AthenaCommon.Logging import logging
 
-log = logging.getLogger(__name__)
-
-def getTrigEgammaKeys(name=''):
-    if name in _TrigEgammaConfigurations:
-        return _TrigEgammaConfigurations[name]
-    else:
-        # OK that name is not valid so lets prepare a list of valid names to throw in the exception msg:
-        validnames = []
-        for key in _TrigEgammaConfigurations:
-            validnames.append(key)
-        raise Exception('getTrigEgammaKeys() called with non valid name : ' + name + ' valid names are:' + str(validnames))
 
+class TrigEgammaKeysBase():
 
-class TrigEgammaKeys_base():
-      """Base clas to configure TrigEgamma Container names, tuning names and other configurations"""
+      """Base clas to configure TrigEgamma Container names. Containers will be record, collections not"""
       def __init__(self):
-        # First Egamma, calo and common configuration stuff
-        self._EgammaRecKey = 'HLT_egammaRecCollection'
-        self._TrigEMClusterToolOutputContainer = 'HLT_TrigEMClusters'
-        self._outputTopoSeededClusterKey = 'HLT_egammaTopoSeededClusters'
-        self._outputTopoCollection = 'HLT_egammaTopoCluster'
-        self._PrecisionCaloEgammaRecKey = 'HLT_prcisionCaloEgammaRecCollection'
 
 
-        # Tracking configuration stuff now
-        self._IDTrigConfig = getInDetTrigConfig( 'electron' )
-        self._outputTrackKey = 'HLT_IDTrkTrack_Electron'
-        self._outputTrackParticleKey = 'HLT_IDTrack_Electron'
+        """Static class to collect all string manipulation in fast electron sequences """
+        self.fastElectronRoIContainer                   = recordable("HLT_Roi_FastElectron")
+        self.fastElectronContainer                      = recordable("HLT_FastElectrons")
 
-        # Electron Specific
-        self._SuperElectronRecCollectionName = 'HLT_ElectronSuperRecCollection'
-        self._outputElectronKey = 'HLT_egamma_Electrons'
+        """Static class to collect all string manipulation in fast photon sequences """
+        self.fastPhotonRoIContainer                     = recordable("HLT_Roi_FastPhoton")
+        self.fastPhotonContainer                        = recordable("HLT_FastPhotons")
 
-        # Photon specific
-        self._SuperPhotonRecCollectionName = 'HLT_PhotonSuperRecCollection'
-        self._outputPhotonKey = 'HLT_egamma_Photons'
+        """Static class to collect all string manipulation in precision calo sequences """
+        self.precisionCaloTopoCollection                = 'HLT_egammaTopoCluster'
+        self.precisionCaloEgammaRecCollection           = 'HLT_precisionCaloEgammaRecCollection'
+        self.precisionCaloClusterContainer              = recordable("HLT_CaloEMClusters")
+        self.precisionHICaloClusterContainer            = recordable("HLT_HICaloEMClusters")
+        self.egEventShape                               = recordable('HLT_HIEventShapeEG')
+        self.precisionEgammaRecCollection               = 'HLT_egammaRecCollection'
+        self.precisionEMClusterContainer                = recordable('HLT_TrigEMClusters')
 
-        # Tunning configuration
-        self._pidVersion = 'rel22_20210611'
-        self._dnnVersion = 'rel21_20210928'
-        self._ringerVersion = 'TrigL2_20210702_r4'
-        self._calibMVAVersion = '"egammaMVACalib/online/v6"'
+        """Static class to collect all string manipulation in precision photon sequences """
+        self.precisionPhotonSuperClusterCollection      = 'HLT_PhotonSuperRecCollection'
+        self.precisionPhotonContainer                   = recordable('HLT_egamma_Photons')
 
+        """Static class to collect all string manipulation in precision electron sequences """
+        self.precisionElectronSuperClusterCollection    = 'HLT_ElectronSuperRecCollection'
+        self.precisionElectronContainer                 = recordable('HLT_egamma_Electrons')
 
-                                                
-      @property
-      def SuperElectronRecCollectionName(self):  
-          return self._SuperElectronRecCollectionName
-
-      @property
-      def outputElectronKey(self):               
-          return recordable(self._outputElectronKey)
+        #
+        # Track configuration
+        #
+        self._IDTrigConfig                              = getInDetTrigConfig( 'electron' )
 
-      @property
-      def SuperPhotonRecCollectionName(self):    
-          return self._SuperPhotonRecCollectionName
+        #
+        # Special sequences
+        #
+        self.TrigTRTHTCountsContainer                   = recordable("HLT_TrigTRTHTCounts")
 
-      @property
-      def EgammaRecKey(self):                    
-          return self._EgammaRecKey
 
-      @property
-      def outputPhotonKey(self):                 
-          return recordable(self._outputPhotonKey)
 
       @property
-      def outputTopoSeededClusterKey(self):      
-          return self._outputTopoSeededClusterKey
-
-      @property
-      def outputTopoCollection(self):      
-          return self._outputTopoCollection
-
-      @property
-      def PrecisionCaloEgammaRecKey(self):      
-          return self._PrecisionCaloEgammaRecKey
-
-      @property
-      def TrigEMClusterToolOutputContainer(self):
-          return recordable(self._TrigEMClusterToolOutputContainer)
+      def precisionTrackingContainer(self):
+          return self._IDTrigConfig.tracks_IDTrig()
 
       @property
       def IDTrigConfig(self):
           return self._IDTrigConfig
 
-      @property
-      def TrigElectronTracksCollectionName(self):
-          return self._IDTrigConfig.tracks_IDTrig()
-
-      @property
-      def pidVersion(self):                      
-          return self._pidVersion
-
-      @property
-      def dnnVersion(self):                      
-          return self._dnnVersion
-
-      @property
-      def ringerVersion(self):                   
-          return self._ringerVersion
-
-      @property
-      def calibMVAVersion(self):                   
-          return self._calibMVAVersion
 
 
-      @property
-      def outputTrackKey(self):
-        return self._outputTrackKey
-
-      @property
-      def  outputTrackParticleKey(self):
-        return recordable(self._outputTrackParticleKey)
-      
 
-class TrigEgammaKeys_electrons_LRT(TrigEgammaKeys_base):
+class TrigEgammaKeys_LRT(TrigEgammaKeysBase):
     # This class contians modified base configuration class for LRT electron trigger chains
     def __init__(self):
-        TrigEgammaKeys_base.__init__(self)
-        self._outputElectronKey = 'HLT_egamma_Electrons_LRT'
-        self._IDTrigConfig = getInDetTrigConfig('electronLRT')
-
-class TrigEgammaKeys_electrons_GSF(TrigEgammaKeys_base):
-    # This class contians modified base configuration class for GSF electron trigger chains
-    def __init__(self):
-        TrigEgammaKeys_base.__init__(self)
-        self._outputElectronKey = 'HLT_egamma_Electrons_GSF'
-        self._outputTrackKey = 'HLT_IDTrkTrack_Electron_GSF'
-        self._outputTrackParticleKey = 'HLT_IDTrack_Electron_GSF'
+        TrigEgammaKeysBase.__init__(self)
+        self.fastElectronRoIContainer       = recordable("HLT_Roi_FastElectron_LRT")
+        self.fastElectronContainer          = recordable('HLT_FastElectrons_LRT')
+        self.precisionCaloClusterContainer  = recordable("HLT_CaloEMClusters_LRT")
+        self.precisionElectronContainer     = recordable('HLT_egamma_Electrons_LRT')
+        self._IDTrigConfig                  = getInDetTrigConfig('electronLRT')
 
 
 
+class TrigEgammaKeys_GSF(TrigEgammaKeysBase):
+    # This class contians modified base configuration class for GSF electron trigger chains
+    def __init__(self):
+        TrigEgammaKeysBase.__init__(self)
+        
+        # from HLT_IDTrack_Electron to HLT_IDTrack_Electron by refit alg
+        self.precisionElectronTrkCollectionGSF          = 'HLT_IDTrkTrack_Electron_GSF'
+        self.precisionElectronTrackParticleContainerGSF = recordable('HLT_IDTrack_Electron_GSF')
+        self.precisionElectronContainer                 = recordable('HLT_egamma_Electrons_GSF')
 
 
+#
+# Get keys from variant name
+#
+def getTrigEgammaKeys(name=''):
 
-_TrigEgammaConfigurations = {
+    _d = {
         # Dictionary that maps a string to a configuration setting for electron and photon chains
-        '': TrigEgammaKeys_base(),
-        '_LRT': TrigEgammaKeys_electrons_LRT(),
-        '_GSF': TrigEgammaKeys_electrons_GSF(),
+        ''      : TrigEgammaKeysBase(),
+        '_LRT'  : TrigEgammaKeys_LRT(),
+        '_GSF'  : TrigEgammaKeys_GSF(),
         }
 
+    if name in _d.keys():
+        return _d[name]
+    else:
+        raise Exception('getTrigEgammaKeys() called with non valid name : ' + name + ' valid names are:' + str(_d.keys()) )
+
+
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaSliceFlags.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaSliceFlags.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc6f56ca7dadd5a365701bce1c42fb501f09d437
--- /dev/null
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/TrigEgammaSliceFlags.py
@@ -0,0 +1,75 @@
+# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+
+""" Egamma slice specific flags  """
+
+from AthenaCommon.Logging import logging
+from AthenaCommon.JobProperties import JobProperty, JobPropertyContainer
+
+__author__  = 'Joao Victor Pinto'
+__version__="$$"
+__doc__="Egamma slice specific flags  "
+
+log = logging.getLogger( 'TriggerMenu.TrigEgammaSliceFlags' )
+_flags = [] 
+
+
+class ringerVersion(JobProperty):
+    """  """ 
+    statusOn=True
+    allowedTypes=['str']
+    StoredValue='TrigL2_20210702_r4'
+
+_flags.append(ringerVersion)
+
+class pidVersion(JobProperty):
+    """  """ 
+    statusOn=True
+    allowedTypes=['str']
+    StoredValue='rel22_20210611'
+
+_flags.append(pidVersion)
+
+class dnnVersion(JobProperty):
+    """  """ 
+    statusOn=True
+    allowedTypes=['str']
+    StoredValue='rel21_20210928'
+
+_flags.append(dnnVersion)
+
+class calibMVAVersion(JobProperty):
+    """  """ 
+    statusOn=True
+    allowedTypes=['str']
+    StoredValue='egammaMVACalib/online/v6'
+
+_flags.append(calibMVAVersion)
+
+
+
+# create container
+class TrigEgammaSlice(JobPropertyContainer):
+    """ Egamma Slice Flags """
+
+from TriggerJobOpts.TriggerFlags import TriggerFlags
+TriggerFlags.add_Container(TrigEgammaSlice)
+
+
+for flag in _flags:
+    TriggerFlags.TrigEgammaSlice.add_JobProperty(flag)
+
+# make an alias
+TrigEgammaSliceFlags = TriggerFlags.TrigEgammaSlice
+
+def run3ConfigAction(run3Flag):
+    if run3Flag=='2021':
+        log.info('TrigEgammaSliceFlags set for %s',run3Flag)
+        TrigEgammaSliceFlags.ringerVersion      = 'TrigL2_20210702_r4'
+        TrigEgammaSliceFlags.dnnVersion         = 'rel21_20210928'
+        TrigEgammaSliceFlags.pidVersion         = 'rel22_20210611'
+        TrigEgammaSliceFlags.calibMVAVersion    = 'egammaMVACalib/online/v6'
+    else:
+        log.info('TrigEgammaSliceFlags not set use defaults',run3Flag)
+
+
+run3ConfigAction('2021')
\ No newline at end of file
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/ElectronChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/ElectronChainConfiguration.py
index 5143858d2c3d90e51fb2fa4d3fbaf051ea0054f1..d074307d3105748012f13fe0343c9300ccef386f 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/ElectronChainConfiguration.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/ElectronChainConfiguration.py
@@ -9,17 +9,12 @@ from ..Menu.ChainConfigurationBase import ChainConfigurationBase
 from ..CommonSequences.CaloSequences import fastCaloMenuSequence
 from ..CommonSequences.CaloSequences_FWD import fastCaloMenuSequence_FWD
 
-
-from ..Electron.FastElectronMenuSequences import fastElectronMenuSequence
-from ..Electron.FastElectronMenuSequences_LRT import fastElectronMenuSequence_LRT
-from ..Egamma.PrecisionCaloMenuSequences import precisionCaloMenuSequence
-from ..Egamma.PrecisionCaloMenuSequences_LRT import precisionCaloMenuSequence_LRT
-from ..Egamma.PrecisionCaloMenuSequences_FWD import precisionCaloMenuSequence_FWD
+from ..Electron.FastElectronMenuSequences import fastElectronMenuSequence, fastElectronMenuSequence_LRT
+from ..Electron.PrecisionCaloMenuSequences import precisionCaloMenuSequence, precisionCaloMenuSequence_LRT
 from ..Electron.PrecisionElectronMenuSequences import precisionElectronMenuSequence
 from ..Electron.PrecisionElectronMenuSequences_GSF import precisionElectronMenuSequence_GSF
 from ..Electron.PrecisionElectronMenuSequences_LRT import precisionElectronMenuSequence_LRT
-from ..Electron.PrecisionTrackingMenuSequences import precisionTrackingMenuSequence
-from ..Electron.PrecisionTrackingMenuSequences_LRT import precisionTrackingMenuSequence_LRT
+from ..Electron.PrecisionTrackingMenuSequences     import precisionTrackingMenuSequence, precisionTrackingMenuSequence_LRT
 
 from TrigBphysHypo.TrigMultiTrkComboHypoConfig import StreamerNoMuonDiElecFastComboHypoCfg, NoMuonDiElecPrecisionComboHypoCfg, StreamerDiElecFastComboHypoCfg, DiElecPrecisionComboHypoCfg, TrigMultiTrkComboHypoToolFromDict
 
@@ -119,9 +114,6 @@ def diEgammaHegMassComboHypoToolFromDict(chainDict):
 def electronFastCaloCfg_fwd( flags, is_probe_leg=False ):
     return fastCaloMenuSequence_FWD("Electron", is_probe_leg=is_probe_leg)
 
-def precisionCaloSequenceCfg_fwd( flags, is_probe_leg=False ):
-    return precisionCaloMenuSequence_FWD('Electron', is_probe_leg=is_probe_leg)
-
 
 #----------------------------------------------------------------
 # Class to configure chain
@@ -156,7 +148,7 @@ class ElectronChainConfiguration(ChainConfigurationBase):
                 'nominallrt'  : ['getFastCalo', 'getFastElectron_lrt', 'getPrecisionCaloElectron_lrt', 'getPrecisionTracking_lrt', 'getPrecisionElectron_lrt'],  
 
                 # fwd sequences
-                'etcutfwd' : ['getFastCalo_fwd', 'getPrecisionCaloElectron_fwd']
+                'etcutfwd' : ['getFastCalo_fwd']
                 }
 
         log.debug('electron chain part = %s', self.chainPart)
@@ -315,6 +307,3 @@ class ElectronChainConfiguration(ChainConfigurationBase):
         stepName       = "FastCalo_FWD_electron"
         return self.getStep(1, stepName, [electronFastCaloCfg_fwd], is_probe_leg=is_probe_leg)
 
-    def getPrecisionCaloElectron_fwd(self,is_probe_leg=False):
-        stepName = "precisionCalo_FWD_electron"
-        return self.getStep(2,stepName,[ precisionCaloSequenceCfg_fwd], is_probe_leg=is_probe_leg)
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/FastElectronMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/FastElectronMenuSequences.py
index 2189fdb2a1d4b49069ceb59c92d236e791b2f394..2500298e7b3f7180cc9e53b395f9d1cac84e175e 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/FastElectronMenuSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/FastElectronMenuSequences.py
@@ -10,14 +10,12 @@ from AthenaCommon.CFElements import parOR, seqAND
 from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 from DecisionHandling.DecisionHandlingConf import ViewCreatorCentredOnClusterROITool
 from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
-TrigEgammaKeys = getTrigEgammaKeys()
-from TrigEDMConfig.TriggerEDMRun3 import recordable
-
 
 
 def fastElectronSequence(ConfigFlags, variant=''):
     """ second step:  tracking....."""
-    
+
+    TrigEgammaKeys = getTrigEgammaKeys(variant)
     IDTrigConfig = TrigEgammaKeys.IDTrigConfig
   
     from TrigInDetConfig.InDetTrigFastTracking import makeInDetTrigFastTracking
@@ -41,7 +39,7 @@ def fastElectronSequence(ConfigFlags, variant=''):
 
     theElectronFex.TrigEMClusterName = CaloMenuDefs.L2CaloClusters
     theElectronFex.TrackParticlesName = TrackParticlesName
-    theElectronFex.ElectronsName=recordable("HLT_FastElectrons"+variant)
+    theElectronFex.ElectronsName=TrigEgammaKeys.fastElectronContainer
     theElectronFex.DummyElectronsName= "HLT_FastDummyElectrons"
  
     # EVCreator:
@@ -50,7 +48,7 @@ def fastElectronSequence(ConfigFlags, variant=''):
     # Spawn View on SuperRoI encompassing all clusters found within the L1 RoI
     roiTool = ViewCreatorCentredOnClusterROITool()
     roiTool.AllowMultipleClusters = False # If True: SuperROI mode. If False: highest eT cluster in the L1 ROI
-    roiTool.RoisWriteHandleKey = recordable("HLT_Roi_FastElectron"+variant)
+    roiTool.RoisWriteHandleKey = TrigEgammaKeys.fastElectronRoIContainer
     roiTool.RoIEtaWidth = IDTrigConfig.etaHalfWidth
     roiTool.RoIPhiWidth = IDTrigConfig.phiHalfWidth
     l2ElectronViewsMaker.RoITool = roiTool
@@ -66,6 +64,7 @@ def fastElectronSequence(ConfigFlags, variant=''):
     electronAthSequence = seqAND("electronAthSequence"+variant, [l2ElectronViewsMaker, electronInViewAlgs ] )
     return (electronAthSequence, l2ElectronViewsMaker)
 
+
 def fastElectronSequence_LRT(ConfigFlags):
     # This is SAME as fastElectronSequence but for variant "_LRT"
     return fastElectronSequence(ConfigFlags,"_LRT")
@@ -76,19 +75,21 @@ def fastElectronMenuSequence(do_idperf,is_probe_leg=False, variant=''):
     """ Creates 2nd step Electron  MENU sequence"""
     # retrieve the reco sequence+IM
     theSequence = {
-            '' : fastElectronSequence,
-            '_LRT': fastElectronSequence_LRT
+            ''      : fastElectronSequence,
+            '_LRT'  : fastElectronSequence_LRT
             }
     (electronAthSequence, l2ElectronViewsMaker) = RecoFragmentsPool.retrieve(theSequence[variant], ConfigFlags)
 
     # make the Hypo
     from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaFastElectronHypoAlg
+    TrigEgammaKeys = getTrigEgammaKeys(variant)
+
     if do_idperf is True:
         theElectronHypo = TrigEgammaFastElectronHypoAlg("TrigEgammaFastElectronHypoAlg_idperf"+variant)
         theElectronHypo.Electrons = "HLT_FastDummyElectrons"
     else:
         theElectronHypo = TrigEgammaFastElectronHypoAlg("TrigEgammaFastElectronHypoAlg"+variant)
-        theElectronHypo.Electrons = "HLT_FastElectrons"+variant
+        theElectronHypo.Electrons = TrigEgammaKeys.fastElectronContainer
 
     theElectronHypo.RunInView=True
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/FastElectronMenuSequences_LRT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/FastElectronMenuSequences_LRT.py
deleted file mode 100644
index ce7783e9dc0716017e8f21f68783cbe9d10b4fc2..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/FastElectronMenuSequences_LRT.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#
-#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
-#
-
-from AthenaConfiguration.AllConfigFlags import ConfigFlags 
-
-# menu components   
-from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool
-from AthenaCommon.CFElements import parOR, seqAND
-from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
-from DecisionHandling.DecisionHandlingConf import ViewCreatorCentredOnClusterROITool
-from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaDefs import TrigEgammaKeys_LRT
-from TrigEDMConfig.TriggerEDMRun3 import recordable
-
-def fastElectronSequence_LRT(ConfigFlags):
-    """ second step:  tracking....."""
-    
-    IDTrigConfig = TrigEgammaKeys_LRT.IDTrigConfig_LRT   
-
-    from TrigInDetConfig.InDetTrigFastTracking import makeInDetTrigFastTracking
-    RoIs = "EMIDRoIs_LRT" # contract with the fastCalo
-    viewAlgs, viewVerify = makeInDetTrigFastTracking( config = IDTrigConfig, rois = RoIs )
-
-    # A simple algorithm to confirm that data has been inherited from parent view
-    # Required to satisfy data dependencies
-    from TriggerMenuMT.HLTMenuConfig.CommonSequences.CaloSequences import CaloMenuDefs  
-    viewVerify.DataObjects += [( 'xAOD::TrigEMClusterContainer' , 'StoreGateSvc+%s' % CaloMenuDefs.L2CaloClusters ),
-                               ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs )]
-
-    TrackParticlesName = ""
-    for viewAlg in viewAlgs:
-        if "InDetTrigTrackParticleCreatorAlg" in viewAlg.name():
-            TrackParticlesName = viewAlg.TrackParticlesName
-      
-
-    from TrigEgammaRec.TrigEgammaFastElectronConfig import TrigEgammaFastElectron_ReFastAlgo_Clean
-    theElectronFex = TrigEgammaFastElectron_ReFastAlgo_Clean("EgammaFastElectronFex_Clean_LRT")
-    theElectronFex.TrigEMClusterName = CaloMenuDefs.L2CaloClusters
-    theElectronFex.TrackParticlesName = TrackParticlesName
-    theElectronFex.ElectronsName=recordable("HLT_FastElectrons_LRT")
-    theElectronFex.DummyElectronsName= "HLT_FastDummyElectrons"
- 
-    # EVCreator:
-    l2ElectronViewsMaker = EventViewCreatorAlgorithm("IMl2Electron_LRT")
-    l2ElectronViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI
-    # Spawn View on SuperRoI encompassing all clusters found within the L1 RoI
-    roiTool = ViewCreatorCentredOnClusterROITool()
-    roiTool.AllowMultipleClusters = False # If True: SuperROI mode. If False: highest eT cluster in the L1 ROI
-    roiTool.RoisWriteHandleKey = recordable("HLT_Roi_FastElectron_LRT")
-    roiTool.RoIEtaWidth = IDTrigConfig.etaHalfWidth
-    roiTool.RoIPhiWidth = IDTrigConfig.phiHalfWidth
-    l2ElectronViewsMaker.RoITool = roiTool
-    l2ElectronViewsMaker.InViewRoIs = RoIs
-    l2ElectronViewsMaker.Views = "EMElectronViews_LRT"
-    l2ElectronViewsMaker.ViewFallThrough = True
-    l2ElectronViewsMaker.RequireParentView = True
-
-    theElectronFex.RoIs = l2ElectronViewsMaker.InViewRoIs
-    electronInViewAlgs = parOR("electronInViewAlgs_LRT", viewAlgs + [ theElectronFex ])
-    l2ElectronViewsMaker.ViewNodeName = "electronInViewAlgs_LRT"
-
-    electronAthSequence = seqAND("electronAthSequence_LRT", [l2ElectronViewsMaker, electronInViewAlgs ] )
-    return (electronAthSequence, l2ElectronViewsMaker)
-   
-def fastElectronMenuSequence_LRT(do_idperf,is_probe_leg=False):
-    """ Creates 2nd step Electron  MENU sequence"""
-    # retrieve the reco sequence+IM
-    (electronAthSequence, l2ElectronViewsMaker) = RecoFragmentsPool.retrieve(fastElectronSequence_LRT, ConfigFlags)
-
-    # make the Hypo
-    from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaFastElectronHypoAlg
-    if do_idperf is True:
-        theElectronHypo = TrigEgammaFastElectronHypoAlg("TrigEgammaFastElectronHypoAlg_idperf_LRT")
-        theElectronHypo.Electrons = "HLT_FastDummyElectrons"
-    else:
-        theElectronHypo = TrigEgammaFastElectronHypoAlg("TrigEgammaFastElectronHypoAlg_LRT")
-        theElectronHypo.Electrons = "HLT_FastElectrons_LRT"
-
-    theElectronHypo.RunInView=True
-
-    from TrigEgammaHypo.TrigEgammaFastElectronHypoTool import TrigEgammaFastElectronHypoToolFromDict
-
-    return  MenuSequence( Maker       = l2ElectronViewsMaker,                                        
-                          Sequence    = electronAthSequence,
-                          Hypo        = theElectronHypo,
-                          HypoToolGen = TrigEgammaFastElectronHypoToolFromDict,
-                          IsProbe     = is_probe_leg )
-
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences_LRT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionCaloMenuSequences.py
similarity index 54%
rename from Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences_LRT.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionCaloMenuSequences.py
index 9ecb8807377b01569366b308a70c2d8d5c0ea6ff..02c198a500c6b48f5f32b02f684bc93c76611032 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences_LRT.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionCaloMenuSequences.py
@@ -8,50 +8,69 @@ from AthenaCommon.CFElements import seqAND
 from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 from DecisionHandling.DecisionHandlingConf import ViewCreatorPreviousROITool
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
-from TrigEDMConfig.TriggerEDMRun3 import recordable
       
-class precisionCaloMenuDefs_LRT(object):
-      """Static class to collect all string manipulation in Calo sequences """
-      precisionCaloClusters= recordable("HLT_CaloEMClusters_LRT")
 
-def precisionCaloSequence_LRT(ConfigFlags):
+
+def tag(ion):
+    return 'precision' + ('HI' if ion is True else '') + 'CaloElectron'
+
+
+def precisionCaloSequence(ConfigFlags, ion=False, variant=''):
     """ Creates PrecisionCalo sequence """
+
+    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import  getTrigEgammaKeys
+    TrigEgammaKeys = getTrigEgammaKeys(variant)
+
     # EV creator
-    InViewRoIs="PrecisionCaloRoIs_LRT"     
-    precisionCaloViewsMaker = EventViewCreatorAlgorithm( "IMprecisionCaloElectron_LRT")
+    InViewRoIs="PrecisionCaloRoIs" + variant
+    precisionCaloViewsMaker = EventViewCreatorAlgorithm('IM' + tag(ion) + variant)
     precisionCaloViewsMaker.ViewFallThrough = True
     precisionCaloViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI
     roiTool = ViewCreatorPreviousROITool()
     # Note: This step processes Decision Objects which have followed either Electron reco, Photon reco, or both.
     # For Decision Object which have followed both, there is an ambiguity about which ROI should be used in this
     # merged step. In such cases we break the ambiguity by specifying that the Electron ROI is to be used.
-    roiTool.RoISGKey = "HLT_Roi_FastElectron_LRT"
+    roiTool.RoISGKey = TrigEgammaKeys.fastElectronRoIContainer
     precisionCaloViewsMaker.RoITool = roiTool
     precisionCaloViewsMaker.InViewRoIs = InViewRoIs
-    precisionCaloViewsMaker.Views = "precisionCaloElectronViews_LRT"
+    precisionCaloViewsMaker.Views = tag(ion) + 'Views' + variant
     precisionCaloViewsMaker.RequireParentView = True
     precisionCaloViewsMaker.CacheDisabled = True
 
     # reco sequence
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloRecoSequences import precisionCaloRecoSequence_LRT
-    (precisionCaloInViewSequence, sequenceOut) = precisionCaloRecoSequence_LRT(None,InViewRoIs)
-
+    from TriggerMenuMT.HLTMenuConfig.Electron.PrecisionCaloRecoSequences import precisionCaloRecoSequence
+    (precisionCaloInViewSequence, sequenceOut) = precisionCaloRecoSequence(None, InViewRoIs, ion, variant)
+        
     precisionCaloViewsMaker.ViewNodeName = precisionCaloInViewSequence.name()
 
+    theSequence = seqAND(tag(ion) + 'Sequence' + variant, [])
+
+    if ion is True:
+        # add UE subtraction for heavy ion e/gamma triggers
+        # NOTE: UE subtraction requires an average pedestal to be calculated
+        # using the full event (FS info), and has to be done outside of the
+        # event views in this sequence. the egammaFSRecoSequence is thus placed
+        # before the precisionCaloInViewSequence.
+        from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import egammaFSCaloRecoSequence
+        egammaFSRecoSequence = egammaFSCaloRecoSequence()
+        theSequence += egammaFSRecoSequence
+
     # connect EVC and reco
-    theSequence = seqAND("precisionCaloElectronSequence_LRT", [precisionCaloViewsMaker, precisionCaloInViewSequence] )
+    theSequence += [precisionCaloViewsMaker, precisionCaloInViewSequence]
     return (theSequence, precisionCaloViewsMaker, sequenceOut)
 
 
-def precisionCaloMenuSequence_LRT(name,is_probe_leg=False):
+
+def precisionCaloMenuSequence(name, is_probe_leg=False, ion=False, variant=''):
     """ Creates precisionCalo MENU sequence """
-    (sequence, precisionCaloViewsMaker, sequenceOut) = RecoFragmentsPool.retrieve(precisionCaloSequence_LRT, ConfigFlags)
+
+    (sequence, precisionCaloViewsMaker, sequenceOut) = RecoFragmentsPool.retrieve(precisionCaloSequence, ConfigFlags, ion=ion, variant=variant)
 
     #Hypo
     from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaPrecisionCaloHypoAlg
     from TrigEgammaHypo.TrigEgammaPrecisionCaloHypoTool import TrigEgammaPrecisionCaloHypoToolFromDict
 
-    thePrecisionCaloHypo = TrigEgammaPrecisionCaloHypoAlg(name+"precisionCaloElectronHypo_LRT")
+    thePrecisionCaloHypo = TrigEgammaPrecisionCaloHypoAlg(name + tag(ion) + 'Hypo'+ variant)
     thePrecisionCaloHypo.CaloClusters = sequenceOut
 
     return MenuSequence( Sequence    = sequence,
@@ -59,3 +78,7 @@ def precisionCaloMenuSequence_LRT(name,is_probe_leg=False):
                          Hypo        = thePrecisionCaloHypo,
                          HypoToolGen = TrigEgammaPrecisionCaloHypoToolFromDict,
                          IsProbe     = is_probe_leg)
+
+
+def precisionCaloMenuSequence_LRT(name, is_probe_leg=False):
+    return precisionCaloMenuSequence(name, is_probe_leg=is_probe_leg, ion=False, variant='_LRT')
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionCaloRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionCaloRecoSequences.py
new file mode 100644
index 0000000000000000000000000000000000000000..73bdbe87d1f39e4d3427168fc68fddb2ab6b514f
--- /dev/null
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionCaloRecoSequences.py
@@ -0,0 +1,53 @@
+#
+#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+#
+
+from egammaAlgs import egammaAlgsConf
+from egammaRec.Factories import AlgFactory
+from AthenaCommon.CFElements import parOR
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import RecoFragmentsPool
+from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import TrigEgammaRec, TrigEgammaSuperClusterBuilder 
+from AthenaCommon.Logging import logging
+
+log = logging.getLogger(__name__)
+
+# Dummy flag arg needed so that each reco sequence is held separately
+# in the RecoFragmentsPool -- only the RoIs are used to distinguish
+# different sequences. New convention is just to pass "None" for flags
+# taken from Jet/JetRecoSequences.py
+def precisionCaloRecoSequence(DummyFlag, RoIs, ion=False, variant=''):
+    log.debug('DummyFlag = %s',str(DummyFlag))
+    log.debug('RoIs = %s',RoIs)
+
+    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import  getTrigEgammaKeys
+    TrigEgammaKeys = getTrigEgammaKeys(variant)
+
+    from TrigT2CaloCommon.CaloDef import HLTRoITopoRecoSequence, HLTHIRoITopoRecoSequence
+    topoRecoSequence = HLTHIRoITopoRecoSequence if ion is True else HLTRoITopoRecoSequence
+    (caloRecoSequence, caloclusters) = RecoFragmentsPool.retrieve(topoRecoSequence, None, RoIs=RoIs, algSuffix=variant)
+
+    tag = 'HI' if ion is True else '' 
+    outputCaloClusters = TrigEgammaKeys.precisionHICaloClusterContainer if ion else TrigEgammaKeys.precisionCaloClusterContainer
+    log.debug('precisionOutputCaloClusters = %s',outputCaloClusters)
+
+    egammaTopoClusterCopier = AlgFactory( egammaAlgsConf.egammaTopoClusterCopier,
+                                          name = 'eTrigEgammaTopoClusterCopier' + tag + RoIs + variant ,
+                                          InputTopoCollection = caloclusters,
+                                          OutputTopoCollection = TrigEgammaKeys.precisionCaloTopoCollection,
+                                          OutputTopoCollectionShallow = "tmp_" + TrigEgammaKeys.precisionCaloTopoCollection,
+                                          doAdd = False )
+
+    algo = egammaTopoClusterCopier()
+    precisionRecoSequence = parOR( "electronRoITopoRecoSequence"+tag + variant)
+    precisionRecoSequence += caloRecoSequence
+    precisionRecoSequence += algo
+    trigEgammaRec = TrigEgammaRec(name = 'eTrigEgammaRec' + tag + RoIs + variant)
+    precisionRecoSequence += trigEgammaRec
+    trigEgammaSuperClusterBuilder = TrigEgammaSuperClusterBuilder(name = 'eTrigEgammaSuperClusterBuilder' + tag + RoIs + variant)
+    trigEgammaSuperClusterBuilder.SuperClusterCollectionName = outputCaloClusters
+    trigEgammaSuperClusterBuilder.CalibrationType = 'electron'
+    precisionRecoSequence +=  trigEgammaSuperClusterBuilder
+    sequenceOut = outputCaloClusters
+
+    return (precisionRecoSequence, sequenceOut)
+
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
index 9203065cda227c547cb9f6db42e9c9ab8039f0b3..85dd764128d35923273e8f37fadc382dee5fcb54 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences.py
@@ -25,16 +25,13 @@ def precisionElectronRecoSequence(RoIs, ion=False, variant=''):
     
     import AthenaCommon.CfgMgr as CfgMgr
     # First the data verifiers:
-    # Here we define the data dependencies. What input needs to be available for the Fexs (i.e. TopoClusters from precisionCalo) in order to run
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences import precisionCaloMenuDefs
-       
+    # Here we define the data dependencies. What input needs to be available for the Fexs (i.e. TopoClusters from precisionCalo) in order to run       
     # precision Tracking related data dependencies
     from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import  getTrigEgammaKeys
-
     TrigEgammaKeys = getTrigEgammaKeys(variant)
 
-    caloClusters = precisionCaloMenuDefs.caloClusters(ion)
-    trackParticles = TrigEgammaKeys.TrigElectronTracksCollectionName
+    caloClusters = TrigEgammaKeys.precisionHICaloClusterContainer if ion else TrigEgammaKeys.precisionCaloClusterContainer
+    trackParticles = TrigEgammaKeys.precisionTrackingContainer
 
     ViewVerifyTrk   = CfgMgr.AthViews__ViewDataVerifier("PrecisionTrackViewDataVerifier" + tag)
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences_GSF.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences_GSF.py
index 51b5d0a7efb16d4d8a9e20381044143145411476..8f1fa1fb49fd898fe0c02353cc83fa227069db10 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences_GSF.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences_GSF.py
@@ -16,22 +16,20 @@ def precisionElectronRecoSequence_GSF(RoIs):
     log.debug('precisionElectronRecoSequence_GSF(RoIs = %s)',RoIs)
     
     import AthenaCommon.CfgMgr as CfgMgr
-    # First the data verifiers:
-    # Here we define the data dependencies. What input needs to be available for the Fexs (i.e. TopoClusters from precisionCalo) in order to run
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences import precisionCaloMenuDefs
        
     # precision Tracking related data dependencies
-    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaDefs import  TrigEgammaKeys_GSF
     from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import  getTrigEgammaKeys
 
-    TrigEgammaKeys = getTrigEgammaKeys()
+    TrigEgammaKeys = getTrigEgammaKeys('_GSF')
+    caloClusters = TrigEgammaKeys.precisionCaloClusterContainer
+    trackParticles = TrigEgammaKeys.precisionTrackingContainer
 
     ViewVerifyTrk_GSF   = CfgMgr.AthViews__ViewDataVerifier("PrecisionTrackViewDataVerifier_GSF")
 
     from TrigInDetConfig.InDetTrigCollectionKeys import TrigTRTKeys, TrigPixelKeys
     ViewVerifyTrk_GSF.DataObjects = [( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' ),
-                                 ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+%s' % precisionCaloMenuDefs.precisionCaloClusters ),
-                                 ( 'xAOD::TrackParticleContainer','StoreGateSvc+%s' % TrigEgammaKeys.TrigElectronTracksCollectionName),
+                                 ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+%s' % caloClusters ),
+                                 ( 'xAOD::TrackParticleContainer','StoreGateSvc+%s' % trackParticles),
                                  # verifier object needed by GSF
                                  ( 'SG::AuxElement' , 'StoreGateSvc+EventInfo.averageInteractionsPerCrossing' ), 
                                  ( 'InDet::PixelGangedClusterAmbiguities' , 'StoreGateSvc+%s' % TrigPixelKeys.PixelClusterAmbiguitiesMap ),
@@ -72,7 +70,7 @@ def precisionElectronRecoSequence_GSF(RoIs):
     TrigEgammaRecAlgo_GSF = TrigEgammaRecElectron("TrigEgammaRecElectron_GSF")
     thesequence_GSF += TrigEgammaRecAlgo_GSF
     TrigEgammaRecAlgo_GSF.TrackMatchBuilderTool = TrigEMTrackMatchBuilder_GSF
-    TrigEgammaRecAlgo_GSF.InputClusterContainerName = precisionCaloMenuDefs.precisionCaloClusters
+    TrigEgammaRecAlgo_GSF.InputClusterContainerName = caloClusters
 
     ## TrigElectronSuperClusterBuilder_GSF ##
     TrigSuperElectronAlgo_GSF = TrigElectronSuperClusterBuilder("TrigElectronSuperClusterBuilder_GSF")
@@ -82,7 +80,7 @@ def precisionElectronRecoSequence_GSF(RoIs):
     ## TrigTopoEgammaElectronCfg_GSF ##
     TrigTopoEgammaAlgo_GSF = TrigTopoEgammaElectronCfg("TrigTopoEgammaElectronCfg_GSF") 
     thesequence_GSF += TrigTopoEgammaAlgo_GSF
-    TrigTopoEgammaAlgo_GSF.ElectronOutputName = TrigEgammaKeys_GSF.outputElectronKey_GSF
+    TrigTopoEgammaAlgo_GSF.ElectronOutputName = TrigEgammaKeys.precisionElectronContainer
     collectionOut_GSF = TrigTopoEgammaAlgo_GSF.ElectronOutputName
     TrigTopoEgammaAlgo_GSF.DummyElectronOutputName = "HLT_PrecisionDummyElectron"
     collectionOut_GSF_dummy = TrigTopoEgammaAlgo_GSF.DummyElectronOutputName
@@ -90,7 +88,7 @@ def precisionElectronRecoSequence_GSF(RoIs):
     ## TrigElectronIsoBuilderCfg_GSF ##
     isoBuilder_GSF = TrigElectronIsoBuilderCfg("TrigElectronIsoBuilderCfg_GSF")
     thesequence_GSF += isoBuilder_GSF
-    isoBuilder_GSF.ElectronCollectionContainerName = TrigEgammaKeys_GSF.outputElectronKey_GSF
+    isoBuilder_GSF.ElectronCollectionContainerName = TrigEgammaKeys.precisionElectronContainer
 
     #online monitoring for topoEgammaBuilder_GSF
     from TriggerMenuMT.HLTMenuConfig.Electron.TrigElectronFactories import PrecisionElectronTopoMonitorCfg
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences_LRT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences_LRT.py
index c657833922a76ceb02bee1d8f3adac1c21a7a744..0c42123fb73338ba90367a6e33730c95949013d1 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences_LRT.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionElectronRecoSequences_LRT.py
@@ -22,19 +22,18 @@ def precisionElectronRecoSequence_LRT(RoIs):
     log.debug('precisionElectronRecoSequence_LRT(RoIs = %s)',RoIs)
     
     import AthenaCommon.CfgMgr as CfgMgr
-    # First the data verifiers:
-    # Here we define the data dependencies. What input needs to be available for the Fexs (i.e. TopoClusters from precisionCalo) in order to run
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences_LRT import precisionCaloMenuDefs_LRT
-       
     # precision Tracking related data dependencies
-    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaDefs import TrigEgammaKeys_LRT
+    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import  getTrigEgammaKeys
+    TrigEgammaKeys = getTrigEgammaKeys('_LRT')
 
+    caloClusters = TrigEgammaKeys.precisionCaloClusterContainer
+    trackParticles = TrigEgammaKeys.precisionTrackingContainer
 
     ViewVerifyTrk   = CfgMgr.AthViews__ViewDataVerifier("PrecisionTrackViewDataVerifier_LRT")
 
     ViewVerifyTrk.DataObjects = [( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' ),
-                                 ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+%s' % precisionCaloMenuDefs_LRT.precisionCaloClusters ),
-                                 ( 'xAOD::TrackParticleContainer','StoreGateSvc+%s' % TrigEgammaKeys_LRT.TrigElectronTracksCollectionName_LRT)]
+                                 ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+%s' % caloClusters ),
+                                 ( 'xAOD::TrackParticleContainer','StoreGateSvc+%s' % trackParticles)]
 
 
     """ Retrieve the factories now """
@@ -52,13 +51,13 @@ def precisionElectronRecoSequence_LRT(RoIs):
     
     ## TrigEMTrackMatchBuilder_LRT ##
     TrigEMTrackMatchBuilder = TrigEMTrackMatchBuilder("TrigEMTrackMatchBuilder_LRT")
-    TrigEMTrackMatchBuilder.TrackParticlesName =  TrigEgammaKeys_LRT.TrigElectronTracksCollectionName_LRT
+    TrigEMTrackMatchBuilder.TrackParticlesName =  trackParticles
 
     ## TrigEgammaRecElectron_LRT ##
     TrigEgammaRecAlgo = TrigEgammaRecElectron("TrigEgammaRecElectron_LRT")
     thesequence += TrigEgammaRecAlgo
     TrigEgammaRecAlgo.TrackMatchBuilderTool = TrigEMTrackMatchBuilder
-    TrigEgammaRecAlgo.InputClusterContainerName = precisionCaloMenuDefs_LRT.precisionCaloClusters
+    TrigEgammaRecAlgo.InputClusterContainerName = caloClusters
 
     ## TrigElectronSuperClusterBuilder_LRT ##
     TrigSuperElectronAlgo = TrigElectronSuperClusterBuilder("TrigElectronSuperClusterBuilder_LRT")
@@ -70,7 +69,7 @@ def precisionElectronRecoSequence_LRT(RoIs):
     TrigTopoEgammaAlgo = TrigTopoEgammaElectronCfg("TrigTopoEgammaElectronCfg_LRT")
     thesequence += TrigTopoEgammaAlgo
     TrigTopoEgammaAlgo.InputElectronRecCollectionName = TrigSuperElectronAlgo.SuperElectronRecCollectionName
-    TrigTopoEgammaAlgo.ElectronOutputName = TrigEgammaKeys_LRT.outputElectronKey_LRT
+    TrigTopoEgammaAlgo.ElectronOutputName = TrigEgammaKeys.precisionElectronContainer
     collectionOut = TrigTopoEgammaAlgo.ElectronOutputName
     TrigTopoEgammaAlgo.DummyElectronOutputName = "HLT_PrecisionDummyElectron"
     collectionOut_dummy = TrigTopoEgammaAlgo.DummyElectronOutputName
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingMenuSequences.py
index 2332cd2cab2d9ef0a4dd30a2dbbd82d8eb11fa1a..8da35158d8b4a8e0e7bf8b5a9763d43550d32a7d 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingMenuSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingMenuSequences.py
@@ -9,47 +9,51 @@ from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFr
 from AthenaCommon.CFElements import parOR, seqAND
 from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 from DecisionHandling.DecisionHandlingConf import ViewCreatorPreviousROITool
-from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences import precisionCaloMenuDefs
 
 def tag(ion):
     return 'precision' + ('HI' if ion is True else '') + 'Tracking'
 
 
-def precisionTrackingSequence(ConfigFlags, ion=False):
+def precisionTrackingSequence(ConfigFlags, ion=False, variant=''):
     """ fourth step:  precision electron....."""
-    InViewRoIs = "precisionTracking"
+
+    from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
+    TrigEgammaKeys = getTrigEgammaKeys(variant)
+    caloClusters = TrigEgammaKeys.precisionHICaloClusterContainer if ion else TrigEgammaKeys.precisionCaloClusterContainer
+ 
+
+    InViewRoIs = "precisionTracking" + variant
     # EVCreator:
-    precisionTrackingViewsMaker = EventViewCreatorAlgorithm("IM" + tag(ion))
+    precisionTrackingViewsMaker = EventViewCreatorAlgorithm("IM" + tag(ion) + variant)
     precisionTrackingViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI
     precisionTrackingViewsMaker.RoITool = ViewCreatorPreviousROITool()
     precisionTrackingViewsMaker.InViewRoIs = InViewRoIs
-    precisionTrackingViewsMaker.Views = tag(ion) + "Views"
+    precisionTrackingViewsMaker.Views = tag(ion) + "Views" + variant
     precisionTrackingViewsMaker.ViewFallThrough = True
     precisionTrackingViewsMaker.RequireParentView = True
     
     # calling precision tracking
     from TriggerMenuMT.HLTMenuConfig.Electron.PrecisionTrackingSequences import precisionTracking
-    precisionTrackInViewSequence, trackparticles = precisionTracking(InViewRoIs, ion)
+    precisionTrackInViewSequence, trackParticles = precisionTracking(InViewRoIs, ion, variant)
 
-    precisionTrackingInViewAlgs = parOR(tag(ion) + "InViewAlgs", [precisionTrackInViewSequence])
-    precisionTrackingViewsMaker.ViewNodeName = tag(ion) + "InViewAlgs"
+    precisionTrackingInViewAlgs = parOR(tag(ion) + "InViewAlgs" + variant, [precisionTrackInViewSequence])
+    precisionTrackingViewsMaker.ViewNodeName = tag(ion) + "InViewAlgs" + variant
 
     # connect EVC and reco
-    theSequence = seqAND(tag(ion) + "Sequence", [precisionTrackingViewsMaker, precisionTrackingInViewAlgs] )
-    return (theSequence,precisionTrackingViewsMaker,precisionCaloMenuDefs.caloClusters(ion),trackparticles)
+    theSequence = seqAND(tag(ion) + "Sequence" + variant, [precisionTrackingViewsMaker, precisionTrackingInViewAlgs] )
+    return (theSequence,precisionTrackingViewsMaker,caloClusters,trackParticles)
 
 
-def precisionTrackingMenuSequence(name, is_probe_leg=False, ion=False):
+
+def precisionTrackingMenuSequence(name, is_probe_leg=False, ion=False, variant=''):
     """ Creates precisionCalo MENU sequence """
-    (sequence, precisionTrackingViewsMaker, caloclusters, trackparticles) = RecoFragmentsPool.retrieve(precisionTrackingSequence, ConfigFlags, ion=ion)
+    (sequence, precisionTrackingViewsMaker, caloClusters, trackParticles) = RecoFragmentsPool.retrieve(precisionTrackingSequence, ConfigFlags, ion=ion, variant=variant)
 
     #Hypo
     from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaPrecisionTrackingHypoAlg
-
     from TrigEgammaHypo.TrigEgammaPrecisionTrackingHypoTool import TrigEgammaPrecisionTrackingHypoToolFromDict
-
-    thePrecisionTrackingHypo = TrigEgammaPrecisionTrackingHypoAlg(name + tag(ion) + "Hypo")
-    thePrecisionTrackingHypo.CaloClusters = precisionCaloMenuDefs.caloClusters(ion)
+    thePrecisionTrackingHypo = TrigEgammaPrecisionTrackingHypoAlg(name + tag(ion) + "Hypo" + variant)
+    thePrecisionTrackingHypo.CaloClusters = caloClusters
 
     return MenuSequence( Sequence    = sequence,
                          Maker       = precisionTrackingViewsMaker, 
@@ -58,3 +62,7 @@ def precisionTrackingMenuSequence(name, is_probe_leg=False, ion=False):
                          IsProbe     = is_probe_leg)
 
 
+def precisionTrackingMenuSequence_LRT(name, is_probe_leg=False):
+    return precisionTrackingMenuSequence(name, is_probe_leg=is_probe_leg, ion=False, variant='_LRT')
+
+
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingMenuSequences_LRT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingMenuSequences_LRT.py
deleted file mode 100644
index 80ca2a508f66a19da95d4bea475b76f9fc000c39..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingMenuSequences_LRT.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-#  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-#
-
-from AthenaConfiguration.AllConfigFlags import ConfigFlags
-
-# menu components   
-from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool
-from AthenaCommon.CFElements import parOR, seqAND
-from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
-from DecisionHandling.DecisionHandlingConf import ViewCreatorPreviousROITool
-from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences_LRT import precisionCaloMenuDefs_LRT
-
-def precisionTrackSequence_LRT(ConfigFlags):
-    """ fourth step:  precision electron....."""
-    InViewRoIs = "precisionTrack_LRT"
-    # EVCreator:
-    precisionTrackViewsMaker = EventViewCreatorAlgorithm("IMprecisionTrack_LRT")
-    precisionTrackViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI
-    precisionTrackViewsMaker.RoITool = ViewCreatorPreviousROITool()
-    precisionTrackViewsMaker.InViewRoIs = InViewRoIs
-    precisionTrackViewsMaker.Views = "precisionTrackViews_LRT"
-    precisionTrackViewsMaker.ViewFallThrough = True
-    precisionTrackViewsMaker.RequireParentView = True
-    
-    # calling precision tracking
-    from TriggerMenuMT.HLTMenuConfig.Electron.PrecisionTrackingSequences_LRT import precisionTracking_LRT
-    precisionTrackInViewSequence, trackparticles = precisionTracking_LRT(InViewRoIs)
-    
-    precisionTrackInViewAlgs = parOR("precisionTrackInViewAlgs_LRT", [precisionTrackInViewSequence])
-    precisionTrackViewsMaker.ViewNodeName = "precisionTrackInViewAlgs_LRT"    
-
-    # connect EVC and reco
-    theSequence = seqAND("precisionTrackSequence_LRT", [precisionTrackViewsMaker, precisionTrackInViewAlgs] )
-    return (theSequence,precisionTrackViewsMaker,precisionCaloMenuDefs_LRT.precisionCaloClusters,trackparticles)
-
-def precisionTrackingMenuSequence_LRT(name, is_probe_leg=False):
-    """ Creates precisionCalo MENU sequence """
-    (sequence, precisionTrackViewsMaker, caloclusters, trackparticles) = RecoFragmentsPool.retrieve(precisionTrackSequence_LRT, ConfigFlags)
-
-    #Hypo
-    from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaPrecisionTrackingHypoAlg
-    from TrigEgammaHypo.TrigEgammaPrecisionTrackingHypoTool import TrigEgammaPrecisionTrackingHypoToolFromDict
-
-    thePrecisionTrackingHypo = TrigEgammaPrecisionTrackingHypoAlg(name+"precisionTrackingHypo_LRT")
-    thePrecisionTrackingHypo.CaloClusters = precisionCaloMenuDefs_LRT.precisionCaloClusters
-
-    return MenuSequence( Sequence    = sequence,
-                         Maker       = precisionTrackViewsMaker, 
-                         Hypo        = thePrecisionTrackingHypo,
-                         HypoToolGen = TrigEgammaPrecisionTrackingHypoToolFromDict,
-                         IsProbe     = is_probe_leg)
-
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingSequences.py
index c068419acbdbfdbf71ea599db103b64cc766e7e0..93f84f6c591f5f9cf399240e2a1687856481f23b 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingSequences.py
@@ -13,7 +13,8 @@ log = logging.getLogger(__name__)
 from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
 
 def precisionTracking(RoIs, ion=False, variant=''):
-## Taking Fast Track information computed in 2nd step ##
+
+    ## Taking Fast Track information computed in 2nd step ##
     TrigEgammaKeys = getTrigEgammaKeys(variant)
 
     IDTrigConfig = TrigEgammaKeys.IDTrigConfig
@@ -48,7 +49,7 @@ def precisionTracking(RoIs, ion=False, variant=''):
     PTTracks, PTTrackParticles, PTAlgs = makeInDetTrigPrecisionTracking( config = IDTrigConfig, verifier = ViewVerifyTrk, rois= RoIs )
     PTSeq = parOR("precisionTrackingInElectrons" + variant + tag, PTAlgs)
     #trackParticles = PTTrackParticles[-1]    
-    trackParticles = TrigEgammaKeys.TrigElectronTracksCollectionName
+    trackParticles = TrigEgammaKeys.precisionTrackingContainer
 
     electronPrecisionTrack = parOR("electronPrecisionTrack" + variant + tag)
     electronPrecisionTrack += ViewVerifyTrk
@@ -56,7 +57,8 @@ def precisionTracking(RoIs, ion=False, variant=''):
 
     return electronPrecisionTrack, trackParticles
 
+
 def precisionTracking_LRT(RoIs):
-## Taking Fast Track information computed in 2nd step ##
+    ## Taking Fast Track information computed in 2nd step ##
     return precisionTracking(RoIs, ion=False,  variant = '_LRT')
    
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingSequences_LRT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingSequences_LRT.py
deleted file mode 100644
index 5978898dd759335f934bc08dd75047b4de5e2372..0000000000000000000000000000000000000000
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/PrecisionTrackingSequences_LRT.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-#  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
-#
-
-from AthenaCommon.CFElements import parOR
-from AthenaCommon.GlobalFlags import globalflags
-import AthenaCommon.CfgMgr as CfgMgr
-
-#logging
-from AthenaCommon.Logging import logging
-log = logging.getLogger(__name__)
-
-from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaDefs import TrigEgammaKeys_LRT
-
-def precisionTracking_LRT(RoIs):
-## Taking Fast Track information computed in 2nd step ##
-    
-    IDTrigConfig = TrigEgammaKeys_LRT.IDTrigConfig_LRT
-
-    # TrackCollection="TrigFastTrackFinder_Tracks_Electron"
-    ViewVerifyTrk = CfgMgr.AthViews__ViewDataVerifier("FastTrackViewDataVerifier_LRT")
-    
-    ViewVerifyTrk.DataObjects = [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+' + RoIs ),
-                                 ( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' ),
-                                 ( 'SG::AuxElement' , 'StoreGateSvc+EventInfo.averageInteractionsPerCrossing' ),
-                                 ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' )]
-
-    # These objects must be loaded from SGIL if not from CondInputLoader
-    from AthenaCommon.AlgSequence import AlgSequence
-    topSequence = AlgSequence()
-    if globalflags.InputFormat.is_bytestream():
-      ViewVerifyTrk.DataObjects += [( 'IDCInDetBSErrContainer' , 'StoreGateSvc+PixelByteStreamErrs' ),
-                                    ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_ByteStreamErrs' )]
-    else:
-      topSequence.SGInputLoader.Load += [( 'TRT_RDO_Container' , 'StoreGateSvc+TRT_RDOs' )]
-      ViewVerifyTrk.DataObjects += [( 'TRT_RDO_Container' , 'StoreGateSvc+TRT_RDOs' )]
-
-    """ Precision Track Related Setup.... """
-    PTAlgs = []
-    PTTracks = []
-    PTTrackParticles = []
-    
-    from TrigInDetConfig.InDetTrigPrecisionTracking import makeInDetTrigPrecisionTracking
-
-    PTTracks, PTTrackParticles, PTAlgs = makeInDetTrigPrecisionTracking( config = IDTrigConfig, verifier = ViewVerifyTrk, rois= RoIs )
-    PTSeq = parOR("precisionTrackingInElectrons_LRT", PTAlgs)
-    #trackParticles = PTTrackParticles[-1]    
-    trackParticles = TrigEgammaKeys_LRT.TrigElectronTracksCollectionName_LRT   
-
-    electronPrecisionTrack = parOR("electronPrecisionTrack_LRT")
-    electronPrecisionTrack += ViewVerifyTrk
-    electronPrecisionTrack += PTSeq
-
-    return electronPrecisionTrack, trackParticles
-
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigEMBremCollectionBuilder.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigEMBremCollectionBuilder.py
index ff4a8bbf0dc774d9c9204260b68e074ff51f20d7..dc976ec3a869a80c4044e061f47368adac15d40b 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigEMBremCollectionBuilder.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigEMBremCollectionBuilder.py
@@ -14,7 +14,11 @@ from egammaTools.egammaExtrapolators import egammaExtrapolator
 # default configuration of the EMBremCollectionBuilder
 from InDetRecExample.InDetJobProperties import InDetFlags
 from RecExConfig.RecFlags import rec
-from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaDefs import TrigEgammaKeys_GSF
+
+from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
+TrigEgammaKeys = getTrigEgammaKeys('_GSF')
+
+
 
 log = logging.getLogger(__name__)
 
@@ -129,7 +133,7 @@ class TrigEgammaBremCollectionBuilder (egammaAlgsConf.EMBremCollectionBuilder):
         GSFBuildInDetParticleCreatorTool = Trk__TrackParticleCreatorTool(
             name="GSFBuildInDetParticleCreatorTool",
             KeepParameters=True,
-            UseTrackSummaryTool=False)
+            TrackSummaryTool="")
         #
         #  Track slimming (private not in ToolSvc)
         #
@@ -147,14 +151,16 @@ class TrigEgammaBremCollectionBuilder (egammaAlgsConf.EMBremCollectionBuilder):
         self.TrackSlimmingTool = GSFBuildInDetTrkSlimmingTool
         self.TrackSummaryTool = GSFBuildInDetTrigTrackSummaryTool
 
+
+
 """ This is an instance of GSF fitter tool will be used on track particles """
 TrigEMBremCollectionBuilder = AlgFactory(TrigEgammaBremCollectionBuilder,
     doAdd = False,
     name='TrigEMBremCollectionBuilder',
-    TrackParticleContainerName="HLT_IDTrack_Electron_IDTrig",
-    SelectedTrackParticleContainerName="HLT_IDTrack_Electron_IDTrig",
-    OutputTrkPartContainerName = TrigEgammaKeys_GSF.outputTrackParticleKey_GSF,
-    OutputTrackContainerName=TrigEgammaKeys_GSF.outputTrackKey_GSF,
+    TrackParticleContainerName          = TrigEgammaKeys.precisionTrackingContainer,
+    SelectedTrackParticleContainerName  = TrigEgammaKeys.precisionTrackingContainer,
+    OutputTrkPartContainerName          = TrigEgammaKeys.precisionElectronTrackParticleContainerGSF,
+    OutputTrackContainerName            = TrigEgammaKeys.precisionElectronTrkCollectionGSF,
     DoTruth=rec.doTruth(),
     usePixel=DetFlags.haveRIO.pixel_on(),
     useSCT=DetFlags.haveRIO.SCT_on()
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigElectronFactories.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigElectronFactories.py
index 5aaf7f9305f209b06825410a8c84950f0079f4be..9d4571dbb5e6ec1625caacf388d4cc7a307210a6 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigElectronFactories.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/TrigElectronFactories.py
@@ -28,7 +28,7 @@ from egammaRec.Factories import AlgFactory, FcnWrapper
 TrigEgammaRecElectron = AlgFactory( egammaAlgsConf.egammaRecBuilder,
                             name = 'TrigEgammaRecElectron',
                             InputClusterContainerName= "precisionCaloCluster",
-                            egammaRecContainer= TrigEgammaKeys.EgammaRecKey,
+                            egammaRecContainer= TrigEgammaKeys.precisionEgammaRecCollection,
                             doConversions = False,
                             doAdd= False,
                             # Builder tools
@@ -37,8 +37,8 @@ TrigEgammaRecElectron = AlgFactory( egammaAlgsConf.egammaRecBuilder,
 """Configuring electronSuperClusterBuilder"""                                        
 TrigElectronSuperClusterBuilder = AlgFactory( egammaAlgsConf.electronSuperClusterBuilder,
                                               name = 'TrigElectronSuperClusterBuilder',
-                                              InputEgammaRecContainerName = TrigEgammaKeys.EgammaRecKey,
-                                              SuperElectronRecCollectionName = TrigEgammaKeys.SuperElectronRecCollectionName,
+                                              InputEgammaRecContainerName = TrigEgammaKeys.precisionEgammaRecCollection,
+                                              SuperElectronRecCollectionName = TrigEgammaKeys.precisionElectronSuperClusterCollection,
                                               ClusterCorrectionTool=egammaSwSuperClusterTool,
                                               MVACalibSvc=egammaMVASvc,
                                               EtThresholdCut=1000,
@@ -54,10 +54,10 @@ def TrigTopoEgammaElectronCfg(name='topoEgammaBuilder_TrigElectrons'):
     mlog = logging.getLogger(__name__)
     mlog.info('Starting configuration')
     TrigTopoEgammaElectron = AlgFactory( egammaAlgsConf.xAODEgammaBuilder, name = name,
-            InputElectronRecCollectionName = TrigEgammaKeys.SuperElectronRecCollectionName,
-            InputPhotonRecCollectionName = TrigEgammaKeys.SuperPhotonRecCollectionName,
-            ElectronOutputName = TrigEgammaKeys.outputElectronKey,
-            PhotonOutputName = TrigEgammaKeys.outputPhotonKey,  
+            InputElectronRecCollectionName = TrigEgammaKeys.precisionElectronSuperClusterCollection,
+            InputPhotonRecCollectionName = TrigEgammaKeys.precisionPhotonSuperClusterCollection,
+            ElectronOutputName = TrigEgammaKeys.precisionElectronContainer,
+            PhotonOutputName = TrigEgammaKeys.precisionPhotonContainer,  
             AmbiguityTool = EGammaAmbiguityTool,
             EMClusterTool = TrigEMClusterTool,
             EMShowerTool=TrigEMShowerBuilder,
@@ -77,7 +77,7 @@ def PrecisionElectronTopoMonitorCfg(name = 'PrecisionElectronTopoMonitoring'):
     PrecisionElectronTopoMonitor = AlgFactory( TrigEgammaMonitoringConf.egammaMonitorElectronAlgorithm,
             name = name,
             doAdd = False,
-            ElectronKey = TrigEgammaKeys.outputElectronKey,
+            ElectronKey = TrigEgammaKeys.precisionElectronContainer,
             MonTool = monTool
             )
 
@@ -92,7 +92,7 @@ def PrecisionElectronSuperClusterMonitorCfg(name = 'PrecisionElectronSuperCluste
     PrecisionElectronSuperClusterMonitor = AlgFactory( TrigEgammaMonitoringConf.egammaMonitorSuperClusterAlgorithm,
             name = name,
             doAdd = False,
-            InputEgammaRecContainerName = TrigEgammaKeys.EgammaRecKey,
+            InputEgammaRecContainerName = TrigEgammaKeys.precisionEgammaRecCollection,
             MonTool = monTool
             )
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/generateElectron.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/generateElectron.py
index 22de6c22816dd83490c77a7534961f0e7e57505c..eff0ac4077177e45a8088cd9d91e112511a476ad 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/generateElectron.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Electron/generateElectron.py
@@ -147,11 +147,10 @@ def _precisionElectronSeq(flags, doIDperf=False):
     from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
     TrigEgammaKeys = getTrigEgammaKeys()
     from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences import precisionCaloMenuDefs
     recoAcc.addRecoAlgo(CompFactory.AthViews.ViewDataVerifier(name='VDV'+recoAcc.name,
                                                               DataObjects=[( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' ),
-                                                                           ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+%s' % precisionCaloMenuDefs.caloClusters(ion=False) ),
-                                                                           ( 'xAOD::TrackParticleContainer','StoreGateSvc+%s' % TrigEgammaKeys.TrigElectronTracksCollectionName)] ) )
+                                                                           ( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+%s' % TrigEgammaKeys.precisionCaloClusterContainer),
+                                                                           ( 'xAOD::TrackParticleContainer','StoreGateSvc+%s' % TrigEgammaKeys.precisionTrackingContainer)] ) )
 
 
     def TrigEMTrackMatchBuilderToolCfg(flags, name='TrigEMTrackMatchBuilder_noGSF'):
@@ -160,7 +159,7 @@ def _precisionElectronSeq(flags, doIDperf=False):
         from egammaTrackTools.egammaTrackToolsConfig import EMExtrapolationToolsCfg
         emExtrapolatorTools = recoAcc.popToolsAndMerge(EMExtrapolationToolsCfg(flags))
         builderTool = CompFactory.EMTrackMatchBuilder(  name, #TODO, this is provate tool, it does not need to be specifically named
-                                                        TrackParticlesName = TrigEgammaKeys.TrigElectronTracksCollectionName,
+                                                        TrackParticlesName = TrigEgammaKeys.precisionTrackingContainer,
                                                         ExtrapolationTool  = emExtrapolatorTools,
                                                         broadDeltaEta      = 0.1, #candidate match is done in 2 times this  so +- 0.2
                                                         broadDeltaPhi      = 0.15,  #candidate match is done in 2 times this  so +- 0.3
@@ -176,7 +175,7 @@ def _precisionElectronSeq(flags, doIDperf=False):
         acc = ComponentAccumulator()
         electronRec = CompFactory.egammaRecBuilder( name,
                                                     InputClusterContainerName= 'HLT_CaloEMClusters',
-                                                    egammaRecContainer= TrigEgammaKeys.EgammaRecKey,
+                                                    egammaRecContainer= TrigEgammaKeys.precisionCaloEgammaRecCollection,
                                                     doConversions = False,
                                                     TrackMatchBuilderTool = recoAcc.popToolsAndMerge(TrigEMTrackMatchBuilderToolCfg(flags)) )
         acc.addEventAlgo(electronRec)
@@ -190,8 +189,8 @@ def _precisionElectronSeq(flags, doIDperf=False):
         from egammaTools.egammaSwToolConfig import egammaSwToolCfg
         from egammaMVACalib.egammaMVACalibConfig import egammaMVASvcCfg
         superClusterBuilder = CompFactory.electronSuperClusterBuilder( 'TrigElectronSuperClusterBuilder_noGSF',
-                                                                        InputEgammaRecContainerName = TrigEgammaKeys.EgammaRecKey,
-                                                                        SuperElectronRecCollectionName = TrigEgammaKeys.SuperElectronRecCollectionName,
+                                                                        InputEgammaRecContainerName = TrigEgammaKeys.precisionCaloEgammaRecCollection,
+                                                                        SuperElectronRecCollectionName = TrigEgammaKeys.precisionElectronSuperClusterCollection,
                                                                         ClusterCorrectionTool = recoAcc.popToolsAndMerge(egammaSwToolCfg(flags)),
                                                                         MVACalibSvc = recoAcc.getPrimaryAndMerge(egammaMVASvcCfg(flags)),
                                                                         EtThresholdCut = 1000,
@@ -205,7 +204,7 @@ def _precisionElectronSeq(flags, doIDperf=False):
         acc = ComponentAccumulator()
         from egammaMVACalib.egammaMVACalibConfig import egammaMVASvcCfg
         tool = CompFactory.EMClusterTool('TrigEMClusterTool',
-                                            OutputClusterContainerName = TrigEgammaKeys.TrigEMClusterToolOutputContainer,
+                                            OutputClusterContainerName = TrigEgammaKeys.precisionEMClusterContainer,
                                             MVACalibSvc = acc.getPrimaryAndMerge(egammaMVASvcCfg(flags))
         )        
         acc.setPrivateTools(tool)
@@ -215,10 +214,10 @@ def _precisionElectronSeq(flags, doIDperf=False):
         acc = ComponentAccumulator()
         from egammaTools.EMShowerBuilderConfig import EMShowerBuilderCfg
         builder = CompFactory.xAODEgammaBuilder(name,
-                                                InputElectronRecCollectionName = TrigEgammaKeys.SuperElectronRecCollectionName,
-                                                InputPhotonRecCollectionName = TrigEgammaKeys.SuperPhotonRecCollectionName,
-                                                ElectronOutputName = TrigEgammaKeys.outputElectronKey,
-                                                PhotonOutputName = TrigEgammaKeys.outputPhotonKey,  
+                                                InputElectronRecCollectionName = TrigEgammaKeys.precisionElectronSuperClusterCollection,
+                                                InputPhotonRecCollectionName = TrigEgammaKeys.precisionPhotonSuperClusterCollection,
+                                                ElectronOutputName = TrigEgammaKeys.precisionElectronContainer,
+                                                PhotonOutputName = TrigEgammaKeys.precisionPhotonContainer,  
                                                 AmbiguityTool = CompFactory.EGammaAmbiguityTool(),
                                                 EMClusterTool = acc.popToolsAndMerge(TrigEMClusterToolCfg(flags)),
                                                 EMShowerTool = acc.popToolsAndMerge(EMShowerBuilderCfg(flags, CellsName="CaloCells")),
@@ -233,10 +232,10 @@ def _precisionElectronSeq(flags, doIDperf=False):
     def TrigTrackIsolationToolCfg(flags, name='TrigTrackIsolationTool'):
         acc = ComponentAccumulator()
 
-        tpicTool = CompFactory.xAOD.TrackParticlesInConeTool(TrackParticleLocation = TrigEgammaKeys.TrigElectronTracksCollectionName)
+        tpicTool = CompFactory.xAOD.TrackParticlesInConeTool(TrackParticleLocation = TrigEgammaKeys.precisionTrackingContainer)
 
         tiTool = CompFactory.xAOD.TrackIsolationTool(name,
-                                                    TrackParticleLocation = TrigEgammaKeys.TrigElectronTracksCollectionName,
+                                                    TrackParticleLocation = TrigEgammaKeys.precisionTrackingContainer,
                                                     VertexLocation = '',
                                                     TracksInConeTool  = tpicTool)
         # configure default TrackSelectionTool
@@ -267,7 +266,7 @@ def _precisionElectronSeq(flags, doIDperf=False):
 
     selAcc.mergeReco(recoAcc)
     from TrigEgammaHypo.TrigEgammaPrecisionElectronHypoTool import TrigEgammaPrecisionElectronHypoToolFromDict, TrigEgammaPrecisionElectronHypoAlgCfg
-    selAcc.mergeHypo( TrigEgammaPrecisionElectronHypoAlgCfg(flags, 'TrigEgammaHypoAlg_noGSF', TrigEgammaKeys.outputElectronKey, doIDperf=doIDperf ) )
+    selAcc.mergeHypo( TrigEgammaPrecisionElectronHypoAlgCfg(flags, 'TrigEgammaHypoAlg_noGSF', TrigEgammaKeys.precisionElectronContainer, doIDperf=doIDperf ) )
     menuSequence = MenuSequenceCA(selAcc,
                                    HypoToolGen=TrigEgammaPrecisionElectronHypoToolFromDict)
     return (selAcc, menuSequence)
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainMerging.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainMerging.py
index c459c2ce64a18914aed5f553053b17f77ff413ad..03fc1a7147e219b3193836ace9cb6f0c43bfcdba 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainMerging.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainMerging.py
@@ -143,8 +143,8 @@ def getEmptySeqName(stepName, chain_index, step_number, alignGroup):
     return seqName
 
 
-def getEmptyMenuSequence(flags, name, mergeUsingFeature = False):
-    return EmptyMenuSequence(name, mergeUsingFeature = mergeUsingFeature)
+def getEmptyMenuSequence(flags, name):
+    return EmptyMenuSequence(name)
 
 def getMultiplicityPerLeg(multiplicities):
     mult_per_leg = []
@@ -295,15 +295,13 @@ def serial_zip(allSteps, chainName, chainDefList, legOrdering):
                         log.debug("[serial_zip] step name for this leg: %s", seqStepName)
                         log.debug("[serial_zip] created empty sequence(s): %s", seqNames)
                         log.debug("[serial_zip] L1decisions %s ", chainDefList[stepPlacement2].L1decisions)
+                        
 
                     emptySequences = []
-                    for ileg in range(len(chainDefList[stepPlacement2].L1decisions)):
-                        if isFullScanRoI(chainDefList[stepPlacement2].L1decisions[ileg]) and noPrecedingStepsPreMerge(newsteps, stepPlacement2, ileg):
-                            log.debug("[serial_zip] adding FS empty sequence with mergeUsingFeature = False ")
-                            emptySequences += [RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqNames[ileg]+"FS", mergeUsingFeature = False)]
-                        elif isFullScanRoI(chainDefList[stepPlacement2].L1decisions[ileg]):
-                            log.debug("[serial_zip] adding FS empty sequence with mergeUsingFeature = True ")
-                            emptySequences += [RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqNames[ileg]+"FS", mergeUsingFeature = True)]
+                    for ileg in range(len(chainDefList[stepPlacement2].L1decisions)):                        
+                        if isFullScanRoI(chainDefList[stepPlacement2].L1decisions[ileg]):
+                            log.debug("[serial_zip] adding FS empty sequence")
+                            emptySequences += [RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqNames[ileg]+"FS")]
                         else:
                             log.debug("[serial_zip] adding non-FS empty sequence")
                             emptySequences += [RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqNames[ileg])]
@@ -478,10 +476,7 @@ def makeCombinedStep(parallel_steps, stepNumber, chainDefList, allSteps = [], cu
             seqName = getEmptySeqName(new_stepDict['signature'], chain_index, stepNumber, chainDefList[0].alignmentGroups[0])
 
             if isFullScanRoI(chainDefList[chain_index].L1decisions[0]):
-                if noPrecedingStepsPostMerge(currentChainSteps, chain_index):
-                    stepSeq.append(RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqName+"FS", mergeUsingFeature = False))
-                else:
-                    stepSeq.append(RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqName+'FS', mergeUsingFeature = True))
+                stepSeq.append(RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqName+"FS"))
                 currentStepName = 'Empty' + chainDefList[chain_index].alignmentGroups[0]+'Align'+str(stepNumber)+'_'+new_stepDict['chainParts'][0]['multiplicity']+new_stepDict['signature']+'FS'
             else:
                 stepSeq.append(RecoFragmentsPool.retrieve(getEmptyMenuSequence, flags=None, name=seqName))
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/CheckL1HLTConsistency.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/CheckL1HLTConsistency.py
index bfd0e901c0383ec77f532ad6e1e73ebd31ecd373..ae0d72e835484758795eb1be6b11286ecaf51dd6 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/CheckL1HLTConsistency.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/CheckL1HLTConsistency.py
@@ -12,6 +12,7 @@ def checkL1HLTConsistency():
     lvl1access  = L1MenuAccess(lvl1name)
     lvl1thtypes = lvl1access.thresholdTypes()
     lvl1items   = lvl1access.items(includeKeys=["name"])
+    lvl1items_full   = lvl1access.items() 
     from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT
 
     allUsedItems = []
@@ -33,12 +34,15 @@ def checkL1HLTConsistency():
                 log.error('[checkL1HLTConsistency] chain %s: L1item: %s, not found in the items list of the L1Menu %s', chain["chainName"], chain["L1item"], lvl1name)
                 raise Exception("Please fix the menu or the chain.")
             else:
-                allUsedItems.append(l1item)
+                if l1item not in allUsedItems:
+                    allUsedItems.append(l1item)
 
         # Find L1 Threshold information for current chain
+        l1thr_vec = []
         for p in chain['chainParts']:
             #now check that the thresholds of the chain are listed in the L1Menu.thresholds field
             th = p['L1threshold'][5:] if p['L1threshold'].startswith("PROBE") else p['L1threshold']
+            l1thr_vec.append(th)
             if ('TAU' in th) and ('e' not in th) and ('j' not in th): 
                 th = th.replace('TAU','HA')
             thFoundInL1Menu = False
@@ -58,6 +62,34 @@ def checkL1HLTConsistency():
                 log.error('[checkL1HLTConsistency] chain %s: L1Threshold %s not found in the L1thresholds of the L1Menu %s', chain["chainName"], th, lvl1name)
                 raise Exception("Please fix the menu or the chain.")
 
+        # check that L1 seeds and L1 item are all either legacy or phase1
+        legacyItem = False
+        legacyItemNoCalo = True
+        foundPhase1CaloSeed = False
+        foundLegacyCaloSeed = False
+        for item in l1item_vec:
+            if item=='':
+                continue
+            if 'legacy' in lvl1items_full[item]:
+                if lvl1items_full[item]['legacy']:
+                    legacyItem = True
+            else:
+                items = item[2:].split('_')
+                for it in items:
+                    if it[:1] in ['e','c','j','c']:
+                       legacyItemNoCalo = False
+        for th in l1thr_vec:
+            if th=='FSNOSEED':
+                continue
+            if th[:1] in ['e','c','j','c']:
+                foundPhase1CaloSeed = True
+            if th[:1] in ['E','T','J','X']:
+                foundLegacyCaloSeed = True
+        if ( (not legacyItem) and (not legacyItemNoCalo) and foundLegacyCaloSeed) or (legacyItem and foundPhase1CaloSeed):
+            log.error('[checkL1HLTConsistency] chain %s contains a mix of legacy and phase1 calo thresholds! L1 items: [%s] (legacy item = %s; if yes, without calo inputs? %s ), L1 seeds: [%s] (foundPhase1CaloSeed = %s, foundLegacyCaloSeed = %s)', chain["chainName"], ",".join(l1item_vec), legacyItem, legacyItemNoCalo, ",".join(l1thr_vec), foundPhase1CaloSeed, foundLegacyCaloSeed )
+            raise Exception("Please fix the chain.")
+
+    # check for unused L1 items
     for item in lvl1items:
         if item not in allUsedItems:
             allUnusedItems.append(item)
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Dev_HI_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Dev_HI_run3_v1.py
index ff14b7fd3dea31b941e410799a304be17109586f..c3dcdb2d716f276055295bd7f6ed89baadcbdec4 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Dev_HI_run3_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Dev_HI_run3_v1.py
@@ -11,8 +11,7 @@
 
 from TriggerMenuMT.HLTMenuConfig.Menu.ChainDefInMenu import ChainProp
 
-#from TriggerMenuMT.HLTMenuConfig.Menu.Physics_pp_run3_v1 import SingleMuonGroup,SinglePhotonGroup,MinBiasGroup,MultiMuonGroup,SingleElectronGroup,MultiElectronGroup,PrimaryLegGroup,PrimaryL1MuGroup,SupportLegGroup,SupportGroup,SingleJetGroup
-from TriggerMenuMT.HLTMenuConfig.Menu.Physics_pp_run3_v1 import SingleMuonGroup,MinBiasGroup,MultiMuonGroup,SingleElectronGroup,MultiElectronGroup,PrimaryLegGroup,PrimaryL1MuGroup,SupportLegGroup,SupportGroup,SingleJetGroup
+from TriggerMenuMT.HLTMenuConfig.Menu.Physics_pp_run3_v1 import SingleMuonGroup,MinBiasGroup,MultiMuonGroup,SinglePhotonGroup,SingleElectronGroup,MultiElectronGroup,PrimaryLegGroup,PrimaryL1MuGroup,SupportLegGroup,SupportGroup,SingleJetGroup
 
 import TriggerMenuMT.HLTMenuConfig.Menu.PhysicsP1_HI_run3_v1 as HIp1_menu
 
@@ -44,29 +43,31 @@ def setupMenu():
         # ElectronChains----------
         #--------- e etcut
         ChainProp(name='HLT_e15_etcut_ion_L1EM12', stream=[HardProbesStream] ,groups=SingleElectronGroup+SupportLegGroup),
-        ChainProp(name='HLT_e20_etcut_ion_L1EM15', stream=[HardProbesStream] ,groups=SingleElectronGroup+SupportLegGroup),
+        ChainProp(name='HLT_e20_etcut_ion_L1EM16', stream=[HardProbesStream] ,groups=SingleElectronGroup+SupportLegGroup),
         
         #--------- e lh
         ChainProp(name='HLT_e15_lhloose_ion_L1EM12', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
-        ChainProp(name='HLT_e20_lhloose_ion_L1EM15', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
+        ChainProp(name='HLT_e20_lhloose_ion_L1EM16', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
         ChainProp(name='HLT_e15_lhmedium_ion_L1EM12', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
-        ChainProp(name='HLT_e20_lhmedium_ion_L1EM15', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
+        ChainProp(name='HLT_e20_lhmedium_ion_L1EM16', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
         
         #--------- e isEM
         ChainProp(name='HLT_e15_loose_ion_L1EM12', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
-        ChainProp(name='HLT_e20_loose_ion_L1EM15', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
+        ChainProp(name='HLT_e20_loose_ion_L1EM16', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
         ChainProp(name='HLT_e15_medium_ion_L1EM12', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
-        ChainProp(name='HLT_e20_medium_ion_L1EM15', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
+        ChainProp(name='HLT_e20_medium_ion_L1EM16', stream=[HardProbesStream], groups=SingleElectronGroup+PrimaryLegGroup),
         
         #---------- 2e
-        ChainProp(name='HLT_2e20_loose_ion_L12EM15', stream=[HardProbesStream], groups=MultiElectronGroup+PrimaryLegGroup),
+        ChainProp(name='HLT_2e20_loose_ion_L12EM16', stream=[HardProbesStream], groups=MultiElectronGroup+PrimaryLegGroup),
         
         # PhotonChains----------
         #----------- g etcut
-        #ChainProp(name='HLT_g18_etcut_L1EM12', stream=[HardProbesStream], groups=SinglePhotonGroup+SupportLegGroup),
+        ChainProp(name='HLT_g15_etcut_ion_L1EM12', stream=[HardProbesStream], groups=SinglePhotonGroup+SupportLegGroup),
+        ChainProp(name='HLT_g20_etcut_ion_L1EM12', stream=[HardProbesStream], groups=SinglePhotonGroup+SupportLegGroup),
         
         #----------- g isEM
-        #ChainProp(name='HLT_g20_loose_L1EM12', stream=[HardProbesStream], groups=SinglePhotonGroup+SupportLegGroup),
+        ChainProp(name='HLT_g15_loose_ion_L1EM12', stream=[HardProbesStream], groups=SinglePhotonGroup+PrimaryLegGroup),
+        ChainProp(name='HLT_g20_loose_ion_L1EM12', stream=[HardProbesStream], groups=SinglePhotonGroup+PrimaryLegGroup),
     ]
 
     chains['Jet'] += [
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py
index e7106478d22af7d9fdf28707fae57ae24ef61aaf..b6d5a06515e5213df2146a3d76302b6e3942fb18 100755
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py
@@ -29,6 +29,30 @@ class Singleton(type):
 # for now we make this a singleton because calling menu generation twice leads to problems
 class GenerateMenuMT(object, metaclass=Singleton):
 
+    # Applicable to all menu instances
+    calibCosmicMonSigs = ['Streaming','Monitor','Beamspot','Cosmic', 'Calib', 'EnhancedBias']
+    combinedSigs = ['MinBias','Electron','Photon','Muon','Tau','Jet', 'Bjet','MET','UnconventionalTracking']
+    defaultSigs = ['Streaming']  # for noalg chains
+
+    # Define which signatures (folders) are required for each slice
+    def getRequiredSignatures(theslice):
+        # All possible signatures
+        allSigs = [
+            'Test','Streaming','Monitor','Beamspot','Cosmic', 'Calib', 'EnhancedBias',
+            'Electron','Photon','Muon','Tau','Jet', 'Bjet','MET','Bphysics',
+            'MinBias','UnconventionalTracking'
+        ]
+        signatureDeps = {sig:[sig] for sig in allSigs}
+        # Special cases
+        signatureDeps.update({
+            # Bjet always requires jet
+            'Bjet': ['Bjet','Jet'],
+            # Egamma contains two signatures
+            'Egamma': ['Electron','Photon'],
+            'Combined': GenerateMenuMT.combinedSigs,
+        })
+        return set(signatureDeps[theslice]+['Streaming']) # always allow streamers
+
     def __init__(self):
         self.chainsInMenu = {}  # signature : [chains]
 
@@ -45,13 +69,9 @@ class GenerateMenuMT(object, metaclass=Singleton):
         self.chainFilter = None
         self.availableSignatures = []
         self.signaturesToGenerate = []
-        self.calibCosmicMonSigs = ['Streaming','Monitor','Beamspot','Cosmic', 'Calib', 'EnhancedBias']
-        self.combinedSigs = ['MinBias','Egamma','Muon','Tau','Jet', 'Bjet','MET','UnconventionalTracking']
-        self.defaultSigs = ['Streaming']  # for noalg chains
 
         self.chainDefModule = {}   # Generate[SIG]ChainDefs module for each SIGnature
 
-
     def setChainFilter(self, f):
         """Set chain filter for menu generation. Function needs to take two
         arguments for signature and chain name. E.g. to only generate Egamma chains:
@@ -70,22 +90,16 @@ class GenerateMenuMT(object, metaclass=Singleton):
     def getChainDicts(self):
 
         def validSignature(currentSig, chainSig):
-            """Check if chain is asssigned to the correct signature"""
-
-            # Translate Egamma signatures
-            if 'Electron' in chainSig or 'Photon' in chainSig:
-                chainSig.discard('Electron')
-                chainSig.discard('Photon')
-                chainSig.add('Egamma')
-
-            if ( (currentSig in chainSig) or
-                 (currentSig=='Combined' and set(chainSig).issubset(self.combinedSigs)) or
-                 (chainSig==set(['Streaming'])) ):
-                 return True
-            else:
-                 return False
+            """Check if chain is assigned to the correct signature"""
+            reqd = GenerateMenuMT.getRequiredSignatures(currentSig)
+            isValid = chainSig.issubset( reqd )
+            log.info("Chain signatures: %s, required signatures: %s",chainSig,reqd)
+            if not isValid:
+                log.error("Chain signatures %s not a subset of required signatures %s",set(chainSig),reqd)
+            return isValid
 
         chainCounter = 0
+        invalid = False
         for sig, chains in self.chainsInMenu.items():
             for chain in chains:
                 log.debug("Now processing chain: %s ", chain)
@@ -97,9 +111,11 @@ class GenerateMenuMT(object, metaclass=Singleton):
                 self.chainDicts.append(chainDict)
 
                 if not validSignature(sig, set(chainDict['signatures'])):
+                    invalid=True
                     log.error('Chain %s assigned to signature %s but creates %s',
                               chainDict['chainName'], sig, set(chainDict['signatures']))
-
+        if invalid:
+            raise RuntimeError('Incorrect assignment of chains to slices -- see preceding messages.')
 
     def importSignaturesToGenerate(self):
         """check if all the signature files can be imported and then import them"""
@@ -111,14 +127,21 @@ class GenerateMenuMT(object, metaclass=Singleton):
         log.info("Enabled signature(s): %s", self.signaturesToGenerate)
 
         # Extend the list to satisfy certain requirements
-        extendedSignatureToGenerate = set(self.signaturesToGenerate + self.defaultSigs)
+        extendedSignatureToGenerate = set(self.signaturesToGenerate + GenerateMenuMT.defaultSigs)
 
         # Combined chains themselves are created by merging
         # If we activate combined chains, we need all of the (legal) sub-signatures
         if "Combined" in extendedSignatureToGenerate:
             log.info("Combined chains requested -- activate other necessary signatures")
             extendedSignatureToGenerate.remove("Combined")
-            extendedSignatureToGenerate.update(self.combinedSigs)
+            extendedSignatureToGenerate.update(GenerateMenuMT.combinedSigs)
+
+        # Electron and Photon chains both have Egamma as the top-level folder
+        # but have separate chain configuration modules
+        if "Egamma" in extendedSignatureToGenerate:
+            log.info("Egamma chains requested -- activate other necessary signatures")
+            extendedSignatureToGenerate.remove("Egamma")
+            extendedSignatureToGenerate.update(["Electron","Photon"])
 
         for sig in extendedSignatureToGenerate:
             log.debug("[getSignaturesInMenu] sig: %s", sig)
@@ -127,10 +150,10 @@ class GenerateMenuMT(object, metaclass=Singleton):
                 self.availableSignatures.append(sig)
 
             try:
-                if sig == 'Egamma':
-                    sigFolder = sig
-                    subSigs = ['Electron', 'Photon']
-                elif sig in self.calibCosmicMonSigs:
+                if sig in ['Electron', 'Photon']:
+                    sigFolder = 'Egamma'
+                    subSigs = [sig]
+                elif sig in GenerateMenuMT.calibCosmicMonSigs:
                     sigFolder = 'CalibCosmicMon'
                      #only import the CalibCosmicMon signatures that we need, not all of them!
                     subSigs = [sig]
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/L1Seeds.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/L1Seeds.py
index 1533fe300ec990788524b338d957648fdf650e33..a3357b141edc15d605c05563e5b0dd095480ef45 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/L1Seeds.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/L1Seeds.py
@@ -55,6 +55,8 @@ def getL1BackgroundSeed(menul1items, menu_name):
         'L1_BCM_Wide_CALIB',
         'L1_J50_UNPAIRED_ISO', 'L1_J50_UNPAIRED_NONISO', 'L1_J50_ABORTGAPNOTCALIB',
         'L1_J12_EMPTY', 'L1_J12_BGRP12',
+        'L1_BCM_AC_UNPAIREDB1', 'L1_BCM_CA_UNPAIREDB2',
+        'L1_J12_UNPAIREDB1', 'L1_J12_UNPAIREDB2',
         ]
     
     if menu_name == 'LS1_v1':
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py
index f447918491cbf47cb5f7cf676d33caaf41998d9b..0d842acf94b06aea6fb5f73a1c679a87c6f0c64d 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py
@@ -91,8 +91,8 @@ def setupMenu():
         ChainProp(name='HLT_2mu6_10invmAA70_L1MU5VF', groups=SingleMuonGroup),
 
         # LATE
-        ChainProp(name='HLT_mu10_lateMu_L1LATE-MU8F_J50', l1SeedThresholds=['FSNOSEED'], groups=SingleMuonGroup+PrimaryL1MuGroup),
-        ChainProp(name='HLT_mu10_lateMu_L1LATE-MU8F_XE30', l1SeedThresholds=['FSNOSEED'], groups=SingleMuonGroup),
+        ChainProp(name='HLT_mu10_lateMu_L1LATE-MU8F_J50', l1SeedThresholds=['FSNOSEED'], groups=SingleMuonGroup+PrimaryL1MuGroup+PrimaryLegGroup),
+        ChainProp(name='HLT_mu10_lateMu_L1LATE-MU8F_XE30', l1SeedThresholds=['FSNOSEED'], groups=SingleMuonGroup+PrimaryLegGroup),
 
         # ATR-20049
         ChainProp(name='HLT_mu6_mu4_L12MU3V',  l1SeedThresholds=['MU3V']*2, groups=MultiMuonGroup),
@@ -137,9 +137,6 @@ def setupMenu():
         ## ATR-24198        
         ChainProp(name='HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan_L1MU14FCH', l1SeedThresholds=['MU14FCH','FSNOSEED'], groups=PrimaryL1MuGroup+MultiMuonGroup),
 
-        #ATR-20505
-        ChainProp(name='HLT_2mu50_msonly_L1MU14FCH', groups=PrimaryL1MuGroup+SingleMuonGroup),   
-
         #ATR-23614 
         ChainProp(name='HLT_mu20_mu2noL1_invmJPsiOS_L1MU14FCH', l1SeedThresholds=['MU14FCH','FSNOSEED'], groups=MultiMuonGroup),
 
@@ -962,6 +959,8 @@ def setupMenu():
         ChainProp(name='HLT_2mu4_bBmumux_LbPqKm_L12MU3V', stream=["BphysDelayed"], groups=BphysicsGroup+SupportGroup),
         ChainProp(name='HLT_2mu4_bBmumux_BcmumuDsloose_L12MU3V', stream=["BphysDelayed"], groups=BphysicsGroup+SupportGroup),
         ChainProp(name='HLT_2mu4_bBmumux_BcmumuDploose_L12MU3V', stream=["BphysDelayed"], groups=BphysicsGroup+SupportGroup),
+        ChainProp(name='HLT_2mu4_bBmumux_BcmumuD0Xloose_L12MU3V', stream=["BphysDelayed"], groups=BphysicsGroup+SupportGroup),
+        ChainProp(name='HLT_2mu4_bBmumux_BcmumuDstarloose_L12MU3V', stream=["BphysDelayed"], groups=BphysicsGroup+SupportGroup),
 
         # additional Lambda_b0 to J/psi p K- chains from MR!46945
         ChainProp(name='HLT_2mu6_bBmumux_LbPqKm_L1BPH-2M9-2DR15-2MU5VF', l1SeedThresholds=['MU5VF'], stream=["BphysDelayed"], groups=BphysicsGroup+PrimaryL1MuGroup),
@@ -992,7 +991,6 @@ def setupMenu():
         ChainProp(name='HLT_2g10_loose_mu20_L1MU14FCH', l1SeedThresholds=['EM7','MU14FCH'], stream=[PhysicsStream], groups=PrimaryLegGroup+EgammaMuonGroup), # unsure what EM seed should be
         #LLP
         ChainProp(name='HLT_g15_loose_2mu10_msonly_L12MU8F', l1SeedThresholds=['EM8VH','MU8F'], stream=[PhysicsStream], groups=PrimaryLegGroup+EgammaMuonGroup),
-        ChainProp(name='HLT_g40_loose_mu40_msonly_L1MU14FCH', l1SeedThresholds=['EM20VH','MU14FCH'], stream=[PhysicsStream], groups=PrimaryLegGroup+EgammaMuonGroup), #ATR-20505
         
         # Test chains for muon + jet/MET merging/aligning
         ChainProp(name='HLT_mu6_xe30_mht_L1XE30', l1SeedThresholds=['MU5VF','FSNOSEED'], stream=[PhysicsStream], groups=MuonMETGroup),
@@ -1141,34 +1139,34 @@ def setupMenu():
 
     chains['MinBias'] += [
 
-        ChainProp(name='HLT_mb_sp400_trk40_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp600_trk45_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp700_trk55_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp900_trk60_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp900_trk65_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1000_trk70_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1200_trk75_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1400_trk80_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1400_trk90_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1600_trk100_hmt_L1RD0_FILLED',     l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1800_trk110_hmt_L1RD0_FILLED',     l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp600_pusup300_trk40_hmt_L1RD0_FILLED',        l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp900_pusup350_trk50_hmt_L1RD0_FILLED',        l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp900_pusup400_trk60_hmt_L1RD0_FILLED',        l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1000_pusup450_trk70_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1100_pusup450_trk70_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1200_pusup500_trk80_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1400_pusup550_trk90_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1600_pusup600_trk100_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp1800_pusup600_trk110_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp2100_pusup700_trk120_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
-        ChainProp(name='HLT_mb_sp2300_pusup1000_trk130_hmt_L1RD0_FILLED',     l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp400_trk40_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp600_trk45_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp700_trk55_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp900_trk60_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp900_trk65_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1000_trk70_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1200_trk75_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1400_trk80_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1400_trk90_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1600_trk100_hmt_L1RD0_FILLED',     l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1800_trk110_hmt_L1RD0_FILLED',     l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp600_pusup300_trk40_hmt_L1RD0_FILLED',        l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp900_pusup350_trk50_hmt_L1RD0_FILLED',        l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp900_pusup400_trk60_hmt_L1RD0_FILLED',        l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1000_pusup450_trk70_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1100_pusup450_trk70_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1200_pusup500_trk80_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1400_pusup550_trk90_hmt_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1600_pusup600_trk100_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp1800_pusup600_trk110_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp2100_pusup700_trk120_hmt_L1RD0_FILLED',      l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
+        ChainProp(name='HLT_mb_sp2300_pusup1000_trk130_hmt_L1RD0_FILLED',     l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+['PS:Online']+LowMuGroup),
 
         # afprec chains
-        ChainProp(name='HLT_mb_afprec_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_afprec_L1CEP-CjJ60', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_afprec_L1CEP-CjJ50', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_vetombts2in_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_afprec_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_afprec_L1CEP-CjJ60', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_afprec_L1CEP-CjJ50', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_vetombts2in_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
     ]
 
     chains['Calib'] += [
@@ -1251,13 +1249,13 @@ def setupMenu():
         ChainProp(name='HLT_noalg_L1jXE50',         l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
         ChainProp(name='HLT_noalg_L1jXE55',         l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
         ChainProp(name='HLT_noalg_L1jXE300',        l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
-        ChainProp(name='HLT_noalg_L1gXE30',         l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
-        ChainProp(name='HLT_noalg_L1gXE40',         l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
-        ChainProp(name='HLT_noalg_L1gXE50',         l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
+        ChainProp(name='HLT_noalg_L1gXEJWOJ30',     l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
+        ChainProp(name='HLT_noalg_L1gXEJWOJ40',     l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
+        ChainProp(name='HLT_noalg_L1gXEJWOJ50',     l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
         ChainProp(name='HLT_noalg_L1gXERHO30',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
         ChainProp(name='HLT_noalg_L1gXERHO50',      l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
-        ChainProp(name='HLT_noalg_L1gXEPUFIT30',    l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
-        ChainProp(name='HLT_noalg_L1gXEPUFIT50',    l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
+        ChainProp(name='HLT_noalg_L1gXENC30',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
+        ChainProp(name='HLT_noalg_L1gXENC50',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
 
         ChainProp(name='HLT_noalg_L1jXEC50',        l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
         ChainProp(name='HLT_noalg_L1gTE50',         l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup),
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
index cce807ad655b045301124b3cdff191da5dd264dc..bbd91de3f3fc8cf6d7d045b277fdd655158a844e 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py
@@ -401,11 +401,13 @@ class EmptyMenuSequence(object):
     """ Class to emulate reco sequences with no Hypo"""
     """ By construction it has no Hypo;"""
     
-    def __init__(self, the_name, mergeUsingFeature = False):
+    def __init__(self, the_name):
         self._name = the_name
         Maker = CompFactory.InputMakerForRoI("IM"+the_name)
-        Maker.RoITool = CompFactory.ViewCreatorInitialROITool()
-        Maker.mergeUsingFeature = mergeUsingFeature
+        # isEmptyStep causes the IM to try at runtime to merge by feature by default (i.e for empty steps appended after a leg has finised).
+        # But if this failes then it will merge by initial ROI instead (i.e. for empy steps prepended before a leg has started)
+        Maker.isEmptyStep = True 
+        Maker.RoIsLink = 'initialRoI' #(this is the default property, just making it explicit)
         self._maker       = InputMakerNode( Alg = Maker )
         self._seed=''
         self._sequence    = Node( Alg = seqAND(the_name, [Maker]))
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py
index 578d17f8902f98eea913326e44fe21b6dfa9b365..3033cb445c70cf37bafef7cd4c5cda3c4366b420 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py
@@ -123,6 +123,7 @@ def addP1Signatures(chains):
     chains['Streaming'] += [
         ChainProp(name='HLT_noalg_L1RD0_EMPTY',  l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup),
         ChainProp(name='HLT_noalg_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup),  
+        ChainProp(name='HLT_noalg_L1RD0_UNPAIRED_ISO', l1SeedThresholds=['FSNOSEED'], stream=['Background'], groups=['PS:Online']),  
         
         ChainProp(name='HLT_noalg_mb_L1RD0_EMPTY',  l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup),
         ChainProp(name='HLT_noalg_mb_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup),  
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py
index 56ece35887b23e0bd9dc44cd5e58354087abc6b4..ce2471412e81e4c39b48525ca48b9ed3aca52f77 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py
@@ -126,6 +126,10 @@ def setupMenu():
         ChainProp(name='HLT_mu24_LRT_d0tight_L1MU14FCH',  groups=PrimaryL1MuGroup+SingleMuonGroup), #back-up
         ChainProp(name='HLT_mu24_LRT_idperf_L1MU14FCH',   groups=SupportGroup+SingleMuonGroup),
         ChainProp(name='HLT_mu20_msonly_L1MU14FCH',       groups=SupportGroup+SingleMuonGroup),
+
+        # ATR-20505
+        ChainProp(name='HLT_2mu50_msonly_L1MU14FCH', groups=PrimaryL1MuGroup+SingleMuonGroup+PrimaryLegGroup),
+        
      ]
 
     chains['Egamma'] = [
@@ -893,14 +897,14 @@ def setupMenu():
 
         # Phase I inputs ATR-24411
         # SUSY
-        ChainProp(name='HLT_g45_loose_6j45_L14jJ15p0ETA25',l1SeedThresholds=['EM15','FSNOSEED'],stream=[PhysicsStream], groups=PrimaryPhIGroup+EgammaJetGroup),
+        ChainProp(name='HLT_g45_loose_6j45_L14jJ15p0ETA25',l1SeedThresholds=['eEM15','FSNOSEED'],stream=[PhysicsStream], groups=PrimaryPhIGroup+EgammaJetGroup),
         
         # VBF triggers (ATR-22594)                                       
         ChainProp(name='HLT_2mu6_2j50_0eta490_j0_DJMASS900j50_L1jMJJ-500-NFF',l1SeedThresholds=['MU5VF','FSNOSEED','FSNOSEED'],stream=['VBFDelayed'], groups=PrimaryPhIGroup+MuonJetGroup), # Formerly HLT_2mu6_2j50_0eta490_invm900j50                       
         ChainProp(name='HLT_e5_lhvloose_j70_0eta320_j50_0eta490_j0_DJMASS1000j50_xe50_tcpufit_L1jMJJ-500-NFF',l1SeedThresholds=['eEM3','FSNOSEED','FSNOSEED','FSNOSEED','FSNOSEED'],stream=['VBFDelayed'], groups=PrimaryPhIGroup+EgammaJetGroup),
         ChainProp(name='HLT_2e5_lhmedium_j70_0eta320_j50_0eta490_j0_DJMASS900j50_L1jMJJ-500-NFF',l1SeedThresholds=['eEM3','FSNOSEED','FSNOSEED','FSNOSEED'],stream=['VBFDelayed'], groups=PrimaryPhIGroup+EgammaJetGroup),
         ChainProp(name='HLT_g25_medium_4j35_0eta490_j0_DJMASS1000j35_L1eEM22M',l1SeedThresholds=['eEM22M','FSNOSEED','FSNOSEED'],stream=[PhysicsStream], groups=PrimaryPhIGroup+EgammaJetGroup),
-        ChainProp(name='HLT_e10_lhmedium_ivarloose_j70_0eta320_j50_0eta490_j0_DJMASS900j50_L1jMJJ-500-NFF',l1SeedThresholds=['EM8VH','FSNOSEED','FSNOSEED','FSNOSEED'],stream=['VBFDelayed'], groups=PrimaryPhIGroup+EgammaJetGroup),
+        ChainProp(name='HLT_e10_lhmedium_ivarloose_j70_0eta320_j50_0eta490_j0_DJMASS900j50_L1jMJJ-500-NFF',l1SeedThresholds=['eEM8L','FSNOSEED','FSNOSEED','FSNOSEED'],stream=['VBFDelayed'], groups=PrimaryPhIGroup+EgammaJetGroup),
         ChainProp(name='HLT_mu4_j70_0eta320_j50_0eta490_j0_DJMASS1000j50_xe50_tcpufit_L1jMJJ-500-NFF',l1SeedThresholds=['MU3V','FSNOSEED','FSNOSEED','FSNOSEED','FSNOSEED'],stream=['VBFDelayed'], groups=PrimaryPhIGroup+MuonJetGroup),
         ChainProp(name='HLT_mu10_ivarmedium_j70_0eta320_j50_0eta490_j0_DJMASS900j50_L1jMJJ-500-NFF',l1SeedThresholds=['MU8F','FSNOSEED','FSNOSEED','FSNOSEED'],stream=['VBFDelayed'], groups=PrimaryPhIGroup+MuonJetGroup),
         ChainProp(name='HLT_j70_0eta320_j50_0eta490_j0_DJMASS1000j50dphi240_xe90_tcpufit_xe50_cell_L1jMJJ-500-NFF',l1SeedThresholds=['FSNOSEED']*5,stream=['VBFDelayed'], groups=PrimaryPhIGroup+JetMETGroup),
@@ -919,36 +923,40 @@ def setupMenu():
         # Muon-in-jet
         ChainProp(name='HLT_mu4_j20_0eta290_pf_ftf_boffperf_dRAB03_L1MU3V_jJ15', l1SeedThresholds=['MU3V','FSNOSEED'], groups=SingleBjetGroup+SupportPhIGroup),
 
+        # ATR-20505
+        ChainProp(name='HLT_g40_loose_mu40_msonly_L1MU14FCH', l1SeedThresholds=['EM20VH','MU14FCH'], stream=[PhysicsStream], groups=PrimaryLegGroup+EgammaMuonGroup),
+
+
     ]
     chains['MinBias'] = [
-        ChainProp(name='HLT_mb_sptrk_L1RD0_FILLED',    l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=LowMuGroup+MinBiasGroup),
-        ChainProp(name='HLT_mb_sptrk_L1MBTS_1', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sp_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=LowMuGroup+MinBiasGroup),
-        ChainProp(name='HLT_mb_sp15_pusup0_trk5_hmt_L1RD0_FILLED',          l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt2_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt2_L1MBTS_2', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt4_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt4_L1MBTS_2', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt6_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt6_L1MBTS_2', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt8_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt8_L1MBTS_2', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt2_L1AFP_A_OR_C', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt4_L1AFP_A_OR_C', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt6_L1AFP_A_OR_C', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt8_L1AFP_A_OR_C', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt2_L1AFP_A_AND_C', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt4_L1AFP_A_AND_C', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt6_L1AFP_A_AND_C', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
-        ChainProp(name='HLT_mb_sptrk_pt8_L1AFP_A_AND_C', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_L1RD0_FILLED',    l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=LowMuGroup+MinBiasGroup),
+        ChainProp(name='HLT_mb_sptrk_L1MBTS_1', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sp_L1RD0_FILLED',       l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=LowMuGroup+MinBiasGroup),
+        ChainProp(name='HLT_mb_sp15_pusup0_trk5_hmt_L1RD0_FILLED',          l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt2_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt2_L1MBTS_2', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt4_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt4_L1MBTS_2', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt6_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt6_L1MBTS_2', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt8_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt8_L1MBTS_2', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt2_L1AFP_A_OR_C', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt4_L1AFP_A_OR_C', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt6_L1AFP_A_OR_C', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt8_L1AFP_A_OR_C', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt2_L1AFP_A_AND_C', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt4_L1AFP_A_AND_C', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt6_L1AFP_A_AND_C', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
+        ChainProp(name='HLT_mb_sptrk_pt8_L1AFP_A_AND_C', l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
         ChainProp(name='HLT_mb_alfaperf_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'],     groups=['PS:Online']+LowMuGroup+MinBiasGroup),
         ChainProp(name='HLT_mb_alfaperf_L1RD0_EMPTY',  l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'],     groups=['PS:Online']+LowMuGroup+MinBiasGroup),
-        ChainProp(name="HLT_mb_mbts_L1MBTS_1_EMPTY",               l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+LowMuGroup),
-        ChainProp(name="HLT_mb_mbts_L1MBTS_1",                     l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+LowMuGroup),
-        ChainProp(name="HLT_mb_mbts_L1MBTS_1_1",                   l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+LowMuGroup),
-        ChainProp(name="HLT_mb_mbts_L1MBTS_2",                     l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+LowMuGroup),
-        ChainProp(name="HLT_mb_mbts_L1RD0_FILLED",                 l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+LowMuGroup),
-        ChainProp(name="HLT_mb_mbts_L1RD0_EMPTY",                  l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup+LowMuGroup),
+        ChainProp(name="HLT_mb_mbts_L1MBTS_1_EMPTY",               l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+LowMuGroup),
+        ChainProp(name="HLT_mb_mbts_L1MBTS_1",                     l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+LowMuGroup),
+        ChainProp(name="HLT_mb_mbts_L1MBTS_1_1",                   l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+LowMuGroup),
+        ChainProp(name="HLT_mb_mbts_L1MBTS_2",                     l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+LowMuGroup),
+        ChainProp(name="HLT_mb_mbts_L1RD0_FILLED",                 l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+LowMuGroup),
+        ChainProp(name="HLT_mb_mbts_L1RD0_EMPTY",                  l1SeedThresholds=['FSNOSEED'], stream=['MinBias'], groups=MinBiasGroup+LowMuGroup),
     
         # AFP
         ChainProp(name='HLT_mb_afprec_L1AFP_A_AND_C_TOF_J20', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['PS:Online']+MinBiasGroup+LowMuGroup),
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
index 0bd6f87d800498b23c4ea74c8444624a83ea92ae..ae1c4766c664d3acdde423daec99bac64eec1b1f 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py
@@ -385,14 +385,14 @@ AllowedTopos_Bphysics = [
     
     ##### TO BE REMOVED ONCE IMPLEMENTED IN SIGNATURE CODE
     # topoVariants
-    'BsmumuPhi', 'BpmumuKp','BcmumuPi','BdmumuKst','LbPqKm', 'BcmumuDsloose', 'BcmumuDploose',
+    'BsmumuPhi','BpmumuKp','BcmumuPi','BdmumuKst','LbPqKm','BcmumuDsloose','BcmumuDploose','BcmumuD0Xloose','BcmumuDstarloose',
     # topoExtras
-    'Lxy0', 'noos','nocut'
+    'Lxy0','noos','nocut'
     #########Remove until here############
 
 ]
-AllowedTopos_Bphysics_topoVariant=['BsmumuPhi', 'BpmumuKp','BcmumuPi','BdmumuKst','LbPqKm', 'BcmumuDsloose', 'BcmumuDploose']
-AllowedTopos_Bphysics_topoExtra=['Lxy0', 'noos','nocut']
+AllowedTopos_Bphysics_topoVariant=['BsmumuPhi','BpmumuKp','BcmumuPi','BdmumuKst','LbPqKm','BcmumuDsloose','BcmumuDploose','BcmumuD0Xloose','BcmumuDstarloose']
+AllowedTopos_Bphysics_topoExtra=['Lxy0','noos','nocut']
 AllAllowedTopos_Bphysics = AllowedTopos_Bphysics_topoVariant+AllowedTopos_Bphysics_topoExtra+AllowedTopos_Bphysics
 
 # ---- Bphysics Dictionary of all allowed Values ----
@@ -611,7 +611,7 @@ PhotonChainParts = {
     'multiplicity'   : '',
     'trigType'       : ['g'],
     'threshold'      : '',
-    'extra'          : ['hiptrt'],
+    'extra'          : ['hiptrt', 'ion'],
     'IDinfo'         : ['etcut','loose','medium','tight'],
     'isoInfo'        : ['icaloloose','icalomedium','icalotight'],
     'reccalibInfo'   : [],
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/FastPhotonMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/FastPhotonMenuSequences.py
index 3926ad842ff862abe3db5d128c3b1402e7d17824..177b758167d3d8eab86c8ca375d98420f4843753 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/FastPhotonMenuSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/FastPhotonMenuSequences.py
@@ -3,16 +3,17 @@
 
 
 # menu components   
+from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
 from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import MenuSequence, RecoFragmentsPool
 from AthenaCommon.CFElements import parOR, seqAND
 from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 from DecisionHandling.DecisionHandlingConf import ViewCreatorCentredOnClusterROITool
 import AthenaCommon.CfgMgr as CfgMgr
-from TrigEDMConfig.TriggerEDMRun3 import recordable
 
 # logger
 from AthenaCommon.Logging import logging
 log = logging.getLogger(__name__)
+TrigEgammaKeys = getTrigEgammaKeys()
 
 
 def fastPhotonSequence(flags):
@@ -27,8 +28,8 @@ def fastPhotonSequence(flags):
 
     from TrigEgammaRec.TrigEgammaFastPhotonConfig import TrigEgammaFastPhoton_ReFastAlgo 
     thePhotonFex = TrigEgammaFastPhoton_ReFastAlgo ()
-    thePhotonFex.TrigEMClusterName = CaloMenuDefs.L2CaloClusters
-    thePhotonFex.PhotonsName=recordable("HLT_FastPhotons")
+    thePhotonFex.TrigEMClusterName = CaloMenuDefs.L2CaloClusters # From commom staff
+    thePhotonFex.PhotonsName= TrigEgammaKeys.fastPhotonContainer
     #thePhotonFex.RoIs="EMIDRoIs"
 
 
@@ -37,7 +38,7 @@ def fastPhotonSequence(flags):
     # Spawn View on SuperRoI encompassing all clusters found within the L1 RoI
     roiTool = ViewCreatorCentredOnClusterROITool()
     roiTool.AllowMultipleClusters = False # If True: SuperROI mode. If False: highest eT cluster in the L1 ROI
-    roiTool.RoisWriteHandleKey = recordable("HLT_Roi_FastPhoton")
+    roiTool.RoisWriteHandleKey = TrigEgammaKeys.fastPhotonRoIContainer
     # not running the tracking here, so do not need to set this size 
     # from the ID Trigger configuration, however, if we want overlap 
     # of the Rois then we would need to use the electron instance size
@@ -77,7 +78,7 @@ def fastPhotonMenuSequence(flags=None):
     # make the hypo
     from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaFastPhotonHypoAlg
     thePhotonHypo = TrigEgammaFastPhotonHypoAlg()
-    thePhotonHypo.Photons = "HLT_FastPhotons"
+    thePhotonHypo.Photons = TrigEgammaKeys.fastPhotonContainer
     thePhotonHypo.RunInView=True
 
     from TrigEgammaHypo.TrigEgammaFastPhotonHypoTool import TrigEgammaFastPhotonHypoToolFromDict
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PhotonChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PhotonChainConfiguration.py
index 681525229b1b9d27785eca799638fc998a7510f6..20b71c02db9fe39ccf2cc6384d2d6988cdd5fdc7 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PhotonChainConfiguration.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PhotonChainConfiguration.py
@@ -8,11 +8,10 @@ log = logging.getLogger(__name__)
 
 
 from ..Menu.ChainConfigurationBase import ChainConfigurationBase
-
 from ..CommonSequences.CaloSequences import fastCaloMenuSequence
 from ..Photon.FastPhotonMenuSequences import fastPhotonMenuSequence
 from ..Photon.PrecisionPhotonMenuSequences import precisionPhotonMenuSequence
-from ..Egamma.PrecisionCaloMenuSequences import precisionCaloMenuSequence
+from ..Photon.PrecisionCaloMenuSequences import precisionCaloMenuSequence
 from ..Egamma.HipTRTMenuSequences import hipTRTMenuSequence
 from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaTopoHypoTool
 
@@ -30,11 +29,17 @@ def fastPhotonSequenceCfg( flags ):
     return fastPhotonMenuSequence( flags )
 
 def precisionPhotonCaloSequenceCfg( flags ):
-    return precisionCaloMenuSequence('Photon', is_photon=True)
+    return precisionCaloMenuSequence('Photon')
+
+def precisionPhotonCaloSequenceCfg_ion( flags ):
+    return precisionCaloMenuSequence('Photon', ion=True)
 
 def precisionPhotonSequenceCfg( flags ):
     return precisionPhotonMenuSequence('Photon')
 
+def precisionPhotonSequenceCfg_ion( flags ):
+    return precisionPhotonMenuSequence('Photon', ion=True)
+
 def hipTRTMenuSequenceCfg( flags ):
     return hipTRTMenuSequence()
 
@@ -125,6 +130,10 @@ class PhotonChainConfiguration(ChainConfigurationBase):
         return self.getStep(2,stepName,[ fastPhotonSequenceCfg])
 
     def getPrecisionCaloPhoton(self):
+        if self.chainPart['extra'] == 'ion':
+            stepName = "PhotonPrecisionHICalo"
+            return self.getStep(3,stepName, [precisionPhotonCaloSequenceCfg_ion])
+
         stepName = "PhotonPrecisionCalo"
         return self.getStep(3,stepName,[ precisionPhotonCaloSequenceCfg])
     
@@ -142,6 +151,10 @@ class PhotonChainConfiguration(ChainConfigurationBase):
                 stepName = "precision_photon_dPhi15"
                 return self.getStep(4,stepName,sequenceCfgArray=[precisionPhotonSequenceCfg], comboTools=[diphotonDPhiHypoToolFromDict])
         else:
+            if self.chainPart['extra'] == 'ion':
+                stepName = "precision_photon_ion"
+                return self.getStep(4,stepName, [precisionPhotonSequenceCfg_ion])
+
             stepName = "precision_photon"
             return self.getStep(4,stepName,[ precisionPhotonSequenceCfg])
     
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionCaloMenuSequences.py
similarity index 71%
rename from Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionCaloMenuSequences.py
index a9590cdb63f7ef71839cf0f3bc6bf54079c1e9e1..a0de2e139f0a358ccf8e13a510ba67c4be71a1ba 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/PrecisionCaloMenuSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionCaloMenuSequences.py
@@ -8,26 +8,17 @@ from AthenaCommon.CFElements import seqAND
 from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm
 from DecisionHandling.DecisionHandlingConf import ViewCreatorPreviousROITool
 from AthenaConfiguration.AllConfigFlags import ConfigFlags
-from TrigEDMConfig.TriggerEDMRun3 import recordable
-      
-class precisionCaloMenuDefs(object):
-    """Static class to collect all string manipulation in Calo sequences """
-    precisionCaloClusters = recordable("HLT_CaloEMClusters")
-    precisionHICaloClusters = recordable("HLT_HICaloEMClusters")
-    egEventShape = recordable('HLT_HIEventShapeEG')
-
-    @classmethod
-    def caloClusters(cls, ion):
-        return cls.precisionHICaloClusters if ion is True else cls.precisionCaloClusters
-
-def tag(ion, is_photon):
-    return 'precision' + ('HI' if ion is True else '') + 'Calo' + ('Photon' if is_photon else 'Electron')
-
-def precisionCaloSequence(ConfigFlags, ion=False, is_photon=False):
+   
+
+def tag(ion):
+    return 'precision' + ('HI' if ion is True else '') + 'CaloPhoton'
+
+
+def precisionCaloSequence(ConfigFlags, ion=False):
     """ Creates PrecisionCalo sequence """
     # EV creator
     InViewRoIs="PrecisionCaloRoIs"     
-    precisionCaloViewsMaker = EventViewCreatorAlgorithm('IM' + tag(ion,is_photon))
+    precisionCaloViewsMaker = EventViewCreatorAlgorithm('IM' + tag(ion))
     precisionCaloViewsMaker.ViewFallThrough = True
     precisionCaloViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI
     roiTool = ViewCreatorPreviousROITool()
@@ -37,17 +28,17 @@ def precisionCaloSequence(ConfigFlags, ion=False, is_photon=False):
     roiTool.RoISGKey = "HLT_Roi_FastElectron"
     precisionCaloViewsMaker.RoITool = roiTool
     precisionCaloViewsMaker.InViewRoIs = InViewRoIs
-    precisionCaloViewsMaker.Views = tag(ion,is_photon) + 'Views'
+    precisionCaloViewsMaker.Views = tag(ion) + 'Views'
     precisionCaloViewsMaker.RequireParentView = True
     precisionCaloViewsMaker.CacheDisabled = True
 
     # reco sequence
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloRecoSequences import precisionCaloRecoSequence
-    (precisionCaloInViewSequence, sequenceOut) = precisionCaloRecoSequence(None, InViewRoIs, ion, is_photon)
+    from TriggerMenuMT.HLTMenuConfig.Photon.PrecisionCaloRecoSequences import precisionCaloRecoSequence
+    (precisionCaloInViewSequence, sequenceOut) = precisionCaloRecoSequence(None, InViewRoIs, ion)
         
     precisionCaloViewsMaker.ViewNodeName = precisionCaloInViewSequence.name()
 
-    theSequence = seqAND(tag(ion,is_photon) + 'Sequence', [])
+    theSequence = seqAND(tag(ion) + 'Sequence', [])
 
     if ion is True:
         # add UE subtraction for heavy ion e/gamma triggers
@@ -55,25 +46,26 @@ def precisionCaloSequence(ConfigFlags, ion=False, is_photon=False):
         # using the full event (FS info), and has to be done outside of the
         # event views in this sequence. the egammaFSRecoSequence is thus placed
         # before the precisionCaloInViewSequence.
-        from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloRecoSequences import egammaFSCaloRecoSequence
+        from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import egammaFSCaloRecoSequence
         egammaFSRecoSequence = egammaFSCaloRecoSequence()
-
         theSequence += egammaFSRecoSequence
 
     # connect EVC and reco
     theSequence += [precisionCaloViewsMaker, precisionCaloInViewSequence]
     return (theSequence, precisionCaloViewsMaker, sequenceOut)
 
-def precisionCaloMenuSequence(name, is_probe_leg=False, ion=False, is_photon=False):
+
+
+def precisionCaloMenuSequence(name, is_probe_leg=False, ion=False):
     """ Creates precisionCalo MENU sequence """
 
-    (sequence, precisionCaloViewsMaker, sequenceOut) = RecoFragmentsPool.retrieve(precisionCaloSequence, ConfigFlags, ion=ion, is_photon=is_photon)
+    (sequence, precisionCaloViewsMaker, sequenceOut) = RecoFragmentsPool.retrieve(precisionCaloSequence, ConfigFlags, ion=ion)
 
     #Hypo
     from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaPrecisionCaloHypoAlg
     from TrigEgammaHypo.TrigEgammaPrecisionCaloHypoTool import TrigEgammaPrecisionCaloHypoToolFromDict
 
-    thePrecisionCaloHypo = TrigEgammaPrecisionCaloHypoAlg(name + tag(ion,is_photon) + 'Hypo')
+    thePrecisionCaloHypo = TrigEgammaPrecisionCaloHypoAlg(name + tag(ion) + 'Hypo')
     thePrecisionCaloHypo.CaloClusters = sequenceOut
 
     return MenuSequence( Sequence    = sequence,
@@ -81,3 +73,4 @@ def precisionCaloMenuSequence(name, is_probe_leg=False, ion=False, is_photon=Fal
                          Hypo        = thePrecisionCaloHypo,
                          HypoToolGen = TrigEgammaPrecisionCaloHypoToolFromDict,
                          IsProbe     = is_probe_leg)
+
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionCaloRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionCaloRecoSequences.py
new file mode 100644
index 0000000000000000000000000000000000000000..052f3dd0ab334bdb8189e84e7671e01c8dc5e44f
--- /dev/null
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionCaloRecoSequences.py
@@ -0,0 +1,54 @@
+#
+#  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
+#
+
+from AthenaCommon.Logging    import logging
+from egammaAlgs              import egammaAlgsConf
+from egammaRec.Factories     import AlgFactory
+from AthenaCommon.CFElements import parOR
+from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents        import RecoFragmentsPool
+from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys      import getTrigEgammaKeys
+from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import TrigEgammaRec, TrigEgammaSuperClusterBuilder 
+
+TrigEgammaKeys = getTrigEgammaKeys()
+
+log = logging.getLogger(__name__)
+
+
+def precisionCaloRecoSequence(DummyFlag, RoIs, ion=False):
+
+    log.debug('DummyFlag = %s',str(DummyFlag))
+    log.debug('RoIs = %s',RoIs)
+
+    from TrigT2CaloCommon.CaloDef import HLTRoITopoRecoSequence, HLTHIRoITopoRecoSequence
+    topoRecoSequence = HLTHIRoITopoRecoSequence if ion is True else HLTRoITopoRecoSequence
+    (caloRecoSequence, caloclusters) = RecoFragmentsPool.retrieve(topoRecoSequence, None, RoIs=RoIs, algSuffix='')
+
+    tag = 'HI' if ion is True else '' 
+
+    outputCaloClusters = TrigEgammaKeys.precisionCaloClusterContainer if not ion else TrigEgammaKeys.precisionHICaloClusterContainer
+    log.debug('precisionOutputCaloClusters = %s',outputCaloClusters)
+
+    egammaTopoClusterCopier = AlgFactory( egammaAlgsConf.egammaTopoClusterCopier,
+                                          name = 'gTrigEgammaTopoClusterCopier' + tag + RoIs ,
+                                          InputTopoCollection = caloclusters,
+                                          OutputTopoCollection = TrigEgammaKeys.precisionCaloTopoCollection,
+                                          OutputTopoCollectionShallow = "tmp_" + TrigEgammaKeys.precisionCaloTopoCollection,
+                                          doAdd = False )
+
+    algo = egammaTopoClusterCopier()
+    precisionRecoSequence = parOR("photonRoITopoRecoSequence"+tag)
+    precisionRecoSequence += caloRecoSequence
+    precisionRecoSequence += algo
+    trigEgammaRec = TrigEgammaRec(name = 'gTrigEgammaRec' + tag + RoIs)
+    precisionRecoSequence += trigEgammaRec
+    trigEgammaSuperClusterBuilder = TrigEgammaSuperClusterBuilder(name = 'gTrigEgammaSuperClusterBuilder' + tag + RoIs )
+    trigEgammaSuperClusterBuilder.SuperClusterCollectionName = outputCaloClusters
+    trigEgammaSuperClusterBuilder.CalibrationType = 'photon'
+    precisionRecoSequence +=  trigEgammaSuperClusterBuilder
+    sequenceOut = outputCaloClusters
+
+    return (precisionRecoSequence, sequenceOut)
+
+
+
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonMenuSequences.py
index a20ce7761e0499b1b9a1ba877e9c7d9a9e4f36eb..759b0457da0f85eb2f2bb2c4659f9d4d05b5338e 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonMenuSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonMenuSequences.py
@@ -10,41 +10,43 @@ from DecisionHandling.DecisionHandlingConf import ViewCreatorPreviousROITool
 from AthenaCommon.Logging import logging
 log = logging.getLogger(__name__)
 
+def tag(ion):
+    return 'precision' + ('HI' if ion is True else '') + 'Photon'
 
-def precisionPhotonSequence(ConfigFlags):
+def precisionPhotonSequence(ConfigFlags, ion=False):
     """ This function creates the PrecisionPhoton sequence"""
     # Prepare first the EventView
     InViewRoIs="PrecisionPhotonRoIs"                                          
-    precisionPhotonViewsMaker = EventViewCreatorAlgorithm( "IMprecisionPhoton") 
+    precisionPhotonViewsMaker = EventViewCreatorAlgorithm( "IM" + tag(ion))
     precisionPhotonViewsMaker.ViewFallThrough = True                          
     precisionPhotonViewsMaker.RequireParentView = True
     precisionPhotonViewsMaker.RoIsLink = "initialRoI"            # ROI link used to merge inputs
     precisionPhotonViewsMaker.RoITool = ViewCreatorPreviousROITool() # Tool used to supply ROIs for EventViews
     precisionPhotonViewsMaker.InViewRoIs = InViewRoIs            # names to use for the collection of which the RoIs are picked up
-    precisionPhotonViewsMaker.Views = "precisionPhotonViews"     # Output container which has the view objects
+    precisionPhotonViewsMaker.Views = tag(ion) + "Views"     # Output container which has the view objects
 
     # Configure the reconstruction algorithm sequence
     from TriggerMenuMT.HLTMenuConfig.Photon.PrecisionPhotonRecoSequences import precisionPhotonRecoSequence
-    (precisionPhotonInViewSequence, sequenceOut) = precisionPhotonRecoSequence(InViewRoIs)
+    (precisionPhotonInViewSequence, sequenceOut) = precisionPhotonRecoSequence(InViewRoIs, ion)
 
     precisionPhotonViewsMaker.ViewNodeName = precisionPhotonInViewSequence.name()
 
-    theSequence = seqAND("precisionPhotonSequence", [precisionPhotonViewsMaker,precisionPhotonInViewSequence])
+    theSequence = seqAND(tag(ion)+"Sequence", [precisionPhotonViewsMaker,precisionPhotonInViewSequence])
     return (theSequence, precisionPhotonViewsMaker, sequenceOut)
 
 
 
-def precisionPhotonMenuSequence(name):
+def precisionPhotonMenuSequence(name,ion=False):
 
     # This will be executed after pricisionCalo, so we need to pickup indeed the topoClusters by precisionCalo and add them here as requirements
 
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
     """Creates precisionPhoton  sequence"""
-    (sequence, precisionPhotonViewsMaker, sequenceOut) = RecoFragmentsPool.retrieve(precisionPhotonSequence,ConfigFlags)
+    (sequence, precisionPhotonViewsMaker, sequenceOut) = RecoFragmentsPool.retrieve(precisionPhotonSequence,ConfigFlags,ion=ion)
 
     # Hypo 
     from TrigEgammaHypo.TrigEgammaPrecisionPhotonHypoTool import createTrigEgammaPrecisionPhotonHypoAlg
-    thePrecisionPhotonHypo = createTrigEgammaPrecisionPhotonHypoAlg(name+"precisionPhotonHypo", sequenceOut)
+    thePrecisionPhotonHypo = createTrigEgammaPrecisionPhotonHypoAlg(name+ tag(ion) +"Hypo", sequenceOut)
     
     from TrigEgammaHypo.TrigEgammaPrecisionPhotonHypoTool import TrigEgammaPrecisionPhotonHypoToolFromDict
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonRecoSequences.py
index 16e89329a78811e4e32c7207988f2ffd9ff33aec..b9ca30b210d4e405e775a5b8650c49bce4b5364d 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonRecoSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonRecoSequences.py
@@ -1,12 +1,16 @@
 #  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 
 from AthenaCommon.CFElements import parOR
+from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
 
 #logging
 from AthenaCommon.Logging import logging
 log = logging.getLogger(__name__)
 
-def precisionPhotonRecoSequence(RoIs):
+TrigEgammaKeys = getTrigEgammaKeys()
+
+
+def precisionPhotonRecoSequence(RoIs, ion=False):
     """ With this function we will setup the sequence of offline EgammaAlgorithms so to make a photon for TrigEgamma 
 
     Sequence of algorithms is the following:
@@ -20,54 +24,61 @@ def precisionPhotonRecoSequence(RoIs):
 
     log.debug('precisionPhotonRecoSequence(RoIs = %s)',RoIs)
 
+    tag = '_ion' if ion is True else ''
+
     # First the data verifiers:
     # Here we define the data dependencies. What input needs to be available for the Fexs (i.e. TopoClusters from precisionCalo) in order to run
-    from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences import precisionCaloMenuDefs
     import AthenaCommon.CfgMgr as CfgMgr
-    ViewVerify = CfgMgr.AthViews__ViewDataVerifier("PrecisionPhotonPhotonViewDataVerifier")
-    ViewVerify.DataObjects = [( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+%s' % precisionCaloMenuDefs.precisionCaloClusters ),
-                              ( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' )]
 
+    caloClusters = TrigEgammaKeys.precisionCaloClusterContainer if not ion else TrigEgammaKeys.precisionHICaloClusterContainer
+
+    ViewVerify = CfgMgr.AthViews__ViewDataVerifier("PrecisionPhotonPhotonViewDataVerifier" + tag)
+    ViewVerify.DataObjects = [( 'xAOD::CaloClusterContainer' , 'StoreGateSvc+%s' % caloClusters ),
+                              ( 'CaloCellContainer' , 'StoreGateSvc+CaloCells' )]
+    if ion is True: ViewVerify.DataObjects.append(( 'CaloCellContainer' , 'StoreGateSvc+CorrectedRoICaloCells' ))
 
     # Retrieve the factories now
-    from TriggerMenuMT.HLTMenuConfig.Photon.TrigPhotonFactories import TrigEgammaRecPhoton, TrigPhotonSuperClusterBuilder, TrigTopoEgammaPhotons
+    from TriggerMenuMT.HLTMenuConfig.Photon.TrigPhotonFactories import TrigEgammaRecPhoton, TrigPhotonSuperClusterBuilder, TrigTopoEgammaPhotons_HI, TrigTopoEgammaPhotons
 
     log.debug('retrieve(precisionPhotonRecoSequence,None,RoIs = %s)',RoIs)
 
+
     # The sequence of these algorithms
-    thesequence = parOR( "precisionPhotonAlgs") # This thing creates the sequence with name precisionPhotonAlgs
+    thesequence = parOR( "precisionPhotonAlgs" + tag) # This thing creates the sequence with name precisionPhotonAlgs
     thesequence += ViewVerify
 
     # Add to the sequence the three steps:
     #  - TrigEgammaBuilder, TrigPhotonSuperClusters, TrigTopoEgammaPhotons
-    TrigEgammaAlgo = TrigEgammaRecPhoton()
-    TrigEgammaAlgo.InputClusterContainerName = precisionCaloMenuDefs.precisionCaloClusters
+    TrigEgammaAlgo = TrigEgammaRecPhoton('TrigEgammaRecPhoton'+tag)
+    TrigEgammaAlgo.InputClusterContainerName = caloClusters
     thesequence += TrigEgammaAlgo
 
-    trigPhotonAlgo = TrigPhotonSuperClusterBuilder()
+    trigPhotonAlgo = TrigPhotonSuperClusterBuilder('TrigPhotonSuperClusterBuilder'+tag)
     trigPhotonAlgo.InputEgammaRecContainerName = TrigEgammaAlgo.egammaRecContainer
     thesequence += trigPhotonAlgo
 
-    trigTopoEgammaAlgo = TrigTopoEgammaPhotons()
+    egammaPhotonAlgo = TrigTopoEgammaPhotons_HI if ion is True else TrigTopoEgammaPhotons
+
+    trigTopoEgammaAlgo = egammaPhotonAlgo('TrigTopoEgammaPhotons' +tag)
     trigTopoEgammaAlgo.InputPhotonRecCollectionName = trigPhotonAlgo.SuperPhotonRecCollectionName
     collectionOut = trigTopoEgammaAlgo.PhotonOutputName
     thesequence += trigTopoEgammaAlgo
 
     # Add CaloIsolationTool
     from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import TrigPhotonIsoBuilderCfg
-    isoBuilder = TrigPhotonIsoBuilderCfg()
+    isoBuilder = TrigPhotonIsoBuilderCfg('TrigPhotonIsolationBuilder' + tag)
     thesequence += isoBuilder
 
     #online monitoring for topoEgammaBuilder
     from TriggerMenuMT.HLTMenuConfig.Photon.TrigPhotonFactories import PrecisionPhotonTopoMonitorCfg
-    PrecisionPhotonRecoMonAlgo = PrecisionPhotonTopoMonitorCfg()
+    PrecisionPhotonRecoMonAlgo = PrecisionPhotonTopoMonitorCfg('PrecisionPhotonTopoEgammaBuilder' + tag)
     PrecisionPhotonRecoMonAlgo.PhotonKey = trigTopoEgammaAlgo.PhotonOutputName
     PrecisionPhotonRecoMonAlgo.IsoVarKeys = [ '%s.topoetcone20' % trigTopoEgammaAlgo.PhotonOutputName, '%s.topoetcone40' % trigTopoEgammaAlgo.PhotonOutputName]
     thesequence += PrecisionPhotonRecoMonAlgo
 
     #online monitoring for TrigPhotonSuperClusterBuilder
     from TriggerMenuMT.HLTMenuConfig.Photon.TrigPhotonFactories import PrecisionPhotonSuperClusterMonitorCfg
-    PrecisionPhotonSuperClusterMonAlgo = PrecisionPhotonSuperClusterMonitorCfg()
+    PrecisionPhotonSuperClusterMonAlgo = PrecisionPhotonSuperClusterMonitorCfg('PrecisionPhotonSuperClusterBuilder' + tag)
     PrecisionPhotonSuperClusterMonAlgo.InputEgammaRecContainerName = trigPhotonAlgo.SuperPhotonRecCollectionName
     thesequence += PrecisionPhotonSuperClusterMonAlgo
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TLAPhotonMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonTLAMenuSequences.py
similarity index 100%
rename from Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TLAPhotonMenuSequences.py
rename to Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/PrecisionPhotonTLAMenuSequences.py
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TrigPhotonFactories.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TrigPhotonFactories.py
index 9800b0c61ce62f885573fd35e79d840fa63416ae..e3eadc2570cd5086b4be00f748ba1232db6d2abf 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TrigPhotonFactories.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Photon/TrigPhotonFactories.py
@@ -12,27 +12,24 @@ Offline configurations are available here:
 """
 from egammaAlgs import egammaAlgsConf
 from egammaRec.Factories import AlgFactory,  FcnWrapper
-
 from egammaTools.egammaToolsFactories import egammaSwSuperClusterTool, egammaMVASvc, EGammaAmbiguityTool
-
 # Tools and funtions from TrigEgammaFactories
-from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import TrigEMClusterTool, TrigEMShowerBuilder ,TrigEgammaDecorationTools, TrigPhotonDecorationTools, TrigEMTrackMatchBuilder
-
+from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaFactories import TrigEMClusterTool, TrigEMShowerBuilder_HI, TrigEMShowerBuilder, TrigEgammaDecorationTools, TrigPhotonDecorationTools, TrigEMTrackMatchBuilder
 # Load TrigEgammaKeys where we store the container names and other TrigEgamma configuration values
 from TriggerMenuMT.HLTMenuConfig.Egamma.TrigEgammaKeys import getTrigEgammaKeys
-TrigEgammaKeys = getTrigEgammaKeys()
-from TriggerMenuMT.HLTMenuConfig.Egamma.PrecisionCaloMenuSequences import precisionCaloMenuDefs
 
 
 # Decoration tools for egamma and photon objects:
 # Copying from https://gitlab.cern.ch/atlas/athena/blob/master/Reconstruction/egamma/egammaRec/python/topoEgammaGetter.py#L28
 
+TrigEgammaKeys = getTrigEgammaKeys()
+
 
 # Factory for egamaRecBuilder/TrigEgammaRecPhoton
 TrigEgammaRecPhoton = AlgFactory( egammaAlgsConf.egammaRecBuilder,
         name = 'TrigEgammaRecPhoton' ,
-        InputClusterContainerName = precisionCaloMenuDefs.precisionCaloClusters, # Use as input, the clusters made by precisionCalo
-        egammaRecContainer=TrigEgammaKeys.EgammaRecKey,
+        InputClusterContainerName = TrigEgammaKeys.precisionCaloClusterContainer, # Use as input, the clusters made by precisionCalo
+        egammaRecContainer=TrigEgammaKeys.precisionEgammaRecCollection ,
         doTrackMatching = False,
         doConversions = False,
         ## Builder tools
@@ -44,8 +41,8 @@ TrigEgammaRecPhoton = AlgFactory( egammaAlgsConf.egammaRecBuilder,
 #Factory for photon SC builder
 TrigPhotonSuperClusterBuilder = AlgFactory( egammaAlgsConf.photonSuperClusterBuilder,
         name = 'TrigPhotonSuperClusterBuilder',
-        InputEgammaRecContainerName=TrigEgammaKeys.EgammaRecKey,
-        SuperPhotonRecCollectionName=TrigEgammaKeys.SuperPhotonRecCollectionName,
+        InputEgammaRecContainerName=TrigEgammaKeys.precisionEgammaRecCollection ,
+        SuperPhotonRecCollectionName=TrigEgammaKeys.precisionPhotonSuperClusterCollection,
         ClusterCorrectionTool=egammaSwSuperClusterTool,
         MVACalibSvc= egammaMVASvc,
         doConversions = False,
@@ -56,12 +53,28 @@ TrigPhotonSuperClusterBuilder = AlgFactory( egammaAlgsConf.photonSuperClusterBui
         )
 
 #Factory for photons
+TrigTopoEgammaPhotons_HI = AlgFactory( egammaAlgsConf.xAODEgammaBuilder,
+        name = 'TrigTopoEgammaPhotons_HI',
+        InputElectronRecCollectionName = TrigEgammaKeys.precisionElectronSuperClusterCollection,
+        InputPhotonRecCollectionName = TrigEgammaKeys.precisionPhotonSuperClusterCollection,
+        ElectronOutputName = TrigEgammaKeys.precisionElectronContainer,
+        PhotonOutputName = TrigEgammaKeys.precisionPhotonContainer,
+        AmbiguityTool = EGammaAmbiguityTool,
+        EMClusterTool = TrigEMClusterTool,
+        EMShowerTool=TrigEMShowerBuilder_HI,
+        egammaTools = FcnWrapper(TrigEgammaDecorationTools),
+        PhotonTools = FcnWrapper(TrigPhotonDecorationTools),
+        doAdd = False,
+        doPhotons = True,
+        doElectrons = False,
+        )
+
 TrigTopoEgammaPhotons = AlgFactory( egammaAlgsConf.xAODEgammaBuilder, 
         name = 'TrigTopoEgammaPhotons',
-        InputElectronRecCollectionName = TrigEgammaKeys.SuperElectronRecCollectionName,
-        InputPhotonRecCollectionName = TrigEgammaKeys.SuperPhotonRecCollectionName,
-        ElectronOutputName = TrigEgammaKeys.outputElectronKey,
-        PhotonOutputName = TrigEgammaKeys.outputPhotonKey,  
+        InputElectronRecCollectionName = TrigEgammaKeys.precisionElectronSuperClusterCollection,
+        InputPhotonRecCollectionName = TrigEgammaKeys.precisionPhotonSuperClusterCollection,
+        ElectronOutputName = TrigEgammaKeys.precisionElectronContainer,
+        PhotonOutputName = TrigEgammaKeys.precisionPhotonContainer,  
         AmbiguityTool = EGammaAmbiguityTool,
         EMClusterTool = TrigEMClusterTool,
         EMShowerTool=TrigEMShowerBuilder,
@@ -81,7 +94,7 @@ def PrecisionPhotonTopoMonitorCfg(name = 'PrecisionPhotonTopoMonitoring'):
     PrecisionPhotonTopoMonitor = AlgFactory( TrigEgammaMonitoringConf.egammaMonitorPhotonAlgorithm,
             name = name,
             doAdd = False,
-            PhotonKey = TrigEgammaKeys.outputPhotonKey,
+            PhotonKey = TrigEgammaKeys.precisionPhotonContainer,
             MonTool = monTool
             )
 
@@ -96,7 +109,7 @@ def PrecisionPhotonSuperClusterMonitorCfg(name = 'PrecisionPhotonSuperClusterMon
     PrecisionPhotonSuperClusterMonitor = AlgFactory( TrigEgammaMonitoringConf.egammaMonitorSuperClusterAlgorithm,
             name = name,
             doAdd = False,
-            InputEgammaRecContainerName = TrigEgammaKeys.EgammaRecKey,
+            InputEgammaRecContainerName = TrigEgammaKeys.precisionEgammaRecCollection,
             MonTool = monTool
             )
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/TauRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/TauRecoSequences.py
index 3c275ecc367189f558c2dba9f8d444b1ccf49f9c..510c2b0102e83d9ee000207cfb378eb0336f7299 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/TauRecoSequences.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/TauRecoSequences.py
@@ -58,7 +58,7 @@ def _algoTauCaloOnlyMVA(name, L1RoIs, inputRoIs, clusters):
     algo.Key_trackPartInputContainer   = ""
     algo.Key_trigTauJetInputContainer  = ""
     algo.Key_trigTauTrackInputContainer  = ""
-    algo.Key_trigTauJetOutputContainer = recordable("HLT_TrigTauRecMerged_CaloOnly")
+    algo.Key_trigTauJetOutputContainer = recordable("HLT_TrigTauRecMerged_CaloMVAOnly")
     algo.Key_trigTauTrackOutputContainer = "HLT_tautrack_dummy"
     return algo
 
@@ -88,7 +88,7 @@ def _algoTauTrackBDTRoiUpdater(inputRoIs, tracks):
     algo.RoIOutputKey                  = "UpdatedTrackBDTRoI"
     algo.fastTracksKey                 = tracks
     algo.useBDT                        = True
-    algo.Key_trigTauJetInputContainer  = "HLT_TrigTauRecMerged_CaloOnly"
+    algo.Key_trigTauJetInputContainer  = "HLT_TrigTauRecMerged_CaloMVAOnly"
     return algo
 
 def _algoTauPrecision(name, inputRoIs, tracks):
@@ -96,11 +96,11 @@ def _algoTauPrecision(name, inputRoIs, tracks):
     from TrigInDetConfig.ConfigSettings import getInDetTrigConfig
 
     if "MVA" in name:
-      algo                                 = TrigTauRecMerged_TauPrecisionMVA(name= "TrigTauRecMerged_TauPrecision_PrecisionMVA", doMVATES=True, doTrackBDT=False, doRNN=True, doLLP=False) 
+      algo                                 = TrigTauRecMerged_TauPrecisionMVA(name= "TrigTauRecMerged_TauPrecision_PrecisionMVA", doTrackBDT=False, doRNN=True, doLLP=False) 
       algo.Key_trigTauJetOutputContainer   = recordable("HLT_TrigTauRecMerged_MVA")
       algo.Key_trigTauTrackOutputContainer = recordable("HLT_tautrack_MVA")
     elif "LLP" in name:
-      algo                                 = TrigTauRecMerged_TauPrecisionMVA(name= "TrigTauRecMerged_TauPrecision_PrecisionLLP", doMVATES=True, doTrackBDT=False, doRNN=False,doLLP=True)
+      algo                                 = TrigTauRecMerged_TauPrecisionMVA(name= "TrigTauRecMerged_TauPrecision_PrecisionLLP", doTrackBDT=False, doRNN=False,doLLP=True)
       algo.Key_trigTauJetOutputContainer   = recordable("HLT_TrigTauRecMerged_LLP")
       algo.Key_trigTauTrackOutputContainer = recordable("HLT_tautrack_LLP")
     else:
@@ -108,7 +108,7 @@ def _algoTauPrecision(name, inputRoIs, tracks):
       return None
 
     algo.Key_trigTauTrackInputContainer  = "HLT_tautrack_dummy"
-    algo.Key_trigTauJetInputContainer    = "HLT_TrigTauRecMerged_CaloOnly"
+    algo.Key_trigTauJetInputContainer    = "HLT_TrigTauRecMerged_CaloMVAOnly"
     algo.Key_trigJetSeedOutputKey        = recordable("HLT_jet_seed")
 
     algo.RoIInputKey                     = inputRoIs
@@ -169,7 +169,7 @@ def tauIdSequence( RoIs, name):
                                 ( 'SG::AuxElement' , 'StoreGateSvc+EventInfo.averageInteractionsPerCrossing'   ),
                                 ( 'xAOD::VertexContainer', 'StoreGateSvc+'+getInDetTrigConfig( "tauIso" ).vertex),
                                 ( 'xAOD::TauTrackContainer' , 'StoreGateSvc+HLT_tautrack_dummy' ),
-                                ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloOnly' ),
+                                ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloMVAOnly' ),
                                 ( 'xAOD::TrackParticleContainer' , 'StoreGateSvc+'+IDTrigConfig.tracks_IDTrig() )]
 
     tauIdSequence+= ViewVerifyId
@@ -195,7 +195,7 @@ def precTrackSequence( RoIs , name):
                                  ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs ),
                                  ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+HLT_TAURoI' ),
                                  ( 'xAOD::TauTrackContainer' , 'StoreGateSvc+HLT_tautrack_dummy' ),
-                                 ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloOnly' ),    
+                                 ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloMVAOnly' ),    
                                  ( 'IDCInDetBSErrContainer' , 'StoreGateSvc+SCT_FlaggedCondData_TRIG' ),
                                  ( 'xAOD::IParticleContainer' , 'StoreGateSvc+%s' % IDTrigConfig.tracks_FTF() )]
 
@@ -248,7 +248,7 @@ def tauFTFSequence( RoIs, name ):
     TrackCollection = IDTrigConfig.trkTracks_FTF()
 
     viewVerify.DataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs ),
-                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloOnly')] 
+                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloMVAOnly')] 
 
     if 'Core' in signatureName:
       tauTrackRoiUpdaterAlg = _algoTauTrackRoiUpdater(inputRoIs = RoIs, tracks = TrackCollection)
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/generateTau.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/generateTau.py
index a8ed879d92ffb037f08d397a790d0ad6317cfd44..55e274c7bbaa5da3d988f6180402b4d77eb2c1b8 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/generateTau.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/generateTau.py
@@ -33,7 +33,7 @@ def generateChains( flags, chainDict ):
         selAcc = SelectionCA("CaloTau")
         selAcc.mergeReco(recoAcc)
         hypoAlg = CompFactory.TrigTauCaloHypoAlg("HL2CaloTauHypo",
-                                                    taujets = "HLT_TrigTauRecMerged_CaloOnly" )
+                                                    taujets = "HLT_TrigTauRecMerged_CaloMVAOnly" )
         selAcc.addHypoAlgo(hypoAlg)
         from TrigTauHypo.TrigTauHypoTool import TrigL2TauHypoToolFromDict
         menuCA = MenuSequenceCA(selAcc, HypoToolGen=TrigL2TauHypoToolFromDict)
@@ -66,7 +66,7 @@ def generateChains( flags, chainDict ):
         fastInDetReco.mergeReco(idTracking)
         fastInDetReco.addRecoAlgo(CompFactory.AthViews.ViewDataVerifier(name='VDVFastTau',
                                 DataObjects=[( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % evtViewMaker.InViewRoIs ),
-                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloOnly')]) )
+                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloMVAOnly')]) )
         selAcc.mergeReco(fastInDetReco)
         hypoAlg = CompFactory.TrigTrackPreSelHypoAlg("TrackPreSelHypoAlg_PassByTau",
                                                     trackcollection = flags.Trigger.InDetTracking.Tau.trkTracks_FTF, RoIForIDReadHandleKey="" )
@@ -101,7 +101,7 @@ def generateChains( flags, chainDict ):
         fastInDetReco.mergeReco(idTracking)                                                                                         
         fastInDetReco.addRecoAlgo(CompFactory.AthViews.ViewDataVerifier(name='VDVFastTauCore',                                                 
                                 DataObjects=[( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % evtViewMaker.InViewRoIs ),                                                        
-                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloOnly')]) )                                                                         
+                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloMVAOnly')]) )                                                                         
 
         fastInDetReco.addRecoAlgo(CompFactory.TrigTauTrackRoiUpdater('TrackRoiUpdater',                                                                                                       
                                                                RoIInputKey                  = evtViewMaker.InViewRoIs,                                                               
@@ -113,7 +113,7 @@ def generateChains( flags, chainDict ):
                                                                RoIOutputKey                 = "UpdatedTrackBDTRoI",                                                              
                                                                fastTracksKey                = flags.Trigger.InDetTracking.TauCore.trkTracks_FTF,                                                            
                                                                useBDT                       = True,                                                                                  
-                                                               Key_trigTauJetInputContainer = "HLT_TrigTauRecMerged_CaloOnly" ))                                                   
+                                                               Key_trigTauJetInputContainer = "HLT_TrigTauRecMerged_CaloMVAOnly" ))                                                   
         selAcc.mergeReco(fastInDetReco)                                                                                                                     
         hypoAlg = CompFactory.TrigTrackPreSelHypoAlg("TrackPreSelHypoAlg_RejectEmpty",                                                                                             
                                                     trackcollection = flags.Trigger.InDetTracking.TauCore.trkTracks_FTF )                                                            
@@ -148,7 +148,7 @@ def generateChains( flags, chainDict ):
         fastInDetReco.mergeReco(idTracking)
         fastInDetReco.addRecoAlgo(CompFactory.AthViews.ViewDataVerifier(name='VDVFastTauIso',
                                 DataObjects=[( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % evtViewMaker.InViewRoIs ),
-                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloOnly')]) )
+                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloMVAOnly')]) )
 
         selAcc.mergeReco(fastInDetReco)
         hypoAlg = CompFactory.TrigTrackPreSelHypoAlg("TrackPreSelHypoAlg_PassByIso",
@@ -190,7 +190,7 @@ def generateChains( flags, chainDict ):
         fastInDetReco.mergeReco(idTracking)
         fastInDetReco.addRecoAlgo(CompFactory.AthViews.ViewDataVerifier(name='VDVFastTauIsoBDT',
                                 DataObjects=[( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % evtViewMaker.InViewRoIs ),
-                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloOnly')]) )
+                               ( 'xAOD::TauJetContainer' , 'StoreGateSvc+HLT_TrigTauRecMerged_CaloMVAOnly')]) )
 
         selAcc.mergeReco(fastInDetReco)
         hypoAlg = CompFactory.TrigTrackPreSelHypoAlg("TrackPreSelHypoAlg_PassByIsoBDT",
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py
index c47039f0ed1f7b6f323aba8b09c5a18659ff2ed3..4103a4c1b02aa3466541cabda11c05a526cae49c 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py
@@ -68,7 +68,6 @@ class ItemDef:
         unpaired_isocond    = d.BGRP0 & d.BGRP4 # unpaired isolated (satellite bunches)
         unpaired_nonisocond = d.BGRP0 & d.BGRP5 # unpaired non-isolated (parasitic bunches)
         firstempty          = d.BGRP0 & d.BGRP6
-        unpairedRcond       = d.BGRP0 & d.BGRP7 # unpaired beams 1 or beam 2
         bgrp7cond           = d.BGRP0 & d.BGRP7 # No unpaired anymore
         bgrp9cond           = d.BGRP0 & d.BGRP9
         bgrp11cond          = d.BGRP0 & d.BGRP11
@@ -92,8 +91,11 @@ class ItemDef:
 
         MenuItem('L1_EM3'       ).setLogic( d.EM3        & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM7'       ).setLogic( d.EM7        & physcond).setTriggerType( TT.calo )
+        MenuItem('L1_EM10'      ).setLogic( d.EM10       & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM12'      ).setLogic( d.EM12       & physcond).setTriggerType( TT.calo )
+        MenuItem('L1_EM14'      ).setLogic( d.EM14       & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM15'      ).setLogic( d.EM15       & physcond).setTriggerType( TT.calo )
+        MenuItem('L1_EM16'      ).setLogic( d.EM16       & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM15_BGRP7').setLogic( d.EM15       & bgrp7cond).setTriggerType( TT.calo )
         MenuItem('L1_EM15I'     ).setLogic( d.EM15 & d.EM8I & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM15HI'    ).setLogic( d.EM15HI     & physcond).setTriggerType( TT.calo )
@@ -113,6 +115,7 @@ class ItemDef:
         MenuItem('L1_EM20C'     ).setLogic( d.EM20C      & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM15VHI'   ).setLogic( d.EM15VHI    & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM22VH'    ).setLogic( d.EM22VH     & physcond).setTriggerType( TT.calo )
+        MenuItem('L1_EM22'    ).setLogic( d.EM22     & physcond).setTriggerType( TT.calo )
 
         # Phase-I
         MenuItem('L1_eEM3'      ).setLogic( d.eEM3       & physcond).setTriggerType( TT.calo )
@@ -138,6 +141,7 @@ class ItemDef:
         # 2xEM, 3xEM
         MenuItem('L1_2EM3'           ).setLogic( d.EM3.x(2)             & physcond).setTriggerType( TT.calo )
         MenuItem('L1_2EM7'           ).setLogic( d.EM7.x(2)             & physcond).setTriggerType( TT.calo )
+        MenuItem('L1_2EM10'          ).setLogic( d.EM10.x(2)            & physcond).setTriggerType( TT.calo )
         MenuItem('L1_2EM10VH'        ).setLogic( d.EM10VH.x(2)          & physcond).setTriggerType( TT.calo )
         MenuItem('L1_2EM8I'          ).setLogic( d.EM8I.x(2)            & physcond).setTriggerType( TT.calo )
         MenuItem('L1_2EM13VH'        ).setLogic( d.EM13VH.x(2)          & physcond).setTriggerType( TT.calo )
@@ -146,6 +150,7 @@ class ItemDef:
         MenuItem('L1_2EM15'          ).setLogic( d.EM15.x(2)            & physcond).setTriggerType( TT.calo )
         MenuItem('L1_2EM15VH'        ).setLogic( d.EM15VH.x(2)          & physcond).setTriggerType( TT.calo )
         MenuItem('L1_2EM15VHI'       ).setLogic( d.EM15VHI.x(2)         & physcond).setTriggerType( TT.calo )
+        MenuItem('L1_2EM16'          ).setLogic( d.EM16.x(2)            & physcond).setTriggerType( TT.calo )
         MenuItem('L1_2EM20VH'        ).setLogic( d.EM20VH.x(2)          & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM7_2EM3'       ).setLogic( d.EM7 & d.EM3.x(2)       & physcond).setTriggerType( TT.calo )
         MenuItem('L1_EM12_2EM3'      ).setLogic( d.EM12 & d.EM3.x(2)      & physcond).setTriggerType( TT.calo )
@@ -608,7 +613,6 @@ class ItemDef:
         MenuItem('L1_J30p31ETA49_BGRP12').setLogic( d.J3031ETA49 & bgrp12cond ).setTriggerType(TT.calo)
 
         MenuItem('L1_J30_EMPTY'     ).setLogic( d.J30 & cosmiccond ).setTriggerType(TT.calo)
-        MenuItem('L1_J30_UNPAIRED'  ).setLogic( d.J30 & unpairedRcond ).setTriggerType(TT.calo)
         MenuItem('L1_J30_FIRSTEMPTY').setLogic( d.J30 & firstempty ).setTriggerType(TT.calo)
 
         MenuItem('L1_J10p31ETA49_EMPTY').setLogic( d.J1031ETA49 & cosmiccond ).setTriggerType(TT.calo)
@@ -724,11 +728,11 @@ class ItemDef:
         # phase1
         MenuItem('L1_gXERHO30').setLogic( d.gXERHO30 & physcond).setTriggerType(TT.calo)
         MenuItem('L1_gXERHO50').setLogic( d.gXERHO50 & physcond).setTriggerType(TT.calo)
-        MenuItem('L1_gXEPUFIT30').setLogic( d.gXEPUFIT30 & physcond).setTriggerType(TT.calo)
-        MenuItem('L1_gXEPUFIT50').setLogic( d.gXEPUFIT50 & physcond).setTriggerType(TT.calo)
-        MenuItem('L1_gXE30' ).setLogic( d.gXE30 & physcond).setTriggerType(TT.calo)
-        MenuItem('L1_gXE40' ).setLogic( d.gXE40 & physcond).setTriggerType(TT.calo)
-        MenuItem('L1_gXE50' ).setLogic( d.gXE50 & physcond).setTriggerType(TT.calo)
+        MenuItem('L1_gXENC30').setLogic( d.gXENC30 & physcond).setTriggerType(TT.calo)
+        MenuItem('L1_gXENC50').setLogic( d.gXENC50 & physcond).setTriggerType(TT.calo)
+        MenuItem('L1_gXEJWOJ30').setLogic( d.gXEJWOJ30 & physcond).setTriggerType(TT.calo)
+        MenuItem('L1_gXEJWOJ40').setLogic( d.gXEJWOJ40 & physcond).setTriggerType(TT.calo)
+        MenuItem('L1_gXEJWOJ50').setLogic( d.gXEJWOJ50 & physcond).setTriggerType(TT.calo)
         MenuItem('L1_jXE30' ).setLogic( d.jXE30 & physcond).setTriggerType(TT.calo)
         MenuItem('L1_jXE40' ).setLogic( d.jXE40 & physcond).setTriggerType(TT.calo)
         MenuItem('L1_jXE50' ).setLogic( d.jXE50 & physcond).setTriggerType(TT.calo)
@@ -1021,6 +1025,9 @@ class ItemDef:
         MenuItem('L1_VZDC_A_C_TE5_VTE200' ).setLogic( VZDC_A_C & d.TE5 & Not(d.TE200) & physcond).setTriggerType(TT.minb)
         MenuItem('L1_VZDC_A_C_TE20_VTE200').setLogic( VZDC_A_C & d.TE20 & Not(d.TE200) & physcond).setTriggerType(TT.minb)
         MenuItem('L1_VZDC_AORC_TE5_VTE200').setLogic( VZDC_AORC & d.TE5 & Not(d.TE200) & physcond).setTriggerType(TT.minb)
+        MenuItem('L1_VZDC_A_VZDC_C_TE5_VTE200').setLogic( Not(d.ZDC_A) & Not(d.ZDC_C) & d.TE5 & Not(d.TE200) & physcond).setTriggerType(TT.minb)
+        MenuItem('L1_TE20_ZDC_A_VZDC_C_VTE200').setLogic( d.ZDC_A & Not(d.ZDC_C) & d.TE20 & Not(d.TE200) & physcond).setTriggerType(TT.minb)
+        MenuItem('L1_TE20_ZDC_C_VZDC_A_VTE200').setLogic( d.ZDC_C & Not(d.ZDC_A) & d.TE20 & Not(d.TE200) & physcond).setTriggerType(TT.minb)
 
         MenuItem('L1_ZDC_MBTS_1'        ).setLogic((d.ZDC_A | d.ZDC_C) & MBTS_1 & physcond).setTriggerType(TT.minb)
         MenuItem('L1_ZDC_MBTS_2'        ).setLogic((d.ZDC_A | d.ZDC_C) & MBTS_2 & physcond).setTriggerType(TT.minb)
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/MonitorDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/MonitorDef.py
index a64f44dd0c212ae86bd6bf7cef5c7c230abe568c..7999a04a362008d14c27394be46aa73d29e196ef 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/MonitorDef.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/MonitorDef.py
@@ -129,9 +129,9 @@ class MonitorDef:
                 ]
         else:
             monItems[TBP|TAP|TAV] = [
-                "L1_EM3","L1_EM20VH","L1_EM22VHI", "L1_EM24VHI",
+                "L1_EM20VH", 
                 "L1_MU8F","L1_MU8VF","L1_MU14FCH", "L1_MU14FCHR",
-                "L1_J100", "L1_J75p31ETA49", "L1_4J15p0ETA25", "L1_J30p31ETA49",
+                "L1_J100", "L1_J75p31ETA49","L1_J30p31ETA49",
                 "L1_XE35", "L1_XE50",
                 #"L1_MBTS_4_A", "L1_MBTS_4_C", "L1_MBTS_1_A", "L1_MBTS_1_C", "L1_MBTS_1", "L1_MBTS_2", "L1_MBTS_1_1",
                 #"L1_ALFA_ANY", "L1_ALFA_B7L1U", "L1_ALFA_B7L1L", "L1_ALFA_A7L1U", "L1_ALFA_A7L1L", "L1_ALFA_A7R1U", "L1_ALFA_A7R1L", "L1_ALFA_B7R1U", "L1_ALFA_B7R1L",
@@ -139,9 +139,7 @@ class MonitorDef:
                 #"L1_BPTX0_BGRP0","L1_BPTX1_BGRP0",
                 "L1_CALREQ2",
                 "L1_TGC_BURST",
-                "L1_EM20VH_3J20", "L1_EM15VH_MU8F", 
-                "L1_MU8VF_2MU5VF", 
-                "L1_MU8F_2J15_J20", "L1_MU14FCH_XE30", "L1_J40_XE50", "L1_J25p0ETA23_2J15p31ETA49", "L1_J45p0ETA21_3J15p0ETA25", "L1_MU14FCH_J40",
+                "L1_MU8VF_2MU5VF",
                 ]
 
         monItemsHF[TBP|TAP|TAV] = [
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDef.py
index 57f3dcb003d0254c82fa332436deea8fc5b615db..6f84a0b2e85445d7bf4dd4d0fca4e72a8c00f619 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDef.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDef.py
@@ -216,13 +216,13 @@ class ThresholdDef:
 
         # gXE
         for thrV in [30, 50]:
-            XEThreshold('gXEPUFIT%i' % thrV, 'gXE').setXE(thrV)
+            XEThreshold('gXENC%i' % thrV, 'gXE').setXE(thrV)
 
         for thrV in [30, 50]:
             XEThreshold('gXERHO%i' % thrV, 'gXE').setXE(thrV)
 
         for thrV in [30, 40, 50]:
-            XEThreshold('gXE%i' % thrV, 'gXE').setXE(thrV)
+            XEThreshold('gXEJWOJ%i' % thrV, 'gXE').setXE(thrV)
 
         # gTE
         for thrV in [50]:
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefMultiplicity.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefMultiplicity.py
index ff11cff340157e240cc5ba9dcfdd0fd2de52b4c8..c0000bf3717d0d06b2b6b61f2ea4b828f5ff82ba 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefMultiplicity.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefMultiplicity.py
@@ -200,9 +200,9 @@ class TopoAlgoDefMultiplicity(object):
             tm.registerTopoAlgo(alg)
 
         XEThresholds = [ 
-            'gXE30', 'gXE40', 'gXE50',
+            'gXEJWOJ30', 'gXEJWOJ40', 'gXEJWOJ50',
             'gXERHO30', 'gXERHO50', 
-            'gXEPUFIT30', 'gXEPUFIT50',
+            'gXENC30', 'gXENC50',
 
             'jXE30', 'jXE40', 'jXE50', 'jXE55', 'jXE300',
 
@@ -215,10 +215,10 @@ class TopoAlgoDefMultiplicity(object):
             'jXESPARE1', 'jXESPARE2', 'jXESPARE3', 'jXESPARE4',
             'jXESPARE5', 'jXESPARE6', 'jXESPARE7', 'jXESPARE8', 'jXESPARE9',
             'jXESPARE10', 'jXESPARE11', 'jXESPARE12', 'jXESPARE13', 
-            #'jXESPARE14',
-            #'jXESPARE15', 'jXESPARE16', 'jXESPARE17', 'jXESPARE18', 'jXESPARE19',
-            #'jXESPARE20', 'jXESPARE21', 'jXESPARE22', 'jXESPARE23', 'jXESPARE24',
-            #'jXESPARE25', 'jXESPARE26', 'jXESPARE27', 'jXESPARE28', 'jXESPARE29',
+            'jXESPARE14',
+            'jXESPARE15', 'jXESPARE16', 'jXESPARE17', 'jXESPARE18', 'jXESPARE19',
+            'jXESPARE20', 'jXESPARE21', 'jXESPARE22', 'jXESPARE23', 'jXESPARE24',
+            'jXESPARE25', 'jXESPARE26', 'jXESPARE27', 'jXESPARE28', 'jXESPARE29',
 
         ]
 
@@ -255,7 +255,7 @@ class TopoAlgoDefMultiplicity(object):
            multLimits( thrtype='cTAU', conn='Topo1Opt3', nbit=3, startbit=14, endbit=19),
            multLimits( thrtype='cTAU', conn='Topo1Opt3', nbit=2, startbit=23, endbit=28),
            multLimits( thrtype='jEM',  conn='Topo1Opt3', nbit=2, startbit=31, endbit=36),
-           multLimits( thrtype='EN',   conn='Topo1Opt3', nbit=1, startbit=39, endbit=70),
+           multLimits( thrtype='EN',   conn='Topo1Opt3', nbit=1, startbit=39, endbit=86),
         ]
 
         for conn in l1menu.connectors:
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TypeWideThresholdConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TypeWideThresholdConfig.py
index 0165c1076e2452e96f7eafffd1ea56fc18e31677..12d777402c2c8de2c2b6a5e92ace62a859690dcb 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TypeWideThresholdConfig.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TypeWideThresholdConfig.py
@@ -332,18 +332,30 @@ def getConfig_jLJ():
 
 def getConfig_gJ():
     confObj = odict()
-    confObj["ptMinToTopoA"] = 15 # PLACEHOLDER
-    confObj["ptMinToTopoB"] = 15 # PLACEHOLDER
-    confObj["ptMinToTopoC"] = 15 # PLACEHOLDER
+    confObj["ptMinToTopo1"] = 0 
+    confObj["ptMinToTopo2"] = 0 
     confObj["resolutionMeV"] = 200
     return confObj
 
 def getConfig_gLJ():
     confObj = odict()
-    confObj["ptMinToTopoA"] = 15 # PLACEHOLDER
-    confObj["ptMinToTopoB"] = 15 # PLACEHOLDER
-    confObj["ptMinToTopoC"] = 15 # PLACEHOLDER
+    confObj["ptMinToTopo1"] = 6 
+    confObj["ptMinToTopo2"] = 6 
+    confObj["seedThrA"] = 3 
+    confObj["seedThrB"] = 3 
+    confObj["seedThrC"] = 3 
+    confObj["rhoTowerMinA"] = 0.25 
+    confObj["rhoTowerMinB"] = 0.25 
+    confObj["rhoTowerMinC"] = 0.25 
+    confObj["rhoTowerMaxA"] = -9.6 
+    confObj["rhoTowerMaxB"] = -9.6 
+    confObj["rhoTowerMaxC"] = -9.6 
     confObj["resolutionMeV"] = 200
+
+    # Check that all values are integers in MeV
+    for param in confObj:
+        if int(confObj[param]*1000) != (confObj[param]*1000):
+            raise RuntimeError("Param %s in gLJ configuration is not an integer in MeV! %d", param, confObj[param])
     return confObj
 
 def getConfig_jXE():
@@ -382,6 +394,24 @@ def getConfig_jTE():
 
 def getConfig_gXE():
     confObj = odict()
+    confObj["seedThrA"] = 1 
+    confObj["seedThrB"] = 1 
+    confObj["seedThrC"] = 1 
+    confObj["XERHO_sigmaPosA"] = 3 
+    confObj["XERHO_sigmaPosB"] = 3 
+    confObj["XERHO_sigmaPosC"] = 3 
+    confObj["XERHO_sigmaNegA"] = 8 
+    confObj["XERHO_sigmaNegB"] = 8 
+    confObj["XERHO_sigmaNegC"] = 8 
+    confObj["XEJWOJ_a_A"] = 48 
+    confObj["XEJWOJ_a_B"] = 48 
+    confObj["XEJWOJ_a_C"] = 48 
+    confObj["XEJWOJ_b_A"] = 52 
+    confObj["XEJWOJ_b_B"] = 52 
+    confObj["XEJWOJ_b_C"] = 52 
+    confObj["XEJWOJ_c_A"] = 0 
+    confObj["XEJWOJ_c_B"] = 0 
+    confObj["XEJWOJ_c_C"] = 0 
     confObj["resolutionMeV"] = 200
     return confObj
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/L1MenuConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/L1MenuConfig.py
index 26ca9eb8d9d92f6bbe7ac8f18a1082a0412b4828..ee96ef0d5c0df07d5d09c6eadf19c64f815e3b45 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/L1MenuConfig.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/L1MenuConfig.py
@@ -126,7 +126,7 @@ class L1MenuConfig(object):
         if algo.name in self._registeredTopoAlgos[self.currentAlgoDef]:
             raise RuntimeError('%s algo %s is already registered as such' % (self.currentAlgoDef.desc, algo.name))
         self._registeredTopoAlgos[self.currentAlgoDef][algo.name] = algo
-        log.debug("Added in the %s type the algo: %s ID:%s", self.currentAlgoDef.desc, algo.name)
+        log.debug("Added in the %s type the algo: %s", self.currentAlgoDef.desc, algo.name)
 
         return algo
 
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py
index 0d9368b42e9deabb7a310ee0970bf12a10ad8ee5..daa917d25266d69d8b3bbe5e460b34329fbeedc4 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py
@@ -29,8 +29,8 @@ menuMap = {
     "Cosmic_run3_v1"       : ["Physics_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"],
 
     #HI
-    "Physics_HI_v4"        : ["MC_HI_v1","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"],
-    "MC_HI_v4"             : ["MC_HI_v1","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"],
-    "PhysicsP1_HI_run3_v1" : ["MC_HI_v1","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"],
-    "Dev_HI_run3_v1"       : ["MC_HI_v1","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"],
+    "Physics_HI_v4"        : ["MC_HI_v1","MC_pp_v8_inputs","MC_HI_v1_inputs_legacy"],
+    "MC_HI_v4"             : ["MC_HI_v1","MC_pp_v8_inputs","MC_HI_v1_inputs_legacy"],
+    "PhysicsP1_HI_run3_v1" : ["MC_HI_v1","MC_pp_v8_inputs","MC_HI_v1_inputs_legacy"],
+    "Dev_HI_run3_v1"       : ["MC_HI_v1","MC_pp_v8_inputs","MC_HI_v1_inputs_legacy"],
 }
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_HI_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_HI_v1.py
index 16cfb5b5fcb8ed2bd1647414febd1d72286c7880..2b0b6e100b594293be26d16f0939fce7e7c27ab4 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_HI_v1.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_HI_v1.py
@@ -37,9 +37,8 @@ def defineMenu():
         ##
         # single EM
         ##
-        'L1_EM3','L1_EM7','L1_EM12', 'L1_EM8VH', 'L1_EM10VH', 'L1_EM15', 'L1_EM15VH', 'L1_EM15VHI', 'L1_EM18VHI',
-        'L1_EM20VH', 'L1_EM20VHI', 'L1_EM22VH', 'L1_EM22VHI', 'L1_EM24VHI', 
-        'L1_EM3_EMPTY', 'L1_EM7_EMPTY', 'L1_EM7_UNPAIRED_ISO', 'L1_EM7_FIRSTEMPTY',
+        'L1_EM7', 'L1_EM8VH', 'L1_EM10', 'L1_EM10VH', 'L1_EM12', 'L1_EM14', 'L1_EM15', 'L1_EM16', 'L1_EM18VH', 'L1_EM20VH', 'L1_EM20VHI', 'L1_EM22',
+        'L1_EM7_EMPTY', 'L1_EM7_UNPAIRED_ISO', 'L1_EM7_FIRSTEMPTY',
         'L1_EM20VH_FIRSTEMPTY',
         # new calo
         'L1_eEM3', 'L1_eEM7', 'L1_eEM15', 'L1_eEM12',
@@ -61,26 +60,14 @@ def defineMenu():
         ##
         # combined lepton (e and mu)
         ##
-        'L1_2EM3', 'L1_2EM7', 'L1_2EM15', 'L1_2EM15VH', 'L1_2EM15VHI',
-        'L1_2EM20VH', 'L1_EM20VH_3EM10VH',
-        'L1_EM7_MU8F', 'L1_2EM8VH_MU8F', 'L1_EM15VH_MU8F', 'L1_EM7_MU14FCH',
-
-        # combined em - jet
-        'L1_EM18VHI_3J20',
-        'L1_EM20VH_3J20',
+        'L1_2EM7', 'L1_2EM10', 'L1_2EM15', 'L1_2EM16',
         
         # combined mu - jet
-        'L1_MU3V_J15', 
+        'L1_MU3V_J12','L1_MU3V_J15', 
 
-        #ATR-13743 
-        'L1_MU8F_2J20','L1_MU8F_3J20', 'L1_MU8F_2J15_J20',
-        'L1_MU14FCH_J40',
-        'L1_MU14FCH_XE30',
-        'L1_MU14FCH_J50',
 
         # single jet
-        'L1_J15','L1_J20','L1_J25', 'L1_J30', 'L1_J40', 'L1_J50' ,'L1_J75','L1_J85', 'L1_J100', 'L1_J400',
-        'L1_J400_LAR',
+        'L1_J12','L1_J15','L1_J20','L1_J25', 'L1_J30', 'L1_J40', 'L1_J50' ,'L1_J75','L1_J85', 'L1_J100',
         'L1_J20p31ETA49', 'L1_J30p31ETA49', 'L1_J50p31ETA49', 'L1_J75p31ETA49', 'L1_J15p31ETA49',
         'L1_J12_EMPTY','L1_J12_FIRSTEMPTY', 'L1_J12_UNPAIRED_ISO', 'L1_J12_UNPAIRED_NONISO', 'L1_J12_ABORTGAPNOTCALIB',
         'L1_J15p31ETA49_UNPAIRED_ISO',
@@ -88,34 +75,33 @@ def defineMenu():
         'L1_J50_UNPAIRED_ISO', 'L1_J50_UNPAIRED_NONISO', 'L1_J50_ABORTGAPNOTCALIB',         
         'L1_J100_FIRSTEMPTY',
         'L1_J12_BGRP12',
-
-       
-        # multi jet
-        'L1_J45p0ETA21_3J15p0ETA25',
-        'L1_J50_2J40p0ETA25_3J15p0ETA25',
-        'L1_3J50', 'L1_4J15', 'L1_4J20',
-        'L1_3J15p0ETA25_XE40',
-        'L1_6J15',
-        'L1_J85_3J30', 
-
-        # multi jet forward
-        'L1_J25p0ETA23_2J15p31ETA49',
-        'L1_J40p0ETA25_2J15p31ETA49',
-        'L1_J40p0ETA25_2J25_J20p31ETA49',
-        
-        # multi jet central
-        'L1_3J25p0ETA23',
-        'L1_3J35p0ETA23',
-        'L1_4J15p0ETA25',
-        'L1_5J15p0ETA25', 
-
-        # combined jet
-        'L1_2J15_XE55', 'L1_J40_XE50',
-        'L1_2J50_XE40', 'L1_J40_XE60',
         
         # XE
         'L1_XE35', 'L1_XE40', 'L1_XE45', 'L1_XE50', 
         'L1_XE55', 'L1_XE60', 'L1_XE30', 'L1_XE300',
+        
+         # calo
+        'L1_TE20','L1_VTE20','L1_TE50','L1_TE600p0ETA49','L1_TE50_VTE600p0ETA49','L1_TE12000',
+        
+         # new calo
+        'L1_gTE50',
+        #UPC - MU
+        'L1_MU3V_VTE50',
+        
+        #UPC - EM
+        'L1_TAU1_TE4_VTE200', 'L1_2TAU1_VTE50',
+        
+        #UPC - new EM
+        #'L1_eEM1_TE4_VgTE200', 'L1_2eEM1_VgTE50'
+        
+        #UPC - calo, MBTS, calo  
+        'L1_ZDC_XOR_VTE200', 'L1_VZDC_A_VZDC_C_TE5_VTE200',
+        'L1_ZDC_A_VZDC_C_VTE200', 'L1_ZDC_C_VZDC_A_VTE200',
+        'L1_MBTS_1_ZDC_A_VZDC_C_VTE200', 'L1_MBTS_1_ZDC_C_VZDC_A_VTE200',
+        'L1_TE3p0ETA49_ZDC_A_VZDC_C_VTE200', 'L1_TE3p0ETA49_ZDC_C_VZDC_A_VTE200', 'L1_TE5_ZDC_A_VZDC_C_VTE200','L1_TE5_ZDC_C_VZDC_A_VTE200','L1_TE20_ZDC_A_VZDC_C_VTE200', 'L1_TE20_ZDC_C_VZDC_A_VTE200', 
+        
+        
+
                 
         # RNDM
         'L1_RD0_FILLED', 'L1_RD0_UNPAIRED_ISO',  'L1_RD0_EMPTY', 'L1_RD0_ABORTGAPNOTCALIB',
@@ -129,7 +115,11 @@ def defineMenu():
         #LUCID
 
         # ZDC
-
+        'L1_ZDC_A','L1_ZDC_C','L1_ZDC_A_C',
+        
+        # ZDC and calo
+        'L1_ZDC_A_C_VTE50',
+        
         # VDM
 
         # TRT
@@ -150,11 +140,13 @@ def defineMenu():
         # BPTX
         
         # BCM
-        'L1_BCM_AC_CA_BGRP0', 'L1_BCM_Wide_EMPTY','L1_BCM_Wide_UNPAIRED_ISO','L1_BCM_Wide_UNPAIRED_NONISO',
-        'L1_BCM_AC_UNPAIRED_ISO','L1_BCM_CA_UNPAIRED_ISO',
-        'L1_BCM_AC_UNPAIRED_NONISO','L1_BCM_CA_UNPAIRED_NONISO',
-        'L1_BCM_AC_ABORTGAPNOTCALIB', 'L1_BCM_CA_ABORTGAPNOTCALIB','L1_BCM_Wide_ABORTGAPNOTCALIB',
+        'L1_BCM_AC_CA_BGRP0', 'L1_BCM_Wide_EMPTY', 'L1_BCM_Wide_UNPAIRED_ISO', 'L1_BCM_Wide_UNPAIRED_NONISO',
+        'L1_BCM_AC_UNPAIRED_ISO', 'L1_BCM_CA_UNPAIRED_ISO',
+        'L1_BCM_AC_UNPAIRED_NONISO', 'L1_BCM_CA_UNPAIRED_NONISO',
+        'L1_BCM_AC_ABORTGAPNOTCALIB', 'L1_BCM_CA_ABORTGAPNOTCALIB', 'L1_BCM_Wide_ABORTGAPNOTCALIB',
         'L1_BCM_AC_CALIB', 'L1_BCM_CA_CALIB','L1_BCM_Wide_CALIB',
+        'L1_BCM_AC_UNPAIREDB1', 'L1_BCM_CA_UNPAIREDB2',
+        'L1_J12_UNPAIREDB1', 'L1_J12_UNPAIREDB2',
 
         # AFP
 
@@ -167,9 +159,7 @@ def defineMenu():
 
         'L1_LAR-ZEE', 'L1_LAR-ZEE-eEM',
 
-
-
-                
+               
         #ATR-17320
         'L1_CEP-CjJ60',
         'L1_CEP-CjJ50' ,
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_HI_v1_inputs_legacy.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_HI_v1_inputs_legacy.py
new file mode 100644
index 0000000000000000000000000000000000000000..0ede27d3aa50f894c18e6e65d4984b959ac2312d
--- /dev/null
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_HI_v1_inputs_legacy.py
@@ -0,0 +1,325 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+from collections import OrderedDict as odict
+
+from ..Base.L1MenuFlags import L1MenuFlags
+from ..Base.MenuConfObj import TopoMenuDef
+from ..Config.LegacyTopoMergerMap import createMergerBoard
+
+def defineLegacyInputsMenu():
+
+    legacyBoards = odict()
+    legacyTopoBoards = odict()
+
+    #----------------------------------------
+    # SLOT 7 / CON 0-3 (EM1, EM2, TAU1, TAU2)
+    # https://twiki.cern.ch/twiki/bin/view/Atlas/LevelOneCentralTriggerSetup#CTPIN_Slot_7
+    #----------------------------------------
+    legacyBoards["Ctpin7"] = odict()
+    legacyBoards["Ctpin7"]["legacy"] = True
+    legacyBoards["Ctpin7"]["connectors"] = []
+    legacyBoards["Ctpin7"]["connectors"] += [
+        {
+            "name" : "EM1",
+            "format" : "multiplicity",
+            "nbitsDefault" : 3,
+            "type" : "ctpin",
+            "legacy" : True,
+            "thresholds" : [ 'EM7', 'EM8VH', 'EM8I', 'EM10', 'EM10VH', 'EM12', 'EM14', 'EM15' ],
+            "zeroBias" : "ZB_EM15"
+        },
+        {
+            "name" : "EM2",
+            "format" : "multiplicity",
+            "nbitsDefault" : 3,
+            "type" : "ctpin",
+            "legacy" : True,
+            "thresholds" : [ 'EM15HI', 'EM16', 'EM18VH', 'EM18VHI', 'EM20', 'EM20VH', 'EM20VHI', 'EM22' ]
+        },
+        {
+            "name" : "TAU1",
+            "format" : "multiplicity",
+            "nbitsDefault" : 3,
+            "type" : "ctpin",
+            "legacy" : True,
+            "thresholds" : [ 'HA1', 'HA2', 'HA3', 'HA8', 'HA12', 'HA12IL', 'HA12IM', 'HA12IT' ]
+        },
+        
+        {
+            "name" : "TAU2",
+            "format" : "multiplicity",
+            "nbitsDefault" : 3,
+            "type" : "ctpin",
+            "legacy" : True,
+            "thresholds" : [ 'HA15', 'HA20', 'HA20IL',  'HA20IM', 'HA20IT', 'HA25IT', 'HA30', 'HA60' ]
+        }
+    ]
+
+
+    #--------------------------------------
+    # SLOT 8 / CON 0 (JET1, JET2, EN1, EN2)
+    # https://twiki.cern.ch/twiki/bin/view/Atlas/LevelOneCentralTriggerSetup#CTPIN_Slot_8
+    #--------------------------------------
+    legacyBoards["Ctpin8"] = odict()
+    legacyBoards["Ctpin8"]["legacy"] = True
+    legacyBoards["Ctpin8"]["connectors"] = []
+    legacyBoards["Ctpin8"]["connectors"] += [
+        {
+            # 10 x 3-bit JET (can have multiplicity 4 or more)
+            "name" : "JET1",
+            "format" : "multiplicity",
+            "nbitsDefault" : 3,
+            "type" : "ctpin",
+            "legacy" : True,
+            "thresholds" : [
+                # 8 x JETs and central jets
+                'J12', 'J12p0ETA25', 'J15', 'J15p0ETA25','J20', 'J25','J25p0ETA23','J30',        
+                # 2 x VBF
+                'J20p0ETA49', 'J30p0ETA49',
+            ]
+        },
+        {
+            # 15 x 2-bit JET (can have maximum multiplicity of 3) (SLOT 8, CON 1)
+            "name" : "JET2",
+            "format" : "multiplicity",
+            "nbitsDefault" : 2,
+            "type" : "ctpin",
+            "legacy" : True,
+            "thresholds" : [
+                # 3 x Central Jet
+                'JJ15p23ETA49','J20p28ETA31','J40p0ETA25', 
+                # 6 Jets
+                'J40', 'J50', 'J75', 'J85', 'J100', 'J400',
+                # 6 x FJ              
+                'J15p31ETA49', 'J20p31ETA49', 'J30p31ETA49', 'J50p31ETA49', 'J75p31ETA49', 'J100p31ETA49',
+            ]
+        },
+        {
+            # 24 x 1-bit thresholds
+            "name" : "EN1",
+            "format" : "multiplicity",
+            "nbitsDefault" : 1,
+            "type" : "ctpin",
+            "legacy" : True,
+            "thresholds" : [
+                'TE4', 'TE5', 'TE20', 'TE50', 'TE100', 'TE200', 'TE10000', 'TE12000', # 8 x TE
+                'XE10', 'XE20', 'XE25', 'XE30', 'XE35', 'XE40', 'XE45', 'XE50', # 8 x XE
+                'XE55', 'XE60', 'XE65', 'XE70', 'XE75', 'XE80', 'XE150', 'XE300', # 8 x XE
+                'XS20', 'XS30', 'XS40', 'XS45', 'XS50', 'XS55', 'XS60', 'XS65',  # 8 x XS
+            ]
+        },
+        {
+            # 8 x 1-bit thresholds
+            "name" : "EN2",
+            "format" : "multiplicity",
+            "nbitsDefault" : 1,
+            "type" : "ctpin",
+            "legacy" : True,
+            "thresholds" : [
+                # 8 x restricted eta range in |eta|<4.9
+                'TE3p0ETA49','TE7p0ETA49','TE600p0ETA49', 'TE1500p0ETA49',
+                'TE3000p0ETA49', 'TE3500p0ETA49', 'TE6500p0ETA49', 'TE8000p0ETA49',
+            ]
+        }
+    ]
+
+
+    #----------------
+    # Legacy L1TOPO 0  
+    #----------------
+    legacyTopoBoards["LegacyTopo0"] = odict()
+    legacyTopoBoards["LegacyTopo0"]["legacy"] = True
+    legacyTopoBoards["LegacyTopo0"]["connectors"] = [
+        {
+            "name" : "LegacyTopo0",
+            "format" : "topological",
+            "type" : "electrical",
+            "legacy" : True,
+            "algorithmGroups" : [
+                {
+                    "fpga" : 0,
+                    "clock" : 0,
+                    "algorithms" : [
+                        TopoMenuDef( "INVM_AJ_HighMass",     outputbits = (0,3), outputlines = [ "900INVM9999-AJ30s6-AJ20s6",
+                                                                                                 "800INVM9999-AJ30s6-AJ20s6",
+                                                                                                 "700INVM9999-AJ30s6-AJ20s6",
+                                                                                                 "500INVM9999-AJ30s6-AJ20s6" ] ),
+                        TopoMenuDef( "INVM_AJ_LowMass",      outputbits = (4,7), outputlines = [ "400INVM9999-AJ30s6-AJ20s6",
+                                                                                                 "300INVM9999-AJ30s6-AJ20s6",
+                                                                                                 "200INVM9999-AJ30s6-AJ20s6",
+                                                                                                 "100INVM9999-AJ30s6-AJ20s6" ] ),
+                        TopoMenuDef( "0INVM9-EM7ab-EMab",    outputbits = 8 ),
+                        TopoMenuDef( "HT150-J20s5pETA31",    outputbits = 9 ),
+                        TopoMenuDef( "HT190-J15s5pETA21",    outputbits = 10 ),
+                        TopoMenuDef( "INVM_EMs6",            outputbits = (11,13), outputlines = [ "1INVM5-EMs1-EMs6",
+                                                                                                   "1INVM5-EM7s1-EMs6",
+                                                                                                   "1INVM5-EM12s1-EMs6" ] ),
+                        TopoMenuDef( "05MINDPHI-EM12s6-XE0", outputbits = 14 ),
+                        TopoMenuDef( "400INVM9999-AJ30s6pETA31-AJ20s6p31ETA49", outputbits = 15 ),
+                    ]
+                },
+                {
+                    "fpga" : 0,
+                    "clock" : 1,
+                    "algorithms" : [
+                        TopoMenuDef( "05MINDPHI-EM15s6-XE0",              outputbits = 0 ),
+                        TopoMenuDef( "25MT-EM12s6-XE0",                   outputbits = 1 ),
+                        TopoMenuDef( "ZEE-EM20shi2",                      outputbits = 2 ),
+                        TopoMenuDef( "35MT-EM15s6-XE0",                   outputbits = 3 ),
+                        TopoMenuDef( "0DR03-EM7ab-CJ15ab",                outputbits = 4 ),
+                        TopoMenuDef( "10MINDPHI-J20s2-XE30",              outputbits = 5 ),
+                        TopoMenuDef( "10MINDPHI-J20s2-XE50",              outputbits = 6 ),
+                        TopoMenuDef( "100RATIO-0MATCH-TAU30si2-EMall",    outputbits = 7 ),
+                        TopoMenuDef( "NOT-0MATCH-TAU30si1-EMall",         outputbits = 8 ),
+                        TopoMenuDef( "LAR-EM20shi1",                      outputbits = 9 ),
+                        TopoMenuDef( "LAR-J100s1",                        outputbits = 10 ),
+                        TopoMenuDef( "NOT-02MATCH-EM10s1-AJj15allpETA49", outputbits = 11 ),
+                        TopoMenuDef( "27DPHI32-EMs1-EMs6",                outputbits = 12 ),
+                        TopoMenuDef( "35MT-EM12s6-XE0",                   outputbits = 13 ),
+                        TopoMenuDef( "15MINDPHI-EM12s6-XE0",              outputbits = 14 ),
+                        TopoMenuDef( "15MINDPHI-EM15s6-XE0",              outputbits = 15 ),
+                    ]
+                },
+                {
+                    "fpga" : 1,
+                    "clock" : 0,
+                    "algorithms" : [
+                        TopoMenuDef( "1DISAMB-EM15his2-TAU12abi-J25ab",       outputbits = 2 ),
+                        TopoMenuDef( "1DISAMB-J25ab-0DR28-EM15his2-TAU12abi", outputbits = 3 ),
+                        TopoMenuDef( "2INVM9-2MU6ab",                         outputbits = 4 ),
+                        TopoMenuDef( "2INVM8-ONEBARREL-MU6ab-MU4ab",          outputbits = 6 ),
+                        TopoMenuDef( "5DETA99-5DPHI99-MU6ab-MU4ab",           outputbits = 8 ),
+                        TopoMenuDef( "5DETA99-5DPHI99-2MU6ab",                outputbits = 9 ),
+                        TopoMenuDef( "1DISAMB-TAU20abi-TAU12abi-J25ab",       outputbits = 10 ),
+                        TopoMenuDef( "0DR28-MU10ab-TAU12abi",                 outputbits = 11 ),
+                        TopoMenuDef( "0DETA20-0DPHI20-TAU20abi-TAU12abi",     outputbits = 12 ),
+                        TopoMenuDef( "DISAMB-0DR28-EM15his2-TAU12abi",        outputbits = 15 ),
+                    ]
+                },
+                {
+                    "fpga" : 1,
+                    "clock" : 1,
+                    "algorithms" : [
+                        TopoMenuDef( "DISAMB-30INVM-EM20his2-TAU12ab", outputbits = 0 ),
+                        TopoMenuDef( "0DR22-2MU6ab",                   outputbits = 4 ),
+                        TopoMenuDef( "7INVM15-2MU4ab",                 outputbits = 5 ),
+                        TopoMenuDef( "0DR22-MU6ab-MU4ab",              outputbits = 6 ),
+                        TopoMenuDef( "0DR15-2MU4ab",                   outputbits = 7 ),
+                        TopoMenuDef( "0DR24-2MU4ab",                   outputbits = 8 ),
+                        TopoMenuDef( "0DR15-2MU6ab",                   outputbits = 9 ),
+                        TopoMenuDef( "2INVM9-2MU4ab",                  outputbits = 10 ),
+                        TopoMenuDef( "2INVM9-MU6ab-MU4ab",             outputbits = 11 ),
+                        TopoMenuDef( "INVM_NFF",                       outputbits = (12,15), outputlines = [ "600INVM9999-J30s6-AJ20s6", 
+                                                                                                             "500INVM9999-J30s6-AJ20s6",
+                                                                                                             "400INVM9999-J30s6-AJ20s6",
+                                                                                                             "200INVM9999-J30s6-AJ20s6" ])
+                    ]
+                }
+            ]
+        }
+    ]
+
+    legacyTopoBoards["LegacyTopo1"] = odict()
+    legacyTopoBoards["LegacyTopo1"]["legacy"] = True
+    legacyTopoBoards["LegacyTopo1"]["connectors"] = [
+        {
+            "name" : "LegacyTopo1",
+            "format" : "topological",
+            "type" : "electrical",
+            "legacy" : True,
+            "algorithmGroups" : [
+                {
+                    "fpga" : 0,
+                    "clock" : 0,
+                    "algorithms" : [
+                        TopoMenuDef( "05MINDPHI-AJj10s6-XE0", outputbits = 0  ),
+                        TopoMenuDef( "10MINDPHI-AJj10s6-XE0", outputbits = 1  ),
+                        TopoMenuDef( "15MINDPHI-AJj10s6-XE0", outputbits = 2  ),
+                        TopoMenuDef( "0DR04-MU4ab-CJ15ab",    outputbits = 3  ),
+                        TopoMenuDef( "0DR04-MU4ab-CJ20ab",    outputbits = 4  ),
+                        TopoMenuDef( "0DR04-MU4ab-CJ30ab",    outputbits = 5  ),
+                        TopoMenuDef( "0DR04-MU6ab-CJ20ab",    outputbits = 6  ),
+                        TopoMenuDef( "0DR04-MU6ab-CJ25ab",    outputbits = 7  ),
+                        TopoMenuDef( "10MINDPHI-CJ20ab-XE50", outputbits = 8  ),
+                        TopoMenuDef( "0DR24-2CMU4ab",         outputbits = 9  ),
+                        TopoMenuDef( "FTK-J100s1",            outputbits = 10  ),
+                        TopoMenuDef( "MULT-CMU4ab",           outputbits = (11,12), outputlines = [ "MULT-CMU4ab[0]",
+                                                                                                    "MULT-CMU4ab[1]" ] ),
+                        TopoMenuDef( "MULT-CMU6ab",           outputbits = (13,14), outputlines  = [ "MULT-CMU6ab[0]",
+                                                                                                     "MULT-CMU6ab[1]" ] ),
+                        TopoMenuDef( "FTK-MU10s1",            outputbits = 15  ),
+                    ]
+                },
+                {
+                    "fpga" : 0,
+                    "clock" : 1,
+                    "algorithms" : [
+                        TopoMenuDef( "0DETA04-EM8abi-MU10ab", outputbits = 3  ),
+                        TopoMenuDef( "0DETA04-EM15abi-MUab",  outputbits = 4  ),
+                        TopoMenuDef( "0DR24-CMU4ab-MU4ab",    outputbits = 5  ),
+                        TopoMenuDef( "0DPHI03-EM8abi-MU10ab", outputbits = 6  ),
+                        TopoMenuDef( "2INVM8-CMU4ab-MU4ab",   outputbits = 7  ),
+                        TopoMenuDef( "0DPHI03-EM15abi-MUab",  outputbits = 8  ),
+                        TopoMenuDef( "10MINDPHI-AJ20s2-XE50", outputbits = 9  ),
+                        TopoMenuDef( "LATE-MU10s1",           outputbits = 10 ),
+                        TopoMenuDef( "SC111-CJ15abpETA26",    outputbits = 11 ),
+                        TopoMenuDef( "SC85-CJ15abpETA26",     outputbits = 12 ),
+                        TopoMenuDef( "FTK-EM20s1",            outputbits = 13 ),
+                    ]
+                },
+                {
+                    "fpga" : 1,
+                    "clock" : 0,
+                    "algorithms" : [
+                        TopoMenuDef( "KF-XE-AJall",                     outputbits = (0,5),outputlines = [ "KF-XE40-AJall",
+                                                                                                           "KF-XE50-AJall", 
+                                                                                                           "KF-XE55-AJall",
+                                                                                                           "KF-XE60-AJall",
+                                                                                                           "KF-XE65-AJall",
+                                                                                                           "KF-XE75-AJall" ] ),
+                        TopoMenuDef( "0MATCH-4AJ20pETA31-4AJj15pETA31", outputbits = 6  ),
+                        TopoMenuDef( "HT190-AJ15allpETA21",             outputbits = 7  ),
+                        TopoMenuDef( "HT150-AJ20allpETA31",             outputbits = 8  ),
+                        TopoMenuDef( "HT150-AJj15allpETA49",            outputbits = 9  ),
+                        TopoMenuDef( "HT20-AJj15allpETA49",             outputbits = 10 ),
+                        TopoMenuDef( "0DETA20-J50s1-Js2",               outputbits = 12 ),
+                        TopoMenuDef( "05RATIO-XE0-HT0-AJj15allpETA49",  outputbits = 13 ),
+                        TopoMenuDef( "63DETA127-FJ20s1-FJ20s2",         outputbits = 14 ),
+                        TopoMenuDef( "90RATIO2-XE0-HT0-AJj15allpETA49", outputbits = 15 )
+                    ]
+                },
+                {
+                    "fpga" : 1,
+                    "clock" : 1,
+                    "algorithms" : [
+                        TopoMenuDef( "250RATIO2-XE0-HT0-AJj15allpETA49",      outputbits = 0 ),
+                        TopoMenuDef( "10MINDPHI-J20ab-XE50",                  outputbits = 1 ),
+                        TopoMenuDef( "0DR28-TAU20abi-TAU12abi",               outputbits = 2 ),
+                        TopoMenuDef( "1DISAMB-J25ab-0DR28-TAU20abi-TAU12abi", outputbits = 3 ),
+                        TopoMenuDef( "1DISAMB-TAU12abi-J25ab",                outputbits = 4 ),
+                        TopoMenuDef( "0DR10-MU10ab-MU6ab",                    outputbits = 5 ),
+                        TopoMenuDef( "2DR99-2MU4ab",                          outputbits = 6 ),
+                        TopoMenuDef( "0DR34-2MU4ab",                          outputbits = 7 ),
+                        TopoMenuDef( "2DR15-2MU6ab",                          outputbits = 8 ),
+                        TopoMenuDef( "0DR15-MU6ab-MU4ab",                     outputbits = 9 ),
+                        TopoMenuDef( "0DR25-TAU20abi-TAU12abi",               outputbits = 10 ),
+                        TopoMenuDef( "1DISAMB-J25ab-0DR25-TAU20abi-TAU12abi", outputbits = 11 ),
+                        TopoMenuDef( "8INVM15-MU6ab-MU4ab",                   outputbits = 12 ),
+                        TopoMenuDef( "8INVM15-2MU6ab",                        outputbits = 13 ),
+                        TopoMenuDef( "2INVM8-2MU4ab",                         outputbits = 14 ),
+                        TopoMenuDef( "2INVM8-MU6ab-MU4ab",                    outputbits = 15 ),
+                    ]
+                }
+            ]
+        }
+    ]
+
+
+    L1MenuFlags.legacyBoards().clear()
+
+    L1MenuFlags.legacyBoards().update( legacyBoards )  # EM1/2, TAU1/2, JET1/2, EN1/2
+
+    L1MenuFlags.legacyBoards().update( legacyTopoBoards) # LegacyTopo0/1
+
+    L1MenuFlags.legacyBoards().update( createMergerBoard( legacyTopoBoards["LegacyTopo0"], legacyTopoBoards["LegacyTopo1"] ) )
+
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8.py
index ca6ccea66ec6c4fe9bd8c2a4211b90b16dd6a926..8f4823129a08864fc45725b1b53e727a21a8adea 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8.py
@@ -185,8 +185,8 @@ def defineMenu():
         'L1_XE55', 'L1_XE60', 'L1_XE30', 'L1_XE300',
         # new calo
         'L1_gXERHO30', 'L1_gXERHO50',
-        'L1_gXEPUFIT30', 'L1_gXEPUFIT50',
-        'L1_gXE30', 'L1_gXE40', 'L1_gXE50',
+        'L1_gXENC30', 'L1_gXENC50',
+        'L1_gXEJWOJ30', 'L1_gXEJWOJ40', 'L1_gXEJWOJ50',
         'L1_gTE50',
 
         'L1_jXE30', 'L1_jXE40', 'L1_jXE50', 'L1_jXE55', 'L1_jXE300', 
@@ -229,11 +229,13 @@ def defineMenu():
         #'L1_BPTX0_BGRP0','L1_BPTX1_BGRP0',
 
         # BCM
-        'L1_BCM_Wide_BGRP0', 'L1_BCM_AC_CA_BGRP0', 'L1_BCM_Wide_EMPTY','L1_BCM_Wide_UNPAIRED_ISO','L1_BCM_Wide_UNPAIRED_NONISO',
+        'L1_BCM_Wide_BGRP0', 'L1_BCM_AC_CA_BGRP0', 'L1_BCM_Wide_EMPTY', 'L1_BCM_Wide_UNPAIRED_ISO', 'L1_BCM_Wide_UNPAIRED_NONISO',
         'L1_BCM_AC_UNPAIRED_ISO','L1_BCM_CA_UNPAIRED_ISO',
         'L1_BCM_AC_UNPAIRED_NONISO','L1_BCM_CA_UNPAIRED_NONISO',
         'L1_BCM_AC_ABORTGAPNOTCALIB', 'L1_BCM_CA_ABORTGAPNOTCALIB','L1_BCM_Wide_ABORTGAPNOTCALIB',
         'L1_BCM_AC_CALIB', 'L1_BCM_CA_CALIB','L1_BCM_Wide_CALIB',
+        'L1_BCM_AC_UNPAIREDB1', 'L1_BCM_CA_UNPAIREDB2',
+        'L1_J12_UNPAIREDB1', 'L1_J12_UNPAIREDB2',
 
         # AFP
         # high-priority (all mu)
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8_inputs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8_inputs.py
index d460484a1a060d62d6ab659b6cbc8918eaa01646..95f82d8a52171139cd4abf67889f0e7cba12249c 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8_inputs.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_MC_pp_v8_inputs.py
@@ -218,8 +218,8 @@ def defineInputsMenu():
             ('jXE30',1), ('jXE40',1), ('jXE50',1), ('jXE55',1), ('jXE300',1),
             # gXE
             ('gXERHO30',1), ('gXERHO50',1),
-            ('gXEPUFIT30',1), ('gXEPUFIT50',1),
-            ('gXE30',1), ('gXE40',1), ('gXE50',1),
+            ('gXENC30',1), ('gXENC50',1),
+            ('gXEJWOJ30',1), ('gXEJWOJ40',1), ('gXEJWOJ50',1),
             # gTE
             ('gTE50',1),
 
@@ -232,10 +232,10 @@ def defineInputsMenu():
 
             # production
             ('jXESPARE10',1), ('jXESPARE11',1), ('jXESPARE12',1), ('jXESPARE13',1), 
-            #('jXESPARE14',1),
-            #('jXESPARE15',1), ('jXESPARE16',1), ('jXESPARE17',1), ('jXESPARE18',1), ('jXESPARE19',1),
-            #('jXESPARE20',1), ('jXESPARE21',1), ('jXESPARE22',1), ('jXESPARE23',1), ('jXESPARE24',1),
-            #('jXESPARE25',1), ('jXESPARE26',1), ('jXESPARE27',1), ('jXESPARE28',1), ('jXESPARE29',1), 
+            ('jXESPARE14',1),
+            ('jXESPARE15',1), ('jXESPARE16',1), ('jXESPARE17',1), ('jXESPARE18',1), ('jXESPARE19',1),
+            ('jXESPARE20',1), ('jXESPARE21',1), ('jXESPARE22',1), ('jXESPARE23',1), ('jXESPARE24',1),
+            ('jXESPARE25',1), ('jXESPARE26',1), ('jXESPARE27',1), ('jXESPARE28',1), ('jXESPARE29',1), 
 
             # Performance thresholds, should not go in physics menu!
             ('jXEPerf50',1),
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/TriggerAPI/TriggerDataAccess.py b/Trigger/TriggerCommon/TriggerMenuMT/python/TriggerAPI/TriggerDataAccess.py
index 40b3873c4d43e25ee356cbc8146f5b131fbd3479..c12384a4e8add4737ebfe4b75ad2bad65ee15f77 100644
--- a/Trigger/TriggerCommon/TriggerMenuMT/python/TriggerAPI/TriggerDataAccess.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/python/TriggerAPI/TriggerDataAccess.py
@@ -165,9 +165,6 @@ def queryHLTPrescaleTableRun2(connection,psk):
 def fillHLTmap( info, hltMap_prev , lbCount, run, grlblocks):
     from TrigConfigSvc.TrigConfigSvcUtils import getL1Items, getL1Prescales
 
-    mutelog = logging.getLogger(__name__)
-    mutelog.setLevel(logging.ERROR) #avoid the spam from TrigConfigSvcUtils
-
     items = getL1Items('TRIGGERDB', info['smk']) # returs map item name => CTP ID
     chainsHLT = getChainsWithL1seed('TRIGGERDB', info['smk']) # returns map HLT ID => (HLT name, L1 seed)
     chainsHLT = {k:v for (k,v) in six.iteritems (chainsHLT) if "L1" in v[1]}
@@ -300,15 +297,6 @@ def getHLTmap_fromTM(period, release):
         The format is the same as for TriggerDBAccess for compatibility but rerun is always false
     '''
 
-    from AthenaConfiguration.AllConfigFlags import ConfigFlags
-
-    mutelog = logging.getLogger(__name__)
-    mutelog.setLevel(logging.WARNING) #avoid spam from Menu.L1.L1MenuConfig
-
-    from TrigConfigSvc.TrigConfigSvcCfg import generateL1Menu, createL1PrescalesFileFromMenu
-    generateL1Menu(ConfigFlags)
-    createL1PrescalesFileFromMenu(ConfigFlags)
-    
     from TriggerMenuMT.HLTMenuConfig.Menu.GenerateMenuMT import GenerateMenuMT
     menu = GenerateMenuMT()
     menu.getChainsFromMenu()
diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuRun3.py b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuRun3.py
index 945566c821c3d634ccac047063ad3dfd3cb8d4ca..1cc5773f085378c31c193b3aa03bf01f0838abda 100755
--- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuRun3.py
+++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateL1MenuRun3.py
@@ -1,93 +1,42 @@
-#!/bin/env python
-
+#!/usr/bin/env python
 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
 import sys
 
-
-def parseCmdLine(possibleMenus):
+def main():
     import argparse
-    parser = argparse.ArgumentParser()
-    # mandatory argument is the menu
-    parser.add_argument("menu", help="the menu to generate (possible menus: %s)" % ', '.join(possibleMenus), nargs='?', default="phyp1r3v1")
-    parser.add_argument("-v", "--verbose", help="increase output verbosity", action="count", default=0)
-    parser.add_argument("--destdir", dest="dest", help="directory for output files", default = "./")
-    return parser.parse_args()
-    
-
-def generateL1Menu(menu, cmdline):
-    # logging
-    from AthenaCommon.Logging import logging
-    log = logging.getLogger(sys.argv[0].split('/')[-1])
-    log.setLevel(logging.INFO)
-    logging.getLogger("Menu.L1.L1MenuConfig").setLevel(logging.INFO)
-    if cmdline.verbose:
-        log.setLevel(logging.DEBUG)
-        logging.getLogger("Menu.L1.L1MenuConfig").setLevel(logging.DEBUG)
-
-    # setup
-
-    # L1 menu generation
-    from TriggerMenuMT.L1.L1MenuConfig import L1MenuConfig
-    l1cfg = L1MenuConfig( menu )
-
-    from TrigConfigSvc.TrigConfigSvcCfg import getL1MenuFileName, getBunchGroupSetFileName
     from AthenaConfiguration.AllConfigFlags import ConfigFlags
-    ConfigFlags.Trigger.triggerMenuSetup = menu
-    l1cfg.writeJSON(outputFile=getL1MenuFileName(ConfigFlags),
-                    bgsOutputFile=getBunchGroupSetFileName(ConfigFlags),
-                    destdir=cmdline.dest)
-
-    return l1cfg.l1menu
-
 
-def generateDefaultMCBunchgroupSet(cmdline):
-    from TriggerMenuMT.L1.Base.Limits import Limits
-    from TriggerMenuMT.L1.Base.BunchGroupSet import createDefaultBunchGroupSet
-    Limits.setLimits(CTPVersion=4)
-    bgs = createDefaultBunchGroupSet()
-    bgs.writeJSON( outputFile = "L1BunchGroupSet.json", destdir = cmdline.dest)
-    
-
-
-def main():
-
-
-    availableMenus = dict([
-        ("phy8" , "Physics_pp_v8"),
-        ("phy"  , "Physics_pp_v8"),
-        ("mc8"  , "MC_pp_v8"     ),
-        ("mc"   , "MC_pp_v8"     ),
-        ("mcp"  , ["MC_pp_v8_no_prescale", "MC_pp_v8_loose_mc_prescale", "MC_pp_v8_tight_mc_prescale"]),
-        ("ls"   , "LS2_v1"       ),
-        ("phyr3v1"   , "Physics_pp_run3_v1"       ),
-        ("phyp1r3v1"   , "PhysicsP1_pp_run3_v1"       ),
-        ("mcr3v1"   , "MC_pp_run3_v1"       ),
-        ("cosmic", "Cosmic_run3_v1"),
-        ("hip1r3v1", "PhysicsP1_HI_run3_v1" ),
-        ("devhir3v1", "Dev_HI_run3_v1" ),
-        ("hiphy4","Physics_HI_v4"),
-        ("hiphy", "Physics_HI_v4"),
-        ("himc4", "MC_HI_v4"     ),
-        ("himc",  "MC_HI_v4"     ),
-    ])
-
-    cmdline = parseCmdLine(possibleMenus = availableMenus.keys())
-
-    # Make sure output directory exists
-    from pathlib import Path
-    Path(cmdline.dest).mkdir(parents=True, exist_ok=True)
-
-    if cmdline.menu.lower() in availableMenus:
-        menu = availableMenus[cmdline.menu.lower()]
-        if not isinstance(menu,list):
-            menu = [menu]
-        for m in menu:
-            generateL1Menu(menu=m, cmdline=cmdline)
-    elif cmdline.menu.lower() == "bgrp":
-        generateDefaultMCBunchgroupSet(cmdline=cmdline)
+    parser = argparse.ArgumentParser()
+    parser.add_argument("menu", nargs="?", default='PhysicsP1_pp_run3_v1', #ConfigFlags.Trigger.triggerMenuSetup,
+                        help="the menu to generate [%(default)s]")
+    parser.add_argument("--bgrp", action="store_true",
+                        help="generate default MC bunchgroup")
+    parser.add_argument("-v", "--verbose", action="store_true",
+                        help="increase output verbosity")
+
+    args = parser.parse_args()
+
+    # set menu
+    ConfigFlags.Trigger.triggerMenuSetup = args.menu
+    ConfigFlags.lock()
+
+    # set verbosity
+    if args.verbose:
+        from AthenaCommon.Logging import logging
+        logging.getLogger("TriggerMenuMT").setLevel(logging.DEBUG)
+
+    # Bunchgroup generation
+    if args.bgrp:
+        from TriggerMenuMT.L1.Base.Limits import Limits
+        from TriggerMenuMT.L1.Base.BunchGroupSet import createDefaultBunchGroupSet
+        Limits.setLimits(CTPVersion=4)
+        bgs = createDefaultBunchGroupSet()
+        bgs.writeJSON(outputFile = "L1BunchGroupSet.json")
     else:
-        generateL1Menu(menu=cmdline.menu, cmdline=cmdline)
+        # L1 menu generation
+        from TrigConfigSvc.TrigConfigSvcCfg import generateL1Menu
+        generateL1Menu(ConfigFlags)
 
     return 0