Skip to content
Chris Meyer edited this page May 20, 2024 · 26 revisions

Developer Information

General Information

Tracks

These are high level goals/tracks of development. The list is incomplete.

  • Improve computations: long-running, concurrent, cancellable
  • Improve experience for first time users
  • Improve display performance
  • Improve data item metadata handling
  • Improve API for 3rd party plug-ins and packages
  • Prepare for free threaded Python

Code Base Information

Note: Please file issues for incomplete, inconsistent, difficult to understand, or out of date information.

Overview

Low Level Concepts

  • Threading, async, performance
  • Events, data model, data streams, events
  • Binding, conversions, validators
  • Reference counting and garbage collection
  • Registry
  • Geometry
  • Date and time handling
  • Persistence
  • Free threading (future)

User Interface

  • Launcher (Qt-based, PyQt6, future)
  • Application, windows, dialogs
  • Floating panels (specific, general)
  • User interface programming, declarative
  • User interface design tools (future)
  • Actions, menus, key overloads
  • Canvas items, layout
  • Drawing context, drawing architecture
  • Wizard dialogs
  • Preferences dialog

Object Model

erDiagram
  Project ||--|{ DataItem : contains
  Project ||--|{ DisplayItem : contains
  Project ||--|{ Computation : contains
  Project ||--|{ DataGroup : contains
  Project ||--|{ Connection : contains
  Project ||--|{ DataStructure : contains
  DisplayItem ||--|{ DisplayLayer : contains
  DisplayItem ||--|{ DisplayDataChannel : contains
  DisplayItem ||--|{ Graphic : contains
  DisplayLayer ||--|| DisplayDataChannel : contains
  DisplayDataChannel ||--|| DataItem : reference
  DataItem {
    data ndarray
    data_descriptor DataDescriptor
    intensity_calibration Calibration
    dimensional_calibrations list[Calibrations]
    metadata dict
  }
  DisplayItem {
    display_type str
    display_properties dict
  }
  DisplayLayer {
    stroke_color str
    fill_color str
    line_width int
    transparency float
  }
  DisplayDataChannel {
    slice int
    index tuple[int]
    brightness float
    contrast float
    gamma float
  }
  Connection {
    source ref
    target ref
  }
  DataGroup {
    data_items list[DataItem]
    groups list[DataGroup]
  }
  Computation {
    inputs list[DataItem]
    outputs list[DataItem]
    computation str
  }

High Level Concepts

  • Projects, profiles
  • Data, data items
  • Calibrations, reference frames, coordinate systems
  • Computations, computation pipeline
  • Data storage and project file formats
  • Display items, display data channels, display layers
  • Display pipeline
  • Performance: processing and display
  • Backwards and forward compatibility
  • Tool handling, reactor
  • Metadata handling
  • Undo
  • Data groups
  • Connections
  • Regions of interest (future)
  • Schema
  • Data Structures

Processing libraries

  • Data and metadata, calibrations
  • Processing functions
  • Data representation, RGB

Specific Features

  • Data panel, browsers, filtering, sorting
  • Inspectors
  • Computation editor
  • Histogram and statistics
  • Import/export
  • Notification/message center
  • Activity panel
  • Data generator
  • Action recorder (future)

Scripting and API

Displays

  • Workspaces
  • Raster displays
  • Line plot displays
  • Volumetric displays (future)
  • Tables (future)
  • Graphics
  • Thumbnails, cache

Data Acquisition

  • Acquisition overview: view, sequence, sync'd, etc.
  • Data acquisition pipeline (external)
  • Camera and scan abstractions
  • Device implementations
  • Instrument abstraction
  • Instrument state handling (passive, active)
  • Acquisition UI (view panels, acquisition panel, control bars, other panels)
  • Acquisition low level (internal)
  • Drift tracking
  • Microscope/camera/scan simulator

Additional Libraries

  • Alignment library (internal)
  • Graphing library integration (matplotlib)
  • Processing integration (HyperSpy)
  • EELS analysis

Infrastructure

  • Installer and packaging
  • Build infrastructure, conda-forge
  • User documentation
  • Testing
  • Tech support
  • Social presence (blog, micro-blog, mailing list, discussions)

Future Plans (incomplete)