From 14addfd3f0cf47c346cbb6cfc987f6c87df9fc74 Mon Sep 17 00:00:00 2001
From: Paul Thompson <paul.daniel.thompson@cern.ch>
Date: Mon, 11 Mar 2024 17:44:39 +0100
Subject: [PATCH] Update L1Calo derivation/monitoring now that Offline Copy has
 been removed [ATR-28688]

revert to AntiKt10LCTopoJets whilst the issue of large R jets in the reconstruction/monitoring is dealt with
---
 .../python/L1CALOCore.py                      | 55 ++++++++++++++-----
 .../python/L1CaloFEXAlgosConfig.py            |  4 +-
 .../python/EfexMonitorAlgorithm.py            |  8 +--
 .../python/JfexSimMonitorAlgorithm.py         |  2 +-
 4 files changed, 50 insertions(+), 19 deletions(-)

diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkL1Calo/python/L1CALOCore.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkL1Calo/python/L1CALOCore.py
index 73320aed3fea..c99f7badcbcb 100644
--- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkL1Calo/python/L1CALOCore.py
+++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkL1Calo/python/L1CALOCore.py
@@ -95,13 +95,14 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
         acc.merge(jFexEmulatedTowersCfg(flags, writeKey=emulatedDataTowersKey))
 
     # Decorate any jFEX data towers
+    extraJfexInfo = False # for decorating with SCell inputs to the towers
     if flags.Trigger.L1.dojFex and isNotPool:
         from L1CaloFEXAlgos.L1CaloFEXAlgosConfig import L1CalojFEXDecoratorCfg
-        acc.merge(L1CalojFEXDecoratorCfg(flags))
+        acc.merge(L1CalojFEXDecoratorCfg(flags, ExtraInfo=extraJfexInfo))
 
     # Decorate the emulated jFEX towers
     if flags.Trigger.L1.dojFex and isNotPool:
-        acc.merge(L1CalojFEXDecoratorCfg(flags,name='jFexTower2SCellEmulatedDecorator',jTowersReadKey=emulatedDataTowersKey))
+        acc.merge(L1CalojFEXDecoratorCfg(flags,name='jFexTower2SCellEmulatedDecorator',jTowersReadKey=emulatedDataTowersKey,ExtraInfo=extraJfexInfo))
 
     # Emulate eFEX input towers
     if flags.Trigger.L1.doeFex and isNotPool:
@@ -109,15 +110,24 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
         eFexEmulatedTool = eFexEmulatedTowersCfg(flags,'L1_eFexEmulatedTowers')
         acc.merge(eFexEmulatedTool)
 
-    # Re-simulate from LATOME
+    # Re-simulate from LATOME (for both data and POOL files with SCells)
+    from L1CaloFEXSim.L1CaloFEXSimCfg import L1CaloFEXSimCfg
     if isNotPool:
-        from L1CaloFEXSim.L1CaloFEXSimCfg import L1CaloFEXSimCfg
         acc.merge(L1CaloFEXSimCfg(flags, simulateAltTau=True))
+    else:
+        SCellType = flags.Trigger.L1.L1CaloSuperCellContainerName
+        if SCellType in flags.Input.Collections:
+            acc.merge(L1CaloFEXSimCfg(flags, simulateAltTau=True))
 
-    # decorate the eFEX TOBs (offline copy) - must be configured to run *after* resimulation
+    # decorate the eFEX TOBs 
     if flags.Trigger.L1.doeFex and isNotPool:
         from L1CaloFEXAlgos.L1CaloFEXAlgosConfig import eFexTOBDecoratorCfg
-        DecoratorAlgoSim = eFexTOBDecoratorCfg(flags,'eFexTOBDecoratorSim','L1_eEMRoISim','L1_eTauRoISim')
+        # Temporary fix to ensure the L1 TOBs are decoded by the Trigger
+        from TrigDecisionTool.TrigDecisionToolConfig import getRun3NavigationContainerFromInput
+        ExtraInputs = [('xAOD::TrigCompositeContainer', 'StoreGateSvc+'+getRun3NavigationContainerFromInput(flags))]
+        DecoratorAlgo = eFexTOBDecoratorCfg(flags,'eFexTOBDecorator','L1_eEMRoI','L1_eTauRoI',ExtraInputs)
+        acc.merge(DecoratorAlgo)
+        DecoratorAlgoSim = eFexTOBDecoratorCfg(flags,'eFexTOBDecoratorSim','L1_eEMRoISim','L1_eTauRoIAltSim')
         acc.merge(DecoratorAlgoSim)
 
     # set up the slimming helper
