BioImager  4.9.0
A .NET microscopy imaging application based on Bio library. Supports various microscopes by using imported libraries & GUI automation. Supports XInput game controllers to move stage, take images, run ImageJ macros on images or Bio C# scripts.
Loading...
Searching...
No Matches
microscope.lights.deepstar.DeepstarLaser Class Reference
Inheritance diagram for microscope.lights.deepstar.DeepstarLaser:
microscope.abc.SerialDeviceMixin microscope.abc.LightSource microscope.abc.TriggerTargetMixin microscope.abc.Device

Public Member Functions

 __init__ (self, com, baud=9600, timeout=2.0, **kwargs)
 
 get_status (self)
 
 get_is_on (self)
 
microscope.TriggerType trigger_type (self)
 
microscope.TriggerMode trigger_mode (self)
 
None set_trigger (self, microscope.TriggerType ttype, microscope.TriggerMode tmode)
 
- Public Member Functions inherited from microscope.abc.SerialDeviceMixin
- Public Member Functions inherited from microscope.abc.LightSource
float power (self)
 
None power (self, float power)
 
float get_set_power (self)
 
- Public Member Functions inherited from microscope.abc.TriggerTargetMixin
None trigger (self)
 
- Public Member Functions inherited from microscope.abc.Device
None __del__ (self)
 
bool get_is_enabled (self)
 
None disable (self)
 
None enable (self)
 
None initialize (self)
 
None shutdown (self)
 
None add_setting (self, name, dtype, get_func, set_func, values, typing.Optional[typing.Callable[[], bool]] readonly=None)
 
 get_setting (self, str name)
 
 get_all_settings (self)
 
None set_setting (self, str name, value)
 
 describe_setting (self, str name)
 
 describe_settings (self)
 
 update_settings (self, incoming, bool init=False)
 

Public Attributes

 connection
 
str _has_apc = b"P"
 
- Public Attributes inherited from microscope.abc.SerialDeviceMixin
 connection = None
 
- Public Attributes inherited from microscope.abc.Device
bool enabled = False
 

Protected Member Functions

 _write (self, command)
 
 _do_enable (self)
 
None _do_shutdown (self)
 
 _do_disable (self)
 
None _do_set_power (self, float power)
 
float _do_get_power (self)
 
None _do_trigger (self)
 
- Protected Member Functions inherited from microscope.abc.SerialDeviceMixin
bytes _readline (self)
 
- Protected Member Functions inherited from microscope.abc.LightSource
- Protected Member Functions inherited from microscope.abc.TriggerTargetMixin
- Protected Member Functions inherited from microscope.abc.Device

Protected Attributes

bool _has_apc = True
 
- Protected Attributes inherited from microscope.abc.SerialDeviceMixin
 _comms_lock = threading.RLock()
 
- Protected Attributes inherited from microscope.abc.LightSource
float _set_point = 0.0
 
- Protected Attributes inherited from microscope.abc.Device
dict _settings = {}
 

Additional Inherited Members

- Static Public Member Functions inherited from microscope.abc.SerialDeviceMixin
 lock_comms (func)
 

Detailed Description

Omicron DeepStar laser.

Omicron LDM lasers can be bought with and without the LDM.APC
power monitoring option (light pick-off).  If this option is not
available, the `power` attribute will return the set power value
instead of the actual power value.

Definition at line 32 of file deepstar.py.

Constructor & Destructor Documentation

◆ __init__()

microscope.lights.deepstar.DeepstarLaser.__init__ ( self,
com,
baud = 9600,
timeout = 2.0,
** kwargs )

Reimplemented from microscope.abc.SerialDeviceMixin.

Definition at line 44 of file deepstar.py.

44 def __init__(self, com, baud=9600, timeout=2.0, **kwargs):
45 super().__init__(**kwargs)
46 self.connection = serial.Serial(
47 port=com,
48 baudrate=baud,
49 timeout=timeout,
50 stopbits=serial.STOPBITS_ONE,
51 bytesize=serial.EIGHTBITS,
52 parity=serial.PARITY_NONE,
53 )
54 # If the laser is currently on, then we need to use 7-byte mode; otherwise we need to
55 # use 16-byte mode.
56 self._write(b"S?")
57 response = self._readline()
58 _logger.info("Current laser state: [%s]", response.decode())
59
60 self._write(b"STAT3")
61 option_codes = self._readline()
62 if not option_codes.startswith(b"OC "):
64 "Failed to get option codes '%s'" % option_codes.decode()
65 )
66 if option_codes[9:12] == b"AP1":
67 self._has_apc = True
68 else:
69 _logger.warning(
70 "Laser is missing APC option. Will return set"
71 " power instead of actual power"
72 )
73 self._has_apc = False
74

Member Function Documentation

◆ _do_disable()

microscope.lights.deepstar.DeepstarLaser._do_disable ( self)
protected
Do any device-specific work on disable.

Subclasses should override this method rather than modify
`disable`.

Reimplemented from microscope.abc.Device.

Definition at line 128 of file deepstar.py.

128 def _do_disable(self):
129 _logger.info("Turning laser OFF.")
130 self._write(b"LF")
131 return self._readline().decode()
132

◆ _do_enable()

microscope.lights.deepstar.DeepstarLaser._do_enable ( self)
protected
Do any device specific work on enable.

Subclasses should override this method, rather than modify
`enable`.

Reimplemented from microscope.abc.Device.

Definition at line 96 of file deepstar.py.

96 def _do_enable(self):
97 _logger.info("Turning laser ON.")
98 # Turn on deepstar mode with internal voltage ref
99 # Enable internal peak power
100 # Set MF turns off internal digital and bias modulation
101 # Disable analog modulation to digital modulation
102 for cmd, msg in [
103 (b"LON", "Enable response: [%s]"),
104 (b"L2", "L2 response: [%s]"),
105 (b"IPO", "Enable-internal peak power response: [%s]"),
106 (b"MF", "MF response [%s]"),
107 (b"A2DF", "A2DF response [%s]"),
108 ]:
109 self._write(cmd)
110 response = self._readline()
111 _logger.debug(msg, response.decode())
112
113 if not self.get_is_on():
114 # Something went wrong.
115 self._write(b"S?")
116 response = self._readline()
117 _logger.error(
118 "Failed to turn on. Current status: [%s]", response.decode()
119 )
120 return False
121 return True
122

◆ _do_get_power()

float microscope.lights.deepstar.DeepstarLaser._do_get_power ( self)
protected
Internal function that actually returns the light source power.

Reimplemented from microscope.abc.LightSource.

Definition at line 153 of file deepstar.py.

153 def _do_get_power(self) -> float:
154 if not self.get_is_on():
155 return 0.0
156 if self._has_apc:
157 query = b"P"
158 scale = 0xCCC
159 else:
160 query = b"PP"
161 scale = 0xFFF
162
163 self._write(query + b"?")
164 answer = self._readline()
165 if not answer.startswith(query):
167 "failed to read power from '%s'" % answer.decode()
168 )
169
170 level = int(answer[len(query) :], 16)
171 return float(level) / float(scale)
172

◆ _do_set_power()

None microscope.lights.deepstar.DeepstarLaser._do_set_power ( self,
float power )
protected
Internal function that actually sets the light source power.

This function will be called by the `power` attribute setter
after clipping the argument to the [0, 1] interval.

Reimplemented from microscope.abc.LightSource.

Definition at line 143 of file deepstar.py.

143 def _do_set_power(self, power: float) -> None:
144 _logger.debug("level=%d", power)
145 power_int = int(power * 0xFFF)
146 _logger.debug("power=%d", power_int)
147 strPower = "PP%03X" % power_int
148 _logger.debug("power level=%s", strPower)
149 self._write(strPower.encode())
150 response = self._readline()
151 _logger.debug("Power response [%s]", response.decode())
152

◆ _do_shutdown()

None microscope.lights.deepstar.DeepstarLaser._do_shutdown ( self)
protected
Private method - actual shutdown of the device.

Users should be calling :meth:`shutdown` and not this method.
Concrete implementations should implement this method instead
of `shutdown`.

Reimplemented from microscope.abc.Device.

Definition at line 123 of file deepstar.py.

123 def _do_shutdown(self) -> None:
124 self.disable()
125

◆ _do_trigger()

None microscope.lights.deepstar.DeepstarLaser._do_trigger ( self)
protected
Actual trigger of the device.

Classes implementing this interface should implement this
method instead of `trigger`.

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 193 of file deepstar.py.

193 def _do_trigger(self) -> None:
195 "trigger does not make sense in trigger mode bulb, only enable"
196 )

◆ _write()

microscope.lights.deepstar.DeepstarLaser._write ( self,
command )
protected
Send a command.

Reimplemented from microscope.abc.SerialDeviceMixin.

Definition at line 75 of file deepstar.py.

75 def _write(self, command):
76 """Send a command."""
77 # We'll need to pad the command out to 16 bytes. There's also
78 # a 7-byte mode but we never need to use it. CR/LF counts
79 # towards the byte limit, hence 14 (16-2)
80 command = command.ljust(14) + b"\r\n"
81 response = self.connection.write(command)
82 return response
83

◆ get_is_on()

microscope.lights.deepstar.DeepstarLaser.get_is_on ( self)
Return True if the light source is currently able to produce light.

Reimplemented from microscope.abc.LightSource.

Definition at line 136 of file deepstar.py.

136 def get_is_on(self):
137 self._write(b"S?")
138 response = self._readline()
139 _logger.debug("Are we on? [%s]", response.decode())
140 return response == b"S2"
141

◆ get_status()

microscope.lights.deepstar.DeepstarLaser.get_status ( self)
Query and return the light source status.

Reimplemented from microscope.abc.LightSource.

Definition at line 87 of file deepstar.py.

87 def get_status(self):
88 result = []
89 for i in range(4):
90 self._write(("STAT%d" % i).encode())
91 result.append(self._readline().decode())
92 return result
93

◆ set_trigger()

None microscope.lights.deepstar.DeepstarLaser.set_trigger ( self,
microscope.TriggerType ttype,
microscope.TriggerMode tmode )
Set device for a specific trigger.

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 181 of file deepstar.py.

183 ) -> None:
184 if ttype is not microscope.TriggerType.HIGH:
186 "the only trigger type supported is 'high'"
187 )
188 if tmode is not microscope.TriggerMode.BULB:
190 "the only trigger mode supported is 'bulb'"
191 )
192

◆ trigger_mode()

microscope.TriggerMode microscope.lights.deepstar.DeepstarLaser.trigger_mode ( self)

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 178 of file deepstar.py.

178 def trigger_mode(self) -> microscope.TriggerMode:
179 return microscope.TriggerMode.BULB
180

◆ trigger_type()

microscope.TriggerType microscope.lights.deepstar.DeepstarLaser.trigger_type ( self)

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 174 of file deepstar.py.

174 def trigger_type(self) -> microscope.TriggerType:
175 return microscope.TriggerType.HIGH
176

Member Data Documentation

◆ _has_apc [1/2]

bool microscope.lights.deepstar.DeepstarLaser._has_apc = True
protected

Definition at line 67 of file deepstar.py.

◆ _has_apc [2/2]

str microscope.lights.deepstar.DeepstarLaser._has_apc = b"P"

Definition at line 156 of file deepstar.py.

◆ connection

microscope.lights.deepstar.DeepstarLaser.connection
Initial value:
= serial.Serial(
port=com,
baudrate=baud,
timeout=timeout,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
)

Definition at line 46 of file deepstar.py.


The documentation for this class was generated from the following file: