populse_mia.user_interface.pipeline_manager.node_controller

Pipeline Node Management and Filtering Module

This module provides a collection of Qt-based widgets and controllers for managing pipeline nodes, filtering database entries, and assigning values to node plugs in a data processing workflow. It is designed to integrate with a pipeline editor, enabling users to:

  • View and edit node parameters, including inputs, outputs, and attributes.

  • Filter and select database entries (e.g., scans, files) for assignment to pipeline nodes.

  • Apply advanced search and tag-based filtering to refine selections.

  • Handle undo/redo operations for parameter changes and node renaming.

  • Manage subprocesses and context names for hierarchical pipelines.

The module is built on top of Qt and Capsul, leveraging custom widgets like AttributedProcessWidget and TableDataBrowser to provide a user-friendly interface for complex pipeline interactions.

Contains:
Class:
  • AttributesFilter

  • CapsulNodeController

  • FilterWidget

  • NodeController

Classes

AttributesFilter(project, scans_list, ...)

A specialized widget for filtering database entries and collecting their attributes.

CapsulNodeController(project, scan_list, ...)

A PyQt widget for managing and editing pipeline node parameters using Capsul's AttributedProcessWidget.

FilterWidget(project, node_name, node, ...)

A PyQt widget for filtering and selecting files in a pipeline's Input_Filter process.

NodeController(project, scan_list, ...)

A PyQt widget for managing and editing the input/output values and parameters of a pipeline node.

class populse_mia.user_interface.pipeline_manager.node_controller.partial[source]

Bases: object

partial(func, *args, **keywords) - new function with partial application of the given arguments and keywords.

args

tuple of arguments to future partial calls

func

function object to use in future partial calls

keywords

dictionary of keyword arguments to future partial calls

class populse_mia.user_interface.pipeline_manager.node_controller.Path(*args, **kwargs)[source]

Bases: PurePath

PurePath subclass that can make system calls.

Path represents a filesystem path but unlike PurePath, also offers methods to do system calls on path objects. Depending on your system, instantiating a Path will return either a PosixPath or a WindowsPath object. You can also instantiate a PosixPath or WindowsPath directly, but cannot instantiate a WindowsPath on a POSIX system or vice versa.

stat(*, follow_symlinks=True)[source]

Return the result of the stat() system call on this path, like os.stat() does.

lstat()[source]

Like stat(), except if the path points to a symlink, the symlink’s status information is returned, rather than its target’s.

exists(*, follow_symlinks=True)[source]

Whether this path exists.

This method normally follows symlinks; to check whether a symlink exists, add the argument follow_symlinks=False.

is_dir()[source]

Whether this path is a directory.

is_file()[source]

Whether this path is a regular file (also True for symlinks pointing to regular files).

is_mount()[source]

Check if this path is a mount point

Whether this path is a symbolic link.

is_junction()[source]

Whether this path is a junction.

is_block_device()[source]

Whether this path is a block device.

is_char_device()[source]

Whether this path is a character device.

is_fifo()[source]

Whether this path is a FIFO.

is_socket()[source]

Whether this path is a socket.

samefile(other_path)[source]

Return whether other_path is the same or not as this file (as returned by os.path.samefile()).

open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)[source]

Open the file pointed to by this path and return a file object, as the built-in open() function does.

read_bytes()[source]

Open the file in bytes mode, read it, and close the file.

read_text(encoding=None, errors=None)[source]

Open the file in text mode, read it, and close the file.

write_bytes(data)[source]

Open the file in bytes mode, write to it, and close the file.

write_text(data, encoding=None, errors=None, newline=None)[source]

Open the file in text mode, write to it, and close the file.

iterdir()[source]

Yield path objects of the directory contents.

The children are yielded in arbitrary order, and the special entries ‘.’ and ‘..’ are not included.

_scandir()[source]
_make_child_relpath(name)[source]
glob(pattern, *, case_sensitive=None)[source]

Iterate over this subtree and yield all existing files (of any kind, including directories) matching the given relative pattern.

rglob(pattern, *, case_sensitive=None)[source]

Recursively yield all existing files (of any kind, including directories) matching the given relative pattern, anywhere in this subtree.

walk(top_down=True, on_error=None, follow_symlinks=False)[source]

Walk the directory tree from this directory, similar to os.walk().

__init__(*args, **kwargs)[source]
classmethod cwd()[source]

Return a new path pointing to the current working directory.

classmethod home()[source]

Return a new path pointing to the user’s home directory (as returned by os.path.expanduser(‘~’)).

absolute()[source]

Return an absolute version of this path by prepending the current working directory. No normalization or symlink resolution is performed.

Use resolve() to get the canonical path to a file.

resolve(strict=False)[source]

Make the path absolute, resolving all symlinks on the way and also normalizing it.

owner()[source]

Return the login name of the file owner.

group()[source]

Return the group name of the file gid.

Return the path to which the symbolic link points.

touch(mode=438, exist_ok=True)[source]

Create this file with the given access mode, if it doesn’t exist.

mkdir(mode=511, parents=False, exist_ok=False)[source]

Create a new directory at this given path.

chmod(mode, *, follow_symlinks=True)[source]

Change the permissions of the path, like os.chmod().

lchmod(mode)[source]

Like chmod(), except if the path points to a symlink, the symlink’s permissions are changed, rather than its target’s.

Remove this file or link. If the path is a directory, use rmdir() instead.

rmdir()[source]

Remove this directory. The directory must be empty.

rename(target)[source]

Rename this path to the target path.

The target path may be absolute or relative. Relative paths are interpreted relative to the current working directory, not the directory of the Path object.

Returns the new Path instance pointing to the target path.

replace(target)[source]

Rename this path to the target path, overwriting if that path exists.

The target path may be absolute or relative. Relative paths are interpreted relative to the current working directory, not the directory of the Path object.

Returns the new Path instance pointing to the target path.

Make this path a symlink pointing to the target path. Note the order of arguments (link, target) is the reverse of os.symlink.

Make this path a hard link pointing to the same file as target.

Note the order of arguments (self, target) is the reverse of os.link’s.

expanduser()[source]

Return a new path with expanded ~ and ~user constructs (as returned by os.path.expanduser)

exception populse_mia.user_interface.pipeline_manager.node_controller.TraitError(args=None, name=None, info=None, value=None)[source]

Bases: Exception

__init__(args=None, name=None, info=None, value=None)[source]
set_desc(desc, object=None)[source]
set_prefix(prefix)[source]
set_args()[source]
class populse_mia.user_interface.pipeline_manager.node_controller.ProcessCompletionEngine(process, name=None)[source]

Bases: HasTraits

Parameters completion from attributes for a process or pipeline node instance, in the context of a specific data organization.

ProcessCompletionEngine can be used directly for a pipeline, which merely delegates completion to its nodes, and has to be subclassed for a data organization framework on a node.

To get a completion engine, use:

completion_engine = ProcessCompletionEngine.get_completion_engine(
    node, name)

Note that this will assign permanently the ProcessCompletionEngine object to its associated node or process. To get and set the attributes set:

attributes = completion_engine.get_attribute_values()
print(attributes.user_traits().keys())
attributes.specific_process_attribute = 'a value'

Once attributes are set, to process with parameters completion:

completion_engine.complete_parameters()

It is possible to have complete_parameters() triggered automatically when attributes or switch nodes change. To set this up, use:

completion_engine.install_auto_completion()

ProcessCompletionEngine can (and should) be specialized, at least to provide the attributes set for a given process. A factory is used to create the correct type of ProcessCompletionEngine for a given process / name: ProcessCompletionEngineFactory

capsul.attributes.fom_completion_engine.FomProcessCompletionEngine is a specialization of ProcessCompletionEngine to manage File Organization Models (FOM).

get_completion_engine()[source]
get_attribute_values()[source]
complete_parameters()[source]
set_parameters()[source]
attributes_to_path()[source]
get_path_completion_engine()[source]
install_auto_completion()[source]
remove_auto_completion()[source]
__init__(process, name=None)[source]
_clear_node(wr)[source]

Called when the object behind the self.process proxy is about to be deleted

get_attribute_values()[source]

Get attributes Controller associated to a process or node

Returns:

  • attributes (ProcessAttributes instance)

  • The default implementation does nothing for a

  • single Process instance, and merges attributes from its children if

  • the process is a pipeline.

_get_linked_attributes()[source]
complete_parameters(process_inputs={}, complete_iterations=True)[source]

Completes file parameters from given inputs parameters, which may include both “regular” process parameters (file names) and attributes.

Parameters:
  • process_inputs (dict (optional)) – parameters to be set on the process. It may include “regular” process parameters, and attributes used for completion. Attributes should be in a sub-dictionary under the key “capsul_attributes”.

  • complete_iterations (bool (optional)) – if False, iteration nodes inside the pipeline will not run their own completion. Thus parameters for the iterations will not be correctly completed. However this has 2 advantages: 1. it prevents modification of the input pipeline, 2. it will not do iterations completion which will anyway be done (again) when building a workflow in ~capsul.pipeline.pipeline_workflow.workflow_from_pipeline.

attributes_to_path(parameter, attributes)[source]

Build a path from attributes for a given parameter in a process.

Parameters:
  • parameter (str)

  • attributes (ProcessAttributes instance (Controller))

set_parameters(process_inputs)[source]

Set the given parameters dict to the given process. process_inputs may include regular parameters of the underlying process, and attributes (capsul_attributes: dict).

attributes_changed(obj, name, old, new)[source]

Traits changed callback which triggers parameters update.

This method basically calls complete_parameters() (after some checks).

Users do not normally have to use it directly, it is used internally when install_auto_completion() has been called.

See install_auto_completion()

nodes_selection_changed(obj, name, old, new)[source]

Traits changed callback which triggers parameters update.

This method basically calls complete_parameters() (after some checks).

Users do not normally have to use it directly, it is used internally when install_auto_completion() has been called.

See install_auto_completion()

install_auto_completion()[source]

Monitor attributes changes and switches changes (which may influence attributes) and recompute parameters completion when needed.

remove_auto_completion()[source]

Remove attributes monitoring and auto-recomputing of parameters.

Reverts install_auto_completion()

get_path_completion_engine()[source]

Get a PathCompletionEngine object for the given process. The default implementation queries PathCompletionEngineFactory, but some specific ProcessCompletionEngine implementations may override it for path completion at the process level (FOMs for instance).

static get_completion_engine(process, name=None)[source]

Get a ProcessCompletionEngine instance for a given process/node within the framework of its StudyConfig factory function.

static _remove_completion_engine(process)[source]
static _del_process_callback(process)[source]
_get_schemas()[source]

Get schemas dictionary from process and its StudyConfig

_install_subprogress_moniotoring(subprocess_compl)[source]
_remove_subprogress_moniotoring(subprocess_compl)[source]
static _substep_completion_progress(self, substep_completion_engine, obj, name, old, new)[source]
remove_attributes()[source]

Clear attributes controller cache, to allow rebuilding it after a change. This is generally a callback attached to switches changes.

remove_switch_observers()[source]

Remove notification callbacks previously set to listen switches state changes.

class populse_mia.user_interface.pipeline_manager.node_controller.PipelineNode(pipeline, name, process, **kwargs)[source]

Bases: ProcessNode

A special node to store the pipeline user-parameters

get_connections_through(plug_name, single=False)[source]

If the node has internal links (inside a pipeline, or in a switch or other custom connection node), return the “other side” of the internal connection to the selected plug. The returned plug may be in an internal node (in a pipeline), or in an external node connected to the node. When the node is “opaque” (no internal connections), it returns the input plug. When the node is inactive / disabled, it returns [].

Parameters:
  • plug_name (str) – plug to get connections with

  • single (bool) – if True, stop at the first connected plug. Otherwise return the list of all connected plugs.

Returns:

[(node, plug_name, plug), …] Returns [(self, plug_name, plug)] when the plug has no internal connection.

Return type:

connected_plug; list of tuples

class populse_mia.user_interface.pipeline_manager.node_controller.ProcessIteration(process, iterative_parameters, study_config=None, context_name=None)[source]

Bases: Process

Note

  • Type ‘ProcessIteration.help()’ for a full description of this process parameters.

  • Type ‘<ProcessIteration>.get_input_spec()’ for a full description of this process input trait types.

  • Type ‘<ProcessIteration>.get_output_spec()’ for a full description of this process output trait types.

_doc_path = 'api/pipeline.html#processiteration'
__init__(process, iterative_parameters, study_config=None, context_name=None)[source]

Initialize the Process class.

_resize_outputs()[source]
change_iterative_plug(parameter, iterative=None)[source]

Change a parameter to be iterative (or non-iterative)

Parameters:
  • parameter (str) – parameter name

  • iterative (bool or None) – if None, the iterative state will be toggled. If True or False, the parameter state will be set accordingly.

_run_process()[source]

Runs the processings when the instance is called.

Either this _run_process() or get_commandline() must be defined in derived classes.

Note that _run_process() is called as a python function, on a Process instance. When using remote processing (cluster for instance), this means that the commandline which will run needs to be able to re- instantiate the same process: the process thus has to be stored in a file or python module which can be accessed from the remote machine, and python / capsul correctly installed and available on it.

get_commandline() at the contrary, can implement commandlines which are completely independent from Capsul, and from python.

Note

If both methods are not defined in the derived class a NotImplementedError error is raised.

On the other side, if both methods are overloaded, the process behavior in local sequential computing mode and in Soma-Workflow modes may be different.

set_study_config(study_config)[source]

Set a StudyConfig for the process. Note that it can only be done once: once a non-null StudyConfig has been assigned to the process, it should not change.

complete_iteration(iteration)[source]
class populse_mia.user_interface.pipeline_manager.node_controller.AttributedProcessWidget(attributed_process, enable_attr_from_filename=False, enable_load_buttons=False, override_control_types=None, separate_outputs=True, user_data=None, userlevel=0, scroll=True)[source]

Bases: QWidget

Process interface with attributes completion handling

__init__(attributed_process, enable_attr_from_filename=False, enable_load_buttons=False, override_control_types=None, separate_outputs=True, user_data=None, userlevel=0, scroll=True)[source]
Parameters:
  • attributed_process (Process instance) – process with attributes to be displayed

  • enable_attr_from_filename (bool (optional)) – if enabled, it will be possible to specify an input filename to build attributes from

  • override_control_types (dict (optional)) – if given, this is a “factory” dict assigning new controller editor types to some traits types in the parameters controller.

  • separate_outputs (bool) – if True, inputs and outputs (traits with output=True set) will be separated into two boxes.

  • user_data (any type (optional)) – optional user data that can be accessed by individual control editors

  • userlevel (int) – the current user level: some traits may be marked with a non-zero userlevel, and will only be visible if the ControllerWidget userlevel is more than (or equal) the trait level.

  • scroll (bool) – if True, the widget includes scrollbars in the parameters and attributes sections when needed, otherwise it will be a fixed size widget.

property userlevel
on_input_filename_changed(text)[source]

Input file path to guess completion attributes changed: update attributes

on_btn_load_json()[source]

Load attributes from a json file

on_btn_save_json()[source]

Save attributes in a json file

set_use_fom()[source]

Setup the FOM doing its job

_reset_fom_checkbox()[source]
on_use_fom_change(state)[source]

Use completion checkbox callback

show_completion(visible=None)[source]

Show or hide completion (File, Directory, or Any parameters)

Parameters:

visible (bool (optional)) – show/hide. If None, switch the current visibility state.

on_show_completion(visible)[source]

Toggle the visibility of paths parameters

_completion_progress_changed(obj, name, old, new)[source]
class populse_mia.user_interface.pipeline_manager.node_controller.pyqtSignal(*types, name: str = ..., revision: int = ..., arguments: Sequence = ...)

Bases: object

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

__init__(*args, **kwargs)
signatures

The signatures of each of the overloaded signals

class populse_mia.user_interface.pipeline_manager.node_controller.QIcon
class populse_mia.user_interface.pipeline_manager.node_controller.QIcon(pixmap: QPixmap)
class populse_mia.user_interface.pipeline_manager.node_controller.QIcon(other: QIcon)
class populse_mia.user_interface.pipeline_manager.node_controller.QIcon(fileName: str | None)
class populse_mia.user_interface.pipeline_manager.node_controller.QIcon(engine: QIconEngine | None)
class populse_mia.user_interface.pipeline_manager.node_controller.QIcon(variant: Any)

Bases: wrapper

Active = 2
Disabled = 1
class Mode

Bases: int

Normal = 0
Off = 1
On = 0
Selected = 3
class State

Bases: int

