多维显微镜实验的Schema
项目描述
useq-schema
描述多维成像采集过程中事件序列的无实现方案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
对象。
- 对于 micro-manager,此对象与
org.micromanager.acquisition.SequenceSettings
最相似(由在多维度采集 GUI 中点击“采集!”按钮生成)。 - 对于 pycro-manager,此对象与
multi_d_acquisition_events
便利函数类似(并且useq
提供了一个将MDASequence
转换为 pycro-manager 事件列表的to_pycromanager()
方法)。 - 请在此处输入您的对象?...
有关详细信息,请参阅 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 文档。