跳转到主要内容

多维显微镜实验的Schema

项目描述

useq-schema

License PyPI - Python Version PyPI Conda tests docs codecov

描述多维成像采集过程中事件序列的无实现方案Schema。

文档:https://pymmcore-plus.github.io/useq-schema/

此仓库的目的是提供规范(和一些Python实用工具),以生成可以被显微镜采集引擎消费的事件对象。希望这将鼓励各种推动自动图像采集的努力之间的互操作性。

该模式试图对特定的采集引擎保持中立,尽管它是根据 Micro-Manager 的需求设计的。一个希望是征求有关该模式的局限性和/或潜在扩展的反馈。同样,虽然“理想”的模式将支持任意维度(即超过传统的位置、时间、通道、z等),但在某些地方也很难避免硬编码关于维度的某些假设。

欢迎所有反馈!如果您有任何想法,请与我们联系。

MDAEvent

主要的“事件”对象是 useq.MDAEvent。这代表显微镜应执行的单个事件,包括硬件准备和事件执行(如图像采集)。这是两个对象中较简单但更重要的一方。旨在支持 useq 模式的下游库应该根据 Iterable[MDAEvent] 驱动硬件。

  • 对于 micro-manager,此对象与 clojure 采集引擎中生成的 generate-acq-sequence 事件最相似(尽管并不那么相似)。
  • 对于 pycro-manager,此对象与由 multi_d_acquisition_events 生成的单个采集事件 dict 类似(并且 useq 提供了一个将 MDAEvent 转换为单个 pycro-manager 事件字典的 to_pycromanager() 方法)。
  • 请在此处输入您的对象?...

有关详细信息,请参阅 useq.MDAEvent 文档

注意: useq-schema 使用 pydantic 定义模型,因此您可以使用 MDAEvent.model_json_schema() 获取 MDAEvent 对象的 json schema

MDASequence

useq.MDASequence 是整个实验的声明性表示。它表示一系列事件(如大多数显微镜软件中的多维度采集 GUI 可能生成的事件)。它由实验中每个轴的“计划”组成(如时间计划、Z 计划、通道和位置列表等)。useq.MDASequence 对象本身是可迭代的,并生成 MDAEvent 对象。

有关详细信息,请参阅 useq.MDASequence 文档

示例 MDASequence 用法

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,
#  )]

序列化为 yaml 或 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

使用 pymmcore-plus 执行 useq-schema 实验

pymmcore-plus 实现了一个采集引擎,可以在纯 Python 环境中使用 micro-manager 执行 MDASequence(无需 Java)。

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)

有关详细信息,请参阅 pymmcore-plus 文档

由以下机构支持