Skip to content

Commit 55281e2

Browse files
committed
docs: add ASPiRE Lab RK streamlines, uncertainty probing, and PDF reporting to roadmap
1 parent 8ef4e41 commit 55281e2

2 files changed

Lines changed: 45 additions & 9 deletions

File tree

ROADMAP.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# PIVPy Development Roadmap
22

33
For full architectural designs and implementation details, see:
4-
- [PIVMat & PyPostPiv Parity Roadmap](docs/architecture/pivmat-parity-roadmap.md)
4+
- [PIVPy Comprehensive Parity & Evolution Roadmap](docs/architecture/pivmat-parity-roadmap.md)
55
- [Zarr-First Storage Architecture & API Design](docs/architecture/zarr-migration.md)
66

77
---
88

99
## Executive Summary
1010

11-
PIVPy's development roadmap synthesizes key capabilities from MATLAB's **PIVMat 4.22** toolbox (F. Moisy) and the Python **PyPostPiv** library (J. Hu et al., Univ. of Waterloo), delivering a modern, high-performance, out-of-core Pythonic experience:
11+
PIVPy's development roadmap synthesizes key capabilities from MATLAB's **PIVMat 4.22** toolbox (F. Moisy), the Python **PyPostPiv** library (J. Hu et al., Univ. of Waterloo), and the **PIV Flow Visualizer** suite (ASPiRE Lab, Univ. of Toronto):
1212

1313
1. **Phase 1: Synthetic Flow Generators & Benchmarking Suite**
1414
- Analytical vortices (Burgers, Lamb-Oseen, Rankine, Vatistas)
@@ -38,7 +38,14 @@ PIVPy's development roadmap synthesizes key capabilities from MATLAB's **PIVMat
3838
- Full Reynolds stress tensor and Lumley anisotropy invariants
3939
- 2D/1D spatial wavenumber energy spectra ($E(k)$)
4040

41-
6. **Phase 6: Multi-Camera, Stereoscopic 3C & Ingestion Pipeline**
41+
6. **Phase 6: Multi-Camera, Dynamic Studio & Ingestion Pipeline**
4242
- Stereoscopic 3-component ($u, v, w$) pipeline support across all accessors
4343
- Direct batch DaVis `.vc7`/`.set` to Zarr conversion tool (`convert_vc7_to_zarr`)
44+
- Dantec Dynamic Studio multi-trial CSV batch ingestion
45+
46+
7. **Phase 7: Advanced RK Streamlines, Uncertainty & Report Generation**
47+
- Adaptive Runge-Kutta (RK2/RK4) particle streamline tracking with `LineCollection` coloring
48+
- Uncertainty-propagating 2D spatial interpolation and point probing
49+
- Automated multi-page PDF & Marimo dashboard publication report generation
50+
4451

docs/architecture/pivmat-parity-roadmap.md

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
## Overview
44

5-
This roadmap defines the multi-phase evolution plan for **PIVPy**, inspired by the MATLAB **PIVMat 4.22** toolbox (F. Moisy), the Python **PyPostPiv** library (J. Hu et al., Univ. of Waterloo), and modernized for Python's scientific ecosystem (`xarray`, `zarr`, `dask`, `scipy`, `marimo`).
5+
This roadmap defines the multi-phase evolution plan for **PIVPy**, inspired by:
6+
- The MATLAB **PIVMat 4.22** toolbox (F. Moisy)
7+
- The Python **PyPostPiv** library (J. Hu et al., Univ. of Waterloo)
8+
- The **PIV Flow Visualizer** suite (ASPiRE Lab, Univ. of Toronto)
9+
- Modern Python scientific libraries (`xarray`, `zarr`, `dask`, `scipy`, `marimo`).
610

711
The goal is to establish PIVPy as the definitive, intuitive, out-of-core post-processing framework for Particle Image Velocimetry (PIV) and fluid dynamics research.
812

@@ -13,7 +17,7 @@ The goal is to establish PIVPy as the definitive, intuitive, out-of-core post-pr
1317
1. **Pure Accessor Operations**: Accessor methods (`ds.piv.*`) must return a new `xarray.Dataset` (or DataArray/figure) rather than mutating datasets in-place.
1418
2. **Canonical Schema Conformance**: All synthetic generators, transforms, and readers construct datasets via `pivpy.schema.build_dataset()` with standard dimensions `('y', 'x', 't')`, variables (`u`, `v`, `chc`, optional `w`), and metadata.
1519
3. **Out-of-Core Scalability**: Heavy calculations (temporal reductions, structure functions, spectral transforms) must preserve or leverage Dask-backed chunking.
16-
4. **PIVMat & PyPostPiv Parity with Pythonic Defaults**: Maintain PIVMat-compatible method aliases (e.g. `averf`, `filterf`, `interpf`, `corrf`) and PyPostPiv field calculus conventions (`tke`, `rms`, `fluctuations`, `circulation`) alongside readable Pythonic conventions.
20+
4. **Toolbox Parity with Pythonic Defaults**: Maintain PIVMat-compatible method aliases (e.g. `averf`, `filterf`, `interpf`, `corrf`), PyPostPiv calculus operators (`tke`, `rms`, `circulation`), and ASPiRE Lab integration schemes alongside readable Pythonic conventions.
1721

1822
---
1923

@@ -25,7 +29,8 @@ graph TD
2529
P2 --> P3[Phase 3: Spatial Filtering, Geometry Masking & Gradient Calculus]
2630
P3 --> P4[Phase 4: Temporal Signal Processing & Mode Filtering]
2731
P4 --> P5[Phase 5: Turbulence Statistics, TKE & Structure Functions]
28-
P5 --> P6[Phase 6: Multi-Camera, Stereoscopic 3C & Ingestion Pipeline]
32+
P5 --> P6[Phase 6: Multi-Camera, Dynamic Studio & Ingestion Pipeline]
33+
P6 --> P7[Phase 7: Advanced RK Streamlines & Uncertainty Reporting]
2934
```
3035

3136
---
@@ -133,7 +138,7 @@ graph TD
133138

134139
---
135140

136-
### Phase 6: Multi-Camera, Stereoscopic (3C) & Ingestion Pipeline
141+
### Phase 6: Multi-Camera, Dynamic Studio & Ingestion Pipeline
137142

138143
**Objective**: Streamline multi-camera stereoscopic PIV workflows and batch raw data ingestion directly into Zarr.
139144

@@ -142,17 +147,41 @@ graph TD
142147
* **Batch VC7/DaVis to Zarr Ingestion (PyPostPiv pattern)**:
143148
* Batch loader for folders of multi-camera / time-series DaVis `.vc7` or `.set` files using `ReadIM` into unified Zarr stores.
144149
* Target: `pivpy.io.convert_vc7_to_zarr(input_dir, output_zarr, dt=...)`.
150+
* **Dantec Dynamic Studio Batch CSV Ingestion (ASPiRE Lab pattern)**:
151+
* Ingestion of multi-trial Dynamic Studio tabular CSV exports (`X (mm)[mm]`, `U[m/s]`, `V[m/s]`) directly into chunked xarray/Zarr datasets.
152+
* Target: `pivpy.io.load_dantec_csv(dir_or_files, ...)` and `pivpy.io.convert_dantec_to_zarr(...)`.
153+
154+
---
155+
156+
### Phase 7: Advanced RK Streamlines, Uncertainty & Report Generation
157+
158+
**Objective**: Deliver high-fidelity flowline integration, uncertainty-propagating spatial probing, and automated publication report generation.
159+
160+
* **Adaptive Runge-Kutta (RK2/RK4) Streamline Integrator (ASPiRE Lab pattern)**:
161+
* Bidirectional 2nd-order Runge-Kutta (Heun's method) and 4th-order particle trajectory integration with adaptive time-stepping ($dt = \min(0.5h/\|\mathbf{u}\|, dt_{\max})$) and cubic `CloughTocher` interpolation.
162+
* Flexible seed generation (grids, line rakes, circles, bounding-box offsets) and velocity threshold clipping.
163+
* Continuous multi-color line rendering via `matplotlib.collections.LineCollection` colored by velocity magnitude, vorticity, or TKE.
164+
* Target: `ds.piv.streamlines(seeds=..., method='rk2'|'rk4')` and `ds.piv.plot_streamlines(c='mag'|'vorticity')`.
165+
* **Uncertainty-Propagating Interpolation & Probing (ASPiRE Lab pattern)**:
166+
* Analytical uncertainty propagation for 2D spatial interpolation from grid nodes with variance $\sigma^2$:
167+
$$\sigma_{\text{interp}} = \sqrt{a^2 \sigma_{11}^2 + b^2 \sigma_{21}^2 + c^2 \sigma_{12}^2 + d^2 \sigma_{22}^2}$$
168+
* Target: `ds.piv.interp_with_uncertainty(points)` and `ds.piv.probe(points, with_uncertainty=True)`.
169+
* **Automated PDF / Dashboard Summary Reporting (ASPiRE Lab pattern)**:
170+
* One-click generation of multi-page PDF summaries or interactive Marimo reports capturing ensemble velocity fields, streamlines, statistics, and experimental run metadata.
171+
* Target: `ds.piv.to_pdf_report(filepath, metadata=...)`.
145172

146173
---
147174

148175
## Roadmap Tracking & Milestones
149176

150177
| Phase | Core Milestone | Influences | Target Status |
151178
| :--- | :--- | :--- | :--- |
152-
| **Phase 1** | Synthetic Flow & Vortex Generators | PIVMat (`vortex`, `multivortex`, `randvec`) | In Queue |
179+
| **Phase 1** | Synthetic Flow & Vortex Suite | PIVMat (`vortex`, `multivortex`, `randvec`) | In Queue |
153180
| **Phase 2** | Vortex Identification ($\Gamma_1, \Gamma_2$) & Circulation Vorticity | PIVMat (`nam`, `subsbr`), PyPostPiv | In Queue |
154181
| **Phase 3** | Spatial Filtering, Polygon Masking & Gradient Calculus | PIVMat (`medianf`, `circmaskf`), PyPostPiv | In Queue |
155182
| **Phase 4** | Temporal Frequency & Modal Filtering | PIVMat (`tempfilterf`, `phaseaverf`) | In Queue |
156183
| **Phase 5** | Turbulence Statistics, TKE & Structure Functions | PIVMat (`vsf`, `stresstensor`), PyPostPiv (`tke`) | In Queue |
157-
| **Phase 6** | Multi-Camera, Stereoscopic 3C & VC7 Ingestion | PyPostPiv (`convert_vc7`), Zarr Arch | In Queue |
184+
| **Phase 6** | Multi-Camera, Dynamic Studio & Ingestion Pipeline | PyPostPiv (`convert_vc7`), ASPiRE Lab, Zarr Arch | In Queue |
185+
| **Phase 7** | RK Streamlines, Uncertainty Probing & PDF Reporting | ASPiRE Lab (`streamlines_rk2`, `topdf`) | In Queue |
186+
158187

0 commit comments

Comments
 (0)