diff --git a/satpy/readers/hy2_scat_l2b_h5.py b/satpy/readers/hy2_scat_l2b_h5.py index 6bdb8f88a4..64520bae9a 100644 --- a/satpy/readers/hy2_scat_l2b_h5.py +++ b/satpy/readers/hy2_scat_l2b_h5.py @@ -107,11 +107,13 @@ def get_dataset(self, key, info): else: dim_map = {curr_dim: new_dim for curr_dim, new_dim in zip(data.dims, dims)} data = data.rename(dim_map) - data = self._mask_data(key['name'], data) - data = self._scale_data(key['name'], data) + data = self._mask_data(data) + data = self._scale_data(data) if key['name'] in 'wvc_lon': + _attrs = data.attrs data = xr.where(data > 180, data - 360., data) + data.attrs.update(_attrs) data.attrs.update(info) data.attrs.update(self.get_metadata()) data.attrs.update(self.get_variable_metadata()) @@ -120,13 +122,14 @@ def get_dataset(self, key, info): return data - def _scale_data(self, key_name, data): - return data * self[key_name].attrs['scale_factor'] + self[key_name].attrs['add_offset'] + def _scale_data(self, data): + return data * data.attrs['scale_factor'] + data.attrs['add_offset'] - def _mask_data(self, key_name, data): - data = xr.where(data == self[key_name].attrs['fill_value'], np.nan, data) - - valid_range = self[key_name].attrs['valid_range'] + def _mask_data(self, data): + _attrs = data.attrs + valid_range = data.attrs['valid_range'] + data = xr.where(data == data.attrs['fill_value'], np.nan, data) data = xr.where(data < valid_range[0], np.nan, data) data = xr.where(data > valid_range[1], np.nan, data) + data.attrs.update(_attrs) return data diff --git a/satpy/tests/reader_tests/test_hy2_scat_l2b_h5.py b/satpy/tests/reader_tests/test_hy2_scat_l2b_h5.py index 1664c46ed4..b2a5d4d3e1 100644 --- a/satpy/tests/reader_tests/test_hy2_scat_l2b_h5.py +++ b/satpy/tests/reader_tests/test_hy2_scat_l2b_h5.py @@ -40,6 +40,13 @@ class FakeHDF5FileHandler2(FakeHDF5FileHandler): """Swap-in HDF5 File Handler.""" + def __getitem__(self, key): + """Return copy of dataarray to prevent manipulating attributes in the original.""" + val = self.file_content[key] + if isinstance(val, xr.core.dataarray.DataArray): + val = val.copy() + return val + def _get_geo_data(self, num_rows, num_cols): geo = { 'wvc_lon': @@ -498,3 +505,20 @@ def test_reading_attrs_nsoas(self): with self.assertRaises(KeyError): self.assertEqual(res['wvc_lon'].attrs['L2B_Number_WVC_cells'], 10) self.assertEqual(res['wvc_lon'].attrs['L2B_Expected_WVC_Cells'], 10) + + def test_properties(self): + """Test platform_name.""" + from datetime import datetime + + from satpy.readers import load_reader + filenames = [ + 'W_XX-EUMETSAT-Darmstadt,SURFACE+SATELLITE,HY2B+SM_C_EUMP_20200326------_07077_o_250_l2b.h5', ] + + reader = load_reader(self.reader_configs) + files = reader.select_files_from_pathnames(filenames) + reader.create_filehandlers(files) + # Make sure we have some files + res = reader.load(['wvc_lon']) + self.assertEqual(res['wvc_lon'].platform_name, 'HY-2B') + self.assertEqual(res['wvc_lon'].start_time, datetime(2020, 3, 26, 1, 11, 7)) + self.assertEqual(res['wvc_lon'].end_time, datetime(2020, 3, 26, 2, 55, 40))