def convert_to_radiance(self, data): """Calibrate to radiance.""" bnum = self._header["block5"]['band_number'][0] # Check calibration mode and select corresponding coefficients if self.calib_mode == "UPDATE" and bnum < 7: dn_gain = self._header['calibration'][ "cali_gain_count2rad_conversion"][0] dn_offset = self._header['calibration'][ "cali_offset_count2rad_conversion"][0] if dn_gain == 0 and dn_offset == 0: logger.info( "No valid updated coefficients, fall back to default values." ) dn_gain = self._header["block5"]["gain_count2rad_conversion"][ 0] dn_offset = self._header["block5"][ "offset_count2rad_conversion"][0] else: dn_gain = self._header["block5"]["gain_count2rad_conversion"][0] dn_offset = self._header["block5"]["offset_count2rad_conversion"][ 0] # Assume no user correction correction_type = None if isinstance(self.user_calibration, dict): # Check if we have DN correction coeffs if 'type' in self.user_calibration: correction_type = self.user_calibration['type'] else: # If not, assume radiance correction correction_type = 'RAD' if correction_type == 'DN': # Replace file calibration with user calibration dn_gain, dn_offset = get_user_calibration_factors( self.band_name, self.user_calibration) elif correction_type == 'RAD': user_slope, user_offset = get_user_calibration_factors( self.band_name, self.user_calibration) data = (data * dn_gain + dn_offset).clip(0) # If using radiance correction factors from GSICS or similar, apply here if correction_type == 'RAD': data = apply_rad_correction(data, user_slope, user_offset) return data
def _apply_user_rad_correction(self, data): """Retrieve user-supplied radiance correction and apply.""" rad_slope, rad_offset = get_user_calibration_factors( self.band_name, self.user_calibration) data = apply_rad_correction(data, rad_slope, rad_offset) return data
def _apply_gsics_rad_correction(self, data): """Retrieve GSICS factors from L1 file and apply to radiance.""" rad_slope = self.nc['gsics_coeff_slope'][0] rad_offset = self.nc['gsics_coeff_intercept'][0] data = apply_rad_correction(data, rad_slope, rad_offset) return data
def test_apply_rad_correction(self): """Test radiance correction technique using user-supplied coefs.""" slope = 0.5 offset = -0.1 res = hf.apply_rad_correction(1.0, slope, offset) np.testing.assert_allclose(2.2, res)