diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py index 35e1889d2ed0989dd06a1b18e0ff46d548b1455d..16edb349cb7f3b4a8947114885f8e44c59bdfa08 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfig.py @@ -31,6 +31,8 @@ def collectHypos( steps ): if 'HypoInputDecisions' in alg.getProperties(): __log.info( "found hypo " + alg.name() + " in " +stepSeq.name() ) hypos[stepSeq.name()].append( alg ) + else: + __log.info("DID NOT FIND HYPO" + alg.name()) return hypos def __decisionsFromHypo( hypo ): diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py index abaa584fd3f61cf9dace5a40a4013edd02ffcbef..119e757f71fe5d17859610240ee3e52ce0df47af 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/ElectronDef.py @@ -5,98 +5,70 @@ logging.getLogger().info("Importing %s",__name__) log = logging.getLogger("TriggerMenuMT.HLTMenuConfig.Egamma.ElectronDef") - +from TriggerMenuMT.HLTMenuConfig.Menu.ChainConfigurationBase import ChainConfigurationBase from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep, RecoFragmentsPool from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT +from TrigUpgradeTest.electronMenuDefs import fastCaloSequence, electronSequence + +#---------------------------------------------------------------- +# fragments generating configuration will be functions in New JO, +# so let's make them functions already now +#---------------------------------------------------------------- -# fragments generating configuration will be functions in New JO, so let's make them functions already now def fastCaloSequenceCfg( flags ): - from TrigUpgradeTest.electronMenuDefs import fastCaloSequence return fastCaloSequence() def electronSequenceCfg( flags ): - from TrigUpgradeTest.electronMenuDefs import electronSequence return electronSequence() -def generateChain(flags, chainDict ): # in New JO we will add flags here - chainDict = type("chainDict", (object,), chainDict) - # translation from chainDict["chainName"] to chainDict.chainName (less typing), - # it is not exact as the things like the multiplicity are not converted to int, however they should be made int in the first place - # - - # this is the cache, we hope we will be able to get rid of it in future - fastCalo = RecoFragmentsPool.retrieve( fastCaloSequenceCfg, None ) # the None will be used for flags in future - electronReco = RecoFragmentsPool.retrieve( electronSequenceCfg, None ) - - return Chain(name = chainDict.chainName, - Seed = chainDict.L1item, - ChainSteps = [ - ChainStep('ElectronStep1', [fastCalo]), - ChainStep('ElectronStep2', [electronReco]) - ]) - - - - -class Chain_electron: +#---------------------------------------------------------------- +# Class to configure chain +#---------------------------------------------------------------- +class ElectronChainConfiguration(ChainConfigurationBase): def __init__(self, chainDict): - - self.chainSteps = [] - - self.chainPart = chainDict['chainParts'] - self.chainName = chainDict['chainName'] - self.chainL1Item = chainDict['L1item'] - self.chainPartL1Item = self.chainPart['L1item'] - self.mult = int(self.chainPart['multiplicity']) - self.chainPartName = self.chainPart['chainPartName'] - self.chainPartNameNoMult = self.chainPartName[1:] if self.mult > 1 else self.chainPartName - self.chainPartNameNoMult += "_"+self.chainL1Item - - + ChainConfigurationBase.__init__(self,chainDict) + + # ---------------------- + # Assemble the chain depending on information from chainName + # ---------------------- def assembleChain(self): myStepNames = [] chainSteps = [] - if 'etcut' in self.chainName: + log.debug("Assembling chain for " + self.chainName) + # -------------------- + # define here the names of the steps and obtain the chainStep configuration + # -------------------- + if 'etcut' in self.chainName: myStepNames += ["Step1_etcut"] - myStepNames += ["Step2_etcut"] - + myStepNames += ["Step2_etcut"] for step in myStepNames: - chainSteps += [self.getStep(step)] - - - self.chainSteps = chainSteps - myChain = Chain(name = self.chainName, - Seed = self.chainL1Item, - ChainSteps = self.chainSteps) + chainSteps += [self.getEtCutStep(step)] + log.debug("chainSteps are: ", chainSteps ) + else: + raise RuntimeError("Chain configuration unknown for chain: " + self.chainName ) + + myChain = self.buildChain(chainSteps) return myChain - - - def getFastCaloStep(self, stepName): - fastCaloStep= fastCaloSequence() - step1=ChainStep(stepName, [fastCaloStep]) - return step1 - - def getElectronStep(self, stepName): - electronStep= electronSequence() - step2=ChainStep(stepName, [electronStep]) - return step2 - def getStep(self, name): - myTriggerConfigHLT = TriggerConfigHLT.currentTriggerConfig() - if name in myTriggerConfigHLT.allChainSteps: - return myTriggerConfigHLT.allChainSteps[name] - log.debug("ChainStep has not been configured so far, add to the list!") - if name == "Step1_etcut": - chainStep = self.getFastCaloStep(name) - elif name == "Step2_etcut": - chainStep = self.getElectronStep(name) - else: - raise RuntimeError("chainStepName unknown: " + name ) + # -------------------- + # Configuration of etcut chain + # -------------------- + def getEtCutStep(self, stepName): + if stepName == "Step1_etcut": + log.debug("Configuring step " + stepName) + fastCalo = RecoFragmentsPool.retrieve( fastCaloSequenceCfg, None ) # the None will be used for flags in future + chainStep =ChainStep(stepName, [fastCalo]) + elif stepName == "Step2_etcut": + log.debug("Configuring step " + stepName) + electronReco = RecoFragmentsPool.retrieve( electronSequenceCfg, None ) + chainStep=ChainStep(stepName, [electronReco]) + else: + raise RuntimeError("chainStepName unknown: " + stepName ) - myTriggerConfigHLT.allChainSteps[name]= chainStep + log.debug("Returning chainStep from getEtCutStep function: " + stepName) return chainStep diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/generateElectronChainDefs.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/generateElectronChainDefs.py index e58b5f4b36a900036e31acb04ea260f1c705e27a..6634c719aa25899b3665fdad2d9e828cf573ae4b 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/generateElectronChainDefs.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Egamma/generateElectronChainDefs.py @@ -1,9 +1,8 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronDef import generateChain as generateElectronChain from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitChainDict -#from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronDef import Chain_electron as Chain_electron +from TriggerMenuMT.HLTMenuConfig.Egamma.ElectronDef import ElectronChainConfiguration as ElectronChainConfiguration from AthenaCommon.Logging import logging @@ -21,11 +20,8 @@ def generateChainConfigs( chainDict ): listOfChainDefs = [] for subChainDict in listOfChainDicts: - log.debug("IN ELECTRON GENERATION CODE") - Electron = generateElectronChain( None, subChainDict ) - #Electron = Chain_electron(subChainDict).assembleChain() - + Electron = ElectronChainConfiguration(subChainDict).assembleChain() listOfChainDefs += [Electron] log.debug('length of chaindefs %s', len(listOfChainDefs) ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainConfigurationBase.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainConfigurationBase.py new file mode 100644 index 0000000000000000000000000000000000000000..6b70ec409f90502dff480b94cac1d9016218ff2e --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/ChainConfigurationBase.py @@ -0,0 +1,42 @@ +# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + + +from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import Chain, ChainStep, RecoFragmentsPool + +#---------------------------------------------------------------- +# Base class to configure chain +#---------------------------------------------------------------- +class ChainConfigurationBase: + + def __init__(self, chainDict): + + # Consider using translation from dict["chainName"] to dict.chainName (less typing), + # though need to be able to access list of dictionaries as value of chainPart as well + # dict = type("dict", (object,), dict) + + self.dict = {} + self.dict.update(chainDict) + + self.chainName = self.dict['chainName'] + self.chainL1Item = self.dict['L1item'] + + self.chainPart = self.dict['chainParts'] + self.chainPartL1Item = self.chainPart['L1item'] + self.mult = int(self.chainPart['multiplicity']) + self.chainPartName = self.chainPart['chainPartName'] + self.chainPartNameNoMult = self.chainPartName[1:] if self.mult > 1 else self.chainPartName + self.chainPartNameNoMult += "_"+self.chainL1Item + + + # this is the cache, hoping to be able to get rid of it in future + def checkRecoFragmentPool(mySequenceCfg): + mySequence = RecoFragmentsPool.retrieve(mySequenceCfg, None) # the None will be used for flags in future + return mySequence + + def buildChain(self, chainSteps): + myChain = Chain(name = self.chainName, + Seed = self.chainL1Item, + ChainSteps = chainSteps) + return myChain + + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py index 1205f0a54f9fcacd00c6b289a51f27db0a75252d..e0acb90930cac7017fffaded7ed530a7a92e887b 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/GenerateMenuMT.py @@ -51,13 +51,13 @@ class GenerateMenuMT: def setTriggerConfigHLT(self): # setting the hlt menu configuration - #(HLTPrescales) = self.setupMenu() + (HLTPrescales) = self.setupMenu() self.triggerConfigHLT = TriggerConfigHLT(TriggerFlags.outputHLTconfigFile()) self.triggerConfigHLT.menuName = TriggerFlags.triggerMenuSetup() log.debug("Working with menu: %s", self.triggerConfigHLT.menuName) - def getChainConfig(self, chainDicts): + def generateChainConfig(self, chainDicts): """ == Assembles the chain configuration and returns a chain object with (name, L1see and list of ChainSteps) """ @@ -86,11 +86,8 @@ class GenerateMenuMT: chainConfigs = TriggerMenuMT.HLTMenuConfig.Egamma.generateElectronChainDefs.generateChainConfigs(chainDict) except: log.exception( 'Problems creating ChainDef for chain\n %s ' % (chainDict['chainName']) ) - - continue - else: - + else: log.error('Chain %s ignored - either trigger signature is turned off or the corresponding chain dictionary cannot be read.' %(chainDict['chainName'])) log.debug('Chain dictionary of failed chain is %s.', chainDict) @@ -103,7 +100,7 @@ class GenerateMenuMT: if len(listOfChainConfigs) == 0: log.error('No Chain Configuration found ') - return None + return False elif len(listOfChainConfigs)>1: if ("mergingStrategy" in chainDicts[0].keys()): @@ -127,16 +124,17 @@ class GenerateMenuMT: log.debug('Creating one big list of of enabled signatures and chains') chains = [] - # we can already use new set of flags - from AthenaConfiguration.AllConfigFlags import ConfigFlags - from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1_newJO import setupMenu as setupMenuFlags - setupMenuFlags( ConfigFlags ) - ConfigFlags.lock() + ## we can already use new set of flags + #from AthenaConfiguration.AllConfigFlags import ConfigFlags + #from TriggerMenuMT.HLTMenuConfig.Menu.LS2_v1_newJO import setupMenu as setupMenuFlags + #setupMenuFlags( ConfigFlags ) + #ConfigFlags.lock() - #if (TriggerFlags.CombinedSlice.signatures() or TriggerFlags.EgammaSlice.signatures()) and self.doEgammaChains: - if ConfigFlags.Trigger.menu.electron and self.doEgammaChains: - chains += ConfigFlags.Trigger.menu.electron - log.debug("egamma chains "+str(ConfigFlags.Trigger.menu.egamma)) + #if ConfigFlags.Trigger.menu.electron and self.doEgammaChains: + if (TriggerFlags.CombinedSlice.signatures() or TriggerFlags.EgammaSlice.signatures()) and self.doEgammaChains: + chains += TriggerFlags.EgammaSlice.signatures() + #chains += ConfigFlags.Trigger.menu.electron + #log.debug("egamma chains "+str(ConfigFlags.Trigger.menu.egamma)) else: self.doEgammaChains = False @@ -191,9 +189,9 @@ class GenerateMenuMT: # 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(self.triggerConfigHLT) - #return (self.HLTPrescales) - pass + (self.L1Prescales, self.HLTPrescales) = MenuPrescaleConfig(self.triggerConfigHLT) + return (self.HLTPrescales) + #pass @@ -214,7 +212,7 @@ class GenerateMenuMT: chainDict['chainCounter'] = chainCounter log.debug("Next: getting chain configuration for chain %s ", chain) - chainConfig= self.getChainConfig(chainDict) + chainConfig= self.generateChainConfig(chainDict) log.debug("Finished with retrieving chain configuration for chain %s", chain) self.triggerConfigHLT.allChainConfigs.append(chainConfig) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py index eebff07b51d8c67c455f0845dc3cf857c8c16608..ee607522968ab934603d3f54ba3980349cf8479d 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py @@ -37,10 +37,9 @@ def setupMenu(): ] TriggerFlags.EgammaSlice.signatures = [ - ['e3_etcut1step', 'L1_EM3', [], [PhysicsStream], ['RATE:SingleElectron', 'BW:Electron'], -1], - ['e3_etcut', 'L1_EM3', [], [PhysicsStream], ['RATE:SingleElectron', 'BW:Electron'], -1], - ['e5_etcut', 'L1_EM3', [], [PhysicsStream], ['RATE:SingleElectron', 'BW:Electron'], -1], - ['e7_etcut', 'L1_EM3', [], [PhysicsStream], ['RATE:SingleElectron', 'BW:Electron'], -1], + ['HLT_e3_etcut', 'L1_EM3', [], [PhysicsStream], ['RATE:SingleElectron', 'BW:Electron'], -1], + ['HLT_e5_etcut', 'L1_EM3', [], [PhysicsStream], ['RATE:SingleElectron', 'BW:Electron'], -1], + ['HLT_e7_etcut', 'L1_EM3', [], [PhysicsStream], ['RATE:SingleElectron', 'BW:Electron'], -1], #['e20', 'L1_EM10', [], [PhysicsStream], ['RATE:SingleElectron', 'BW:Electron'], -1], ] TriggerFlags.CombinedSlice.signatures = [ diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py index 66db49a5a03a35ee03791af1f4490c169e43cc21..39d58c7199c76ac048608b6cb571e6a56fae698a 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/MenuComponents.py @@ -209,7 +209,7 @@ class ComboMaker(AlgNode): def addChain(self, chain): log.debug("ComboMaker %s adding chain %s"%(self.Alg.name(),chain)) - from MenuChains import getConfFromChainName + from TriggerMenuMT.HLTMenuConfig.Menu.MenuChains import getConfFromChainName confs=getConfFromChainName(chain) for conf in confs: seed=conf.replace("HLT_", "") @@ -380,7 +380,7 @@ class Chain: def decodeHypoToolConfs(self): """ This is extrapolating the hypotool configuration from the (combined) chain name""" from TriggerMenuMT.HLTMenuConfig.Menu.MenuChains import getConfFromChainName - signatures = getConfFromChainName(self.name) + signatures = getConfFromChainName(self.name) #currently a lis of chainPart names for step in self.steps: if len(signatures) != len(step.sequences): log.error("Error in step %s: found %d signatures and %d sequences"%(step.name, len(signatures), len(step.sequences))) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/TriggerConfigHLT.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/TriggerConfigHLT.py index 5d44149900cb95038dd9b1670009695b5cd45154..9fbb2bfada605804052a17b23a5fdee56faf0af1 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/TriggerConfigHLT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/TriggerConfigHLT.py @@ -15,7 +15,6 @@ class TriggerConfigHLT: return TriggerConfigHLT.sCurrentTriggerConfig currentTriggerConfig = staticmethod(currentTriggerConfig) - def __init__(self, hltfile=None): self.menuName = 'TestMenu' self.__HLTFile = hltfile diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py index 0c3ffce84b7b42a900403d32138f2c59c8787d08..479bd89244b6e7df1a93653ad308c8d8847b1dea 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/generateMenuMT.py @@ -61,5 +61,3 @@ g.generateMT() - - diff --git a/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh b/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh index bba2ef6c262f350f5b3adfffd1fc0dfc818e0441..9bc1327118ebb207d9f983e7783940f6b9d30498 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh +++ b/Trigger/TriggerCommon/TriggerMenuMT/scripts/test_HLTmenu.sh @@ -1,3 +1,4 @@ #!bin/sh + athena -l DEBUG --threads=1 --skipEvents=10 --evtMax=20 --filesInput="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1" TriggerMenuMT/generateMT.py diff --git a/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py b/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py index e2af3b1baa4c8b0094a4eab27a94a9ea91a99c6d..5c6ac07101f5e6adcf37008c9ed5f8c4289ecc4d 100755 --- a/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/share/generateMT.py @@ -36,6 +36,11 @@ for unpack in topSequence.L1DecoderTest.rerunRoiUnpackers: # Menu and CF construction ########################################## +from TriggerJobOpts.TriggerFlags import TriggerFlags +TriggerFlags.triggerMenuSetup = "LS2_v1" + + + from TriggerMenuMT.HLTMenuConfig.Menu.GenerateMenuMT import GenerateMenuMT g = GenerateMenuMT() g.generateMT()