diff options
author | Teresa <tnunez@mail.desy.de> | 2015-02-02 11:20:37 +0100 |
---|---|---|
committer | Teresa <tnunez@mail.desy.de> | 2015-02-02 13:10:23 +0100 |
commit | d8fae1b328b01a35c2ecba5823a61a4d6bc964b6 (patch) | |
tree | dee4312725212d6cb52d5c89cfcc8b30d5b56a6b /src/sardana | |
parent | 448b3fbd790ca3574a2db6e7215a04de25c535a1 (diff) |
Add _ViewOptions to be used in wa/wm
Add two new keys in _ViewOptions environment variable
to be used in wa/wm macros:
- ShowCtrlAxis: adds information about the motor controller and axis
- PosFormat: allows to specify number of decimal digits for the position
Diffstat (limited to 'src/sardana')
-rw-r--r-- | src/sardana/macroserver/macro.py | 7 | ||||
-rw-r--r-- | src/sardana/macroserver/macros/standard.py | 110 | ||||
-rw-r--r-- | src/sardana/macroserver/msoptions.py | 6 |
3 files changed, 110 insertions, 13 deletions
diff --git a/src/sardana/macroserver/macro.py b/src/sardana/macroserver/macro.py index c831d532..b4092016 100644 --- a/src/sardana/macroserver/macro.py +++ b/src/sardana/macroserver/macro.py @@ -1807,6 +1807,13 @@ class Macro(Logger): def _getViewOptions(self): try: vo = self.getEnv('_ViewOptions') + if len(vo.keys()) < len(ViewOption.get_view_options_keys()): + import msoptions + iop = ViewOption.init_options(dict()) + for key in iop.keys(): + if key not in vo.keys(): + vo[key] = iop[key] + self.setEnv('_ViewOptions', vo) except UnknownEnv: import msoptions vo = ViewOption.init_options(dict()) diff --git a/src/sardana/macroserver/macros/standard.py b/src/sardana/macroserver/macros/standard.py index ebce9023..683afac5 100644 --- a/src/sardana/macroserver/macros/standard.py +++ b/src/sardana/macroserver/macros/standard.py @@ -24,7 +24,8 @@ """This is the standard macro module""" __all__ = ["ct", "mstate", "mv", "mvr", "pwa", "pwm", "set_lim", "set_lm", - "set_pos", "settimer", "uct", "umv", "umvr", "wa", "wm"] +"set_pos", "settimer", "uct", "umv", "umvr", "wa", "wm"] + __docformat__ = 'restructuredtext' @@ -54,31 +55,62 @@ class _wm(Macro): def run(self, *motor_list): show_dial = self.getViewOption(ViewOption.ShowDial) + show_ctrlaxis = self.getViewOption(ViewOption.ShowCtrlAxis) + pos_format = self.getViewOption(ViewOption.PosFormat) + motor_width = 9 motor_names = [] motor_pos = [] motor_list = list(motor_list) motor_list.sort() for motor in motor_list: + name = motor.getName() motor_names.append([name]) + pos = motor.getPosition(force=True) if pos is None: pos = float('NAN') - + if show_dial: dial_pos = motor.getDialPosition(force=True) if dial_pos is None: dial_pos = float('NAN') - motor_pos.append((pos,dial_pos)) + if show_ctrlaxis: + axis_nb = getattr(motor, "axis") + ctrl_name = self.getController(motor.controller).name + ca_name = "(" + ctrl_name + "." + str(axis_nb) + ")" + motor_pos.append((ca_name,pos,dial_pos)) + else: + motor_pos.append((pos,dial_pos)) else: - motor_pos.append((pos,)) + if show_ctrlaxis: + axis_nb = getattr(motor, "axis") + ctrl_name = self.getController(motor.controller).name + ca_name = "(" + ctrl_name + "." + str(axis_nb) + ")" + motor_pos.append((ca_name,pos)) + else: + motor_pos.append((pos,)) motor_width = max(motor_width,len(name)) - + + if show_ctrlaxis: + motor_width = max(motor_width, len(ca_name) + 2) + fmt = '%c*.%df' % ('%',motor_width - 5) - table = Table(motor_pos, elem_fmt=[fmt], + if pos_format > -1: + fmt = '%c*.%df' % ('%',int(pos_format)) + + if show_ctrlaxis: + if show_dial: + t_format = ['%*s',fmt,fmt] + else: + t_format = ['%*s',fmt] + else: + t_format = [fmt] + + table = Table(motor_pos, elem_fmt=t_format, col_head_str=motor_names, col_head_width=motor_width, **self.table_opts) for line in table.genOutput(): @@ -256,22 +288,73 @@ class wm(Macro): motor_pos = [] show_dial = self.getViewOption(ViewOption.ShowDial) - + show_ctrlaxis = self.getViewOption(ViewOption.ShowCtrlAxis) + pos_format = self.getViewOption(ViewOption.PosFormat) + for motor in motor_list: + + max_len = 0 + if show_ctrlaxis: + axis_nb = getattr(motor, "axis") + ctrl_name = self.getController(motor.controller).name + if len(ctrl_name) > max_len: + max_len = len(ctrl_name) + name = motor.getName() + if len(name) > max_len: + max_len = len(name) + + max_len = max_len + 5 + if max_len < 14: + max_len = 14 # Length of 'Not specified' + + str_fmt = "%c%ds" % ('%', int(max_len)) + + name = str_fmt % name + motor_names.append([name]) posObj = motor.getPositionObj() - upos = map(str, [posObj.getMaxValue(), motor.getPosition(force=True), posObj.getMinValue()]) - pos_data = [''] + upos + if pos_format != -1: + fmt = '%c.%df' % ('%', int(pos_format)) + + try: + val1 = fmt % motor.getPosition(force=True) + val1 = str_fmt % val1 + except: + val1 = str_fmt % motor.getPosition(force=True) + + + val2 = str_fmt % posObj.getMaxValue() + val3 = str_fmt % posObj.getMinValue() + + if show_ctrlaxis: + val0 = str_fmt % (ctrl_name + "." + str(axis_nb)) + upos = map(str, [val0, ' ', val2, val1, val3]) + else: + upos = map(str, ['', val2, val1, val3]) + pos_data = upos if show_dial: - dPosObj = motor.getDialPositionObj() - dpos = map(str, [dPosObj.getMaxValue(), motor.getDialPosition(force=True), dPosObj.getMinValue()]) + try: + val1 = fmt % motor.getDialPosition(force=True) + val1 = str_fmt % val1 + except: + val1 = str_fmt % motor.getDialPosition(force=True) + + dPosObj = motor.getDialPositionObj() + val2 = str_fmt % dPosObj.getMaxValue() + val3 = str_fmt % dPosObj.getMinValue() + + dpos = map(str, [val2, val1, val3]) pos_data += [''] + dpos motor_pos.append(pos_data) - elem_fmt = (['%*s'] + ['%*s'] * 3) * 2 - row_head_str = ['User', ' High', ' Current', ' Low'] + elem_fmt = (['%*s'] + ['%*s'] * 4) * 2 + if show_ctrlaxis: + row_head_str = [' ', 'User', ' High', ' Current', ' Low'] + else: + row_head_str = ['User', ' High', ' Current', ' Low'] + if show_dial: row_head_str += ['Dial', ' High', ' Current', ' Low'] table = Table(motor_pos, elem_fmt=elem_fmt, row_head_str=row_head_str, @@ -584,3 +667,4 @@ class settimer(Macro): def report(self, *message): """Logs a new record into the message report system (if active)""" self.report(' '.join(message)) + diff --git a/src/sardana/macroserver/msoptions.py b/src/sardana/macroserver/msoptions.py index d3878582..9faf212a 100644 --- a/src/sardana/macroserver/msoptions.py +++ b/src/sardana/macroserver/msoptions.py @@ -42,6 +42,8 @@ class ViewOption(object): _DEFAULT_VIEW_OPTIONS = { 'ShowDial' : True, + 'ShowCtrlAxis' : False, + 'PosFormat': -1, } @classmethod @@ -56,4 +58,8 @@ class ViewOption(object): else: del d[name] + @classmethod + def get_view_options_keys(cls): + return cls._DEFAULT_VIEW_OPTIONS.keys() + |