libera_utils.footprint_matching.weighting.RadialWeigher#

class libera_utils.footprint_matching.weighting.RadialWeigher(fov_halfangle_deg: float = 1.0)#

Bases: PixelWeigher

Boresight-centered radial Gaussian PSF weight – the swappable stand-in.

The weight of a sample is a Gaussian in its distance from the boresight, truncated to zero beyond the PSF’s ground radius. This is not the true asymmetric CERES PSF; it is a smooth, centrally-peaked stand-in that sizes the PSF from the satellite radius and viewing zenith angle without building the angular frame (see AngularPSFWeigher).

Distances from the boresight use a fast local-tangent-plane formula (_local_tangent_plane_km) for normal footprint boxes – within sub-meter of the WGS84 geodesic over a footprint’s span – and fall back to the exact ellipsoidal pyproj.Geod distance for polar or large / dateline-crossing boxes, where the flat-plane approximation would drift.

Coverage is measured on a ground-plane reference grid over the truncation disc, each finite sample covering the square of half-width RESOLUTION_KM / sqrt(2) around it (see the module docstring).

Parameters:

fov_halfangle_deg (float, optional) – Instrument FOV half-angle used as the floor on the ground radius. Defaults to LIBERA_FOV_HALFANGLE_DEG.

__init__(fov_halfangle_deg: float = 1.0) → None#

Methods

weight_field(samples, boresight_lat_deg, ...)

Compute the radial Gaussian WeightField for samples.

Attributes

uses_viewing_frame

Whether this weigher consumes a precomputed per-footprint viewing frame (the frame argument of weight_field()).

uses_viewing_frame: bool = False#

Whether this weigher consumes a precomputed per-footprint viewing frame (the frame argument of weight_field()). The orchestrator batches the frames up front only when this is True, so a weigher that ignores frame (the radial stand-in) pays nothing for the machinery.

weight_field(samples: SampleSet, boresight_lat_deg: float, boresight_lon_deg: float, *, subsatellite_lat_deg: float, subsatellite_lon_deg: float, satellite_radius_km: float, sample_resolution_km: float, viewing_zenith_deg: float, cone_angle_rate: float | None = None, frame: ViewingFrame | None = None) → WeightField#

Compute the radial Gaussian WeightField for samples.

See PixelWeigher.weight_field(). subsatellite_*, cone_angle_rate and frame are accepted for interface compatibility but unused – the radial stand-in only needs the boresight. An empty sample set yields an empty weight array, zero total energy and zero coverage.