Source code for mxcubecore.HardwareObjects.SOLEIL.PX1.PX1TangoLight
import time
from mxcubecore.BaseHardwareObjects import HardwareObject
[docs]class PX1TangoLight(HardwareObject):
def __init__(self, name):
super().__init__(name)
self.currentState = "unknown"
[docs] def init(self):
# self.tangoname = self.
self.attrchan = self.get_channel_object("attributeName")
self.attrchan.connect_signal("update", self.value_changed)
self.attrchan.connect_signal("connected", self._set_ready)
self.attrchan.connect_signal("disconnected", self._set_ready)
self.set_in = self.get_command_object("set_in")
self.set_in.connect_signal("connected", self._set_ready)
self.set_in.connect_signal("disconnected", self._set_ready)
self.set_out = self.get_command_object("set_out")
self.px1env_hwo = self.get_object_by_role("px1environment")
self.light_hwo = self.get_object_by_role("intensity")
self.zoom_hwo = self.get_object_by_role("zoom")
self.connect(self.zoom_hwo, "predefinedPositionChanged", self.zoom_changed)
self._set_ready()
try:
self.inversed = self.get_property("inversed")
except Exception:
self.inversed = False
if self.inversed:
self.states = ["in", "out"]
else:
self.states = ["out", "in"]
def _set_ready(self):
self.set_is_ready(self.attrchan.is_connected())
def connect_notify(self, signal):
if self.is_ready():
self.value_changed(self.attrchan.get_value())
def value_changed(self, value):
self.currentState = value
if value:
self.currentState = self.states[1]
else:
self.currentState = self.states[0]
self.emit("wagoStateChanged", (self.currentState,))
def getWagoState(self):
return self.currentState
def wagoIn(self):
self.setIn()
def wagoOut(self):
self.setOut()
def setIn(self):
if not self.px1env_hwo.isPhaseVisuSample():
self.px1env_hwo.gotoSampleViewPhase()
start_phase = time.time()
while not self.px1env_hwo.isPhaseVisuSample():
time.sleep(0.1)
if time.time() - start_phase > 20:
break
self.adjustLightLevel()
def setOut(self):
self._set_ready()
if self.is_ready():
if self.inversed:
self.set_in()
else:
self.light_hwo.set_value(0)
self.set_out()
def zoom_changed(self, position_name, value):
if self.currentState == "in":
self.log.debug("Zoom changed. and light is in. setting light level")
self.adjustLightLevel()
def adjustLightLevel(self):
if self.zoom_hwo is None or self.light_hwo is None:
return
props = self.zoom_hwo.getCurrentPositionProperties()
try:
if "lightLevel" in props.keys():
light_level = float(props["lightLevel"])
light_current = self.light_hwo.get_value()
if light_current != light_level:
self.log.debug("Setting light level to %s" % light_level)
self.light_hwo.set_value(light_level)
except Exception:
self.log.debug("Cannot set light level")