diff --git a/Reconstruction/RecExample/RecExCond/share/RecExCommon_flags.py b/Reconstruction/RecExample/RecExCond/share/RecExCommon_flags.py index ce39b071cf73c03fa2ac9a8431cde4bd31c5a45b..ce6e4f47984bd84724813f558831cd42b936688e 100755 --- a/Reconstruction/RecExample/RecExCond/share/RecExCommon_flags.py +++ b/Reconstruction/RecExample/RecExCond/share/RecExCommon_flags.py @@ -236,12 +236,6 @@ if len(rec.AutoConfiguration())>0: #special commisioning job options if rec.Commissioning(): include("RecExCond/MinimalCommissioningSetup.py") - # setup trigger reading from COOL - if rec.doTrigger(): - from TriggerJobOpts.TriggerFlags import TriggerFlags as tf - tf.configForStartup="HLTonline" - tf.configForStartup.lock() - rec.ScopingLevel.set_Value_and_Lock(1) if rec.triggerStream().startswith('express'): diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/HLTTriggerResultGetter.py b/Trigger/TriggerCommon/TriggerJobOpts/python/HLTTriggerResultGetter.py index 73c731f3a082e001f16a7b62e91223eb01211045..2d435e81b5bb6c14b2d688c0ee9e79d6c068b271 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/HLTTriggerResultGetter.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/HLTTriggerResultGetter.py @@ -50,12 +50,6 @@ class ByteStreamUnpackGetter(Configured): def configure(self): log = logging.getLogger("ByteStreamUnpackGetter") - log.info( "TriggerFlags.dataTakingConditions: %s", TriggerFlags.dataTakingConditions() ) - hasHLT = TriggerFlags.dataTakingConditions()=='HltOnly' or TriggerFlags.dataTakingConditions()=='FullTrigger' - if not hasHLT: - log.info("Will not configure HLT BS unpacking because dataTakingConditions flag indicates HLT was disabled") - return True - # Define the decoding sequence from TrigHLTResultByteStream.TrigHLTResultByteStreamConf import HLTResultMTByteStreamDecoderAlg from TrigOutputHandling.TrigOutputHandlingConf import TriggerEDMDeserialiserAlg @@ -82,10 +76,6 @@ class ByteStreamUnpackGetterRun1or2(Configured): from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() - log.info( "TriggerFlags.dataTakingConditions: %s", TriggerFlags.dataTakingConditions() ) - # in MC this is always FullTrigger - hasHLT = TriggerFlags.dataTakingConditions() in ('HltOnly', 'FullTrigger') - # BS unpacking from TrigBSExtraction.TrigBSExtractionConf import TrigBSExtraction extr = TrigBSExtraction() @@ -95,7 +85,7 @@ class ByteStreamUnpackGetterRun1or2(Configured): extr.ExtraInputs += [("xAOD::TrigNavigation", "StoreGateSvc+TrigNavigation")] extr.ExtraOutputs += [("TrigBSExtractionOutput", "StoreGateSvc+TrigBSExtractionOutput")] - if hasHLT: + if 'HLT' in ConfigFlags.Trigger.availableRecoMetadata: from TrigNavigation.TrigNavigationConfig import HLTNavigationOffline extr.NavigationForL2 = HLTNavigationOffline("NavigationForL2") # Ignore the L2 TrigPassBits to avoid clash with EF (ATR-23411) @@ -132,6 +122,7 @@ class ByteStreamUnpackGetterRun1or2(Configured): extr.DSResultKeys += [ds_tag] else: + log.info("Will not schedule HLT bytestream extraction") # if data doesn't have HLT info set HLTResult keys as empty strings to avoid warnings # but the extraction algorithm must run extr.L2ResultKey = "" @@ -210,14 +201,14 @@ class TrigDecisionGetterRun1or2(Configured): # WritexAODTrigDecision() is called within WriteTrigDecision() # inform TD maker that some parts may be missing - if TriggerFlags.dataTakingConditions()=='Lvl1Only': + if 'HLT' not in ConfigFlags.Trigger.availableRecoMetadata: topSequence.TrigDecMaker.doL2=False topSequence.TrigDecMaker.doEF=False topSequence.TrigDecMaker.doHLT=False topSequence.TrigNavigationCnvAlg.doL2 = False topSequence.TrigNavigationCnvAlg.doEF = False topSequence.TrigNavigationCnvAlg.doHLT = False - elif TriggerFlags.dataTakingConditions()=='HltOnly': + if 'L1' not in ConfigFlags.Trigger.availableRecoMetadata: from AthenaCommon.AlgSequence import AlgSequence topSequence.TrigDecMaker.doL1=False diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py index ced5770c01f5c5a916d1f82d9292dc2286a47c02..f81713b7403dca751774314f7831978afbc9236d 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigFlags.py @@ -1,5 +1,7 @@ # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration +import os + from AthenaConfiguration.AthConfigFlags import AthConfigFlags from AthenaCommon.SystemOfUnits import GeV from AthenaCommon.Logging import logging @@ -67,7 +69,7 @@ def createTriggerFlags(): if flags.Input.Format=="BS": _log.debug("Input format is ByteStream") - if not flags.Input.Files and flags.Common.isOnline(): + if not any(flags.Input.Files) and flags.Common.isOnline: _log.info("Online reconstruction, no input file. Return default EDMVersion=%d", default_version) return default_version @@ -112,13 +114,13 @@ def createTriggerFlags(): # True if we have at least one input file, it is a POOL file, it has a metadata store, and the store has xAOD trigger configuration data # in either the run-2 or run-3 formats. - def _trigConfMeta(flags): + def __trigConfMeta(flags): from AthenaConfiguration.AutoConfigFlags import GetFileMD md = GetFileMD(flags.Input.Files) if any(flags.Input.Files) else {} return ("metadata_items" in md and any(('TriggerMenu' in key) for key in md["metadata_items"].keys())) - # Flag to sense if trigger confioguration POOL metadata is available on the job's input - flags.addFlag('Trigger.InputContainsConfigMetadata', lambda prevFlags: _trigConfMeta(prevFlags)) + # Flag to sense if trigger configuration POOL metadata is available on the job's input + flags.addFlag('Trigger.InputContainsConfigMetadata', lambda prevFlags: __trigConfMeta(prevFlags)) # only enable services for analysis and BS -> ESD processing (we need better name) flags.addFlag('Trigger.doTriggerConfigOnly', False) @@ -143,7 +145,6 @@ def createTriggerFlags(): flags.addFlag('Trigger.L1.doCTP', True) # partition name used to determine online vs offline BS result writing - import os flags.addFlag('Trigger.Online.partitionName', os.getenv('TDAQ_PARTITION') or '') # shortcut to check if job is running in a partition (i.e. partition name is not empty) @@ -170,13 +171,26 @@ def createTriggerFlags(): # geometry version used by HLT online flags.addFlag('Trigger.OnlineGeoTag', 'ATLAS-R2-2016-01-00-01') - # comissionig options - # one of: 'HltOnly', - # 'Lvl1Only', - # 'FullTrigger', - # 'NoTrigger' - flags.addFlag('Trigger.dataTakingConditions', 'FullTrigger') - + def __availableRecoMetadata(flags): + systems = ['L1','HLT'] + # Online reco without input files + if not any(flags.Input.Files) and flags.Common.isOnline: + return systems + # Makes no sense when running HLT + elif flags.Trigger.doHLT: + raise RuntimeError('Trigger.availableRecoMetadata is ill-defined if Trigger.doHLT==True') + # RAW: check if keys are in COOL + elif flags.Input.Format=="BS": + from TrigConfigSvc.TriggerConfigAccess import getKeysFromCool + keys = getKeysFromCool(flags.Input.RunNumber[0]) # currently only checking first file + return ( (['L1'] if 'L1PSK' in keys else []) + + (['HLT'] if 'HLTPSK' in keys else []) ) + # POOL: metadata (do not distinguish L1/HLT yet, see discussions on GitLab commit f83ae2bc) + else: + return systems if flags.Trigger.InputContainsConfigMetadata else [] + + # list of enabled trigger sub-systems in reconstruction: ['L1,'HLT'] + flags.addFlag('Trigger.availableRecoMetadata', lambda flags: __availableRecoMetadata(flags)) # use or not frontier proxies flags.addFlag('Trigger.triggerUseFrontier', False) @@ -227,7 +241,6 @@ def createTriggerFlags(): muonflags = createMuonConfigFlags() muonflags.Muon.useTGCPriorNextBC=True muonflags.Muon.MuonTrigger=True - return muonflags def __muonCombined(): @@ -270,10 +283,6 @@ def createTriggerFlags(): flags.addFlag("Trigger.Test.doDummyChainConfig", False) 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: - # configForStartup - # the flags related to trigger DB are redundant of triggerConfig - need to decide if they are needed in this form - # also not defined the Prescale sets yet if __name__ == "__main__": diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigGetter.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigGetter.py index 7b21fb0c667f474aecaf375bc29d63263111c711..d26696a398085c05bda34a216edee2c937d5490f 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigGetter.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerConfigGetter.py @@ -8,9 +8,9 @@ from RecExConfig.Configured import Configured from AthenaCommon.GlobalFlags import globalflags from AthenaCommon.Logging import logging -from AthenaCommon.Resilience import protectedInclude from AthenaCommon.AppMgr import ServiceMgr as svcMgr +log = logging.getLogger( "TriggerConfigGetter.py" ) class TriggerConfigGetter(Configured): """ This class brings to the job Trigger Configuration. @@ -19,7 +19,7 @@ class TriggerConfigGetter(Configured): _environment="" def __init__(self, environment=""): - log = logging.getLogger( "TriggerConfigGetter.py" ) + if environment: log.info('Initialize (environment "%s")', environment) else: @@ -28,37 +28,6 @@ class TriggerConfigGetter(Configured): super(TriggerConfigGetter,self).__init__() # calls configure - def checkInput(self): - - log = logging.getLogger( "TriggerConfigGetter.py" ) - if "ReadPool" in self._environment or "WritePool" in self._environment: - log.info("Flags are ignored, since 'ReadPool' or 'WritePool' is specified") - return True - - if rec.readESD() or rec.readAOD(): # and globalflags.DataSource()=='data': # need this for MC as well - protectedInclude("TriggerJobOpts/TriggerConfigCheckMetadata.py") - - if rec.readRDO() and globalflags.InputFormat()=='bytestream' and globalflags.DataSource()=='data' and TriggerFlags.configForStartup()!='HLToffline': - protectedInclude("TriggerJobOpts/TriggerConfigCheckHLTpsk.py") - - log.info("The following flags are set:") - log.info("globalflags.InputFormat : %s", globalflags.InputFormat()) - log.info("rec.read.* : RDO: %s, ESD: %s, AOD: %s, TAG: %s", rec.readRDO(), rec.readESD(), rec.readAOD(), rec.readTAG()) - log.info("rec.doWrite.* : ESD: %s, AOD: %s, TAG: %s", rec.doWriteESD(), rec.doWriteAOD(), rec.doWriteTAG()) - log.info("globalflags.DataSource : %s", globalflags.DataSource()) - log.info("TriggerFlags.configForStartup : %s", TriggerFlags.configForStartup()) - log.info("TriggerFlags.dataTakingConditions : %s", TriggerFlags.dataTakingConditions()) - - count = len([1 for x in [rec.readRDO(),rec.readESD(),rec.readAOD()] if x ]) #readTAG is only set with another input - if count == 0: - log.warning("Don't know what the input format is.") - return False - if count >= 2: - log.warning("More than one input format specified, please set only the appropriate one.") - return False - return True - - def setConfigSvcConnParams(self,connectionParameters): sl = [] if hasattr(svcMgr,'LVL1ConfigSvc'): @@ -100,33 +69,28 @@ class TriggerConfigGetter(Configured): def configure(self): - log = logging.getLogger( "TriggerConfigGetter.py" ) - from PyUtils.MetaReaderPeekerFull import metadata - - # first check the input - if "HIT2RDO" in self._environment: - log.info("For simulation jobs the following flags are set:") - log.info("globalflags.InputFormat : %s", globalflags.InputFormat()) - log.info("globalflags.DataSource : %s", globalflags.DataSource()) - log.info("TriggerFlags.configForStartup : %s", TriggerFlags.configForStartup()) - log.info("TriggerFlags.dataTakingConditions : %s", TriggerFlags.dataTakingConditions()) - else: - if not self.checkInput(): - log.error("Could not determine job input. Can't setup trigger configuration and will return!") - return - # self.checkInput() may call TriggerConfigCheckMetadata, this can in turn set "rec.doTrigger.set_Value_and_Lock(False)" - # but TriggerConfigGetter might have only been called in the first place due to this flag having been true, - # so re-check that we're still OK to be executing here + + log.info("The following flags are set:") + log.info("globalflags.InputFormat : %s", globalflags.InputFormat()) + log.info("globalflags.DataSource : %s", globalflags.DataSource()) + log.info("rec.read.* : RDO: %s, ESD: %s, AOD: %s, TAG: %s", rec.readRDO(), rec.readESD(), rec.readAOD(), rec.readTAG()) + log.info("rec.doWrite.* : ESD: %s, AOD: %s, TAG: %s", rec.doWriteESD(), rec.doWriteAOD(), rec.doWriteTAG()) + + # first check the input (TODO: review these environments) + if self._environment not in ["HIT2RDO", "ReadPool", "WritePool"]: + + from AthenaConfiguration.AllConfigFlags import ConfigFlags + if not ConfigFlags.Trigger.availableRecoMetadata: + log.error("At least one run does not contain any trigger configuration data. " + "Turning off trigger [rec.doTrigger=False]") + rec.doTrigger = False + + # TODO: Review doTriggerConfigOnly if not (rec.doTrigger() or TriggerFlags.doTriggerConfigOnly()): - log.info("Aborting TriggerConfigGetter as the trigger flags were switched to false in checkInput()") + log.info("Aborting TriggerConfigGetter as the trigger flags were switched to false") return True self.readTriggerDB = TriggerFlags.readMenuFromTriggerDb() and self.readRDO - self.hasxAODMeta = ( - ("metadata_items" in metadata) - and - any((('TriggerMenu' or 'MenuJSON') in key) for key in metadata["metadata_items"].keys()) - ) log.info('Creating the Trigger Configuration Services') from AthenaConfiguration.AllConfigFlags import ConfigFlags @@ -134,7 +98,7 @@ class TriggerConfigGetter(Configured): log.info("ConfigFlags.Trigger.EDMVersion: %i", ConfigFlags.Trigger.EDMVersion) if ConfigFlags.Trigger.EDMVersion >= 3: - if self.hasxAODMeta: + if ConfigFlags.Trigger.InputContainsConfigMetadata: if not hasattr(svcMgr, 'xAODConfigSvc'): from TrigConfxAOD.TrigConfxAODConf import TrigConf__xAODConfigSvc svcMgr += TrigConf__xAODConfigSvc('xAODConfigSvc') @@ -151,7 +115,7 @@ class TriggerConfigGetter(Configured): log.info("TriggerFlags.triggerCoolDbConnection is '%s' [default: '']", TriggerFlags.triggerCoolDbConnection()) - if not self.hasxAODMeta: + if not ConfigFlags.Trigger.InputContainsConfigMetadata: self.setupxAODWriting() else: log.info("Input file already has xAOD trigger metadata. Will not re-create it.") @@ -166,8 +130,6 @@ class TriggerConfigGetter(Configured): metadata. """ - # Get a logger: - log = logging.getLogger( "TriggerConfigGetter.py" ) log.info( "ESD/AOD writing enabled, will set up xAOD trigger " "configuration metadata writing" ) @@ -216,17 +178,3 @@ class TriggerConfigGetter(Configured): acc.merge( HLTPrescaleCondAlgCfg( ConfigFlags ) ) appendCAtoAthena( acc ) - # Set up the metadata for the output ESD and AOD: - from RecExConfig.ObjKeyStore import objKeyStore - metadataItems = [ "xAOD::TriggerMenuJsonContainer#MenuJSON_HLT", - "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_HLTAux.", - "xAOD::TriggerMenuJsonContainer#MenuJSON_L1", - "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_L1Aux.", - "xAOD::TriggerMenuJsonContainer#MenuJSON_HLTPS", - "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_HLTPSAux.", - "xAOD::TriggerMenuJsonContainer#MenuJSON_L1PS", - "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_L1PSAux.", - # "xAOD::TriggerMenuJsonContainer#MenuJSON_BG", // TODO - # "xAOD::TriggerMenuJsonAuxContainer#MenuJSON_BGAux.", // TODO - ] - objKeyStore.addManyTypesMetaData( metadataItems ) diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py index d76aca8cab140a747b6e6b37ad4c03e8f7589d13..f1aedfd3d129b24cdf70442315a6eee09c629866 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerFlags.py @@ -64,31 +64,13 @@ class configForStartup(JobProperty): """ A temporary flag to determine the actions to be taken for the different cases of HLT running in the startup phase""" statusOn=True allowedType=['string'] - StoredValue = 'HLTonline' - - allowedValues = [ - 'HLTonline', - 'HLToffline' - ] + StoredValue = None + def _do_action(self): + log.warning("TriggerFlags.configForStartup is deprecated. Remove it from your configuration.") _flags.append(configForStartup) -class dataTakingConditions(JobProperty): - """ A flag that describes the conditions of the Trigger at data taking, and determines which part of it will be processed in reconstruction.""" - statusOn=True - allowedType=['string'] - StoredValue = 'FullTrigger' - - allowedValues = [ - 'HltOnly', - 'Lvl1Only', - 'FullTrigger', - 'NoTrigger' - ] - -_flags.append(dataTakingConditions) - class triggerUseFrontier(JobProperty): """Flag determines if frontier should be used to connect to the oracle database, current default is False""" statusOn=True diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerRecoGetter.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerRecoGetter.py index 103c3bc46da85df21451df7c45c5e8dd3796a959..4d97a03436f50522841571556aa7c7cda77b5d60 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerRecoGetter.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerRecoGetter.py @@ -1,18 +1,9 @@ # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration -from TriggerJobOpts.TriggerFlags import TriggerFlags +from RecExConfig.Configured import Configured from AthenaCommon.Logging import logging - log = logging.getLogger( "TriggerRecoGetter.py" ) -from RecExConfig.Configured import Configured - -def withLVL1(): - return TriggerFlags.dataTakingConditions()=='Lvl1Only' or TriggerFlags.dataTakingConditions()=='FullTrigger' - -def withHLT(): - return TriggerFlags.dataTakingConditions()=='HltOnly' or TriggerFlags.dataTakingConditions()=='FullTrigger' - class TriggerRecoGetter(Configured): _configured=True @@ -39,12 +30,12 @@ class TriggerRecoGetter(Configured): from AthenaConfiguration.ComponentAccumulator import appendCAtoAthena appendCAtoAthena(tdtAcc) - if withLVL1(): + if 'L1' in ConfigFlags.Trigger.availableRecoMetadata: log.info("configuring lvl1") from TriggerJobOpts.Lvl1ResultBuilderGetter import Lvl1ResultBuilderGetter lvl1 = Lvl1ResultBuilderGetter() # noqa: F841 - if withHLT(): + if 'HLT' in ConfigFlags.Trigger.availableRecoMetadata: log.info("configuring hlt") from TriggerJobOpts.HLTTriggerResultGetter import HLTTriggerResultGetter hlt = HLTTriggerResultGetter() # noqa: F841 diff --git a/Trigger/TriggerCommon/TriggerJobOpts/share/TriggerConfigCheckHLTpsk.py b/Trigger/TriggerCommon/TriggerJobOpts/share/TriggerConfigCheckHLTpsk.py deleted file mode 100644 index 467d36e391b9f2c1f5acdf5c2f0b65c5ce318af7..0000000000000000000000000000000000000000 --- a/Trigger/TriggerCommon/TriggerJobOpts/share/TriggerConfigCheckHLTpsk.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration -from AthenaCommon.Include import include, printfunc -include.block("TriggerJobOpts/TriggerConfigCheckHLTpsk.py") - -from AthenaCommon.Logging import logging -mlog = logging.getLogger( 'TriggerConfigCheckHLTpsk' ) ## get the logger - -runNumbers=[] -from AthenaCommon.AthenaCommonFlags import athenaCommonFlags -if len(athenaCommonFlags.BSRDOInput()) > 0 : - from PyUtils.MetaReaderPeeker import metadata - if 'runNumbers' in metadata: # online monitoring does not provide a run_number in the file metadata (hence the rest of this program will be skipped) - runNumbers = metadata['runNumbers'] - -if len(runNumbers)>0: - - #from RecExConfig.RecAlgsFlags import recAlgs - #from RecExConfig.RecFlags import rec - from TriggerJobOpts.TriggerFlags import TriggerFlags - - ### Loop over the input files and find if a problematic one is there. - ### If so, turn off the trigger. - from PyCool import cool - from CoolConvUtilities.AtlCoolLib import indirectOpen - - # get connection to COOL and find the HLT ps key - - from IOVDbSvc.CondDB import conddb - coolDbConn = indirectOpen("COOLONL_TRIGGER/%s" % conddb.dbdata,oracle=True) - hltfolder=coolDbConn.getFolder('/TRIGGER/HLT/PrescaleKey') - lvl1folder=coolDbConn.getFolder('/TRIGGER/LVL1/Lvl1ConfigKey') - chansel = cool.ChannelSelection(0,0,cool.ChannelSelection.sinceBeforeChannel) - - needToTurnOffHLT = False - needToTurnOffLVL1 = False - for RunNumber in runNumbers: - # translate to begin and end IOV - iovmin=(RunNumber << 32)+0 - iovmax=((RunNumber+1) << 32)-1 - # read info from COOL - hltobjs = hltfolder.browseObjects( iovmin, iovmax, chansel) - allHltpsks = [] - while hltobjs.goToNext(): - obj=hltobjs.currentRef() - ch = obj.channelId() - hltpsk = int(obj.payloadValue("HltPrescaleKey")) # By default is a string - allHltpsks += [hltpsk] - mlog.info("HLT prescale keys for run %d are %r ", RunNumber, allHltpsks) - if len(allHltpsks) == 0: - needToTurnOffHLT = True - - # same thing for lvl1 - allLvl1psks = [] - lvl1objs = lvl1folder.browseObjects( iovmin, iovmax, chansel) - while lvl1objs.goToNext(): - obj=lvl1objs.currentRef() - ch = obj.channelId() - lvl1psk = int(obj.payloadValue("Lvl1PrescaleConfigurationKey")) - allLvl1psks += [lvl1psk] - mlog.info("LVL1 prescale keys for run %d are %r ", RunNumber, allLvl1psks) - if len(allLvl1psks) == 0: - needToTurnOffLVL1 = True - - if needToTurnOffHLT and needToTurnOffLVL1: - mlog.error("At least one run (%r) does not contain any trigger information in cool. " - "Turning off trigger [rec.doTrigger=False, and TriggerFlags.dataTakingConditions='NoTrigger']", - runNumbers) - TriggerFlags.dataTakingConditions='NoTrigger' - from RecExConfig.RecFlags import rec - rec.doTrigger=False - if 'DQMonFlags' not in dir(): - printfunc ("TriggerJobOpts/TriggerConfigCheckHLTpsk.py: DQMonFlags not yet imported - I import them now") - from AthenaMonitoring.DQMonFlags import DQMonFlags - DQMonFlags.doHLTMon.set_Value_and_Lock(False) - DQMonFlags.useTrigger.set_Value_and_Lock(False) - DQMonFlags.doLVL1CaloMon.set_Value_and_Lock(False) - DQMonFlags.doCTPMon.set_Value_and_Lock(False) - - elif needToTurnOffHLT: - mlog.warning("ERROR At least one run (%r) does not contain HLT information", runNumbers) - mlog.warning("turning off hlt [rec.doTrigger=True and TriggerFlags.dataTakingConditions='Lvl1Only'].") - TriggerFlags.dataTakingConditions='Lvl1Only' - if 'DQMonFlags' not in dir(): - printfunc ("TriggerJobOpts/TriggerConfigCheckHLTpsk.py: DQMonFlags not yet imported - I import them now") - from AthenaMonitoring.DQMonFlags import DQMonFlags - DQMonFlags.doHLTMon.set_Value_and_Lock(False) - DQMonFlags.useTrigger.set_Value_and_Lock(False) - - elif needToTurnOffLVL1: - mlog.warning("ERROR At least one run (%r) does not contain LVL1 information", runNumbers) - mlog.warning("turning off lvl1 [rec.doTrigger=True and TriggerFlags.dataTakingConditions='HltOnly'].") - TriggerFlags.dataTakingConditions='HltOnly' - if 'DQMonFlags' not in dir(): - printfunc ("TriggerJobOpts/TriggerConfigCheckHLTpsk.py: DQMonFlags not yet imported - I import them now") - from AthenaMonitoring.DQMonFlags import DQMonFlags -# DQMonFlags.doHLTMon.set_Value_and_Lock(False) - DQMonFlags.useTrigger.set_Value_and_Lock(False) - DQMonFlags.doLVL1CaloMon.set_Value_and_Lock(False) - DQMonFlags.doCTPMon.set_Value_and_Lock(False) - - - coolDbConn.closeDatabase() - diff --git a/Trigger/TriggerCommon/TriggerJobOpts/share/TriggerConfigCheckMetadata.py b/Trigger/TriggerCommon/TriggerJobOpts/share/TriggerConfigCheckMetadata.py deleted file mode 100644 index 1496a80e29639d37c4acef6e94501d1f59cb4fde..0000000000000000000000000000000000000000 --- a/Trigger/TriggerCommon/TriggerJobOpts/share/TriggerConfigCheckMetadata.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration - -from AthenaCommon.Include import include, printfunc -include.block("TriggerJobOpts/TriggerConfigCheckMetadata.py") - -from AthenaCommon.AthenaCommonFlags import athenaCommonFlags -from AthenaCommon.GlobalFlags import globalflags -from AthenaCommon.Logging import logging -from RecExConfig.RecFlags import rec -from TriggerJobOpts.TriggerFlags import TriggerFlags - -log = logging.getLogger( "TriggerConfigCheckMetadata.py" ) - -if len(athenaCommonFlags.PoolESDInput())>0 or len(athenaCommonFlags.PoolAODInput())>0 : - from PyUtils.MetaReaderPeekerFull import metadata - if 'DQMonFlags' not in dir(): - printfunc ("DataQualityMon_RecExCommon_Flags_jobOptions.py: DQMonFlags not yet imported - I import them now") - from AthenaMonitoring.DQMonFlags import DQMonFlags - - if len(metadata) > 0: - hasLVL1 = any(('/TRIGGER/LVL1/Lvl1ConfigKey' in key or 'TriggerMenu' in key) for key in metadata["metadata_items"].keys()) - hasHLT = any(('/TRIGGER/HLT/HltConfigKeys' in key or 'TriggerMenu' in key) for key in metadata["metadata_items"].keys()) - - if globalflags.DataSource()=='data': - if hasLVL1 and not hasHLT: - log.error("This pool file does not contain HLT trigger information ") - log.info("Disabling HLT monitoring, trigger aware DQMonitoring and trigger ntuples.") - TriggerFlags.dataTakingConditions.set_Value_and_Lock('Lvl1Only') - DQMonFlags.doHLTMon.set_Value_and_Lock(False) # now that some hltmon moved to ESDtoAOD - DQMonFlags.useTrigger.set_Value_and_Lock(False) - - if hasHLT and not hasLVL1: - log.error("This pool file does not contain LVL1 trigger information ") - log.info("Disabling trigger ntuples and trigger aware DQMonitoring but not HLT monitoring.") - TriggerFlags.dataTakingConditions.set_Value_and_Lock('HltOnly') - DQMonFlags.useTrigger.set_Value_and_Lock(False) - DQMonFlags.doLVL1CaloMon.set_Value_and_Lock(False) - DQMonFlags.doCTPMon.set_Value_and_Lock(False) - try: - from MuonDQAMonFlags.MuonDQAProperFlags import MuonDQADetFlags - MuonDQADetFlags.doTGCL1Mon.set_Value_and_Lock(False) - MuonDQADetFlags.doTGCMon.set_Value_and_Lock(False) - log.warning("Turning off TgcLv1RawMonitoring because lvl1 info is missing") - except Exception: - from AthenaCommon.Resilience import treatException - treatException("Could not import MuonDQADetFlags") - - if not hasHLT and not hasLVL1: - log.error("This pool file does not contain any trigger information ") - log.info("Disabling HLT monitoring and trigger aware DQMonitoring and trigger ntuples.") - TriggerFlags.dataTakingConditions.set_Value_and_Lock('NoTrigger') - rec.doTrigger.set_Value_and_Lock(False) - DQMonFlags.doHLTMon.set_Value_and_Lock(False) - DQMonFlags.useTrigger.set_Value_and_Lock(False) - DQMonFlags.doLVL1CaloMon.set_Value_and_Lock(False) - DQMonFlags.doCTPMon.set_Value_and_Lock(False) - try: - from MuonDQAMonFlags.MuonDQAProperFlags import MuonDQADetFlags - MuonDQADetFlags.doTGCL1Mon.set_Value_and_Lock(False) - MuonDQADetFlags.doTGCMon.set_Value_and_Lock(False) - log.warning("Turning off TgcLv1RawMonitoring because all trigger info is missing") - except Exception: - from AthenaCommon.Resilience import treatException - treatException("Could not import MuonDQADetFlags") - - else: - if hasLVL1 and not hasHLT: - log.info("This pool file does not contain HLT trigger information ") - TriggerFlags.dataTakingConditions.set_Value_and_Lock('Lvl1Only') - - if hasHLT and not hasLVL1: - log.info("This pool file does not contain LVL1 trigger information ") - TriggerFlags.dataTakingConditions.set_Value_and_Lock('HltOnly') - - if not hasHLT and not hasLVL1: - log.info("This pool file does not contain any trigger information, setting rec.doTrigger to False") - TriggerFlags.dataTakingConditions.set_Value_and_Lock('NoTrigger') - rec.doTrigger.set_Value_and_Lock(False) - - else: - log.warning("Either file(s) does not have key 'metadata' or something strange is happening.") -else: - log.warning("Wrong flags setting for pool input, try calling TriggerConfigGetter with 'ReadPool' or 'WritePool' as argument.")