Design Overview

Qimchi is a modular, containerized plotting platform designed for high-velocity research and iterative experimentation. It enables interactive and rapid feedback loops for researchers working with measurement data (quantum or otherwise), supporting live and post hoc data manipulation and visualization.

Qimchi runs as a dockerized server application, accessible via a web frontend.

Core Design Principles

  1. Modularity
    All components should be stackable and swappable, allowing new dataset types, visualization tools, and analysis methods to be added with minimal effort.

  2. Xarray in Backend
    All data processing and manipulation must be compatible with xarray, enabling efficient handling of labeled multi-dimensional arrays, essential for scientific measurement data.

  3. Plotly in Frontend
    All plots are rendered using Plotly, offering interactive, presentation-quality graphs in the web interface.

System Architecture

Deployment Model

Containerized Application, the entire stack runs inside Docker containers.

  • Local Mode: Runs on data acquisition machines to provide immediate access to live measurement results.

  • Server Mode: A centralized deployment on a web-cluster with access to a shared file system or NAS for broader team access and discussion.

Authentication

  • OAuth2 integration via GitLab or FZJ (Forschungszentrum Jülich) for user authentication and session control.

  • A login window initiates the OAuth flow and grants access to user-specific sessions and comments.

Frontend Layout & Components

Dataset Loader

  • Input field: Specify path to dataset (local or NAS-based).

  • Dataset type selector: Select the type of dataset (e.g., spectroscopy, imaging, etc.).

  • Submit/Refresh button: Load the dataset and initialize the appropriate module.

Dataset Type Modules

Each dataset type has its own UI module that provides:

  • Custom dropdowns, trees, or selectors.

  • Data parsing logic tailored to the dataset format.

  • Easily extendable via config or plugin system for new types.

Metadata Panel

Metadata viewer to list all relevant metadata from the dataset. Supports both values and dictionary to store snapshots of instruments, parameters, extra descriptions etc.

Discussion Panel

  • Integrated comment thread tied to the dataset.

  • Enables collaboration and asynchronous communication about experiments.

Plot Builder

Allows users to select:

  • Independent variables (e.g., temperature, time).

  • Dependent variables (e.g., intensity, voltage).

  • Plot type (e.g., 1D line, 2D heatmap, 3D surface).

Plot Area

The most important area composed of independent plots. Each plot module is self-contained and supports (not an extensive list):

  • Filtering (e.g., differentiation, log, savgol etc)

  • Appearance customization (e.g., color, labels, ticks)

  • Slice selectors for multidimensional data

  • Save/export functionality (e.g., PNG, JSON config, data dump)

  • Optional submodules or toolbars, defined dynamically per plot type

Extensibility

Qimchi is designed with extensibility in mind:

  • New Dataset Types: Easily register new modules with custom parsers and UI.

  • Custom Plot Modules: Add new visualizations or analysis widgets with minimal boilerplate.

  • Plugin Architecture (future scope): Allow third-party or lab-specific add-ons.

Tests and Coverage

Qimchi should be testing basic functionality, coverage for code.

Backwards Compatibility

Qimchi should be backwards compatible to make sure that no data that is being taken with the current version is stranded, and cannot be read in the future.