Metadata-Version: 2.3
Name: canvod-readers
Version: 0.2.0
Summary: GNSS data format readers for canVODpy
Keywords: GNSS,RINEX,GPS,geodesy,remote sensing
Author: Nicolas François Bader
Author-email: Nicolas François Bader <nicolas.bader@geo.tuwien.ac.at>
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: GIS
Requires-Dist: georinex>=1.16.0
Requires-Dist: matplotlib>=3.7.0
Requires-Dist: natsort>=8.4.0
Requires-Dist: numpy>=1.24.0
Requires-Dist: pint>=0.23
Requires-Dist: pydantic>=2.5.0
Requires-Dist: pytz>=2023.3
Requires-Dist: xarray>=2023.12.0
Requires-Dist: tomli>=2.0.0 ; python_full_version < '3.11'
Requires-Dist: ipykernel>=7.1.0
Requires-Dist: plotly>=6.5.1
Requires-Dist: marimo>=0.19.7
Requires-Dist: sbf-parser>=1.0.3
Maintainer: Climate and Environmental Remote Sensing (CLIMERS)
Maintainer-email: Climate and Environmental Remote Sensing (CLIMERS) <nicolas.bader@geo.tuwien.ac.at>
Requires-Python: >=3.14
Description-Content-Type: text/markdown

# canvod-readers

GNSS data format readers for canVODpy.

## Features

- **RINEX v3.04 Support**: Complete reader for RINEX v3 observation files
- **Signal IDs**: Unique identifiers for each GNSS signal (SV|BAND|CODE format)
- **xarray Integration**: Convert observations to xarray Datasets
- **Automatic Validation**: Header parsing and epoch completeness checking
- **Memory Efficient**: Lazy iteration through large files
- **Flexible Filtering**: Filter by GNSS system, frequency band, or code type

## Installation

```bash
uv pip install canvod-readers
```

## Quick Start

```python
from pathlib import Path
from canvod.readers import Rnxv3Obs

# Load RINEX file
filepath = Path("path/to/rinex.25o")
reader = Rnxv3Obs(fpath=filepath)

# Convert to xarray Dataset
dataset = reader.to_ds(keep_rnx_data_vars=["SNR"])

# Filter GPS L1 signals
gps_l1 = dataset.where(
    (dataset.system == 'G') & (dataset.band == 'L1'),
    drop=True
)
```

## Interactive Examples

View interactive examples using marimo notebooks:

```bash
# Edit mode (interactive development)
just marimo

# Presentation mode (read-only)
just marimo-present
```

Or directly:

```bash
uv run marimo edit docs/examples.py
```

## Development

```bash
# Clone repository
git clone https://github.com/nfb2021/canvodpy.git
cd canvodpy/packages/canvod-readers

# Install dependencies
uv sync

# Run tests
just test

# Check code quality
just check
```

## Documentation

- Interactive examples: `docs/examples.py` (marimo notebook)
- [Centralized documentation](../../docs/packages/readers/overview.md)

## License

Apache License 2.0
