diff --git a/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py b/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py index f2a67b336b9324019173ebb2d6f9fea8e969dd13..81e31ee22aa9721584feb530268bd746f1dcfa46 100644 --- a/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py +++ b/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py @@ -72,32 +72,6 @@ def createL1PrescalesFileFromMenu( flags ): log.info("Generated default L1 prescale set %s", outfile.name) -# Creates an HLT Prescale file from the menu -# this is a temporary solution, in the final version the HLTPrescalesSet file should come from the menu -def createHLTPrescalesFileFromMenu( flags ): - log = logging.getLogger('TrigConfigSvcCfg') - menuFN = getHLTMenuFileName( flags ) - with open(menuFN,'r') as fh: - data = json.load(fh, object_pairs_hook = odict) - pso = odict() - pso['filetype'] = 'hltprescale' - pso['name'] = data['name'] - pso['prescales'] = odict() - ps = pso['prescales'] - for name, chain in data['chains'].items(): - ps[name] = odict([ - ("name", name), - ("counter", chain['counter']), - ("hash", chain['nameHash']), - ("prescale", 1), - ("enabled", 1) - ]) - psFN = getHLTPrescalesSetFileName( flags ) - with open(psFN, 'w') as outfile: - json.dump(pso, outfile, indent = 4) - log.info("Generated default HLT prescale set %s", outfile.name) - - def getTrigConfigFromFlag( flags ): log = logging.getLogger('TrigConfigSvcCfg') tcflag = flags.Trigger.triggerConfig diff --git a/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py b/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py index 0e39664b7c4196cf5404cdb6c3e61a43a983e210..2ae87b96f41ca1f63b71536a632095a0070d807f 100644 --- a/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py +++ b/Trigger/TrigSteer/DecisionHandling/python/TestUtils.py @@ -90,6 +90,9 @@ def makeChain( name, L1Thresholds, ChainSteps, Streams="physics:Main", Groups=[" chainDict["chainCounter"] = chainsCounter chainsCounter += 1 + #set default chain prescale + chainDict['prescale'] = 1 + from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain chainConfig = Chain( name=name, L1Thresholds=L1Thresholds, ChainSteps=ChainSteps ) diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py index cf9d891678107b0fe6b2947103fd981a0c1913d3..a44e40225d6898f8f95da5c7e149b17572aa5d9b 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py @@ -199,10 +199,22 @@ def createTriggerFlags(): # generate or not the L1 configuration flags.addFlag('Trigger.generateL1Menu', False) - # L1 XML file name - flags.addFlag('Trigger.LVL1ConfigFile', - lambda prevFlags: 'LVL1config_'+prevFlags.Trigger.triggerMenuSetup+'_' + prevFlags.Trigger.menuVersion + '.xml') + def _deriveL1ConfigName(prevFlags): + import re + log = logging.getLogger('TrigConfigSvcCfg') + pattern = re.compile(r'_v\d+|DC14') + menuName=prevFlags.Trigger.triggerMenuSetup + patternPos = pattern.search(menuName) + if patternPos: + menuName=menuName[:patternPos.end()] + else: + log.info('Can\'t find pattern to shorten menu name, either non-existent in name or not implemented.') + + return "LVL1config_"+menuName+"_" + prevFlags.Trigger.menuVersion + ".xml" + # L1 XML file name + flags.addFlag('Trigger.LVL1ConfigFile', _deriveL1ConfigName) + # L1 Json file name flags.addFlag('Trigger.L1MenuFile', lambda prevFlags: 'L1Menu_'+prevFlags.Trigger.triggerMenuSetup+'_' + prevFlags.Trigger.menuVersion + '.json') diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py index 08064a737568a4eafd3eea7091fdb2566ad4ec5f..dc2a5217125fd6158593a5eb475a5afb7e62826b 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py @@ -1,5 +1,6 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +import re from AthenaCommon.Logging import logging log = logging.getLogger( 'TriggerJobOpts.TriggerFlags' ) @@ -631,7 +632,7 @@ class outputLVL1configFile(JobProperty): def __call__(self): if self.get_Value() == "": - return "LVL1config_"+TriggerFlags.triggerMenuSetup()+"_" + TriggerFlags.menuVersion() + ".xml" + return "LVL1config_"+_getMenuBaseName(TriggerFlags.triggerMenuSetup())+"_" + TriggerFlags.menuVersion() + ".xml" else: return self.get_Value() @@ -699,12 +700,22 @@ class inputLVL1configFile(JobProperty): def __call__(self): if self.get_Value() == "": - return "LVL1config_"+TriggerFlags.triggerMenuSetup()+"_" + TriggerFlags.menuVersion() + ".xml" + return "LVL1config_"+_getMenuBaseName(TriggerFlags.triggerMenuSetup())+"_" + TriggerFlags.menuVersion() + ".xml" else: return self.get_Value() - + _flags.append(inputLVL1configFile) +# remove prescale suffixes +def _getMenuBaseName( menuName): + log = logging.getLogger('TrigConfigSvcCfg') + pattern = re.compile(r'_v\d+|DC14') + patternPos = pattern.search(menuName) + if patternPos: + menuName=menuName[:patternPos.end()] + else: + log.info('Can\'t find pattern to shorten menu name, either non-existent in name or not implemented.') + return menuName class inputHLTconfigFile(JobProperty): @@ -828,6 +839,7 @@ class triggerMenuSetup(JobProperty): 'Dev_HI_run3_v1', # Dev_HI_run3 for AthenaMT 'MC_pp_v8', 'Physics_pp_v8', 'MC_pp_v8_no_prescale', 'MC_pp_v8_tight_mc_prescale', 'MC_pp_v8_tightperf_mc_prescale', 'MC_pp_v8_loose_mc_prescale','Physics_pp_v8_tight_physics_prescale', 'Cosmic_run3_v1', + 'LS2_v1_TriggerValidation_mc_prescale' ] _default_menu='Physics_pp_v7_primaries' @@ -852,7 +864,7 @@ class triggerMenuSetup(JobProperty): # filenames for LVL1 and HLT if TriggerFlags.readLVL1configFromXML() is True: - TriggerFlags.inputLVL1configFile = "LVL1config_"+self.get_Value()+"_" + TriggerFlags.menuVersion() + ".xml" + TriggerFlags.inputLVL1configFile = "LVL1config_"+_getMenuBaseName(TriggerFlags.triggerMenuSetup())+"_" + TriggerFlags.menuVersion() + ".xml" if TriggerFlags.readHLTconfigFromXML() is True and (TriggerFlags.inputHLTconfigFile=="" or TriggerFlags.inputHLTconfigFile is None): TriggerFlags.inputHLTconfigFile = "HLTconfig_"+self.get_Value()+"_" + TriggerFlags.menuVersion() + ".xml" diff --git a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py index b57e441fd0b8be64327b54c81ad6627c0ab8c8f1..08d7d249d3b66b3ee7ab6975ebb51ac960043327 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone.py @@ -489,6 +489,11 @@ if not opt.createHLTMenuExternally: # generating the HLT structure requires # the L1Decoder to be defined in the topSequence menu.generateMT() + # Note this will also create the requested HLTPrescale JSON + # - the default file (with all prescales set to 1) is not really needed. + # - If no file is provided all chains are either enabled or disabled, + # depending on the property L1Decoder.PrescalingTool.KeepUnknownChains being True or False + if opt.endJobAfterGenerate: import sys @@ -505,14 +510,6 @@ svcMgr.MessageSvc.infoLimit=10000 from TrigConfigSvc.TrigConfigSvcCfg import getHLTConfigSvc svcMgr += conf2toConfigurable( getHLTConfigSvc(ConfigFlags) ) -if not opt.createHLTMenuExternally: - # the generation of the prescale set file from the menu (with all prescales set to 1) - # is not really needed. If no file is provided all chains are either enabled or disabled, - # depending on the property L1Decoder.PrescalingTool.KeepUnknownChains being True or False - from TrigConfigSvc.TrigConfigSvcCfg import createHLTPrescalesFileFromMenu - createHLTPrescalesFileFromMenu(ConfigFlags) - - # --------------------------------------------------------------- # Monitoring diff --git a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt index 6f49fdccfbba7f4d8bc07270177010bc636089ae..7e0d8a6407f5b482542da2dc2e6e8cc1ab74b857 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt +++ b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt @@ -153,6 +153,6 @@ atlas_build_lvl1_trigger_menu( MC_pp_run3_v1 ) atlas_build_lvl1_trigger_menu( Cosmic_run3_v1 ) atlas_build_lvl1_trigger_menu( PhysicsP1_HI_run3_v1 ) atlas_build_lvl1_trigger_menu( Dev_HI_run3_v1 ) - +atlas_build_lvl1_trigger_menu( LS2_v1_TriggerValidation_mc_prescale ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py index 3ad2a6e75e0030781b64dafb8d1bb3d660b1e7e5..8b6283e8a729cfa87a75997cb491ab84ffc42c23 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py @@ -14,9 +14,10 @@ from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT from TriggerMenuMT.HLTMenuConfig.Menu.HLTCFConfig import makeHLTTree from TriggerMenuMT.HLTMenuConfig.Menu.DictFromChainName import dictFromChainName from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitInterSignatureChainDict -from TriggerMenuMT.HLTMenuConfig.Menu.MenuPrescaleConfig import MenuPrescaleConfig +from TriggerMenuMT.HLTMenuConfig.Menu.MenuPrescaleConfig import MenuPrescaleConfig, applyHLTPrescale from TriggerMenuMT.HLTMenuConfig.Menu.ChainMerging import mergeChainDefs from TriggerMenuMT.HLTMenuConfig.Menu.MenuAlignmentTools import analyseCombinations, groupSignatures, setChainSignatures + from AthenaCommon.Logging import logging log = logging.getLogger( __name__ ) @@ -101,8 +102,6 @@ class GenerateMenuMT(object): == Setup of menu in terms of prescales and overwrite function """ # go over the slices and put together big list of signatures requested - #(L1Prescales, HLTPrescales, streamConfig) = MenuPrescaleConfig(self.triggerPythonConfig) - # that does not seem to work (self.L1Prescales, self.HLTPrescales) = MenuPrescaleConfig(TriggerConfigHLT) global _func_to_modify_signatures if _func_to_modify_signatures is not None: @@ -177,6 +176,9 @@ class GenerateMenuMT(object): chainCounter += 1 chainDict['chainCounter'] = chainCounter + #set default chain prescale + chainDict['prescale'] = 1 + log.debug("Next: getting chain configuration for chain %s ", chain.name) chainConfig,lengthOfChainConfigs = self.__generateChainConfig(chainDict) @@ -533,7 +535,13 @@ class GenerateMenuMT(object): makeHLTTree(newJO=False, triggerConfigHLT = TriggerConfigHLT) # the return values used for debugging, might be removed later + # Having built the Menu add prescales for disabling items (e.g. MC production) + applyHLTPrescale(TriggerConfigHLT, self.HLTPrescales, self.signaturesOverwritten) + from TriggerMenuMT.HLTMenuConfig.Menu.HLTMenuJSON import generateJSON generateJSON() + from TriggerMenuMT.HLTMenuConfig.Menu.HLTPrescaleJSON import generateJSON as generatePrescaleJSON + generatePrescaleJSON() + return finalListOfChainConfigs diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py index 2cf1db244a2acaa1c642002f8103fed2ef3f5512..46d1bc651051194cb1a99f5fc18242182e947c1c 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT_newJO.py @@ -75,6 +75,9 @@ def generateMenu( flags ): counter += 1 mainChainDict['chainCounter'] = counter + #set default chain prescale + mainChainDict['prescale'] = 1 + allChainDicts.append(mainChainDict) chainDicts = splitInterSignatureChainDict(mainChainDict) @@ -124,6 +127,9 @@ def generateMenu( flags ): from TriggerMenuMT.HLTMenuConfig.Menu.HLTMenuJSON import generateJSON_newJO generateJSON_newJO( allChainDicts, menuChains, menuAcc.getSequence("HLTAllSteps") ) + from TriggerMenuMT.HLTMenuConfig.Menu.HLTPrescaleJSON import generateJSON_newJO as generatePrescaleJSON_newJO + generatePrescaleJSON_newJO( allChainDicts, menuChains ) + return menuAcc diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTPrescaleJSON.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTPrescaleJSON.py new file mode 100644 index 0000000000000000000000000000000000000000..ca03f5a7ac1a562ac8dc4ddd45492a183de944ed --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTPrescaleJSON.py @@ -0,0 +1,69 @@ +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + +import json +from collections import OrderedDict as odict +from TrigConfigSvc.TrigConfigSvcCfg import getHLTPrescalesSetFileName +from AthenaCommon.Logging import logging +__log = logging.getLogger( __name__ ) + + +def __generateJSON( chainDicts, chainConfigs, menuName, fileName ): + """ Generates JSON given the ChainProps and sequences + """ + # Prescale dictionary that is used to create the JSON content + prescaleDict = odict([ ("filetype", "hltprescale"), ("name", menuName), ("prescales", odict()) ]) + + from TriggerMenuMT.HLTMenuConfig.Menu import StreamInfo + for chain in chainDicts: + # Prepare information for stream list + chainStreamTags = [] + for streamName in chain["stream"]: + streamTag = StreamInfo.getStreamTag(streamName) + # Stream needs to have been defined in StreamInfo.py otherwise is not added to JSON + if streamTag is None: + __log.error('Stream %s does not have StreamTags defined excluding from JSON', streamName) + continue + # Add stream to the chain + chainStreamTags.append(streamName) + + # Enabled flag is what determines disabling (here is based on prescale list from MenuPrescaleConfig) + chainEnabled = True + if (int(chain["prescale"]) <= 0): + chainEnabled = False + + # Now have all information to write the chain to the prescale dictionary + chainName = chain["chainName"] + prescaleDict["prescales"][chainName] = odict([ + ("name", chainName), + ("counter", chain["chainCounter"]), + ("hash", chain["chainNameHash"]), + ("prescale", chain["prescale"]), + ("enabled", chainEnabled) + # stream information to be added with other changes (ATR-21324) + #("streams", chainStreamTags) + ]) + + # Prescale dictionary now completed, write to JSON + __log.info( "Writing HLT Prescale JSON to %s", fileName ) + with open( fileName, 'w' ) as fp: + json.dump( prescaleDict, fp, indent=4, sort_keys=False ) + + +def generateJSON(): + __log.info("Generating HLT Prescale JSON in the rec-ex-common job") + from AthenaConfiguration.AllConfigFlags import ConfigFlags + from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT + + return __generateJSON( TriggerConfigHLT.dictsList(), + TriggerConfigHLT.configsList(), + ConfigFlags.Trigger.triggerMenuSetup, + getHLTPrescalesSetFileName(ConfigFlags) ) + +def generateJSON_newJO( chainDicts, chainConfigs ): + __log.info("Generating HLT Prescale JSON in the new JO") + from AthenaConfiguration.AllConfigFlags import ConfigFlags + + return __generateJSON( chainDicts, + chainConfigs, + ConfigFlags.Trigger.triggerMenuSetup, + getHLTPrescalesSetFileName(ConfigFlags) ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py index 8115f3e9848b5eeb3e20c9f797333fc6b2a412c5..2244ec9d621eda4d54aac06f2fb2066b5c212df6 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py @@ -9,7 +9,7 @@ #['name', 'L1chainParts'=[], 'stream', 'groups', 'merging'=[], 'topoStartFrom'=False], from TriggerMenuMT.HLTMenuConfig.Menu.ChainDefInMenu import ChainProp -from TriggerMenuMT.HLTMenuConfig.Menu.MenuPrescaleConfig import addSliceChainsToPrescales +from TriggerMenuMT.HLTMenuConfig.Menu.MenuPrescaleConfig import addSliceChainsToPrescales,disableChains import TriggerMenuMT.HLTMenuConfig.Menu.MC_pp_run3_v1 as mc_menu import TriggerMenuMT.HLTMenuConfig.Menu.PhysicsP1_pp_run3_v1 as p1_menu @@ -302,9 +302,26 @@ def setupMenu(): # Random Seeded EB chains which select at the HLT based on L1 TBP bits TriggerFlags.EnhancedBiasSlice.signatures = TriggerFlags.EnhancedBiasSlice.signatures() + [ ] + # -------------------------------------------------- + # ---- Defining specific prescales to this menu ---- + # -------------------------------------------------- + + Prescales = mc_menu.Prescales + + ## Cosmics addSliceChainsToPrescales(TriggerFlags, Prescales.HLTPrescales_cosmics) + ## Trigger Validation (disabling high CPU chains) + + Prescales.L1Prescales_trigvalid_mc_prescale = dict([(ctpid,1) for ctpid in Prescales.L1Prescales]) # setting all L1 prescales to 1 + + Prescales.HLTPrescales_trigvalid_mc_prescale = {} + + disableChains(TriggerFlags, Prescales.HLTPrescales_trigvalid_mc_prescale, "Online") + + # -------------------------------------------------- + + return Prescales -Prescales = mc_menu.Prescales diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuPrescaleConfig.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuPrescaleConfig.py index 2ebceda799a869d0973cec35e6f00f17be20aff3..80d99bff0061505104f2556932ec7165b9f80adf 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuPrescaleConfig.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuPrescaleConfig.py @@ -1,7 +1,7 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from TriggerJobOpts.TriggerFlags import TriggerFlags -#from TriggerMenu.menu.MenuUtil import applyHLTPrescale, resetAllPrescales +from six import iteritems from AthenaCommon.Logging import logging log = logging.getLogger( __name__ ) @@ -25,14 +25,17 @@ def MenuPrescaleConfig(triggerConfigHLT): if menu_name.startswith('LS2_v1'): log.info('LS2_v1 menu setup') - from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1 import setupMenu, Prescales - setupMenu() + from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1 import setupMenu + Prescales = setupMenu() if 'cosmics_prescale' in menu_name: L1Prescales = Prescales.L1Prescales_cosmics HLTPrescales = Prescales.HLTPrescales_cosmics elif 'tight_mc_prescale' in menu_name: L1Prescales = Prescales.L1Prescales_tight_mc_prescale HLTPrescales = Prescales.HLTPrescales_tight_mc_prescale + elif 'TriggerValidation_mc_prescale' in menu_name: + L1Prescales = Prescales.L1Prescales_trigvalid_mc_prescale + HLTPrescales = Prescales.HLTPrescales_trigvalid_mc_prescale else: L1Prescales = Prescales.L1Prescales HLTPrescales = Prescales.HLTPrescales @@ -109,8 +112,8 @@ def MenuPrescaleConfig(triggerConfigHLT): elif menu_name.startswith('LS2_emu_v1'): log.info('LS2_v1 menu setup') - from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1 import setupMenu, Prescales - setupMenu() + from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1 import setupMenu + Prescales = setupMenu() if 'cosmics_prescale' in menu_name: L1Prescales = Prescales.L1Prescales_cosmics HLTPrescales = Prescales.HLTPrescales_cosmics @@ -153,3 +156,39 @@ def addSliceChainsToPrescales(flags, cosmic_prescales): combined.update(cosmic_prescales) from copy import deepcopy cosmic_prescales = deepcopy(combined) + +def disableChains(flags, trigvalid_prescales, type_group): + signatures = [] + slice_props = [prop for prop in dir(flags) if prop.endswith("Slice")] + for slice_prop in slice_props: + slice = getattr(flags, slice_prop) + if slice.signatures(): + signatures.extend(slice.signatures()) + else: + log.debug('SKIPPING ' + str(slice_prop)) + + chain_online_list=[] + + for chain in signatures: + if type_group in chain.groups: + chain_online_list.append(chain.name) + + trigvalid_prescales.update(zip(chain_online_list,len(chain_online_list)*[ [-1, 0,-1] ])) + + +def applyHLTPrescale(triggerPythonConfig, HLTPrescale, signaturesOverwritten): + for item, prescales in iteritems(HLTPrescale): + # prescales is a list of 3 integers [HLT_prescale, HLT_pass_through, rerun_prescale] + if item not in triggerPythonConfig.dicts().keys(): + if signaturesOverwritten: + log.warning('Attempt to set prescales for nonexisting chain: %s', item) + continue + else: + log.error('Attempt to set prescales for nonexisting chain: %s', item) + continue + n = len(prescales) + hltchain = triggerPythonConfig.dicts()[item] + if n > 0: + hltchain['prescale'] = str(prescales[0]) + log.info('Applied HLTPS to the item '+item+': PS'+ hltchain['prescale']) + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuUtil.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuUtil.py index 17f31b2d8ffc2eda9ce0f0e7b0eba06a79320382..3c965544e20f73645211a33fffdbe37024367e35 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuUtil.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuUtil.py @@ -4,58 +4,6 @@ from TriggerJobOpts.TriggerFlags import TriggerFlags from AthenaCommon.Logging import logging log = logging.getLogger(__name__) -def getStreamTagForRerunChains(triggerPythonConfig, HLTPrescale): - list=[] - for item, prescales in HLTPrescale.iteritems(): - # prescales is a list of 3 integers [HLT_prescale, HLT_pass_through, rerun_prescale] - if item not in triggerPythonConfig.allChains.keys(): - log.debug('Signature %s not registered to TriggerPythonConfig', item) - continue - n = len(prescales) - hltchain = None - for ch in triggerPythonConfig.allChains[item]: - if ch.level == 'HLT': - hltchain = ch - if n > 3 and hltchain: - if hltchain.prescale != "0": - log.warning("chain %s in rerun mode with special strema tag does not have the correct HLT PS [=0] ", - hltchain.chain_name) - if hltchain.rerun_prescale != "1": - log.error("chain %s has special stream tag but it's not in rerun mode", hltchain.chain_name) - list.append( "%s:%s", hltchain.chain_name, prescales[3] ) - - - return list - - - - -def applyHLTPrescale(triggerPythonConfig, HLTPrescale): - for item, prescales in HLTPrescale.iteritems(): - # prescales is a list of 3 integers [HLT_prescale, HLT_pass_through, rerun_prescale] - if item not in triggerPythonConfig.allChains.keys(): - if triggerPythonConfig.signaturesOverwritten: - log.warning('Attempt to set prescales for nonexisting chain: %s', item) - continue - else: - log.error('Attempt to set prescales for nonexisting chain: %s', item) - continue - n = len(prescales) - hltchain = None - for ch in triggerPythonConfig.allChains[item]: - if ch.level == 'HLT': - hltchain = ch - if n > 0 and hltchain: - hltchain.prescale = str(prescales[0]) - if n > 1 and hltchain: - hltchain.pass_through = str(prescales[1]) - if n > 2 and hltchain: - hltchain.rerun_prescale = str(prescales[2]) - - log.info('Applied HLTPS to the item '+item+': PS'+ hltchain.prescale+" PT"+hltchain.pass_through+" RerunPS"+hltchain.rerun_prescale) - - - def checkGroups(triggerPythonConfig): """ Make sure the groups used in Physics and MC menu exists """ @@ -153,19 +101,6 @@ def checkStreamConsistency(triggerPythonConfig): already_used_robs[rob_id]=stream -def resetAllPrescales(triggerPythonConfig): - for sig in triggerPythonConfig.allChains.values(): - for chain in sig: - if float(chain.prescale) > 0.: - chain.prescale = '1' - if float(chain.pass_through) > 0.: - chain.pass_through = '1' - if float(chain.rerun_prescale) > 0.: - chain.rerun_prescale = '1' - for item in triggerPythonConfig.allItems.values(): - if float(item.prescale) > 0.: - item.prescale = '1' - def allSignatures(): sigs = [] slices = ( 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 1d6a987438854cd9b439711fe8d121a39491d1e6..a3b2b3fc8704a2c912047030db54d52344982a81 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 @@ -56,7 +56,7 @@ def addP1Signatures(): #ChainProp(name='HLT_beamspot_trkFS_trkfast_L1J15', l1SeedThresholds=['FSNOSEED'], stream=['BeamSpot'], groups=['RATE:BeamSpot', 'BW:BeamSpot']), ] TriggerFlags.MinBiasSlice.signatures = TriggerFlags.MinBiasSlice.signatures() + [ - ChainProp(name='HLT_mb_sptrk_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=MinBiasGroup), + ChainProp(name='HLT_mb_sptrk_L1RD0_FILLED', l1SeedThresholds=['FSNOSEED'], stream=[PhysicsStream], groups=['Online',MinBiasGroup]), ] TriggerFlags.CalibSlice.signatures = TriggerFlags.CalibSlice.signatures() + [] TriggerFlags.CosmicSlice.signatures = TriggerFlags.CosmicSlice.signatures() + [ @@ -135,7 +135,7 @@ def addP1Signatures(): ] TriggerFlags.MonitorSlice.signatures = TriggerFlags.MonitorSlice.signatures() + [ ChainProp(name='HLT_costmonitor_CostMonDS_L1All', l1SeedThresholds=['FSNOSEED'], stream=['CostMonitoring'], groups=['RATE:Monitoring','BW:Other']), - ChainProp(name='HLT_timeburner_L1All', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'], groups=['RATE:DISCARD','BW:DISCARD']), + ChainProp(name='HLT_timeburner_L1All', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'], groups=['Online','RATE:DISCARD','BW:DISCARD']), ] # Random Seeded EB chains which select at the HLT based on L1 TBP bits 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 9b516dd2d7ee7ac3bc08b3424f3f666af267ea88..c5007019874393bafe8b8735384ef2641f23c0ea 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 @@ -149,7 +149,7 @@ class Prescales(object): L1Prescales = {} # Signature name | [ HLTprescale, HLTpass-through, rerun] - # - Prescale values should be a positive integer (default=1) + # - Chains only need adding if have a Prescale value different from 1 (default) # - If the current pass_through value is non-zero, # the value given here will be used as pass_through rate # Assuming that pass through chains are configured so diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py index accecd09b2630cc7a273478bec61baa466df9193..f0d0639369a2e0b6316256237faa092839dba865 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py @@ -42,7 +42,7 @@ class ItemDef: # differently in different menus # define local flag for menu version - isV8 = '_v8' in menuName or 'LS2_v1'==menuName or 'run3_v1' in menuName + isV8 = '_v8' in menuName or 'LS2_v1' in menuName or 'run3_v1' in menuName isHIV5 = 'HI_v5' in menuName isPhaseII = '_PhaseII' in menuName diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py index 56e590f3c1ea90fd333d727d05113dd01264cd56..9e03f031f72d35aa760a3f182c03f46722767853 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Menu/MenuMapping.py @@ -17,5 +17,6 @@ menuMap = { "MC_HI_v4" : "MC_pp_v8", "PhysicsP1_pp_run3_v1" : "MC_pp_v8", "PhysicsP1_HI_run3_v1" : "MC_pp_v8", - "Dev_HI_run3_v1" : "MC_pp_v8" + "Dev_HI_run3_v1" : "MC_pp_v8", + "LS2_v1_TriggerValidation_mc_prescale" : "MC_pp_v8" } diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py b/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py index bea915b129bd6ed4a98e60b8aea6f8cdf32ddafb..c76ae391ba8f4d1c06038067943fc0180978b62a 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/share/full_menu_cf.py @@ -291,9 +291,8 @@ makeHLTTree( triggerConfigHLT=TriggerConfigHLT ) from TriggerMenuMT.HLTMenuConfig.Menu.HLTMenuJSON import generateJSON generateJSON() -from TrigConfigSvc.TrigConfigSvcCfg import createHLTPrescalesFileFromMenu -from AthenaConfiguration.AllConfigFlags import ConfigFlags -createHLTPrescalesFileFromMenu(ConfigFlags) +from TriggerMenuMT.HLTMenuConfig.Menu.HLTPrescaleJSON import generateJSON as generatePrescaleJSON +generatePrescaleJSON() from AthenaCommon.AlgSequence import dumpSequence, AthSequencer dumpSequence(topSequence)