pymmcore-plus
extends pymmcore
(python bindings for the C++ micro-manager
core) with a number of
features designed to facilitate working with Micro-manager in pure python/C
environments.
pymmcore_plus.CMMCorePlus
is a drop-in replacement subclass ofpymmcore.CMMCore
that provides a number of helpful overrides and additional convenience functions beyond the standard CMMCore API. See CMMCorePlus documentation for details.CMMCorePlus
includes arun_mda
method (name may change) "acquisition engine" that drives micro-manager for conventional multi-dimensional experiments. It accepts an MDASequence from useq-schema for experiment design/declaration.- Adds a callback
system that adapts
the CMMCore callback object to an existing python event loop (such as Qt, or
perhaps asyncio/etc...). The
CMMCorePlus
class also fixes a number of "missed" events that are not currently emitted by the CMMCore API.
https://pymmcore-plus.github.io/pymmcore-plus/
pymmcore is (and should probably remain) a thin SWIG wrapper for the C++ code at the core of the Micro-Manager project. It is sufficient to control micromanager via python, but lacks some "niceties" that python users are accustomed to. This library:
- extends the
pymmcore.CMMCore
object with additional methods - fixes emission of a number of events in
MMCore
. - provide proper python interfaces for various objects like
Configuration
andMetadata
. - provides an object-oriented API for Devices and their properties.
- uses more interpretable
Enums
rather thanint
for various constants - improves docstrings and type annotations.
- generally feel more pythonic (note however,
camelCase
method names from the CMMCore API are not substituted withsnake_case
).
Pycro-Manager is a library designed to make it easier to work with and control the Java Micro-manager application using python. As such, it requires Java to be installed and running in the background (either via the micro-manager GUI application directly, or via a headless process). The python half communicates with the Java half using ZeroMQ messaging.
In brief: while Pycro-Manager
provides a python API to control the Java
Micro-manager application (which in turn controls the C++ core), pymmcore-plus
provides a python API to control the C++ core directly, without the need for
Java in the loop.
# from pip
pip install pymmcore-plus
# from conda
conda install -c conda-forge pymmcore-plus
# or from source tree
pip install git+https://github.com/pymmcore-plus/pymmcore-plus.git
Usually, you'll then want to install the device adapters (though you can also download these manually from micro-manager.org):
mmcore install
See installation documentation for more details.
Then use the core object as you would pymmcore.CMMCore
...
but with more features 😄
from pymmcore_plus import CMMCorePlus
core = CMMCorePlus()
...
See a number of usage examples in the documentation.
You can find some basic python scripts in the examples directory of this repository
Contributions are welcome! See contributing guide.