Ejemplo n.º 1
0
    def _create_refl_uncertainty_variable(height,
                                          long_name=None,
                                          structured=False):
        default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                         height,
                                                         np.float32,
                                                         fill_value=np.NaN)
        variable = Variable(["y", "x"], default_array)

        tu.add_units(variable, "percent")
        tu.add_geolocation_attribute(variable)
        variable.attrs["long_name"] = long_name

        if structured:
            tu.add_encoding(variable,
                            np.int16,
                            DefaultData.get_default_fill_value(np.int16),
                            0.01,
                            chunksizes=CHUNKS_2D)
            variable.attrs["valid_min"] = 3
            variable.attrs["valid_max"] = 5
        else:
            tu.add_encoding(variable,
                            np.int16,
                            DefaultData.get_default_fill_value(np.int16),
                            0.00001,
                            chunksizes=CHUNKS_2D)
            variable.attrs["valid_max"] = 1000
            variable.attrs["valid_min"] = 10
        return variable
Ejemplo n.º 2
0
    def test_add_geolocation_attribute(self):
        default_array = DefaultData.create_default_array_3d(
            8, 6, 4, np.float32, np.NaN)
        variable = Variable(["channel", "y", "x"], default_array)

        TemplateUtil.add_geolocation_attribute(variable)
        self.assertEqual("longitude latitude", variable.attrs["coordinates"])
Ejemplo n.º 3
0
 def _create_counts_uncertainty_variable(height, long_name):
     variable = tu.create_float_variable(SWATH_WIDTH,
                                         height,
                                         long_name=long_name,
                                         fill_value=np.NaN)
     tu.add_units(variable, "count")
     tu.add_geolocation_attribute(variable)
     tu.add_chunking(variable, CHUNKS_2D)
     return variable
Ejemplo n.º 4
0
 def _create_angle_uncertainty_variable(angle_name, height):
     variable = tu.create_float_variable(SWATH_WIDTH,
                                         height,
                                         long_name="uncertainty of " +
                                         angle_name,
                                         fill_value=np.NaN)
     tu.add_units(variable, "degree")
     tu.add_geolocation_attribute(variable)
     tu.add_chunking(variable, CHUNKS_2D)
     return variable
Ejemplo n.º 5
0
 def _create_easy_fcdr_variable(height, long_name):
     default_array = DefaultData.create_default_array_3d(SWATH_WIDTH, height, NUM_CHANNELS, np.float32, np.NaN)
     variable = Variable(["channel", "y", "x"], default_array)
     tu.add_encoding(variable, np.uint16, DefaultData.get_default_fill_value(np.uint16), 0.001, chunksizes=CHUNKING_BT)
     variable.attrs["long_name"] = long_name
     tu.add_units(variable, "K")
     tu.add_geolocation_attribute(variable)
     variable.attrs["valid_min"] = 1
     variable.attrs["valid_max"] = 65534
     return variable
Ejemplo n.º 6
0
 def _create_counts_variable(height, long_name):
     default_array = DefaultData.create_default_array(
         SWATH_WIDTH, height, np.int32)
     variable = Variable(["y", "x"], default_array)
     tu.add_fill_value(variable,
                       DefaultData.get_default_fill_value(np.int32))
     variable.attrs["long_name"] = long_name
     tu.add_units(variable, "count")
     tu.add_geolocation_attribute(variable)
     tu.add_chunking(variable, CHUNKS_2D)
     return variable
Ejemplo n.º 7
0
    def _create_geo_angle_variable(standard_name, height, orig_name=None, chunking=None):
        default_array = DefaultData.create_default_array(SWATH_WIDTH, height, np.float32, fill_value=np.NaN)
        variable = Variable(["y", "x"], default_array)
        variable.attrs["standard_name"] = standard_name
        if orig_name is not None:
            variable.attrs["orig_name"] = orig_name

        tu.add_units(variable, "degree")
        tu.add_geolocation_attribute(variable)
        tu.add_encoding(variable, np.uint16, DefaultData.get_default_fill_value(np.uint16), 0.01, -180.0, chunking)
        return variable
Ejemplo n.º 8
0
    def add_quality_flags(dataset, height):
        tu.add_quality_flags(dataset, SWATH_WIDTH, height, chunksizes=CHUNKING_2D)

        default_array = DefaultData.create_default_array(SWATH_WIDTH, height, np.uint16, fill_value=0)
        variable = Variable(["y", "x"], default_array)
        variable.attrs["flag_masks"] = "1, 2, 4, 8, 16"
        variable.attrs["flag_meanings"] = "suspect_mirror suspect_geo suspect_time outlier_nos uncertainty_too_large"
        variable.attrs["standard_name"] = "status_flag"
        tu.add_chunking(variable, CHUNKING_2D)
        tu.add_geolocation_attribute(variable)
        dataset["data_quality_bitmask"] = variable
Ejemplo n.º 9
0
 def add_bt_variable(dataset, height):
     # bt
     default_array = DefaultData.create_default_array_3d(SWATH_WIDTH, height, NUM_CHANNELS, np.float32, np.NaN)
     variable = Variable(["channel", "y", "x"], default_array)
     variable.attrs["standard_name"] = "toa_brightness_temperature"
     variable.attrs["long_name"] = "Brightness temperature, NOAA/EUMETSAT calibrated"
     tu.add_units(variable, "K")
     tu.add_encoding(variable, np.int16, FILL_VALUE, 0.01, 150.0, chunksizes=CHUNKING_BT)
     tu.add_geolocation_attribute(variable)
     variable.attrs["ancilliary_variables"] = "quality_scanline_bitmask quality_channel_bitmask"
     dataset["bt"] = variable
Ejemplo n.º 10
0
    def _add_angle_variables(dataset, height):
        default_array = DefaultData.create_default_vector(height,
                                                          np.float32,
                                                          fill_value=np.NaN)
        variable = Variable(["y"], default_array)
        variable.attrs["standard_name"] = "platform_zenith_angle"
        tu.add_units(variable, "degree")
        tu.add_geolocation_attribute(variable)
        tu.add_encoding(variable, np.uint16,
                        DefaultData.get_default_fill_value(np.uint16), 0.01,
                        -180.0)
        dataset["satellite_zenith_angle"] = variable

        dataset["solar_azimuth_angle"] = HIRS._create_geo_angle_variable(
            "solar_azimuth_angle", height, chunking=CHUNKING_2D)
Ejemplo n.º 11
0
 def _create_bt_uncertainty_variable(height, long_name):
     default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                      height,
                                                      np.float32,
                                                      fill_value=np.NaN)
     variable = Variable(["y", "x"], default_array)
     tu.add_units(variable, "K")
     tu.add_geolocation_attribute(variable)
     tu.add_encoding(variable,
                     np.int16,
                     DefaultData.get_default_fill_value(np.int16),
                     0.001,
                     chunksizes=CHUNKS_2D)
     variable.attrs["valid_max"] = 15000
     variable.attrs["valid_min"] = 1
     variable.attrs["long_name"] = long_name
     return variable
Ejemplo n.º 12
0
 def _create_channel_refl_variable(height, long_name):
     default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                      height,
                                                      np.float32,
                                                      fill_value=np.NaN)
     variable = Variable(["y", "x"], default_array)
     variable.attrs["standard_name"] = "toa_reflectance"
     variable.attrs["long_name"] = long_name
     tu.add_units(variable, "1")
     tu.add_encoding(variable,
                     np.int16,
                     DefaultData.get_default_fill_value(np.int16),
                     0.0001,
                     chunksizes=CHUNKS_2D)
     variable.attrs["valid_max"] = 15000
     variable.attrs["valid_min"] = 0
     tu.add_geolocation_attribute(variable)
     return variable
Ejemplo n.º 13
0
 def _create_channel_bt_variable(height, long_name):
     default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                      height,
                                                      np.float32,
                                                      fill_value=np.NaN)
     variable = Variable(["y", "x"], default_array)
     variable.attrs["standard_name"] = "toa_brightness_temperature"
     variable.attrs["long_name"] = long_name
     tu.add_units(variable, "K")
     variable.attrs["valid_max"] = 10000
     variable.attrs["valid_min"] = -20000
     tu.add_geolocation_attribute(variable)
     tu.add_encoding(variable,
                     np.int16,
                     DefaultData.get_default_fill_value(np.int16),
                     0.01,
                     273.15,
                     chunksizes=CHUNKS_2D)
     return variable
Ejemplo n.º 14
0
    def _create_refl_uncertainty_variable(height,
                                          minmax,
                                          scale_factor,
                                          long_name=None,
                                          units=None):
        default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                         height,
                                                         np.float32,
                                                         fill_value=np.NaN)
        variable = Variable(["y", "x"], default_array)

        tu.add_units(variable, units)
        tu.add_geolocation_attribute(variable)
        variable.attrs["long_name"] = long_name

        tu.add_encoding(variable,
                        np.int16,
                        DefaultData.get_default_fill_value(np.int16),
                        scale_factor,
                        chunksizes=CHUNKS_2D)
        variable.attrs["valid_min"] = minmax[0]
        variable.attrs["valid_max"] = minmax[1]

        return variable
Ejemplo n.º 15
0
    def add_original_variables(dataset, height, srf_size=None):
        tu.add_geolocation_variables(dataset,
                                     SWATH_WIDTH,
                                     height,
                                     chunksizes=CHUNKS_2D)
        tu.add_quality_flags(dataset,
                             SWATH_WIDTH,
                             height,
                             chunksizes=CHUNKS_2D)

        # Time
        default_array = DefaultData.create_default_vector(height,
                                                          np.float64,
                                                          fill_value=np.NaN)
        variable = Variable(["y"], default_array)
        tu.add_fill_value(variable, np.NaN)
        tu.add_units(variable, "s")
        variable.attrs["standard_name"] = "time"
        variable.attrs[
            "long_name"] = "Acquisition time in seconds since 1970-01-01 00:00:00"
        dataset["Time"] = variable

        # relative_azimuth_angle
        default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                         height,
                                                         np.float32,
                                                         fill_value=np.NaN)
        variable = Variable(["y", "x"], default_array)
        variable.attrs["standard_name"] = "relative_azimuth_angle"
        tu.add_units(variable, "degree")
        tu.add_encoding(variable,
                        np.int16,
                        DefaultData.get_default_fill_value(np.int16),
                        0.01,
                        chunksizes=CHUNKS_2D)
        variable.attrs["valid_max"] = 18000
        variable.attrs["valid_min"] = -18000
        tu.add_geolocation_attribute(variable)
        dataset["relative_azimuth_angle"] = variable

        # satellite_zenith_angle
        default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                         height,
                                                         np.float32,
                                                         fill_value=np.NaN)
        variable = Variable(["y", "x"], default_array)
        variable.attrs["standard_name"] = "sensor_zenith_angle"
        tu.add_units(variable, "degree")
        tu.add_encoding(variable,
                        np.int16,
                        DefaultData.get_default_fill_value(np.int16),
                        0.01,
                        chunksizes=CHUNKS_2D)
        variable.attrs["valid_max"] = 9000
        variable.attrs["valid_min"] = 0
        tu.add_geolocation_attribute(variable)
        dataset["satellite_zenith_angle"] = variable

        # solar_zenith_angle
        default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                         height,
                                                         np.float32,
                                                         fill_value=np.NaN)
        variable = Variable(["y", "x"], default_array)
        variable.attrs["standard_name"] = "solar_zenith_angle"
        tu.add_units(variable, "degree")
        tu.add_encoding(variable,
                        np.int16,
                        DefaultData.get_default_fill_value(np.int16),
                        0.01,
                        chunksizes=CHUNKS_2D)
        variable.attrs["valid_max"] = 18000
        variable.attrs["valid_min"] = 0
        tu.add_geolocation_attribute(variable)
        dataset["solar_zenith_angle"] = variable

        dataset["Ch1"] = AVHRR._create_channel_refl_variable(
            height, "Channel 1 Reflectance")
        dataset["Ch2"] = AVHRR._create_channel_refl_variable(
            height, "Channel 2 Reflectance")
        dataset["Ch3a"] = AVHRR._create_channel_refl_variable(
            height, "Channel 3a Reflectance")
        dataset["Ch3b"] = AVHRR._create_channel_bt_variable(
            height, "Channel 3b Brightness Temperature")
        dataset["Ch4"] = AVHRR._create_channel_bt_variable(
            height, "Channel 4 Brightness Temperature")
        dataset["Ch5"] = AVHRR._create_channel_bt_variable(
            height, "Channel 5 Brightness Temperature")

        # data_quality_bitmask
        default_array = DefaultData.create_default_array(SWATH_WIDTH,
                                                         height,
                                                         np.uint8,
                                                         fill_value=0)
        variable = Variable(["y", "x"], default_array)
        variable.attrs["standard_name"] = 'status_flag'
        variable.attrs["long_name"] = 'bitmask for quality per pixel'
        variable.attrs["flag_masks"] = '1,2'
        variable.attrs[
            'flag_meanings'] = 'bad_geolocation_timing_err bad_calibration_radiometer_err'
        tu.add_chunking(variable, CHUNKS_2D)
        tu.add_geolocation_attribute(variable)
        dataset['data_quality_bitmask'] = variable

        default_array = DefaultData.create_default_vector(height,
                                                          np.uint8,
                                                          fill_value=0)
        variable = Variable(["y"], default_array)
        variable.attrs["long_name"] = 'bitmask for quality per scanline'
        variable.attrs["standard_name"] = 'status_flag'
        variable.attrs["flag_masks"] = '1,2,4,8,16,32,64'
        variable.attrs[
            'flag_meanings'] = 'do_not_use bad_time bad_navigation bad_calibration channel3a_present solar_contamination_failure solar_contamination'
        dataset['quality_scanline_bitmask'] = variable

        default_array = DefaultData.create_default_array(N_CHANS,
                                                         height,
                                                         np.uint8,
                                                         fill_value=0)
        variable = Variable(["y", "channel"], default_array)
        variable.attrs["long_name"] = 'bitmask for quality per channel'
        variable.attrs["standard_name"] = 'status_flag'
        variable.attrs["flag_masks"] = '1,2'
        variable.attrs[
            'flag_meanings'] = 'bad_channel some_pixels_not_detected_2sigma'
        dataset['quality_channel_bitmask'] = variable

        if srf_size is None:
            srf_size = MAX_SRF_SIZE

        default_array = DefaultData.create_default_array(srf_size,
                                                         N_CHANS,
                                                         np.float32,
                                                         fill_value=np.NaN)
        variable = Variable(["channel", "n_frequencies"], default_array)
        variable.attrs["long_name"] = 'Spectral Response Function weights'
        variable.attrs[
            "description"] = 'Per channel: weights for the relative spectral response function'
        tu.add_encoding(variable, np.int16, -32768, 0.000033)
        dataset['SRF_weights'] = variable

        default_array = DefaultData.create_default_array(srf_size,
                                                         N_CHANS,
                                                         np.float32,
                                                         fill_value=np.NaN)
        variable = Variable(["channel", "n_frequencies"], default_array)
        variable.attrs["long_name"] = 'Spectral Response Function wavelengths'
        variable.attrs[
            "description"] = 'Per channel: wavelengths for the relative spectral response function'
        tu.add_encoding(variable, np.int32, -2147483648, 0.0001)
        tu.add_units(variable, "um")
        dataset['SRF_wavelengths'] = variable

        default_vector = DefaultData.create_default_vector(height,
                                                           np.uint8,
                                                           fill_value=255)
        variable = Variable(["y"], default_vector)
        tu.add_fill_value(variable, 255)
        variable.attrs["long_name"] = 'Indicator of original file'
        variable.attrs[
            "description"] = "Indicator for mapping each line to its corresponding original level 1b file. See global attribute 'source' for the filenames. 0 corresponds to 1st listed file, 1 to 2nd file."
        dataset["scanline_map_to_origl1bfile"] = variable

        default_vector = DefaultData.create_default_vector(
            height,
            np.int16,
            fill_value=DefaultData.get_default_fill_value(np.int16))
        variable = Variable(["y"], default_vector)
        tu.add_fill_value(variable,
                          DefaultData.get_default_fill_value(np.int16))
        variable.attrs["long_name"] = 'Original_Scan_line_number'
        variable.attrs[
            "description"] = 'Original scan line numbers from corresponding l1b records'
        dataset["scanline_origl1b"] = variable

        tu.add_coordinates(dataset,
                           ["Ch1", "Ch2", "Ch3a", "Ch3b", "Ch4", "Ch5"])