Python ecosystem for GNSS-Transmissometry canopy VOD retrievals
Project description
canvodpy
Umbrella package for the canVODpy GNSS-Transmissometry ecosystem.
Part of the canVODpy ecosystem.
Overview
canvodpy is the unified entry point for deriving canopy Vegetation Optical Depth (VOD)
from GNSS Signal-to-Noise Ratio (SNR) observations. It orchestrates the full pipeline
from raw RINEX/SBF files through ephemeris augmentation, hemispheric gridding, and
VOD retrieval via the Tau-Omega radiative transfer model.
Four API levels are available to match your workflow:
| Level | Style | Entry point | Use case |
|---|---|---|---|
| L1 | Convenience | process_date(), Site |
Quick exploration, notebooks |
| L2 | Fluent | FluentWorkflow().read().augment().grid().vod() |
Scripted pipelines |
| L3 | Low-level | Direct subpackage access | Full control, custom integrations |
| L4 | Functional | read_rinex(), augment_with_ephemeris(), ... |
Airflow / orchestrators |
Installation
# Installs canvodpy + all 11 sub-packages
uv pip install canvodpy
Quick Start
L1: Convenience (fastest path)
from canvodpy import Site
site = Site("Rosalia")
result = site.process_date("2025001")
L2: Fluent workflow
import canvodpy
result = (
canvodpy.workflow("Rosalia")
.read("2025001")
.augment()
.grid()
.vod("canopy_01", "reference_01")
.result()
)
L3: Direct subpackage access
from canvod.readers import Rnxv3Obs
from canvod.auxiliary import AuxDataAugmenter
from canvod.grids import create_hemigrid
from canvod.vod import TauOmegaZerothOrder
from canvod.store import GnssResearchSite
L4: Functional API (Airflow-compatible)
from canvodpy import read_rinex, augment_with_ephemeris, assign_grid_cells
ds = read_rinex("path/to/ROSA01TUW_R_20250010000_01D_01S_AA.rnx")
ds = augment_with_ephemeris(ds, agency="COD")
ds = assign_grid_cells(ds, grid_type="equal_area", resolution=2.0)
Included Packages
Installing canvodpy provides access to all 11 sub-packages:
| Package | Namespace | Role |
|---|---|---|
canvod-readers |
canvod.readers |
RINEX v2/v3 and SBF binary readers → xarray.Dataset |
canvod-auxiliary |
canvod.auxiliary |
Ephemeris augmentation (SP3/CLK and broadcast) |
canvod-grids |
canvod.grids |
Equal-area hemisphere grid operations |
canvod-store |
canvod.store |
Icechunk/Zarr versioned storage layer |
canvod-store-metadata |
canvod.store_metadata |
FAIR/DataCite/ACDD/STAC metadata lifecycle |
canvod-vod |
canvod.vod |
Tau-Omega VOD retrieval algorithms |
canvod-viz |
canvod.viz |
2D polar and 3D interactive visualization |
canvod-utils |
canvod.utils |
Pydantic configuration models, shared utilities |
canvod-ops |
canvod.ops |
Composable preprocessing operations pipeline |
canvod-virtualiconvname |
canvod.virtualiconvname |
Canonical GNSS-T filename parser and validator |
canvod-audit |
canvod.audit |
Three-tier verification and regression suite |
Platform Support
| Platform | Status | Notes |
|---|---|---|
| Linux | Full support | Recommended for production |
| macOS | Full support | Fully tested |
| Windows | WSL only | Native not supported (reserved aux name) |
Configuration
Site and processing configuration lives in YAML files (not committed):
just config-init # create config/processing.yaml + sites.yaml + sids.yaml
just config-validate # validate against Pydantic models
Optional NASA CDDIS access (for SP3/CLK ephemeris downloads):
# config/processing.yaml
credentials:
nasa_earthdata_acc_mail: your.email@example.com
Without credentials, canvodpy uses ESA GSSC (no authentication required).
Documentation
Full documentation: nfb2021.github.io/canvodpy
Development
See the main repository for workspace development setup.
uv sync # install all workspace deps
just check # lint + format
just test # run all tests
License
Apache License 2.0
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file canvodpy-0.3.0.tar.gz.
File metadata
- Download URL: canvodpy-0.3.0.tar.gz
- Upload date:
- Size: 94.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1885f25201209ea2f5e800393f8f286cf4eb821de72822d3edfaa32cd52beeb
|
|
| MD5 |
ea0f90db8bb871c7f61c117bc3e85bdb
|
|
| BLAKE2b-256 |
4826378b4bd1603e46b71db01d66db9d6ce68276d9be78788efa9fa95092cb45
|
Provenance
The following attestation bundles were made for canvodpy-0.3.0.tar.gz:
Publisher:
publish_pypi.yml on nfb2021/canvodpy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
canvodpy-0.3.0.tar.gz -
Subject digest:
b1885f25201209ea2f5e800393f8f286cf4eb821de72822d3edfaa32cd52beeb - Sigstore transparency entry: 1409468954
- Sigstore integration time:
-
Permalink:
nfb2021/canvodpy@a88fc381cc7865c65de1ff74218139ea7a3954f7 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/nfb2021
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish_pypi.yml@a88fc381cc7865c65de1ff74218139ea7a3954f7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file canvodpy-0.3.0-py3-none-any.whl.
File metadata
- Download URL: canvodpy-0.3.0-py3-none-any.whl
- Upload date:
- Size: 111.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd623c31f8262b956db2ce43f8c36d8deb3986abe6ad82b3c9fcc72ee8c20a8e
|
|
| MD5 |
7a1999dd7e81e6112b539a6ac52174a4
|
|
| BLAKE2b-256 |
f212cf0d59a20f35a3320dc289729c6ab3da8acc38ea6f6e1e7c191de0c7fb6c
|
Provenance
The following attestation bundles were made for canvodpy-0.3.0-py3-none-any.whl:
Publisher:
publish_pypi.yml on nfb2021/canvodpy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
canvodpy-0.3.0-py3-none-any.whl -
Subject digest:
bd623c31f8262b956db2ce43f8c36d8deb3986abe6ad82b3c9fcc72ee8c20a8e - Sigstore transparency entry: 1409469377
- Sigstore integration time:
-
Permalink:
nfb2021/canvodpy@a88fc381cc7865c65de1ff74218139ea7a3954f7 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/nfb2021
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish_pypi.yml@a88fc381cc7865c65de1ff74218139ea7a3954f7 -
Trigger Event:
push
-
Statement type: