40 lines
2.4 KiB
Markdown
40 lines
2.4 KiB
Markdown
# Provenance: dpb-plot
|
|
|
|
**Source.** AuraSense's `aurasense-dpb-training` repository, `crates/dpb-plot`, at commit
|
|
`9202cd83fe2aa284957bf6a6d8aa1284eb1541e6` (branch `feat/dpb-plot`, 2026-10-19).
|
|
|
|
**Licence.** Upstream is `Apache-2.0 OR MIT`. flowRS takes it under Apache-2.0, the
|
|
licence of the rest of flowRS (the text is `LICENSE` at the repository root); the MIT text
|
|
is kept beside the crate as `LICENSE-MIT`. Upstream has no NOTICE file. The package keeps
|
|
upstream's authors and licence expression.
|
|
|
|
**What was taken.** `Cargo.toml`, `README.md` and `src/` (core, `gpu/` with its WGSL
|
|
shaders, tests), formatted with default rustfmt so later changes show as diffs against the
|
|
vendoring commit (668c9166). Not taken: the `wasm` feature (JavaScript bindings,
|
|
`build-wasm.sh`), the `bench` feature and `bench/` budget pages, `measure/wgpu-proto`, and
|
|
`gates.sh`. flowRS calls the crate as Rust and runs its own gates.
|
|
|
|
## flowRS's changes (commit 3e1650a1 and later)
|
|
|
|
- **A moments level beside the min/max pyramid** (`history.rs`): `ChannelSpec::stats` /
|
|
`with_stats()`, per-block `Moments { n, mean, m2 }` (f32, merged with Chan et al.'s
|
|
pairwise update and accumulated in f64 over a range), `range_moments`, `bucket_moments`
|
|
and `moment()`. The EEG scope's DC removal and ±1 SD band, and flowrs-capture's analog
|
|
index, read them; JLS-style mean/std over any span without touching the samples.
|
|
- `ChannelSpec::keeping(seconds)`: a ring sized by duration.
|
|
- **A spread band** (`plot.rs`): `SeriesKind::Spread`, drawn as mean ± one standard
|
|
deviation per pixel column.
|
|
- **Column helpers made public** (`plot.rs`): `Trace` and its fields, `copy_trace`,
|
|
`copy_spread` and `columns`, so the Waveform panel and the scope build scenes from runs
|
|
that are not a `TimePlot` lane.
|
|
- Two trigger tests name the new `stats` field.
|
|
|
|
- **An image mark** (`scene.rs` `MarkKind::Image`, `ImageRun`, `Scene::push_image`;
|
|
`gpu::ImageData`, `Renderer::set_image`; `gpu/wgsl/image.wgsl` and its GLSL twin in
|
|
`webgl2.rs`; an offscreen-canvas path in `canvas2d.rs`), added by flowrs-viz's
|
|
substrate (work/neuroviz): a grid of values the renderer holds, drawn through a
|
|
256-entry colour lookup texture with bilinear or nearest sampling, an optional circular
|
|
clip and contour hairlines. Topomaps, time-frequency maps, spectral arrays and ERP
|
|
images draw through it. Canvas 2D scales an offscreen canvas and draws no contours.
|
|
|
|
All upstream tests still pass, with new tests for each addition.
|