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)