Skip to content

MDAWidget

MDAWidget widget

This image generated from example code below.

MDAWidget #

Bases: MDASequenceWidget

Main MDA Widget connected to a pymmcore_plus.CMMCorePlus instance.

It provides a GUI to construct and run a useq.MDASequence. Unlike useq_widgets.MDASequenceWidget, this widget is connected to a pymmcore_plus.CMMCorePlus instance, enabling awareness and control of the current state of the microscope.

Parameters:

Name Type Description Default
parent QWidget | None

Optional parent widget, by default None.

None
mmcore CMMCorePlus | None

Optional CMMCorePlus micromanager core. By default, None. If not specified, the widget will use the active (or create a new) CMMCorePlus.instance.

None

get_next_available_path(requested_path: Path) -> Path #

Get the next available path.

This method is called immediately before running an MDA to ensure that the file being saved does not overwrite an existing file. It is also called at the end of the experiment to update the save widget with the next available path.

It may be overridden to provide custom behavior, but it should always return a Path object to a non-existing file or folder.

The default behavior adds/increments a 3-digit counter at the end of the path (before the extension) if the path already exists.

Parameters:

Name Type Description Default
requested_path Path

The path we are requesting for use.

required

run_mda() -> None #

Run the MDA sequence experiment.

setValue(value: MDASequence) -> None #

Get the current state of the widget as a useq.MDASequence.

value() -> MDASequence #

Set the current state of the widget from a useq.MDASequence.

Example#

mda_widget.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
"""MDAWidget is a widget for creating and running a useq.MDASequence.

It is fully connected to the CMMCorePlus object, and has a "run" button.
"""

import useq
from pymmcore_plus import CMMCorePlus
from qtpy.QtWidgets import QApplication

from pymmcore_widgets import MDAWidget

app = QApplication([])

CMMCorePlus.instance().loadSystemConfiguration()

wdg = MDAWidget()
wdg.channels.setChannelGroups({"Channel": ["DAPI", "FITC"]})
wdg.time_plan.setValue(useq.TIntervalLoops(interval=0.5, loops=11))
wdg.valueChanged.connect(lambda: print(wdg.value()))
wdg.show()
app.exec()