Source code for mxcubecore.HardwareObjects.EMBL.EMBLTransfocator

#
#  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 Lesser General Public License
#  along with MXCuBE. If not, see <http://www.gnu.org/licenses/>.

"""EMBLTransfocator"""

import logging

import gevent

from mxcubecore.BaseHardwareObjects import HardwareObject

__credits__ = ["EMBL Hamburg"]
__category__ = "General"


[docs]class EMBLTransfocator(HardwareObject): """Controls Transfocator""" def __init__(self, name): """Inherited from HardwareObject""" HardwareObject.__init__(self, name) self.focal_length = None self.lens_count = None self.modes = None self.current_mode = None self.energy_value = None self.energy_state = None self.current_focusing_mode = None self.crl_value = None self.chan_crl_value = None self.cmd_set_crl_value = None self.cmd_set_trans_value = None
[docs] def init(self): """Inits all variables""" # self.chan_crl_value = self.get_channel_object("chanCrlValue") # if self.chan_crl_value: # self.chan_crl_value.connect_signal("update", self.crl_value_changed) # self.cmd_set_crl_value = self.get_command_object("cmdSetLenses") self.current_mode = "Manual"
[docs] def convert_value(self, value): """Converts int to list of bits""" if isinstance(value, (list, tuple)): lens_combination = 0 for index in range(self.lens_count): lens_combination = lens_combination + value[index] * pow(2, index) else: lens_combination = [0, 0, 0, 0, 0, 0] for index in range(self.lens_count): lens_combination[index] = (value & pow(2, index)) / pow(2, index) return lens_combination
[docs] def get_modes(self): """Returns list with available CRL modes""" return ["Manual"]
[docs] def get_mode(self): """Returns current crl mode""" return self.current_mode
[docs] def set_mode(self, mode): """Sets crl mode :param mode: crl mode :type mode: str :return: None """ return
[docs] def crl_value_changed(self, value): """Emit signal when crl combination changed""" self.crl_value = value self.emit("crlValueChanged", self.crl_value)
[docs] def set_crl_value(self, value, timeout=None): """Sets CRL lens combination. If integer passed then converts value to the bit list """ if not isinstance(value, (list, tuple)): value = self.convert_value(value) if value is not None: self.cmd_set_crl_value(value) logging.getLogger("GUI").info( "Setting CRL image plane " + "distance to %.2f" % self.get_image_plane_distance(value) ) if timeout: gevent.sleep(1) with gevent.Timeout(timeout, Exception("Timeout waiting for CRL")): while value != self.crl_value: gevent.sleep(0.1)
[docs] def get_crl_value(self): """Return crl combination""" return self.crl_value
[docs] def re_emit_values(self): """Reemits signals""" self.emit("crlModeChanged", self.current_mode) self.emit("crlValueChanged", self.crl_value)
[docs] def move_up(self): """Moves lense combination one value up""" return
[docs] def move_down(self): """Moves lense combination one value down""" return