summaryrefslogtreecommitdiff
path: root/src/sardana
diff options
context:
space:
mode:
authorTeresa <tnunez@mail.desy.de>2015-02-02 11:20:37 +0100
committerTeresa <tnunez@mail.desy.de>2015-02-02 13:10:23 +0100
commitd8fae1b328b01a35c2ecba5823a61a4d6bc964b6 (patch)
treedee4312725212d6cb52d5c89cfcc8b30d5b56a6b /src/sardana
parent448b3fbd790ca3574a2db6e7215a04de25c535a1 (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.py7
-rw-r--r--src/sardana/macroserver/macros/standard.py110
-rw-r--r--src/sardana/macroserver/msoptions.py6
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()
+