libera_utils.footprint_matching.geometry.psf_ground_radius_km#

libera_utils.footprint_matching.geometry.psf_ground_radius_km(satellite_radius_km: float, viewing_zenith_deg: float, fov_halfangle_deg: float = 1.0) → float#

Project the PSF angular half-extent to an isotropic ground radius, in km.

A small angular offset theta at the satellite spans rho * tan(theta) perpendicular to the line of sight, where rho is the slant range. On a spherical Earth of radius R, a satellite at distance R_s from Earth’s center sees a point at viewing zenith v from rho = sqrt(R_s^2 - (R sin v)^2) - R cos v. Along the view direction the line of sight strikes the surface obliquely, stretching that span by a further 1/cos(v); across it there is no stretch. We return the along-view (larger) value so the radius bounds the footprint in every direction. At nadir this reduces to (R_s - R) * tan(theta).

Unlike the rest of this module, which ray-traces the WGS84 ellipsoid, this is an analytic estimate on a sphere of the WGS84 equatorial radius (WGS84_SEMI_MAJOR_AXIS_KM).

The angular half-extent is the diagonal of the PSF’s along-scan and cross-scan 95%-energy half-extents, because the energy contour reaches toward the corners of that rectangle (see _perimeter_angles). It is floored at the optical FOV half-angle so the radius is never smaller than the field of view.

This is the single home for the angular-extent -> ground-radius projection, used by the per-cell PSF weighers (libera_utils.footprint_matching.weighting).

Parameters:
  • satellite_radius_km (float) – Spacecraft distance from Earth’s center (L1B Radius_of_Satellite_from_Center_of_Earth), km.

  • viewing_zenith_deg (float) – Viewing zenith angle, degrees (clamped at _MAX_VZA_FOR_ELONGATION_DEG for the elongation factor).

  • fov_halfangle_deg (float, optional) – Instrument FOV half-angle, degrees – the floor on the angular extent. Defaults to LIBERA_FOV_HALFANGLE_DEG.

Returns:

Ground radius in km.

Return type:

float