Source code for mxcubecore.HardwareObjects.ALBA.ALBAZoomMotor

#
#  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/>.

"""
[Name]
ALBAZoomMotor

[Description]
Hardware Object is used to manipulate the zoom of the OAV camera.

[Channels]
- position
- state
- labels

[Commands]

[Emitted signals]
- stateChanged
- predefinedPositionChanged

[Functions]
- None

[Included Hardware Objects]
- None

Example Hardware Object XML file :
==================================
<object class="ALBAZoomMotor">
  <username>Zoom</username>
  <taurusname>ioregister/eh_zoom_tangoior_ctrl/2</taurusname>
  <alias>zoom</alias>
  <actuator_name>Zoom</actuator_name>
  <channel type="sardana" polling="200" name="position">Value</channel>
  <channel type="sardana" polling="200" name="state">State</channel>
  <channel type="sardana" name="labels">Labels</channel>
  <interval>200</interval>
  <threshold>0.001</threshold>
</object>
"""

import PyTango

from mxcubecore import BaseHardwareObjects
from mxcubecore.HardwareObjects.abstract.AbstractMotor import AbstractMotor

__author__ = "Bixente Rey"
__credits__ = ["MXCuBE collaboration"]

__version__ = "2.2."
__maintainer__ = "Jordi Andreu"
__email__ = "jandreu[at]cells.es"
__status__ = "Draft"


[docs]class ALBAZoomMotor(BaseHardwareObjects.Device, AbstractMotor): INIT, FAULT, READY, MOVING, ONLIMIT = range(5) def __init__(self, name): super().__init__(name)
[docs] def init(self): self.log.debug("Initializing zoom motor IOR") self.positionChannel = self.get_channel_object("position") self.stateChannel = self.get_channel_object("state") self.labelsChannel = self.get_channel_object("labels") self.currentposition = 0 self.currentstate = None self.positionChannel.connect_signal("update", self.positionChanged) self.stateChannel.connect_signal("update", self.stateChanged)
def get_predefined_positions_list(self): labels = self.labelsChannel.get_value() labels = labels.split() retlist = [] for label in labels: # label, pos = label.split(":") # retlist.append(int(pos)) pos = str(label.replace(":", " ")) retlist.append(pos) self.log.debug("Zoom positions list: %s" % repr(retlist)) new_retlist = [] for n, e in enumerate(retlist): name = e.split() new_retlist.append("%s %s" % (n + 1, name[0])) self.log.debug("Zoom positions list: %s" % repr(new_retlist)) # retlist = ["z1 1","z2 2"] # self.log.debug("Zoom positions list: %s" % repr(retlist)) return new_retlist def moveToPosition(self, posno): no = posno.split()[0] self.log.debug("type %s" % type(no)) # no = posno self.log.debug("Moving to position %s" % no) state = self.positionChannel.set_value(int(no)) def motorIsMoving(self): if str(self.get_state()) == "MOVING": return True else: return False
[docs] def get_limits(self): return (1, 12)
[docs] def get_state(self): state = self.stateChannel.get_value() curr_pos = self.get_value() if state == PyTango.DevState.ON: return ALBAZoomMotor.READY elif state == PyTango.DevState.MOVING or state == PyTango.DevState.RUNNING: return ALBAZoomMotor.MOVING elif curr_pos in self.get_limits(): return ALBAZoomMotor.ONLIMIT else: return ALBAZoomMotor.FAULT return state
[docs] def get_value(self): try: return self.positionChannel.get_value() except Exception: return self.currentposition
def get_current_position_name(self): try: n = int(self.positionChannel.get_value()) value = "%s z%s" % (n, n) self.log.debug("get_current_position_name: %s" % repr(value)) return value except Exception: self.log.debug("cannot get name zoom value") return None def stateChanged(self, state): self.log.debug("stateChanged emitted: %s" % state) the_state = self.get_state() if the_state != self.currentstate: self.currentstate = the_state self.emit("stateChanged", (the_state,)) def positionChanged(self, currentposition): previous_position = self.currentposition self.currentposition = self.get_current_position_name() if self.currentposition != previous_position: self.log.debug( "predefinedPositionChanged emitted: %s" % self.currentposition ) self.emit("predefinedPositionChanged", (self.currentposition, 0))
[docs] def is_ready(self): state = self.get_state() return state == ALBAZoomMotor.READY
def test_hwo(zoom): print(type(zoom.get_state())) print(" Zoom position is : ", zoom.get_value()) print("Zoom position name is : ", zoom.get_current_position_name()) print(" Moving : ", zoom.motorIsMoving()) print(" State : ", zoom.get_state()) print(" Positions : ", zoom.get_predefined_positions_list()) if __name__ == "__main__": test()