|
15 | 15 | ├── ascending/ |
16 | 16 | │ ├── zarr.json # zarr_conventions, multiscales, proj:, spatial: |
17 | 17 | │ ├── r10m/ # native resolution dataset |
18 | | - │ │ ├── vv/ # (time, y, x) float32 |
19 | | - │ │ ├── vh/ # (time, y, x) float32 |
20 | | - │ │ ├── border_mask/ # (time, y, x) uint8 |
| 18 | + │ │ ├── vv/ # (time, Y, X) float32 |
| 19 | + │ │ ├── vh/ # (time, Y, X) float32 |
| 20 | + │ │ ├── border_mask/ # (time, Y, X) uint8 |
21 | 21 | │ │ ├── time/ # (time,) int64 datetime |
22 | 22 | │ │ ├── absolute_orbit/ |
23 | 23 | │ │ ├── relative_orbit/ |
24 | 24 | │ │ └── platform/ |
25 | 25 | │ ├── r20m/ … r720m/ # overview levels (vv, vh, border_mask only) |
26 | 26 | │ └── conditions/ |
27 | | - │ └── gamma_area_{orbit}/ # (y, x) float32 |
| 27 | + │ └── gamma_area_{orbit}/ # (Y, X) float32 |
28 | 28 | └── descending/ |
29 | 29 | └── (same structure) |
30 | 30 | """ |
|
40 | 40 | from zarr_cm import spatial as spatial_cm |
41 | 41 |
|
42 | 42 | from eopf_geozarr.data_api.geozarr.common import DatasetAttrs |
| 43 | +from eopf_geozarr.data_api.geozarr.multiscales.zcm import Multiscales |
43 | 44 | from eopf_geozarr.pyz.v3 import ArraySpec, GroupSpec |
44 | 45 |
|
45 | 46 | # ============================================================================ |
|
61 | 62 | # ============================================================================ |
62 | 63 |
|
63 | 64 |
|
64 | | -class MultiscalesTransform(BaseModel): |
65 | | - """Scale/translation transform between resolution levels.""" |
66 | | - |
67 | | - scale: tuple[float, ...] | None = None |
68 | | - translation: tuple[float, ...] | None = None |
69 | | - |
70 | | - |
71 | | -class MultiscalesScaleLevel(BaseModel): |
72 | | - """A single resolution level in the multiscales layout.""" |
73 | | - |
74 | | - asset: str |
75 | | - derived_from: str | None = None |
76 | | - transform: MultiscalesTransform | None = None |
77 | | - resampling_method: str | None = None |
78 | | - |
79 | | - model_config = {"extra": "allow"} |
80 | | - |
81 | | - |
82 | | -class Multiscales(BaseModel): |
83 | | - """Typed multiscales metadata (layout + optional resampling_method).""" |
84 | | - |
85 | | - layout: tuple[MultiscalesScaleLevel, ...] |
86 | | - resampling_method: str | None = None |
87 | | - |
88 | | - model_config = {"extra": "allow"} |
89 | | - |
90 | | - |
91 | 65 | class S1RtcOrbitGroupAttrs(BaseModel): |
92 | 66 | """Attributes for an orbit-direction group (ascending or descending). |
93 | 67 |
|
@@ -167,7 +141,7 @@ class S1RtcConditionsAttrs(BaseModel): |
167 | 141 | class S1RtcNativeResolutionMembers(TypedDict, closed=True, total=False): # type: ignore[call-arg] |
168 | 142 | """Members for the native resolution dataset (r10m). |
169 | 143 |
|
170 | | - Data variables (time, y, x) plus 1-D coordinate variables (time,). |
| 144 | + Data variables (time, Y, X) plus 1-D coordinate variables (time,). |
171 | 145 | All fields optional since not all arrays are present during incremental construction. |
172 | 146 | """ |
173 | 147 |
|
@@ -301,9 +275,9 @@ class S1RtcRoot(GroupSpec[DatasetAttrs, S1RtcRootMembers]): # type: ignore[type |
301 | 275 | ├── ascending/ |
302 | 276 | │ ├── zarr.json # zarr_conventions, multiscales, proj:, spatial: |
303 | 277 | │ ├── r10m/ |
304 | | - │ │ ├── vv/ # (time, y, x) float32 |
305 | | - │ │ ├── vh/ # (time, y, x) float32 |
306 | | - │ │ ├── border_mask/ # (time, y, x) uint8 |
| 278 | + │ │ ├── vv/ # (time, Y, X) float32 |
| 279 | + │ │ ├── vh/ # (time, Y, X) float32 |
| 280 | + │ │ ├── border_mask/ # (time, Y, X) uint8 |
307 | 281 | │ │ ├── time/ # (time,) int64 |
308 | 282 | │ │ ├── absolute_orbit/ |
309 | 283 | │ │ ├── relative_orbit/ |
|
0 commit comments