Skip to main content

Interactive tokamak shot dashboard

Project description

NiceShot!

An interactive dashboard for exploring tokamak plasma shot data. Point it at a shot-statistics file and get an instant browser UI for slicing, visualising, and comparing shots.

NiceShot! dashboard


Features

  • Projection — UMAP or PCA scatter of every shot, coloured by any column. Backed by a content-hash cache so reloads are instant.
  • Pairwise scatter — any two numeric columns plotted against each other, with linear/log axis toggles.
  • Correlation — interactive Pearson correlation heatmap for any selection of numeric columns.
  • Data table — sortable, virtualized table with shot-ID search, cross-highlight with scatter plots, and CSV export.
  • Time traces — per-shot signal plots loaded on click. Supports local parquet/CSV files, live UDA, and live SAL backends.
  • Filters — up to 6 simultaneous column filters combinable with AND / OR logic. All plots update live.
  • Clustering — run K-Means, DBSCAN, or Agglomerative clustering on any set of numeric columns. Results colour the scatter plots immediately; clusters can be given human-readable class names.
  • Cluster centroid traces — mean time-series per cluster, computed automatically after clustering and relabelled live as class names change.
  • Outlier detection — flag anomalous shots with Isolation Forest or Local Outlier Factor. Outliers are highlighted in red on the scatter plots and sample traces are loaded automatically.
  • CSV export — download the full data table with cluster_id, cluster_name columns appended when clustering has been run.
  • SHAP decision plots — per-shot feature attribution rendered inline (optional, requires --shap-data).
  • Reference graph — overlay the full reference-shot lineage on any scatter plot (optional, requires reference_shot_col in config).
  • Semantic search — find shots similar to a selected one via nearest-neighbour search in feature space. Results are highlighted on the scatter plots with gold ring markers.
  • Extensible backends — add support for new data sources (MDSplus, HDF5, custom APIs, …) by subclassing TraceBackend or ShotDataBackend and registering via plugins: in config.

Requirements

Python ≥ 3.12


Install

pip install nice-shot
pip install "nice-shot[shap]"   # + SHAP plots, xarray, matplotlib

Run

nice-shot --shot-data path/to/shot_stats.parquet

Open http://localhost:8050 in a browser.

By default nice-shot runs under gunicorn with 4 worker processes, which supports multiple concurrent users. On first run, UMAP/PCA is computed in the master process and cached; subsequent starts are instant.

For local development with hot-reload use --debug:

nice-shot --shot-data path/to/shot_stats.parquet --debug

Common flags

Flag Default Description
--shot-data PATH outputs/shot_stats.parquet Shot statistics file (.csv or .parquet)
--config PATH nice_shot/config.yaml YAML config file
--data-dir PATH data/mastu/ Directory of per-shot files (parquet backend)
--projection PATH Pre-computed 2-D embedding; skips UMAP/PCA entirely
--shap-data PATH SHAP values NetCDF (.nc); enables the SHAP tab
--workers N 4 Gunicorn worker processes (ignored in --debug mode)
--port PORT 8050 Port to listen on
--debug off Use the single-process Flask dev server instead of gunicorn

Configuration

Edit nice_shot/config.yaml (or pass --config to point elsewhere):

backend: parquet        # parquet | uda | sal

signals:                # columns shown in the time-trace panel
  - ip
  - ne
  - dalpha

time_window:
  min_time: 0.0
  max_time: 1.0

projection_method: umap # umap | pca

umap_features:          # omit to use all numeric columns
  - ip_max
  - ne_max
  - bt_max

reference_shot_col: reference__number   # omit to hide the feature

Data

Shot statistics file (--shot-data) — a flat .parquet or .csv with one row per shot. The shot ID column is detected automatically (shot_id, shot, pulse, number, …).

Per-shot traces (--data-dir) — one .parquet or .csv per shot, laid out as:

<data-dir>/<any-subdir>/<shot_id>.parquet

Each file needs a time column and one column per configured signal.

Pre-computed projection (--projection) — a .npy (shape (n,2) or (n,3)), .csv, or .parquet with shot ID and two coordinate columns.

SHAP values (--shap-data) — an xarray NetCDF file with shot_id and feature dimensions.

See docs/data-formats.md for full schema details.


Docs

uv run --dev zensical serve

Opens the full documentation at http://localhost:8000.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nice_shot-1.1.0.tar.gz (37.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nice_shot-1.1.0-py3-none-any.whl (36.0 kB view details)

Uploaded Python 3

File details

Details for the file nice_shot-1.1.0.tar.gz.

File metadata

  • Download URL: nice_shot-1.1.0.tar.gz
  • Upload date:
  • Size: 37.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nice_shot-1.1.0.tar.gz
Algorithm Hash digest
SHA256 001fb6d352177605e091e62204a01617da8f4f7eec66418a911adce25187beb8
MD5 077c583a95b6480852e1379c63f795a6
BLAKE2b-256 3cbac17fc2ff9ef09d5b940c4c9f595250fe1322acf6f7f70266b9d23afa4fe7

See more details on using hashes here.

Provenance

The following attestation bundles were made for nice_shot-1.1.0.tar.gz:

Publisher: publish.yml on samueljackson92/nice-shot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nice_shot-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: nice_shot-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 36.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nice_shot-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 072785dd0a23b6ed06f0a066fa3c95ff38ee5483a8df3edfe34f7966ce04bab4
MD5 23e6fb714ec478fb180959296580dd1c
BLAKE2b-256 dfb6b51dd84eafd22a57eaa29aee7177eb1796a2a85a3aeefe0b9bc64f76a3f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for nice_shot-1.1.0-py3-none-any.whl:

Publisher: publish.yml on samueljackson92/nice-shot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page