diff --git a/AUTHORS.md b/AUTHORS.md index fb43d0168d..af615d5efd 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -89,4 +89,5 @@ The following people have made contributions to this project: - [Xin Zhang (zxdawn)](https://github.com/zxdawn) - [Yufei Zhu (yufeizhu600)](https://github.com/yufeizhu600) - [Youva Aoun (YouvaEUMex)](https://github.com/YouvaEUMex) +- [Clement Laplace (ClementLaplace)](https://github.com/ClementLaplace) - [Will Sharpe (wjsharpe)](https://github.com/wjsharpe) diff --git a/satpy/etc/readers/fci_l1c_nc.yaml b/satpy/etc/readers/fci_l1c_nc.yaml index d241b3fa9e..7b4ead398e 100644 --- a/satpy/etc/readers/fci_l1c_nc.yaml +++ b/satpy/etc/readers/fci_l1c_nc.yaml @@ -6,109 +6,252 @@ reader: Reader for FCI L1c data in NetCDF4 format. Used to read Meteosat Third Generation (MTG) Flexible Combined Imager (FCI) L1c data. - status: Beta for full-disc FDHSI and HRFI, RSS not supported yet + status: Beta for full-disc FDHSI, HRFI, and African dissemination format. RSS not supported yet supports_fsspec: true reader: !!python/name:satpy.readers.yaml_reader.GEOVariableSegmentYAMLReader - sensors: [ fci ] + sensors: [fci] # Source: MTG FCI L1 Product User Guide [FCIL1PUG] # https://www.eumetsat.int/media/45923 + file_types: fci_l1c_fdhsi: file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler - file_patterns: [ '{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-FDHSI-{coverage}-{subsetting}-{component1}-BODY-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{count_in_repeat_cycle:>04d}.nc' ] + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-FDHSI-{coverage}-{subsetting}-{component1}-BODY-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{count_in_repeat_cycle:>04d}.nc" expected_segments: 40 - required_netcdf_variables: - - attr/platform - - data/{channel_name}/measured/start_position_row - - data/{channel_name}/measured/end_position_row - - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_wavenumber - - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_a - - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_b - - data/{channel_name}/measured/radiance_to_bt_conversion_constant_c1 - - data/{channel_name}/measured/radiance_to_bt_conversion_constant_c2 - - data/{channel_name}/measured/radiance_unit_conversion_coefficient - - data/{channel_name}/measured/channel_effective_solar_irradiance - - data/{channel_name}/measured/effective_radiance - - data/{channel_name}/measured/x - - data/{channel_name}/measured/y - - data/{channel_name}/measured/pixel_quality - - data/{channel_name}/measured/index_map - - data/mtg_geos_projection - - data/swath_direction - - data/swath_number - - index - - state/celestial/earth_sun_distance - - state/celestial/subsolar_latitude - - state/celestial/subsolar_longitude - - state/celestial/sun_satellite_distance - - state/platform/platform_altitude - - state/platform/subsatellite_latitude - - state/platform/subsatellite_longitude - - time + required_netcdf_variables: &required-variables + - attr/platform + - data/{channel_name}/measured/start_position_row + - data/{channel_name}/measured/end_position_row + - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_wavenumber + - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_a + - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_b + - data/{channel_name}/measured/radiance_to_bt_conversion_constant_c1 + - data/{channel_name}/measured/radiance_to_bt_conversion_constant_c2 + - data/{channel_name}/measured/radiance_unit_conversion_coefficient + - data/{channel_name}/measured/channel_effective_solar_irradiance + - data/{channel_name}/measured/effective_radiance + - data/{channel_name}/measured/x + - data/{channel_name}/measured/y + - data/{channel_name}/measured/pixel_quality + - data/{channel_name}/measured/index_map + - data/mtg_geos_projection + - data/swath_direction + - data/swath_number + - index + - state/celestial/earth_sun_distance + - state/celestial/subsolar_latitude + - state/celestial/subsolar_longitude + - state/celestial/sun_satellite_distance + - state/platform/platform_altitude + - state/platform/subsatellite_latitude + - state/platform/subsatellite_longitude + - time variable_name_replacements: channel_name: - - vis_04 - - vis_05 - - vis_06 - - vis_08 - - vis_09 - - nir_13 - - nir_16 - - nir_22 - - ir_38 - - wv_63 - - wv_73 - - ir_87 - - ir_97 - - ir_105 - - ir_123 - - ir_133 + - vis_04 + - vis_05 + - vis_06 + - vis_08 + - vis_09 + - nir_13 + - nir_16 + - nir_22 + - ir_38 + - wv_63 + - wv_73 + - ir_87 + - ir_97 + - ir_105 + - ir_123 + - ir_133 fci_l1c_hrfi: file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler - file_patterns: [ '{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-HRFI-{coverage}-{subsetting}-{component1}-BODY-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{count_in_repeat_cycle:>04d}.nc' ] + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-HRFI-{coverage}-{subsetting}-{component1}-BODY-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{count_in_repeat_cycle:>04d}.nc" expected_segments: 40 - required_netcdf_variables: - - attr/platform - - data/{channel_name}/measured/start_position_row - - data/{channel_name}/measured/end_position_row - - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_wavenumber - - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_a - - data/{channel_name}/measured/radiance_to_bt_conversion_coefficient_b - - data/{channel_name}/measured/radiance_to_bt_conversion_constant_c1 - - data/{channel_name}/measured/radiance_to_bt_conversion_constant_c2 - - data/{channel_name}/measured/radiance_unit_conversion_coefficient - - data/{channel_name}/measured/channel_effective_solar_irradiance - - data/{channel_name}/measured/effective_radiance - - data/{channel_name}/measured/x - - data/{channel_name}/measured/y - - data/{channel_name}/measured/pixel_quality - - data/{channel_name}/measured/index_map - - data/mtg_geos_projection - - data/swath_direction - - data/swath_number - - index - - state/celestial/earth_sun_distance - - state/celestial/subsolar_latitude - - state/celestial/subsolar_longitude - - state/celestial/sun_satellite_distance - - state/platform/platform_altitude - - state/platform/subsatellite_latitude - - state/platform/subsatellite_longitude - - time + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - vis_06_hr + - nir_22_hr + - ir_38_hr + - ir_105_hr + # Note: In The current file the 'MTI1-FCI-1C' which is a part of the file will be replaced by MTI1+FCI-1C, patterns have been added + # to maanage this + fci_l1c_af_vis_06: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-VIS06-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-VIS06-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-1KM-{coverage}-VIS06-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-1KM-{coverage}-VIS06-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - vis_06 + fci_l1c_af_vis_04: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-VIS04-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-VIS04-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - vis_04 + fci_l1c_af_vis_05: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-VIS05-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-VIS05-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - vis_05 + fci_l1c_af_vis_08: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-VIS08-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-VIS08-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - vis_08 + fci_l1c_af_vis_09: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-VIS09-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-VIS09-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - vis_09 + fci_l1c_af_nir_13: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-NIR13-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-NIR13-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - nir_13 + fci_l1c_af_nir_16: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-NIR16-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-NIR16-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - nir_16 + fci_l1c_af_nir_22: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-NIR22-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-NIR22-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - nir_22 + fci_l1c_af_ir_38: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-IR38-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-IR38-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - ir_38 + fci_l1c_af_wv_63: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-WV63-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-WV63-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - wv_63 + fci_l1c_af_wv_73: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-WV73-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-WV73-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - wv_73 + fci_l1c_af_ir_87: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-IR87-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-IR87-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - ir_87 + fci_l1c_af_ir_97: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-IR97-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-IR97-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables variable_name_replacements: channel_name: - - vis_06_hr - - nir_22_hr - - ir_38_hr - - ir_105_hr + - ir_97 + fci_l1c_af_ir_105: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-IR105-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-IR105-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - ir_105 + fci_l1c_af_ir_123: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-IR123-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-IR123-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - ir_123 + fci_l1c_af_ir_133: + file_reader: !!python/name:satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler + file_patterns: + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}-{data_source}-1C-RRAD-3KM-{coverage}-IR133-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + - "{pflag}_{location_indicator},{data_designator},MTI{spacecraft_id:1d}+{data_source}-1C-RRAD-3KM-{coverage}-IR133-{component1}-x-{component3}-{purpose}-{format}_{oflag}_{originator}_{processing_time:%Y%m%d%H%M%S}_{facility_or_tool}_{environment}_{start_time:%Y%m%d%H%M%S}_{end_time:%Y%m%d%H%M%S}_{processing_mode}_{special_compression}_{disposition_mode}_{repeat_cycle_in_day:>04d}_{erraneous_count_in_repeat_cycle:>04d}.nc" + expected_segments: 1 + required_netcdf_variables: *required-variables + variable_name_replacements: + channel_name: + - ir_133 datasets: vis_04: name: vis_04 sensor: fci - wavelength: [ 0.384, 0.444, 0.504 ] - resolution: 1000 + wavelength: [0.384, 0.444, 0.504] + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } calibration: counts: standard_name: counts @@ -119,13 +262,14 @@ datasets: reflectance: standard_name: toa_bidirectional_reflectance units: "%" - file_type: fci_l1c_fdhsi vis_05: name: vis_05 sensor: fci wavelength: [0.470, 0.510, 0.550] - resolution: 1000 + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } calibration: counts: standard_name: counts @@ -136,15 +280,15 @@ datasets: reflectance: standard_name: toa_bidirectional_reflectance units: "%" - file_type: fci_l1c_fdhsi vis_06: name: vis_06 sensor: fci wavelength: [0.590, 0.640, 0.690] resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_fdhsi, fci_l1c_af_vis_06] } + 3000: { file_type: fci_l1c_af_vis_06 } calibration: counts: standard_name: counts @@ -160,7 +304,9 @@ datasets: name: vis_08 sensor: fci wavelength: [0.815, 0.865, 0.915] - resolution: 1000 + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } calibration: counts: standard_name: counts @@ -171,13 +317,14 @@ datasets: reflectance: standard_name: toa_bidirectional_reflectance units: "%" - file_type: fci_l1c_fdhsi vis_09: name: vis_09 sensor: fci wavelength: [0.894, 0.914, 0.934] - resolution: 1000 + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } calibration: counts: standard_name: counts @@ -188,13 +335,14 @@ datasets: reflectance: standard_name: toa_bidirectional_reflectance units: "%" - file_type: fci_l1c_fdhsi nir_13: name: nir_13 sensor: fci wavelength: [1.350, 1.380, 1.410] - resolution: 1000 + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } calibration: counts: standard_name: counts @@ -205,13 +353,14 @@ datasets: reflectance: standard_name: toa_bidirectional_reflectance units: "%" - file_type: fci_l1c_fdhsi nir_16: name: nir_16 sensor: fci wavelength: [1.560, 1.610, 1.660] - resolution: 1000 + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } calibration: counts: standard_name: counts @@ -222,15 +371,15 @@ datasets: reflectance: standard_name: toa_bidirectional_reflectance units: "%" - file_type: fci_l1c_fdhsi nir_22: name: nir_22 sensor: fci wavelength: [2.200, 2.250, 2.300] resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } calibration: counts: standard_name: counts @@ -247,8 +396,9 @@ datasets: sensor: fci wavelength: [3.400, 3.800, 4.200] resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } calibration: counts: standard_name: counts @@ -264,7 +414,9 @@ datasets: name: wv_63 sensor: fci wavelength: [5.300, 6.300, 7.300] - resolution: 2000 + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } calibration: counts: standard_name: counts @@ -275,13 +427,14 @@ datasets: brightness_temperature: standard_name: toa_brightness_temperature units: "K" - file_type: fci_l1c_fdhsi wv_73: name: wv_73 sensor: fci wavelength: [6.850, 7.350, 7.850] - resolution: 2000 + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } calibration: counts: standard_name: counts @@ -292,13 +445,14 @@ datasets: brightness_temperature: standard_name: toa_brightness_temperature units: "K" - file_type: fci_l1c_fdhsi ir_87: name: ir_87 sensor: fci wavelength: [8.300, 8.700, 9.100] - resolution: 2000 + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } calibration: counts: standard_name: counts @@ -309,13 +463,14 @@ datasets: brightness_temperature: standard_name: toa_brightness_temperature units: "K" - file_type: fci_l1c_fdhsi ir_97: name: ir_97 sensor: fci wavelength: [9.360, 9.660, 9.960] - resolution: 2000 + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } calibration: counts: standard_name: counts @@ -326,15 +481,15 @@ datasets: brightness_temperature: standard_name: toa_brightness_temperature units: "K" - file_type: fci_l1c_fdhsi ir_105: name: ir_105 sensor: fci wavelength: [9.800, 10.500, 11.200] resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } calibration: counts: standard_name: counts @@ -350,7 +505,9 @@ datasets: name: ir_123 sensor: fci wavelength: [11.800, 12.300, 12.800] - resolution: 2000 + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } calibration: counts: standard_name: counts @@ -361,13 +518,14 @@ datasets: brightness_temperature: standard_name: toa_brightness_temperature units: "K" - file_type: fci_l1c_fdhsi ir_133: name: ir_133 sensor: fci wavelength: [12.700, 13.300, 13.900] - resolution: 2000 + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } calibration: counts: standard_name: counts @@ -378,1333 +536,1523 @@ datasets: brightness_temperature: standard_name: toa_brightness_temperature units: "K" - file_type: fci_l1c_fdhsi vis_04_pixel_quality: name: vis_04_pixel_quality sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_pixel_quality: name: vis_05_pixel_quality sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_pixel_quality: name: vis_06_pixel_quality sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_pixel_quality: name: vis_08_pixel_quality sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_pixel_quality: name: vis_09_pixel_quality sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_pixel_quality: name: nir_13_pixel_quality sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_pixel_quality: name: nir_16_pixel_quality sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_pixel_quality: name: nir_22_pixel_quality sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_pixel_quality: name: ir_38_pixel_quality sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_pixel_quality: name: wv_63_pixel_quality sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_pixel_quality: name: wv_73_pixel_quality sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_pixel_quality: name: ir_87_pixel_quality sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_pixel_quality: name: ir_97_pixel_quality sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_pixel_quality: name: ir_105_pixel_quality sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_pixel_quality: name: ir_123_pixel_quality sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_pixel_quality: name: ir_133_pixel_quality sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_index_map: name: vis_04_index_map sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_index_map: name: vis_05_index_map sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_index_map: name: vis_06_index_map sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_index_map: name: vis_08_index_map sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_index_map: name: vis_09_index_map sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_index_map: name: nir_13_index_map sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_index_map: name: nir_16_index_map sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_index_map: name: nir_22_index_map sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_index_map: name: ir_38_index_map sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_index_map: name: wv_63_index_map sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_index_map: name: wv_73_index_map sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_index_map: name: ir_87_index_map sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_index_map: name: ir_97_index_map sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_index_map: name: ir_105_index_map sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_index_map: name: ir_123_index_map sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_index_map: name: ir_133_index_map sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_time: name: vis_04_time units: s sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_time: name: vis_05_time units: s sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_time: name: vis_06_time units: s sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_time: name: vis_08_time units: s sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_time: name: vis_09_time units: s sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_time: name: nir_13_time units: s sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_time: name: nir_16_time units: s sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_time: name: nir_22_time units: s sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_time: name: ir_38_time units: s sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_time: name: wv_63_time units: s sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_time: name: wv_73_time units: s sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_time: name: ir_87_time units: s sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_time: name: ir_97_time units: s sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_time: name: ir_105_time units: s sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_time: name: ir_123_time units: s sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_time: name: ir_133_time units: s sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_swath_direction: name: vis_04_swath_direction sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_swath_direction: name: vis_05_swath_direction sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_swath_direction: name: vis_06_swath_direction sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_swath_direction: name: vis_08_swath_direction sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_swath_direction: name: vis_09_swath_direction sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_swath_direction: name: nir_13_swath_direction sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_swath_direction: name: nir_16_swath_direction sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_swath_direction: name: nir_22_swath_direction sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_swath_direction: name: ir_38_swath_direction sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_swath_direction: name: wv_63_swath_direction sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_swath_direction: name: wv_73_swath_direction sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_swath_direction: name: ir_87_swath_direction sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_swath_direction: name: ir_97_swath_direction sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_swath_direction: name: ir_105_swath_direction sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_swath_direction: name: ir_123_swath_direction sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_swath_direction: name: ir_133_swath_direction sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_swath_number: name: vis_04_swath_number sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_swath_number: name: vis_05_swath_number sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_swath_number: name: vis_06_swath_number sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_fdhsi, fci_l1c_af_vis_06] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_swath_number: name: vis_08_swath_number sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_swath_number: name: vis_09_swath_number sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_swath_number: name: nir_13_swath_number sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_swath_number: name: nir_16_swath_number sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_swath_number: name: nir_22_swath_number sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_swath_number: name: ir_38_swath_number sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_swath_number: name: wv_63_swath_number sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_swath_number: name: wv_73_swath_number sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_swath_number: name: ir_87_swath_number sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_swath_number: name: ir_97_swath_number sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_swath_number: name: ir_105_swath_number sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_swath_number: name: ir_123_swath_number sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_swath_number: name: ir_133_swath_number sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_subsatellite_latitude: name: vis_04_subsatellite_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_subsatellite_latitude: name: vis_05_subsatellite_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_subsatellite_latitude: name: vis_06_subsatellite_latitude units: deg sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_subsatellite_latitude: name: vis_08_subsatellite_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_subsatellite_latitude: name: vis_09_subsatellite_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_subsatellite_latitude: name: nir_13_subsatellite_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_subsatellite_latitude: name: nir_16_subsatellite_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_subsatellite_latitude: name: nir_22_subsatellite_latitude units: deg sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_subsatellite_latitude: name: ir_38_subsatellite_latitude units: deg sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_subsatellite_latitude: name: wv_63_subsatellite_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_subsatellite_latitude: name: wv_73_subsatellite_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_subsatellite_latitude: name: ir_87_subsatellite_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_subsatellite_latitude: name: ir_97_subsatellite_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_subsatellite_latitude: name: ir_105_subsatellite_latitude units: deg sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_subsatellite_latitude: name: ir_123_subsatellite_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_subsatellite_latitude: name: ir_133_subsatellite_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_subsatellite_longitude: name: vis_04_subsatellite_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_subsatellite_longitude: name: vis_05_subsatellite_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_subsatellite_longitude: name: vis_06_subsatellite_longitude units: deg sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_subsatellite_longitude: name: vis_08_subsatellite_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_subsatellite_longitude: name: vis_09_subsatellite_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_subsatellite_longitude: name: nir_13_subsatellite_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_subsatellite_longitude: name: nir_16_subsatellite_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_subsatellite_longitude: name: nir_22_subsatellite_longitude units: deg sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_subsatellite_longitude: name: ir_38_subsatellite_longitude units: deg sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_subsatellite_longitude: name: wv_63_subsatellite_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_subsatellite_longitude: name: wv_73_subsatellite_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_subsatellite_longitude: name: ir_87_subsatellite_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_subsatellite_longitude: name: ir_97_subsatellite_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_subsatellite_longitude: name: ir_105_subsatellite_longitude units: deg sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_subsatellite_longitude: name: ir_123_subsatellite_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_subsatellite_longitude: name: ir_133_subsatellite_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_subsolar_latitude: name: vis_04_subsolar_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_subsolar_latitude: name: vis_05_subsolar_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_subsolar_latitude: name: vis_06_subsolar_latitude units: deg sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_subsolar_latitude: name: vis_08_subsolar_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_subsolar_latitude: name: vis_09_subsolar_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_subsolar_latitude: name: nir_13_subsolar_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_subsolar_latitude: name: nir_16_subsolar_latitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_subsolar_latitude: name: nir_22_subsolar_latitude units: deg sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_subsolar_latitude: name: ir_38_subsolar_latitude units: deg sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_subsolar_latitude: name: wv_63_subsolar_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_subsolar_latitude: name: wv_73_subsolar_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_subsolar_latitude: name: ir_87_subsolar_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_subsolar_latitude: name: ir_97_subsolar_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_subsolar_latitude: name: ir_105_subsolar_latitude units: deg sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_subsolar_latitude: name: ir_123_subsolar_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_subsolar_latitude: name: ir_133_subsolar_latitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_subsolar_longitude: name: vis_04_subsolar_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_subsolar_longitude: name: vis_05_subsolar_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_subsolar_longitude: name: vis_06_subsolar_longitude units: deg sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_subsolar_longitude: name: vis_08_subsolar_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_subsolar_longitude: name: vis_09_subsolar_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_subsolar_longitude: name: nir_13_subsolar_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_subsolar_longitude: name: nir_16_subsolar_longitude units: deg sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_subsolar_longitude: name: nir_22_subsolar_longitude units: deg sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_subsolar_longitude: name: ir_38_subsolar_longitude units: deg sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_subsolar_longitude: name: wv_63_subsolar_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_subsolar_longitude: name: wv_73_subsolar_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_subsolar_longitude: name: ir_87_subsolar_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_subsolar_longitude: name: ir_97_subsolar_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_subsolar_longitude: name: ir_105_subsolar_longitude units: deg sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af } ir_123_subsolar_longitude: name: ir_123_subsolar_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_subsolar_longitude: name: ir_133_subsolar_longitude units: deg sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi - + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_platform_altitude: name: vis_04_platform_altitude units: m sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_platform_altitude: name: vis_05_platform_altitude units: m sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_platform_altitude: name: vis_06_platform_altitude units: m sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_platform_altitude: name: vis_08_platform_altitude units: m sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_platform_altitude: name: vis_09_platform_altitude units: m sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_platform_altitude: name: nir_13_platform_altitude units: m sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_platform_altitude: name: nir_16_platform_altitude units: m sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_platform_altitude: name: nir_22_platform_altitude units: m sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_platform_altitude: name: ir_38_platform_altitude units: m sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_platform_altitude: name: wv_63_platform_altitude units: m sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_platform_altitude: name: wv_73_platform_altitude units: m sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_platform_altitude: name: ir_87_platform_altitude units: m sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_platform_altitude: name: ir_97_platform_altitude units: m sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_platform_altitude: name: ir_105_platform_altitude units: m sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af } ir_123_platform_altitude: name: ir_123_platform_altitude units: m sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_platform_altitude: name: ir_133_platform_altitude units: m sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_earth_sun_distance: name: vis_04_earth_sun_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: [fci_l1c_af_vis_04, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_earth_sun_distance: name: vis_05_earth_sun_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_earth_sun_distance: name: vis_06_earth_sun_distance units: km sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_earth_sun_distance: name: vis_08_earth_sun_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_earth_sun_distance: name: vis_09_earth_sun_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_earth_sun_distance: name: nir_13_earth_sun_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_earth_sun_distance: name: nir_16_earth_sun_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_earth_sun_distance: name: nir_22_earth_sun_distance units: km sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_earth_sun_distance: name: ir_38_earth_sun_distance units: km sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_earth_sun_distance: name: wv_63_earth_sun_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_earth_sun_distance: name: wv_73_earth_sun_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_earth_sun_distance: name: ir_87_earth_sun_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_earth_sun_distance: name: ir_97_earth_sun_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_earth_sun_distance: name: ir_105_earth_sun_distance units: km sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_earth_sun_distance: name: ir_123_earth_sun_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_earth_sun_distance: name: ir_133_earth_sun_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } vis_04_sun_satellite_distance: name: vis_04_sun_satellite_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_04 } vis_05_sun_satellite_distance: name: vis_05_sun_satellite_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_05 } vis_06_sun_satellite_distance: name: vis_06_sun_satellite_distance units: km sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: [fci_l1c_af_vis_06, fci_l1c_fdhsi] } + 3000: { file_type: fci_l1c_af_vis_06 } vis_08_sun_satellite_distance: name: vis_08_sun_satellite_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_08 } vis_09_sun_satellite_distance: name: vis_09_sun_satellite_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_vis_09 } nir_13_sun_satellite_distance: name: nir_13_sun_satellite_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_13 } nir_16_sun_satellite_distance: name: nir_16_sun_satellite_distance units: km sensor: fci - resolution: 1000 - file_type: fci_l1c_fdhsi + resolution: + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_16 } nir_22_sun_satellite_distance: name: nir_22_sun_satellite_distance units: km sensor: fci resolution: - 500: {file_type: fci_l1c_hrfi} - 1000: {file_type: fci_l1c_fdhsi} + 500: { file_type: fci_l1c_hrfi } + 1000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_nir_22 } ir_38_sun_satellite_distance: name: ir_38_sun_satellite_distance units: km sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_38 } wv_63_sun_satellite_distance: name: wv_63_sun_satellite_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_63 } wv_73_sun_satellite_distance: name: wv_73_sun_satellite_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_wv_73 } ir_87_sun_satellite_distance: name: ir_87_sun_satellite_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_87 } ir_97_sun_satellite_distance: name: ir_97_sun_satellite_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_97 } ir_105_sun_satellite_distance: name: ir_105_sun_satellite_distance units: km sensor: fci resolution: - 1000: {file_type: fci_l1c_hrfi} - 2000: {file_type: fci_l1c_fdhsi} + 1000: { file_type: fci_l1c_hrfi } + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_105 } ir_123_sun_satellite_distance: name: ir_123_sun_satellite_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_123 } ir_133_sun_satellite_distance: name: ir_133_sun_satellite_distance units: km sensor: fci - resolution: 2000 - file_type: fci_l1c_fdhsi + resolution: + 2000: { file_type: fci_l1c_fdhsi } + 3000: { file_type: fci_l1c_af_ir_133 } diff --git a/satpy/readers/fci_l1c_nc.py b/satpy/readers/fci_l1c_nc.py index 0c7b9fb8cc..6499b0c657 100644 --- a/satpy/readers/fci_l1c_nc.py +++ b/satpy/readers/fci_l1c_nc.py @@ -29,7 +29,9 @@ .. note:: This reader currently supports Full Disk High Spectral Resolution Imagery - (FDHSI) and High Spatial Resolution Fast Imagery (HRFI) data in full-disc ("FD") scanning mode. + (FDHSI), High Spatial Resolution Fast Imagery (HRFI) data in full-disc ("FD") scanning mode. + In addition it also supports the L1C format for the African dissemination ("AF"), where each file + contains the masked full-dic of a single channel see `AF PUG`_. If the user provides a list of both FDHSI and HRFI files from the same repeat cycle to the Satpy ``Scene``, Satpy will automatically read the channels from the source with the finest resolution, i.e. from the HRFI files for the vis_06, nir_22, ir_38, and ir_105 channels. @@ -104,6 +106,7 @@ If you use ``hdf5plugin``, make sure to add the line ``import hdf5plugin`` at the top of your script. +.. _AF PUG: https://www-cdn.eumetsat.int/files/2022-07/MTG%20EUMETCast%20Africa%20Product%20User%20Guide%20%5BAfricaPUG%5D_v2E.pdf .. _PUG: https://www-cdn.eumetsat.int/files/2020-07/pdf_mtg_fci_l1_pug.pdf .. _EUMETSAT: https://www.eumetsat.int/mtg-flexible-combined-imager # noqa: E501 .. _test data releases: https://www.eumetsat.int/mtg-test-data @@ -146,11 +149,13 @@ HIGH_RES_GRID_INFO = {"fci_l1c_hrfi": {"grid_type": "500m", "grid_width": 22272}, "fci_l1c_fdhsi": {"grid_type": "1km", - "grid_width": 11136}} + "grid_width": 11136}, + } LOW_RES_GRID_INFO = {"fci_l1c_hrfi": {"grid_type": "1km", "grid_width": 11136}, "fci_l1c_fdhsi": {"grid_type": "2km", - "grid_width": 5568}} + "grid_width": 5568}, + } def _get_aux_data_name_from_dsname(dsname): @@ -218,7 +223,7 @@ def rc_period_min(self): As RSS is not yet implemeted and error will be raised if RSS are to be read """ - if not self.filename_info["coverage"] == "FD": + if self.filename_info["coverage"] not in ["FD","AF"]: raise NotImplementedError(f"coverage for {self.filename_info['coverage']} not supported by this reader") return 2.5 return 10 @@ -272,29 +277,28 @@ def get_segment_position_info(self): Note: in the FCI terminology, a segment is actually called "chunk". To avoid confusion with the dask concept of chunk, and to be consistent with SEVIRI, we opt to use the word segment. + + Note: This function is not used for the African data as it contains only one segment. """ + file_type = self.filetype_info["file_type"] vis_06_measured_path = self.get_channel_measured_group_path("vis_06") ir_105_measured_path = self.get_channel_measured_group_path("ir_105") - - file_type = self.filetype_info["file_type"] - segment_position_info = { - HIGH_RES_GRID_INFO[file_type]["grid_type"]: { - "start_position_row": self.get_and_cache_npxr(vis_06_measured_path + "/start_position_row").item(), - "end_position_row": self.get_and_cache_npxr(vis_06_measured_path + "/end_position_row").item(), - "segment_height": self.get_and_cache_npxr(vis_06_measured_path + "/end_position_row").item() - - self.get_and_cache_npxr(vis_06_measured_path + "/start_position_row").item() + 1, - "grid_width": HIGH_RES_GRID_INFO[file_type]["grid_width"] - }, - LOW_RES_GRID_INFO[file_type]["grid_type"]: { - "start_position_row": self.get_and_cache_npxr(ir_105_measured_path + "/start_position_row").item(), - "end_position_row": self.get_and_cache_npxr(ir_105_measured_path + "/end_position_row").item(), - "segment_height": self.get_and_cache_npxr(ir_105_measured_path + "/end_position_row").item() - - self.get_and_cache_npxr(ir_105_measured_path + "/start_position_row").item() + 1, - "grid_width": LOW_RES_GRID_INFO[file_type]["grid_width"] - } - } - + HIGH_RES_GRID_INFO[file_type]["grid_type"]: { + "start_position_row": self.get_and_cache_npxr(vis_06_measured_path + "/start_position_row").item(), + "end_position_row": self.get_and_cache_npxr(vis_06_measured_path + "/end_position_row").item(), + "segment_height": self.get_and_cache_npxr(vis_06_measured_path + "/end_position_row").item() - + self.get_and_cache_npxr(vis_06_measured_path + "/start_position_row").item() + 1, + "grid_width": HIGH_RES_GRID_INFO[file_type]["grid_width"] + }, + LOW_RES_GRID_INFO[file_type]["grid_type"]: { + "start_position_row": self.get_and_cache_npxr(ir_105_measured_path + "/start_position_row").item(), + "end_position_row": self.get_and_cache_npxr(ir_105_measured_path + "/end_position_row").item(), + "segment_height": self.get_and_cache_npxr(ir_105_measured_path + "/end_position_row").item() - + self.get_and_cache_npxr(ir_105_measured_path + "/start_position_row").item() + 1, + "grid_width": LOW_RES_GRID_INFO[file_type]["grid_width"] + } + } return segment_position_info def get_dataset(self, key, info=None): @@ -397,9 +401,13 @@ def orbital_param(self): actual_subsat_lon = float(np.nanmean(self._get_aux_data_lut_vector("subsatellite_longitude"))) actual_subsat_lat = float(np.nanmean(self._get_aux_data_lut_vector("subsatellite_latitude"))) actual_sat_alt = float(np.nanmean(self._get_aux_data_lut_vector("platform_altitude"))) - nominal_and_proj_subsat_lon = float( - self.get_and_cache_npxr("data/mtg_geos_projection/attr/longitude_of_projection_origin")) - nominal_and_proj_subsat_lat = 0 + # The "try" is a temporary part of the code as long as the AF data are not modified + try : + nominal_and_proj_subsat_lon = float( + self.get_and_cache_npxr("data/mtg_geos_projection/attr/longitude_of_projection_origin")) + except ValueError: + nominal_and_proj_subsat_lon = 0.0 + nominal_and_proj_subsat_lat = 0.0 nominal_and_proj_sat_alt = float( self.get_and_cache_npxr("data/mtg_geos_projection/attr/perspective_point_height")) @@ -551,7 +559,11 @@ def get_area_def(self, key): a = float(self.get_and_cache_npxr("data/mtg_geos_projection/attr/semi_major_axis")) h = float(self.get_and_cache_npxr("data/mtg_geos_projection/attr/perspective_point_height")) rf = float(self.get_and_cache_npxr("data/mtg_geos_projection/attr/inverse_flattening")) - lon_0 = float(self.get_and_cache_npxr("data/mtg_geos_projection/attr/longitude_of_projection_origin")) + # The "try" is a temporary part of the code as long as the AF data are not modified + try: + lon_0 = float(self.get_and_cache_npxr("data/mtg_geos_projection/attr/longitude_of_projection_origin")) + except ValueError: + lon_0 = 0.0 sweep = str(self.get_and_cache_npxr("data/mtg_geos_projection/attr/sweep_angle_axis")) area_extent, nlines, ncols = self.calc_area_extent(key) diff --git a/satpy/tests/reader_tests/test_fci_l1c_nc.py b/satpy/tests/reader_tests/test_fci_l1c_nc.py index 792de90462..b278c2b230 100644 --- a/satpy/tests/reader_tests/test_fci_l1c_nc.py +++ b/satpy/tests/reader_tests/test_fci_l1c_nc.py @@ -57,9 +57,135 @@ "scale_factor": 5.58871526031607e-05, "add_offset": 1.55617776423501e-01, }, + "3km": { + "nrows": 67, + "ncols": 3712, + "scale_factor": 8.38307287956433e-05, + "add_offset": 0.155631748009112, + }, } +LIST_CHANNEL_SOLAR = ["vis_04", "vis_05", "vis_06", "vis_08", "vis_09", + "nir_13", "nir_16", "nir_22"] +LIST_CHANNEL_TERRAN = ["ir_38", "wv_63", "wv_73", "ir_87", "ir_97", "ir_105", + "ir_123", "ir_133"] +LIST_TOTAL_CHANNEL = LIST_CHANNEL_SOLAR + LIST_CHANNEL_TERRAN +LIST_RESOLUTION_V06 = ["1km","3km"] +LIST_RESOLUTION = ["3km"] +EXPECTED_POS_INFO_FOR_FILETYPE = { + "fdhsi": {"1km": {"start_position_row": 1, + "end_position_row": 200, + "segment_height": 200, + "grid_width": 11136}, + "2km": {"start_position_row": 1, + "end_position_row": 100, + "segment_height": 100, + "grid_width": 5568}}, + "hrfi": {"500m": {"start_position_row": 1, + "end_position_row": 400, + "segment_height": 400, + "grid_width": 22272}, + "1km": {"start_position_row": 1, + "end_position_row": 200, + "grid_width": 11136, + "segment_height": 200}}, + "fci_af" : {"3km": {"start_position_row": 1, + "end_position_row": 67, + "segment_height": 67, + "grid_width": 3712 + }, + }, + "fci_af_vis_06" : {"3km": {"start_position_row": 1, + "end_position_row": 67, + "segment_height": 67, + "grid_width": 3712 + }, + "1km": {"start_position_row": 1, + "end_position_row": 200, + "grid_width": 11136, + "segment_height": 200} + } + } + +CHANS_FHDSI = {"solar": LIST_CHANNEL_SOLAR, + "solar_grid_type": ["1km"] * 8, + "terran": LIST_CHANNEL_TERRAN, + "terran_grid_type": ["2km"] * 8} + +CHANS_HRFI = {"solar": ["vis_06", "nir_22"], + "solar_grid_type": ["500m"] * 2, + "terran": ["ir_38", "ir_105"], + "terran_grid_type": ["1km"] * 2} + +DICT_CALIBRATION = { "radiance" : {"dtype": np.float32, + "value_1": 15, + "value_0":9700, + "attrs_dict":{"calibration":"radiance", + "units":"mW m-2 sr-1 (cm-1)-1", + "radiance_unit_conversion_coefficient": np.float32(1234.56) + }, + }, + + "reflectance" : {"dtype": np.float32, + "attrs_dict":{"calibration":"reflectance", + "units":"%" + }, + }, + + "counts" : {"dtype": np.uint16, + "value_1": 1, + "value_0": 5000, + "attrs_dict":{"calibration":"counts", + "units":"count", + }, + }, + + "brightness_temperature" : {"dtype": np.float32, + "value_1": np.float32(209.68275), + "value_0": np.float32(1888.8513), + "attrs_dict":{"calibration":"brightness_temperature", + "units":"K", + }, + }, +} +TEST_FILENAMES = {"fdhsi": [ + "W_XX-EUMETSAT-Darmstadt,IMG+SAT,MTI1+FCI-1C-RRAD-FDHSI-FD--" + "CHK-BODY--L2P-NC4E_C_EUMT_20170410114434_GTT_DEV_" + "20170410113925_20170410113934_N__C_0070_0067.nc" +], + "hrfi": [ + "W_XX-EUMETSAT-Darmstadt,IMG+SAT,MTI1+FCI-1C-RRAD-HRFI-FD--" + "CHK-BODY--L2P-NC4E_C_EUMT_20170410114434_GTT_DEV_" + "20170410113925_20170410113934_N__C_0070_0067.nc" + ] +} +def resolutions(channel): + """Get the resolutions.""" + if channel == "vis_06": + return LIST_RESOLUTION_V06 + else: + return LIST_RESOLUTION + +def fill_chans_af(): + """Fill the dict CHANS_AF and the list TEST_FILENAMES with the right channel and resolution.""" + CHANS_AF = {} + for channel in LIST_TOTAL_CHANNEL: + list_resol = resolutions(channel) + for resol in list_resol: + chann_upp = channel.replace("_","").upper() + TEST_FILENAMES[f"af_{channel}_{resol}"] = [f"W_XX-EUMETSAT-Darmstadt,IMG+SAT,MTI1-FCI-1C-RRAD" + f"-{resol.upper()}-AF-{chann_upp}-x-x---NC4E_C_EUMT_20240125144655_DT_OPE" + f"_20240109080007_20240109080924_N_JLS_T_0049_0000.nc"] + if channel.split("_")[0] in ["vis","nir"]: + CHANS_AF[f"{channel}_{resol}"] = {"solar":[channel], + "solar_grid_type": [resol]} + elif channel.split("_")[0] in ["ir","wv"]: + CHANS_AF[f"{channel}_{resol}"] = {"terran":[channel], + "terran_grid_type": [resol]} + return CHANS_AF,TEST_FILENAMES + +CHANS_AF,TEST_FILENAMES = fill_chans_af() # ---------------------------------------------------- # Filehandlers preparation --------------------------- # ---------------------------------------------------- @@ -366,6 +492,10 @@ class FakeFCIFileHandlerHRFI(FakeFCIFileHandlerBase): } +class FakeFCIFileHandlerAF(FakeFCIFileHandlerBase): + """Mock AF data.""" + chan_patterns = {} + # ---------------------------------------------------- # Fixtures preparation ------------------------------- # ---------------------------------------------------- @@ -386,7 +516,6 @@ def _get_reader_with_filehandlers(filenames, reader_configs): clear_cache(reader) return reader - def clear_cache(reader): """Clear the cache for file handlres in reader.""" for key in reader.file_handlers: @@ -394,31 +523,20 @@ def clear_cache(reader): for fh in fhs: fh.cached_file_content = {} +def get_list_channel_calibration(calibration): + """Get the channel's list according the calibration.""" + if calibration == "reflectance": + return LIST_CHANNEL_SOLAR + elif calibration == "brightness_temperature": + return LIST_CHANNEL_TERRAN + else: + return LIST_TOTAL_CHANNEL -_chans_fdhsi = {"solar": ["vis_04", "vis_05", "vis_06", "vis_08", "vis_09", - "nir_13", "nir_16", "nir_22"], - "solar_grid_type": ["1km"] * 8, - "terran": ["ir_38", "wv_63", "wv_73", "ir_87", "ir_97", "ir_105", - "ir_123", "ir_133"], - "terran_grid_type": ["2km"] * 8} - -_chans_hrfi = {"solar": ["vis_06", "nir_22"], - "solar_grid_type": ["500m"] * 2, - "terran": ["ir_38", "ir_105"], - "terran_grid_type": ["1km"] * 2} - -_test_filenames = {"fdhsi": [ - "W_XX-EUMETSAT-Darmstadt,IMG+SAT,MTI1+FCI-1C-RRAD-FDHSI-FD--" - "CHK-BODY--L2P-NC4E_C_EUMT_20170410114434_GTT_DEV_" - "20170410113925_20170410113934_N__C_0070_0067.nc" -], - "hrfi": [ - "W_XX-EUMETSAT-Darmstadt,IMG+SAT,MTI1+FCI-1C-RRAD-HRFI-FD--" - "CHK-BODY--L2P-NC4E_C_EUMT_20170410114434_GTT_DEV_" - "20170410113925_20170410113934_N__C_0070_0067.nc" - ] -} - +def generate_parameters(calibration): + """Generate dinamicaly the parameters.""" + for channel in get_list_channel_calibration(calibration): + for resolution in resolutions(channel): + yield (channel, resolution) @contextlib.contextmanager def mocked_basefilehandler(filehandler): @@ -435,8 +553,8 @@ def FakeFCIFileHandlerFDHSI_fixture(): with mocked_basefilehandler(FakeFCIFileHandlerFDHSI): param_dict = { "filetype": "fci_l1c_fdhsi", - "channels": _chans_fdhsi, - "filenames": _test_filenames["fdhsi"] + "channels": CHANS_FHDSI, + "filenames": TEST_FILENAMES["fdhsi"] } yield param_dict @@ -447,11 +565,24 @@ def FakeFCIFileHandlerHRFI_fixture(): with mocked_basefilehandler(FakeFCIFileHandlerHRFI): param_dict = { "filetype": "fci_l1c_hrfi", - "channels": _chans_hrfi, - "filenames": _test_filenames["hrfi"] + "channels": CHANS_HRFI, + "filenames": TEST_FILENAMES["hrfi"] } yield param_dict +@pytest.fixture() +def FakeFCIFileHandlerAF_fixture(channel,resolution): + """Get a fixture for the fake AF filehandler, it contains only one channel and one resolution.""" + chan_patterns = {channel.split("_")[0]+"_{:>02d}": {"channels": [int(channel.split("_")[1])], + "grid_type": f"{resolution}"},} + FakeFCIFileHandlerAF.chan_patterns = chan_patterns + with mocked_basefilehandler(FakeFCIFileHandlerAF): + param_dict = { + "filetype": "fci_l1c_af", + "channels": CHANS_AF[f"{channel}_{resolution}"], + "filenames": TEST_FILENAMES[f"af_{channel}_{resolution}"], + } + yield param_dict # ---------------------------------------------------- # Tests ---------------------------------------------- @@ -461,12 +592,47 @@ def FakeFCIFileHandlerHRFI_fixture(): class TestFCIL1cNCReader: """Test FCI L1c NetCDF reader with nominal data.""" - fh_param_for_filetype = {"hrfi": {"channels": _chans_hrfi, - "filenames": _test_filenames["hrfi"]}, - "fdhsi": {"channels": _chans_fdhsi, - "filenames": _test_filenames["fdhsi"]}} + fh_param_for_filetype = {"hrfi": {"channels": CHANS_HRFI, + "filenames": TEST_FILENAMES["hrfi"]}, + "fdhsi": {"channels": CHANS_FHDSI, + "filenames": TEST_FILENAMES["fdhsi"]}} + + def _get_type_ter_AF(self,channel): + """Get the type_ter.""" + if channel.split("_")[0] in ["vis","nir"]: + return "solar" + elif channel.split("_")[0] in ["wv","ir"]: + return "terran" + + def _get_assert_attrs(self,res,ch,attrs_dict): + """Test the differents attributes values.""" + for key,item in attrs_dict.items(): + assert res[ch].attrs[key] == item + + def _get_assert_load(self,res,ch,grid_type,dict_arg): + """Test the value for differents channels.""" + assert res[ch].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], + GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["ncols"]) + assert res[ch].dtype == dict_arg["dtype"] + self._get_assert_attrs(res,ch,dict_arg["attrs_dict"]) + if dict_arg["attrs_dict"]["calibration"] == "reflectance": + numpy.testing.assert_array_almost_equal(res[ch], 100 * 15 * 1 * np.pi / 50) + else : + if ch == "ir_38": + numpy.testing.assert_array_equal(res[ch][-1], dict_arg["value_1"]) + numpy.testing.assert_array_equal(res[ch][0], dict_arg["value_0"]) + else: + numpy.testing.assert_array_equal(res[ch], dict_arg["value_1"]) + + def _get_res_AF(self,channel,fh_param,calibration,reader_configs): + """Load the reader for AF data.""" + reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) + type_ter = self._get_type_ter_AF(channel) + res = reader.load([make_dataid(name=name, calibration=calibration) + for name in fh_param["channels"][type_ter]], pad_data=False) + return res - @pytest.mark.parametrize("filenames", [_test_filenames["fdhsi"], _test_filenames["hrfi"]]) + @pytest.mark.parametrize("filenames", [TEST_FILENAMES[filename] for filename in TEST_FILENAMES.keys()]) def test_file_pattern(self, reader_configs, filenames): """Test file pattern matching.""" from satpy.readers import load_reader @@ -475,8 +641,8 @@ def test_file_pattern(self, reader_configs, filenames): files = reader.select_files_from_pathnames(filenames) assert len(files) == 1 - @pytest.mark.parametrize("filenames", [_test_filenames["fdhsi"][0].replace("BODY", "TRAIL"), - _test_filenames["hrfi"][0].replace("BODY", "TRAIL")]) + @pytest.mark.parametrize("filenames", [TEST_FILENAMES["fdhsi"][0].replace("BODY", "TRAIL"), + TEST_FILENAMES["hrfi"][0].replace("BODY", "TRAIL")]) def test_file_pattern_for_TRAIL_file(self, reader_configs, filenames): """Test file pattern matching for TRAIL files, which should not be picked up.""" from satpy.readers import load_reader @@ -485,97 +651,57 @@ def test_file_pattern_for_TRAIL_file(self, reader_configs, filenames): files = reader.select_files_from_pathnames(filenames) assert len(files) == 0 - @pytest.mark.parametrize(("fh_param", "expected_res_n"), [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"), 16), - (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"), 4)]) - def test_load_counts(self, reader_configs, fh_param, - expected_res_n): - """Test loading with counts.""" - reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) - res = reader.load( - [make_dataid(name=name, calibration="counts") for name in - fh_param["channels"]["solar"] + fh_param["channels"]["terran"]], pad_data=False) - assert expected_res_n == len(res) - for ch, grid_type in zip(fh_param["channels"]["solar"] + fh_param["channels"]["terran"], - fh_param["channels"]["solar_grid_type"] + - fh_param["channels"]["terran_grid_type"]): - assert res[ch].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], - GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["ncols"]) - assert res[ch].dtype == np.uint16 - assert res[ch].attrs["calibration"] == "counts" - assert res[ch].attrs["units"] == "count" - if ch == "ir_38": - numpy.testing.assert_array_equal(res[ch][-1], 1) - numpy.testing.assert_array_equal(res[ch][0], 5000) - else: - numpy.testing.assert_array_equal(res[ch], 1) - - @pytest.mark.parametrize(("fh_param", "expected_res_n"), [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"), 16), - (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"), 4)]) - def test_load_radiance(self, reader_configs, fh_param, - expected_res_n): - """Test loading with radiance.""" - reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) - res = reader.load( - [make_dataid(name=name, calibration="radiance") for name in - fh_param["channels"]["solar"] + fh_param["channels"]["terran"]], pad_data=False) - assert expected_res_n == len(res) - for ch, grid_type in zip(fh_param["channels"]["solar"] + fh_param["channels"]["terran"], - fh_param["channels"]["solar_grid_type"] + - fh_param["channels"]["terran_grid_type"]): - assert res[ch].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], - GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["ncols"]) - assert res[ch].dtype == np.float32 - assert res[ch].attrs["calibration"] == "radiance" - assert res[ch].attrs["units"] == "mW m-2 sr-1 (cm-1)-1" - assert res[ch].attrs["radiance_unit_conversion_coefficient"].values == np.float32(1234.56) - if ch == "ir_38": - numpy.testing.assert_array_equal(res[ch][-1], 15) - numpy.testing.assert_array_equal(res[ch][0], 9700) - else: - numpy.testing.assert_array_equal(res[ch], 15) - - @pytest.mark.parametrize(("fh_param", "expected_res_n"), [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"), 8), - (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"), 2)]) - def test_load_reflectance(self, reader_configs, fh_param, - expected_res_n): - """Test loading with reflectance.""" - reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) - res = reader.load( - [make_dataid(name=name, calibration="reflectance") for name in - fh_param["channels"]["solar"]], pad_data=False) - assert expected_res_n == len(res) - for ch, grid_type in zip(fh_param["channels"]["solar"], fh_param["channels"]["solar_grid_type"]): - assert res[ch].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], - GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["ncols"]) - assert res[ch].dtype == np.float32 - assert res[ch].attrs["calibration"] == "reflectance" - assert res[ch].attrs["units"] == "%" - numpy.testing.assert_array_almost_equal(res[ch], 100 * 15 * 1 * np.pi / 50) - - @pytest.mark.parametrize(("fh_param", "expected_res_n"), [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"), 8), - (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"), 2)]) - def test_load_bt(self, reader_configs, caplog, fh_param, - expected_res_n): - """Test loading with bt.""" + @pytest.mark.parametrize("calibration", ["counts","radiance","brightness_temperature","reflectance"]) + @pytest.mark.parametrize(("fh_param","res_type"), [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"),"hdfi"), + (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"),"hrfi")]) + def test_load_calibration(self, reader_configs, fh_param, + caplog,calibration,res_type): + """Test loading with counts,radiance,reflectance and bt.""" + expected_res_n = {} + if calibration == "reflectance": + list_chan = fh_param["channels"]["solar"] + list_grid = fh_param["channels"]["solar_grid_type"] + expected_res_n["hdfi"] = 8 + expected_res_n["hrfi"] = 2 + elif calibration == "brightness_temperature": + list_chan = fh_param["channels"]["terran"] + list_grid = fh_param["channels"]["terran_grid_type"] + expected_res_n["hdfi"] = 8 + expected_res_n["hrfi"] = 2 + else: + list_chan = fh_param["channels"]["solar"] + fh_param["channels"]["terran"] + list_grid = fh_param["channels"]["solar_grid_type"] + fh_param["channels"]["terran_grid_type"] + expected_res_n["hdfi"] = 16 + expected_res_n["hrfi"] = 4 reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) with caplog.at_level(logging.WARNING): res = reader.load( - [make_dataid(name=name, calibration="brightness_temperature") for - name in fh_param["channels"]["terran"]], pad_data=False) + [make_dataid(name=name, calibration=calibration) for name in + list_chan], pad_data=False) + assert caplog.text == "" + assert expected_res_n[res_type] == len(res) + for ch, grid_type in zip(list_chan, + list_grid): + self._get_assert_load(res, ch, grid_type, DICT_CALIBRATION[calibration]) + + @pytest.mark.parametrize(("calibration", "channel", "resolution"), [ + (calibration, channel, resolution) + for calibration in ["counts", "radiance", "brightness_temperature", "reflectance"] + for channel, resolution in generate_parameters(calibration) + ]) + def test_load_calibration_af(self,FakeFCIFileHandlerAF_fixture,reader_configs,channel,calibration,caplog): + """Test loading with counts,radiance,reflectance and bt for AF files.""" + expected_res_n = 1 + fh_param = FakeFCIFileHandlerAF_fixture + type_ter = self._get_type_ter_AF(channel) + with caplog.at_level(logging.WARNING): + res = self._get_res_AF(channel,fh_param,calibration,reader_configs) assert caplog.text == "" assert expected_res_n == len(res) - for ch, grid_type in zip(fh_param["channels"]["terran"], fh_param["channels"]["terran_grid_type"]): - assert res[ch].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], - GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["ncols"]) - assert res[ch].dtype == np.float32 - assert res[ch].attrs["calibration"] == "brightness_temperature" - assert res[ch].attrs["units"] == "K" + for ch, grid_type in zip(fh_param["channels"][type_ter], + fh_param["channels"][f"{type_ter}_grid_type"]): + self._get_assert_load(res,ch,grid_type,DICT_CALIBRATION[calibration]) - if ch == "ir_38": - numpy.testing.assert_array_almost_equal(res[ch][-1], np.float32(209.68275)) - numpy.testing.assert_array_almost_equal(res[ch][0], np.float32(1888.8513)) - else: - numpy.testing.assert_array_almost_equal(res[ch], np.float32(209.68275)) @pytest.mark.parametrize("fh_param", [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture")), (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"))]) @@ -599,28 +725,9 @@ def test_orbital_parameters_attr(self, reader_configs, fh_param): "projection_altitude": 35786400.0, } - expected_pos_info_for_filetype = { - "fdhsi": {"1km": {"start_position_row": 1, - "end_position_row": 200, - "segment_height": 200, - "grid_width": 11136}, - "2km": {"start_position_row": 1, - "end_position_row": 100, - "segment_height": 100, - "grid_width": 5568}}, - "hrfi": {"500m": {"start_position_row": 1, - "end_position_row": 400, - "segment_height": 400, - "grid_width": 22272}, - "1km": {"start_position_row": 1, - "end_position_row": 200, - "grid_width": 11136, - "segment_height": 200}} - } - @pytest.mark.parametrize(("fh_param", "expected_pos_info"), [ - (lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"), expected_pos_info_for_filetype["fdhsi"]), - (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"), expected_pos_info_for_filetype["hrfi"]) + (lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"), EXPECTED_POS_INFO_FOR_FILETYPE["fdhsi"]), + (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"), EXPECTED_POS_INFO_FOR_FILETYPE["hrfi"]) ]) def test_get_segment_position_info(self, reader_configs, fh_param, expected_pos_info): """Test the segment position info method.""" @@ -629,21 +736,61 @@ def test_get_segment_position_info(self, reader_configs, fh_param, expected_pos_ segpos_info = filetype_handler.get_segment_position_info() assert segpos_info == expected_pos_info + @mock.patch("satpy.readers.yaml_reader.GEOVariableSegmentYAMLReader") + @pytest.mark.parametrize(("channel", "resolution"), generate_parameters("radiance")) + def test_not_get_segment_info_called_af(self,FakeFCIFileHandlerAF_fixture,reader_configs,channel,resolution): + """Test that checks that the get_segment_position_info has not been called for AF data.""" + with mock.patch("satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler.get_segment_position_info") as gspi: + fh_param = FakeFCIFileHandlerAF_fixture + reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) + reader.load([channel]) + gspi.assert_not_called() + + @pytest.mark.parametrize("calibration", ["index_map","pixel_quality"]) @pytest.mark.parametrize(("fh_param", "expected_res_n"), [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"), 16), (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"), 4)]) - def test_load_index_map(self, reader_configs, fh_param, expected_res_n): - """Test loading of index_map.""" + def test_load_map_and_pixel(self, reader_configs, fh_param, expected_res_n,calibration): + """Test loading of index_map and pixel_quality.""" reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) res = reader.load( - [name + "_index_map" for name in + [f"{name}_{calibration}" for name in fh_param["channels"]["solar"] + fh_param["channels"]["terran"]], pad_data=False) assert expected_res_n == len(res) for ch, grid_type in zip(fh_param["channels"]["solar"] + fh_param["channels"]["terran"], fh_param["channels"]["solar_grid_type"] + fh_param["channels"]["terran_grid_type"]): - assert res[ch + "_index_map"].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], + assert res[f"{ch}_{calibration}"].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["ncols"]) - numpy.testing.assert_array_equal(res[ch + "_index_map"][1, 1], 110) + if calibration == "index_map": + numpy.testing.assert_array_equal(res[f"{ch}_{calibration}"][1, 1], 110) + elif calibration == "pixel_quality": + numpy.testing.assert_array_equal(res[f"{ch}_{calibration}"][1, 1], 3) + assert res[f"{ch}_{calibration}"].attrs["name"] == ch + "_pixel_quality" + + @pytest.mark.parametrize(("calibration", "channel", "resolution"), [ + (calibration, channel, resolution) + for calibration in ["index_map","pixel_quality"] + for channel, resolution in generate_parameters(calibration) + ]) + def test_load_map_and_pixel_af(self,FakeFCIFileHandlerAF_fixture,reader_configs,channel,calibration): + """Test loading with of index_map and pixel_quality for AF files.""" + expected_res_n = 1 + fh_param = FakeFCIFileHandlerAF_fixture + reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) + type_ter = self._get_type_ter_AF(channel) + res = reader.load([f"{name}_{calibration}" + for name in fh_param["channels"][type_ter]], pad_data=False) + assert expected_res_n == len(res) + for ch, grid_type in zip(fh_param["channels"][type_ter], + fh_param["channels"][f"{type_ter}_grid_type"]): + assert res[f"{ch}_{calibration}"].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], + GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["ncols"]) + if calibration == "index_map": + numpy.testing.assert_array_equal(res[f"{ch}_{calibration}"][1, 1], 110) + elif calibration == "pixel_quality": + numpy.testing.assert_array_equal(res[f"{ch}_{calibration}"][1, 1], 3) + assert res[f"{ch}_{calibration}"].attrs["name"] == ch + "_pixel_quality" + @pytest.mark.parametrize("fh_param", [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture")), (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"))]) @@ -662,23 +809,6 @@ def test_load_aux_data(self, reader_configs, fh_param): else: numpy.testing.assert_array_equal(res[aux][1, 1], 10) - @pytest.mark.parametrize(("fh_param", "expected_res_n"), [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture"), 16), - (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"), 4)]) - def test_load_quality_only(self, reader_configs, fh_param, expected_res_n): - """Test that loading quality only works.""" - reader = _get_reader_with_filehandlers(fh_param["filenames"], reader_configs) - res = reader.load( - [name + "_pixel_quality" for name in - fh_param["channels"]["solar"] + fh_param["channels"]["terran"]], pad_data=False) - assert expected_res_n == len(res) - for ch, grid_type in zip(fh_param["channels"]["solar"] + fh_param["channels"]["terran"], - fh_param["channels"]["solar_grid_type"] + - fh_param["channels"]["terran_grid_type"]): - assert res[ch + "_pixel_quality"].shape == (GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["nrows"], - GRID_TYPE_INFO_FOR_TEST_CONTENT[grid_type]["ncols"]) - numpy.testing.assert_array_equal(res[ch + "_pixel_quality"][1, 1], 3) - assert res[ch + "_pixel_quality"].attrs["name"] == ch + "_pixel_quality" - @pytest.mark.parametrize("fh_param", [(lazy_fixture("FakeFCIFileHandlerFDHSI_fixture")), (lazy_fixture("FakeFCIFileHandlerHRFI_fixture"))]) def test_platform_name(self, reader_configs, fh_param): @@ -750,7 +880,7 @@ class TestFCIL1cNCReaderBadData: def test_handling_bad_data_ir(self, reader_configs, caplog): """Test handling of bad IR data.""" with mocked_basefilehandler(FakeFCIFileHandlerWithBadData): - reader = _get_reader_with_filehandlers(_test_filenames["fdhsi"], reader_configs) + reader = _get_reader_with_filehandlers(TEST_FILENAMES["fdhsi"], reader_configs) with caplog.at_level(logging.ERROR): reader.load([make_dataid( name="ir_105", @@ -760,7 +890,7 @@ def test_handling_bad_data_ir(self, reader_configs, caplog): def test_handling_bad_data_vis(self, reader_configs, caplog): """Test handling of bad VIS data.""" with mocked_basefilehandler(FakeFCIFileHandlerWithBadData): - reader = _get_reader_with_filehandlers(_test_filenames["fdhsi"], reader_configs) + reader = _get_reader_with_filehandlers(TEST_FILENAMES["fdhsi"], reader_configs) with caplog.at_level(logging.ERROR): reader.load([make_dataid( name="vis_06", @@ -774,7 +904,7 @@ class TestFCIL1cNCReaderBadDataFromIDPF: def test_handling_bad_earthsun_distance(self, reader_configs): """Test handling of bad earth-sun distance data.""" with mocked_basefilehandler(FakeFCIFileHandlerWithBadIDPFData): - reader = _get_reader_with_filehandlers(_test_filenames["fdhsi"], reader_configs) + reader = _get_reader_with_filehandlers(TEST_FILENAMES["fdhsi"], reader_configs) res = reader.load([make_dataid(name=["vis_06"], calibration="reflectance")], pad_data=False) numpy.testing.assert_array_almost_equal(res["vis_06"], 100 * 15 * 1 * np.pi / 50) @@ -782,7 +912,7 @@ def test_handling_bad_earthsun_distance(self, reader_configs): def test_bad_xy_coords(self, reader_configs): """Test that the geolocation computation is correct.""" with mocked_basefilehandler(FakeFCIFileHandlerWithBadIDPFData): - reader = _get_reader_with_filehandlers(_test_filenames["fdhsi"], reader_configs) + reader = _get_reader_with_filehandlers(TEST_FILENAMES["fdhsi"], reader_configs) res = reader.load(["vis_06"], pad_data=False) area_def = res["vis_06"].attrs["area"] diff --git a/satpy/tests/reader_tests/test_olci_nc.py b/satpy/tests/reader_tests/test_olci_nc.py index 2834578176..fe384b9dc3 100644 --- a/satpy/tests/reader_tests/test_olci_nc.py +++ b/satpy/tests/reader_tests/test_olci_nc.py @@ -268,10 +268,10 @@ def test_bitflags(self): "CLOUD_MARGIN", "CLOUD_AMBIGUOUS", "LOWRW", "LAND"] mask = reduce(np.logical_or, [bflags[item] for item in items]) - expected = np.array([True, False, True, True, True, True, False, - False, True, True, False, False, False, False, - False, False, False, True, False, True, False, - False, False, True, True, False, False, True, + expected = np.array([True, False, True, True, True, True, False, + False, True, True, False, False, False, False, + False, False, False, True, False, True, False, + False, False, True, True, False, False, True, False]) assert all(mask == expected) @@ -335,10 +335,10 @@ def test_bitflags_with_dataarray_without_flags(self): "CLOUD_MARGIN", "CLOUD_AMBIGUOUS", "LOWRW", "LAND"] mask = reduce(np.logical_or, [bflags[item] for item in items]) - expected = np.array([True, False, True, True, True, True, False, - False, True, True, False, False, False, False, - False, False, False, True, False, True, False, - False, False, True, True, False, False, True, + expected = np.array([True, False, True, True, True, True, False, + False, True, True, False, False, False, False, + False, False, False, True, False, True, False, + False, False, True, True, False, False, True, False]) assert all(mask == expected) @@ -367,9 +367,9 @@ def test_bitflags_with_custom_flag_list(self): "CLOUD_MARGIN", "CLOUD_AMBIGUOUS", "LOWRW", "LAND"] mask = reduce(np.logical_or, [bflags[item] for item in items]) - expected = np.array([True, False, True, True, True, True, False, - False, True, True, False, False, False, False, - False, False, False, True, False, True, False, - False, False, True, True, False, False, True, + expected = np.array([True, False, True, True, True, True, False, + False, True, True, False, False, False, False, + False, False, False, True, False, True, False, + False, False, True, True, False, False, True, False]) assert all(mask == expected)