This organization contains a number of packages that work together (in conjunction with pymmcore) to control microscopes in a pure python/C environment (i.e. with no Java dependency or cross-process runtime).
The diagram below attempts to clarify how many libraries and components that have been built around the micro-manager ecosystem relate to each other.
- pymmcore-plus - a drop in super-set of
pymmcore.CMMCore
. Adds a pure-python multi-dimensional acquisition engine (analogous to AcqEngineJ and the clojure acqEngine); a more robust event/signaling system for monitoring the state ofMMCore
; many additional convenience functions and structures; and an improved python developer experience (typing, docstrings, etc...) - useq-schema - an implementation agnostic schema for a sequence of events during a multi-dimensional imaging acquisition. Written in python, but language agnostic and exported as JSONschema. It is essentially just a specification for how to describe a microscopy experiment declaratively in, for example, a JSON or YAML file, or in python dataclasses. The
pymmcore_plus.CMMCorePlus.mda.run
method accepts an instance of auseq.MDASequence
object (or any iterable ofuseq.MDAEvent
objects) as an input, but conceptually, any microscope control system (independent of micro-manager) could implement support forMDASequence
. - pymmcore-widgets - a set of Qt-based widgets, each of which provide GUI-based readout and control of certain components controlled by an underlying
pymmcore_plus.CMMCorePlus
instance (for example, a shutter widget, a stage controller, or a multi-dimensional acquisition builder). - napari-micromanager - a high-level plugin for napari. It uses all of the packages listed above, and composes widgets from
pymmcore-widgets
into a complete GUI capable of running a microscope and showing the collected images in a multidimensional viewer.
- MMCore (and devices) - C++ core of micro-manager. This is the heart of micro-manager. It's what actually manages and communicates with microscope devices.
- pymmcore - thin python wrapper around mmCoreAndDevices
- MMCoreJ - The Java wrapper around mmCoreAndDevices
- Pycro-manager - python library that can control the Java micro-manager application via inter-process communication.
- PycroManagerJava - the Java half of Pycro-manager: a ZMQ server that communicates with the Python client as well as mmstudio and the Java-based acquisition engine
- MMStudio - the Java-based micro-manager GUI application.
- clojure acqEngine - original acquisition engine (written in clojure and used by MMStudio): this is the bit that has conventionally driven the microscope during an MDA acquisition.
- AcqEngJ - A Java-based alternative engine to the clojure one, originally written for MicroMagellan and Pycro-manager, but being integrated into the Java based MMStudio
- napari - multidimensional data viewer in Python.