actualSize(self, size: QSize, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off) QSize
actualSize(self, window: QWindow | None, size: QSize, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off) QSize
addFile(self, fileName: str | None, size: QSize = QSize(), mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off)
addPixmap(self, pixmap: QPixmap, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off)
availableSizes(self, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off) List[QSize]
cacheKey(self) int
fallbackSearchPaths() List[str]
fallbackThemeName() str
fromTheme(name: str | None) QIcon
fromTheme(name: str | None, fallback: QIcon) QIcon
hasThemeIcon(name: str | None) bool
isDetached(self) bool
isMask(self) bool
isNull(self) bool
name(self) str
paint(self, painter: QPainter | None, rect: QRect, alignment: Qt.Alignment | Qt.AlignmentFlag = Qt.AlignCenter, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off)
paint(self, painter: QPainter | None, x: int, y: int, w: int, h: int, alignment: Qt.Alignment | Qt.AlignmentFlag = Qt.AlignCenter, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off) None
pixmap(self, size: QSize, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off) QPixmap
pixmap(self, w: int, h: int, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off) QPixmap
pixmap(self, extent: int, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off) QPixmap
pixmap(self, window: QWindow | None, size: QSize, mode: QIcon.Mode = QIcon.Normal, state: QIcon.State = QIcon.Off) QPixmap
setFallbackSearchPaths(paths: Iterable[str | None])
setFallbackThemeName(name: str | None)
setIsMask(self, isMask: bool)
setThemeName(path: str | None)
setThemeSearchPaths(searchpath: Iterable[str | None])
swap(self, other: QIcon)
themeName() str
themeSearchPaths() List[str]
class populse_mia.user_interface.pipeline_manager.node_controller.QApplication(argv: List[str])

Bases: QGuiApplication

class ColorSpec

Bases: int

CustomColor = 1
ManyColor = 2
NormalColor = 0
aboutQt()
activeModalWidget() QWidget | None
activePopupWidget() QWidget | None
activeWindow() QWidget | None
alert(widget: QWidget | None, msecs: int = 0)
allWidgets() List[QWidget]
autoSipEnabled(self) bool
beep()
closeAllWindows()
colorSpec() int
cursorFlashTime() int
desktop() QDesktopWidget | None
doubleClickInterval() int
event(self, a0: QEvent | None) bool
exec() int
exec_() int
focusChanged

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

focusWidget() QWidget | None
font() QFont
font(a0: QWidget | None) QFont
font(className: str | None) QFont
fontMetrics() QFontMetrics
globalStrut() QSize
isEffectEnabled(a0: Qt.UIEffect) bool
keyboardInputInterval() int
notify(self, a0: QObject | None, a1: QEvent | None) bool
palette() QPalette
palette(a0: QWidget | None) QPalette
palette(className: str | None) QPalette
setActiveWindow(act: QWidget | None)
setAutoSipEnabled(self, enabled: bool)
setColorSpec(a0: int)
setCursorFlashTime(a0: int)
setDoubleClickInterval(a0: int)
setEffectEnabled(a0: Qt.UIEffect, enabled: bool = True)
setFont(a0: QFont, className: str | None = None)
setGlobalStrut(a0: QSize)
setKeyboardInputInterval(a0: int)
setPalette(a0: QPalette, className: str | None = None)
setStartDragDistance(l: int)
setStartDragTime(ms: int)
setStyle(a0: QStyle | None)
setStyle(a0: str | None) QStyle | None
setStyleSheet(self, sheet: str | None)
setWheelScrollLines(a0: int)
setWindowIcon(icon: QIcon)
startDragDistance() int
startDragTime() int
style() QStyle | None
styleSheet(self) str
topLevelAt(p: QPoint) QWidget | None
topLevelAt(x: int, y: int) QWidget | None
topLevelWidgets() List[QWidget]
wheelScrollLines() int
widgetAt(p: QPoint) QWidget | None
widgetAt(x: int, y: int) QWidget | None
windowIcon() QIcon
class populse_mia.user_interface.pipeline_manager.node_controller.QDialog(parent: QWidget | None = None, flags: Qt.WindowFlags | Qt.WindowType = Qt.WindowFlags())

Bases: QWidget

Accepted = 1
class DialogCode

Bases: int

Rejected = 0
accept(self)
accepted

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

closeEvent(self, a0: QCloseEvent | None)
contextMenuEvent(self, a0: QContextMenuEvent | None)
done(self, a0: int)
eventFilter(self, a0: QObject | None, a1: QEvent | None) bool
exec(self) int
exec_(self) int
finished

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

isSizeGripEnabled(self) bool
keyPressEvent(self, a0: QKeyEvent | None)
minimumSizeHint(self) QSize
open(self)
reject(self)
rejected

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

resizeEvent(self, a0: QResizeEvent | None)
result(self) int
setModal(self, modal: bool)
setResult(self, r: int)
setSizeGripEnabled(self, a0: bool)
setVisible(self, visible: bool)
showEvent(self, a0: QShowEvent | None)
sizeHint(self) QSize
class populse_mia.user_interface.pipeline_manager.node_controller.QDialogButtonBox(parent: QWidget | None = None)
class populse_mia.user_interface.pipeline_manager.node_controller.QDialogButtonBox(orientation: Qt.Orientation, parent: QWidget | None = None)
class populse_mia.user_interface.pipeline_manager.node_controller.QDialogButtonBox(buttons: QDialogButtonBox.StandardButtons | QDialogButtonBox.StandardButton, parent: QWidget | None = None)
class populse_mia.user_interface.pipeline_manager.node_controller.QDialogButtonBox(buttons: QDialogButtonBox.StandardButtons | QDialogButtonBox.StandardButton, orientation: Qt.Orientation, parent: QWidget | None = None)

Bases: QWidget

Abort = 262144
AcceptRole = 0
ActionRole = 3
AndroidLayout = 5
Apply = 33554432
ApplyRole = 8
class ButtonLayout

Bases: int

class ButtonRole

Bases: int

Cancel = 4194304
Close = 2097152
DestructiveRole = 2
Discard = 8388608
GnomeLayout = 3
Help = 16777216
HelpRole = 4
Ignore = 1048576
InvalidRole = -1
KdeLayout = 2
MacLayout = 1
No = 65536
NoButton = 0
NoRole = 6
NoToAll = 131072
Ok = 1024
Open = 8192
RejectRole = 1
Reset = 67108864
ResetRole = 7
RestoreDefaults = 134217728
Retry = 524288
Save = 2048
SaveAll = 4096
class StandardButton

Bases: int

class StandardButtons
class StandardButtons(f: QDialogButtonBox.StandardButtons | QDialogButtonBox.StandardButton)
class StandardButtons(a0: QDialogButtonBox.StandardButtons)

Bases: simplewrapper

WinLayout = 0
Yes = 16384
YesRole = 5
YesToAll = 32768
accepted

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

addButton(self, button: QAbstractButton | None, role: QDialogButtonBox.ButtonRole)
addButton(self, text: str | None, role: QDialogButtonBox.ButtonRole) QPushButton | None
addButton(self, button: QDialogButtonBox.StandardButton) QPushButton | None
button(self, which: QDialogButtonBox.StandardButton) QPushButton | None
buttonRole(self, button: QAbstractButton | None) QDialogButtonBox.ButtonRole
buttons(self) List[QAbstractButton]
centerButtons(self) bool
changeEvent(self, event: QEvent | None)
clear(self)
clicked

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

event(self, event: QEvent | None) bool
helpRequested

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

orientation(self) Qt.Orientation
rejected

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

removeButton(self, button: QAbstractButton | None)
setCenterButtons(self, center: bool)
setOrientation(self, orientation: Qt.Orientation)
setStandardButtons(self, buttons: QDialogButtonBox.StandardButtons | QDialogButtonBox.StandardButton)
standardButton(self, button: QAbstractButton | None) QDialogButtonBox.StandardButton
standardButtons(self) QDialogButtonBox.StandardButtons
class populse_mia.user_interface.pipeline_manager.node_controller.QGroupBox(parent: QWidget | None = None)
class populse_mia.user_interface.pipeline_manager.node_controller.QGroupBox(title: str | None, parent: QWidget | None = None)

Bases: QWidget

alignment(self) Qt.Alignment
changeEvent(self, a0: QEvent | None)
childEvent(self, a0: QChildEvent | None)
clicked

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

event(self, a0: QEvent | None) bool
focusInEvent(self, a0: QFocusEvent | None)
initStyleOption(self, option: QStyleOptionGroupBox | None)
isCheckable(self) bool
isChecked(self) bool
isFlat(self) bool
minimumSizeHint(self) QSize
mouseMoveEvent(self, event: QMouseEvent | None)
mousePressEvent(self, event: QMouseEvent | None)
mouseReleaseEvent(self, event: QMouseEvent | None)
paintEvent(self, a0: QPaintEvent | None)
resizeEvent(self, a0: QResizeEvent | None)
setAlignment(self, a0: int)
setCheckable(self, b: bool)
setChecked(self, b: bool)
setFlat(self, b: bool)
setTitle(self, a0: str | None)
title(self) str
toggled

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

class populse_mia.user_interface.pipeline_manager.node_controller.QHBoxLayout
class populse_mia.user_interface.pipeline_manager.node_controller.QHBoxLayout(parent: QWidget | None)

Bases: QBoxLayout

class populse_mia.user_interface.pipeline_manager.node_controller.QLabel(parent: QWidget | None = None, flags: Qt.WindowFlags | Qt.WindowType = Qt.WindowFlags())
class populse_mia.user_interface.pipeline_manager.node_controller.QLabel(text: str | None, parent: QWidget | None = None, flags: Qt.WindowFlags | Qt.WindowType = Qt.WindowFlags())

Bases: QFrame

alignment(self) Qt.Alignment
buddy(self) QWidget | None
changeEvent(self, a0: QEvent | None)
clear(self)
contextMenuEvent(self, ev: QContextMenuEvent | None)
event(self, e: QEvent | None) bool
focusInEvent(self, ev: QFocusEvent | None)
focusNextPrevChild(self, next: bool) bool
focusOutEvent(self, ev: QFocusEvent | None)
hasScaledContents(self) bool
hasSelectedText(self) bool
heightForWidth(self, a0: int) int
indent(self) int
keyPressEvent(self, ev: QKeyEvent | None)
linkActivated

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

linkHovered

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

margin(self) int
minimumSizeHint(self) QSize
mouseMoveEvent(self, ev: QMouseEvent | None)
mousePressEvent(self, ev: QMouseEvent | None)
mouseReleaseEvent(self, ev: QMouseEvent | None)
movie(self) QMovie | None
paintEvent(self, a0: QPaintEvent | None)
picture(self) QPicture | None
pixmap(self) QPixmap | None
selectedText(self) str
selectionStart(self) int
setAlignment(self, a0: Qt.Alignment | Qt.AlignmentFlag)
setBuddy(self, a0: QWidget | None)
setIndent(self, a0: int)
setMargin(self, a0: int)
setMovie(self, movie: QMovie | None)
setNum(self, a0: float)
setNum(self, a0: int) None
setPicture(self, a0: QPicture)
setPixmap(self, a0: QPixmap)
setScaledContents(self, a0: bool)
setSelection(self, a0: int, a1: int)
setText(self, a0: str | None)
setTextFormat(self, a0: Qt.TextFormat)
setTextInteractionFlags(self, flags: Qt.TextInteractionFlags | Qt.TextInteractionFlag)
setWordWrap(self, on: bool)
sizeHint(self) QSize
text(self) str
textFormat(self) Qt.TextFormat
textInteractionFlags(self) Qt.TextInteractionFlags
wordWrap(self) bool
class populse_mia.user_interface.pipeline_manager.node_controller.QLineEdit(parent: QWidget | None = None)
class populse_mia.user_interface.pipeline_manager.node_controller.QLineEdit(contents: str | None, parent: QWidget | None = None)

Bases: QWidget

class ActionPosition

Bases: int

class EchoMode

Bases: int

LeadingPosition = 0
NoEcho = 1
Normal = 0
Password = 2
PasswordEchoOnEdit = 3
TrailingPosition = 1
addAction(self, action: QAction | None)
addAction(self, action: QAction | None, position: QLineEdit.ActionPosition) None
addAction(self, icon: QIcon, position: QLineEdit.ActionPosition) QAction | None
alignment(self) Qt.Alignment
backspace(self)
changeEvent(self, a0: QEvent | None)
clear(self)
completer(self) QCompleter | None
contextMenuEvent(self, a0: QContextMenuEvent | None)
copy(self)
createStandardContextMenu(self) QMenu | None
cursorBackward(self, mark: bool, steps: int = 1)
cursorForward(self, mark: bool, steps: int = 1)
cursorMoveStyle(self) Qt.CursorMoveStyle
cursorPosition(self) int
cursorPositionAt(self, pos: QPoint) int
cursorPositionChanged

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

cursorRect(self) QRect
cursorWordBackward(self, mark: bool)
cursorWordForward(self, mark: bool)
cut(self)
del_(self)
deselect(self)
displayText(self) str
dragEnabled(self) bool
dragEnterEvent(self, a0: QDragEnterEvent | None)
dragLeaveEvent(self, e: QDragLeaveEvent | None)
dragMoveEvent(self, e: QDragMoveEvent | None)
dropEvent(self, a0: QDropEvent | None)
echoMode(self) QLineEdit.EchoMode
editingFinished

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

end(self, mark: bool)
event(self, a0: QEvent | None) bool
focusInEvent(self, a0: QFocusEvent | None)
focusOutEvent(self, a0: QFocusEvent | None)
getTextMargins(self)
hasAcceptableInput(self) bool
hasFrame(self) bool
hasSelectedText(self) bool
home(self, mark: bool)
initStyleOption(self, option: QStyleOptionFrame | None)
inputMask(self) str
inputMethodEvent(self, a0: QInputMethodEvent | None)
inputMethodQuery(self, a0: Qt.InputMethodQuery) Any
inputMethodQuery(self, property: Qt.InputMethodQuery, argument: Any) Any
inputRejected

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

insert(self, a0: str | None)
isClearButtonEnabled(self) bool
isModified(self) bool
isReadOnly(self) bool
isRedoAvailable(self) bool
isUndoAvailable(self) bool
keyPressEvent(self, a0: QKeyEvent | None)
maxLength(self) int
minimumSizeHint(self) QSize
mouseDoubleClickEvent(self, a0: QMouseEvent | None)
mouseMoveEvent(self, a0: QMouseEvent | None)
mousePressEvent(self, a0: QMouseEvent | None)
mouseReleaseEvent(self, a0: QMouseEvent | None)
paintEvent(self, a0: QPaintEvent | None)
paste(self)
placeholderText(self) str
redo(self)
returnPressed

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

selectAll(self)
selectedText(self) str
selectionChanged

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

selectionEnd(self) int
selectionLength(self) int
selectionStart(self) int
setAlignment(self, flag: Qt.Alignment | Qt.AlignmentFlag)
setClearButtonEnabled(self, enable: bool)
setCompleter(self, completer: QCompleter | None)
setCursorMoveStyle(self, style: Qt.CursorMoveStyle)
setCursorPosition(self, a0: int)
setDragEnabled(self, b: bool)
setEchoMode(self, a0: QLineEdit.EchoMode)
setFrame(self, a0: bool)
setInputMask(self, inputMask: str | None)
setMaxLength(self, a0: int)
setModified(self, a0: bool)
setPlaceholderText(self, a0: str | None)
setReadOnly(self, a0: bool)
setSelection(self, a0: int, a1: int)
setText(self, a0: str | None)
setTextMargins(self, left: int, top: int, right: int, bottom: int)
setTextMargins(self, margins: QMargins) None
setValidator(self, a0: QValidator | None)
sizeHint(self) QSize
text(self) str
textChanged

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

textEdited

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

textMargins(self) QMargins
undo(self)
validator(self) QValidator | None
class populse_mia.user_interface.pipeline_manager.node_controller.QMessageBox(parent: QWidget | None = None)
class populse_mia.user_interface.pipeline_manager.node_controller.QMessageBox(icon: QMessageBox.Icon, title: str | None, text: str | None, buttons: QMessageBox.StandardButtons | QMessageBox.StandardButton = QMessageBox.NoButton, parent: QWidget | None = None, flags: Qt.WindowFlags | Qt.WindowType = Qt.Dialog | Qt.MSWindowsFixedSizeDialogHint)

Bases: QDialog

Abort = 262144
AcceptRole = 0
ActionRole = 3
Apply = 33554432
ApplyRole = 8
ButtonMask = -769
class ButtonRole

Bases: int

Cancel = 4194304
Close = 2097152
Critical = 3
Default = 256
DestructiveRole = 2
Discard = 8388608
Escape = 512
FirstButton = 1024
FlagMask = 768
Help = 16777216
HelpRole = 4
class Icon

Bases: int

Ignore = 1048576
Information = 1
InvalidRole = -1
LastButton = 134217728
No = 65536
NoAll = 131072
NoButton = 0
NoIcon = 0
NoRole = 6
NoToAll = 131072
Ok = 1024
Open = 8192
Question = 4
RejectRole = 1
Reset = 67108864
ResetRole = 7
RestoreDefaults = 134217728
Retry = 524288
Save = 2048
SaveAll = 4096
class StandardButton

Bases: int

class StandardButtons
class StandardButtons(f: QMessageBox.StandardButtons | QMessageBox.StandardButton)
class StandardButtons(a0: QMessageBox.StandardButtons)

Bases: simplewrapper

Warning = 2
Yes = 16384
YesAll = 32768
YesRole = 5
YesToAll = 32768
about(parent: QWidget | None, caption: str | None, text: str | None)
aboutQt(parent: QWidget | None, title: str | None = '')
addButton(self, button: QAbstractButton | None, role: QMessageBox.ButtonRole)
addButton(self, text: str | None, role: QMessageBox.ButtonRole) QPushButton | None
addButton(self, button: QMessageBox.StandardButton) QPushButton | None
button(self, which: QMessageBox.StandardButton) QAbstractButton | None
buttonClicked

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

buttonRole(self, button: QAbstractButton | None) QMessageBox.ButtonRole
buttons(self) List[QAbstractButton]
changeEvent(self, a0: QEvent | None)
checkBox(self) QCheckBox | None
clickedButton(self) QAbstractButton | None
closeEvent(self, a0: QCloseEvent | None)
critical(parent: QWidget | None, title: str | None, text: str | None, buttons: QMessageBox.StandardButtons | QMessageBox.StandardButton = QMessageBox.Ok, defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) QMessageBox.StandardButton
defaultButton(self) QPushButton | None
detailedText(self) str
escapeButton(self) QAbstractButton | None
event(self, e: QEvent | None) bool
icon(self) QMessageBox.Icon
iconPixmap(self) QPixmap
information(parent: QWidget | None, title: str | None, text: str | None, buttons: QMessageBox.StandardButtons | QMessageBox.StandardButton = QMessageBox.Ok, defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) QMessageBox.StandardButton
informativeText(self) str
keyPressEvent(self, a0: QKeyEvent | None)
open(self)
open(self, slot: PYQT_SLOT) None
question(parent: QWidget | None, title: str | None, text: str | None, buttons: QMessageBox.StandardButtons | QMessageBox.StandardButton = QMessageBox.StandardButtons(QMessageBox.Yes | QMessageBox.No), defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) QMessageBox.StandardButton
removeButton(self, button: QAbstractButton | None)
resizeEvent(self, a0: QResizeEvent | None)
setCheckBox(self, cb: QCheckBox | None)
setDefaultButton(self, button: QPushButton | None)
setDefaultButton(self, button: QMessageBox.StandardButton) None
setDetailedText(self, text: str | None)
setEscapeButton(self, button: QAbstractButton | None)
setEscapeButton(self, button: QMessageBox.StandardButton) None
setIcon(self, a0: QMessageBox.Icon)
setIconPixmap(self, a0: QPixmap)
setInformativeText(self, text: str | None)
setStandardButtons(self, buttons: QMessageBox.StandardButtons | QMessageBox.StandardButton)
setText(self, a0: str | None)
setTextFormat(self, a0: Qt.TextFormat)
setTextInteractionFlags(self, flags: Qt.TextInteractionFlags | Qt.TextInteractionFlag)
setWindowModality(self, windowModality: Qt.WindowModality)
setWindowTitle(self, title: str | None)
showEvent(self, a0: QShowEvent | None)
standardButton(self, button: QAbstractButton | None) QMessageBox.StandardButton
standardButtons(self) QMessageBox.StandardButtons
standardIcon(icon: QMessageBox.Icon) QPixmap
text(self) str
textFormat(self) Qt.TextFormat
textInteractionFlags(self) Qt.TextInteractionFlags
warning(parent: QWidget | None, title: str | None, text: str | None, buttons: QMessageBox.StandardButtons | QMessageBox.StandardButton = QMessageBox.Ok, defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) QMessageBox.StandardButton
class populse_mia.user_interface.pipeline_manager.node_controller.QPushButton(parent: QWidget | None = None)
class populse_mia.user_interface.pipeline_manager.node_controller.QPushButton(text: str | None, parent: QWidget | None = None)
class populse_mia.user_interface.pipeline_manager.node_controller.QPushButton(icon: QIcon, text: str | None, parent: QWidget | None = None)

Bases: QAbstractButton

autoDefault(self) bool
event(self, e: QEvent | None) bool
focusInEvent(self, a0: QFocusEvent | None)
focusOutEvent(self, a0: QFocusEvent | None)
hitButton(self, pos: QPoint) bool
initStyleOption(self, option: QStyleOptionButton | None)
isDefault(self) bool
isFlat(self) bool
keyPressEvent(self, a0: QKeyEvent | None)
menu(self) QMenu | None
minimumSizeHint(self) QSize
paintEvent(self, a0: QPaintEvent | None)
setAutoDefault(self, a0: bool)
setDefault(self, a0: bool)
setFlat(self, a0: bool)
setMenu(self, menu: QMenu | None)
showMenu(self)
sizeHint(self) QSize
class populse_mia.user_interface.pipeline_manager.node_controller.QToolButton(parent: QWidget | None = None)

Bases: QAbstractButton

DelayedPopup = 0
InstantPopup = 2
MenuButtonPopup = 1
class ToolButtonPopupMode

Bases: int

actionEvent(self, a0: QActionEvent | None)
arrowType(self) Qt.ArrowType
autoRaise(self) bool
changeEvent(self, a0: QEvent | None)
defaultAction(self) QAction | None
enterEvent(self, a0: QEvent | None)
event(self, e: QEvent | None) bool
hitButton(self, pos: QPoint) bool
initStyleOption(self, option: QStyleOptionToolButton | None)
leaveEvent(self, a0: QEvent | None)
menu(self) QMenu | None
minimumSizeHint(self) QSize
mousePressEvent(self, a0: QMouseEvent | None)
mouseReleaseEvent(self, a0: QMouseEvent | None)
nextCheckState(self)
paintEvent(self, a0: QPaintEvent | None)
popupMode(self) QToolButton.ToolButtonPopupMode
setArrowType(self, type: Qt.ArrowType)
setAutoRaise(self, enable: bool)
setDefaultAction(self, a0: QAction | None)
setMenu(self, menu: QMenu | None)
setPopupMode(self, mode: QToolButton.ToolButtonPopupMode)
setToolButtonStyle(self, style: Qt.ToolButtonStyle)
showMenu(self)
sizeHint(self) QSize
timerEvent(self, a0: QTimerEvent | None)
toolButtonStyle(self) Qt.ToolButtonStyle
triggered

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

class populse_mia.user_interface.pipeline_manager.node_controller.QVBoxLayout
class populse_mia.user_interface.pipeline_manager.node_controller.QVBoxLayout(parent: QWidget | None)

Bases: QBoxLayout

class populse_mia.user_interface.pipeline_manager.node_controller.QWidget(parent: QWidget | None = None, flags: Qt.WindowFlags | Qt.WindowType = Qt.WindowFlags())

Bases: QObject, QPaintDevice

DrawChildren = 2
DrawWindowBackground = 1
IgnoreMask = 4
class RenderFlag

Bases: int

class RenderFlags
class RenderFlags(f: QWidget.RenderFlags | QWidget.RenderFlag)
class RenderFlags(a0: QWidget.RenderFlags)

Bases: simplewrapper

acceptDrops(self) bool
accessibleDescription(self) str
accessibleName(self) str
actionEvent(self, a0: QActionEvent | None)
actions(self) List[QAction]
activateWindow(self)
addAction(self, action: QAction | None)
addActions(self, actions: Iterable[QAction])
adjustSize(self)
autoFillBackground(self) bool
backgroundRole(self) QPalette.ColorRole
baseSize(self) QSize
changeEvent(self, a0: QEvent | None)
childAt(self, p: QPoint) QWidget | None
childAt(self, ax: int, ay: int) QWidget | None
childrenRect(self) QRect
childrenRegion(self) QRegion
clearFocus(self)
clearMask(self)
close(self) bool
closeEvent(self, a0: QCloseEvent | None)
contentsMargins(self) QMargins
contentsRect(self) QRect
contextMenuEvent(self, a0: QContextMenuEvent | None)
contextMenuPolicy(self) Qt.ContextMenuPolicy
create(self, window: PyQt5.sip.voidptr = None, initializeWindow: bool = True, destroyOldWindow: bool = True)
createWindowContainer(window: QWindow | None, parent: QWidget | None = None, flags: Qt.WindowFlags | Qt.WindowType = 0) QWidget
cursor(self) QCursor
customContextMenuRequested

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

destroy(self, destroyWindow: bool = True, destroySubWindows: bool = True)
devType(self) int
dragEnterEvent(self, a0: QDragEnterEvent | None)
dragLeaveEvent(self, a0: QDragLeaveEvent | None)
dragMoveEvent(self, a0: QDragMoveEvent | None)
dropEvent(self, a0: QDropEvent | None)
effectiveWinId(self) PyQt5.sip.voidptr
ensurePolished(self)
enterEvent(self, a0: QEvent | None)
event(self, a0: QEvent | None) bool
find(a0: PyQt5.sip.voidptr) QWidget | None
focusInEvent(self, a0: QFocusEvent | None)
focusNextChild(self) bool
focusNextPrevChild(self, next: bool) bool
focusOutEvent(self, a0: QFocusEvent | None)
focusPolicy(self) Qt.FocusPolicy
focusPreviousChild(self) bool
focusProxy(self) QWidget | None
focusWidget(self) QWidget | None
font(self) QFont
fontInfo(self) QFontInfo
fontMetrics(self) QFontMetrics
foregroundRole(self) QPalette.ColorRole
frameGeometry(self) QRect
frameSize(self) QSize
geometry(self) QRect
getContentsMargins(self)
grab(self, rectangle: QRect = QRect(QPoint(0, 0), QSize(-1, -1))) QPixmap
grabGesture(self, type: Qt.GestureType, flags: Qt.GestureFlags | Qt.GestureFlag = Qt.GestureFlags())
grabKeyboard(self)
grabMouse(self)
grabMouse(self, a0: QCursor | Qt.CursorShape) None
grabShortcut(self, key: QKeySequence | QKeySequence.StandardKey | str | None | int, context: Qt.ShortcutContext = Qt.WindowShortcut) int
graphicsEffect(self) QGraphicsEffect | None
graphicsProxyWidget(self) QGraphicsProxyWidget | None
hasFocus(self) bool
hasHeightForWidth(self) bool
hasMouseTracking(self) bool
hasTabletTracking(self) bool
height(self) int
heightForWidth(self, a0: int) int
hide(self)
hideEvent(self, a0: QHideEvent | None)
initPainter(self, painter: QPainter | None)
inputMethodEvent(self, a0: QInputMethodEvent | None)
inputMethodHints(self) Qt.InputMethodHints
inputMethodQuery(self, a0: Qt.InputMethodQuery) Any
insertAction(self, before: QAction | None, action: QAction | None)
insertActions(self, before: QAction | None, actions: Iterable[QAction])
isActiveWindow(self) bool
isAncestorOf(self, child: QWidget | None) bool
isEnabled(self) bool
isEnabledTo(self, a0: QWidget | None) bool
isFullScreen(self) bool
isHidden(self) bool
isLeftToRight(self) bool
isMaximized(self) bool
isMinimized(self) bool
isModal(self) bool
isRightToLeft(self) bool
isVisible(self) bool
isVisibleTo(self, a0: QWidget | None) bool
isWindow(self) bool
isWindowModified(self) bool
keyPressEvent(self, a0: QKeyEvent | None)
keyReleaseEvent(self, a0: QKeyEvent | None)
keyboardGrabber() QWidget | None
layout(self) QLayout | None
layoutDirection(self) Qt.LayoutDirection
leaveEvent(self, a0: QEvent | None)
locale(self) QLocale
lower(self)
mapFrom(self, a0: QWidget | None, a1: QPoint) QPoint
mapFromGlobal(self, a0: QPoint) QPoint
mapFromParent(self, a0: QPoint) QPoint
mapTo(self, a0: QWidget | None, a1: QPoint) QPoint
mapToGlobal(self, a0: QPoint) QPoint
mapToParent(self, a0: QPoint) QPoint
mask(self) QRegion
maximumHeight(self) int
maximumSize(self) QSize
maximumWidth(self) int
metric(self, a0: QPaintDevice.PaintDeviceMetric) int
minimumHeight(self) int
minimumSize(self) QSize
minimumSizeHint(self) QSize
minimumWidth(self) int
mouseDoubleClickEvent(self, a0: QMouseEvent | None)
mouseGrabber() QWidget | None
mouseMoveEvent(self, a0: QMouseEvent | None)
mousePressEvent(self, a0: QMouseEvent | None)
mouseReleaseEvent(self, a0: QMouseEvent | None)
move(self, a0: QPoint)
move(self, ax: int, ay: int) None
moveEvent(self, a0: QMoveEvent | None)
nativeEvent(self, eventType: QByteArray | bytes | bytearray, message: PyQt5.sip.voidptr | None)
nativeParentWidget(self) QWidget | None
nextInFocusChain(self) QWidget | None
normalGeometry(self) QRect
overrideWindowFlags(self, type: Qt.WindowFlags | Qt.WindowType)
overrideWindowState(self, state: Qt.WindowStates | Qt.WindowState)
paintEngine(self) QPaintEngine | None
paintEvent(self, a0: QPaintEvent | None)
palette(self) QPalette
parentWidget(self) QWidget | None
pos(self) QPoint
previousInFocusChain(self) QWidget | None
raise_(self)
rect(self) QRect
releaseKeyboard(self)
releaseMouse(self)
releaseShortcut(self, id: int)
removeAction(self, action: QAction | None)
render(self, target: QPaintDevice | None, targetOffset: QPoint = QPoint(), sourceRegion: QRegion = QRegion(), flags: QWidget.RenderFlags | QWidget.RenderFlag = QWidget.RenderFlags(QWidget.RenderFlag.DrawWindowBackground | QWidget.RenderFlag.DrawChildren))
render(self, painter: QPainter | None, targetOffset: QPoint = QPoint(), sourceRegion: QRegion = QRegion(), flags: QWidget.RenderFlags | QWidget.RenderFlag = QWidget.RenderFlags(QWidget.RenderFlag.DrawWindowBackground | QWidget.RenderFlag.DrawChildren)) None
repaint(self)
repaint(self, x: int, y: int, w: int, h: int) None
repaint(self, a0: QRect) None
repaint(self, a0: QRegion) None
resize(self, a0: QSize)
resize(self, w: int, h: int) None
resizeEvent(self, a0: QResizeEvent | None)
restoreGeometry(self, geometry: QByteArray | bytes | bytearray) bool
saveGeometry(self) QByteArray
screen(self) QScreen | None
scroll(self, dx: int, dy: int)
scroll(self, dx: int, dy: int, a2: QRect) None
setAcceptDrops(self, on: bool)
setAccessibleDescription(self, description: str | None)
setAccessibleName(self, name: str | None)
setAttribute(self, attribute: Qt.WidgetAttribute, on: bool = True)
setAutoFillBackground(self, enabled: bool)
setBackgroundRole(self, a0: QPalette.ColorRole)
setBaseSize(self, basew: int, baseh: int)
setBaseSize(self, s: QSize) None
setContentsMargins(self, left: int, top: int, right: int, bottom: int)
setContentsMargins(self, margins: QMargins) None
setContextMenuPolicy(self, policy: Qt.ContextMenuPolicy)
setCursor(self, a0: QCursor | Qt.CursorShape)
setDisabled(self, a0: bool)
setEnabled(self, a0: bool)
setFixedHeight(self, h: int)
setFixedSize(self, a0: QSize)
setFixedSize(self, w: int, h: int) None
setFixedWidth(self, w: int)
setFocus(self)
setFocus(self, reason: Qt.FocusReason) None
setFocusPolicy(self, policy: Qt.FocusPolicy)
setFocusProxy(self, a0: QWidget | None)
setFont(self, a0: QFont)
setForegroundRole(self, a0: QPalette.ColorRole)
setGeometry(self, a0: QRect)
setGeometry(self, ax: int, ay: int, aw: int, ah: int) None
setGraphicsEffect(self, effect: QGraphicsEffect | None)
setHidden(self, hidden: bool)
setInputMethodHints(self, hints: Qt.InputMethodHints | Qt.InputMethodHint)
setLayout(self, a0: QLayout | None)
setLayoutDirection(self, direction: Qt.LayoutDirection)
setLocale(self, locale: QLocale)
setMask(self, a0: QBitmap)
setMask(self, a0: QRegion) None
setMaximumHeight(self, maxh: int)
setMaximumSize(self, maxw: int, maxh: int)
setMaximumSize(self, s: QSize) None
setMaximumWidth(self, maxw: int)
setMinimumHeight(self, minh: int)
setMinimumSize(self, minw: int, minh: int)
setMinimumSize(self, s: QSize) None
setMinimumWidth(self, minw: int)
setMouseTracking(self, enable: bool)
setPalette(self, a0: QPalette)
setParent(self, parent: QWidget | None)
setParent(self, parent: QWidget | None, f: Qt.WindowFlags | Qt.WindowType) None
setShortcutAutoRepeat(self, id: int, enabled: bool = True)
setShortcutEnabled(self, id: int, enabled: bool = True)
setSizeIncrement(self, w: int, h: int)
setSizeIncrement(self, s: QSize) None
setSizePolicy(self, a0: QSizePolicy)
setSizePolicy(self, hor: QSizePolicy.Policy, ver: QSizePolicy.Policy) None
setStatusTip(self, a0: str | None)
setStyle(self, a0: QStyle | None)
setStyleSheet(self, styleSheet: str | None)
setTabOrder(a0: QWidget | None, a1: QWidget | None)
setTabletTracking(self, enable: bool)
setToolTip(self, a0: str | None)
setToolTipDuration(self, msec: int)
setUpdatesEnabled(self, enable: bool)
setVisible(self, visible: bool)
setWhatsThis(self, a0: str | None)
setWindowFilePath(self, filePath: str | None)
setWindowFlag(self, a0: Qt.WindowType, on: bool = True)
setWindowFlags(self, type: Qt.WindowFlags | Qt.WindowType)
setWindowIcon(self, icon: QIcon)
setWindowIconText(self, a0: str | None)
setWindowModality(self, windowModality: Qt.WindowModality)
setWindowModified(self, a0: bool)
setWindowOpacity(self, level: float)
setWindowRole(self, a0: str | None)
setWindowState(self, state: Qt.WindowStates | Qt.WindowState)
setWindowTitle(self, a0: str | None)
sharedPainter(self) QPainter | None
show(self)
showEvent(self, a0: QShowEvent | None)
showFullScreen(self)
showMaximized(self)
showMinimized(self)
showNormal(self)
size(self) QSize
sizeHint(self) QSize
sizeIncrement(self) QSize
sizePolicy(self) QSizePolicy
stackUnder(self, a0: QWidget | None)
statusTip(self) str
style(self) QStyle | None
styleSheet(self) str
tabletEvent(self, a0: QTabletEvent | None)
testAttribute(self, attribute: Qt.WidgetAttribute) bool
toolTip(self) str
toolTipDuration(self) int
underMouse(self) bool
ungrabGesture(self, type: Qt.GestureType)
unsetCursor(self)
unsetLayoutDirection(self)
unsetLocale(self)
update(self)
update(self, a0: QRect) None
update(self, a0: QRegion) None
update(self, ax: int, ay: int, aw: int, ah: int) None
updateGeometry(self)
updateMicroFocus(self)
updatesEnabled(self) bool
visibleRegion(self) QRegion
whatsThis(self) str
wheelEvent(self, a0: QWheelEvent | None)
width(self) int
winId(self) PyQt5.sip.voidptr
window(self) QWidget | None
windowFilePath(self) str
windowFlags(self) Qt.WindowFlags
windowHandle(self) QWindow | None
windowIcon(self) QIcon
windowIconChanged

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

windowIconText(self) str
windowIconTextChanged

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

windowModality(self) Qt.WindowModality
windowOpacity(self) float
windowRole(self) str
windowState(self) Qt.WindowStates
windowTitle(self) str
windowTitleChanged

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

windowType(self) Qt.WindowType
x(self) int
y(self) int
populse_mia.user_interface.pipeline_manager.node_controller.trait_ids(trait, modules={})[source]

Return the type of the trait: File, Enum etc…

Parameters:
  • trait (trait instance (mandatory)) – a trait instance

  • modules (set (optional)) – modifiable set of modules names that should be imported to instantiate the trait

Returns:

main_id – the string description (type) of the input trait.

Return type:

list

class populse_mia.user_interface.pipeline_manager.node_controller.Filter(name, nots, values, fields, links, conditions, search_bar)[source]

Bases: object

Class that represent a Filter, containing the results of both rapid and advanced search.

The advanced search creates a complex query to the database and is a combination of several “query lines” which are linked with AND or OR and all composed of: - A negation or not - A tag name or all visible tags - A condition (==, !=, >, <, >=, <=, CONTAINS, IN, BETWEEN) - A value

Parameters:
  • name – filter’s name

  • nots – list of negations (”” or NOT)

  • values – list of values

  • fields – list of list of fields

  • links – list of links (AND/OR)

  • conditions – list of conditions (==, !=, <, >, <=, >=, IN, BETWEEN, CONTAINS, HAS VALUE, HAS NO VALUE)

  • search_bar – value in the rapid search bar

__init__(name, nots, values, fields, links, conditions, search_bar)[source]

Initialization of the Filter class.

Parameters:
  • name – filter’s name

  • nots – list of negations (”” or NOT)

  • values – list of values

  • fields – list of list of fields

  • links – list of links (AND/OR)

  • conditions – list of conditions (==, !=, <, >, <=, >=, IN, BETWEEN, CONTAINS, HAS VALUE, HAS NO VALUE)

  • search_bar – value in the rapid search bar

generate_filter(current_project, scans, tags)[source]

Apply the filter to the given list of scans.

Parameters:
  • current_project – Current project.

  • scans – List of scans to apply the filter into.

  • tags – List of tags to search in.

Return (list):

The list of scans matching the filter.

json_format()[source]

Return the filter as a dictionary.

Return (dict):

The filter as a dictionary.

class populse_mia.user_interface.pipeline_manager.node_controller.Config(properties_path=None)[source]

Bases: object

Object that handles the configuration of the software

Contains:

Methods:

  • _configure_matlab_only: Configures MATLAB without SPM

  • _configure_matlab_spm: Configures SPM and MATLAB

  • _configure_mcr_only: Configures MCR without SPM

  • _configure_standalone_spm: Configures standalone SPM and MCR

  • _disable_matlab_spm: Disables all MATLAB and SPM configurations

  • get_admin_hash: Get the value of the hash of the admin password

  • get_afni_path: Returns the path of AFNI

  • get_ants_path: Returns the path of ANTS

  • getBackgroundColor: Get background color

  • get_capsul_config: Get CAPSUL config dictionary

  • get_capsul_engine: Get a global CapsulEngine object used for all operations in MIA application

  • getChainCursors: Returns if the “chain cursors” checkbox of the mini-viewer is activated

  • get_freesurfer_setup: Get freesurfer path

  • get_fsl_config: Returns the path of the FSL config file

  • get_mainwindow_maximized: Get the maximized (full-screen) flag

  • get_mainwindow_size: Get the main window size

  • get_matlab_command: Returns Matlab command

  • get_matlab_path: Returns the path of Matlab’s executable

  • get_matlab_standalone_path: Returns the path of Matlab Compiler Runtime

  • get_max_projects: Returns the maximum number of projects displayed in the “Saved projects” menu

  • get_max_thumbnails: Get max thumbnails number at the data browser bottom

  • get_mri_conv_path: Returns the MRIManager.jar path

  • get_mrtrix_path: Returns mrtrix path

  • getNbAllSlicesMax: Returns the maximum number of slices to display in the mini viewer

  • get_opened_projects: Returns the opened projects

  • get_projects_save_path: Returns the folder where the projects are saved

  • get_properties_path: Returns the software’s properties path

  • get_referential: Returns boolean to indicate DataViewer referential

  • get_resources_path: Get the resources path

  • getShowAllSlices: Returns if the “show all slices” checkbox of the mini viewer is activated

  • getSourceImageDir: Get the source directory for project images

  • get_spm_path: Returns the path of SPM12 (license version)

  • get_spm_standalone_path: Returns the path of SPM12 (standalone version)

  • getTextColor: Return the text color

  • getThumbnailTag: Returns the tag that is displayed in the mini viewer

  • get_use_afni: Returns the value of “use afni” checkbox in the preferences

  • get_use_ants: Returns the value of “use ants” checkbox in the preferences

  • get_use_clinical: Returns the value of “clinical mode” checkbox in the preferences

  • get_use_freesurfer: Returns the value of “use freesurfer” checkbox in the preferences

  • get_use_fsl: Returns the value of “use fsl” checkbox in the preferences

  • get_use_matlab: Returns the value of “use matlab” checkbox in the preferences

  • get_use_matlab_standalone: Returns the value of “use matlab standalone” checkbox in the preferences

  • get_use_mrtrix: Returns the value of “use mrtrix” checkbox in the preferences

  • get_user_level: Get the user level in the Capsul config

  • get_user_mode: Returns the value of “user mode” checkbox in the preferences

  • get_use_spm: Returns the value of “use spm” checkbox in the preferences

  • get_use_spm_standalone: Returns the value of “use spm standalone” checkbox in the preferences

  • getViewerConfig: Returns the DataViewer configuration (neuro or radio), by default neuro

  • getViewerFramerate: Returns the DataViewer framerate for automatic time running images

  • isAutoSave: Checks if auto-save mode is activated

  • isControlV1: Checks if the selected display of the controller is of V1 type

  • isRadioView: Checks if miniviewer in radiological orientation (if not, then it is in neurological orientation)

  • loadConfig: Reads the config in the config.yml file

  • saveConfig: Saves the config to the config.yml file

  • set_admin_hash: Set the password hash

  • set_afni_path: Set the path of the AFNI

  • set_ants_path: Set the path of the ANTS

  • setAutoSave: Sets the auto-save mode

  • setBackgroundColor: Sets the background color

  • set_capsul_config: Set CAPSUL configuration dict into MIA config

  • setChainCursors: Set the “chain cursors” checkbox of the mini viewer

  • set_clinical_mode: Set the value of “clinical mode” in the preferences

  • setControlV1: Set controller display mode (True if V1)

  • set_freesurfer_setup: Set freesurfer path

  • set_fsl_config: Set the path of the FSL config file

  • set_mainwindow_maximized: Set the maximized (fullscreen) flag

  • set_mainwindow_size: Set main window size

  • set_matlab_path: Set the path of Matlab’s executable

  • set_matlab_standalone_path: Set the path of Matlab Compiler Runtime

  • set_max_projects: Set the maximum number of projects displayed in the “Saved projects” menu

  • set_max_thumbnails: Set max thumbnails number at the data browser bottom

  • set_mri_conv_path: Set the MRIManager.jar path

  • set_mrtrix_path: Set the path of mrtrix

  • setNbAllSlicesMax: Set the maximum number of slices to display in the mini viewer

  • set_opened_projects: Set the opened projects

  • set_projects_save_path: Set the folder where the projects are saved

  • set_radioView: Set the orientation in miniviewer (True for radiological, False for neurological orientation)

  • set_referential: Set the DataViewer referential

  • set_resources_path: Set the resources path

  • setShowAllSlices: Set the “show all slices” checkbox of the mini viewer

  • setSourceImageDir: Set the source directory for project images

  • set_spm_path: Set the path of SPM12 (license version)

  • set_spm_standalone_path: Set the path of SPM12 (standalone version)

  • setTextColor: Set the text color

  • setThumbnailTag: Set the tag that is displayed in the mini viewer

  • set_use_afni: Set the value of “use afni” checkbox in the preferences

  • set_use_ants: Set the value of “use ants” checkbox in the preferences

  • set_use_freesurfer: Set the value of “use freesurfer” checkbox in the preferences

  • set_use_fsl: Set the value of “use fsl” checkbox in the preferences

  • set_use_matlab: Set the value of “use matlab” checkbox in the preferences

  • set_use_matlab_standalone: Set the value of “use matlab standalone” checkbox in the preferences

  • set_use_mrtrix: Set the value of “use mrtrix” checkbox in the preferences

  • set_user_mode: Set the value of “user mode” checkbox in the preferences

  • set_use_spm: Set the value of “use spm” checkbox in the preferences

  • set_use_spm_standalone: Set the value of “use spm standalone” checkbox in the preferences

  • setViewerConfig: Set the Viewer configuration neuro or radio

  • setViewerFramerate: Set the Viewer frame rate for automatic running time images

  • update_capsul_config: Update a global CapsulEngine object used for all operations in MIA application

capsul_engine = None
__init__(properties_path=None)[source]

Initialization of the Config class

Parameters:

properties_path – (str) If provided, the configuration file will be loaded / saved from the given directory. Otherwise, the regular heuristics will be used to determine the config path. This option allows to use an alternative config directory (for tests for instance).

_configure_matlab_only(matlab_path: str) None[source]

Configures MATLAB without SPM, ensuring that only MATLAB is used.

Parameters:

matlab_path – (str) The directory path of the MATLAB installation.

_configure_matlab_spm(spm_dir, matlab_path)[source]

Configures SPM to use the specified SPM directory with a MATLAB installation.

Parameters:
  • spm_dir – (str) The directory path of the SPM installation.

  • matlab_path – (str) The directory path of the MATLAB installation.

_configure_mcr_only(mcr_dir: str) None[source]

Configures MATLAB Compiler Runtime (MCR) without SPM, ensuring that only MCR is used.

Parameters:

mcr_dir – (str) The directory path of the MATLAB Compiler Runtime (MCR).

_configure_standalone_spm(spm_dir, mcr_dir)[source]

Configures standalone SPM to use the specified SPM and MATLAB Compiler Runtime (MCR) directories.

Parameters:
  • spm_dir – (str) The directory path of the standalone SPM installation.

  • mcr_dir – (str) The directory path of the MATLAB Compiler Runtime (MCR).

_disable_matlab_spm() None[source]

Disables all MATLAB and SPM configurations, ensuring that neither MATLAB nor SPM is used.

get_admin_hash()[source]

Retrieves the hashed admin password from the configuration.

Returns:

The hashed admin password if found in config, False if not present in config.

get_afni_path()[source]

Get the AFNI path.

Returns:

(str) Path to AFNI, or “” if unknown.

get_ants_path()[source]

Get the ANTS path.

Returns:

(str) Path to ANTS, or “” if unknown.

getBackgroundColor()[source]

Get background color.

Returns:

(str) Background color, or “” if unknown.

get_capsul_config(sync_from_engine=True)[source]

Retrieve and construct the Capsul configuration dictionary.

This function builds a configuration dictionary for Capsul, incorporating settings for various neuroimaging tools and processing engines. It manages configurations for tools like SPM, FSL, FreeSurfer, MATLAB, AFNI, ANTs, and MRTrix.

The function first retrieves local settings for each tool from the Mia preferences, then constructs the appropriate configuration structure. If requested, it can synchronize the configuration with the current Capsul engine state.

Parameters:

sync_from_engine – (bool) If True, synchronizes the configuration with the current Capsul engine settings after building the base configuration.

Returns:

(dict) A nested dictionary containing the complete Capsul configuration, structured with the following main sections:

  • engine_modules: List of available processing modules

  • engine: Contains global and environment-specific settings, as well as configurations specific to certain tools (SPM, FSL, etc.)

Private functions:
  • _configure_spm: Configure SPM settings.

  • _configure_tool: Configure various neuroimaging settings (e.g. ‘fsl’, ‘afni’, etc.)

static get_capsul_engine()[source]

Get or create a global CapsulEngine singleton for Mia application operations.

The engine is created only once when first needed (lazy initialization). Subsequent calls return the same instance.

Returns:

(CapsulEngine) The global CapsulEngine instance.

getChainCursors()[source]

Get the value of the checkbox ‘chain cursor’ in miniviewer.

Returns:

(bool) Value of the checkbox.

get_freesurfer_setup()[source]

Get the freesurfer path.

Returns:

(str) Path to freesurfer, or “” if unknown.

get_fsl_config()[source]

Get the FSL config file path.

Returns:

(str) Path to the fsl/etc/fslconf/fsl.sh file.

get_mainwindow_maximized()[source]

Get the maximized (fullscreen) flag.

Returns:

(bool) Maximized (fullscreen) flag.

get_mainwindow_size()[source]

Get the main window size.

Returns:

(list) Main window size.

get_matlab_command()[source]

Retrieves the appropriate Matlab command based on the configuration.

Returns:

(str) The Matlab executable path or None if no path is specified.

get_matlab_path()[source]

Get the path to the matlab executable.

Returns:

(str) A path.

get_matlab_standalone_path()[source]

Get the path to matlab compiler runtime.

Returns:

(str) A path.

get_max_projects()[source]

Retrieves the maximum number of projects displayed in the “Saved projects” menu.

Returns:

(int) The maximum number of projects. Defaults to 5 if not specified.

get_max_thumbnails()[source]

Retrieves the maximum number of thumbnails displayed in the mini-viewer at the bottom of the data browser.

Returns:

(int) The maximum number of thumbnails. Defaults to 5 if not specified.

get_mri_conv_path()[source]

Get the MRIManager.jar path.

Returns:

(str) A path.

get_mrtrix_path()[source]

Get the mrtrix path.

Returns:

(str) A path.

getNbAllSlicesMax()[source]

Get number the maximum number of slices to display in the miniviewer.

Returns:

(int) Maximum number of slices to display in miniviewer.

get_opened_projects()[source]

Get opened projects.

Returns:

(list) Opened projects.

get_projects_save_path()[source]

Get the path where projects are saved.

Returns:

(str) A path.

get_properties_path()[source]

Retrieves the path to the folder containing the “processes” and “properties” directories of Mia.

The properties path is defined in the configuration_path.yml file, located in ~/.populse_mia.

  • In user mode, the path is retrieved from the properties_user_path parameter.

  • In developer mode, the path is retrieved from the properties_dev_path parameter.

If outdated parameters (mia_path, mia_user_path) are found, they are automatically updated in the configuration file.

Returns:

(str) The absolute path to the properties folder.

get_referential()[source]

Retrieves the chosen referential from the anatomist_2 data viewer.

Returns:

(str) “0” for World Coordinates, “1” for Image ref.

get_resources_path()[source]

Get the resources path.

Returns:

(str) A path.

getShowAllSlices()[source]

Get whether the show_all_slices parameters was enabled or not in the miniviewer.

Returns:

(bool) True if the show_all_slices parameters was enabled.

getSourceImageDir()[source]

Get the source directory for project images.

Returns:

(str) A path.

get_spm_path()[source]

Get the path of SPM.

Returns:

(str) A path.

get_spm_standalone_path()[source]

Get the path to the SPM12 standalone version.

Returns:

(str) A path.

getTextColor()[source]

Get the text color.

Returns:

(str) The text color.

getThumbnailTag()[source]

Get the tag of the thumbnail displayed in the miniviewer.

Returns:

(str) The tag of the thumbnail displayed in miniviewer.

get_use_afni()[source]

Get the value of “use afni” checkbox in the preferences.

Returns:

(bool) The value of “use afni” checkbox.

get_use_ants()[source]

Get the value of “use ants” checkbox in the preferences.

Returns:

(bool) The value of “use ants” checkbox.

get_use_clinical()[source]

Get the clinical mode in the preferences.

Returns:

(bool) The clinical mode.

get_use_freesurfer()[source]

Get the value of “use freesurfer” checkbox in the preferences.

Returns:

(bool) The value of “use freesurfer” checkbox.

get_use_fsl()[source]

Get the value of “use fsl” checkbox in the preferences.

Returns:

(bool) The value of “use fsl” checkbox.

get_use_matlab()[source]

Get the value of “use matlab” checkbox in the preferences.

Returns:

(bool) The value of “use matlab” checkbox.

get_use_matlab_standalone()[source]

Get the value of “use matlab standalone” checkbox in the preferences.

Returns:

(bool) The value of “use matlab standalone” checkbox.

get_use_mrtrix()[source]

Get the value of “use mrtrix” checkbox in the preferences.

Returns:

(bool) The value of “use mrtrix” checkbox.

get_user_level()[source]

Get the user level in the Capsul config.

Returns:

(int) The user level in the Capsul config.

get_user_mode()[source]

Get if user mode is disabled or enabled in the preferences.

Returns:

(bool) If True, the user mode is enabled.

get_use_spm()[source]

Get the value of “use spm” checkbox in the preferences.

Returns:

(bool) The value of “use spm” checkbox.

get_use_spm_standalone()[source]

Get the value of “use spm standalone” checkbox in the preferences.

Returns:

(bool) The value of “use spm standalone” checkbox.

getViewerConfig()[source]

Get the viewer config “neuro” or “radio”, “neuro” by default.

Returns:

(str) The viewer config (“neuro” or “radio”).

getViewerFramerate()[source]

Get the Viewer framerate.

Returns:

(str) The Viewer framerat (ex. “5”).

isAutoSave()[source]

Get if the auto-save mode is enabled or not.

Returns:

(bool) If True, auto-save mode is enabled.

isControlV1()[source]

Gets whether the controller display is of type V1.

Returns:

(bool) If True, V1 controller display.

isRadioView()[source]

Get if the display in miniviewer is in radiological orientation.

Returns:

(bool) If True, radiological orientation, otherwise neurological orientation.

loadConfig()[source]

Read the config from config.yml file.

Attempts to read an encrypted YAML configuration file from the properties directory, decrypt it using Fernet encryption, and parse it as YAML.

Returns:

(dict) Parsed configuration from the YAML file. Returns empty dict if parsing fails.

saveConfig()[source]

Save the current parameters in the config.yml file.

Encrypts and writes the current configuration (self.config) to config.yml using Fernet encryption. Creates the necessary directory structure if it doesn’t exist. After saving, updates the capsul configuration.

set_admin_hash(admin_hash)[source]

Set the password hash.

Parameters:

admin_hash – A string.

set_afni_path(path)[source]

Set the AFNI path.

Parameters:

path – (str) A path.

set_ants_path(path)[source]

Set the ANTS path

Parameters:

path – (str) A path.

setAutoSave(save)[source]

Set auto-save mode.

Parameters:

save – A boolean.

setBackgroundColor(color)[source]

Set background color and save configuration.

Parameters:

color – Color string (‘Black’, ‘Blue’, ‘Green’, ‘Grey’, ‘Orange’, ‘Red’, ‘Yellow’, ‘White’)

set_capsul_config(capsul_config_dict)[source]

Update Mia configuration with Capsul settings and synchronize tools configuration.

Called after editing Capsul config (via File > Mia preferences > Pipeline tab > Edit CAPSUL config) to synchronize Capsul settings with Mia preferences. Configures various neuroimaging tools (AFNI, ANTs, FSL, etc.) based on the Capsul engine configuration.

Parameters:

capsul_config_dict – Dictionary containing Capsul configuration.

Structure of capsul_config_dict:

{
    'engine': {
        'environment_name': {...configuration...}
    },
    'engine_modules': [...]
}
Private function:
  • _get_module_config: Extracts module configuration from the global Capsul configuration.

setChainCursors(chain_cursors)[source]

Set the value of the checkbox ‘chain cursor’ in the mini viewer.

Parameters:

chain_cursors – A boolean.

set_clinical_mode(clinical_mode)[source]

Enable or disable clinical mode.

Parameters:

clinical_mode – A boolean.

setControlV1(controlV1)[source]

Set controller display mode (True if V1).

Parameters:

controlV1 – A boolean.

set_freesurfer_setup(path)[source]

Set the freesurfer config file.

Parameters:

path – (str) Path to freesurfer/FreeSurferEnv.sh.

set_fsl_config(path)[source]

Set the FSL config file.

Parameters:

path – (str) Path to fsl/etc/fslconf/fsl.sh.

set_mainwindow_maximized(enabled)[source]

Set the maximized (full-screen) flag.

Parameters:

enabled – A boolean.

set_mainwindow_size(size)[source]

Set main window size.

Parameters:

size – A list of two integers.

set_matlab_path(path)[source]

Set the path of Matlab’s executable.

Parameters:

path – (str) A path.

set_matlab_standalone_path(path)[source]

Set the path of Matlab Compiler Runtime.

Parameters:

path – (str) A path.

set_max_projects(nb_max_projects)[source]

Set the maximum number of projects displayed in the “Saved projects” menu.

Parameters:

nb_max_projects – An integer.

set_max_thumbnails(nb_max_thumbnails)[source]

Set max thumbnails number at the data browser bottom.

Parameters:

nb_max_thumbnails – An integer.

set_mri_conv_path(path)[source]

Set the MRIManager.jar path.

Parameters:

path – (str) A path.

set_mrtrix_path(path)[source]

Set the mrtrix path.

Parameters:

path – (str) A path.

setNbAllSlicesMax(nb_slices_max)[source]

Set the number of slices to display in the mini-viewer.

Parameters:

nb_slices_max – (int) Maximum number of slices to display.

set_opened_projects(new_projects)[source]

Set the list of opened projects and saves the modification.

Parameters:

new_projects – (list[str]) A list of paths.

set_projects_save_path(path)[source]

Set the folder where the projects are saved.

Parameters:

path – (str) A path.

set_radioView(radio_view)[source]

Set the radiological / neurological orientation in mini viewer.

  • True for radiological

  • False for neurological

Parameters:

radio_view – A boolean.

set_referential(ref)[source]

Set the referential to “image Ref” or “World Coordinates” in anatomist_2 data viewer.

Parameters:

ref – (str) “0” for World Coordinates, “1” for Image Ref.

set_resources_path(path)[source]

Set the resources path.

Parameters:

path – (str) A path.

setShowAllSlices(show_all_slices)[source]

Set the show_all_slides setting in miniviewer.

Parameters:

show_all_slices – A boolean.

setSourceImageDir(source_image_dir)[source]

Set the source directory for project images.

Parameters:

source_image_dir – (str) A path.

set_spm_path(path)[source]

Set the path of SPM (license version).

Parameters:

path – (str) A path.

set_spm_standalone_path(path)[source]

Set the path of SPM (standalone version).

Parameters:

path – (str) A path.

setTextColor(color)[source]

Set text color and save configuration.

Parameters:

color – Color string (‘Black’, ‘Blue’, ‘Green’, ‘Grey’, ‘Orange’, ‘Red’, ‘Yellow’, ‘White’)

setThumbnailTag(thumbnail_tag)[source]

Set the tag that is displayed in the mini-viewer.

Parameters:

thumbnail_tag – A string.

set_use_afni(use_afni)[source]

Set the value of “use_afni” checkbox in the preferences.

Parameters:

use_afni – A boolean.

set_use_ants(use_ants)[source]

Set the value of “use_ants” checkbox in the preferences.

Parameters:

use_ants – A boolean.

set_use_freesurfer(use_freesurfer)[source]

Set the value of “use_freesurfer” checkbox in the preferences.

Parameters:

use_freesurfer – A boolean.

set_use_fsl(use_fsl)[source]

Set the value of “use_fsl” checkbox in the preferences.

Parameters:

use_fsl – A boolean.

set_use_matlab(use_matlab)[source]

Set the value of “use matlab” checkbox in the preferences.

Parameters:

use_matlab – A boolean.

set_use_matlab_standalone(use_matlab_standalone)[source]

Set the value of “use_matlab_standalone” checkbox in the preferences.

Parameters:

use_matlab – A boolean.

set_use_mrtrix(use_mrtrix)[source]

Set the value of “use_mrtrix” checkbox in the preferences.

Parameters:

use_mrtrix – A boolean.

set_user_mode(user_mode)[source]

Enable or disable user mode.

Parameters:

user_mode – A boolean.

set_use_spm(use_spm)[source]

Set the value of “use spm” checkbox in the preferences.

Parameters:

use_spm – A boolean.

set_use_spm_standalone(use_spm_standalone)[source]

Set the value of “use spm standalone” checkbox in the preferences.

Parameters:

use_spm_standalone – A boolean.

setViewerConfig(config_NeuRad)[source]

sets user’s configuration neuro or radio for data_viewer.

  • neuro: neurological

  • radio: radiological

Parameters:

config_NeuRad – A string.

setViewerFramerate(im_sec)[source]

sets user’s framerate for data_viewer.

Parameters:

im_sec – (int) Number of images per second.

update_capsul_config()[source]

Updates the global CapsulEngine object used for all operations in the Mia application.

The CapsulEngine is created once when needed and updated each time the configuration is saved. This method ensures that all necessary engine modules are loaded and configurations are properly imported from the saved settings.

Returns:

(capsul.engine.CapsulEngine) The updated CapsulEngine object, or None if the engine is not initialized.

class populse_mia.user_interface.pipeline_manager.node_controller.AdvancedSearch(project, data_browser, scans_list=None, tags_list=None, from_pipeline=False)[source]

Bases: QWidget

Class that manages the widget of the advanced search

The advanced search creates a complex query to the database and is a combination of several “query lines” which are linked with AND or OR and all composed of: - A negation or not - A tag name or all visible tags - A condition (==, !=, >, <, >=, <=, CONTAINS, IN, BETWEEN) - A value

__init__(project, data_browser, scans_list=None, tags_list=None, from_pipeline=False)[source]

Initialize the AdvancedSearch widget.

Parameters:
  • project – The current project instance.

  • data_browser – The parent DataBrowser widget that contains this search.

  • scans_list – List of document scans to search within. Defaults to empty list.

  • tags_list – List of tags to display in the search interface. Defaults to empty list.

  • (bool) (from_pipeline) – Whether the widget is instantiated from the pipeline manager. Defaults to False.

Add an advanced search bar row to the search interface.

Creates a complete search row containing:
  • NOT operator toggle

  • Field selector (populated with available tags)

  • Condition operator selector (==, !=, >, <, etc.)

  • Value input field

  • Remove button to delete this row

The row components are connected with signals to update dynamically based on field type and selected condition.

apply_filter(filter)[source]

Apply a filter to update the displayed scans in the data browser.

Retrieves documents from the database based on the provided filter criteria and updates the table visualization accordingly. If the filter is invalid or an error occurs, displays a warning and reverts to showing all scans.

Parameters:

filter

Filter object containing the query criteria with attributes:

  • nots (list): Negation flags for each condition

  • values (list): Values to match against

  • conditions (list): Comparison operators

    (e.g., ‘==’, ‘>’, ‘<’)

  • links (list): Logical operators connecting

    conditions (‘AND’, ‘OR’)

  • fields (list): Database fields to query

Side Effects:
  • Updates self.rows with filter parameters

  • Modifies self.data_browser.table_data.scans_to_visualize

  • May display a warning dialog on error

  • Calls self.data_browser.table_data.update_visualized_rows()

displayConditionRules(field, condition)[source]

Update available condition operators based on the selected field’s type.

Dynamically adjusts the condition dropdown to show only operators that are valid for the selected field’s data type. Numeric fields allow comparison operators (<, >, <=, >=, BETWEEN), while non-numeric fields exclude them. List fields exclude the IN operator, while non-list fields include it.

Parameters:
  • field – QComboBox widget containing the selected tag name.

  • condition – QComboBox widget whose items will be updated based on the field’s type.

Behavior:
  • Numeric types: Include <, >, <=, >=, BETWEEN operators

  • String/Boolean/List types: Exclude comparison operators

  • List types: Exclude IN operator

  • Non-list types: Include IN operator

  • Special case “All visualized tags”: Treated as non-numeric

displayValueRules(choice, value)[source]

Configure the value input widget based on the selected condition operator.

Adjusts the enabled state and placeholder text of the value input to match the requirements of the selected condition operator.

Parameters:
  • choice – QComboBox containing the selected condition operator.

  • value – QLineEdit widget that will be configured.

Behavior:
  • BETWEEN: Enabled with placeholder “value1; value2”

  • IN: Enabled with placeholder for semicolon-separated list

  • HAS VALUE/HAS NO VALUE: Disabled and cleared

  • Other operators: Enabled with no placeholder

get_filters(replace_all_by_fields)[source]

Extract filter criteria from UI widgets.

Parses the filter rows to extract search criteria including fields, conditions, values, logical operators, and negation flags. Handles special cases like “All visualized tags” expansion and operator compatibility validation.

Parameters:

replace_all_by_fields – If True, replaces “All visualized tags” with the actual list of visible fields. If False, keeps the literal “All visualized tags” text.

Return (tuple):

A 5-tuple containing: - fields (list): Field names to filter on - conditions (list): Comparison operators (e.g., ‘=’, ‘BETWEEN’) - values (list): Filter values (strings or lists for BETWEEN/IN) - links (list): Logical operators connecting filters (AND/OR) - nots (list): Negation flags for each filter

Note

  • BETWEEN and IN conditions have their values split into lists

  • Fields incompatible with operators are automatically removed

Execute search query and update the data browser table.

Retrieves filter parameters, constructs and executes a database query, then updates the data browser’s visualized scans with the results. If the search fails, displays an error dialog and reverts to showing all available scans.

Side Effects:
  • Updates self.data_browser.table_data.scans_to_visualize

  • Updates self.data_browser.table_data.scans_to_search

  • Updates self.project.currentFilter (if not from_pipeline)

  • Displays error dialog on search failure

static prepare_filters(links, fields, conditions, values, nots, scans)[source]

Construct a filter query string from filter components.

Builds a query by combining multiple filter rows with logical operators (AND/OR), where each row can filter across multiple fields with optional negation.

Parameters:
  • links – Logical operators joining filter rows (e.g., [‘AND’, ‘OR’]). Length should be len(fields) - 1.

  • fields – Nested list where each sublist contains field names to filter on. Fields within a row are OR-combined.

  • conditions – Filter operators for each row. Supported values: ‘==’, ‘!=’, ‘<’, ‘>’, ‘<=’, ‘>=’, ‘IN’, ‘BETWEEN’, ‘CONTAINS’, ‘HAS VALUE’, ‘HAS NO VALUE’.

  • values – Filter values corresponding to each condition. For ‘BETWEEN’, provide a two-element sequence [min, max].

  • nots – Negation flags for each row (‘NOT’ to negate, empty string otherwise).

  • scans – List of scan identifiers to restrict the search scope.

Returns:

Complete filter query string with all conditions and scan restrictions.

Refresh the search widget by rebuilding its layout with the current filters.

This method performs the following steps:
  1. Retrieves the current filter values without replacing “All visualized tags”.

  2. Clears the old layout and cleans up its widgets.

  3. Removes and restores row borders according to the links.

  4. Rebuilds the main grid layout with all row widgets.

  5. Adds the search button in a horizontal layout at the bottom.

  6. Sets the new combined layout as the widget’s layout.

remove_row(row_layout)[source]

Remove a specified row from the layout while ensuring at least one row remains.

This method deletes all widgets in the specified row, removes the row from the internal rows list, and refreshes the view.

Parameters:

row_layout – The row (list of widgets) to remove.

rows_borders_added(links)[source]

Add UI controls (links and add button) to search query rows.

Adds a green plus button to the last row for adding new search bars, and adds AND/OR combo boxes to all rows except the first one for linking query conditions.

Parameters:

links – List of previously selected link operators (‘AND’/’OR’) to restore when rebuilding the UI.

rows_borders_removed()[source]

Remove the link widget and the “add row” widget from every row.

This ensures that these widgets are properly removed from the layout and scheduled for deletion, preventing memory leaks.

Reset the search rows and display the search bar.

This method clears the current rows if there are none or fewer than one, and initializes the search bar for the advanced search functionality.

class populse_mia.user_interface.pipeline_manager.node_controller.TableDataBrowser(project, data_browser, tags_to_display, update_values, activate_selection, link_viewer=True)[source]

Bases: QTableWidget

Table widget that displays the documents contained in the database and their associated tags.

__init__(project, data_browser, tags_to_display, update_values, activate_selection, link_viewer=True)[source]

Initialize the data table widget with project data and browser context.

Parameters:
  • (Project) (project) – The current project instance containing data and configuration.

  • (DataBrowser) (data_browser) – Parent DataBrowser widget that contains this table.

  • (list[str]) (tags_to_display) – List of metadata tags to show as table columns.

  • (bool) (activate_selection) – If True, enables cell editing; if False, table is read-only.

  • (bool) – True to enable the selection feature, False otherwise.

  • link_viewer(bool) – If True, links table selection to external viewer widget. Defaults to True.

Notes

  • Column sorting and reordering are enabled by default (except first column).

  • Extended selection mode is used unless activate_selection is falsy.

  • A custom context menu is available only when both activate_selection and link_viewer are True.

add_column(column, tag)[source]

Add a new column to the table with the specified tag.

Inserts a column at the given index, configures its header with metadata from the database, sets the appropriate delegate based on field type, and populates cells with current values from the database.

Parameters:
  • (int) (column) – Zero-based index where the column should be inserted.

  • (str) (tag) – Tag name identifying the field to add from the database.

Note

Temporarily disconnects item change signals during insertion to prevent unwanted event triggers, then reconnects them after completion.

add_columns()[source]

Add and update table columns based on database fields.

This method synchronizes the table’s columns with the current database schema by:

  • Adding columns for new database fields that don’t exist in the table

  • Populating new columns with values from the database

  • Removing columns that no longer exist in the database

  • Applying appropriate formatting delegates based on field types

  • Maintaining column visibility settings

The method temporarily disconnects item change signals during operation to prevent unwanted events, then reconnects them after completion.

Note:
  • The TAG_FILENAME column is always placed first

  • Columns are sorted alphabetically (except TAG_FILENAME)

  • System tags (TAG_CHECKSUM, TAG_HISTORY) are excluded

  • Undefined values are displayed in italic bold text

add_path()[source]

Open a dialog to add documents to the current project.

Creates and displays a PopUpAddPath dialog that allows users to select and add document paths to the project’s data browser.

add_rows(rows)[source]

Insert rows into the table if they don’t already exist.

This method adds new scans to the table, populating each column with data from the database. It displays a progress dialog during the operation and handles special cases like the TAG_BRICKS column with custom widgets.

Parameters:

rows – An iterable of scan identifiers to be added to the table.

Note

  • Duplicate scans (already present in the table) are automatically skipped

  • Sorting is temporarily disabled during the insertion process

  • The first column (name) is set as non-editable

  • TAG_BRICKS columns receive custom button widgets for interaction

batch_update(*, disable_sorting=True)[source]

Context manager for efficient batch updates.

This manager temporarily disables repainting, signal emission, and optionally sorting, allowing multiple modifications to the table without triggering unnecessary redraws or signal handling. All previous widget states are restored upon exit, even if an exception occurs.

Parameters:

(bool) (disable_sorting) – If True (default), temporarily disables sorting during the batch update to prevent rearrangements.

clear_cell()[source]

Clear values from selected cells in the table.

This method removes data from the currently selected cells in the database and updates the UI to reflect the cleared state. The operation is recorded in the project’s undo history for potential reversal.

The method performs the following actions for each selected cell:
  • Retrieves the current value from the database

  • Removes the value from the database

  • Updates the cell’s visual appearance (italic + bold)

  • Records the change for undo/redo functionality

Side Effects:
  • Modifies database values in COLLECTION_CURRENT

  • Updates table cell formatting

  • Appends operation to project.undos

  • Clears project.redos

context_menu_table(position)[source]

Create and display the context menu for the table, and perform the corresponding action based on the user’s selection.

Parameters:

(QPoint) (position) – The mouse cursor position relative to the widget.

delete_from_brick(brick_id)[source]

Delete a brick and its associated documents from the database.

This method cleans up the database when a pipeline (composed of multiple bricks) is initialized but not executed before another pipeline is started or the software is closed. It removes the brick and any orphaned output documents that are not used as inputs elsewhere.

Parameters:

(str) (brick_id) – The unique identifier of the brick to be deleted.

display_file()[source]

Open the selected file(s) in the user’s default application.

Iterates over all selected items in the view, resolves their absolute paths, and opens each file using the platform’s default application.

Supported platforms: Linux, macOS, and Windows.

display_unreset_values()[source]

Displays a warning dialog listing values that cannot be reset.

This method shows a QMessageBox warning when certain values (such as user tags, FileName, or undefined cells) cannot be reset because they lack a raw value. The dialog includes a descriptive message and an OK button for dismissal.

edit_table_data_values()[source]

Edit and update selected cell values in the DataBrowser table.

This method handles the selection of cells, validation of list lengths, and updating of values in both the table and the database. It supports list-type fields and ensures data consistency across selections.

Steps:
  1. Collects selected cells and their metadata (coordinates, types, lengths, etc.).

  2. Validates list lengths for compatibility.

  3. Opens a dialog for value modification if valid.

  4. Updates the table and database, and records changes for undo/redo history.

Note

  • Exits early if the selected tag is ‘TAG_BRICKS’ or if the field type is not a list.

  • Disconnects and reconnects the itemChanged signal to prevent recursive updates.

fill_cells_update_table()[source]

Initialize and populate table cells with scan data from the database.

This method performs the following operations:
  1. Creates a progress dialog to track cell population

  2. Retrieves scan documents matching scans_to_visualize from the database

  3. Populates each cell with appropriate data based on column type

  4. Handles special cases (name column, bricks column)

  5. Applies saved sorting preferences

  6. Resizes rows and columns to fit content

Special column handling:
  • Column 0 (name): Read-only, always displays as string

  • Bricks column: Displays clickable buttons for brick history

  • Other columns: Editable, type-specific formatting

Notes

  • Displays a modal progress dialog during population

  • Temporarily hides the table during updates for performance

  • Connects cell change signals after population completes

fill_headers(take_tags_to_update=False)[source]

Initialize and populate table headers with field metadata.

Sets up table columns based on database fields, configuring each with:
  • Appropriate tooltips showing description, unit, and type

  • Specialized delegates for numeric and temporal data types

  • Visibility based on display settings or field attributes

Parameters:

take_tags_to_update – If True, use tags_to_display for visibility. If False, use field visibility attributes. Defaults to False.

get_current_filter()[source]

Get the current data browser selection.

Returns the list of selected scan paths if a selection is active, otherwise returns all visible scan paths in the data browser.

Return (list):

List of scan paths from either the current selection or all visible scans in the data browser.

get_index_insertion(to_insert)[source]

Find the insertion index for a new column to maintain alphabetical order.

Uses binary search to efficiently locate the correct position for inserting a column header while preserving the existing alphabetical sort order.

Parameters:

(str) (to_insert) – The column header text to insert.

Return (int):

The column index where the new column should be inserted. Returns columnCount() if it should be appended at the end.

Note: Assumes that column 0 is reserved (TAG_FILENAME must always be

the first tag on the left) and start the search from column 1.

get_scan_row(scan)[source]

Find the row index for a given scan filename.

Parameters:

scan – The scan filename to search for.

Return(int):

The zero-based row index if the scan is found, None otherwise.

get_tag_column(tag)[source]

Find the column index for a given tag name.

Searches through the table’s horizontal headers to locate the column corresponding to the specified tag.

Parameters:

(str) (tag) – The name of the tag to search for.

Return (int):

The zero-based column index if the tag is found, None otherwise.

mouseReleaseEvent(event)[source]

Handle mouse release event and update table data.

This method is called when a mouse button is released over the widget. It delegates to the parent class handler and then updates the table data values.

Parameters:

(QMouseEvent) (event) – The mouse event containing information about the button released, position, and modifiers.

multiple_sort_infos(list_tags, order)[source]

Sort table rows by multiple tag values.

Sorts the visualized scans based on the values of specified tags, then reorganizes the table rows to reflect the new order. Handles both regular items and special brick widgets during the reordering.

Parameters:
  • list_tags(list) – List of tag names to sort by (primary to secondary).

  • (str) (order) – Sort direction, either “Ascending” or “Descending”.

Note

Temporarily disables item change signals during sorting to prevent triggering update handlers. The sort is stable and preserves the relative order of items with equal sort keys.

multiple_sort_pop_up()[source]

Display the multiple sort configuration dialog.

Creates and shows a modal dialog that allows users to configure multiple sorting criteria for the current project data.

Note

The dialog instance is stored in self.pop_up.

on_cell_changed(item_origin)[source]

Update cell values and appearance when edited by the user.

This method handles both single and multi-cell selection, validating type compatibility across all selected cells before applying changes. It performs the following operations:

  1. Validates that all selected cells have compatible types

  2. Verifies the new value matches the expected type(s)

  3. Updates the database with validated values

  4. Maintains undo/redo history for all modifications

  5. Refreshes cell colors and formatting

Special handling: - PatientName: Removes spaces (used for subfolder naming in

calculations)

  • TAG_BRICKS/TAG_FILENAME: Read-only fields, changes are rejected

  • List types: Prevents mixed type selections but allows homogeneous

    lists

Parameters:

item_origin – QTableWidgetItem from which the edit originated

Side effects:
  • Modifies database values for selected cells

  • Updates cell appearance (colors, fonts)

  • Adds entry to project undo history

  • Clears redo history

  • Resizes columns to fit content

remove_scan()[source]

Remove selected scans from the database and file system.

This method handles the removal of scan documents from both the current and initial collections in the project database. It performs the following:

  • Prompts user for confirmation if scans are in the active scan list

  • Preserves modification history for removed scan values

  • Deletes associated files (.nii and .json) from the file system

  • Updates the UI table to reflect removals

The removal process can be cancelled by the user when prompted. If multiple scans are selected, the user can choose to apply their decision to all remaining scans.

Side effects:
  • Modifies database by removing documents from COLLECTION_CURRENT and COLLECTION_INITIAL

  • Deletes scan files from the project folder

  • Updates UI table rows and marks project as having unsaved modifications

reset_cell()[source]

Reset selected cells to their original values from the initial collection.

This method restores the values of all selected cells to their original state by retrieving values from COLLECTION_INITIAL and updating COLLECTION_CURRENT. If any cells lack initial values (e.g., user-created tags), a warning is displayed. The operation is recorded in the project history for undo/redo functionality.

Side effects:
  • Updates database values in COLLECTION_CURRENT

  • Updates table cell display values

  • Appends operation to project.undos

  • Clears project.redos

  • May display a warning dialog for unreset values

  • Resizes table columns to fit content

reset_column()[source]

Reset selected columns to their original values.

Restores values in selected cells to their initial state from the database. If a cell’s initial value doesn’t exist (e.g., user-added tags), it cannot be reset and a warning will be displayed.

The operation is recorded in the project’s undo history. Any existing redo history is cleared after this operation.

Side effects:
  • Updates database values in COLLECTION_CURRENT

  • Updates table cell displays

  • Appends to project.undos

  • Clears project.redos

  • Resizes columns to fit content

  • May display warning dialog for unreset values

reset_row()[source]

Reset selected cells to their original values from the initial collection.

Restores the values of all cells in selected rows to their initial state by copying values from COLLECTION_INITIAL to COLLECTION_CURRENT. Only cells with available initial values are reset. User-defined tags without initial values are skipped and trigger a warning dialog.

The operation is recorded in the project’s undo/redo history, allowing users to revert the reset if needed. After resetting, columns are automatically resized to fit their contents.

Side Effects:
  • Updates database values in COLLECTION_CURRENT

  • Updates table cell display values

  • Appends operation to project.undos

  • Clears project.redos

  • Shows warning dialog if any values couldn’t be reset

  • Resizes table columns

section_moved(logical_index, old_index, new_index)[source]

Handle section movement to keep the FileName column fixed at position 0.

This slot is triggered when a user attempts to reorder table columns. It ensures the FileName column (logical index 0) always remains at the leftmost visual position, regardless of user drag-and-drop actions.

Parameters:
  • logical_index – The logical index of the moved column (unused).

  • old_index – The previous visual position of the column (unused).

  • new_index – The new visual position of the column (unused).

Note

Parameters are required by the Qt signal signature but not used in the implementation. Uses a guard flag to prevent recursive calls when programmatically repositioning the FileName column.

select_all_column(col)[source]

Select all cells in a column when its header is double-clicked.

This method clears any existing selection before selecting the entire column, ensuring only the specified column is highlighted.

Parameters:

(int) (col) – The zero-based index of the column to select.

select_all_columns()[source]

Select all columns containing currently selected cells.

Expands the current cell selection to include entire columns. If cells from multiple columns are selected, all corresponding columns will be selected. This method is typically invoked from the context menu.

Note

Temporarily switches selection mode to MultiSelection during operation, then restores ExtendedSelection mode.

selection_changed()[source]

Update the tab view when the table selection changes.

Rebuilds the internal scans list based on currently selected items, grouping tag names by scan name. If link_viewer is enabled, updates the connected mini viewer display.

Side effects:
  • Clears and repopulates self.scans with [scan_name, [tag_names]] pairs

  • Calls data_browser.connect_mini_viewer() if self.link_viewer is True

show_brick_history(scan)[source]

Display a popup window showing the history of a brick.

This method retrieves the brick UUID associated with the triggering sender, creates a history popup dialog, and displays it to the user.

Parameters:

scan – The scan data to display in the history popup.

Note

The sender (typically a UI widget) must be registered in self.bricks to retrieve the corresponding brick UUID.

sort_column(order)[source]

Sort the currently selected column.

Parameters:

int) (order (Qt.SortOrder or) – Sort order to apply. - Qt.AscendingOrder (0): Sort from lowest to highest - Qt.DescendingOrder (1): Sort from highest to lowest

Note

Temporarily disconnects signals during sorting to prevent unwanted side effects, then reconnects them afterward.

sort_updated(column, order)[source]

Update project state and apply sorting to the table.

Temporarily disconnects signals, updates the project’s sort configuration, applies the sort to table items, refreshes visual elements, and reconnects signals.

Parameters:
  • column – The column index to sort by. Use -1 to indicate no sorting.

  • order – The sort order (Qt.AscendingOrder or Qt.DescendingOrder).

Note

This method is a no-op when column is -1, allowing safe calls with invalid column indices.

update_colors()[source]

Update cell background colors based on data state and visibility.

Colors indicate:
  • White/Grey: Unmodified builtin tags (alternating for visible

    rows)

  • Cyan/Blue: Modified builtin tags (alternating for visible rows)

  • Pink/Red: User-defined tags or null values (alternating for

    visible rows)

Note: This method assumes the itemChanged signal is disconnected. Automatically saves modifications if auto-save is enabled.

update_selection()[source]

Update table selection based on current scan results.

Clears existing selection and selects cells corresponding to tags found in the current scan results. For each scan, selects the cells at the intersection of the scan’s row and its associated tag columns.

update_table(take_tags_to_update=False)[source]

Refresh the table with current project data.

Completely resets and repopulates the table when switching projects. This involves clearing selections, fetching current scan documents, refilling headers and cells, resizing columns/rows, and updating the visual appearance.

Parameters:

take_tags_to_update – If True, updates tags during the header fill operation. Defaults to False.

Side Effects:
  • Clears current table selection

  • Resets scans_to_visualize and scans_to_search attributes

  • Clears selected scans list if selection is active

  • Disconnects and reconnects table signals

  • Modifies table dimensions and visual styling

update_visualized_columns(old_tags, showed)[source]

Update column visibility based on tag selection changes.

Synchronizes the table’s visible columns with the provided tag list by:

  • Hiding columns for tags that are no longer displayed

  • Showing columns for newly displayed tags

  • Updating advanced search dropdowns if the search panel is open

  • Refreshing column sizing and colors

Parameters:
  • (list) (showed) – Previously visualized tags.

  • (list) – Tags to currently display in the table.

update_visualized_rows(old_scans)[source]

Update table row visibility based on current scan visualization state.

Temporarily disconnects selection signals, hides rows for scans no longer in the visualization list, shows rows for newly visualized scans, and updates the table appearance.

Parameters:

old_scans – Collection of scans from the previous state, used to determine which rows need to be hidden.

visualized_tags_pop_up()[source]

Display a modal dialog for configuring visualized tag columns.

Opens a properties popup showing currently visible tags and allowing the user to modify which tags are displayed in the data browser. The popup is sized to 50% of screen width and 80% of screen height.

class populse_mia.user_interface.pipeline_manager.node_controller.RapidSearch(databrowser)[source]

Bases: QLineEdit

Widget for pattern searching in table data across visualized tags.

Supports special search syntax: - ‘%’: Wildcard for any string - ‘_’: Wildcard for any single character - ‘Not Defined’: Matches scans with missing values

Dates should be formatted as: yyyy-mm-dd hh:mm:ss.fff

__init__(databrowser)[source]

Initialize the RapidSearch widget.

Parameters:

databrowser – Parent data browser widget

prepare_not_defined_filter(tags)[source]

Create a filter for finding entries with undefined values.

Parameters:

(list) (tags) – List of tags to check for null values

Return (str):

QL-like filter expression for finding null values

static prepare_filter(search, tags, scans)[source]

Create a filter for searching text across specified tags.

Parameters:
  • (str) (search) – Search pattern to look for

  • (list) (scans) – List of tags to search within

  • (list) – List of scans to restrict the search to

Return (str):

SQL-like filter expression for the search

class populse_mia.user_interface.pipeline_manager.node_controller.PlugFilter(project, scans_list, process, node_name, plug_name, node_controller, main_window)[source]

Bases: QWidget

A PyQt widget for interactively filtering and selecting database scans to assign to a pipeline node plug.

This widget provides a powerful interface for browsing, searching, and filtering files from the project database. It features:

  • A customizable data browser with tag columns.

  • Rapid text search for quick filtering.

  • Advanced multi-criteria filtering for precise selection.

  • Tag visibility controls to customize the displayed information.

  • Automatic exclusion of files that are outputs from existing pipeline bricks to prevent circular dependencies.

The widget is designed to integrate seamlessly with a pipeline editor, allowing users to select and assign files to a specific node plug. When the selection is confirmed, the chosen files are emitted as a list via the plug_value_changed signal.

plug_value_changed

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

__init__(project, scans_list, process, node_name, plug_name, node_controller, main_window)[source]

Initialize the PlugFilter widget for filtering database scans.

Creates a filterable data browser interface with search capabilities, tag visualization controls, and scan selection. Automatically excludes scans that are outputs from existing pipeline bricks.

Parameters:
  • project – Current project instance containing database and folder paths

  • scans_list – Initial list of database file paths to filter. If empty, all scans from COLLECTION_CURRENT are included

  • process – Process instance associated with the selected pipeline node

  • node_name – Display name of the current pipeline node

  • plug_name – Name of the selected node plug/connection point

  • node_controller – Parent controller managing node visibility and tags

  • main_window – Main application window containing the pipeline manager

ok_clicked()[source]

Handle OK button click by applying changes and closing the dialog.

Commits the current widget value to the associated node plug, then closes the widget dialog.

Reset search interface to initial state and restore all scan rows.

Clears the rapid search text field, resets advanced search rows, and restores the full scan list to the table view, updating the display to reflect all available scans.

search_str(str_search)[source]

Filter and update the list of scans displayed in the browser based on search criteria.

This method updates scans_to_visualize by applying either a rapid search filter or showing all available scans when the search is empty. Special handling is provided for the NOT_DEFINED_VALUE constant to filter scans with undefined tag values.

Parm str_search (str):

The search string entered by the user. An empty string shows all scans, NOT_DEFINED_VALUE filters for scans with undefined tags, and any other value performs a rapid search filter.

Side Effects:
  • Updates self.table_data.scans_to_visualize with filtered scan list

  • Updates self.advanced_search.scans_list with the same filtered list

  • Triggers UI update via self.table_data.update_visualized_rows()

set_plug_value()[source]

Extract selected or filtered scan values and emit to node plug.

Retrieves values from the database for the currently filtered tag. If items are selected in the table, only those values are extracted. Otherwise, all filtered items are processed. For filename tags, paths are converted to absolute paths within the project folder.

Emits:

plug_value_changed: Signal with list of extracted values.

update_tag_to_filter()[source]

Open a dialog to select a tag filter and update the button text.

Displays a popup dialog allowing the user to select a tag from the available visible tags. If a tag is selected (dialog accepted), updates the filter button’s text to reflect the chosen tag.

update_tags()[source]

Open a dialog to update the list of visualized tags.

Displays a modal dialog allowing users to select which tags should be visualized in the table. If accepted, updates the visible columns in the data table, refreshes the node controller’s visible tags list, and updates all advanced search field dropdowns with the new tag selection.

The ‘Filename’ tag is always included in the visible tags list.

class populse_mia.user_interface.pipeline_manager.node_controller.ProcessMIA(*args, **kwargs)[source]

Bases: Process

Extends the Capsul Process class to customize execution for Mia bricks.

This class provides specialized methods for Mia bricks, including process initialization, output handling, and trait management.

Note

  • Type ‘ProcessMIA.help()’ for a full description of this process parameters.

  • Type ‘<ProcessMIA>.get_input_spec()’ for a full description of this process input trait types.

  • Type ‘<ProcessMIA>.get_output_spec()’ for a full description of this process output trait types.

ignore_node = False
ignore = {}
key = {}
__init__(*args, **kwargs)[source]

Initializes the process instance with default attributes.

Parameters:
  • (tuple) (args) – Positional arguments passed to the parent class.

  • (dict) (kwargs) – Keyword arguments passed to the parent class

_add_field_to_collections(database_schema, collection, tag_def)[source]

Add a new field to the specified collection in the database.

Parameters:
  • database_schema – The database schema context used for modifying collections.

  • (str) (collection) – The name of the collection to which the field should be added.

  • (dict) (tag_def) –

    Dictionary containing the field definition with the following keys: - ‘name’ (str): The name of the field. - ‘field_type’ (str): The type of the field. - ‘description’ (str): A description of the

    field.

    • ’visibility’ (str): The visibility status of

      the field.

    • ’origin’ (str): The origin of the field.

    • ’unit’ (str): The unit associated with the

      field.

    • ’default_value’ (Any): The default value of

      the field.

_add_or_modify_tags(own_tags, current_values, initial_values, field_names)[source]

Add new tags or modify existing tag values in the current and initial collections.

Parameters:
  • (list[dict]) (own_tags) – List of tags to be added or modified, where each tag is a dictionary with ‘name’, ‘value’, ‘description’, etc., keys.

  • (dict) (initial_values) – Dictionary storing the current tag values.

  • (dict) – Dictionary storing the initial tag values.

  • (set[str]) (field_names) – Set of field names that exist in the database schema.

_all_values_identical(values_dict)[source]

Checks if all dictionaries in values_dict have identical content.

Parameters:

(dict) (values_dict) – A dictionary where each value is expected to be comparable to the others.

Return (bool):

True if all values in values_dict are identical or if the dictionary is empty, otherwise False.

_after_run_process(run_process_result)[source]

Retrieve output values when the process is a NipypeProcess.

Parameters:

run_process_result – The result of the process execution. (unused)

_find_plug_for_output(out_file)[source]

Find the plug name associated with the given output file.

Parameters:

(str) (out_file) – The output file to search for in user traits.

Return (str | None):

The name of the plug (trait) if found, otherwise None.

_get_relative_path(file_path, base_dir)[source]

Converts an absolute file path to a relative path based on the project folder.

Parameters:
  • (str) (base_dir) – The absolute path of the file.

  • (str) – The base directory to make the path relative to.

Return (str):

The relative file path.

_remove_tags(tags2del, current_values, initial_values, out_file)[source]

Remove specified tags from value dictionaries and the database.

Parameters:
  • (list[str]) (tags2del) – List of tag names to be removed.

  • (dict) (initial_values) – Dictionary storing the current tag values.

  • (dict) – Dictionary storing the initial tag values.

  • (str) (out_file) – The output file associated with the tags being removed.

_resolve_inheritance_ambiguity(all_current_values, all_initial_values, in_files, node_name, plug_name, out_file)[source]

Resolves ambiguity when multiple input files could provide tags.

This method applies a series of resolution strategies in order: 1. If all input files have identical tag values, the first input is

selected.

  1. If a previously stored selection rule exists, it is used.

  2. If neither condition applies, the user is prompted to manually resolve the ambiguity, and their decision is stored for future use.

Parameters:
  • (dict) (in_files) – A dictionary containing the current values for each possible input file.

  • (dict) – A dictionary containing the initial values for each possible input file.

  • (dict) – A mapping of input file indices to their corresponding file paths.

  • (str) (out_file) – The name of the processing node.

  • None) (plug_name (str |) – The name of the plug (trait) causing the ambiguity.

  • (str) – The output file for which inheritance needs to be resolved.

_run_process()[source]

Execute the specific run method for ProcessMIA subclasses.

_save_tag_values(rel_out_file, current_values, initial_values)[source]

Save tag values to the CURRENT and INITIAL database collections.

Parameters:
  • (str) (rel_out_file) – The relative path of the output file used as the document’s primary key.

  • (dict) (initial_values) – Dictionary containing the current tag values to be saved.

  • (dict) – Dictionary containing the initial tag values to be saved.

init_default_traits()[source]

Initialize required traits for Nipype or Capsul processes.

init_process(int_name)[source]

Instantiate the process attribute given a process identifier.

Parameters:

(str) (int_name) – A process identifier used to fetch the process instance.

list_outputs()[source]

Reset and override process outputs.

load_nii(file_path, scaled=True, matlab_like=False)[source]

Load a NIfTI image and return its header and data, optionally adjusting for MATLAB conventions.

MATLAB and Python (in particular NumPy) treat the order of dimensions and the origin of the coordinate system differently. MATLAB uses main column order (also known as Fortran order). NumPy (and Python in general) uses the order of the main rows (C order). For a 3D array data(x, y, z) in MATLAB, the equivalent in NumPy is data[y, x, z]. MATLAB and NumPy also handle the origin of the coordinate system differently: MATLAB’s coordinate system starts with the origin in the lower left-hand corner (as in traditional matrix mathematics). NumPy’s coordinate system starts with the origin in the top left-hand corner. When taking matlab_like=True as argument, the numpy matrix is rearranged to follow MATLAB conventions. Using scaled=False generates a raw unscaled data matrix (as in MATLAB with header = loadnifti(fnii) and header.reco.data).

Parameters:
  • (str) (file_path) – The path to a NIfTI file.

  • (bool) (matlab_like) – If True the data is scaled.

  • (bool) – If True the data is rearranged to match the order of the dimensions and the origin of the coordinate system in Matlab.

make_initResult()[source]

Generate the initialization result dictionary.

relax_nipype_exists_constraints()[source]

Relax the ‘exists’ constraint of the process.inputs traits.

requirements()[source]

Return the process requirements using MIA’s requirement attribute.

run_process_mia()[source]

Execute a customized run for ProcessMIA subclasses.

tags_inheritance(in_file, out_file, node_name=None, own_tags=None, tags2del=None)[source]

Inherit and manage data tags from input file(s) to an output file.

This method handles the inheritance of metadata tags from one or more input files to an output file. It also allows adding new tags, modifying existing ones, or deleting unwanted tags in the process.

Notes: This method performs inheritance in two ways: 1. Immediate inheritance during process execution 2. Deferred inheritance by storing inheritance information for later

use during workflow generation (addresses issue #290, #310)

In ambiguous cases (multiple input files), the method will either: - Use previously stored inheritance rules - Prompt the user for a decision if no rule exists - Auto-resolve if all inputs have identical tag values

Parameters:
  • dict) (own_tags (list of) –

    Source of tag inheritance. Either: - A string representing a single input

    file path (unambiguous case)

    • A dictionary mapping plug names to corresponding input file paths (ambiguous case)

  • (str) (node_name) – Path of the output file that will inherit the tags.

  • (str) – Name of the processing node in the workflow.

  • dict)

    Tags to be added or modified. Each dictionary must contain: - “name”: Tag identifier - “field_type”: Data type of the tag - “description”: Human-readable

    description

    • ”visibility”: Boolean or visibility

      level

    • ”origin”: Source of the tag

    • ”unit”: Unit of measurement

      (if applicable)

    • ”default_value”: Default value

    • ”value”: Current value to set

  • str) (tags2del (list of) – Tags to be deleted from the output file.

class populse_mia.user_interface.pipeline_manager.node_controller.PopUpSelectTagCountTable(project, tags_to_display, tag_name_checked=None)[source]

Bases: PopUpTagSelection

A pop-up dialog for selecting a tag from a count table.

Allows users to choose a single tag from a list of available tags, with an option to pre-select a specific tag.

__init__(project, tags_to_display, tag_name_checked=None)[source]

Initialize the tag selection pop-up.

Parameters:
  • project – The current project context.

  • (list) (tags_to_display) – List of tags to be displayed for selection.

  • (str) (tag_name_checked) – Optional tag to be pre-checked on initialization.

ok_clicked()[source]

Determine the selected tag and close the dialog.

Finds the first checked item and sets it as the selected tag, then closes the dialog.

class populse_mia.user_interface.pipeline_manager.node_controller.PopUpVisualizedTags(project, visualized_tags)[source]

Bases: QWidget

A widget for managing tag visualization preferences in a project.

This class provides an interface for users to select and unselect tags to be displayed in the project. It allows searching through available tags and moving them between available and visualized lists.

signal_preferences_change

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

__init__(project, visualized_tags)[source]

Initialize the tag visualization management widget.

Parameters:
  • project – The current project in the software.

  • visualized_tags – Tags currently being visualized before opening this widget.

_create_button(object_name, text, click_handler)[source]

Create a customized QPushButton with specified properties.

This method instantiates a QPushButton, sets its object name, translates and sets its text, and connects a click event handler.

Parameters:
  • (str) (text) – The unique identifier name for the button.

  • (str) – The text to be displayed on the button, will be translated.

  • (callable) (click_handler) – The function to be called when the button is clicked.

Return (QPushButton):

A configured button with the specified properties.

_create_button_layout()[source]

Create the layout for selection buttons.

_create_label(object_name, text)[source]

Create a customized QLabel with specified properties.

This method instantiates a QLabel, sets its text format, object name, and translates its text.

Parameters:
  • (str) (text) – The unique identifier name for the label.

  • (str) – The text to be displayed on the label, will be translated.

Return (QLabel):

A configured label with the specified properties.

_create_left_layout()[source]

Create the layout for available tags.

_create_right_layout()[source]

Create the layout for visualized tags.

Create the search bar with placeholder and connection.

_create_tag_list(text='')[source]

Create a QListWidget configured for multi-selection of tags.

This method initializes a QListWidget with multi-selection mode nabled, allowing users to select multiple items simultaneously. The list widget is assigned a unique object name based on the optional text parameter.

Parameters:

(str) (text) – A prefix used to create a unique object name for the QListWidget.

Return (QListWidget):

A configured QListWidget with multi-selection mode enabled.

_populate_tags()[source]

Populate the tags list from the project database.

_setup_ui()[source]

Create and layout the user interface components.

search_str(str_search)[source]

Filter tags based on search string.

Parameters:

(str) (str_search) – Search pattern to match against tags

click_select_tag()[source]

Move selected tags from available to visualized list.

Removes selected tags from the left (available) list and adds them to the right (visualized) list.

click_unselect_tag()[source]

Remove selected tags from the visualized list and return them to the available tags list.

Moves selected tags from the right (visualized) list to the left (available) list, maintaining sorted order.

class populse_mia.user_interface.pipeline_manager.node_controller.AttributesFilter(project, scans_list, process, node_name, plug_name, node_controller, main_window)[source]

Bases: PlugFilter

A specialized widget for filtering database entries and collecting their attributes.

This widget extends PlugFilter to provide a user-friendly interface for filtering files using both rapid and advanced search tools. It allows users to:

  • Filter database entries based on customizable criteria.

  • Select specific rows or use the entire filtered dataset.

  • Collect attributes from the selected or filtered entries.

  • Emit the collected attributes as a structured dictionary for further processing.

The collected attributes are organized into a dictionary where each key represents an attribute name, and the corresponding value is a list of all values for that attribute across the selected or filtered entries.

attributes_selected

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

ok_clicked()[source]

Close the widget and emit the collected attributes.

If rows are selected in the table, attributes are collected only from those rows. Otherwise, attributes are collected from all entries matching the current filter. The resulting attributes are grouped by field name and emitted via the attributes_selected signal.

class populse_mia.user_interface.pipeline_manager.node_controller.CapsulNodeController(project, scan_list, pipeline_manager_tab, main_window)[source]

Bases: QWidget

A PyQt widget for managing and editing pipeline node parameters using Capsul’s AttributedProcessWidget.

This controller provides a user interface for interacting with pipeline nodes, enabling users to:

  • View and modify node parameters using Capsul’s AttributedProcessWidget.

  • Rename nodes and update the pipeline accordingly.

  • Filter and manage node attributes.

  • Handle undo/redo operations for parameter changes.

  • Recursively rename subprocesses and adjust context names.

The widget is designed to integrate with a pipeline editor, providing real-time updates and synchronization between the UI and the underlying pipeline state.

value_changed

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

__init__(project, scan_list, pipeline_manager_tab, main_window)[source]

Initialize the node controller.

Parameters:
  • project – Current project instance.

  • scan_list – List of available scans.

  • pipeline_manager_tab – Parent pipeline manager tab.

Parammain_window:

Main application window.

display_parameters(node_name, process, pipeline)[source]

Display the parameters of the selected node.

Creates and displays widgets for all node parameters, including line edits, labels, and control buttons. Handles special cases for pipeline inputs/outputs nodes.

Parameters:
  • (str) (node_name) – Name of the node to display.

  • process – Process instance associated with the node.

  • pipeline – Current pipeline containing the node.

filter_attributes()[source]

Display the attributes filter dialog.

Opens a popup widget that allows users to filter and select attributes for the current process node.

release_process()[source]

Clean up process notifications and signals.

rename_subprocesses(node, parent_node_name)[source]

Recursively rename subprocesses within the pipeline, adjusting the context name.

This method checks if the process is part of a pipeline and modifies its context name accordingly. If the process name contains a hierarchy of at least three levels, the context name is updated with the parent node name and the remaining parts of the context name. If the process is a pipeline node, the method is called recursively for each subprocess.

Parameters:
  • node – The current node being processed.

  • (str) (parent_node_name) – The name of the parent node to be included in the context name.

static static_release(process, param_changed)[source]

Remove trait change notification from process.

Parameters:
  • process – Process instance to remove notification from.

  • param_changed – Callback function to remove.

parameters_changed(_, plug_name, old_value, new_value)[source]

Handle parameter value changes and emit signal.

Parameters:
  • _ – Unused parameter (object instance).

  • (str) (plug_name) – Name of the changed parameter.

  • old_value – Previous parameter value.

  • new_value – New parameter value.

update_attributes_from_filter(attributes)[source]

Apply selected attributes from the filter widget.

Updates the process completion engine attributes based on user selection from the filter dialog. Shows a warning if no matching attributes are found.

Parameters:

(dict) (attributes) – Dictionary of attribute names and values to apply.

update_node_name(new_node_name=None, old_node_name=None, from_undo=False, from_redo=False)[source]

Change the name of the selected node and update the pipeline.

Renames the node in the pipeline dictionary and updates all associated links. For iterated processes, ensures the name starts with “iterated_”.

Parameters:
  • (str) (old_node_name) – New name for the node. If None (when this method is not called from an undo/redo), reads from the line edit widget.

  • (str) – Current node name. If None (when this method is not called from an undo/redo), uses self.node_name.

  • (bool) (from_redo) – True if this action is from an undo operation.

  • (bool) – True ifthis action is from a redo operation.

update_parameters(process=None)[source]

Update parameter values.

This method is maintained for backward compatibility but does nothing, as the controller widget already reacts to process parameter changes.

Parameters:

process – Process instance (unused).

class populse_mia.user_interface.pipeline_manager.node_controller.FilterWidget(project, node_name, node, main_window)[source]

Bases: QWidget

A PyQt widget for filtering and selecting files in a pipeline’s Input_Filter process.

This widget provides a user-friendly interface for filtering database files using both rapid and advanced search functionalities. It allows users to:

  • Browse and select files from the project database.

  • Perform rapid searches using a text-based search bar.

  • Apply advanced filters using a customizable search interface.

  • Visualize and update tags associated with the files.

  • Save the configured filter to the process for further use in the pipeline.

The widget is designed to integrate seamlessly with the pipeline editor, providing real-time feedback and updates as filters are applied.

__init__(project, node_name, node, main_window)[source]

Initialize the Filter Widget for pipeline node filtering.

Parameters:
  • project – Current project instance containing database and configuration.

  • node_name – Display name of the filter node.

  • node – Input_Filter node instance containing the filter process.

  • main_window – Parent main window for UI hierarchy.

layout_view()[source]

Configure and initialize the main widget layout.

Sets up a vertical layout containing:
  • Search bar with reset button

  • Advanced search widget

  • Data table

  • Action buttons (visualize tags, filter, OK, Cancel)

The window is sized to 60% width and 80% height of the screen resolution.

normalize_scan_path(scan_path)[source]

Normalize a scan path to a logical project-relative path.

Converts any scan path (absolute, relative, or symlinked) into a consistent project-relative representation, preferably starting at the project’s data directory.

Resolution strategy (in order of preference):
  1. Path relative to project root (if path is under project)

  2. Path relative to ‘data/’ directory (semantic anchor fallback)

  3. Absolute path string (last resort)

Parameters:

scan_path – File path to normalize (absolute or relative)

Returns:

Normalized path string, relative to project root when possible

Examples

>>> normalize_scan_path('/abs/path/project/data/scans/001.tif')
'data/scans/001.tif'
>>> normalize_scan_path('../other/data/scans/002.tif')
'data/scans/002.tif'

Note

Handles symlinks, mount aliases, and varying working directories robustly. Does not require paths to exist on disk.

ok_clicked()[source]

Apply the configured filter to the process and close the dialog.

Collects filter parameters from the advanced search interface and rapid search text field, creates a Filter object, and applies it to the process if it’s a ProcessMIA instance. The dialog is then closed regardless of process type.

Reset search interface to default state.

Clears the rapid search text field, resets advanced search rows, and restores the table to display all available scans. The table is updated efficiently by tracking the previous visualization state.

Side effects:
  • Clears rapid_search text field

  • Resets advanced_search rows to empty list

  • Updates advanced_search display

  • Restores table_data to show all scans from scan_list

search_str(str_search)[source]

Filter and update the displayed scans based on a search string.

Performs a rapid search to filter scans in the browser view. An empty search string displays all available scans. Special handling is provided for undefined values and custom search filters.

Parameters:

str_search – Search query string. Use empty string to show all scans, or NOT_DEFINED_VALUE constant to filter scans with undefined fields.

Side Effects:
  • Updates self.table_data.scans_to_visualize with filtered results

  • Updates self.advanced_search.scans_list with filtered results

  • Triggers table row update via self.table_data.update_visualized_rows()

update_tag_to_filter()[source]

Display a tag selection dialog and update the filter button text.

Opens a popup dialog allowing the user to select from visible project tags. If a tag is selected (dialog accepted), updates the filter button’s text to reflect the chosen tag.

update_tags()[source]

Update the list of visualized tags through a user dialog.

Opens a modal dialog that allows users to select which tags should be displayed in the table view. Upon confirmation, the method:

  • Updates table columns to show only selected tags

  • Refreshes advanced search field options

  • Ensures TAG_FILENAME is always included in visible tags

The dialog is automatically cleaned up after use, whether the user confirms or cancels the operation.

class populse_mia.user_interface.pipeline_manager.node_controller.NodeController(project, scan_list, pipeline_manager_tab, main_window)[source]

Bases: QWidget

A PyQt widget for managing and editing the input/output values and parameters of a pipeline node.

This controller provides a user interface to interact with pipeline nodes, allowing users to:

  • View and edit node names and parameters

  • Filter and update plug values

  • Handle undo/redo operations for parameter changes

  • Manage subprocesses and context names

The widget is designed to integrate with a pipeline editor, providing real-time updates and synchronization between the UI and the underlying pipeline state.

value_changed

int = …, arguments: Sequence = …) -> PYQT_SIGNAL

types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.

Type:

pyqtSignal(*types, name

Type:

str = …, revision

__init__(project, scan_list, pipeline_manager_tab, main_window)[source]

Initialize the node controller widget.

This controller manages the interaction between the current project, the selected scans, and the active pipeline within the pipeline manager interface.

Parameters:
  • project – The current project instance.

  • scan_list – lThe list of selected database files (scans).

  • pipeline_manager_tab – The parent pipeline manager tab widget.

  • main_window – The main application window.

clearLayout(widget)[source]

Remove and delete all items from a widget’s layout.

This method recursively clears the layout attached to the given widget:
  • QWidget items are detached from their parent.

  • Nested layouts are emptied and scheduled for deletion.

  • The layout itself is deleted once cleared.

Parameters:

(QtWidgets.QWidget) (widget) – The widget whose layout should be cleared.

display_filter(node_name, plug_name, parameters, process)[source]

Display an interactive filter widget for modifying plug values.

Creates and shows a PlugFilter dialog that allows users to filter and modify the value of a specific plug. The dialog’s value changes are automatically propagated back to update the plug through a signal connection.

Parameters:
  • node_name – The name of the pipeline node containing the plug.

  • plug_name – The name of the plug to filter.

  • parameters – A tuple containing (plug_index, pipeline_instance, plug_value_type) that provides context for the plug being filtered.

  • process – The process instance associated with the node.

Note

The created PlugFilter is stored in self.pop_up and remains accessible until another filter is displayed or the instance is destroyed.

display_parameters(node_name, process, pipeline)[source]

Display and configure parameters for the selected pipeline node.

Creates an interactive interface showing the node’s input and output parameters with editable fields. For pipeline global inputs (except ‘database_scans’), adds filter buttons for File/List_File/Any trait types.

Special handling:
  • ‘inputs’/’outputs’ nodes: Name field is read-only, displays

    “Pipeline inputs/outputs”

  • Other nodes: Name field is editable and updates on Enter

  • Parameters with userlevel > 0 are hidden from the interface

Parameters:
  • node_name – Identifier for the node being displayed

  • process – Node’s process object containing traits and their values

  • pipeline – Parent pipeline instance containing this node

Side effects:
  • Clears and rebuilds the widget layout

  • Updates node_parameters_tmp in the current pipeline editor

  • Enables the run_pipeline_action

get_index_from_plug_name(plug_name, in_or_out)[source]

Get the index of a plug by its name.

Parameters:
  • (str) (in_or_out) – The name of the plug to find.

  • (str) – Direction of the plug ; “in” for input, “out” for output.

Returns:

The zero-based index of the plug if found, None otherwise.

update_node_name(new_node_name=None)[source]

Update the name of the currently selected node in the pipeline.

Renames a node in the pipeline dictionary, preserving all its properties and connections. If the pipeline contains a ProcessIteration, ensures the name is prefixed with ‘iterated_’.

Parameters:

new_node_name – The new name for the node. If None, retrieves the name from the UI line edit widget. Is not None only when this method is called from an “undo/redo”)

Emits:

value_changed: Signal with node rename details for undo/redo tracking.

Note

Does nothing if the new name already exists in the pipeline.

rename_subprocesses(node, parent_node_name)[source]

Recursively update context names for a node and its subprocesses.

This method updates the context_name attribute throughout a node hierarchy, ensuring consistent naming based on the parent context. For pipeline processes, it preserves the hierarchical structure while incorporating the parent node name.

The context name follows these rules: - Pipeline processes:”Pipeline.{parent_node_name}.{additional_parts}” - Non-pipeline processes: “{parent_node_name}” - Nested subprocesses are updated recursively

Parameters:
  • (Node) (node) – The node whose context name will be updated, along with all its subprocesses.

  • (str) (parent_node_name) – The parent node’s name to incorporate into the context naming hierarchy.

update_parameters(process=None)[source]

Update parameter values in the UI from the process traits.

Synchronizes input and output line edit widgets with the current values of the process traits. If no process is provided, uses the current process if available. The ‘nodes_activation’ trait is ignored. Undefined trait values are handled gracefully.

Parameters:

process – Optional process node whose parameters should be displayed. If None, uses self.current_process.

update_plug_value(in_or_out, plug_name, pipeline, value_type, new_value=None)[source]

Update the value of a node plug and propagate changes through the pipeline.

The new value is either explicitly provided (typically during undo/redo) or read from the corresponding line edit widget and evaluated. If the update fails, the previous value is restored in the UI and a warning dialog is shown.

Parameters:
  • (str) (plug_name) – Direction of the plug - “in” for input plugs, “out” for output plugs.

  • (str) – Name of the plug to update.

  • pipeline – The current pipeline instance.

  • (type) (value_type) – Expected type of the plug value.

  • (optional) (new_value) – New value for the plug. If None, reads from the line edit widget (is None except when this method is called from an undo/redo)

Side Effects:
  • Updates the plug value in the pipeline node

  • Updates the corresponding line edit widget text

  • Triggers pipeline node and plug activation updates

  • Emits value_changed signal for undo/redo tracking

  • Displays status message in the main window

  • Shows error dialog on TraitError or OSError

Note

The method uses eval() to parse string input, which handles lists, dicts, and other Python literals. Special handling is included for ‘<undefined>’ values in dictionaries, which are converted to Undefined objects.

update_plug_value_from_filter(plug_name, parameters, filter_res_list)[source]

Update a plug’s value based on filtered results.

Automatically unwraps single-item lists for convenience, setting the plug value to the item itself rather than a list containing one item.

Parameters:
  • plug_name – Name of the plug to update.

  • parameters – Tuple of (plug_index, pipeline_instance, value_type).

  • filter_res_list – Filtered file list to set as the plug value.

Note

  • Empty lists are preserved as empty lists

  • Single-item lists are unwrapped to the item itself

  • Multi-item lists are kept as lists

release_process()[source]

Release the process from notification tracking.

This method is intended to be overridden by subclasses that need to implement process release logic. The base implementation is a no-op.

Note

Currently only implemented in CapsuleNodeController.