@@ -136,6 +146,7 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
     L1CaloSlimmingHelper.IncludeEGammaTriggerContent = True
     L1CaloSlimmingHelper.IncludeJetTriggerContent = True
     L1CaloSlimmingHelper.IncludeBJetTriggerContent = True
+    L1CaloSlimmingHelper.IncludeTauTriggerContent = True # does not select any Run3 HLT collections - added below
 
     # Container selection based on share/L1CALO versions
     # Note: if the container is in the on-the-fly list (ContainersOnTheFly.py) then we do not have to add it to the dictionary
@@ -144,7 +155,7 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
     # some gymnastics for HLT from RAWD
     if isNotPool and L1CaloSlimmingHelper.IncludeEGammaTriggerContent:
         # replicate adding EGammaTriggerContent
-        # switch the helper off - it doesn't help to have smart slimming for eGamma
+        # switch the eGamma Trigger off for RAW data - smart slimming not required
         L1CaloSlimmingHelper.IncludeEGammaTriggerContent = False
         ElToKeep = ['ptcone20', 'ptvarcone20', 'ptcone30', 'ptvarcone30', 'trk_d0','cl_eta2','cl_phi2', 'deltaEta1PearDistortion']
         ElVars = '.'.join(ElToKeep)
@@ -171,13 +182,13 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
                                                          "HLT_AntiKt4EMTopoJets_nojcalib_ftf":"xAOD::JetContainer",
                                                          "HLT_AntiKt4EMTopoJets_nojcalib_ftfAux":"xAOD::JetAuxContainer",
                                                          "HLT_AntiKt4EMTopoJets_subjesIS":"xAOD::JetContainer",
-                                                         "HLT_AntiKt4EMTopoJets_subjesISAux":"xAOD::JetAuxContainer",
+                                                         "HLT_AntiKt4EMTopoJets_subjesISAux":"xAOD::ShallowAuxContainer",
                                                          "HLT_AntiKt4EMPFlowJets_nojcalib_ftf":"xAOD::JetContainer",
                                                          "HLT_AntiKt4EMPFlowJets_nojcalib_ftfAux":"xAOD::JetAuxContainer",
                                                          "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf":"xAOD::JetContainer",
-                                                         "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftfAux":"xAOD::JetAuxContainer",
+                                                         "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftfAux":"xAOD::ShallowAuxContainer",
                                                          "HLT_AntiKt4EMPFlowJets_subjesgscIS_ftf":"xAOD::JetContainer",
-                                                         "HLT_AntiKt4EMPFlowJets_subjesgscIS_ftfAux":"xAOD::JetAuxContainer",
+                                                         "HLT_AntiKt4EMPFlowJets_subjesgscIS_ftfAux":"xAOD::ShallowAuxContainer",
                                                          "HLT_AntiKt10EMPFlowCSSKSoftDropBeta100Zcut10Jets_jes_ftf":"xAOD::JetContainer",
                                                          "HLT_AntiKt10EMPFlowCSSKSoftDropBeta100Zcut10Jets_jes_ftfAux":"xAOD::JetAuxContainer",
                                                          "HLT_IDVertex_FS":"xAOD::VertexContainer",
@@ -191,6 +202,17 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
 
     AllVariables += ["HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_BTagging", "HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_bJets"]
 
+    if L1CaloSlimmingHelper.IncludeTauTriggerContent:
+        L1CaloSlimmingHelper.AppendToDictionary.update ({"HLT_TrigTauRecMerged_MVA":"xAOD::TauJetContainer",
+                                                         "HLT_TrigTauRecMerged_MVAAux":"xAOD::TauJetAuxContainer",
+                                                         "HLT_TrigTauRecMerged_LLP":"xAOD::TauJetContainer",
+                                                         "HLT_TrigTauRecMerged_LLPAux":"xAOD::TauJetAuxContainer",
+                                                         "HLT_TrigTauRecMerged_LRT":"xAOD::TauJetContainer",
+                                                         "HLT_TrigTauRecMerged_LRTAux":"xAOD::TauJetAuxContainer",
+                                                         "HLT_TrigTauRecMerged_CaloMVAOnly":"xAOD::TauJetContainer",
+                                                         "HLT_TrigTauRecMerged_CaloMVAOnlyAux":"xAOD::TauJetAuxContainer"})
+        AllVariables += ["HLT_TrigTauRecMerged_MVA", "HLT_TrigTauRecMerged_LLP", "HLT_TrigTauRecMerged_LRT", "HLT_TrigTauRecMerged_CaloMVAOnly"]
+
     # Generic event info
     L1CaloSlimmingHelper.AppendToDictionary.update({"EventInfo":"xAOD::EventInfo","EventInfoAux":"xAOD::EventAuxInfo"}) 
 
@@ -204,7 +226,7 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
          "Photons":"xAOD::PhotonContainer", "PhotonsAux":"xAOD::PhotonAuxContainer",
          "TauJets":"xAOD::TauJetContainer", "TauJetsAux":"xAOD::TauJetAuxContainer"}
     )
-    AllVariables += ["AntiKt4EMPFlowJets","AntiKt10LCTopoJets","Muons","Photons"] 
+    AllVariables += ["AntiKt4EMPFlowJets","AntiKt10LCTopoJets","Muons","Photons"]
     # TauJets require smart slimming in order not to cause issues
     SmartCollections += ["TauJets"]
 
@@ -284,6 +306,11 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
     )
     AllVariables += ["egammaClusters","TauPi0Clusters","CaloCalTopoClusters","MuonSegments"]
 
+    # Add b-tagging information directly using ExtraVariables - as done for PHYSLITE
+    ExtraVariables += [
+        'BTagging_AntiKt4EMPFlow.DL1dv01_pu.DL1dv01_pc.DL1dv01_pb.GN2v00_pu.GN2v00_pc.GN2v00_pb'
+    ]
+
     # L1Calo information
     # Legacy RoI Containers
     L1CaloSlimmingHelper.AppendToDictionary.update (
@@ -388,9 +415,11 @@ def L1CALOCoreCfg(flags, deriv='L1CALO1', **kwargs):
          "L1_jFexDataTowers":"xAOD::jFexTowerContainer",
          "L1_jFexDataTowersAux":"xAOD::jFexTowerAuxContainer",
          "L1_gFexDataTowers":"xAOD::gFexTowerContainer",
-         "L1_gFexDataTowersAux":"xAOD::gFexTowerAuxContainer"}
+         "L1_gFexDataTowersAux":"xAOD::gFexTowerAuxContainer",
+         "L1_gFexDataTowers50":"xAOD::gFexTowerContainer",
+         "L1_gFexDataTowers50Aux":"xAOD::gFexTowerAuxContainer"}
     )
