May updates
This commit is contained in:
91
qspace.py
91
qspace.py
@ -87,7 +87,7 @@ class QSpace3D(Device):
|
||||
for name, value in kwargs.items():
|
||||
setattr(self.dc.cons, name, value)
|
||||
|
||||
def get_position(self, *args, extra_cons=None):
|
||||
def get_position(self, *args, extra_cons):
|
||||
wl = self.wavelength.get_current_value()
|
||||
res = self.dc.hkl.get_position(*args, wl)
|
||||
if extra_cons:
|
||||
@ -120,7 +120,66 @@ class QSpace3D(Device):
|
||||
# if I understand the examples/code correctly, then some more method calls are mandatory?
|
||||
# those should probably all get shortcuts...
|
||||
|
||||
def _get_hkl(self):
|
||||
angles = self._get_angles()
|
||||
return self._calc_hkl(*angles)
|
||||
|
||||
def _get_angles(self):
|
||||
ms = self.motors
|
||||
mu = ms.mu.get_current_value()
|
||||
chi = ms.chi.get_current_value()
|
||||
phi = ms.phi.get_current_value()
|
||||
nu = ms.nu.get_current_value()
|
||||
return mu, chi, phi, nu
|
||||
|
||||
def _calc_hkl(self, mu, chi, phi, nu):
|
||||
wl = self.get_wavelength()
|
||||
pos = Position(mu=mu, chi=chi, phi=phi, nu=nu)
|
||||
hkl = self.dc.hkl.get_hkl(pos, wl)
|
||||
return hkl
|
||||
|
||||
def get_wavelength(self):
|
||||
return self.wavelength.get_current_value()
|
||||
|
||||
def _set_hkl(self, h, k, l, extra_cons):
|
||||
angles = self._calc_angles(h, k, l, extra_cons)
|
||||
self._set_angles(*angles)
|
||||
|
||||
def _set_angles(self, mu, chi, phi, nu):
|
||||
ms = self.motors
|
||||
t_mu = ms.mu.set_target_value(90+mu)
|
||||
t_chi = ms.chi.set_target_value(chi-180)
|
||||
t_phi = ms.phi.set_target_value(phi)
|
||||
t_nu = ms.nu.set_target_value(180+nu) # We may need a correct offset value
|
||||
# wait for all motors to arrive
|
||||
tasks = (t_mu, t_chi, t_phi, t_nu)
|
||||
for t in tasks:
|
||||
t.wait()
|
||||
|
||||
# def _set_angles(self, mu, chi, phi, nu):
|
||||
# ms = self.motors
|
||||
# t_mu = ms.mu.set_target_value(90-mu)
|
||||
# t_chi = ms.chi.set_target_value(chi)
|
||||
# t_phi = ms.phi.set_target_value(phi)
|
||||
# t_nu = ms.nu.set_target_value(nu)
|
||||
# wait for all motors to arrive
|
||||
# tasks = (t_mu, t_chi, t_phi, t_nu)
|
||||
# for t in tasks:
|
||||
# t.wait()
|
||||
|
||||
# def _calc_angles(self, h, k, l):
|
||||
# wl = self.get_wavelength()
|
||||
# pos, _virtual_angles = next(iter(
|
||||
# self.dc.hkl.get_position(h, k, l, wl)
|
||||
# ))
|
||||
# return pos.mu, pos.chi, pos.phi, pos.nu
|
||||
|
||||
def _calc_angles(self, h, k, l, extra_cons):
|
||||
wl = self.get_wavelength()
|
||||
pos, _virtual_angles = next(iter(
|
||||
self.get_position(h, k, l, extra_cons=extra_cons)
|
||||
))
|
||||
return pos.mu, pos.chi, pos.phi, pos.nu
|
||||
|
||||
def _flatten_get_position_result(x):
|
||||
d0, d1 = x
|
||||
@ -146,13 +205,14 @@ class QSpace1D(Adjustable):
|
||||
i = self._get_index()
|
||||
return hkl[i]
|
||||
|
||||
def set_target_value(self, value):
|
||||
def set_target_value(self, value, extra_cons):
|
||||
# get all current indices
|
||||
hkl = self._get_hkl()
|
||||
hkl = list(hkl)
|
||||
i = self._get_index()
|
||||
# insert the target value into the right spot
|
||||
hkl[i] = value
|
||||
self._set_hkl(self, *hkl)
|
||||
self._set_hkl(*hkl,extra_cons)
|
||||
|
||||
def is_moving(self):
|
||||
ms = self.motors
|
||||
@ -161,6 +221,13 @@ class QSpace1D(Adjustable):
|
||||
|
||||
# some helpful things:
|
||||
|
||||
def get_position(self, *args, extra_cons):
|
||||
wl = self.wavelength.get_current_value()
|
||||
res = self.dc.hkl.get_position(*args, wl)
|
||||
if extra_cons:
|
||||
res = [r for r in res if extra_cons(_flatten_get_position_result(r))]
|
||||
return res
|
||||
|
||||
def get_wavelength(self):
|
||||
return self.wavelength.get_current_value()
|
||||
|
||||
@ -179,9 +246,9 @@ class QSpace1D(Adjustable):
|
||||
angles = self._get_angles()
|
||||
return self._calc_hkl(*angles)
|
||||
|
||||
def _set_hkl(self, h, k, l):
|
||||
angles = self._calc_angles(self, h, k, l)
|
||||
self._set_angles(self, *angles)
|
||||
def _set_hkl(self, h, k, l, extra_cons):
|
||||
angles = self._calc_angles(h, k, l, extra_cons)
|
||||
self._set_angles(*angles)
|
||||
|
||||
def _get_angles(self):
|
||||
ms = self.motors
|
||||
@ -208,15 +275,21 @@ class QSpace1D(Adjustable):
|
||||
hkl = self.dc.hkl.get_hkl(pos, wl)
|
||||
return hkl
|
||||
|
||||
def _calc_angles(self, h, k, l):
|
||||
# def _calc_angles(self, h, k, l):
|
||||
# wl = self.get_wavelength()
|
||||
# pos, _virtual_angles = next(iter(
|
||||
# self.dc.hkl.get_position(h, k, l, wl)
|
||||
# ))
|
||||
# return pos.mu, pos.chi, pos.phi, pos.nu
|
||||
|
||||
def _calc_angles(self, h, k, l, extra_cons):
|
||||
wl = self.get_wavelength()
|
||||
pos, _virtual_angles = next(iter(
|
||||
self.dc.hkl.get_position(h, k, l, wl)
|
||||
self.get_position(h, k, l, extra_cons)
|
||||
))
|
||||
return pos.mu, pos.chi, pos.phi, pos.nu
|
||||
|
||||
|
||||
|
||||
h = 6.62607015e-34 # J s
|
||||
c = 299792458 # m / s
|
||||
e = 1.60217663e-19 # C
|
||||
|
Reference in New Issue
Block a user