Schema for multi-dimensional microscopy experiments
Project description
useq-schema
An implementation agnostic schema for describing a sequence of events during a multi-dimensional imaging acquisition.
Documentation: https://pymmcore-plus.github.io/useq-schema/
The goal of this repo is to provide a specification (and some python utilities) for generating event objects that can be consumed by microscope acquisition engines. The hope is that this will encourage interoperability between various efforts to drive automated image acquisition.
The schema tries to remain agnostic to the specific acquisition engine, though it was designed around the needs of Micro-Manager. One hope is to solicit feedback from interested parties regarding limitations and/or potential extensions to the schema. Similarly, while the "ideal" schema will support arbitrary dimensions (i.e. more than the conventional position, time, channel, z, ...), it also hard to avoid hard-coding some assumptions about dimensionality in certain places.
Any and all feedback is welcome! Please get in touch if you have any thoughts.
MDAEvent
The primary "event" object is useq.MDAEvent. This represents a single event
that a microscope should perform, including preparation of the hardware, and
execution of the event (such as an image acquisition). This is the simpler,
but more important of the two objects. Downstream libraries that aim to support
useq schema should support driving hardware based on an Iterable[MDAEvent].
- For micro-manager, this
object is most similar (though not that similar) to the events generated by
generate-acq-sequencein the clojure acquisition engine. - For pycro-manager, this
object is similar to an individual acquisition event
dictgenerated bymulti_d_acquisition_events, (and,useq.MDAEventprovides ato_pycromanager()method that returns a single pycro-manager event dict) - your object here?...
See useq.MDAEvent documentation
for more details.
Note:
useq-schemausespydanticto define models, so you can retrieve the json schema for theMDAEventobject withMDAEvent.schema_json()
MDASequence
useq.MDASequence is a declarative representation of an entire experiment. It
represents a sequence of events (as might be generated by the multidimensional
acquisition GUI in most microscope software). It is composed of "plans" for
each axis in the
experiment (such as a
Time Plan, a Z Plan, a list of channels and positions, etc.). A
useq.MDASequence object is itself iterable, and yields MDAEvent objects.
- For micro-manager, this
object is most similar to
org.micromanager.acquisition.SequenceSettings, (generated by clicking the "Acquire!" button in the Multi-D Acquisition GUI) - For pycro-manager, this
object is similar to the
multi_d_acquisition_eventsconvenience function, (anduseq.MDASequenceprovides ato_pycromanager()method that returns a list of pycro-manager events) - your object here?...
See useq.MDASequence documentation
for more details.
example MDASequence usage:
from useq import MDASequence
mda_seq = MDASequence(
stage_positions=[(100, 100, 30), (200, 150, 35)],
channels=["DAPI", "FITC"],
time_plan={'interval': 1, 'loops': 20},
z_plan={"range": 4, "step": 0.5},
axis_order='tpcz',
)
events = list(mda_seq)
print(len(events)) # 720
print(events[:3])
# [MDAEvent(
# channel=Channel(config='DAPI'),
# index=mappingproxy({'t': 0, 'p': 0, 'c': 0, 'z': 0}),
# min_start_time=0.0,
# x_pos=100.0,
# y_pos=100.0,
# z_pos=28.0,
# ),
# MDAEvent(
# channel=Channel(config='DAPI'),
# index=mappingproxy({'t': 0, 'p': 0, 'c': 0, 'z': 1}),
# min_start_time=0.0,
# x_pos=100.0,
# y_pos=100.0,
# z_pos=28.5,
# ),
# MDAEvent(
# channel=Channel(config='DAPI'),
# index=mappingproxy({'t': 0, 'p': 0, 'c': 0, 'z': 2}),
# min_start_time=0.0,
# x_pos=100.0,
# y_pos=100.0,
# z_pos=29.0,
# )]
serialize to yaml or json
print(mda_seq.yaml())
axis_order: tpcz
channels:
- config: DAPI
- config: FITC
stage_positions:
- x: 100.0
y: 100.0
z: 30.0
- x: 200.0
y: 150.0
z: 35.0
time_plan:
interval: 0:00:01
loops: 20
z_plan:
range: 4.0
step: 0.5
Executing useq-schema experiments with pymmcore-plus
pymmcore-plus implements an
acquisition engine that can execute an MDASequence using
micro-manager in a pure python environment (no Java required).
from pymmcore_plus import CMMCorePlus
core = CMMCorePlus()
core.loadSystemConfiguration() # loads demo by default
core.mda.run(mda_seq) # run the experiment
# or, construct a sequence of MDAEvents anyway you like
events = [MDAEvent(...), MDAEvent(...), ...]
core.mda.run(events)
See pymmcore-plus documentation for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file useq_schema-0.4.2.tar.gz.
File metadata
- Download URL: useq_schema-0.4.2.tar.gz
- Upload date:
- Size: 45.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d22076d32ed26a28d19359f39b7082792a8d93bca96b632b02b17a24b8c9d672
|
|
| MD5 |
2dd16d8e7dbcd1e378193f756f835e79
|
|
| BLAKE2b-256 |
75975b6c337393087ea27239c2464133c109fc016e4ad3733d713f4ac428b4bc
|
File details
Details for the file useq_schema-0.4.2-py3-none-any.whl.
File metadata
- Download URL: useq_schema-0.4.2-py3-none-any.whl
- Upload date:
- Size: 32.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75da3b549dbad7b3950f4e9808e9bafaaf4661beeb9dec331f789d71c285c724
|
|
| MD5 |
af0121c99f0a57b089c241cefcd20231
|
|
| BLAKE2b-256 |
7c923a114b67fc99f630c34defae7bf54daa59791271b207cd6179f8882f4b32
|