libera_utils.footprint_matching.weighting.RadialWeigher#
- class libera_utils.footprint_matching.weighting.RadialWeigher(fov_halfangle_deg: float = 1.0)#
Bases:
PixelWeigherBoresight-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 ellipsoidalpyproj.Geoddistance 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.
Methods
weight_field(samples, boresight_lat_deg, ...)Compute the radial Gaussian
WeightFieldforsamples.Attributes
Whether this weigher consumes a precomputed per-footprint viewing frame (the
frameargument ofweight_field()).- uses_viewing_frame: bool = False#
Whether this weigher consumes a precomputed per-footprint viewing frame (the
frameargument ofweight_field()). The orchestrator batches the frames up front only when this isTrue, so a weigher that ignoresframe(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
WeightFieldforsamples.See
PixelWeigher.weight_field().subsatellite_*,cone_angle_rateandframeare 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.