Version 1.3#
DataLab Version 1.3.0#
✨ New Features#
History Panel:
DataLab now records what you do and lets you replay it. A new History panel keeps track of every action applied to signals and images, from object creation and file loading to processing, analysis and region-of-interest edits (implements Issue #90).
Recording sessions: actions are grouped into sessions, one active session per panel. Recording is disabled by default and is proposed when you create or load an object; configurable session policies control how plugin and macro objects are attached to sessions
Processing chains: each session is presented as a linear processing chain, making the lineage of a result immediately readable
Replay: replay a whole session, or step through it action by action, to reproduce a workflow on new data. Interactive curve fits and intensity profiles are recorded as deterministic actions and replay without reopening their dialogs
In-place editing: processing, analysis and object-creation parameters can be edited directly from the history, and downstream steps are recomputed through the cascade
Duplication: duplicate a chain to explore a variant without touching the original one
Persistence: histories are stored in the HDF5 workspace and can also be exported and imported as standalone
.dlhistfilesCompatibility checks: before replaying, DataLab validates the recorded actions against the current workspace state and reports what can or cannot be applied
The Delete key removes the selected entries in the History panel (same behavior as in the Signal and Image panels), and only applies while the history tree has focus
A resolution dialog is displayed when replaying a processing chain broken by deleted objects: choose “Repair and continue” to prune the broken steps and replay the remaining valid ones, or cancel without modifying anything
A dedicated documentation page and a step-by-step tutorial are available
Built-in AI Assistant:
DataLab now ships an optional AI Assistant dock panel that can converse with you, inspect the workspace, create and process signals and images, and write and run Python macros (implements Issue #316).
Works with any OpenAI-compatible endpoint: OpenAI, GitHub Models, Azure OpenAI, Ollama, LM Studio, etc. A mock provider is available to try the assistant offline, without any API key
The assistant can call a set of built-in tools: list and inspect objects, introspect the available operations, create synthetic signals and images, load files, apply any registered processing, trigger plugin actions, and create and run macros
Every action that modifies the workspace requires an explicit confirmation, with a parameter preview and a syntax-highlighted preview of the macro source when a macro is proposed. Read-only tools may be auto-approved
Conversations are persisted, can be browsed and reloaded, and exported to Markdown; token usage and context size are displayed
Settings (provider, model, API key, base URL, temperature, timeout, iteration cap, auto-approval) are grouped in a dedicated AI Assistant tab of the preferences dialog, with a connection test button
The API key is stored in clear text in the DataLab configuration file, and the settings dialog states it explicitly
Command palette:
A VSCode-style command palette lets you search and run any menu command by typing part of its name or of its menu path, e.g. “Processing ‣ Fourier analysis ‣ FFT” (implements Issue #337)
Three entry points: a search box in the top-right corner of the menu bar, a “Command palette…” entry at the top of the Help menu, and the
Ctrl+Shift+Pkeyboard shortcutFuzzy matching ranks the results, so a few characters are enough to reach the right command, with full keyboard navigation
Spectral analysis support:
Following the spectral analysis work carried out in Sigima, DataLab gains the matching interface (implements Issue #309).
New Analysis > Extract peak positions feature, storing the detected peaks as an XY-markers table result rendered as cross markers on the plot
New Analysis > Peak detection… interactive dialog, to adjust threshold and minimum distance visually before storing the result
New Operations > Create signal from markers table… feature, building a sticks signal from an XY-markers table result — convenient to overlay reference lines on a spectrum
Marker results can be labelled in result tables (
#1,#2, … for XY markers,a,b,c, … for axis markers), so each row can be matched with the corresponding marker drawn on the plot. This is controlled by a new “Show marker labels in result tables” option in the settingsResult labels now support a customizable position and offset
Signal regions of interest rendered along the curve:
Signal ROIs are no longer drawn as a single full-height yellow rectangle: the translucent fill is now clipped to the signal curve with a baseline at
y = 0, and each ROI uses a different color taken from a cyclic ten-color palette (implements Issue #314)Colors are derived from the ROI index, so a given ROI keeps the same color across deletions, reorderings and editor reopenings
Non-finite samples are filtered out before drawing, so signals with gaps render cleanly; on a logarithmic Y axis, the baseline falls back to the canvas bottom
ROI persistence is unchanged: only coordinates are stored, visual properties are recomputed at render time
Regions of interest from detection (auto mask):
Contour, blob, peak and Hough circle detection can create regions of interest directly from the detected features, turning intensity contours into editable polygon ROIs usable by every ROI-aware processing feature (implements Issue #294)
Third-party plugin discovery via environment variable:
Added support for the
DATALAB_PLUGINSenvironment variable, allowing one or more directories to be specified as additional plugin search paths (implements Issue #311)Multiple directories can be listed using the OS path separator (
;on Windows,:on Linux/macOS), following the same convention asPYTHONPATHListed directories are appended to the existing plugin search paths at startup and are picked up automatically by the plugin discovery mechanism
Non-existent directories are silently skipped (a warning is recorded in the log file), so a stale environment variable on another machine will not prevent DataLab from starting
Plugin management user experience:
The plugin configuration dialog has been reworked to make third-party plugins easier to install, inspect and troubleshoot (implements Issue #302).
Persistent additional plugin directories: several extra directories can be added, edited and removed from the dialog and are saved in the DataLab configuration, next to the read-only list of default directories
Open file and Show in folder buttons per plugin, to inspect or edit a plugin script without hunting through the file system
An “Apply and reload plugins” button and a Plugins > Reload plugins menu entry, to pick up plugin changes without restarting DataLab
A last load timestamp displayed for the current session, to confirm that changes have been taken into account
Plugin list filtering (all / enabled / disabled / with errors), a global enable/disable switch, and an option to hide compatibility warnings for legacy v0.20 plugins
A Show in folder action is now available for the DataLab configuration file, from the installation and configuration viewer
Macro editor:
Crash recovery: unsaved macros are auto-saved, and DataLab proposes to recover them at the next start
Recent macros dialog, listing the macros used in previous sessions and allowing to reopen one in a single click
Macro templates, to start from a working skeleton (simple macro, image processing, generic method call)
Code completion and a find & replace widget in the macro editor
Object titles:
Short identifiers embedded in object titles (e.g.
s001,i012) are now rendered as clickable links in the signal and image trees, so the source objects of a computation can be selected in a single click
Replace special values processing (signal and image):
DataLab now provides a dedicated “Replace special values” processing
function that detects and replaces NaN, +Inf and -Inf values in both
signals and images. The feature is available under
Processing → Level adjustment → Replace special values in both the Signal
and Image panels (implements
Issue #142).
Each target (
NaN,+Inf,-Inf) can be processed independently with its own strategySignal strategies: do nothing, replace with zero / constant / minimum / maximum / mean / median, delete affected points, forward fill, backward fill, interpolation (linear, spline, quadratic, cubic, PCHIP), N-neighbor minimum / maximum / mean / median
Image strategies: do nothing, replace with zero / constant / minimum / maximum / mean / median, N-neighbor minimum / maximum / mean / median
The parameter dialog displays colored badges showing the number (and percentage) of
NaN,+Infand-Infsamples found in the source object, giving immediate visibility on what will be modifiedWhen a neighbor strategy is selected, a live kernel preview shows the shape of the neighborhood that will be used for the replacement
Integer images are handled explicitly: because
NaNand infinite values cannot exist in integer data, the dialog explains that the operation is not applicable and prevents accidental processing, while preserving the original image data type without unnecessary float conversion
🔄 Changes#
DataLab now builds on SigimaX:
All the generic, application-level parts of DataLab (main window skeleton, configuration system, dockable plot widgets, HDF5 workspace and browser, log viewer, splash screen, status bar, scientific dialogs and PlotPy adapters) have been extracted into a new reusable library, SigimaX, and DataLab now derives from it instead of maintaining its own copies (implements Issue #182)
This is an internal refactoring: existing workflows, settings and files are unchanged, but it considerably reduces duplicated code and makes it possible to build other Qt scientific applications on the same foundation
As a consequence, DataLab now requires SigimaX ≥ 1.0.1, and its minimum requirements are aligned with it: Sigima ≥ 1.2.0, guidata ≥ 3.15.0 and PlotPy ≥ 2.11.0
Configuration system:
DataLab’s configuration has been migrated to the typed option system provided by SigimaX: options now carry an explicit type, default value and description, and are validated when read or written
Settings recorded by earlier versions are migrated automatically at first start; the configuration file layout is otherwise preserved
cdlclient package archived:
The standalone
cdlclientpackage is deprecated and archived. Its lightweight XML-RPC client is now provided by Sigima, assigima.client.SimpleRemoteProxy(implements Issue #183)Its Qt companion widgets have been taken over by SigimaX: the connection progress dialog is now
sigimax.widgets.connection.ConnectionDialog, usable with any remote proxy exposing a blockingconnect()methodThe documentation no longer refers to
cdlclient
Detection tools now preserve existing regions of interest:
Regions of interest created by peak, blob, Hough circle, and contour detection are now added to existing ROIs instead of replacing them, without displaying a destructive confirmation dialog (implements Issue #340)
Analysis results are now refreshed on demand instead of automatically:
Analysis results (statistics, FWHM, centroid, peak/contour/blob detection, etc.) are no longer recomputed automatically when you modify a region of interest, transform the data, or edit object properties (implements Issue #341)
Existing analysis results are now left untouched after such edits, avoiding surprising side effects and results that could become misleading once the data no longer matches the stored analysis parameters
Ordinary replay and ordinary mutations do not recompute analyses; however, in History edit mode, editing upstream parameters recomputes downstream analysis actions through the cascade
The familiar “Recompute” action (Edit menu,
Ctrl+R) now refreshes both processing and analysis results, giving you full control over when analyses are updatedFor developers, the former panel-level
recompute_analysisentry point has been renamed torecompute_selected;recompute_analysisnow refers to a different processor-level helper dedicated to explicit 1-to-0 analysis refresh
🛠️ Bug Fixes#
Regions of interest:
Fixed regions of interest created by a detection function (blob, contour, peak or Hough circle detection) reappearing immediately after being deleted or modified — detection ROIs are now ordinary, fully editable ROIs (fixes Issue #329)
Fixed deleted regions of interest reappearing after a post-processing automatic recompute
Fixed a crash when the region-of-interest index was out of bounds while building an ROI title
Intensity profiles:
Fixed the “Reset selection” button of the intensity profile dialogs not clearing the previous selection: after resetting and drawing a new region, the extracted profile still corresponded to the first selection (fixes Issue #322)
Fixed profile recompute using the parameters of another object when several objects were selected
Command palette:
Fixed search results being irrelevant for short queries — typing “rota” no longer returns unrelated commands before the rotation entries (fixes Issue #345)
Full width at half maximum:
A user-reported FWHM regression observed in DataLab v0.20.1 (an aberrant, far too small width) has been pinned down by a non-regression test built on the original signal, now part of Sigima’s test data. The computation was already correct in v1.2.x and remains correct in this version (fixes Issue #356)
Plugins:
Fixed plugin processing functions failing in spawned worker processes after a plugin reload
Main window:
Fixed the visible plot dock not following the current panel tab in some situations, in particular when a persisted layout left the Macro, History or AI Assistant dock raised at startup
File saving:
Fixed an error raised when saving a signal to a file in some situations
History Panel:
Fixed replay of load actions doing nothing when the loaded objects had been deleted while recording was active — the objects are now reloaded from their files
Fixed duplicated processing chains interfering with their source chain: replaying either session now only affects its own objects
Fixed session replay aborting when the session contained a recorded object deletion — recorded deletions that can no longer be safely applied (captured state mismatch, targets re-created earlier in the same replay, or targets belonging to another session) are now skipped with a warning
Removed the yellow highlight that could persist on history entries after a failed replay
Fixed outdated steps having no visual indication in the history tree — actions left outdated by a failed or interrupted recompute, or by parameter edits pending propagation, are now highlighted with an amber background and a tooltip suggesting to replay them
Fixed potential crashes or corrupted histories when clicking History panel commands (Replay, Delete, Duplicate, …) while a long replay or recompute was still running — commands are now unavailable until the run completes
Fixed a single corrupted history entry (e.g. a ROI saved by an incompatible version) preventing an entire
.dlhistfile or HDF5 workspace history from loading — the affected action now loads as incompatible while the rest of the history loads normallyFixed recording aborting the user’s operation when a selected object had no data
Fixed the active session remaining highlighted after loading an HDF5 file
Fixed deleting an image history action switching to the Signal panel
Fixed a macro generation error (
object has no attribute uuid) for 2-to-1 processing pipelinesImproved performance: opening many files or replaying long processing chains no longer freezes the interface while the History panel repeatedly rechecks action compatibility
📖 Documentation#
Added a complete History Panel feature page and a step-by-step tutorial covering recording, replay, parameter editing and session import/export
Added use case pages illustrating DataLab in photonics, spectroscopy and non-destructive testing
Documented the legacy HDF5 dataset selector syntax
Reworked the documentation layout: more compact navigation bar, Open Graph metadata, and software citation metadata
Added a plugin example showing iso-level contour lines on an image
Updated French translations across all new and modified documentation pages