Source code for QInstrument.instruments.PriorScientific.Proscan.fake

from __future__ import annotations

from qtpy import QtCore
from QInstrument.lib.QFakeInstrument import QFakeInstrument
from QInstrument.instruments.PriorScientific.Proscan.instrument import QProscan


[docs] class QFakeProscan(QFakeInstrument, QProscan): '''Simulated Prior Proscan controller for UI development. Mirrors all properties of :class:`QProscan` using an in-memory store. No hardware is required. ''' positionChanged = QtCore.Signal(object) limitsChanged = QtCore.Signal(object) def _registerProperties(self) -> None: for name, default in (('speed', 50), ('acceleration', 50), ('scurve', 50), ('zspeed', 50), ('zacceleration', 50), ('zscurve', 50)): self.registerProperty( name, getter=lambda n=name, d=default: self._store.get(n, d), setter=lambda v, n=name: self._store.update({n: int(v)}), ptype=int) for name, default in (('stepsize', 1.0), ('zstepsize', 1.0)): self.registerProperty( name, getter=lambda n=name, d=default: self._store.get(n, d), setter=lambda v, n=name: self._store.update({n: float(v)}), ptype=float) for name, default in (('xresolution', 0.1), ('yresolution', 0.1), ('zresolution', 0.1)): self.registerProperty( name, getter=lambda n=name, d=default: self._store.get(n, d), setter=None, ptype=float) for name, default in (('upr', 1.0), ('zupr', 1.0)): self.registerProperty( name, getter=lambda n=name, d=default: self._store.get(n, d), setter=lambda v, n=name: self._store.update({n: float(v)}), ptype=float) self.registerProperty( 'flip', getter=lambda: self._store.get('flip', False), setter=lambda v: self._store.update({'flip': bool(v)}), ptype=bool) self.registerProperty( 'mirror', getter=lambda: self._store.get('mirror', False), setter=lambda v: self._store.update({'mirror': bool(v)}), ptype=bool) self.registerProperty( 'moving', getter=lambda: self._store.get('moving', False), setter=None, ptype=bool) self.registerProperty( 'limits', getter=lambda: self.active_limits(), setter=None, ptype=object) self.identification = 'Fake Prior Proscan'
[docs] def identify(self) -> bool: return True
[docs] def position(self) -> list[int]: '''Return the simulated stage position and emit positionChanged.''' pos = self._store.get('position', [0, 0, 0]) self.positionChanged.emit(pos) return pos
[docs] def set_position(self, position: list[int]) -> bool: '''Store the given coordinates as the current simulated position.''' self._store['position'] = list(position) return True
[docs] def set_origin(self) -> bool: '''Set the simulated origin to [0, 0, 0].''' self._store['position'] = [0, 0, 0] return True
[docs] def status(self) -> int: '''Return 0 (not moving, no faults).''' return 0
[docs] def emergency_stop(self) -> bool: return True
[docs] def triggered_limits(self) -> None: return None
[docs] def active_limits(self) -> None: return None
[docs] def stop(self) -> bool: return True
[docs] def move_to(self, position: list[int], relative: bool = False) -> bool: if relative: current = self._store.get('position', [0, 0, 0]) position = [c + d for c, d in zip(current, list(position) + [0])] self._store['position'] = list(position) + [0] * (3 - len(position)) return True
[docs] def move_to_origin(self) -> bool: self._store['position'] = [0, 0, 0] return True
[docs] def set_velocity(self, velocity: list[float]) -> None: pass
[docs] def stepLeft(self) -> bool: return True
[docs] def stepRight(self) -> bool: return True
[docs] def stepForward(self) -> bool: return True
[docs] def stepBackward(self) -> bool: return True
[docs] def stepUp(self) -> bool: return True
[docs] def stepDown(self) -> bool: return True
[docs] def description(self) -> list[str]: return ['Fake Prior Proscan', 'END']
[docs] def stage(self) -> list[str]: return ['Fake XY Stage', 'END']
[docs] def focus(self) -> list[str]: return ['Fake Focus Drive', 'END']
__all__ = ['QFakeProscan']