Skip to main content

Schema for multi-dimensional microscopy experiments

Project description

useq-schema

License PyPI - Python Version PyPI Conda tests docs codecov

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].

See useq.MDAEvent documentation for more details.

Note: useq-schema uses pydantic to define models, so you can retrieve the json schema for the MDAEvent object with MDAEvent.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.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

useq_schema-0.4.2.tar.gz (45.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

useq_schema-0.4.2-py3-none-any.whl (32.5 kB view details)

Uploaded Python 3

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

Hashes for useq_schema-0.4.2.tar.gz
Algorithm Hash digest
SHA256 d22076d32ed26a28d19359f39b7082792a8d93bca96b632b02b17a24b8c9d672
MD5 2dd16d8e7dbcd1e378193f756f835e79
BLAKE2b-256 75975b6c337393087ea27239c2464133c109fc016e4ad3733d713f4ac428b4bc

See more details on using hashes here.

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

Hashes for useq_schema-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 75da3b549dbad7b3950f4e9808e9bafaaf4661beeb9dec331f789d71c285c724
MD5 af0121c99f0a57b089c241cefcd20231
BLAKE2b-256 7c923a114b67fc99f630c34defae7bf54daa59791271b207cd6179f8882f4b32

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page