adding alias and adjustable conventions, unfinished

This commit is contained in:
2018-10-02 16:25:58 +02:00
parent 696e7eda26
commit 266235ae9d
4 changed files with 136 additions and 1 deletions
+34
View File
@@ -0,0 +1,34 @@
class Adjustable:
def __init__(self,
f_get_value,
f_change_value,
f_set_value_to=None):
self._f_get_value = f_get_value
self._f_change_value = f_change_value
self._f_set_value_to = f_set_value_to
def wrap_spec_convenience(obj):
# spec-inspired convenience methods
def mv(self,value):
self._currentChange = self.changeTo(value)
def wm(self,*args,**kwargs):
return self.get_current_value(*args,**kwargs)
def mvr(self,value,*args,**kwargs):
if(self.get_moveDone == 1):
startvalue = self.get_current_value(readback=True,*args,**kwargs)
else:
startvalue = self.get_current_value(readback=False,*args,**kwargs)
self._currentChange = self.changeTo(value+startvalue,*args,**kwargs)
def wait(self):
self._currentChange.wait()
obj.wm = wm
obj.mv = mv
obj.mvr = mvr
obj.wait = wait
+12
View File
@@ -32,6 +32,18 @@ class Alias:
ta['alias'] = self.alias + ta['alias']
aa.append(ta)
def add_children(self,*args):
self.children.append(find_aliases(args))
def find_aliases(*args):
o = []
for obj in args:
if hasattr(obj,'alias'):
o.append(obj.alias)
return tuple(o)
class Namespace:
def __init__(self,namespace_file=None):
path = Path(namespace_file)
+8 -1
View File
@@ -3,6 +3,7 @@ import subprocess
from threading import Thread
from epics import PV
from .utilities import Changer
from ..aliases import Alias
_MotorRocordStandardProperties = \
{}
@@ -32,11 +33,17 @@ def _keywordChecker(kw_key_list_tups):
assert tkey in tlist, "Keyword %s should be one of %s"%(tkw,tlist)
class MotorRecord:
def __init__(self,pvname, name=None, elog=None):
def __init__(self,pvname, name=None, elog=None,
alias_fields={
'readback'='RBV',
'user_offset' = 'OFF'}):
self.Id = pvname
self._motor = _Motor(pvname)
self._elog = elog
self.name = name
self.alias = Alias(name)
for an,af in alias_fields.items():
self.alias.add_children(Alias('readback',channel='.'.join(Id,af))
self._currentChange = None
+82
View File
@@ -0,0 +1,82 @@
import sys
sys.path.append("..")
from ..devices_general.motors import MotorRecord
from epics import PV
from ..aliases import Alias
class XRD:
def __init__(self,name=None,Id=None,configuration=[]):
"""X-ray diffractometer platform in AiwssFEL Bernina.\
<configuration> : list of elements mounted on
the plaform, options are kappa, nutable, hlgonio, polana"""
self.Id = Id
self.name = name
self.alias = Alias(name)
### motors heavy load table ###
self.xhl = MotorRecord(Id+':MOT_TBL_TX',name='xhl')
self.zhl = MotorRecord(Id+':MOT_TBL_TZ',name='zhl')
self.yhl = MotorRecord(Id+':MOT_TBL_TY',name='yhl')
try:
self.rxhl = MotorRecord(Id+':MOT_TBL_RX',name='rxhl')
except:
print ('GPS.pitch not found')
pass
try:
self.ryhl = MotorRecord(Id+':MOT_TBL_RY',name='rxhl')
except:
print ('GPS.roll not found')
pass
### motors heavy load gonio base ###
self.omega = MotorRecord(Id+':MOT_MY_RYTH',name='omega')
self.tnu = MotorRecord(Id+':MOT_HEX_TX',name='tnu')
self.nu = MotorRecord(Id+':MOT_HEX_RX',name='nu')
self.gamma = MotorRecord(Id+':MOT_NY_RY2TH', name='gam')
self.delta = MotorRecord(Id+':MOT_DT_RX2TH', name='del')
self.xbase = MotorRecord(Id+':MOT_TX')
self.ybase = MotorRecord(Id+':MOT_TY')
### motors XRD arm ###
self.tdet = MotorRecord(Id+':MOT_D_T')
self.tpol = MotorRecord(Id+':MOT_P_T')
self.hex_x = PV("SARES20-HEX_PI:POSI-X")
self.hex_y = PV("SARES20-HEX_PI:POSI-Y")
self.hex_z = PV("SARES20-HEX_PI:POSI-Z")
self.hex_u = PV("SARES20-HEX_PI:POSI-U")
self.hex_v = PV("SARES20-HEX_PI:POSI-V")
self.hex_w = PV("SARES20-HEX_PI:POSI-W")
def __repr__(self):
s = "**Heavy Load**\n"
motors = "xmu mu tth xbase ybase".split()
for motor in motors:
s+= " - %s %.4f\n"%(motor,getattr(self,motor).wm())
s+= " - xhl %.4f\n"%(self.xhl.wm())
s+= " - yhl %.4f\n"%(self.yhl.wm())
s+= " - zhl %.4f\n"%(self.zhl.wm())
s+= " - th %.4f\n"%(self.th.wm())
s+= "\n"
s+= "**Gonio**\n"
motors = "xmu mu tth delta det_z cam_z xbase ybase".split()
for motor in motors:
s+= " - %s %.4f\n"%(motor,getattr(self,motor).wm())
s+= "\n"
s+= "**Hexapod**\n"
motors = "x y z u v w".split()
for motor in motors:
s+= " - hex_%s %.4f\n"%(motor,getattr(self,"hex_"+motor).get())
return s