libera_utils.footprint_matching.product.build_radiometer_footprints#
- libera_utils.footprint_matching.product.build_radiometer_footprints(l1b_inputs: dict[str, ndarray]) list[RadiometerFootprint]#
Build one
RadiometerFootprintper L1B pass-through record.Gives each radiometer-timescale footprint the geographic bounding box the external aggregation path needs: the true ray-traced footprint from
compute_footprint_bounding_boxes()(boresight placed from the satellite at the subsatellite point andRadius_of_Satellite_from_Center_of_Earth, projected onto the WGS84 ellipsoid and limb-truncated). The ephemeris andcone_angle_rateare carried onto the footprint so the CERES-faithfulAngularPSFWeighercan orient the PSF along the real scan plane.Exactly one footprint is produced per input record, in input order, so the list stays index-aligned with the product columns: an off-Earth view (a space/calibration view that slipped past the reader’s finite filter) keeps its index with
bbox=Noneandoff_limb=True, so aggregation leaves it at fill rather than querying and weighting a region the instrument did not see.- Parameters:
l1b_inputs (dict[str, np.ndarray]) – The L1B pass-through arrays the FMATCH runner reads from L1B Daily (already filtered to finite geolocation), keyed by their L1B names.
RADIOMETER_TIME,Latitude,Longitude,Viewing_Zenith_Surfaceand every name inL1B_SCAN_REFERENCE_VARIABLESare required;Cone_Angle_Rate(L1B_CONE_ANGLE_RATE_VARIABLE) is read when present.- Returns:
One footprint per L1B record, in input order.
- Return type:
- Raises:
ValueError – If a required key is missing.
MissingGeolocationError – If any record’s ephemeris is unusable or its footprint is not visible from the satellite (see
compute_footprint_bounding_boxes()).