dispersiveXanes/online/server.py

42 lines
1.3 KiB
Python

import zmq
import time
import psana
import numpy as np
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:12322")
poller = zmq.Poller()
poller.register(socket, zmq.POLLIN)
#run = 8
#ds = psana.DataSource('exp=xppl3816:run=%d:smd' %run)
ds = psana.DataSource('shmem=XPP.0:stop=no')
epics = ds.env().epicsStore()
opal_0_detector = psana.Detector('opal_0')
opal_1_detector = psana.Detector('opal_1')
#ipm3_src = psana.Source('BldInfo(XppSb3_Ipm)')
t0 = time.time()
for i, evt in enumerate(ds.events()):
events = dict(poller.poll(0))
if socket in events and events[socket] == zmq.POLLIN:
opal_0 = opal_0_detector.raw(evt)
opal_1 = opal_1_detector.raw(evt)
cntr = ds.env().configStore().get(psana.ControlData.ConfigV3, psana.Source()).pvControls()
if len(cntr) > 0:
cpvName = cntr[0].name()
cpvValue = cntr[0].value()
else:
cpvName = None
cpvValue = None
if opal_0 is None or opal_1 is None:
print 'missing opal'
continue
message = socket.recv()
socket.send_pyobj( dict( opal0 = opal_0, opal1 = opal_1, cPv = dict(name=cpvName,value=cpvValue)) )
print 'Shot',i, 'sent; time since starting:', time.time()-t0