def testCreateTemplateFull_AMSUB(self): ds = FCDRWriter.createTemplateFull('AMSUB', 2562) self.assertIsNotNone(ds) Assertions.assert_global_attributes(self, ds.attrs) self.assertEqual(27, len(ds.data_vars)) # geolocation + flags self._verify_geolocation_variables(ds) self._verify_quality_flags(ds) # sensor specific self._verify_amsub_specific_variables(ds) # full FCDR variables self.assertIsNotNone(ds.variables["u_btemps"]) self.assertIsNotNone(ds.variables["u_syst_btemps"]) self.assertIsNotNone(ds.variables["u_random_btemps"]) self.assertIsNotNone(ds.variables["u_instrtemp"]) self.assertIsNotNone(ds.variables["u_latitude"]) self.assertIsNotNone(ds.variables["u_longitude"]) self.assertIsNotNone(ds.variables["u_satellite_azimuth_angle"]) self.assertIsNotNone(ds.variables["u_satellite_zenith_angle"]) self.assertIsNotNone(ds.variables["u_solar_azimuth_angle"]) self.assertIsNotNone(ds.variables["u_solar_zenith_angle"])
def create_full_dataset(self): mviri_full = FCDRWriter.createTemplateFull("MVIRI", 5000) self.add_global_attributes(mviri_full) self.add_global_flags(mviri_full) self.add_sensor_data(mviri_full) for x in range(0, 5000): mviri_full["count_vis"].data[:, x] = np.ones((5000), np.uint8) * x for x in range(0, 500): mviri_full["u_latitude"].data[:, x] = np.ones((500), np.float32) * x * 0.1 mviri_full["u_longitude"].data[:, x] = np.ones((500), np.float32) * x * 0.2 mviri_full["u_satellite_zenith_angle"].data[:, x] = np.ones((500), np.float32) * x * 0.3 mviri_full["u_satellite_azimuth_angle"].data[:, x] = np.ones((500), np.float32) * x * 0.4 mviri_full["u_solar_zenith_angle"].data[:, x] = np.ones((500), np.float32) * x * 0.5 mviri_full["u_solar_azimuth_angle"].data[:, x] = np.ones((500), np.float32) * x * 0.6 mviri_full["u_time"].data[:] = np.ones((2500), np.float32) * 0.4 mviri_full["covariance_a_vis"].data = np.ones((3, 3), np.float32) * 0.56 mviri_full["a0_vis"].data = 7.7 mviri_full["a1_vis"].data = 8.8 mviri_full["mean_count_space_vis"].data = 9.9 mviri_full["u_a0_vis"].data = 10.1 mviri_full["u_a1_vis"].data = 11.11 mviri_full["u_a2_vis"].data = 12.12 mviri_full["u_zero_vis"].data = 13.13 mviri_full["u_electronics_counts_vis"].data = 13.13 mviri_full["u_digitization_counts_vis"].data = 14.14 mviri_full["allan_deviation_counts_space_vis"].data = 15.15 return mviri_full
def testCreateTemplateFull_HIRS3(self): ds = FCDRWriter.createTemplateFull('HIRS3', 209) self.assertIsNotNone(ds) Assertions.assert_global_attributes(self, ds.attrs) self.assertEqual(98, len(ds.data_vars)) # geolocation + flags self._verify_geolocation_variables(ds) self._verify_quality_flags(ds) self._assert_HIRS_common_variables(ds) self.assertIsNotNone(ds.variables["satellite_azimuth_angle"]) self.assertIsNotNone(ds.variables["solar_zenith_angle"]) self.assertIsNotNone(ds.variables["scanline_map_to_origl1bfile"]) self.assertIsNotNone(ds.variables["scanline_origl1b"]) self.assertIsNotNone(ds.variables["data_quality_bitmask"]) self.assertIsNotNone(ds.variables["c_earth"]) self.assertIsNotNone(ds.variables["L_earth"]) self.assertIsNotNone(ds.variables["u_L_earth_independent"]) self.assertIsNotNone(ds.variables["navigation_status"]) self.assertIsNotNone(ds.variables["platform_altitude"]) self.assertIsNotNone(ds.variables["platform_pitch_angle"]) self.assertIsNotNone(ds.variables["platform_roll_angle"]) self.assertIsNotNone(ds.variables["platform_yaw_angle"]) self.assertIsNotNone(ds.variables["quality_flags"]) self.assertIsNotNone(ds.variables["scan_angles"]) self.assertIsNotNone(ds.variables["l1b_scanline_number"]) self.assertIsNotNone(ds.variables["scanline_position"]) self.assertIsNotNone( ds.variables["l1b_second_original_calibration_coefficients"]) self.assertIsNotNone(ds.variables["u_c_earth"]) self.assertIsNotNone(ds.variables["u_c_earth_chan_corr"]) self.assertIsNotNone(ds.variables["u_c_space"]) self.assertIsNotNone(ds.variables["u_c_space_chan_corr"]) self.assertIsNotNone(ds.variables["u_Earthshine"]) self.assertIsNotNone(ds.variables["u_O_Re"]) self.assertIsNotNone(ds.variables["u_O_TIWCT"]) self.assertIsNotNone(ds.variables["u_O_TPRT"]) self.assertIsNotNone(ds.variables["u_d_PRT"]) self.assertIsNotNone(ds.variables["u_electronics"]) self.assertIsNotNone(ds.variables["u_nonlinearity"]) self.assertIsNotNone(ds.variables["temp_corr_slope"]) self.assertIsNotNone(ds.variables["temp_corr_offset"]) self.assertIsNotNone(ds.variables["emissivity"]) self.assertIsNotNone(ds.variables["mnfrqualflags"])
def main(): writer = FCDRWriter() # get a template for sensor name in FULL format, supply product height # The scan-width is set automatically # --------------------------------------------------------------------- dataset = writer.createTemplateFull("AVHRR", 128) # set some mandatory global attributes (CF standards). Writing will fail if not all of them are filled # automatically set: CF version and FIDUCEO license # ---------------------------------------------------------------------------------------------------- dataset.attrs["institution"] = "Brockmann Consult GmbH" dataset.attrs["title"] = "FIDUCEO test dataset" dataset.attrs["source"] = "arbitray stuff" dataset.attrs["history"] = "none" dataset.attrs["references"] = "CDR_FCDR sensor reference documentation" dataset.attrs[ "comment"] = "just to show how things are intended to be used" # write real data to the variables. All variables initially contain "_FillValue". # Not writing to the whole array is completely OK # ------------------------------------------------------------------------------- Time = dataset.variables["Time"] Time.data[44] = 0.456 Time.data[45] = 0.457 raa = dataset.variables["relative_azimuth_angle"] raa.data[3, 0] = 0.567 raa.data[3, 1] = 0.568 # ensure not to generate over/underflows # -------------------------------------- DataUtility.check_scaling_ranges(raa) # create a standardized file name # ------------------------------- start = datetime.datetime(2006, 8, 23, 14, 24, 52) end = datetime.datetime(2006, 8, 23, 15, 25, 53) file_name = writer.create_file_name_FCDR_full("AVHRR", "NOAA12", start, end, "01.2") # dump it to disk, netcdf4, medium compression # overwrite existing file # -------------------------------------------- writer.write(dataset, "D:\\Satellite\\DELETE\\" + file_name, overwrite=True)
def testCreateTemplateFull_SSMT2(self): ds = FCDRWriter.createTemplateFull('SSMT2', 722) self.assertIsNotNone(ds) Assertions.assert_global_attributes(self, ds.attrs) self.assertEqual(21, len(ds.data_vars)) # geolocation + flags self._verify_geolocation_variables(ds) self._verify_quality_flags(ds) # sensor specific self.verify_SSMT2_specific_variables(ds) # easy FCDR variables self.assertIsNotNone(ds.variables["u_Temperature_misc_housekeeping"]) self.assertIsNotNone(ds.variables["u_cold_counts"]) self.assertIsNotNone(ds.variables["u_counts_to_tb_gain"]) self.assertIsNotNone(ds.variables["u_counts_to_tb_offset"]) self.assertIsNotNone(ds.variables["u_gain_control"]) self.assertIsNotNone(ds.variables["u_tb"]) self.assertIsNotNone(ds.variables["u_thermal_reference"]) self.assertIsNotNone(ds.variables["u_warm_counts"])
def create_full_dataset(self): avhrr_full = FCDRWriter.createTemplateFull("AVHRR", PRODUCT_HEIGHT) self.add_global_attributes(avhrr_full) self.add_geolocation_data(avhrr_full) self.add_global_flags(avhrr_full) self.add_sensor_data(avhrr_full) for x in range(0, PRODUCT_WIDTH): avhrr_full["u_latitude"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.14 avhrr_full["u_longitude"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.15 avhrr_full["u_satellite_azimuth_angle"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.16 avhrr_full["u_satellite_zenith_angle"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.17 avhrr_full["u_solar_azimuth_angle"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.18 avhrr_full["u_solar_zenith_angle"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.19 avhrr_full["Ch1_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 2 avhrr_full["Ch2_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 3 avhrr_full["Ch3a_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 4 avhrr_full["Ch3b_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 5 avhrr_full["Ch4_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 6 avhrr_full["Ch5_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 7 avhrr_full["Ch3b_Cict"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 8 avhrr_full["Ch4_Cict"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 9 avhrr_full["Ch5_Cict"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 10 avhrr_full["Ch1_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 11 avhrr_full["Ch2_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 12 avhrr_full["Ch3a_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 13 avhrr_full["Ch3b_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 14 avhrr_full["Ch4_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 15 avhrr_full["Ch5_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int32) * x * 16 avhrr_full["Ch1_u_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.17 avhrr_full["Ch2_u_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.18 avhrr_full["Ch3a_u_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.19 avhrr_full["Ch3b_u_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.2 avhrr_full["Ch4_u_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.21 avhrr_full["Ch5_u_Csp"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.22 avhrr_full["Ch3b_u_Cict"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.23 avhrr_full["Ch4_u_Cict"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.24 avhrr_full["Ch5_u_Cict"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.25 avhrr_full["Ch1_u_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.26 avhrr_full["Ch2_u_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.27 avhrr_full["Ch3a_u_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.28 avhrr_full["Ch3b_u_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.29 avhrr_full["Ch4_u_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.3 avhrr_full["Ch5_u_Ce"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.31 avhrr_full["Ch1_u_Refl"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.32 avhrr_full["Ch2_u_Refl"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.33 avhrr_full["Ch3a_u_Refl"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.34 avhrr_full["Ch3b_u_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.35 avhrr_full["Ch4_u_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.36 avhrr_full["Ch5_u_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.37 avhrr_full["Ch3b_ur_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.38 avhrr_full["Ch4_ur_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.39 avhrr_full["Ch5_ur_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.4 avhrr_full["Ch3b_us_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.41 avhrr_full["Ch4_us_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.42 avhrr_full["Ch5_us_Bt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.43 for x in range(0, N_PRT): avhrr_full["PRT_C"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int16) * x avhrr_full["u_prt"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.2 avhrr_full["R_ICT"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.float32) * x * 0.21 avhrr_full["u_time"].data[:] = np.ones(PRODUCT_HEIGHT, np.float64) * 0.16 avhrr_full["T_instr"].data[:] = np.ones(PRODUCT_HEIGHT, np.float32) * 0.17 for x in range(0, 6): avhrr_full["quality_channel_bitmask"].data[:, x] = np.ones(PRODUCT_HEIGHT, np.int8) * x avhrr_full["quality_scanline_bitmask"].data[:] = np.ones(PRODUCT_HEIGHT, np.int8) return avhrr_full
def setUp(self): self.fcdr_reader = FCDRReader() fcdr_writer = FCDRWriter() self.dataset = fcdr_writer.createTemplateFull("MVIRI", 5000)
def testCreateTemplateFull_MVIRI(self): ds = FCDRWriter.createTemplateFull('MVIRI', 5000) self.assertIsNotNone(ds) Assertions.assert_global_attributes(self, ds.attrs) self.assertEqual(58, len(ds.data_vars)) self._verify_quality_flags(ds) # sensor specific self.assertIsNotNone(ds.variables["count_vis"]) self.assertIsNotNone(ds.variables["time"]) self.assertIsNotNone(ds.variables["solar_zenith_angle"]) self.assertIsNotNone(ds.variables["solar_azimuth_angle"]) self.assertIsNotNone(ds.variables["satellite_azimuth_angle"]) self.assertIsNotNone(ds.variables["satellite_zenith_angle"]) self.assertIsNotNone(ds.variables["count_ir"]) self.assertIsNotNone(ds.variables["count_wv"]) self.assertIsNotNone(ds.variables["count_vis"]) self.assertIsNotNone(ds.variables["data_quality_bitmask"]) self.assertIsNotNone(ds.variables["SRF_weights"]) self.assertIsNotNone(ds.variables["SRF_frequencies"]) self.assertIsNotNone( ds.variables["covariance_spectral_response_function_vis"]) self.assertIsNotNone(ds.variables["u_spectral_response_function_ir"]) self.assertIsNotNone(ds.variables["u_spectral_response_function_wv"]) self.assertIsNotNone(ds.variables["a0_vis"]) self.assertIsNotNone(ds.variables["a1_vis"]) self.assertIsNotNone(ds.variables["a2_vis"]) self.assertIsNotNone(ds.variables["solar_irradiance_vis"]) self.assertIsNotNone(ds.variables["u_solar_irradiance_vis"]) self.assertIsNotNone(ds.variables["distance_sun_earth"]) self.assertIsNotNone(ds.variables["a_ir"]) self.assertIsNotNone(ds.variables["b_ir"]) self.assertIsNotNone(ds.variables["u_a_ir"]) self.assertIsNotNone(ds.variables["u_b_ir"]) self.assertIsNotNone(ds.variables["a_wv"]) self.assertIsNotNone(ds.variables["b_wv"]) self.assertIsNotNone(ds.variables["u_a_wv"]) self.assertIsNotNone(ds.variables["u_b_wv"]) self.assertIsNotNone(ds.variables["bt_a_ir"]) self.assertIsNotNone(ds.variables["bt_b_ir"]) self.assertIsNotNone(ds.variables["bt_a_wv"]) self.assertIsNotNone(ds.variables["bt_b_wv"]) self.assertIsNotNone(ds.variables["years_since_launch"]) # full FCDR uncertainties self.assertIsNotNone(ds.variables["u_latitude"]) self.assertIsNotNone(ds.variables["u_longitude"]) self.assertIsNotNone(ds.variables["u_time"]) self.assertIsNotNone(ds.variables["u_a0_vis"]) self.assertIsNotNone(ds.variables["u_a1_vis"]) self.assertIsNotNone(ds.variables["u_a2_vis"]) self.assertIsNotNone(ds.variables["u_zero_vis"]) self.assertIsNotNone(ds.variables["covariance_a_vis"]) self.assertIsNotNone(ds.variables["u_electronics_counts_vis"]) self.assertIsNotNone(ds.variables["u_digitization_counts_vis"]) self.assertIsNotNone(ds.variables["allan_deviation_counts_space_vis"]) self.assertIsNotNone(ds.variables["u_mean_counts_space_vis"]) self.assertIsNotNone(ds.variables["u_solar_zenith_angle"]) self.assertIsNotNone(ds.variables["u_solar_azimuth_angle"]) self.assertIsNotNone(ds.variables["u_satellite_zenith_angle"]) self.assertIsNotNone(ds.variables["u_satellite_azimuth_angle"]) self.assertIsNotNone(ds.variables["effect_correlation_matrix"]) # virtual variables self.assertIsNotNone(ds.variables["sensitivity_solar_irradiance_vis"]) self.assertIsNotNone(ds.variables["sensitivity_count_vis"]) self.assertIsNotNone(ds.variables["sensitivity_count_space"]) self.assertIsNotNone(ds.variables["sensitivity_a0_vis"]) self.assertIsNotNone(ds.variables["sensitivity_a1_vis"]) self.assertIsNotNone(ds.variables["sensitivity_a2_vis"])
def testCreateTemplateFull_AVHRR(self): ds = FCDRWriter.createTemplateFull('AVHRR', 13667) self.assertIsNotNone(ds) Assertions.assert_global_attributes(self, ds.attrs) self.assertEqual(73, len(ds.data_vars)) # geolocation + flags self._verify_geolocation_variables(ds) self._verify_quality_flags(ds) # sensor specific self._verify_avhrr_specific_variables(ds) # variables of full FCDR self.assertIsNotNone(ds.variables["u_latitude"]) self.assertIsNotNone(ds.variables["u_longitude"]) self.assertIsNotNone(ds.variables["u_time"]) self.assertIsNotNone(ds.variables["u_satellite_azimuth_angle"]) self.assertIsNotNone(ds.variables["u_satellite_zenith_angle"]) self.assertIsNotNone(ds.variables["u_solar_azimuth_angle"]) self.assertIsNotNone(ds.variables["u_solar_zenith_angle"]) self.assertIsNotNone(ds.variables["PRT_C"]) self.assertIsNotNone(ds.variables["u_prt"]) # geolocation self._verify_geolocation_variables(ds) self.assertIsNotNone(ds.variables["R_ICT"]) self.assertIsNotNone(ds.variables["T_instr"]) self.assertIsNotNone(ds.variables["Ch1_Csp"]) self.assertIsNotNone(ds.variables["Ch2_Csp"]) self.assertIsNotNone(ds.variables["Ch3a_Csp"]) self.assertIsNotNone(ds.variables["Ch3b_Csp"]) self.assertIsNotNone(ds.variables["Ch4_Csp"]) self.assertIsNotNone(ds.variables["Ch5_Csp"]) self.assertIsNotNone(ds.variables["Ch3b_Cict"]) self.assertIsNotNone(ds.variables["Ch4_Cict"]) self.assertIsNotNone(ds.variables["Ch5_Cict"]) self.assertIsNotNone(ds.variables["Ch1_Ce"]) self.assertIsNotNone(ds.variables["Ch2_Ce"]) self.assertIsNotNone(ds.variables["Ch3a_Ce"]) self.assertIsNotNone(ds.variables["Ch3b_Ce"]) self.assertIsNotNone(ds.variables["Ch4_Ce"]) self.assertIsNotNone(ds.variables["Ch5_Ce"]) self.assertIsNotNone(ds.variables["Ch1_u_Csp"]) self.assertIsNotNone(ds.variables["Ch2_u_Csp"]) self.assertIsNotNone(ds.variables["Ch3a_u_Csp"]) self.assertIsNotNone(ds.variables["Ch3b_u_Csp"]) self.assertIsNotNone(ds.variables["Ch4_u_Csp"]) self.assertIsNotNone(ds.variables["Ch5_u_Csp"]) self.assertIsNotNone(ds.variables["Ch3b_u_Cict"]) self.assertIsNotNone(ds.variables["Ch4_u_Cict"]) self.assertIsNotNone(ds.variables["Ch5_u_Cict"]) self.assertIsNotNone(ds.variables["Ch1_u_Ce"]) self.assertIsNotNone(ds.variables["Ch2_u_Ce"]) self.assertIsNotNone(ds.variables["Ch3a_u_Ce"]) self.assertIsNotNone(ds.variables["Ch3b_u_Ce"]) self.assertIsNotNone(ds.variables["Ch4_u_Ce"]) self.assertIsNotNone(ds.variables["Ch5_u_Ce"]) self.assertIsNotNone(ds.variables["Ch1_u_Refl"]) self.assertIsNotNone(ds.variables["Ch2_u_Refl"]) self.assertIsNotNone(ds.variables["Ch3a_u_Refl"]) self.assertIsNotNone(ds.variables["Ch3b_u_Bt"]) self.assertIsNotNone(ds.variables["Ch4_u_Bt"]) self.assertIsNotNone(ds.variables["Ch5_u_Bt"]) self.assertIsNotNone(ds.variables["Ch3b_ur_Bt"]) self.assertIsNotNone(ds.variables["Ch4_ur_Bt"]) self.assertIsNotNone(ds.variables["Ch5_ur_Bt"]) self.assertIsNotNone(ds.variables["Ch3b_us_Bt"]) self.assertIsNotNone(ds.variables["Ch4_us_Bt"]) self.assertIsNotNone(ds.variables["Ch5_us_Bt"])