May updates

This commit is contained in:
gac-furka
2023-05-10 15:05:22 +02:00
parent b037315ac8
commit f1887e5f22
7 changed files with 968 additions and 89 deletions

View File

@ -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