libera_utils.footprint_matching.psf.psf_95_energy_extent#

libera_utils.footprint_matching.psf.psf_95_energy_extent(energy_fraction: float = 0.95, step_deg: float = 0.02, delta_span_deg: float = 3.0, beta_span_deg: float = 1.4) → PSFAngularExtent#

Angular half-extents enclosing energy_fraction of the PSF energy.

This finds the smallest set of grid cells (by descending energy density) whose cumulative PSF energy reaches energy_fraction, then reports how far that set reaches in delta and beta, from a fine, fully-vectorized grid evaluation.

“Energy” here is P(delta, beta) * cos(beta): the cos(beta) factor is the spherical-area Jacobian from ATBD Eq. 4.4-18, weighting each angular cell by the solid angle it subtends. The grid step cancels in the cumulative fraction, so it only needs to be fine enough to resolve the contour.

The result is cached (lru_cache) because, for a fixed PSF, the 95% extent is a static instrument property – it is computed once and reused for every footprint.

Parameters:
  • energy_fraction (float, optional) – Fraction of total PSF energy the contour must enclose. Default 0.95 (CERES heritage truncation level).

  • step_deg (float, optional) – Angular grid resolution in degrees. Default 0.02 (well finer than the contour we are measuring).

  • delta_span_deg (float, optional) – Half-widths of the evaluation grid in delta and beta. Defaults comfortably contain the CERES PSF support (beta is identically zero beyond +/- 2 * CERES_FOV_HALF_WIDTH_DEG = 1.3 deg).

  • beta_span_deg (float, optional) – Half-widths of the evaluation grid in delta and beta. Defaults comfortably contain the CERES PSF support (beta is identically zero beyond +/- 2 * CERES_FOV_HALF_WIDTH_DEG = 1.3 deg).

Returns:

Asymmetric along-scan and symmetric cross-scan half-extents (degrees).

Return type:

PSFAngularExtent