Sardana Listener

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)