-    AllVariables += ["L1_eFexDataTowers","L1_jFexDataTowers","L1_gFexDataTowers"]
+    AllVariables += ["L1_eFexDataTowers","L1_jFexDataTowers","L1_gFexDataTowers","L1_gFexDataTowers50"]
 
     # Emulated eFEX input tower data from LATOME
     L1CaloSlimmingHelper.AppendToDictionary.update (
diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXAlgos/python/L1CaloFEXAlgosConfig.py b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXAlgos/python/L1CaloFEXAlgosConfig.py
index 9e997c3648b9..86ad0b7a1f64 100644
--- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXAlgos/python/L1CaloFEXAlgosConfig.py
+++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXAlgos/python/L1CaloFEXAlgosConfig.py
@@ -29,7 +29,7 @@ def L1CaloGTowerDecoratorCfg(flags, name, gTowersReadKey = 'L1_gFexDataTowers'):
 
     return acc
 
-def eFexTOBDecoratorCfg(flags, name, eFexEMRoIContainer = "L1_eEMRoI", eFexTauRoIContainer = "L1_eTauRoI"):
+def eFexTOBDecoratorCfg(flags, name, eFexEMRoIContainer = "L1_eEMRoI", eFexTauRoIContainer = "L1_eTauRoI", ExtraInputs = []):
     """
     Configure the eFEX TOB decorator algorithm
     Requires the eFEXTOBEtTool
@@ -60,6 +60,8 @@ def eFexTOBDecoratorCfg(flags, name, eFexEMRoIContainer = "L1_eEMRoI", eFexTauRo
         decorator.REMCoreDecorKey = eFexTauRoIContainer+".REMCoreDec"
         decorator.REMHadDecorKey = eFexTauRoIContainer+".REMHadDec"
 
+    decorator.ExtraInputs = ExtraInputs
+
     acc.addEventAlgo(decorator)
 
     return acc
diff --git a/Trigger/TrigT1/TrigT1CaloMonitoring/python/EfexMonitorAlgorithm.py b/Trigger/TrigT1/TrigT1CaloMonitoring/python/EfexMonitorAlgorithm.py
index 892c043a0cea..d317ad9de1f1 100644
--- a/Trigger/TrigT1/TrigT1CaloMonitoring/python/EfexMonitorAlgorithm.py
+++ b/Trigger/TrigT1/TrigT1CaloMonitoring/python/EfexMonitorAlgorithm.py
@@ -24,8 +24,8 @@ def EfexMonitoringConfig(inputFlags):
     EfexMonAlg.PackageName = baseGroupName
     EfexMonAlg.LowPtCut = 0.0
     EfexMonAlg.HiPtCut = 15000.0
-    EfexMonAlg.eFexEMTobKeyList = ['L1_eEMRoI', 'L1_eEMRoI_OfflineCopy', 'L1_eEMxRoI']
-    EfexMonAlg.eFexTauTobKeyList = ['L1_eTauRoI', 'L1_eTauRoI_OfflineCopy', 'L1_eTauxRoI']
+    EfexMonAlg.eFexEMTobKeyList = ['L1_eEMRoI', 'L1_eEMxRoI']
+    EfexMonAlg.eFexTauTobKeyList = ['L1_eTauRoI', 'L1_eTauxRoI']
 
     acc = helper.result()
     result.merge(acc)
@@ -54,9 +54,9 @@ def EfexMonitoringHistConfig(flags, eFexAlg):
     # mainDir = 'L1Calo'
     trigPath = 'Developer/Efex/' # Directory trigger path for output histos
     # Map from the key name to the output directory substructure.
-    keyDirPathMap = {'L1_eEMRoI' : 'TOB/eEM', 'L1_eEMRoI_OfflineCopy' : 'TOBcopy/eEM',
+    keyDirPathMap = {'L1_eEMRoI' : 'TOB/eEM',
                      'L1_eEMxRoI' : 'xTOB/eEM', 'L1_eEMRoISim' : 'TOBSim/eEM', 'L1_eEMxRoISim' : 'xTOBSim/eEM',
-                     'L1_eTauRoI' : 'TOB/eTau', 'L1_eTauRoI_OfflineCopy' : 'TOBcopy/eTau', 
+                     'L1_eTauRoI' : 'TOB/eTau', 
                      'L1_eTauxRoI' : 'xTOB/eTau', 'L1_eTauRoISim' : 'TOBSim/eTau', 
                      'L1_eTauxRoISim' : 'xTOBSim/eTau'} 
     cut_names = ["LowPtCut", "HiPtCut"] # List of cut names, for looping over to separate out histograms into directories
diff --git a/Trigger/TrigT1/TrigT1CaloMonitoring/python/JfexSimMonitorAlgorithm.py b/Trigger/TrigT1/TrigT1CaloMonitoring/python/JfexSimMonitorAlgorithm.py
index 7b24e1c3d5fc..cdeee891c90c 100644
--- a/Trigger/TrigT1/TrigT1CaloMonitoring/python/JfexSimMonitorAlgorithm.py
+++ b/Trigger/TrigT1/TrigT1CaloMonitoring/python/JfexSimMonitorAlgorithm.py
@@ -1,7 +1,7 @@
 #
 #  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
 #
-def JfexSimMonitoringConfig(flags, UseOfflineCopy = True):
+def JfexSimMonitoringConfig(flags):
     '''Function to configure LVL1 Efex simulation comparison algorithm in the monitoring system.'''
 
     # use L1Calo's special MonitoringCfgHelper
-- 
GitLab