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 from AthenaCommon.CFElements import seqAND decoder = HLTResultMTByteStreamDecoderAlg() deserialiser = TriggerEDMDeserialiserAlg("TrigDeserialiser") decodingSeq = seqAND("HLTDecodingSeq") decodingSeq += decoder # BS -> HLTResultMT decodingSeq += deserialiser # HLTResultMT -> xAOD # Append the decoding sequence to topSequence from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() topSequence += decodingSeq log.debug("Configured HLT result BS decoding sequence") return True
def configure(self): log = logging.getLogger("TrigDecisionGetterRun2") from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() #if hasOnlyLVL1: #from RecExConfig.ObjKeyStore import objKeyStore #objKeyStore.addStreamESD('TrigDec::TrigDecision','TrigDecision') #objKeyStore.addStreamAOD('TrigDec::TrigDecision','TrigDecision') from RecExConfig.RecFlags import rec if ( rec.doWriteESD() or rec.doWriteAOD() or rec.doESD() or rec.doAOD() ) and \ ( not ( rec.readAOD() or rec.readESD() or rec.doWriteBS()) ): log.info("Will write TrigDecision object to storegate") from TrigDecisionMaker.TrigDecisionMakerConfig import WriteTrigDecision trigDecWriter = WriteTrigDecision() # noqa: F841 # WritexAODTrigDecision() is called within WriteTrigDecision() # inform TD maker that some parts may be missing if TriggerFlags.dataTakingConditions() == 'Lvl1Only': 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': from AthenaCommon.AlgSequence import AlgSequence topSequence.TrigDecMaker.doL1 = False # Decide based on the doMergedHLTResult to assume a merged, or a # split HLT: if not TriggerFlags.doMergedHLTResult(): topSequence.TrigDecMaker.doHLT = False topSequence.TrigNavigationCnvAlg.doL2 = False topSequence.TrigNavigationCnvAlg.doHLT = False else: topSequence.TrigDecMaker.doL2 = False topSequence.TrigDecMaker.doEF = False topSequence.TrigNavigationCnvAlg.doL2 = False topSequence.TrigNavigationCnvAlg.doEF = False pass else: log.info("Will not write TrigDecision object to storegate") return True
def checkPoolFileForRunLevel(poolfilename): folderName = { "L1M": "_TRIGGER_LVL1_Menu", "HLTM": "_TRIGGER_HLT_Menu", "L1K": "_TRIGGER_LVL1_Lvl1ConfigKey", "HLTK": "_TRIGGER_HLT_HltConfigKeys", "L1PS": "_TRIGGER_LVL1_Prescales" } MetaDataTree.Add(poolfilename + '/MetaData') mdt = AthenaROOTAccess.transientTree.makeTree( MetaDataTree, persTreeName='MetaData', dhTreeName='MetaDataHdrDataHeader') l1keys = [] hltkeys = [] if hasattr(mdt, folderName["L1K"]): br = mdt.GetBranch(folderName["L1K"]) for i in range(mdt.GetEntries()): br.GetEntry(i) metaData = getattr(mdt, br.GetName()) plc = metaData.payloadContainer() for payload in plc.iter(): for i in range(payload.size()): chanNum = int(payload.chanNum(i)) l1keys += [ payload.attributeList(chanNum) ["Lvl1PrescaleConfigurationKey"].data("unsigned int")() ] if hasattr(mdt, folderName["HLTK"]): br = mdt.GetBranch(folderName["HLTK"]) for i in range(mdt.GetEntries()): br.GetEntry(i) metaData = getattr(mdt, br.GetName()) plc = metaData.payloadContainer() for payload in plc.iter(): for i in range(payload.size()): chanNum = int(payload.chanNum(i)) hltkeys += [ payload.attributeList(chanNum) ["HltPrescaleConfigurationKey"].data("unsigned int")() ] mlog.info("File contained these LVL1 prescale keys: %r", l1keys) mlog.info("File contained these HLT prescale keys: %r", hltkeys) hasL1 = len(l1keys) > 0 and 0 not in l1keys hasHLT = len(hltkeys) > 0 and 0 not in hltkeys from TriggerJobOpts.TriggerFlags import TriggerFlags if hasL1 or hasHLT: if hasL1 and hasHLT: TriggerFlags.dataTakingConditions = 'FullTrigger' elif hasL1: TriggerFlags.dataTakingConditions = 'Lvl1Only' else: TriggerFlags.dataTakingConditions = 'HltOnly' mlog.info("Set TriggerFlags.dataTakingConditions to '%s'", TriggerFlags.dataTakingConditions())
def checkInput(self): self.checkFileMetaData() 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()) log.info("TriggerFlags.configurationSourceList: %s", TriggerFlags.configurationSourceList()) 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 withHLT(): return TriggerFlags.dataTakingConditions( ) == 'HltOnly' or TriggerFlags.dataTakingConditions() == 'FullTrigger'
def withLVL1(): return TriggerFlags.dataTakingConditions( ) == 'Lvl1Only' or TriggerFlags.dataTakingConditions() == 'FullTrigger'
alg = xAODMaker__TrigDecisionCnvAlg() alg.AODKey = "TrigDecision" alg.xAODKey = "xTrigDecision" topSequence.insert(idx+1, alg) from xAODTriggerCnv.xAODTriggerCnvConf import xAODMaker__TrigNavigationCnvAlg topSequence.insert(idx+2, xAODMaker__TrigNavigationCnvAlg()) from AthenaCommon.AppMgr import ServiceMgr, ToolSvc from TrigDecisionTool.TrigDecisionToolConf import * if hasattr(ToolSvc, 'TrigDecisionTool'): ToolSvc.TrigDecisionTool.TrigDecisionKey = "TrigDecision" ToolSvc.TrigDecisionTool.UseAODDecision = True # inform TD maker that some parts may be missing if TriggerFlags.dataTakingConditions()=='Lvl1Only': topSequence.TrigDecMaker.doL2=False topSequence.TrigDecMaker.doEF=False topSequence.TrigDecMaker.doHLT=False elif TriggerFlags.dataTakingConditions()=='HltOnly': from AthenaCommon.AlgSequence import AlgSequence topSequence.TrigDecMaker.doL1=False # Decide based on the run number whether to assume a merged, or a # split HLT: if not TriggerFlags.doMergedHLTResult(): topSequence.TrigDecMaker.doHLT = False else: topSequence.TrigDecMaker.doL2 = False topSequence.TrigDecMaker.doEF = False _TriggerESDList = {}
def configure(self): log = logging.getLogger("ByteStreamUnpackGetterRun2") from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() #if TriggerFlags.readBS(): log.info("TriggerFlags.dataTakingConditions: %s", TriggerFlags.dataTakingConditions()) # in MC this is always FullTrigger hasHLT = TriggerFlags.dataTakingConditions( ) == 'HltOnly' or TriggerFlags.dataTakingConditions() == 'FullTrigger' if hasHLT: # Decide based on the run number whether to assume a merged, or a # split HLT: if not TriggerFlags.doMergedHLTResult(): ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "HLT::HLTResult/HLTResult_L2", "HLT::HLTResult/HLTResult_EF" ] else: ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "HLT::HLTResult/HLTResult_HLT" ] pass pass # BS unpacking from TrigBSExtraction.TrigBSExtractionConf import TrigBSExtraction extr = TrigBSExtraction() # Add fictional output to ensure data dependency in AthenaMT extr.ExtraOutputs += [("TrigBSExtractionOutput", "StoreGateSvc+TrigBSExtractionOutput")] if hasHLT: from TrigNavigation.TrigNavigationConfig import HLTNavigationOffline extr.Navigation = HLTNavigationOffline() from TrigEDMConfig.TriggerEDM import getEDMLibraries extr.Navigation.Dlls = getEDMLibraries() from TrigEDMConfig.TriggerEDM import getPreregistrationList extr.Navigation.ClassesToPreregister = getPreregistrationList( TriggerFlags.EDMDecodingVersion()) if TriggerFlags.doMergedHLTResult(): extr.L2ResultKey = "" extr.EFResultKey = "" else: extr.HLTResultKey = "" # # Configure DataScouting # from PyUtils.MetaReaderPeeker import metadata if 'stream' in metadata: stream_local = metadata['stream'] if stream_local.startswith( 'calibration_DataScouting_' ) or TriggerFlags.doAlwaysUnpackDSResult(): if 'calibration' in stream_local and 'DataScouting_' in stream_local: ds_tag = stream_local[12:27] ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "HLT::HLTResult/" + ds_tag ] extr.DSResultKeys += [ds_tag] else: #if data doesn't have HLT info set HLTResult keys as empty strings to avoid warnings # but the extr alg must run extr.L2ResultKey = "" extr.EFResultKey = "" extr.HLTResultKey = "" extr.DSResultKeys = [] topSequence += extr from TrigSerializeTP.TrigSerializeTPConf import TrigSerTPTool TrigSerToolTP = TrigSerTPTool('TrigSerTPTool') from AthenaCommon.AppMgr import ToolSvc ToolSvc += TrigSerToolTP from TrigEDMConfig.TriggerEDM import getTPList TrigSerToolTP.TPMap = getTPList((TriggerFlags.EDMDecodingVersion())) from TrigSerializeCnvSvc.TrigSerializeCnvSvcConf import TrigSerializeConvHelper TrigSerializeConvHelper = TrigSerializeConvHelper(doTP=True) ToolSvc += TrigSerializeConvHelper # # Configure L1Topo validation data algorithm # if hasHLT and TriggerFlags.doMergedHLTResult( ) and TriggerFlags.writeL1TopoValData(): # make sure that CTP_RDO is known (see also ATR-14683) ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "CTP_RDO/CTP_RDO" ] from L1TopoValDataCnv.L1TopoValDataCnvConf import xAODMaker__L1TopoValDataCnvAlg L1TopoValDataCvnAlg = xAODMaker__L1TopoValDataCnvAlg() topSequence += L1TopoValDataCvnAlg return True
def configure(self): log = logging.getLogger("ByteStreamUnpackGetter.py") from AthenaCommon.AlgSequence import AlgSequence topSequence = AlgSequence() #if TriggerFlags.readBS(): log.info( "TriggerFlags.dataTakingConditions: %s" % TriggerFlags.dataTakingConditions() ) # in MC this is always FullTrigger hasHLT = TriggerFlags.dataTakingConditions()=='HltOnly' or TriggerFlags.dataTakingConditions()=='FullTrigger' if hasHLT: from AthenaCommon.AppMgr import ServiceMgr # Decide based on the run number whether to assume a merged, or a # split HLT: if not TriggerFlags.doMergedHLTResult(): ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "HLT::HLTResult/HLTResult_L2", "HLT::HLTResult/HLTResult_EF" ] else: ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "HLT::HLTResult/HLTResult_HLT" ] pass pass # BS unpacking from TrigBSExtraction.TrigBSExtractionConf import TrigBSExtraction extr = TrigBSExtraction() if hasHLT: from TrigNavigation.TrigNavigationConfig import HLTNavigationOffline extr.Navigation = HLTNavigationOffline() from TrigEDMConfig.TriggerEDM import getEDMLibraries extr.Navigation.Dlls = getEDMLibraries() from TrigEDMConfig.TriggerEDM import getPreregistrationList extr.Navigation.ClassesToPreregister = getPreregistrationList(TriggerFlags.EDMDecodingVersion()) if TriggerFlags.doMergedHLTResult(): extr.L2ResultKey="" extr.EFResultKey="" else: extr.HLTResultKey="" # # Configure DataScouting # from RecExConfig.InputFilePeeker import inputFileSummary if inputFileSummary['bs_metadata']['Stream'].startswith('calibration_DataScouting_') or TriggerFlags.doAlwaysUnpackDSResult(): for stag in inputFileSummary['stream_tags']: if (stag['stream_type'] == 'calibration') and (stag['stream_name'].startswith('DataScouting_')): ds_tag = stag['stream_name'][0:15] ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "HLT::HLTResult/"+ds_tag ] extr.DSResultKeys += [ ds_tag ] else: #if data doesn't have HLT info set HLTResult keys as empty strings to avoid warnings # but the extr alg must run extr.L2ResultKey="" extr.EFResultKey="" extr.HLTResultKey="" extr.DSResultKeys=[] topSequence += extr from TrigSerializeTP.TrigSerializeTPConf import TrigSerTPTool TrigSerToolTP = TrigSerTPTool('TrigSerTPTool') from AthenaCommon.AppMgr import ToolSvc ToolSvc += TrigSerToolTP from TrigEDMConfig.TriggerEDM import getTPList TrigSerToolTP.TPMap = getTPList((TriggerFlags.EDMDecodingVersion())) from TrigSerializeCnvSvc.TrigSerializeCnvSvcConf import TrigSerializeConvHelper TrigSerializeConvHelper = TrigSerializeConvHelper(doTP = True) ToolSvc += TrigSerializeConvHelper # # Configure L1Topo validation data algorithm # if hasHLT and TriggerFlags.doMergedHLTResult() and TriggerFlags.writeL1TopoValData() : # make sure that CTP_RDO is known (see also ATR-14683) ServiceMgr.ByteStreamAddressProviderSvc.TypeNames += [ "CTP_RDO/CTP_RDO" ] from L1TopoValDataCnv.L1TopoValDataCnvConf import xAODMaker__L1TopoValDataCnvAlg L1TopoValDataCvnAlg = xAODMaker__L1TopoValDataCnvAlg() topSequence += L1TopoValDataCvnAlg return True
def configure(self): log = logging.getLogger("TriggerConfigGetter.py") # first check the input if "HIT2RDO" in self._environment: TriggerFlags.doLVL2 = False TriggerFlags.doEF = False 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()) log.info("TriggerFlags.doLVL2 : %s" % TriggerFlags.doLVL2()) log.info("TriggerFlags.doEF : %s" % TriggerFlags.doEF()) else: if not self.checkInput(): log.error( "Could not determine job input. Can't setup trigger configuration and will return!" ) return self.readPool = globalflags.InputFormat() == 'pool' self.readRDO = rec.readRDO() self.writeESDAOD = rec.doWriteESD() or rec.doWriteAOD( ) or rec.doWriteDPD() self.ConfigSrcList = TriggerFlags.configurationSourceList() self.readMC = globalflags.DataSource( ) == 'geant3' or globalflags.DataSource() == 'geant4' self.readTriggerDB = TriggerFlags.readMenuFromTriggerDb( ) and self.readRDO self.isCommisioning = globalflags.DataSource( ) == 'data' and globalflags.DetGeo() == 'commis' self.l1Folders = TriggerFlags.dataTakingConditions( ) == 'FullTrigger' or TriggerFlags.dataTakingConditions() == 'Lvl1Only' self.hltFolders = TriggerFlags.dataTakingConditions( ) == 'FullTrigger' or TriggerFlags.dataTakingConditions() == 'HltOnly' self.isRun1Data = False if globalflags.DataSource() == 'data': from RecExConfig.AutoConfiguration import GetRunNumber runNumber = GetRunNumber() if runNumber > 0 and runNumber < 230000: self.isRun1Data = True self.isTriggerReprocessing = False # the TriggerFlags.readMenuFromTriggerDb() tells us that we read the trigger menu from the database # the connection itself is defined in TriggerFlags.triggerDbConnection() # reading from the TriggerDB can mean different things: # a) TriggerFlags doLVL2() and doEF() are both False: # - create a tmp sqlite file with the conditions (menu) # - use DSConfigSvc # b) TriggerFlags doLVL2() or doEF() is True: # - use HLTConfigSvc if self.readTriggerDB and (TriggerFlags.doLVL2() or TriggerFlags.doEF() or TriggerFlags.doHLT()): self.ConfigSrcList = [ 'xml' ] # to use L1/HLTConfigSvc and not DSConfigSvc, but only if we are running the HLT if self._environment: # I don't think anyone calls TriggerConfigGetter with an argument self.readPool = False self.writeESDAOD = False self.readHits = False if "ReadPoolRDO" in self._environment: self.readPool = True self.readRDO = True elif "ReadPool" in self._environment: self.readPool = True self.readRDO = False if "WritePool" in self._environment: self.writeESDAOD = True if "HIT2RDO" in self._environment: self.readRDO = False self.readHits = True # define ConfigSvc if not self.ConfigSrcList: if (self.readPool and not self.readRDO) or ( self.readRDO and not self.readPool): # (ESD, AOD, DPD) or (RDO-BS) self.ConfigSrcList = ['ds'] elif (self.readRDO and self.readPool ) or rec.readTAG() or self.readHits: # (RDO-MC) or TAG self.ConfigSrcList = ['xml'] else: # should not get here: should be found by checkInput log.fatal('no reading of BS, RDO, AOD, ESD, or TAG specified') # we need the temporary COOL database, if we read the configuration from XML and write ESD/AOD (or have 'ds' set for some reason) self.makeTempCool = self.readRDO and \ ( self.writeESDAOD or 'ds' in self.ConfigSrcList ) and \ ( self.readMC \ or (self.isCommisioning and (TriggerFlags.readLVL1configFromXML() and TriggerFlags.readHLTconfigFromXML())) \ or TriggerFlags.readMenuFromTriggerDb() ) log.info("Need to create temporary cool file? : %r" % self.makeTempCool) log.info('Creating the Trigger Configuration Services') self.svc = SetupTrigConfigSvc() #set the merged system #self.svc.doMergedHLT = TriggerFlags.doHLT() if 'xml' in self.ConfigSrcList or self.makeTempCool: # sets them if plain XML reading is to be used self.svc.l1topoXmlFile = TriggerFlags.outputL1TopoConfigFile( ) # generated in python self.svc.l1XmlFile = TriggerFlags.outputLVL1configFile( ) # generated in python self.svc.hltXmlFile = TriggerFlags.outputHLTconfigFile( ) # generated in python if TriggerFlags.readL1TopoConfigFromXML(): self.svc.l1topoXmlFile = TriggerFlags.inputL1TopoConfigFile( ) # given XML if TriggerFlags.readLVL1configFromXML(): self.svc.l1XmlFile = TriggerFlags.inputLVL1configFile( ) # given XML if TriggerFlags.readHLTconfigFromXML(): self.svc.hltXmlFile = TriggerFlags.inputHLTconfigFile( ) # given XML ### preparations are done! try: self.svc.SetStates(self.ConfigSrcList) except: log.error('Failed to set state of TrigConfigSvc to %r' % self.ConfigSrcList) else: log.info('The following configuration services will be tried: %r' % self.ConfigSrcList) try: self.svc.InitialiseSvc() except Exception, ex: log.error('Failed to activate TrigConfigSvc: %r' % ex)
def configure(self): log = logging.getLogger( "TriggerConfigGetter.py" ) from PyUtils.MetaReaderPeekerFull import metadata # first check the input if "HIT2RDO" in self._environment: TriggerFlags.doLVL2 = False TriggerFlags.doEF = False 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()) log.info("TriggerFlags.doLVL2 : %s", TriggerFlags.doLVL2()) log.info("TriggerFlags.doEF : %s", TriggerFlags.doEF()) 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 if not (recAlgs.doTrigger() or rec.doTrigger() or TriggerFlags.doTriggerConfigOnly()): log.info("Aborting TriggerConfigGetter as the trigger flags were switched to false in checkInput()") return True self.readPool = globalflags.InputFormat() == 'pool' self.readRDO = rec.readRDO() self.writeESDAOD = rec.doWriteESD() or rec.doWriteAOD() or rec.doWriteDPD() self.writeAOD = rec.doWriteAOD() or rec.doWriteDPD() self.ConfigSrcList = TriggerFlags.configurationSourceList() self.readMC = globalflags.DataSource()=='geant3' or globalflags.DataSource()=='geant4' self.readTriggerDB = TriggerFlags.readMenuFromTriggerDb() and self.readRDO self.isCommisioning = globalflags.DataSource()=='data' and globalflags.DetGeo()=='commis' self.l1Folders = TriggerFlags.dataTakingConditions()=='FullTrigger' or TriggerFlags.dataTakingConditions()=='Lvl1Only' self.hltFolders = TriggerFlags.dataTakingConditions()=='FullTrigger' or TriggerFlags.dataTakingConditions()=='HltOnly' self.isRun1Data = False self.hasxAODMeta = ("metadata_items" in metadata and any(('TriggerMenu' in key) for key in metadata["metadata_items"].keys())) if globalflags.DataSource()=='data': from RecExConfig.AutoConfiguration import GetRunNumber runNumber = GetRunNumber() if runNumber is not None and runNumber > 0 and runNumber < 230000 : self.isRun1Data = True self.isTriggerReprocessing = False # the TriggerFlags.readMenuFromTriggerDb() tells us that we read the trigger menu from the database # the connection itself is defined in TriggerFlags.triggerDbConnection() # reading from the TriggerDB can mean different things: # a) TriggerFlags doLVL2() and doEF() are both False: # - create a tmp sqlite file with the conditions (menu) # - use DSConfigSvc # b) TriggerFlags doLVL2() or doEF() is True: # - use HLTConfigSvc if self.readTriggerDB and (TriggerFlags.doLVL2() or TriggerFlags.doEF() or TriggerFlags.doHLT()): self.ConfigSrcList = ['xml'] # to use L1/HLTConfigSvc and not DSConfigSvc, but only if we are running the HLT if self._environment: # I don't think anyone calls TriggerConfigGetter with an argument self.readPool = False self.writeESDAOD = False self.readHits = False if "ReadPoolRDO" in self._environment: self.readPool = True self.readRDO = True elif "ReadPool" in self._environment: self.readPool = True self.readRDO = False if "WritePool" in self._environment: self.writeESDAOD = True if "HIT2RDO" in self._environment: self.readRDO = False self.readHits = True # define ConfigSvc if not self.ConfigSrcList: if (self.readPool and not self.readRDO) or (self.readRDO and not self.readPool): # (ESD, AOD, DPD) or (RDO-BS) self.ConfigSrcList = ['ds'] elif (self.readRDO and self.readPool) or rec.readTAG() or self.readHits: # (RDO-MC) or TAG self.ConfigSrcList = ['xml'] else: # should not get here: should be found by checkInput log.fatal('no reading of BS, RDO, AOD, ESD, or TAG specified') # we need the temporary COOL database, if we read the configuration from XML and write ESD/AOD (or have 'ds' set for some reason) self.makeTempCool = self.readRDO and \ ( self.writeESDAOD or 'ds' in self.ConfigSrcList ) and \ ( self.readMC \ or (self.isCommisioning and (TriggerFlags.readLVL1configFromXML() and TriggerFlags.readHLTconfigFromXML())) \ or TriggerFlags.readMenuFromTriggerDb() ) log.info("Need to create temporary cool file? : %r", self.makeTempCool) log.info('Creating the Trigger Configuration Services') from AthenaCommon.AppMgr import ServiceMgr as svcMgr ######################################################################## # START OF TEMPORARY SOLUTION FOR RUN-3 TRIGGER DEVELOPMENT ######################################################################## from TriggerJobOpts.HLTTriggerResultGetter import EDMDecodingVersion EDMDecodingVersion() # In most use cases this needs to be called much earlier than in HLTTriggerResultGetter if TriggerFlags.EDMDecodingVersion() >= 3: if self.hasxAODMeta: if not hasattr(svcMgr, 'xAODConfigSvc'): from TrigConfxAOD.TrigConfxAODConf import TrigConf__xAODConfigSvc svcMgr += TrigConf__xAODConfigSvc('xAODConfigSvc') else: # Does not have xAODMeta # Run-3 Trigger Configuration Services from TrigConfigSvc.TrigConfigSvcCfg import getL1ConfigSvc, getHLTConfigSvc from AthenaConfiguration.AllConfigFlags import ConfigFlags svcMgr += getL1ConfigSvc(ConfigFlags) svcMgr += getHLTConfigSvc(ConfigFlags) # Needed for TrigConf::xAODMenuWriterMT from TrigConfigSvc.TrigConfigSvcConfig import TrigConfigSvc svcMgr += TrigConfigSvc("TrigConfigSvc") svcMgr.TrigConfigSvc.PriorityList = ["none", "ds", "xml"] else: # non-MT (Run-2) Trigger Configuration self.svc = SetupTrigConfigSvc() if 'xml' in self.ConfigSrcList or self.makeTempCool: # sets them if plain XML reading is to be used self.svc.l1topoXmlFile = TriggerFlags.outputL1TopoConfigFile() # generated in python self.svc.l1XmlFile = TriggerFlags.outputLVL1configFile() # generated in python self.svc.hltXmlFile = TriggerFlags.outputHLTconfigFile() # generated in python if TriggerFlags.readL1TopoConfigFromXML(): self.svc.l1topoXmlFile = TriggerFlags.inputL1TopoConfigFile() # given XML if TriggerFlags.readLVL1configFromXML(): self.svc.l1XmlFile = TriggerFlags.inputLVL1configFile() # given XML if TriggerFlags.readHLTconfigFromXML(): self.svc.hltXmlFile = TriggerFlags.inputHLTconfigFile() # given XML try: self.svc.SetStates( self.ConfigSrcList ) except Exception: log.error( 'Failed to set state of TrigConfigSvc to %r', self.ConfigSrcList ) else: log.info('The following configuration services will be tried: %r', self.ConfigSrcList ) try: self.svc.InitialiseSvc() except Exception as ex: log.error( 'Failed to activate TrigConfigSvc: %r', ex ) ######################################################################## # END OF TEMPORARY SOLUTION FOR RUN-3 TRIGGER DEVELOPMENT ######################################################################## if self.readTriggerDB: log.info( "Using TriggerDB connection '%s'", TriggerFlags.triggerDbConnection() ) self.trigDbConnectionParameters = interpretConnection(TriggerFlags.triggerDbConnection(), resolveAlias=False) self.setConfigSvcConnParams(self.trigDbConnectionParameters) log.info("TriggerFlags.triggerCoolDbConnection is '%s' [default: '']", TriggerFlags.triggerCoolDbConnection()) TrigCoolDbConnection = TriggerFlags.triggerCoolDbConnection() if self.makeTempCool: TrigCoolDbConnection = self.setupTempCOOLWriting(TrigCoolDbConnection) if ('ds' in self.ConfigSrcList) and not self.hasxAODMeta: self.setupCOOLReading(TrigCoolDbConnection) if hasattr(svcMgr, 'DSConfigSvc'): db = 'TRIGGERDB' if self.isRun1Data: db = 'TRIGGERDB_RUN1' elif self.readMC: db = 'TRIGGERDBMC' elif self.isTriggerReprocessing: db = 'TRIGGERDBREPR' svcMgr.DSConfigSvc.ConfigSource = 'dblookup' svcMgr.DSConfigSvc.DBServer = db log.info("DSConfigSvc trigger database is '%s'", db) if not self.hasxAODMeta: self.setupxAODWriting() # all went fine we are configured return True