You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
pymmcore-plus
Tools for using Micro-Manager in a pure-python environment
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.
In this github org:
📦 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 of MMCore; 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 a useq.MDASequence object (or any iterable of useq.MDAEvent objects) as an input, but conceptually, any microscope control system (independent of micro-manager) could implement support for MDASequence.
📦 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).
🖥️ pymmcore-gui - Complete GUI application for pymmcore-plus. This is an alternative to napari-micromanager: it uses ndv instead of napari. It is designed as a complete "double-clickable" desktop application (a replacement for the Java-Based Micro-Manager application called MMStudio).
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.
pymmcore-nano - Experimental python bindings for CMMCore using nanobind. This is an alternative to pymmcore, which uses SWIG. pymmcore-plus supports both pymmcore and pymmcore-nano, and will use nano if present.
Related, in other orgs:
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.
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