Source code for magscope.ipc_commands
from __future__ import annotations
from dataclasses import dataclass
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from magscope.scripting import ScriptStatus
from magscope.settings import MagScopeSettings
from magscope.utils import AcquisitionMode
@dataclass(frozen=True)
[docs]
class Command:
"""Typed IPC payload sent between processes."""
@dataclass(frozen=True)
[docs]
class QuitCommand(Command):
"""Request that all manager processes exit."""
@dataclass(frozen=True)
[docs]
class SetSettingsCommand(Command):
[docs]
settings: "MagScopeSettings"
@dataclass(frozen=True)
[docs]
class UpdateSettingsCommand(Command):
[docs]
settings: "MagScopeSettings"
@dataclass(frozen=True)
[docs]
class UpdateTrackingOptionsCommand(Command):
@dataclass(frozen=True)
[docs]
class SetAcquisitionOnCommand(Command):
@dataclass(frozen=True)
[docs]
class WaitUntilAcquisitionOnCommand(Command):
@dataclass(frozen=True)
[docs]
class SetAcquisitionDirOnCommand(Command):
@dataclass(frozen=True)
[docs]
class SetAcquisitionModeCommand(Command):
[docs]
mode: "AcquisitionMode"
@dataclass(frozen=True)
[docs]
class SetAcquisitionDirCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateBeadRoisCommand(Command):
pass
@dataclass(frozen=True)
[docs]
class LogExceptionCommand(Command):
@dataclass(frozen=True)
[docs]
class StartupReadyCommand(Command):
[docs]
process_name: str = "UIManager"
@dataclass(frozen=True)
[docs]
class UpdateCameraSettingCommand(Command):
@dataclass(frozen=True)
[docs]
class SetSimulatedFocusCommand(Command):
@dataclass(frozen=True)
[docs]
class MoveFocusMotorAbsoluteCommand(Command):
@dataclass(frozen=True)
[docs]
class RequestFocusMotorLimitsCommand(Command):
pass
@dataclass(frozen=True)
[docs]
class ReportFocusMotorLimitsCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateVideoBufferPurgeCommand(Command):
@dataclass(frozen=True)
[docs]
class MoveBeadsCommand(Command):
[docs]
moves: list[tuple[int, int, int]]
@dataclass(frozen=True)
[docs]
class AddRandomBeadsCommand(Command):
[docs]
seed: int | None = None
@dataclass(frozen=True)
[docs]
class UpdateXYLockEnabledCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateXYLockIntervalCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateXYLockMaxCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateXYLockWindowCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateZLockEnabledCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateZLockBeadCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateZLockTargetCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateZLockIntervalCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateZLockMaxCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateZLockWindowCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateScriptStatusCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateScriptStepCommand(Command):
"""Report the currently executing script step to the GUI."""
[docs]
current_step: int | None
[docs]
description: str | None
@dataclass(frozen=True)
[docs]
class ShowMessageCommand(Command):
[docs]
details: str | None = None
@dataclass(frozen=True)
[docs]
class ShowErrorCommand(Command):
[docs]
details: str | None = None
@dataclass(frozen=True)
@dataclass(frozen=True)
[docs]
class LoadZLUTCommand(Command):
@dataclass(frozen=True)
[docs]
class UnloadZLUTCommand(Command):
"""Clear the currently loaded Z-LUT."""
@dataclass(frozen=True)
[docs]
class StartZLUTGenerationCommand(Command):
@dataclass(frozen=True)
[docs]
class CancelZLUTGenerationCommand(Command):
pass
@dataclass(frozen=True)
[docs]
class UpdateZLUTGenerationStateCommand(Command):
[docs]
detail: str | None = None
[docs]
can_cancel: bool = False
[docs]
z_axis_min_nm: float | None = None
[docs]
z_axis_max_nm: float | None = None
[docs]
z_axis_descending: bool = False
@dataclass(frozen=True)
[docs]
class UpdateZLUTGenerationProgressCommand(Command):
[docs]
motor_z_value: float | None = None
@dataclass(frozen=True)
[docs]
class UpdateZLUTGenerationEvaluationCommand(Command):
[docs]
selected_bead_id: int | None = None
@dataclass(frozen=True)
[docs]
class SelectGeneratedZLUTBeadCommand(Command):
@dataclass(frozen=True)
[docs]
class SaveGeneratedZLUTCommand(Command):
[docs]
load_after_save: bool = True
@dataclass(frozen=True)
[docs]
class CancelGeneratedZLUTEvaluationCommand(Command):
pass
@dataclass(frozen=True)
[docs]
class RequestProfileLengthCommand(Command):
pass
@dataclass(frozen=True)
[docs]
class ReportProfileLengthCommand(Command):
[docs]
profile_length: int | None = None
@dataclass(frozen=True)
[docs]
class RequestZLUTProfileLengthCommand(Command):
[docs]
bead_ids: tuple[int, ...] = ()
[docs]
bead_rois: tuple[tuple[int, int, int, int], ...] = ()
@dataclass(frozen=True)
[docs]
class ReportZLUTProfileLengthCommand(Command):
[docs]
profile_length: int | None = None
@dataclass(frozen=True)
[docs]
class ClearPendingZLUTProfileLengthCommand(Command):
pass
@dataclass(frozen=True)
[docs]
class ArmZLUTSweepCaptureCommand(Command):
[docs]
remaining_profiles_per_bead: int
[docs]
earliest_timestamp: float
[docs]
bead_ids: tuple[int, ...] = ()
[docs]
bead_rois: tuple[tuple[int, int, int, int], ...] = ()
@dataclass(frozen=True)
[docs]
class DisarmZLUTSweepCaptureCommand(Command):
pass
@dataclass(frozen=True)
[docs]
class ZLUTSweepCaptureCompleteCommand(Command):
[docs]
written_profiles_per_bead: int
[docs]
error: str | None = None
@dataclass(frozen=True)
[docs]
class RemoveBeadFromPendingMovesCommand(Command):
@dataclass(frozen=True)
[docs]
class RemoveBeadsFromPendingMovesCommand(Command):
@dataclass(frozen=True)
[docs]
class SetXYLockOnCommand(Command):
@dataclass(frozen=True)
[docs]
class ExecuteXYLockCommand(Command):
[docs]
now: float | None = None
@dataclass(frozen=True)
[docs]
class ExecuteZLockCommand(Command):
"""Request the Z-Lock manager to perform one correction cycle."""
@dataclass(frozen=True)
[docs]
class SetXYLockIntervalCommand(Command):
@dataclass(frozen=True)
[docs]
class SetXYLockMaxCommand(Command):
@dataclass(frozen=True)
[docs]
class SetXYLockWindowCommand(Command):
@dataclass(frozen=True)
[docs]
class SetZLockOnCommand(Command):
@dataclass(frozen=True)
[docs]
class SetZLockBeadCommand(Command):
@dataclass(frozen=True)
[docs]
class SetZLockTargetCommand(Command):
@dataclass(frozen=True)
[docs]
class SetZLockIntervalCommand(Command):
@dataclass(frozen=True)
[docs]
class SetZLockMaxCommand(Command):
@dataclass(frozen=True)
[docs]
class SetZLockWindowCommand(Command):
@dataclass(frozen=True)
[docs]
class GetCameraSettingCommand(Command):
@dataclass(frozen=True)
[docs]
class SetCameraSettingCommand(Command):
@dataclass(frozen=True)
[docs]
class LoadScriptCommand(Command):
@dataclass(frozen=True)
[docs]
class StartScriptCommand(Command):
"""Start the currently loaded script."""
@dataclass(frozen=True)
[docs]
class PauseScriptCommand(Command):
"""Pause the running script."""
@dataclass(frozen=True)
[docs]
class ResumeScriptCommand(Command):
"""Resume a paused script."""
@dataclass(frozen=True)
[docs]
class SleepCommand(Command):
@dataclass(frozen=True)
[docs]
class UpdateWaitingCommand(Command):
"""Signal that a wait condition has been satisfied."""