diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h index de316d6b40d13911892ba9430949783d564465c1..58e525e42409586c154da14b45e4e378f1d9f5bb 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoAlgorithm.h @@ -124,7 +124,9 @@ namespace TrigConf { gXE = 7, gXERHO = 8, gXEPUFIT = 9, - gTE = 10 }; + gTE = 10, + jXEPerf = 11, // Only for simulation studies! + }; static std::string flavourIntToStr(const unsigned int flavInt){ if(flavInt==int(FLAV::jXE)) return "jXE"; @@ -138,6 +140,7 @@ namespace TrigConf { if(flavInt==int(FLAV::gXERHO)) return "gXERHO"; if(flavInt==int(FLAV::gXEPUFIT)) return "gXEPUFIT"; 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!"); }; static unsigned int flavourStrToInt(const std::string & flavStr){ @@ -152,6 +155,7 @@ namespace TrigConf { if(flavStr=="gXERHO") return int(FLAV::gXERHO); if(flavStr=="gXEPUFIT") return int(FLAV::gXEPUFIT); 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/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref index 0e88d27d3698bf9d61ed5ced0a544275505ad1fb..a1e298695f04237e8e031d90d63c8b0291fe325f 100644 --- a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref +++ b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref @@ -9861,6 +9861,8 @@ HLT_noalg_L1jXE55: eventCount: 0 HLT_noalg_L1jXEC50: eventCount: 0 +HLT_noalg_L1jXEPerf50: + eventCount: 0 HLT_noalg_LArPEBCalib_L1LAR-ZEE: eventCount: 1 stepCounts: diff --git a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref index 4b4286137886385d02b5f781f5439d61834ff9ec..3a210656b56d2258c7ece1c1680a8e993816b7d5 100644 --- a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref +++ b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref @@ -4025,6 +4025,8 @@ HLT_noalg_L1jXE55: eventCount: 0 HLT_noalg_L1jXEC50: eventCount: 0 +HLT_noalg_L1jXEPerf50: + eventCount: 0 HLT_noalg_LArPEBCalib_L1LAR-ZEE: eventCount: 0 HLT_noalg_LArPEBCalib_L1RD0_BGRP11: diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py index 24fa7bfbc0f580e284facc3083fab88ccdfeee4c..ad3aaa7ab165e3919b9c308ab45ba3582fe08f82 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py @@ -1378,6 +1378,9 @@ def setupMenu(): ChainProp(name='HLT_noalg_L1jTEFWDA100', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup), ChainProp(name='HLT_noalg_L1jTEFWDC100', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup), + # ATR-24037 + ChainProp(name='HLT_noalg_L1jXEPerf50', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=METPhaseIStreamersGroup), + ] TriggerFlags.MonitorSlice.signatures = TriggerFlags.MonitorSlice.signatures() + [ diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Base/L1MenuFlags.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Base/L1MenuFlags.py index 8d50cb2ac757dcaaa940d94a6339761f4f6b848c..981ed530f425013ac5362702410771ccd1b62246 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Base/L1MenuFlags.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Base/L1MenuFlags.py @@ -47,6 +47,8 @@ class L1MenuFlagsCont(object): "prescales" : FlagArgs( dict, dict() ), "RemapThresholdsAsListed" : FlagArgs( bool, False ), "CtpIdMap" : FlagArgs( dict, dict() ), + "ThresholdMap" : FlagArgs( dict, dict() ), + "ItemMap" : FlagArgs( dict, dict() ), } def __setattr__(self, attr, value): diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py index ada283f892664bf096bf5f44ebb11dbc2c191b7d..e3d70ab815a661263d514e150676c28d63c0e78a 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py @@ -701,6 +701,7 @@ class ItemDef: MenuItem('L1_jXE300').setLogic( d.jXE300 & physcond).setTriggerType(TT.calo) MenuItem('L1_jXEC50' ).setLogic( d.jXEC50 & physcond).setTriggerType(TT.calo) + MenuItem('L1_jXEPerf50' ).setLogic( d.jXEPerf50 & physcond).setTriggerType(TT.calo) # phase1 TE MenuItem('L1_gTE50' ).setLogic( d.gTE50 & physcond).setTriggerType(TT.calo) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDef.py index 22ba33e3a492f8ef18680f236dc6d1f1596496a5..b131de63e1d07bd9e0440d1556a0c81db3652256 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDef.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ThresholdDef.py @@ -108,23 +108,19 @@ class ThresholdDef: # eEM for thrV in [3, 5, 8, 15, 20, 22]: #eEMThreshold('eEM%i' % thrV, 'eEM').addThrValue(thrV) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM%i'% thrV, 'eEM'), pt=thrV, shift_set = 1 ) + ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM%i'% thrV, 'eEM'), pt = thrV, shift_set = 1 ) # L section (used to be VH in Run2) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM8L', 'eEM').setIsolation( reta = "Loose", wstot = "Loose", rhad = "Loose" ), pt=8, shift_set = 1 ) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM10L', 'eEM').setIsolation( reta = "Loose", wstot = "Loose", rhad = "Loose" ), pt=10, shift_set = 1 ) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM15L', 'eEM').setIsolation( reta = "Loose", wstot = "Loose", rhad = "Loose" ), pt=15, shift_set = 1 ) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM20L', 'eEM').setIsolation( reta = "Loose", wstot = "Loose", rhad = "Loose" ), pt=20, shift_set = 1 ) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM22L', 'eEM').setIsolation( reta = "Loose", wstot = "Loose", rhad = "Loose" ), pt=22, shift_set = 1 ) + for thrV in [8,10,15,20,22]: + ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM%iL' % thrV, 'eEM').setIsolation( reta = "Loose", wstot = "Loose", rhad = "Loose" ), pt = thrV, shift_set = 1 ) # M section (used to be VHI in Run2) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM8M', 'eEM').setIsolation( reta = "Medium", wstot = "Medium", rhad = "Medium" ), pt=8, shift_set = 1 ) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM15M', 'eEM').setIsolation( reta = "Medium", wstot = "Medium", rhad = "Medium" ), pt=15, shift_set = 1 ) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM20M', 'eEM').setIsolation( reta = "Medium", wstot = "Medium", rhad = "Medium" ), pt=20, shift_set = 1 ) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM22M', 'eEM').setIsolation( reta = "Medium", wstot = "Medium", rhad = "Medium" ), pt=22, shift_set = 1 ) + for thrV in [8,15,20,22]: + ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM%iM' % thrV, 'eEM').setIsolation( reta = "Medium", wstot = "Medium", rhad = "Medium" ), pt = thrV, shift_set = 1 ) # T section (used to be VHIM in Run2) - ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM22T', 'eEM').setIsolation( reta = "Tight", wstot = "Tight", rhad = "Tight" ), pt=22, shift_set = 1 ) + for thrV in [22]: + ThresholdDef.addVaryingThrValues( eEMThreshold( 'eEM%iT' % thrV, 'eEM').setIsolation( reta = "Tight", wstot = "Tight", rhad = "Tight" ), pt= thrV, shift_set = 1 ) # jEM for thrV in [15]: @@ -194,6 +190,10 @@ class ThresholdDef: for thrV in [50]: XEThreshold('jXEC%i' % thrV, 'jXE').setXE(thrV) + # ATR-24037 + for thrV in [50]: + XEThreshold('jXEPerf%i' % thrV, 'jXE').setXE(thrV) + # jTE for thrV in [100,]: TEThreshold('jTE%i' % thrV, 'jTE').setTE(thrV) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefMultiplicity.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefMultiplicity.py index cd7875459e21db19ad9e17bfa2c3410122abc60a..3c442317de5761eb4804104e2bb3a317578efe9d 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefMultiplicity.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/TopoAlgoDefMultiplicity.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration from AthenaCommon.Logging import logging log = logging.getLogger(__name__) @@ -143,6 +143,8 @@ class TopoAlgoDefMultiplicity(object): 'jXEC50', 'jTE100', 'jTEC100', 'jTEFWD100', 'jTEFWDA100', 'jTEFWDC100', 'gTE50', + + 'jXEPerf50', ] for XE in XEThresholds: diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py index 739f7a2e4b0255d28653a37f535335c1ad0aa2ed..163616bbdc9dcfaf2e5dc3d924b29199db97cd11 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.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 """ This map specifies with menu to load from TriggerMenuMT/python/L1/Menu @@ -8,18 +8,17 @@ The resolved name is also being used in the L1/Config/ItemDef.py and L1/Config/T """ menuMap = { - "Physics_pp_v7" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], - "LS2_v1" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], - "Physics_pp_run3_v1" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], + "Physics_pp_run3_v1" : ["Physics_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], + "PhysicsP1_pp_run3_v1" : ["Physics_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], + "Physics_pp_v8" : ["Physics_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], "MC_pp_run3_v1" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], "MC_pp_v8" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], - "Physics_pp_v8" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], "Cosmic_run3_v1" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], "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_pp_run3_v1" : ["MC_pp_v8","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"], + "LS2_v1" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], "LS2_v1_Primary_prescale" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], "LS2_v1_TriggerValidation_prescale" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], "LS2_v1_BulkMCProd_prescale" : ["MC_pp_v8","MC_pp_v8_inputs","MC_pp_v8_inputs_legacy"], 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 34ba3365448e57e4d05d65ca6f4f584ffd61cedd..e0676e0d4e23c1b628da5adf3c6fefc23ca583cb 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 @@ -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 # # Run this file in order to print out the empty slots @@ -175,7 +175,10 @@ def defineMenu(): 'L1_jXE30', 'L1_jXE35', 'L1_jXE40', 'L1_jXE50', 'L1_jXE55', 'L1_jXE300', 'L1_jXEC50', 'L1_jTE100', 'L1_jTEC100', 'L1_jTEFWD100', 'L1_jTEFWDA100', 'L1_jTEFWDC100', - + + # ATR-24037 + 'L1_jXEPerf50', + # RNDM 'L1_RD0_FILLED', 'L1_RD0_UNPAIRED_ISO', 'L1_RD0_EMPTY', 'L1_RD0_ABORTGAPNOTCALIB', 'L1_RD0_FIRSTEMPTY', 'L1_RD0_BGRP11', 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 edb8177f42f8137060f32e92089951003985d743..ddbaf009346160c5edb37f0ddf02c8aa87297453 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 @@ -139,7 +139,7 @@ def defineInputsMenu(): ('jXE30',1), ('jXE35',1), ('jXE40',1), ('jXE50',1), ('jXE55',1), ('jXE300',1), # test thresholds - ('jXEC50',1), + ('jXEC50',1), ('jXEPerf50',1), ('jTE100',1), ('jTEC100',1), ('jTEFWD100',1), ('jTEFWDA100',1), ('jTEFWDC100',1) ] }) @@ -385,3 +385,31 @@ def defineInputsMenu(): L1MenuFlags.boards().update( ctpinBoards ) # CTPIN/Slot9 NIM1, NIM2, CALREQ L1MenuFlags.boards().update( alfaBoard ) # ALFA + + #---------------------------------------------- + + def remapThresholds(): + # remap thresholds. TODO: add checks in case the remap does not fulfill HW constraints? + for boardName, boardDef in L1MenuFlags.boards().items(): + if "connectors" in boardDef: + for c in boardDef["connectors"]: + if "thresholds" in c: + thresholdsToRemove = [] + for thrIndex, thrName in enumerate(c["thresholds"]): + nBits = 0 + if type(thrName)==tuple: + (thrName,nBits) = thrName + if thrName in L1MenuFlags.ThresholdMap(): + if (L1MenuFlags.ThresholdMap()[thrName] != ''): + if nBits > 0: + c["thresholds"][thrIndex] = (L1MenuFlags.ThresholdMap()[thrName],nBits) + else: + c["thresholds"][thrIndex] = L1MenuFlags.ThresholdMap()[thrName] + else: + thresholdsToRemove.append(thrIndex) + for i in reversed(thresholdsToRemove): + del c["thresholds"][i] + + #---------------------------------------------- + + remapThresholds() diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_Physics_pp_v8.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_Physics_pp_v8.py new file mode 100644 index 0000000000000000000000000000000000000000..ca4a61a0d64daca7a5340f079be238760a2627ca --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/Menu_Physics_pp_v8.py @@ -0,0 +1,34 @@ +# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + +def defineMenu(): + + import TriggerMenuMT.L1.Menu.Menu_MC_pp_v8 as mc_menu + from TriggerMenuMT.L1.Base.L1MenuFlags import L1MenuFlags + + mc_menu.defineMenu() + + L1MenuFlags.ThresholdMap = { + # Do not use for L1Topo decision threshold! + 'jXEPerf50' :'', + } + + L1MenuFlags.ItemMap = { + 'L1_jXEPerf50':'', + } + + #---------------------------------------------- + def remapItems(): + itemsToRemove = [] + for itemIndex, itemName in enumerate(L1MenuFlags.items()): + if (itemName in L1MenuFlags.ItemMap()): + if (L1MenuFlags.ItemMap()[itemName] != ''): + L1MenuFlags.items()[itemIndex] = L1MenuFlags.ItemMap()[itemName] + else: + itemsToRemove.append(itemIndex) + + for i in reversed(itemsToRemove): + del L1MenuFlags.items()[i] + #---------------------------------------------- + + remapItems() +