diff --git a/doc/source/examples/vii_l1b_nc.rst b/doc/source/examples/vii_l1b_nc.rst index 17e0b58c7b..ea5dfc543c 100644 --- a/doc/source/examples/vii_l1b_nc.rst +++ b/doc/source/examples/vii_l1b_nc.rst @@ -1,7 +1,7 @@ -EPS-SG VII netCDF Example +EPS-SG METimage netCDF Example =============================== -Satpy includes a reader for the EPS-SG Visible and Infrared Imager (VII) +Satpy includes a reader for the EPS-SG METimage (VII) Level 1b data. The following Python code snippet shows an example on how to use Satpy to read a channel and resample and save the image over the European area. @@ -20,7 +20,7 @@ Satpy to read a channel and resample and save the image over the European area. filenames = glob.glob('/path/to/VII/data/W_xx-eumetsat-darmstadt,SAT,SGA1-VII-1B-RAD_C_EUMT_20191007055100*') # create a VII scene from the selected granule(s) - scn = Scene(filenames=filenames, reader='vii_l1b_nc') + scn = Scene(filenames=filenames, reader='metimage_l1b_nc') # print available dataset names for this scene print(scn.available_dataset_names()) diff --git a/satpy/etc/composites/vii.yaml b/satpy/etc/composites/metimage.yaml similarity index 99% rename from satpy/etc/composites/vii.yaml rename to satpy/etc/composites/metimage.yaml index 1543ca852f..0032f47e34 100644 --- a/satpy/etc/composites/vii.yaml +++ b/satpy/etc/composites/metimage.yaml @@ -1,4 +1,4 @@ -sensor_name: visir/vii +sensor_name: visir/metimage modifiers: nir_reflectance: modifier: !!python/name:satpy.modifiers.NIRReflectance diff --git a/satpy/etc/readers/vii_l1b_nc.yaml b/satpy/etc/readers/metimage_l1b_nc.yaml similarity index 95% rename from satpy/etc/readers/vii_l1b_nc.yaml rename to satpy/etc/readers/metimage_l1b_nc.yaml index 67a98ef46b..89c919a294 100644 --- a/satpy/etc/readers/vii_l1b_nc.yaml +++ b/satpy/etc/readers/metimage_l1b_nc.yaml @@ -1,25 +1,23 @@ reader: - name: vii_l1b_nc - short_name: VII L1B RAD NetCDF4 - long_name: EPS-SG Visual Infrafred Imager (VII) Level 1B Radiance data in netCDF4 format + name: metimage_l1b_nc + short_name: METimage (VII) L1B RAD NetCDF4 + long_name: EPS-SG METimage (VII) Level 1B Radiance data in netCDF4 format description: > - Reader for EUMETSAT EPS-SG Visual Infrared Imager Level 1B Radiance files in NetCDF4 format per FS V4A. + Reader for EUMETSAT EPS-SG METimage (former name VII) Level 1B Radiance files in NetCDF4 format. status: Beta supports_fsspec: false - sensors: [vii] + sensors: [metimage] reader: !!python/name:satpy.readers.core.yaml_reader.FileYAMLReader file_types: - # EUMETSAT EPSG-SG Visual Infrared Imager Level 1B Radiance files in NetCDF4 format nc_vii_l1b_rad: - file_reader: !!python/name:satpy.readers.vii_l1b_nc.ViiL1bNCFileHandler + file_reader: !!python/name:satpy.readers.metimage_l1b_nc.METimageL1BNCFileHandler file_patterns: ['W_XX-EUMETSAT-Darmstadt,SAT,{spacecraft_name:s}-VII-1B-RAD_C_EUMT_{creation_time:%Y%m%d%H%M%S}_{mission_type:s}_{environment:s}_{sensing_start_time:%Y%m%d%H%M%S}_{sensing_end_time:%Y%m%d%H%M%S}_{disposition_mode:s}_{processing_mode:s}_T__.nc', 'W_XX-EUMETSAT-Darmstadt,SAT,{spacecraft_name:s}-VII-1B-RAD_C_EUMT_{creation_time:%Y%m%d%H%M%S}_{mission_type:s}_{environment:s}_{sensing_start_time:%Y%m%d%H%M%S}_{sensing_end_time:%Y%m%d%H%M%S}_{disposition_mode:s}_{processing_mode:s}____.nc'] cached_longitude: data/measurement_data/longitude cached_latitude: data/measurement_data/latitude datasets: - # --- Coordinates --- lon_tie_points: name: lon_tie_points @@ -109,7 +107,12 @@ datasets: file_type: nc_vii_l1b_rad file_key: data/measurement_data/vii_763 coordinates: [lat_pixels, lon_pixels] - calibration: [reflectance, radiance] + calibration: + reflectance: + standard_name: toa_bidirectional_reflectance + units: "%" + radiance: + standard_name: toa_outgoing_radiance_per_unit_wavelength chan_solar_index: 4 wavelength: [0.75695, 0.7627, 0.76845] diff --git a/satpy/etc/readers/vii_l2_nc.yaml b/satpy/etc/readers/metimage_l2_nc.yaml similarity index 91% rename from satpy/etc/readers/vii_l2_nc.yaml rename to satpy/etc/readers/metimage_l2_nc.yaml index 037da505b9..703266bb02 100644 --- a/satpy/etc/readers/vii_l2_nc.yaml +++ b/satpy/etc/readers/metimage_l2_nc.yaml @@ -1,56 +1,56 @@ reader: - name: vii_l2_nc - short_name: VII L2 NetCDF4 - long_name: EPS-SG Visual Infrared Imager (VII) Level 2 data in netCDF4 format + name: metimage_l2_nc + short_name: METimage (VII) L2 NetCDF4 + long_name: EPS-SG METimage (VII) Level 2 data in netCDF4 format description: > - Reader for EUMETSAT EPSG-SG Visual Infrared Imager Level 2 files in NetCDF4 format. + Reader for EUMETSAT EPS-SG METimage (former name VII) Level 2 files in NetCDF4 format. status: Beta supports_fsspec: false - sensors: [vii] + sensors: [metimage] reader: !!python/name:satpy.readers.core.yaml_reader.FileYAMLReader file_types: - # EUMETSAT EPSG-SG Visual Infrared Imager Level 2 Cloud Mask files in NetCDF4 format + # Cloud Mask files in NetCDF4 format nc_vii_l2_cld: - file_reader: !!python/name:satpy.readers.vii_l2_nc.ViiL2NCFileHandler + file_reader: !!python/name:satpy.readers.metimage_l2_nc.METimageL2NCFileHandler file_patterns: ['W_XX-EUMETSAT-Darmstadt,SAT,{spacecraft_name:s}-VII-02-CLD_C_EUMT_{creation_time:%Y%m%d%H%M%S}_{mission_type:s}_{environment:s}_{sensing_start_time:%Y%m%d%H%M%S}_{sensing_end_time:%Y%m%d%H%M%S}_{disposition_mode:s}_{processing_mode:s}____.nc'] cached_longitude: data/measurement_data/longitude cached_latitude: data/measurement_data/latitude orthorect: False - # EUMETSAT EPSG-SG Visual Infrared Imager Level 2 Cloud Top Pressure (using the Oxygen-A Band) files in NetCDF4 format + # Cloud Top Pressure (using the Oxygen-A Band) files in NetCDF4 format nc_vii_l2_ctp: - file_reader: !!python/name:satpy.readers.vii_l2_nc.ViiL2NCFileHandler + file_reader: !!python/name:satpy.readers.metimage_l2_nc.METimageL2NCFileHandler file_patterns: ['W_XX-EUMETSAT-Darmstadt,SAT,{spacecraft_name:s}-VII-02-CTP_C_EUMT_{creation_time:%Y%m%d%H%M%S}_{mission_type:s}_{environment:s}_{sensing_start_time:%Y%m%d%H%M%S}_{sensing_end_time:%Y%m%d%H%M%S}_{disposition_mode:s}_{processing_mode:s}____.nc'] cached_longitude: data/measurement_data/longitude cached_latitude: data/measurement_data/latitude - # EUMETSAT EPSG-SG Visual Infrared Imager Level 2 Cloud Mask and First Guess Cloud Properties files in NetCDF4 format + # Cloud Mask and First Guess Cloud Properties files in NetCDF4 format nc_vii_l2_icm: - file_reader: !!python/name:satpy.readers.vii_l2_nc.ViiL2NCFileHandler + file_reader: !!python/name:satpy.readers.metimage_l2_nc.METimageL2NCFileHandler file_patterns: ['W_XX-EUMETSAT-Darmstadt,SAT,{spacecraft_name:s}-VII-02-ICM_C_EUMT_{creation_time:%Y%m%d%H%M%S}_{mission_type:s}_{environment:s}_{sensing_start_time:%Y%m%d%H%M%S}_{sensing_end_time:%Y%m%d%H%M%S}_{disposition_mode:s}_{processing_mode:s}____.nc'] cached_longitude: data/measurement_data/longitude cached_latitude: data/measurement_data/latitude - # EUMETSAT EPSG-SG Visual Infrared Imager Level 2 Optimal Cloud Analysis files in NetCDF4 format + # Optimal Cloud Analysis files in NetCDF4 format nc_vii_l2_oca: - file_reader: !!python/name:satpy.readers.vii_l2_nc.ViiL2NCFileHandler + file_reader: !!python/name:satpy.readers.metimage_l2_nc.METimageL2NCFileHandler file_patterns: ['W_XX-EUMETSAT-Darmstadt,SAT,{spacecraft_name:s}-VII-02-OCA_C_EUMT_{creation_time:%Y%m%d%H%M%S}_{mission_type:s}_{environment:s}_{sensing_start_time:%Y%m%d%H%M%S}_{sensing_end_time:%Y%m%d%H%M%S}_{disposition_mode:s}_{processing_mode:s}____.nc'] cached_longitude: data/measurement_data/longitude cached_latitude: data/measurement_data/latitude - # EUMETSAT EPSG-SG Visual Infrared Imager Level 2 Total Precipitable Water (from VII visible/near-infrared) files in NetCDF4 format + # Total Precipitable Water (from visible/near-infrared) files in NetCDF4 format nc_vii_l2_wvv: - file_reader: !!python/name:satpy.readers.vii_l2_nc.ViiL2NCFileHandler + file_reader: !!python/name:satpy.readers.metimage_l2_nc.METimageL2NCFileHandler file_patterns: ['W_XX-EUMETSAT-Darmstadt,SAT,{spacecraft_name:s}-VII-02-WVV_C_EUMT_{creation_time:%Y%m%d%H%M%S}_{mission_type:s}_{environment:s}_{sensing_start_time:%Y%m%d%H%M%S}_{sensing_end_time:%Y%m%d%H%M%S}_{disposition_mode:s}_{processing_mode:s}____.nc'] cached_longitude: data/measurement_data/longitude cached_latitude: data/measurement_data/latitude interpolate: False orthorect: False - # EUMETSAT EPSG-SG Visual Infrared Imager Level 2 Total Precipitable Water (from VII thermal infra-red) files in NetCDF4 format + # Total Precipitable Water (from thermal infra-red) files in NetCDF4 format nc_vii_l2_wvi: - file_reader: !!python/name:satpy.readers.vii_l2_nc.ViiL2NCFileHandler + file_reader: !!python/name:satpy.readers.metimage_l2_nc.METimageL2NCFileHandler file_patterns: ['W_XX-EUMETSAT-Darmstadt,SAT,{spacecraft_name:s}-VII-02-WVI_C_EUMT_{creation_time:%Y%m%d%H%M%S}_{mission_type:s}_{environment:s}_{sensing_start_time:%Y%m%d%H%M%S}_{sensing_end_time:%Y%m%d%H%M%S}_{disposition_mode:s}_{processing_mode:s}____.nc'] cached_longitude: data/measurement_data/longitude cached_latitude: data/measurement_data/latitude @@ -58,7 +58,6 @@ orthorect: False datasets: - # --- Coordinates --- # TODO Coordinates on tie points are kept for test purposes lon_tie_points: diff --git a/satpy/readers/core/config.py b/satpy/readers/core/config.py index 34abc56d0a..28dc25372b 100644 --- a/satpy/readers/core/config.py +++ b/satpy/readers/core/config.py @@ -30,7 +30,12 @@ LOG = logging.getLogger(__name__) # Old Name -> New Name -PENDING_OLD_READER_NAMES = {"fci_l1c_fdhsi": "fci_l1c_nc", "viirs_l2_cloud_mask_nc": "viirs_edr"} +PENDING_OLD_READER_NAMES = { + "fci_l1c_fdhsi": "fci_l1c_nc", + "viirs_l2_cloud_mask_nc": "viirs_edr", + "vii_l1b_nc": "metimage_l1b_nc", + "vii_l2_nc": "metimage_l2_nc", +} OLD_READER_NAMES: dict[str, str] = { "slstr_l2": "ghrsst_l2", } diff --git a/satpy/readers/core/vii.py b/satpy/readers/core/metimage.py similarity index 86% rename from satpy/readers/core/vii.py rename to satpy/readers/core/metimage.py index 154519bb4d..56b3110479 100644 --- a/satpy/readers/core/vii.py +++ b/satpy/readers/core/metimage.py @@ -16,8 +16,13 @@ # You should have received a copy of the GNU General Public License # along with satpy. If not, see . -"""Utilities for the management of VII products.""" +"""Utilities for the management of METimage (VII) products.""" +PLATFORM_NAME_TRANSLATE = { + "SGA1": "Metop-SG-A1", + "SGA2": "Metop-SG-A2", + "SGA3": "Metop-SG-A3" +} # PLANCK COEFFICIENTS FOR CALIBRATION AS DEFINED BY EUMETSAT C1 = 1.191062e+8 # [W/m2·sr-1·µm4] diff --git a/satpy/readers/core/vii_nc.py b/satpy/readers/core/metimage_nc.py similarity index 91% rename from satpy/readers/core/vii_nc.py rename to satpy/readers/core/metimage_nc.py index 92aaa1c014..dbd4f8eb43 100644 --- a/satpy/readers/core/vii_nc.py +++ b/satpy/readers/core/metimage_nc.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with satpy. If not, see . -"""EUMETSAT EPS-SG Visible/Infrared Imager (VII) readers base class.""" +"""EUMETSAT EPS-SG METimage (VII) readers base class.""" import datetime as dt @@ -25,14 +25,14 @@ import xarray as xr from geotiepoints.viiinterpolator import tie_points_geo_interpolation, tie_points_interpolation +from satpy.readers.core.metimage import PLATFORM_NAME_TRANSLATE, SCAN_ALT_TIE_POINTS, TIE_POINTS_FACTOR from satpy.readers.core.netcdf import NetCDF4FileHandler -from satpy.readers.core.vii import SCAN_ALT_TIE_POINTS, TIE_POINTS_FACTOR logger = logging.getLogger(__name__) -class ViiNCBaseFileHandler(NetCDF4FileHandler): - """Base reader class for VII products in netCDF format. +class METimageNCBaseFileHandler(NetCDF4FileHandler): + """Base reader class for METimage (VII) products in netCDF format. Args: filename (str): File to read @@ -113,6 +113,10 @@ def get_dataset(self, dataset_id, dataset_info): if orthorect_data_name is not None: variable = self._perform_orthorectification(variable, orthorect_data_name) + # wrapping longitude between -180 and 180 degrees + if variable.name == "longitude": + variable = self.wrap_longitude(variable) + # Manage the attributes of the dataset variable.attrs.setdefault("units", None) @@ -121,6 +125,12 @@ def get_dataset(self, dataset_id, dataset_info): variable = self._standardize_dims(variable) return variable + @staticmethod + def wrap_longitude(longitude_array): + """Wrap longitude between -180 and 180 degrees.""" + longitude_array = ((longitude_array + 180) % 360) - 180 + return longitude_array + @staticmethod def _perform_interpolation(variable) -> xr.DataArray: """Perform the interpolation from tie points to pixel points. @@ -199,6 +209,7 @@ def _get_global_attributes(self): "filename_start_time": self.filename_info["sensing_start_time"], "filename_end_time": self.filename_info["sensing_end_time"], "platform_name": self.spacecraft_name, + "rows_per_scan": 24 } # Add a "quality_group" item to the dictionary with all the variables and attributes @@ -240,15 +251,15 @@ def end_time(self): @property def spacecraft_name(self): """Return spacecraft name.""" - return self["/attr/spacecraft"] + return PLATFORM_NAME_TRANSLATE.get(self["/attr/spacecraft"], self["/attr/spacecraft"]) @property def sensor(self): """Return sensor.""" - return self["/attr/instrument"] + return "metimage" @property def ssp_lon(self): """Return subsatellite point longitude.""" - # This parameter is not applicable to VII + # This parameter is not applicable to METimage return None diff --git a/satpy/readers/vii_l1b_nc.py b/satpy/readers/metimage_l1b_nc.py similarity index 86% rename from satpy/readers/vii_l1b_nc.py rename to satpy/readers/metimage_l1b_nc.py index 8587378747..527ea6edaf 100644 --- a/satpy/readers/vii_l1b_nc.py +++ b/satpy/readers/metimage_l1b_nc.py @@ -15,14 +15,15 @@ # # You should have received a copy of the GNU General Public License # along with satpy. If not, see . -"""EUMETSAT EPS-SG Visible/Infrared Imager (VII) Level 1B products reader. +"""EUMETSAT EPS-SG METimage (VII) Level 1B products reader. -The ``vii_l1b_nc`` reader reads and calibrates EPS-SG VII L1b image data in netCDF format. The format is explained -in the `EPS-SG VII Level 1B Product Format Specification V4A`_. +The ``metimage_l1b_nc`` reader reads and calibrates EPS-SG METimage L1b image data in netCDF format. The format is +explained in the `EPS-SG VII Level 1B Product Format Specification V4A`_. +Note that METimage is the official name of the instrument, while VII is the old name used during the mission (design). +The name VII is currently still used in the filenames as well as in official system documentation +(e.g. the format specs). -This version is applicable for the vii test data V2 to be released in Jan 2022. - -.. _EPS-SG VII Level 1B Product Format Specification V4A: https://www.eumetsat.int/media/44393 +.. _EPS-SG VII Level 1B Product Format Specification V4A: https://user.eumetsat.int/s3/eup-strapi-media/EPS_SG_VII_Level_1_B_Product_Format_Specification_654c0b397a.pdf """ @@ -31,14 +32,14 @@ import numpy as np import xarray as xr -from satpy.readers.core.vii import C1, C2, MEAN_EARTH_RADIUS -from satpy.readers.core.vii_nc import ViiNCBaseFileHandler +from satpy.readers.core.metimage import C1, C2, MEAN_EARTH_RADIUS +from satpy.readers.core.metimage_nc import METimageNCBaseFileHandler logger = logging.getLogger(__name__) -class ViiL1bNCFileHandler(ViiNCBaseFileHandler): - """Reader class for VII L1B products in netCDF format.""" +class METimageL1BNCFileHandler(METimageNCBaseFileHandler): + """Reader class for METimage (VII) L1B products in netCDF format.""" def __init__(self, filename, filename_info, filetype_info, **kwargs): """Read the calibration data and prepare the class for dataset reading.""" diff --git a/satpy/readers/vii_l2_nc.py b/satpy/readers/metimage_l2_nc.py similarity index 92% rename from satpy/readers/vii_l2_nc.py rename to satpy/readers/metimage_l2_nc.py index fbc5a8e057..3e0579e1a2 100644 --- a/satpy/readers/vii_l2_nc.py +++ b/satpy/readers/metimage_l2_nc.py @@ -22,12 +22,12 @@ import xarray as xr -from satpy.readers.core.vii_nc import ViiNCBaseFileHandler +from satpy.readers.core.metimage_nc import METimageNCBaseFileHandler logger = logging.getLogger(__name__) -class ViiL2NCFileHandler(ViiNCBaseFileHandler): +class METimageL2NCFileHandler(METimageNCBaseFileHandler): """Reader class for VII L2 products in netCDF format.""" def _perform_orthorectification(self, variable: xr.DataArray, orthorect_data_name: str) -> xr.DataArray: diff --git a/satpy/readers/vii_base_nc.py b/satpy/readers/vii_base_nc.py deleted file mode 100644 index 9970835308..0000000000 --- a/satpy/readers/vii_base_nc.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2014-2025 Satpy developers -# -# This file is part of satpy. -# -# satpy is free software: you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation, either version 3 of the License, or (at your option) any later -# version. -# -# satpy is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# satpy. If not, see . -"""EUMETSAT EPS-SG Visible/Infrared Imager (VII) readers base class.""" - -from __future__ import annotations - -from typing import Any - -from satpy.utils import _import_and_warn_new_location - - -def __getattr__(name: str) -> Any: - new_module = "satpy.readers.core.vii_nc" - - return _import_and_warn_new_location(new_module, name) diff --git a/satpy/readers/vii_utils.py b/satpy/readers/vii_utils.py deleted file mode 100644 index c037167ca8..0000000000 --- a/satpy/readers/vii_utils.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2014-2025 Satpy developers -# -# This file is part of satpy. -# -# satpy is free software: you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation, either version 3 of the License, or (at your option) any later -# version. -# -# satpy is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# satpy. If not, see . -"""Utilities for the management of VII products.""" - -from __future__ import annotations - -from typing import Any - -from satpy.utils import _import_and_warn_new_location - - -def __getattr__(name: str) -> Any: - new_module = "satpy.readers.core.vii" - - return _import_and_warn_new_location(new_module, name) diff --git a/satpy/tests/reader_tests/test_vii_base_nc.py b/satpy/tests/reader_tests/test_metimage_base_nc.py similarity index 91% rename from satpy/tests/reader_tests/test_vii_base_nc.py rename to satpy/tests/reader_tests/test_metimage_base_nc.py index 9948a135c8..dc5016fee0 100644 --- a/satpy/tests/reader_tests/test_vii_base_nc.py +++ b/satpy/tests/reader_tests/test_metimage_base_nc.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with satpy. If not, see . -"""The vii_base_nc reader tests package.""" +"""The metimage_base_nc reader tests package.""" import datetime import os @@ -29,15 +29,15 @@ import xarray as xr from netCDF4 import Dataset -from satpy.readers.core.vii_nc import SCAN_ALT_TIE_POINTS, TIE_POINTS_FACTOR, ViiNCBaseFileHandler +from satpy.readers.core.metimage_nc import SCAN_ALT_TIE_POINTS, TIE_POINTS_FACTOR, METimageNCBaseFileHandler TEST_FILE = "test_file_vii_base_nc.nc" -class TestViiNCBaseFileHandler(unittest.TestCase): - """Test the ViiNCBaseFileHandler reader.""" +class TestMETimageNCBaseFileHandler(unittest.TestCase): + """Test the METimageNCBaseFileHandler reader.""" - @mock.patch("satpy.readers.core.vii_nc.ViiNCBaseFileHandler._perform_geo_interpolation") + @mock.patch("satpy.readers.core.metimage_nc.METimageNCBaseFileHandler._perform_geo_interpolation") def setUp(self, pgi_): """Set up the test.""" # Easiest way to test the reader is to create a test netCDF file on the fly @@ -48,7 +48,7 @@ def setUp(self, pgi_): # Add global attributes nc.sensing_start_time_utc = "20170920173040.888" nc.sensing_end_time_utc = "20170920174117.555" - nc.spacecraft = "test_spacecraft" + nc.spacecraft = "SGA1" nc.instrument = "test_instrument" # Create data group @@ -72,7 +72,7 @@ def setUp(self, pgi_): lon = g1_1.createVariable("longitude", np.float32, dimensions=("num_tie_points_act", "num_tie_points_alt")) - lon[:] = 100. + lon[:] = 200. lat = g1_1.createVariable("latitude", np.float32, dimensions=("num_tie_points_act", "num_tie_points_alt")) @@ -99,8 +99,8 @@ def setUp(self, pgi_): var[:] = [7.0, 8.0] # Create longitude and latitude "interpolated" arrays - interp_longitude = xr.DataArray(np.ones((10, 100))) - interp_latitude = xr.DataArray(np.ones((10, 100)) * 2.) + interp_longitude = xr.DataArray(np.ones((10, 100)) * 250, name="longitude") + interp_latitude = xr.DataArray(np.ones((10, 100)) * 2., name="latitude") pgi_.return_value = (interp_longitude, interp_latitude) # Filename info valid for all readers @@ -115,7 +115,7 @@ def setUp(self, pgi_): self.filename_info = filename_info # Create a reader - self.reader = ViiNCBaseFileHandler( + self.reader = METimageNCBaseFileHandler( filename=self.test_file_name, filename_info=filename_info, filetype_info={ @@ -126,7 +126,7 @@ def setUp(self, pgi_): # Create a second reader where orthorectification and interpolation are inhibited # by means of the filetype_info flags - self.reader_2 = ViiNCBaseFileHandler( + self.reader_2 = METimageNCBaseFileHandler( filename=self.test_file_name, filename_info=filename_info, filetype_info={ @@ -140,7 +140,7 @@ def setUp(self, pgi_): # Create a third reader without defining cached latitude and longitude # by means of the filetype_info flags - self.reader_3 = ViiNCBaseFileHandler( + self.reader_3 = METimageNCBaseFileHandler( filename=self.test_file_name, filename_info=filename_info, filetype_info={}, @@ -166,8 +166,9 @@ def test_file_reading(self): hour=17, minute=41, second=17, microsecond=555000) assert self.reader.end_time == expected_end_time - assert self.reader.spacecraft_name == "test_spacecraft" - assert self.reader.sensor == "test_instrument" + assert self.reader.spacecraft_name == "Metop-SG-A1" + # the netCDF instrument attribute is VII, so we hardcode metimage instead + assert self.reader.sensor == "metimage" assert self.reader.ssp_lon is None # Checks that the global attributes are correctly read @@ -175,14 +176,14 @@ def test_file_reading(self): "filename": self.test_file_name, "start_time": expected_start_time, "end_time": expected_end_time, - "spacecraft_name": "test_spacecraft", + "spacecraft_name": "Metop-SG-A1", "ssp_lon": None, - "sensor": "test_instrument", + "sensor": "metimage", "filename_start_time": datetime.datetime(year=2017, month=9, day=20, hour=12, minute=30, second=30), "filename_end_time": datetime.datetime(year=2017, month=9, day=20, hour=18, minute=30, second=50), - "platform_name": "test_spacecraft", + "platform_name": "Metop-SG-A1", "quality_group": { "duration_of_product": 1., "duration_of_data_present": 2., @@ -190,7 +191,8 @@ def test_file_reading(self): "duration_of_data_degraded": 4., "gap_start_time_utc": (5., 6.), "gap_end_time_utc": (7., 8.) - } + }, + "rows_per_scan": 24 } global_attributes = self.reader._get_global_attributes() @@ -238,7 +240,7 @@ def test_start_end_time_additional_formats(self): nc.sensing_start_time_utc = start_str nc.sensing_end_time_utc = end_str - reader = ViiNCBaseFileHandler( + reader = METimageNCBaseFileHandler( filename=self.test_file_name, filename_info=self.filename_info, filetype_info={}, @@ -253,7 +255,7 @@ def test_bad_start_end_time(self): nc.sensing_start_time_utc = "201709201730" nc.sensing_end_time_utc = "201709201740" - reader = ViiNCBaseFileHandler( + reader = METimageNCBaseFileHandler( filename=self.test_file_name, filename_info=self.filename_info, filetype_info={}, @@ -264,8 +266,8 @@ def test_bad_start_end_time(self): with pytest.raises(ValueError, match="Unrecognized datetime format"): reader.end_time - @mock.patch("satpy.readers.core.vii_nc.tie_points_interpolation") - @mock.patch("satpy.readers.core.vii_nc.tie_points_geo_interpolation") + @mock.patch("satpy.readers.core.metimage_nc.tie_points_interpolation") + @mock.patch("satpy.readers.core.metimage_nc.tie_points_geo_interpolation") def test_functions(self, tpgi_, tpi_): """Test the functions.""" with pytest.raises(NotImplementedError): @@ -358,9 +360,9 @@ def test_standardize_dims(self): assert out_variable.dims == ("y", "x") assert out_variable.attrs["key_1"] == "value_lat_1" - @mock.patch("satpy.readers.core.vii_nc.ViiNCBaseFileHandler._perform_calibration") - @mock.patch("satpy.readers.core.vii_nc.ViiNCBaseFileHandler._perform_interpolation") - @mock.patch("satpy.readers.core.vii_nc.ViiNCBaseFileHandler._perform_orthorectification") + @mock.patch("satpy.readers.core.metimage_nc.METimageNCBaseFileHandler._perform_calibration") + @mock.patch("satpy.readers.core.metimage_nc.METimageNCBaseFileHandler._perform_interpolation") + @mock.patch("satpy.readers.core.metimage_nc.METimageNCBaseFileHandler._perform_orthorectification") def test_dataset(self, po_, pi_, pc_): """Test the execution of the get_dataset function.""" # Checks the correct execution of the get_dataset function with a valid file_key @@ -408,7 +410,7 @@ def test_dataset(self, po_, pi_, pc_): "interpolate": True}) pc_.assert_not_called() pi_.assert_not_called() - assert longitude[0, 0] == 1.0 + assert longitude[0, 0] == -110.0 # -180 + (250-180) # Checks the correct execution of the get_dataset function with a 'cached_latitude' file_key latitude = self.reader.get_dataset(None, {"file_key": "cached_latitude", @@ -442,7 +444,7 @@ def test_dataset(self, po_, pi_, pc_): # Checks the correct execution of the get_dataset function with a 'cached_longitude' file_key longitude = self.reader_2.get_dataset(None, {"file_key": "cached_longitude", "calibration": None}) - assert longitude[0, 0] == 100.0 + assert longitude[0, 0] == -160.0 # -180 + (200-180) # Checks the correct execution of the get_dataset function with a 'cached_longitude' file_key # in a reader without defined longitude diff --git a/satpy/tests/reader_tests/test_vii_l1b_nc.py b/satpy/tests/reader_tests/test_metimage_l1b_nc.py similarity index 94% rename from satpy/tests/reader_tests/test_vii_l1b_nc.py rename to satpy/tests/reader_tests/test_metimage_l1b_nc.py index fbef4298d5..c82333b175 100644 --- a/satpy/tests/reader_tests/test_vii_l1b_nc.py +++ b/satpy/tests/reader_tests/test_metimage_l1b_nc.py @@ -15,9 +15,9 @@ # # You should have received a copy of the GNU General Public License # along with satpy. If not, see . -"""The vii_l1b_nc reader tests package. +"""The metimage_l1b_nc reader tests package. -This version tests the readers for VII test data V2 as per PFS V4A. +This version tests the readers for METimage. """ @@ -33,14 +33,14 @@ import xarray as xr from netCDF4 import Dataset -from satpy.readers.core.vii import MEAN_EARTH_RADIUS -from satpy.readers.vii_l1b_nc import ViiL1bNCFileHandler +from satpy.readers.core.metimage import MEAN_EARTH_RADIUS +from satpy.readers.metimage_l1b_nc import METimageL1BNCFileHandler TEST_FILE = "test_file_vii_l1b_nc.nc" -class TestViiL1bNCFileHandler(unittest.TestCase): - """Test the ViiL1bNCFileHandler reader.""" +class TestMETimageL1bNCFileHandler(unittest.TestCase): + """Test the METimageL1BNCFileHandler reader.""" def setUp(self): """Set up the test.""" @@ -85,7 +85,7 @@ def setUp(self): delta_lat = g1_2.createVariable("delta_lat", np.float32, dimensions=("num_lines", "num_pixels")) delta_lat[:] = 1.0 - self.reader = ViiL1bNCFileHandler( + self.reader = METimageL1BNCFileHandler( filename=self.test_file_name, filename_info={ "creation_time": datetime.datetime(year=2017, month=9, day=22, diff --git a/satpy/tests/reader_tests/test_vii_l2_nc.py b/satpy/tests/reader_tests/test_metimage_l2_nc.py similarity index 93% rename from satpy/tests/reader_tests/test_vii_l2_nc.py rename to satpy/tests/reader_tests/test_metimage_l2_nc.py index 8348470d0f..81ef5340fc 100644 --- a/satpy/tests/reader_tests/test_vii_l2_nc.py +++ b/satpy/tests/reader_tests/test_metimage_l2_nc.py @@ -28,13 +28,13 @@ import xarray as xr from netCDF4 import Dataset -from satpy.readers.vii_l2_nc import ViiL2NCFileHandler +from satpy.readers.metimage_l2_nc import METimageL2NCFileHandler TEST_FILE = "test_file_vii_l2_nc.nc" -class TestViiL2NCFileHandler(unittest.TestCase): - """Test the ViiL2NCFileHandler reader.""" +class TestMETimageL2NCFileHandler(unittest.TestCase): + """Test the METimageL2NCFileHandler reader.""" def setUp(self): """Set up the test.""" @@ -57,7 +57,7 @@ def setUp(self): delta_lat = g1_2.createVariable("delta_lat", np.float32, dimensions=("num_lines", "num_pixels")) delta_lat[:] = 0.1 - self.reader = ViiL2NCFileHandler( + self.reader = METimageL2NCFileHandler( filename=self.test_file_name, filename_info={ "creation_time": datetime.datetime(year=2017, month=9, day=22, diff --git a/satpy/tests/reader_tests/test_vii_utils.py b/satpy/tests/reader_tests/test_metimage_utils.py similarity index 70% rename from satpy/tests/reader_tests/test_vii_utils.py rename to satpy/tests/reader_tests/test_metimage_utils.py index 7d1a13c216..cbd626db09 100644 --- a/satpy/tests/reader_tests/test_vii_utils.py +++ b/satpy/tests/reader_tests/test_metimage_utils.py @@ -20,7 +20,7 @@ import unittest -import satpy.readers.core.vii +import satpy.readers.core.metimage # Constants to be tested C1 = 1.191062e+8 @@ -30,14 +30,14 @@ MEAN_EARTH_RADIUS = 6371008.7714 -class TestViiUtils(unittest.TestCase): +class TestMETimageUtils(unittest.TestCase): """Test the vii_utils module.""" def test_constants(self): """Test the constant values.""" # Test the value of the constants - assert satpy.readers.core.vii.C1 == C1 - assert satpy.readers.core.vii.C2 == C2 - assert satpy.readers.core.vii.TIE_POINTS_FACTOR == TIE_POINTS_FACTOR - assert satpy.readers.core.vii.SCAN_ALT_TIE_POINTS == SCAN_ALT_TIE_POINTS - assert satpy.readers.core.vii.MEAN_EARTH_RADIUS == MEAN_EARTH_RADIUS + assert satpy.readers.core.metimage.C1 == C1 + assert satpy.readers.core.metimage.C2 == C2 + assert satpy.readers.core.metimage.TIE_POINTS_FACTOR == TIE_POINTS_FACTOR + assert satpy.readers.core.metimage.SCAN_ALT_TIE_POINTS == SCAN_ALT_TIE_POINTS + assert satpy.readers.core.metimage.MEAN_EARTH_RADIUS == MEAN_EARTH_RADIUS diff --git a/satpy/tests/reader_tests/test_vii_wv_nc.py b/satpy/tests/reader_tests/test_metimage_wv_nc.py similarity index 94% rename from satpy/tests/reader_tests/test_vii_wv_nc.py rename to satpy/tests/reader_tests/test_metimage_wv_nc.py index 63c5604187..d0132f93ad 100644 --- a/satpy/tests/reader_tests/test_vii_wv_nc.py +++ b/satpy/tests/reader_tests/test_metimage_wv_nc.py @@ -28,13 +28,13 @@ import xarray as xr from netCDF4 import Dataset -from satpy.readers.vii_l2_nc import ViiL2NCFileHandler +from satpy.readers.metimage_l2_nc import METimageL2NCFileHandler TEST_FILE = "test_file_vii_wv_nc.nc" -class TestViiL2NCFileHandler(unittest.TestCase): - """Test the ViiL2NCFileHandler reader.""" +class TestMETimageL2NCFileHandler(unittest.TestCase): + """Test the METimageL2NCFileHandler reader.""" def setUp(self): """Set up the test.""" @@ -57,7 +57,7 @@ def setUp(self): delta_lat = g1_2.createVariable("delta_lat", np.float32, dimensions=("num_points_alt", "num_points_act")) delta_lat[:] = 0.1 - self.reader = ViiL2NCFileHandler( + self.reader = METimageL2NCFileHandler( filename=self.test_file_name, filename_info={ "creation_time": datetime.datetime(year=2017, month=9, day=22, diff --git a/satpy/tests/reader_tests/test_moved_reader_bases.py b/satpy/tests/reader_tests/test_moved_reader_bases.py index 88d792748a..345cbeab10 100644 --- a/satpy/tests/reader_tests/test_moved_reader_bases.py +++ b/satpy/tests/reader_tests/test_moved_reader_bases.py @@ -175,18 +175,6 @@ def test_seviri_base_warns(name): getattr(seviri_base, name) -@pytest.mark.parametrize("name", - ["ViiNCBaseFileHandler", - ] - ) -def test_vii_base_nc_warns(name): - """Test that there's a warning when importing from VII NetCDF4 base from the old location.""" - from satpy.readers import vii_base_nc - - with pytest.warns(UserWarning, match=".*has been moved.*"): - getattr(vii_base_nc, name) - - @pytest.mark.parametrize("name", ["JPSS_SDR_FileHandler", "DATASET_KEYS", @@ -202,22 +190,6 @@ def test_viirs_atms_sdr_warns(name): getattr(viirs_atms_sdr_base, name) -@pytest.mark.parametrize("name", - ["C1", - "C2", - "TIE_POINTS_FACTOR", - "SCAN_ALT_TIE_POINTS", - "MEAN_EARTH_RADIUS", - ] - ) -def test_vii_utils_warns(name): - """Test that there's a warning when importing from VII utils from the old location.""" - from satpy.readers import vii_utils - - with pytest.warns(UserWarning, match=".*has been moved.*"): - getattr(vii_utils, name) - - @pytest.mark.parametrize("name", ["listify_string", "load_yaml_configs",