Source code for eoio.readers.landsat.aux_data.aux_data
"""eoio.readers.landsat.aux_data.aux_data - Aux data handler for Landsat."""
from __future__ import annotations
from typing import TYPE_CHECKING
import xarray as xr
if TYPE_CHECKING:
from eoio.readers.landsat.reader import LandsatReader
from eoio.readers.landsat.aux_data.angles import read_angles_into_dataset
[docs]
class LSAuxData:
"""
Manager for retrieving and attaching auxiliary data to Landsat datasets.
Only aux data for Level-1 products are angles.
For Level-2 products, additional aux data will be added in future.
"""
def __init__(self, reader: LandsatReader):
"""
Initialise with the parent reader.
:param reader: Active LandsatReader instance.
"""
self.reader = reader
self.layout = reader.layout
[docs]
def attach_aux(self, ds: xr.Dataset, aux: list[str]) -> xr.Dataset:
"""
Attach requested auxiliary data to the dataset.
:param ds: The dataset containing measurement variables.
:return: Dataset with auxiliary variables added.
"""
requested_aux = aux
if not requested_aux:
return ds
roi_subset = self.reader.resolved_config.subset
# Add angle variables first
angle_vars = [var for var in requested_aux if var in self.layout.get_angle_files()]
if angle_vars:
ds = read_angles_into_dataset(
ds=ds,
layout=self.layout,
angle_vars=angle_vars,
subset=roi_subset,
mtd=self.reader.mtd,
use_chunks=self.reader.resolved_config.read_params["use_chunks"],
chunks=self.reader.resolved_config.read_params["chunks"],
)
# # Read remaining aux vars (e.g. QA bands) from files - only exist in L2 products
# aux_vars = [
# var for var in requested_aux if var not in angle_vars
# ]
# if aux_vars:
# raise NotImplementedError("File-based aux data reading not yet implemented.")
return ds
if __name__ == "__main__":
pass