Пример #1
0
    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
Пример #2
0
 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
Пример #3
0
 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
Пример #4
0
 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)