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
bmc.py
1#!/usr/bin/env python3
2
3
19
20"""Boston MicroMachines Corporation deformable mirrors.
21"""
22
23import ctypes
24import os
25import warnings
26
27import numpy
28
29import microscope
31import microscope.abc
32
33
34try:
35 import microscope._wrappers.BMC as BMC
36except Exception as e:
37 raise microscope.LibraryLoadError(e) from e
38
39
43):
44 """Boston MicroMachines (BMC) deformable mirror.
45
46 BMC deformable mirrors only support software trigger.
47 """
48
49 def __init__(self, serial_number: str, **kwargs) -> None:
50 super().__init__(**kwargs)
51 self._dm = BMC.DM()
52
53 if __debug__:
54 BMC.ConfigureLog(os.devnull.encode(), BMC.LOG_ALL)
55 else:
56 BMC.ConfigureLog(os.devnull.encode(), BMC.LOG_OFF)
57
58 status = BMC.Open(self._dm, serial_number.encode())
59 if status:
60 raise microscope.InitialiseError(BMC.ErrorString(status))
61
62 @property
63 def n_actuators(self) -> int:
64 return self._dm.ActCount
65
66 def _do_apply_pattern(self, pattern: numpy.ndarray) -> None:
67 data_pointer = pattern.ctypes.data_as(ctypes.POINTER(ctypes.c_double))
68 status = BMC.SetArray(self._dm, data_pointer, None)
69 if status:
70 raise microscope.DeviceError(BMC.ErrorString(status))
71
72 def _do_shutdown(self) -> None:
73 status = BMC.Close(self._dm)
74 if status:
75 warnings.warn(BMC.ErrorString(status), RuntimeWarning)