isce-framework / isce-framework/s1-reader
Supporting new ESA ZARR format
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 34
- Forks
- 16
- PR merge metrics
- No merged PRs in 30d
Description
Summary
ESA is developing the EOPF-CPM zarr format
as the future operational delivery format for Sentinel-1 products, replacing the current SAFE/zip.
This issue tracks the work needed to support zarr in s1-reader.
An initial implementation is available at:
mgovorcin/s1-reader → branch eopf-zarr-reader
Current status
compass geocoding works end-to-end from zarr — geocoded amplitude matches SAFE output visually.
However, several fields differ from SAFE due to limitations in the early release format (see below).
Known differences vs SAFE (EOPF-CPM early release, 2024-04)
| Field | Issue |
|---|---|
abs_orbit_number |
Hex burst group counter ≠ SAFE abs orbit — must read from STAC root attrs |
first/last_valid_sample/line |
Not provided — full burst extent used as fallback |
iw2_mid_range |
swst_value is raw PRI offset, not slant range time — use GCP slant_range_time |
| GCP data | Only first GCP populated, rest NaN — burst border degenerates to a point |
| FM rate / Doppler | Only 1 polynomial entry per burst vs 3+ in SAFE — duplicate with 1s offset as workaround |
| Doppler LUT2D az times | Must be orbit-relative seconds (ISCE3 convention) — not stored directly |
| Ascending node time | Not in per-burst attrs — available in STAC root sat:anx_datetime |
| RFI information | Not available |
What needs to be resolved upstream (in EOPF-CPM format)
- Correct absolute orbit number per burst
-
firstValidSample/lastValidSamplearrays per burst line - Absolute slant range time (not raw SWST)
- All GCP entries populated (not just the first)
- Multiple FM rate / Doppler polynomial entries per burst
References
- EOPF-CPM sample data: https://stac.browser.user.eopf.eodc.eu/collections/sentinel-1-l1-slc
- Initial zarr reader PR: [mgovorcin/s1-reader#eopf-zarr-reader]{https://github.com/mgovorcin/s1-reader/blob/eopf-zarr-reader/src/s1reader/s1_reader_zarr.py}
- Field comparison script:
scripts/compare_zarr_vs_safe.pycompare_safe_zarr_fields.py
Testing
I managed to run COMPASS on this sample data
test_zarr_vs_safe.py
https://stac.browser.user.eopf.eodc.eu/collections/sentinel-1-l1-slc/items/S1A_IW_SLC__1SDV_20240205T051225_20240205T051253_052419_0656D8_454B?.asset=asset-product
and got this results
Zarr
Same product S1A_IW_SLC__1SDV_20240205T051225_20240205T051253_052419_0656D8_454B.zip but from SAFE
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with src/s1reader/s1_reader_zarr.py on the eopf-zarr-reader branch, then run scripts/compare_zarr_vs_safe.py and test_zarr_vs_safe.py against the linked sample. Use the SAFE/Zarr field comparison and upstream checklist to determine which differences remain; completion requires resolving the listed support gaps and validating the COMPASS comparison.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100