Source code for fcollections.implementations._s1aowi
from __future__ import annotations
import re
from enum import Enum, auto
from fcollections.core import (
CaseType,
FileNameConvention,
FileNameFieldEnum,
FileNameFieldInteger,
FileNameFieldPeriod,
FilesDatabase,
Layout,
OpenMfDataset,
PeriodMixin,
)
from ._definitions._constants import (
DESCRIPTIONS,
XARRAY_TEMPORAL_NETCDFS,
)
S1AOWI_PATTERN = re.compile(
r"s1a-(?P<acquisition_mode>.*)-owi-(?P<slice_post_processing>.*)-(?P<time>\d{8}t\d{6}-\d{8}t\d{6})-(?P<resolution>\d{6})-(?P<orbit>\d{6})_(?P<product_type>.*).nc"
)
[docs]
class AcquisitionMode(Enum):
IW = auto()
EW = auto()
WV = auto()
SM = auto()
[docs]
class S1AOWIProductType(Enum):
SW = auto()
GS = auto()
[docs]
class S1AOWISlicePostProcessing(Enum):
CC = auto()
CM = auto()
OCN = auto()
[docs]
class FileNameConventionS1AOWI(FileNameConvention):
def __init__(self):
super().__init__(
regex=S1AOWI_PATTERN,
fields=[
FileNameFieldEnum(
"acquisition_mode",
AcquisitionMode,
case_type_decoded=CaseType.upper,
case_type_encoded=CaseType.lower,
description=("Acquisition mode."),
),
FileNameFieldEnum(
"slice_post_processing",
S1AOWISlicePostProcessing,
case_type_decoded=CaseType.upper,
case_type_encoded=CaseType.lower,
description=("Slices post-processing."),
),
FileNameFieldPeriod(
"time", "%Y%m%dt%H%M%S", "-", description=DESCRIPTIONS["time"]
),
FileNameFieldInteger(
"resolution",
description=("SAR Ocean surface wind Level-2 product resolution."),
),
FileNameFieldInteger("orbit", description=("Orbit number")),
FileNameFieldEnum(
"product_type",
S1AOWIProductType,
case_type_decoded=CaseType.upper,
case_type_encoded=CaseType.lower,
description=("Product type."),
),
],
generation_string="s1a-{acquisition_mode!f}-owi-{slice_post_processing!f}-{time!f}-{resolution:>06d}-{orbit:>06d}_{product_type!f}.nc",
)
[docs]
class NetcdfFilesDatabaseS1AOWI(FilesDatabase, PeriodMixin):
"""Database mapping to select and read S1A Ocean surface wind product
Netcdf files in a local file system."""
layouts = [Layout([FileNameConventionS1AOWI()])]
reader = OpenMfDataset(xarray_options=XARRAY_TEMPORAL_NETCDFS)
sort_keys = "time"