From b34edeb2dc13fdedd069dc27fb8029e0ae313215 Mon Sep 17 00:00:00 2001 From: Tomasz Bold <tomasz.bold@gmail.com> Date: Tue, 10 Nov 2020 20:04:20 +0000 Subject: [PATCH] Handle menu chains outside of the config flags --- .../TriggerJobOpts/CMakeLists.txt | 4 -- .../TriggerJobOpts/python/MenuConfigFlags.py | 44 ------------------- .../python/TriggerConfigFlags.py | 3 -- .../share/runHLT_standalone_newJO.py | 8 +--- .../Menu/GenerateMenuMT_newJO.py | 28 +++++++----- .../python/HLTMenuConfig/Menu/LS2_v1_newJO.py | 19 ++++---- 6 files changed, 28 insertions(+), 78 deletions(-) delete mode 100644 Trigger/TriggerCommon/TriggerJobOpts/python/MenuConfigFlags.py diff --git a/Trigger/TriggerCommon/TriggerJobOpts/CMakeLists.txt b/Trigger/TriggerCommon/TriggerJobOpts/CMakeLists.txt index f3b6e1be2175..d4e9e276f07d 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/CMakeLists.txt +++ b/Trigger/TriggerCommon/TriggerJobOpts/CMakeLists.txt @@ -12,10 +12,6 @@ atlas_add_test( TriggerConfigFlagsTest SCRIPT python -m unittest TriggerJobOpts.TriggerConfigFlags POST_EXEC_SCRIPT nopost.sh ) -atlas_add_test( TriggerMenuFlagsTest - SCRIPT python -m unittest TriggerJobOpts.MenuConfigFlags - POST_EXEC_SCRIPT nopost.sh ) - atlas_add_test( TriggerConfigTest SCRIPT python -m TriggerJobOpts.TriggerConfig POST_EXEC_SCRIPT nopost.sh ) diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/MenuConfigFlags.py b/Trigger/TriggerCommon/TriggerJobOpts/python/MenuConfigFlags.py deleted file mode 100644 index fe2943c5ce5a..000000000000 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/MenuConfigFlags.py +++ /dev/null @@ -1,44 +0,0 @@ - -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration - -from AthenaConfiguration.AthConfigFlags import AthConfigFlags -import six - - -def createMenuFlags(): - # this flags define which chains are in trgger menu - # the flags content is not just the name bu contains a few key elements of the chains definition, like the seed, other chain aspects can be added - # The DF/CF and hypos are then generated using the menu code - # Should the HLT_ and L1_ prefixes are omitted (DRY principle)? - # each flag is translated to an independent reconstruction chain - flags = AthConfigFlags() - - #flags.addFlag('Trigger.menu.muons', []) - flags.addFlag('Trigger.menu.muon', []) - flags.addFlag('Trigger.menu.electron', []) - flags.addFlag('Trigger.menu.photon', []) - flags.addFlag('Trigger.menu.jet', []) - flags.addFlag('Trigger.menu.combined', []) - - return flags - - -class MenuUtils(object): - @staticmethod - def toCTPSeedingDict( flags ): - seeding = {} # HLTChain to L1 item mapping - for k,v in flags._flagdict.iteritems(): - if "Trigger.menu." in k: - for chain in v.get(): - hlt = chain.name - l1 = hlt[hlt.index("_L1")+1:].replace("L1","L1_", 1) - seeding[hlt] = l1 # this is the item name - return seeding - -import unittest -class __MustHaveMenuInTheName(unittest.TestCase): - def runTest(self): - flags = createMenuFlags() - for fname,fval in six.iteritems (flags._flagdict): - self.assertTrue( fname.startswith('Trigger.menu.') ) - diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py index d46f3d48a559..0856c480cb1a 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py @@ -281,9 +281,6 @@ def createTriggerFlags(): from TrigInDetConfig.TrigTrackingCutFlags import createTrigTrackingFlags flags.addFlagsCategory( 'Trigger.InDetTracking', createTrigTrackingFlags ) - from TriggerJobOpts.MenuConfigFlags import createMenuFlags - flags.join( createMenuFlags() ) - return flags # for reference, this flags are skipped as never used or never set in fact, or set identical to de default or used in a very old JO: # readLVL1Calo, readLVL1Muon, fakeLVL1, useCaloTTL diff --git a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py index 1dd401b5ed82..7170f2fc9cdf 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py @@ -43,13 +43,6 @@ flags.Scheduler.ShowDataDeps = True flags.Scheduler.ShowDataFlow = True flags.Scheduler.ShowControlFlow = True -import importlib -setupMenuPath = "TriggerMenuMT.HLTMenuConfig.Menu."+flags.Trigger.triggerMenuSetup+"_newJO" -setupMenuModule = importlib.import_module( setupMenuPath ) -assert setupMenuModule is not None, "Could not import module {}".format(setupMenuPath) -assert setupMenuModule.setupMenu is not None, "Could not import setupMenu from {}".format(setupMenuPath) -flags.needFlagsCategory('Trigger') -setupMenuModule.setupMenu(flags) flags.Exec.MaxEvents=50 flags.Input.isMC = False flags.Common.isOnline=True @@ -87,6 +80,7 @@ acc.merge(ByteStreamReadCfg( flags )) from TriggerJobOpts.TriggerHistSvcConfig import TriggerHistSvcConfig acc.merge(TriggerHistSvcConfig( flags )) + from TriggerMenuMT.HLTMenuConfig.Menu.GenerateMenuMT_newJO import generateMenu as generateHLTMenu from TriggerJobOpts.TriggerConfig import triggerRunCfg acc.merge( triggerRunCfg( flags, seqName = "AthMasterSeq", menu=generateHLTMenu ) ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py index 6afa8ae8ff99..1ce863f74f56 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py @@ -26,8 +26,18 @@ def fillGeneratorsMap( sigMap, signature ): sigMap[signature] = gen.generateChains log.info( 'Imported generator for %s', signature ) +def obtainChainsOfMenu(flags): + import importlib + setupMenuPath = "TriggerMenuMT.HLTMenuConfig.Menu."+flags.Trigger.triggerMenuSetup+"_newJO" + setupMenuModule = importlib.import_module( setupMenuPath ) + assert setupMenuModule is not None, "Could not import module {}".format(setupMenuPath) + assert setupMenuModule.setupMenu is not None, "Could not import setupMenu from {}".format(setupMenuPath) + return setupMenuModule.setupMenu(flags) -def generateMenu( flags ): + + + +def generateMenu(flags): """ Using flags generate appropriate Control Flow Graph wiht all HLT algorithms """ @@ -42,22 +52,18 @@ def generateMenu( flags ): menuAcc = ComponentAccumulator() mainSequenceName = 'HLTAllSteps' - menuAcc.addSequence( seqAND(mainSequenceName) ) + menuAcc.addSequence(seqAND(mainSequenceName)) + chainsInMenu = obtainChainsOfMenu(flags) - for name, cfgFlag in list(flags._flagdict.items()): - if 'Trigger.menu.' not in name: - continue - value = flags._get(name) - if len(value) == 0: + for signatureName, chains in chainsInMenu.items(): + if len(chains) == 0: continue - signatureName = name.split('.')[-1] signatures = [] - # fill the map[signature, generating function] if signatureName== 'combined': - for chain in cfgFlag.get(): + for chain in chains: signatures += dictFromChainName(chain)['signatures'] else: signatures = [signatureName] @@ -66,7 +72,7 @@ def generateMenu( flags ): fillGeneratorsMap( signatureToGenerator, sig.lower() ) # call generating function and pass to CF builder - for chain in cfgFlag.get(): + for chain in chains: # TODO topo threshold mainChainDict = dictFromChainName( chain ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py index 0e814f98b5bd..a1e849a78ade 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py @@ -18,6 +18,7 @@ def setupMenu(flags): """ Assign chains for LS2_v1 to menu flags """ + chains = {} #--------------------------------------------------------------------- # INPUT FORMAT FOR CHAINS: @@ -37,7 +38,7 @@ def setupMenu(flags): SingleJetGroup = ['RATE:SingleJet', 'BW:Jet'] CombinedGroup = ['RATE:Combined', 'BW:Combined'] - flags.Trigger.menu.muon = [ + chains["muon"] = [ ChainProp(name='HLT_mu20_L1MU20', groups=SingleMuonGroup), ChainProp(name='HLT_mu10_L1MU10', groups=SingleMuonGroup), ChainProp(name='HLT_mu8_L1MU6', groups=SingleMuonGroup), @@ -47,7 +48,7 @@ def setupMenu(flags): ChainProp(name='HLT_mu8_msonly_L1MU6', groups=SingleMuonGroup) ] - flags.Trigger.menu.electron = [ + chains["electron"] = [ ChainProp(name='HLT_e3_etcut_L1EM3', groups=SingleElectronGroup), ChainProp(name='HLT_2e3_etcut_L12EM3', groups=MultiElectronGroup), # this chain does not work yet @@ -56,21 +57,22 @@ def setupMenu(flags): ChainProp(name='HLT_e7_etcut_L1EM7', groups=SingleElectronGroup) ] - flags.Trigger.menu.photon = [ + chains["photon"] = [ ChainProp(name='HLT_g10_etcut_L1EM7', groups=SinglePhotonGroup), ChainProp(name='HLT_g11_etcut_L1EM7', groups=SinglePhotonGroup), ] - flags.Trigger.menu.jet = [ + chains["jet"] = [ ChainProp(name='HLT_j45_L1J20', groups=SingleJetGroup), ChainProp(name='HLT_j85_L1J20', groups=SingleJetGroup), ChainProp(name='HLT_2j35_L1J20', groups=SingleJetGroup) ] - flags.Trigger.menu.combined = [ + chains["combined"] = [ ChainProp(name='HLT_e7_etcut_mu10_L1EM7_MU10', mergingStrategy='parallel', groups=CombinedGroup), ChainProp(name='HLT_e7_etcut_mu10_msonly_L1EM7_MU10', mergingStrategy='parallel', groups=CombinedGroup) ] + return chains if __name__ == "__main__": from AthenaCommon.Configurable import Configurable @@ -89,16 +91,15 @@ if __name__ == "__main__": from AthenaConfiguration.AllConfigFlags import ConfigFlags ConfigFlags.Trigger.generateMenuDiagnostics = True - setupMenu(ConfigFlags) - + from AthenaConfiguration.TestDefaults import defaultTestFiles ConfigFlags.Input.Files = defaultTestFiles.RAW - + ConfigFlags.Trigger.triggerMenuSetup="LS2_v1" ConfigFlags.lock() ConfigFlags.dump() from TriggerMenuMT.HLTMenuConfig.Menu.GenerateMenuMT_newJO import generateMenu - menu = generateMenu( ConfigFlags ) + menu = generateMenu( ConfigFlags) acc.merge(menu) -- GitLab