This is an example of a python script subscribing to the sardana record for controlling the MythenClient server. The record will be generated when a scan is performed.
#!/usr/bin/env python
import PyTango
import random
import time
import sys
import taurus.core.tango.sardana.macroserver
taurus.core.tango.sardana.macroserver.registerExtensions()
class output_door( taurus.core.tango.sardana.macroserver.BaseDoor):
def __init__( self, name, **kw):
print "output_door.__init__", name
self.call__init__(taurus.core.tango.sardana.macroserver.BaseDoor, name, **kw)
self.total_scan_intervals = 0
self.motor_name = ""
self.mythen_device = PyTango.DeviceProxy("test/mythenclient/1")
def recordDataReceived( self, s, t,v):
dt = taurus.core.tango.sardana.macroserver.BaseDoor.recordDataReceived( self, s, t, v)
if dt is not None:
if dt[1]['type'] == "data_desc":
self.motor_name = dt[1]['data']['ref_moveables'][0]
if self.motor_name == "anen": # Name of the analyzer energy motor given in onlineSardana.xml
self.total_scan_intervals = dt[1]['data']['total_scan_intervals']
self.mythen_device.StartSpectrum()
for elem in dt[1]['data']['column_desc']:
if elem['name'] == self.motor_name:
self.energy_start = elem['min_value']
self.energy_end = elem['max_value']
self.mythen_device.EnergyStart = self.energy_start
self.mythen_device.EnergyEnd = self.energy_end
self.nb_points = dt[1]['data']['total_scan_intervals']
self.energy_interval = (self.energy_end-self.energy_start)/self.nb_points
self.mythen_device.EnergyStep = self.energy_interval
return dt
if dt[1]['type'] != "record_data":
return dt
if self.motor_name == "anen": # Name of the analyzer energy motor given in onlineSardana.xml
motor_pos = dt[1]['data'][self.motor_name]
self.mythen_device.CurrentEnergy = motor_pos
return dt
factory = taurus.Factory()
factory.registerDeviceClass( 'Door', output_door)
door = taurus.Device("p09/door/haso111tb")
The script above (called in the example test_mythen.py) is started runnig the following script:
#!/usr/bin/env python
import sys, os, time
import test_mythen
if __name__ == "__main__":
while 1:
time.sleep(1)