Source code for microscope_automation.connectors.connect_zen_blue_dummy
"""
Dummy function for ZEN blue conection
Created on Sep 23, 2016
@author: winfriedw
"""
from shutil import copy2
try:
import pathlib
except ImportError:
import pathlib2 as pathlib # noqa
import os
# if True, print out debug messages
test_messages = False
[docs]class MicroscopeStatus(object):
"""Create instance of this class to keeps track of microscope status.
Input:
none
Output:
none
"""
def __init__(self):
self._xPos = 60000
self._yPos = 40000
self._zPos = 500
self._objective_position = 0
self._objective_name = "Dummy Objective"
@property
def xPos(self):
"""Get absolute x position for stage"""
if test_messages:
print(("MicroscopeStatus returned x as {}".format(self._xPos)))
return self._xPos
@xPos.setter
def xPos(self, x):
"""Set absolute x position for stage"""
self._xPos = x
if test_messages:
print(("MicroscopeStatus set x as {}".format(self._xPos)))
@property
def yPos(self):
"""Get absolute y position for stage"""
if test_messages:
print(("MicroscopeStatus returned y as {}".format(self._yPos)))
return self._yPos
@yPos.setter
def yPos(self, y):
"""Set absolute y position for stage"""
self._yPos = y
if test_messages:
print(("MicroscopeStatus set y as {}".format(self._yPos)))
@property
def zPos(self):
"""Get absolute z position for focus drive"""
if test_messages:
print(("MicroscopeStatus returned z as {}".format(self._zPos)))
return self._zPos
@zPos.setter
def zPos(self, z):
"""Set absolute z position for focus drive"""
self._zPos = z
if test_messages:
print(("MicroscopeStatus set z as {}".format(self._zPos)))
@property
def objective_position(self):
"""Get position for objective in objective changer"""
if test_messages:
print(
(
"MicroscopeStatus returned objective_position as {}".format(
self._objective_position
)
)
)
return self._objective_position
@objective_position.setter
def objective_position(self, objective_position):
"""Set position for objective in objective changer"""
self._objective_position = objective_position
if test_messages:
print(
(
"MicroscopeStatus set objective_position as {}".format(
self._objective_position
)
)
)
@property
def objective_name(self):
"""Get name for actual objective"""
if test_messages:
print(
(
"MicroscopeStatus returned objective_name as {}".format(
self._objective_name
)
)
)
return self._objective_name
@objective_name.setter
def objective_name(self, objective_name):
"""Set name for actual objective"""
self._objective_name = objective_name
if test_messages:
print(
(
"MicroscopeStatus set objective_name as {}".format(
self._objective_name
)
)
)
[docs]class Focus(object):
def __init__(self, microscope_status):
"""Class in Zeiss.Micro.Scripting.Core namespace that gives access to focus.
Input:
none
Output:
none
"""
# Properties of class ZenFocus
self.TargetPosition = 0
self._microscope_status = microscope_status
# Attributes for focus
@property
def ActualPosition(self):
"""Get the current z position for focus drive"""
return self._microscope_status.zPos
# Methods of class ZenFocus
[docs] def Apply(self):
"""Applies the target parameter values.
Input:
none
Output:
none
"""
self._microscope_status.zPos = self.TargetPosition
[docs] def MoveTo(self, z):
"""Moves to the specified focus position.
Input:
z: Focus position in um
Output:
none
"""
self._microscope_status.zPos = z
return None
[docs]class ObjectiveChanger(object):
def __init__(self, microscope_status):
self.TargetPosition = 1
self.Magnification = 10
self._microscope_status = microscope_status
@property
def ActualPositionName(self):
"""Get name of actual objectve"""
return self._microscope_status.objective_name
@property
def ActualPosition(self):
"""Get name of actual objective position in ojbective turret"""
return self._microscope_status.objective_position
[docs] def Apply(self):
self._microscope_status.objective_position = self.TargetPosition
[docs] def GetMagnificationByPosition(self, position):
return ""
[docs] def GetNameByPosition(self, position):
return None
[docs]class Stage(object):
def __init__(self, microscope_status):
self.TargetPositionY = 0
self._microscope_status = microscope_status
@property
def ActualPositionX(self):
"""Get actual x position for stage"""
return self._microscope_status.xPos
@property
def ActualPositionY(self):
"""Get actual y position for stage"""
return self._microscope_status.yPos
[docs] def Apply(self):
self._microscope_status.xPos = self.TargetPositionX
self._microscope_status.yPos = self.TargetPositionY
[docs]class Devices(object):
"""Simulated device objects"""
def __init__(self, microscope_status):
"""Create Zen devices object"""
self.Focus = Focus(microscope_status)
self.ObjectiveChanger = ObjectiveChanger(microscope_status)
self.Stage = Stage(microscope_status)
######################################################################################
#
# Classes for Acquisition
#
######################################################################################
[docs]class Experiments(object):
def __init__(self, microscope_status):
self._microscope_status = microscope_status
[docs] def GetByName(self, experiment):
return experiment
[docs] def ActiveExperiment(self):
return "Experiment"
[docs] def Contains(self, expClass):
return True
[docs]class Image(object):
[docs] def Save_2(self, fileName):
if not (os.path.exists(fileName)):
exampleImage = "../data/testImages/WellEdge_0.czi"
copy2(exampleImage, fileName)
[docs]class Acquisition(object):
"""Simulate image acquisition"""
def __init__(self, microscope_status):
self.Experiments = Experiments(microscope_status)
self.storedAutofocus = 0
self._microscope_status = microscope_status
def _set_objective(self, experiment):
"""Sets for debug purposes active objective name based on experiment name."""
if "10x" in experiment:
self._microscope_status.objective_name = "Plan-Apochromat 10x/0.45"
self._microscope_status.objective_position = 1
if "20x" in experiment:
self._microscope_status.objective_name = "Plan-Apochromat 20x/0.8 M27"
self._microscope_status.objective_position = 2
if "100x" in experiment:
self._microscope_status.objective_name = (
"C-Apochromat 100x/1.25 W Korr UV VIS IR"
)
self._microscope_status.objective_position = 3
[docs] def Execute(self, experiment):
self._set_objective(experiment)
im = Image()
return im
[docs] def AcquireImage_3(self, expClass):
self._set_objective(expClass)
im = Image()
return im
[docs] def StartLive(self):
im = Image()
return im
[docs] def StartLive_2(self, experiment):
self._set_objective(experiment)
im = Image()
return im
[docs] def StopLive_2(self, expClass):
pass
[docs] def StopLive(self):
pass
[docs] def FindSurface(self):
"""Finds the surface using definite focus.
Input:
none
Output:
none
"""
self._microscope_status.zPos = 9000
return None
[docs] def StoreFocus(self):
"""Initializes the definite focus on the current position.
Input:
none
Output:
none
"""
self.storedAutofocus = self._microscope_status.zPos
return self.storedAutofocus
[docs] def RecallFocus(self):
"""Finds the surface + offset.
Input:
none
Output
none
"""
self._microscope_status.zPos = self.storedAutofocus + 100
return None
[docs] def FindAutoFocus(self):
"""Use the autofocus of the current experiment to find the sample.
Input:
none
Output:
none
"""
self._microscope_status.zPos = self.storedAutofocus
return None
[docs] def FindAutoFocus_2(self, experiment):
"""Use the autofocus of the current experiment to find the sample.
Input:
experiment: String name of experiment in ZEN blue software
Output:
none
"""
self._microscope_status.zPos = self.storedAutofocus
return None
######################################################################################
#
# Classes for Documents
#
######################################################################################
[docs]class Documents(object):
[docs] def RemoveAll(self, remove):
pass
[docs] def Add(self, image):
pass
######################################################################################
#
# Classes for Application
#
######################################################################################
[docs]class Application(object):
def __init__(self, microscope_status):
self.Documents = Documents()
self.microscope_status = microscope_status
[docs] def Pause(self, message):
pass
[docs] def RunMacro(self, macro_name):
print(("Test mode: Running Macro: ", macro_name))
return "ok"
[docs] def RunMacro_2(self, macro_name, macro_params):
print(
(
"Test mode: Running Macro: "
+ macro_name
+ " | Parameter: "
+ macro_params[0]
)
)
return "ok"
######################################################################################
#
# Class GetActiveObject
#
######################################################################################
[docs]class GetActiveObject(object):
"""Simulation for connection to ZEN blue software."""
def __init__(self, name):
"""
Simmulation: Connect to Carl Zeiss ZEN blue Python API
"""
microscope_status = MicroscopeStatus()
self.Devices = Devices(microscope_status)
self.Acquisition = Acquisition(microscope_status)
self.Application = Application(microscope_status)