Flomni fixes #300

Merged
holler merged 2 commits from flomni_fixes into main 2026-08-19 10:30:03 +02:00
3 changed files with 35 additions and 14 deletions
@@ -305,7 +305,7 @@ class FlomniInitStagesMixin:
dev.ftransx.limits = [0, 50]
dev.ftray.limits = [-200, 0]
dev.fsamy.limits = [2, 3.5]
dev.foptz.limits = [22.5, 28]
dev.foptz.limits = [17 - 0.1, 17 + 0.1]
dev.foptx.limits = [-17, -12]
dev.fheater.limits = [-15, 0]
dev.feyex.limits = [-18, -1]
@@ -333,7 +333,8 @@ class FlomniInitStagesMixin:
# the fopty 3.87 should put us in place for a lower FZP on the lower FZP chip
umv(dev.foptz, 23)
umv(dev.foptz, 17)
dev.foptz.limits = [17 - 0.1, 17 + 0.1]
flomni_samx_in = dev.fsamx.user_parameter.get("in")
if flomni_samx_in is None:
@@ -1090,17 +1091,18 @@ class FlomniSampleTransferMixin:
if position == 0 and fsamx_pos > -160:
print("Use GUI interface.")
if self.ftransfer_confirm_dialog("May the flomni stage be moved out for the sample change? Feedback will be disabled and alignment will be lost!", "y"):
# if self.OMNYTools.yesno(
# "May the flomni stage be moved out for the sample change? Feedback will be disabled and alignment will be lost!",
# "y",
# ):
if self.ftransfer_confirm_dialog(
"May the flomni stage be moved out for the sample change? "
"Feedback will be disabled and alignment will be lost!",
"y",
):
print("OK. continue.")
self.ftransfer_flomni_stage_out()
else:
print("Stopping.")
return
raise FlomniError(
"Stage-out declined by user. Aborting sample transfer before any "
"gripper motion."
)
self.ensure_gripper_up()
self.check_tray_in()
@@ -5,6 +5,10 @@ from rich.console import Console
from rich.table import Table
class FlomniOpticsError(Exception):
pass
class FlomniOpticsMixin:
@staticmethod
def _get_user_param_safe(device, var):
@@ -13,6 +17,12 @@ class FlomniOpticsMixin:
raise ValueError(f"Device {device} has no user parameter definition for {var}.")
return param.get(var)
def _osa_remaining_space(self, fosaz_target: float) -> float:
"""Clearance (mm) between the OSA and a normal OMNY pin if fosaz were
at `fosaz_target`, at the *current* foptz reading. <=0 means collision."""
foptz_val = dev.foptz.readback.get()
return -fosaz_target + (33 - foptz_val)
def feye_out(self):
dev.fsh.fshclose()
self.foptics_in()
@@ -188,6 +198,16 @@ class FlomniOpticsMixin:
)
if need_move_osa:
remaining = self._osa_remaining_space(fosaz_in)
if remaining <= 0:
foptz_val = dev.foptz.readback.get()
raise FlomniOpticsError(
f"Refusing to move OSA to its IN position: at the current foptz "
f"({foptz_val:.2f}), fosaz IN ({fosaz_in:.4f}) would leave "
f"{remaining:.2f} mm of clearance to a normal OMNY pin -- a "
"collision. Check/recalibrate the fosaz 'in' user parameter for "
"the current foptz before proceeding (see ffzp_info())."
)
umv(dev.fosax, fosax_in, dev.fosay, fosay_in)
umv(dev.fosaz, fosaz_in)
else:
@@ -311,13 +331,12 @@ class FlomniOpticsMixin:
console.print(table)
fosaz_val = dev.fosaz.readback.get()
foptz_val = dev.foptz.readback.get()
fosaz_in = self._get_user_param_safe("fosaz", "in")
tol_osa = 0.010 # mm, 10 microns
remaining_current = -fosaz_val + (33 - foptz_val)
remaining_at_in = -fosaz_in + (33 - foptz_val)
remaining_current = self._osa_remaining_space(fosaz_val)
remaining_at_in = self._osa_remaining_space(fosaz_in)
print("\nOSA Information:")
print(f" Current fosaz {fosaz_val:.1f}")
+1 -1
View File
@@ -144,7 +144,7 @@ foptz:
readoutPriority: baseline
connectionTimeout: 20
userParameter:
in: 23
in: 17
deviceTags:
- ptycho_flomni