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)
References
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

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→ brancheopf-zarr-readerCurrent 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)
abs_orbit_numberfirst/last_valid_sample/lineiw2_mid_rangeswst_valueis raw PRI offset, not slant range time — use GCPslant_range_timesat:anx_datetimeWhat needs to be resolved upstream (in EOPF-CPM format)
firstValidSample/lastValidSamplearrays per burst lineReferences
scripts/compare_zarr_vs_safe.pycompare_safe_zarr_fields.pyTesting
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