Skip to content
Snippets Groups Projects
Commit 322d8db3 authored by Liaoshan Shi's avatar Liaoshan Shi
Browse files

Update OnlineEventDisplaysSvc to rel22

First working configuration of OnlineEventDisplaysSvc in rel22.
- Update the BeginEvent incident source
- Remove obsolete trigger tools
- Update to read stream tags from the new xAOD::EventInfo class
See details in AA-19.
parent 858ab34a
No related branches found
No related tags found
No related merge requests found
......@@ -21,4 +21,5 @@ def getEventInfo (aKey):
athena> print e.event_ID().event_number()
"""
return PyK.retrieve(PyK.GNS.EventInfo,aKey)
#return PyK.retrieve(PyK.GNS.EventInfo,aKey)
return PyK.retrieve('xAOD::EventInfo',aKey)
# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
from __future__ import print_function
# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
__doc__ = """This service runs in the online Athena event display threads. It
manages the distribution of incoming events to the right event display streams.
......@@ -33,9 +31,6 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ):
self.StreamToFileTool = None
self.StreamToServerTool = None
self.VP1EventProducer = None
self.TrigBSExtraction = None
self.TrigDecMaker = None
self.TrigDecTool = None
self.run = 0
self.event = 0
......@@ -74,36 +69,23 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ):
if not (self.StreamToFileTool and self.StreamToServerTool and self.VP1EventProducer):
self.getJobOptions()
if not self.TrigDecTool:
try:
self.TrigBSExtraction = PyAthena.py_alg('TrigBSExtraction')
self.TrigDecMaker = PyAthena.py_alg('TrigDecMaker')
self.TrigDecTool = PyAthena.py_tool('Trig::TrigDecisionTool/TrigDecisionTool', iface='Trig::TrigDecisionTool')
self.msg.info("TrigDecTool: %s" % self.TrigDecTool)
except Exception as err:
self.msg.warning("Coult not retrieve TrigDecisionTool: %s" % err)
try:
eventInfo = PyEventTools.getEventInfo('')
except LookupError as err:
eventInfo = PyEventTools.getEventInfo('EventInfo')
except LookupError, err:
self.msg.error("Could not retrieve EventInfo: %s" % err)
return StatusCode.Recoverable
try:
# Read event info
eventID = eventInfo.event_ID()
self.run = eventID.run_number()
self.event = eventID.event_number()
self.run = eventInfo.runNumber()
self.event = eventInfo.eventNumber()
# Retrieve trigger info
triggerInfo = eventInfo.trigger_info()
if triggerInfo:
streamTags = triggerInfo.streamTags()
else:
streamTags = []
except Exception as err:
streamTags = eventInfo.streamTags()
except Exception, err:
self.msg.error("Exception occured while reading event/trigger info: %s" % err)
return StatusCode.Recoverable
print(streamTags) # lshi test
# Retrieve the physics stream names from the trigger info
streams = []
......@@ -119,39 +101,25 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ):
if tag.type() == 'physics' and tag.name():
streams += [tag.type()+'_'+tag.name()]
# Add special streams to the list (JetTriggers, Public)
try:
if self.TrigDecTool:
self.TrigBSExtraction.execute()
self.TrigDecMaker.execute()
if self.TrigDecTool.isPassed('L1_J5') or self.TrigDecTool.isPassed('L1_J10') or self.TrigDecTool.isPassed('L1_J15'):
streams += ['JetTriggers']
#if self.TrigDecTool.isPassed('L1_MBTS_1_1'):
# streams += ['MinBias']
#if self.TrigDecTool.isPassed('L1_MU0') or self.TrigDecTool.isPassed('L1_MU6') or self.TrigDecTool.isPassed('L1_MU10'):
# streams += ['Muons']
except Exception as err:
self.msg.error("Exception occured while using TrigDecTool: %s" % err)
# Add special streams to the list Public
try:
for stream in streams:
if stream in self.public:
ready4physics = ISInfoAny()
self.dict.getValue('RunParams.Ready4Physics', ready4physics)
print ("Ready for physics: %s " % ready4physics.get())
print "Ready for physics: %s " % ready4physics.get()
runparams = ISObject(self.partition, 'RunParams.RunParams','RunParams')
runparams.checkout()
physicsReady = ISObject(self.partition, 'RunParams.Ready4Physics','Ready4PhysicsInfo')
physicsReady.checkout()
print ("Ready for physics: %r" % (physicsReady.ready4physics))
print "Ready for physics: %r" % (physicsReady.ready4physics)
#if ready4physics.get() and physicsReady.ready4physics and runparams.T0_project_tag in self.projecttags:
if physicsReady.ready4physics and runparams.T0_project_tag in self.projecttags:
streams += ['Public']
else:
self.msg.debug("RunParams.Ready4Physics is not set, run number is not set, or T0_project_tag is not set to any of %s" % ", ".join(self.projecttags))
break
except Exception as err:
except Exception, err:
self.msg.error("Exception occured while reading RunParams.Ready4Physics: %s" % err)
# Randomize list of streams
......@@ -179,7 +147,7 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ):
os.chown(self.directory, -1, self.DQMgid)
self.msg.info("Created output directory \'%s\' for stream \'%s\'" % (self.directory, self.stream))
break
except OSError as err:
except OSError, err:
self.msg.warning("Failed to create output directory \'%s\' for stream \'%s\': %s", (self.directory, self.stream, err.strerror))
self.directory = ''
......@@ -197,8 +165,8 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ):
self.StreamToFileTool.getProperty('FileNamePrefix').setValue("%s/JiveXML" % self.directory)
# And also for the VP1 event producer algorithm
self.VP1EventProducer.getProperty('DestinationDirectory').setValue(self.directory)
except Exception as err:
#self.VP1EventProducer.getProperty('DestinationDirectory').setValue(self.directory) # lshi June 22 2020
except Exception, err:
self.msg.error("Exception occured while setting job options: %s" % err)
return StatusCode.Failure
......@@ -219,10 +187,11 @@ class OnlineEventDisplaysSvc( PyAthena.Svc ):
self.directory = ''
def handle(self, incident):
self.msg.verbose("Received incident %s from %s" % (incident.type(), incident.source()))
#self.msg.verbose("Received incident %s from %s" % (incident.type(), incident.source()))
self.msg.info("Received incident %s from %s" % (incident.type(), incident.source()))
# Event and trigger info present, decide stream
if incident.type() == 'BeginEvent' and incident.source() == 'AthenaEventLoopMgr':
if incident.type() == 'BeginEvent' and incident.source() == 'BeginIncFiringAlg':
self.beginEvent()
# VP1 writes its file at EndEvent, so we can do cleanup at StoreCleared
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment