Source code for eoio.readers.emit.angles

"""Angles handling for EMIT (adds solar/viewing angles)."""

from __future__ import annotations
import xarray as xr


[docs] def add_angles(ds: xr.Dataset, obs_ds: xr.Dataset, angle_names: list[str]) -> xr.Dataset: """ Add observation and solar angles to the dataset from the corresponding OBS file. Parameters ---------- ds : xr.Dataset The target dataset to which angles will be added. obs_ds : xr.Dataset The observation dataset (OBS) containing angle information. angle_names : list of str List of angle variable names to add. Returns ------- xr.Dataset The dataset with added angle variables. Notes ----- Mirrors the behaviour of the former read_angles() method. """ ang_label_dict = { "viewing_zenith_angle": "To-sensor zenith", "viewing_azimuth_angle": "To-sensor azimuth", "solar_zenith_angle": "To-sun zenith", "solar_azimuth_angle": "To-sun azimuth", } for k in list(ang_label_dict.keys()): if k not in angle_names: ang_label_dict.pop(k) for k, v in ang_label_dict.items(): vals = obs_ds.sel(bands=v).obs.values if "bands" in obs_ds.coords else obs_ds[v].values ds = ds.assign({k: (["y", "x"], vals)}) ds[k].attrs.update( { "units": "degrees", "standard_name": k, "geometry_id": "60m", "resolution": 60.0, } ) return ds