kappa conversion added to gps

This commit is contained in:
2021-05-28 23:05:01 +02:00
parent b0c7b240fc
commit a56253cbf1
@@ -219,6 +219,49 @@ class GPS(Assembly):
)
self.set_kappa_off = DeltaTauCurrOff(self.pvname + ":asyn1.AOUT")
def get_current_kappa2you():
return self.calc_kappa2you(
self.eta_kap.get_current_value(),
self.kappa.get_current_value(),
self.phi_kap.get_current_value(),
)
def set_youvar_value_to_current_kappa(value, varind):
vars = list(get_current_kappa2you())
vars[varind] = value
return self.calc_you2kappa(*vars)
self._append(
AdjustableVirtual,
[self.eta_kap, self.kappa, self.phi_kap],
lambda eta_kap, kappa, phi_kap: self.calc_kappa2you(
eta_kap, kappa, phi_kap
)[0],
lambda value_eta: set_youvar_value_to_current_kappa(value_eta, 0),
name="eta",
unit="deg",
)
self._append(
AdjustableVirtual,
[self.eta_kap, self.kappa, self.phi_kap],
lambda eta_kap, kappa, phi_kap: self.calc_kappa2you(
eta_kap, kappa, phi_kap
)[1],
lambda value_chi: set_youvar_value_to_current_kappa(value_chi, 1),
name="chi",
unit="deg",
)
self._append(
AdjustableVirtual,
[self.eta_kap, self.kappa, self.phi_kap],
lambda eta_kap, kappa, phi_kap: self.calc_kappa2you(
eta_kap, kappa, phi_kap
)[2],
lambda value_phi: set_youvar_value_to_current_kappa(value_phi, 2),
name="phi",
unit="deg",
)
def gui(self, guiType="xdm"):
"""Adjustable convention"""
cmd = ["caqtdm", "-macro"]
@@ -233,6 +276,49 @@ class GPS(Assembly):
return self._run_cmd(" ".join(cmd))
# bash -c 'caqtdm -noMsg -stylefile sfop.qss -macro P=SARES22-GPS /ioc/modules/qt/ESB_GPS_exp.ui'
def calc_you2kappa(
self, eta, chi, phi, kappa_angle=60, degrees=True, bernina_kappa=True
):
"""tool to convert from you definition angles to kappa angles, in
particular the bernina kappa where the"""
if bernina_kappa:
eta = -eta
if degrees:
eta, chi, phi, kappa_angle = np.deg2rad([eta, chi, phi, kappa_angle])
delta_angle = np.arcsin(-np.tan(chi / 2) / np.tan(kappa_angle))
eta_k = eta - delta_angle
kappa = 2 * np.arcsin(np.sin(chi / 2) / np.sin(kappa_angle))
phi_k = phi - delta_angle
if bernina_kappa:
eta_k = eta_k - np.pi / 2
kappa = -kappa
phi_k = phi_k
if degrees:
eta_k, kappa, phi_k = np.rad2deg([eta_k, kappa, phi_k])
return eta_k, kappa, phi_k
def calc_kappa2you(
self, eta_k, kappa, phi_k, kappa_angle=60, degrees=True, bernina_kappa=True
):
if degrees:
eta_k, kappa, phi_k, kappa_angle = np.deg2rad(
[eta_k, kappa, phi_k, kappa_angle]
)
if bernina_kappa:
eta_k = eta_k + np.pi / 2
kappa = -kappa
phi_k = phi_k
delta_angle = np.arctan(np.tan(kappa / 2) * np.cos(kappa_angle))
eta = eta_k - delta_angle
chi = 2 * np.arcsin(np.sin(kappa / 2) * np.sin(kappa_angle))
phi = phi_k - delta_angle
if degrees:
eta, chi, phi = np.rad2deg([eta, chi, phi])
if bernina_kappa:
eta = -eta
return eta, chi, phi
# def get_adjustable_positions_str(self):
# ostr = "*****GPS motor positions******\n"
@@ -572,6 +658,7 @@ class XRDYou(Assembly):
)[0],
lambda value_eta: set_youvar_value_to_current_kappa(value_eta, 0),
name="eta",
unit="deg",
)
self._append(
AdjustableVirtual,
@@ -581,6 +668,7 @@ class XRDYou(Assembly):
)[1],
lambda value_chi: set_youvar_value_to_current_kappa(value_chi, 1),
name="chi",
unit="deg",
)
self._append(
AdjustableVirtual,
@@ -590,6 +678,7 @@ class XRDYou(Assembly):
)[2],
lambda value_phi: set_youvar_value_to_current_kappa(value_phi, 2),
name="phi",
unit="deg",
)
if diff_detector: