Skip to content

v1.0.0

Choose a tag to compare

@PierreRaybaut PierreRaybaut released this 16 Nov 14:36
· 15 commits to main since this release
Immutable release. Only release title and notes can be modified.

See DataLab roadmap page for future and past milestones.

DataLab Version 1.0.0

This major release represents a significant milestone for DataLab with numerous enhancements across all areas. The changes are organized by category for easier navigation.

🎨 User Interface & Workflow

Menu reorganization:

  • New "Create" menu: Separated object creation functionality from the "File" menu, placed between "File" and "Edit" menus for clearer organization
    • All "File > New [...]" actions moved to "Create" menu
    • Migration note: Find signal/image creation actions in the new "Create" menu
  • New "ROI" menu: Dedicated menu for Region of Interest management, positioned between "Edit" and "Operations" menus
  • New "Annotations" submenu: Consolidated annotation operations in the "Edit" menu
  • New "Metadata" submenu: Grouped all metadata operations in the "Edit" menu

Interactive object editing:

  • Interactive object creation: Creation parameters can be modified after object creation via new "Creation" tab in properties panel
    • Apply changes without creating new objects, preserving subsequent processing
    • Available for parametric generators (Gaussian, sine, etc.)
  • Interactive 1-to-1 processing: Processing parameters can be adjusted and reapplied via new "Processing" tab
    • Update result objects in-place with modified parameters
    • Only for parametric operations (filters, morphology, etc.)
  • Recompute feature: New "Recompute" action (Ctrl+R) to quickly reprocess objects with stored parameters
    • Works with single or multiple objects
    • Automatically updates results when source data changes
  • Automatic ROI analysis update: Analysis results automatically recalculate when ROI is modified
    • Works for all analysis operations (statistics, centroid, etc.)
    • Silent background recomputation for immediate feedback
  • Select source objects: Navigate to source objects used in processing via new "Edit" menu action
    • Handles all processing patterns (1-to-1, 2-to-1, n-to-1)
    • Shows informative messages if sources no longer exist
  • Processing history: New "History" tab displays object processing lineage as hierarchical tree
    • Shows complete processing chain from creation to current state
    • Selectable text for documentation purposes

Multi-object property editing:

  • Apply property changes to multiple selected objects simultaneously
  • Only modified properties are applied, preserving unchanged individual settings
  • Typical use case: Adjust LUT boundaries or colormap for multiple images at once

Dialog sizing improvements:

  • Processing dialogs now intelligently resize based on main window size
  • Never exceed main window dimensions for better user experience

Internal console indicator:

  • Status bar indicator shows console status when hidden
  • Turns red on errors/warnings to alert users
  • Click to open console

🎬 New Object Creation Features

Parametric signal generators:

  • Linear chirp, logistic function, Planck function
  • Generate signals with Poisson noise

Parametric image generators:

  • Checkerboard: Calibration pattern with configurable square size and light/dark values
  • Sinusoidal grating: Frequency response testing with independent X/Y spatial frequencies
  • Ring pattern: Concentric circular rings for radial analysis and PSF testing
  • Siemens star: Resolution testing with radial spokes and configurable radius
  • 2D sinc: Cardinal sine function for PSF modeling and diffraction simulation
  • 2D ramp: New ramp image generator
  • Poisson noise: Generate images with Poisson noise distribution

Signal/image creation from operations:

  • Create complex-valued signal/image from real and imaginary parts
  • Create complex-valued signal/image from magnitude and phase (closes Issue #216)
  • Extract phase (argument) information from complex signals or images

🔬 Data Processing & Analysis

Signal processing:

  • Enhanced curve fitting: Significantly improved parameter estimation for all curve types (Gaussian, Lorentzian, Voigt, exponential, sinusoidal, Planckian, asymmetric peaks, CDF)
    • Smarter initial parameter guesses for robust convergence
    • Locked parameter support: Lock individual parameters during optimization (requires PlotPy v2.8.0)
  • X-array compatibility checking: Comprehensive validation for multi-signal operations with automatic interpolation options
    • New configuration setting: Ask user or interpolate automatically
    • Prevents unexpected results from incompatible signal arrays
  • Zero padding enhancements: Support for prepending and appending zeros, default strategy now "Next power of 2"
  • Ideal frequency domain filter: "Brick wall filter" for signals (closes Issue #215)
  • Bandwidth at -3dB: Enhanced to support passband bandwidth
  • Pulse features extraction: Comprehensive pulse analysis for step and square signals
    • Automated shape recognition and polarity detection
    • Measures amplitude, rise/fall time, FWHM, timing parameters, baseline ranges
  • Frequency domain filters: Deconvolution and Gaussian filter (closes Issue #189, Issue #205)
  • Coordinate transformations: Convert to Cartesian/polar coordinates
  • X-Y mode: Simulate oscilloscope X-Y mode (plot one signal vs. another)
  • Find operations: First abscissa at y=..., ordinate at x=..., full width at y=...
  • 1/x operation: Reciprocal operation with NaN handling for zero denominators

Image processing:

  • 2D resampling: Resample images to new coordinate grids with multiple interpolation methods (closes Issue #208)
  • Convolution: 2D convolution operation
  • Erase area: Erase image areas defined by ROI (closes Issue #204)
  • Horizontal/vertical projections: Sum of pixels along axes (closes Issue #209)
  • Improved centroid computation: More accurate in challenging cases (truncated/asymmetric images) (see Issue #251)
  • Flip diagonally: New geometric transformation
  • 1/x operation: Reciprocal operation for images

Cross-panel operations:

  • Signals to image conversion: Combine multiple signals into 2D images
    • Two orientation modes: as rows (spectrograms) or columns (waterfall displays)
    • Optional normalization (Z-score, Min-Max, Maximum)
    • Typical use cases: heatmaps, spectrograms, multi-channel data visualization

Common features:

  • Standard deviation: Calculate across multiple signals/images (closes Issue #196)
  • Add noise: Add Gaussian, Poisson, or uniform noise (closes Issue #201)
  • Add metadata: Add custom metadata with pattern support ({title}, {index}, etc.) and type conversion

📐 ROI & Annotation Management

ROI features:

  • ROI clipboard operations: Copy/paste ROIs between objects
  • ROI import/export: Save/load ROIs as JSON files
  • Individual ROI removal: Remove ROIs selectively via "Remove" submenu
  • ROI title editing: Set titles during interactive creation and in confirmation dialog
  • Create ROI grid: Generate grid of ROIs with configurable rows, columns, and spacing
    • Import/export grid configurations
    • Preview before creation
  • Inverse ROI logic: Select area outside defined shapes (images only)
  • Coordinate-based ROI creation: Manual input of coordinates for rectangular and circular ROIs
  • Multi-object ROI editing: Edit ROIs on multiple objects simultaneously

Annotation features:

  • Annotation clipboard: Copy/paste annotations between objects
  • Edit annotations: Interactive editor dialog with PlotPy tools
  • Import/export annotations: Save/load as .dlabann JSON files with versioning
  • Delete annotations: Remove from single or multiple objects with confirmation
  • Annotations independent from ROI: Can coexist on same object

Detection with ROI creation:

  • All 7 detection algorithms now support automatic ROI creation:
    • Peak detection, contour shape, blob detection (DOG/DOH/LOG/OpenCV), Hough circle
  • ROI geometry choice: Rectangular or circular ROIs
  • 2D peak detection: Option to choose ROI geometry (closes related requirements)

📊 Visualization & Display

Performance & display limits:

  • Configurable result display limits: Prevent UI freezing with large result sets
    • max_shapes_to_draw (default: 1,000), max_cells_in_label (default: 100), max_cols_in_label (default: 15)
    • Settings documented with performance implications
  • Faster contour rendering: Over 5x performance improvement for contour display
  • Signal rendering optimization: Smart linewidth clamping for large datasets
    • New setting: "Line width performance threshold" (default: 1,000 points)
    • Prevents 10x slowdown from Qt raster engine limitation

Result visualization:

  • Merged result labels: All analysis results consolidated in single read-only label
    • Reduces visual clutter, auto-updates, horizontally divided results
  • Result label visibility control: Toggle visibility via Properties panel checkbox
    • Default visibility configurable in Settings
  • Results group organization: Plot results automatically organized in dedicated "Results" group
  • Comprehensive result titles: Include source object identifiers (e.g., "FWHM (s001, s002, s003)")
  • Individual result deletion: Remove results selectively via Analysis menu
  • Customizable shape/marker styles: Four new style configuration buttons in Settings
    • Separate styles for signals and images
    • Interactive editor with comprehensive options
    • Persistent configuration with refresh on change

Enhanced profile extraction:

  • Click directly on X/Y profile plots to switch extraction direction
  • No need to open parameters dialog for direction changes
  • Improves workflow efficiency (closes Issue #156)

DateTime signal support:

  • Automatic datetime detection in CSV files
  • Datetime axis formatting: Human-readable timestamps on X-axis
  • Configurable formats: Separate formats for standard and sub-second units
  • Supports various time units (seconds, milliseconds, microseconds, minutes, hours)
  • Closes Issue #258

Settings:

  • Autoscale margins: Configurable margins (0-50%) for signal/image plots
  • Lock image aspect ratio: Option for 1:1 aspect ratio (default: use physical pixel size) (closes Issue #244)
  • Show console on error: Configurable behavior (default: off)

Image extent parameters:

  • New "Extent" group box showing computed Xmin, Xmax, Ymin, Ymax
  • Automatically calculated from origin, pixel spacing, and dimensions

📁 Import/Export & File Handling

New file format support:

  • FT-Lab signals and images: CEA binary formats (.sig, .ima) (closes Issue #211)
  • Coordinated text files: Real and complex-valued images with error images (similar to Matris format)
    • Automatic NaN handling, metadata with units and labels

Enhanced HDF5 support:

  • Custom file extensions: Intelligent HDF5 detection by content (not just extension)
    • Extension-based detection for dialogs, content-based for drag-and-drop
    • "All files (*)" option in file dialogs
  • HDF5 Browser improvements: Default collapsed tree view for better navigation
  • Workspace clearing options: Configurable behavior with "Ignore" option (closes Issue #146)

Text file improvements:

  • CSV delimiter handling: Better support for various whitespace separators
  • Locale decimal separator: Support for comma as decimal separator (closes Issue #124)
  • Encoding error tolerance: Ignore errors for files with special characters
  • Header detection: Automatic detection and skipping of data headers

Other I/O features:

  • Save to directory: New feature (closes Issue #227)
  • Open from directory: Recursively open multiple files with folder drag-and-drop support
  • File ordering: Consistent alphabetical sorting across platforms

🔧 Advanced Features

Non-uniform coordinate support:

  • Images now support non-uniform pixel spacing
  • "Set uniform coordinates" feature for conversion
  • Polynomial calibration: Up to cubic order for X, Y, Z axes
    • Creates non-uniform coordinates for X/Y, transforms values for Z
  • HDF5 and text file formats preserve non-uniform information

Group management:

  • Panel-specific short IDs: gs prefix for signals, gi prefix for images
    • Avoids ambiguity in cross-panel operations
  • Fixed group numbering for new groups

Configuration:

  • Version-specific folders: Major version coexistence (.DataLab_v1, .DataLab_v2, etc.)
    • Allows v0.x and v1.x to run simultaneously

Public API & Remote Control:

  • Enhanced metadata handling with function name context
  • add_group, add_signal, add_image methods with group_id and set_current arguments
  • get_object_uuids with optional group filter
  • Multiple API improvements for better programmability

Processing infrastructure (for developers):

  • New @computation_function decorator for computation functions
  • Renamed computation functions (removed "compute_" prefix)
  • Refactored BaseProcessor methods with clear naming:
    • compute_1_to_1, compute_1_to_0, compute_1_to_n, compute_n_to_1, compute_2_to_1
  • No backward compatibility maintained for these internal changes (closes Issue #180)

🛠️ Bug Fixes

Performance fixes:

  • Switching between images with many results: Dramatic improvement (66s → <1ms) when navigating images with hundreds of shapes
  • Plot cleanup robustness: Fixed errors when removing analysis results
  • Critical fix: Result labels now properly excluded from cleanup to prevent disappearance

Cross-panel & group handling:

  • Cross-panel computation groups: Fixed inconsistent group organization for image-to-signal operations
  • File import ordering: Consistent alphabetical sorting across all platforms

Action state updates:

  • Fixed action enable states not updating after annotation/metadata operations
  • UI now immediately reflects current object state

Result management:

  • Fixed result label deletion to permanently remove associated metadata
  • Fixed duplicate results parameter metadata cleanup
  • Result coordinate fixes: Corrected shifted results on images with ROIs and shifted origin (Issue #106)
  • Profile extraction indices: Fixed wrong indices with ROI (Issue #107)

ROI-related fixes:

  • Fixed multi-image ROI extraction not saving ROI in first object (Issue #120)
  • Fixed AttributeError when extracting multiple ROIs on single image with multiple selections (Issue #121)
  • Fixed mask refresh issues (Issue #122, Issue #123)
  • Fixed ROI editor on multiple signals/images (Issue #135)
  • Fixed ROI clearing affecting only first image (Issue #160)
  • Fixed ROI editor showing first instead of last image (Issue #158)

Text Import Wizard:

  • Fixed preservation of user-defined titles and units (Issue #239)
  • Fixed preservation of data types (Issue #240)
  • Fixed comma decimal separator support (Issue #186)
  • Fixed trailing delimiter issue (Issue #238)

Curve fitting & analysis:

  • Improved initial frequency estimate for sinusoidal fitting
  • Fixed parameter display formatting for extreme values
  • Fixed FWHM computation exception handling
  • Fixed curve marker style changing unexpectedly (Issue #184)
  • Fixed hard crash on zero signal with curve stats tool (Issue #233)

Image handling:

  • Fixed aspect ratio not updating when switching images
  • Fixed shape unpacking issues (Issue #246, Issue #247)
  • Fixed colormaps not stored in metadata (PlotPy v2.6.3+ issue) (Issue #138)
  • Fixed amplitude calculation for non-integer data types

Signal processing:

  • Fixed ifft1d x-axis computation when shift=False (Issue #241)
  • Fixed moving median crash on Linux with mirror mode (Issue #117) - SciPy bug
  • Fixed magnitude spectrum with logarithmic scale (Issue #169)
  • Fixed pairwise operation mode for asymmetric functions (Issue #157)

Analysis & results:

  • Fixed NaN value handling in statistics and normalization (Issue #141, Issue #152, Issue #153)
  • Fixed analysis results kept from original after processing (Issue #136)
  • Fixed duplicate results with no ROI defined
  • Fixed "One curve per result title" mode ignoring ROIs (Issue #132)
  • Added result validation for array-like results

Plot & visualization:

  • Fixed profile plots not refreshing when moving/resizing (Issue #172) - PlotPy fix
  • Fixed empty average profile display outside image area (Issue #168) - PlotPy fix
  • Fixed average profile extraction ValueError with oversized rectangle (Issue #144)
  • Disabled generic "Axes" tab in parameter dialogs

Other fixes:

  • Fixed proxy add_object method not supporting metadata (Issue #111)
  • Fixed RemoteClient method calls without optional arguments (Issue #113)
  • Fixed KeyError when removing group after opening HDF5 (Issue #116)
  • Fixed KeyError in "View in new window" with multiple images after HDF5 open (Issue #159)
  • Fixed long object titles display (Issue #128)
  • Fixed file name titles showing relative paths (Issue #165)
  • Fixed unexpected group names in "Open from directory" (Issue #177)
  • Fixed one group per folder expectation (Issue #163)
  • Fixed unsupported files in recursive loading (Issue #164)

Removed features:

  • Removed "Use reference image LUT range" setting (confusing behavior)
    • Migration: Use multi-selection property editing instead

🔒 Security Fixes

ℹ️ Other Changes

  • Bumped minimum plotpy requirement to V2.8
  • Bumped minimum guidata requirement to V3.13
  • Using new guidata translation utility based on babel
  • Python 3.13 now supported (via scikit-image V0.25)