Source code for mxcubecore.HardwareObjects.abstract.AbstractSampleView

#
#  Project name: MXCuBE
#  https://github.com/mxcube
#
#  This file is part of MXCuBE software.
#
#  MXCuBE is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  MXCuBE is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU General Lesser Public License
#  along with MXCuBE. If not, see <http://www.gnu.org/licenses/>.

"""Abstract class for a Sample View.
Defines methods to handle snapshots, animation and shapes.
"""

__copyright__ = """2019 by the MXCuBE collaboration """
__license__ = "LGPLv3+"

import abc
import logging
from typing import (
    Literal,
    Union,
)

from mxcubecore.BaseHardwareObjects import HardwareObject

ShapeState = Literal["HIDDEN", "SAVED", "TMP"]


[docs]class AbstractSampleView(HardwareObject): """AbstractSampleView Class""" __metaclass__ = abc.ABCMeta def __init__(self, name): super().__init__(name) self._focus = None self._zoom = None self._frontlight = None self._backlight = None self._shapes = {} self.current_centring_procedure = None @property def camera(self): return self.get_object_by_role("camera")
[docs] @abc.abstractmethod def get_snapshot( self, overlay: bool | str = True, bw: bool = False, return_as_array: bool = False, ): """Get snappshot(s) Args: overlay(bool | str): Display shapes and other items on the snapshot bw(bool): return grayscale image return_as_array(bool): return as np array """
[docs] @abc.abstractmethod def save_snapshot( self, filename, overlay: Union[bool, str] = True, bw: bool = False ): """Save a snapshot to file. Args: filename (str): The filename. overlay(bool | str): Display shapes and other items on the snapshot. bw(bool): Return grayscale image. """
[docs] def save_scene_animation(self, filename, duration=1): """Take snapshots and create an animation. Args: filename (str): The filename. duration (int): Duration time [s]. """
@property def shapes(self): """Get shapes dict. Returns: (AbstractShapes): Shapes hardware object. """ return self._shapes @property def zoom(self): """Get zoom object. Returns: (AbstractZoom): Zoom gardware object. """ return self._zoom @property def frontlight(self): """Get Front light object Returns: (AbstractLight): Front light hardware object. """ return self._frontlight @property def backlight(self): """Get Back light object. Returns: (AbstractLight): Back light hardware object. """ return self._backlight
[docs] @abc.abstractmethod def start_manual_centring(self, nb_click=3): """Starts manual centring procedure"""
[docs] @abc.abstractmethod def start_auto_centring(self): """Start automatic centring procedure"""
[docs] def move_to_beam(self, x: float, y: float): """Move the sample to the x,y coordinates"""
[docs] def cancel_centring(self): """Cancels current centring procedure""" if self.current_centring_procedure: try: self.current_centring_procedure.kill(block=True) except Exception: logging.getLogger("HWR").exception( "Problem aborting the centring method" ) self.current_centring_procedure = None self.emit("centringFailed") logging.getLogger("HWR").exception("Centring canceled")
[docs] @abc.abstractmethod def add_shape(self, shape): """Add the shape <shape> to the dictionary of handled shapes. Args: shape(Shape): Shape to add """ return
[docs] @abc.abstractmethod def add_shape_from_mpos( self, mpos_list, screen_cord, _type, state: ShapeState = "SAVED", user_state: ShapeState = "SAVED", ): """Add a shape of type <t>, with motor positions from mpos_list and screen position screen_coord. Args: mpos_list (list[mpos_list]): List of motor positions screen_coord (tuple(x, y): Screen coordinate for shape _type (str): Type str for shape, P (Point), L (Line), G (Grid) user_state (ShapeState): State of the shape set by the user Returns: (Shape): Shape of type _type """ return
[docs] @abc.abstractmethod def delete_shape(self, sid): """Remove the shape with specified id from the list of handled shapes. Args: sid (str): The id of the shape to remove Returns: (Shape): The removed shape """ return
[docs] @abc.abstractmethod def select_shape(self, sid): """Select the shape <shape>. Args: sid (str): Id of the shape to select. """ return
[docs] @abc.abstractmethod def de_select_shape(self, sid): """De-select the shape with id <sid>. Args: sid (str): The id of the shape to de-select. """ return
[docs] @abc.abstractmethod def is_selected(self, sid): """Check if Shape with specified id is selected. Args: sid (int): Shape id. Returns: (Boolean) True if selected, False otherwise. """
[docs] @abc.abstractmethod def get_selected_shapes(self): """Get all selected shapes. Returns: (list) List of the selected Shapes. """ return
[docs] @abc.abstractmethod def de_select_all(self): """De-select all shapes.""" return
[docs] @abc.abstractmethod def select_shape_with_cpos(self, cpos): """Selects shape with the assocaitaed centred position <cpos> Args: cpos (CentredPosition): Centred position """ return
[docs] @abc.abstractmethod def clear_all(self): """ Clear the shapes, remove all contents. """ return
[docs] @abc.abstractmethod def get_shape(self, sid: str): """ Get Shape with id <sid>. Args: sid (str): id of Shape to retrieve Returns: (Shape) All the shapes """ return
[docs] @abc.abstractmethod def get_grid(self): """Get the first of the selected grids, (the one that was selected first in a sequence of select operations). Returns: (dict): The first selected grid as a dictionary. """ return
[docs] @abc.abstractmethod def get_points(self): """Get all currently handled centred points. Returns: (list): All points currently handled as list. """ return
[docs] @abc.abstractmethod def get_lines(self): """Get all the currently handled lines. Returns: (list): All lines currently handled as list. """ return
[docs] @abc.abstractmethod def get_grids(self): """Get all currently handled grids. Returns: (list): All grids currently handled as list. """ return
[docs] @abc.abstractmethod def inc_used_for_collection(self, cpos): """Increase the counter that keepts on collect made on this shape, shape with associated CentredPosition cpos. Args: cpos (CentredPosition): CentredPosition of shape """
[docs] def motor_positions_to_screen(self, positions_dict: dict) -> tuple: """Get the motor positions according to the calibration""" return ()