Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply valid_range in MiRS reader when present #1655

Merged
merged 21 commits into from
May 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
d01b1e0
Merge branch 'iss1387' of github.com:joleenf/satpy
joleenf Oct 23, 2020
aa10285
Merge branch 'master' of https://github.com/pytroll/satpy
joleenf Oct 23, 2020
b2f71df
Merge with upstream development
joleenf Nov 24, 2020
c164f61
Merge remote-tracking branch 'refs/remotes/origin/master'
joleenf Mar 11, 2021
f8e1c42
Merge branch 'master' of https://github.com/pytroll/satpy
joleenf Mar 20, 2021
826122a
Add reader_kwarg to omit limb correction on ATMS sensors.
joleenf Mar 21, 2021
79218d7
Fix docstring in mirs reader class
joleenf Mar 22, 2021
1cdbc0c
add check for calling limb correction only when sensor is atms
joleenf Mar 22, 2021
e783a8c
Fix docstring
joleenf Mar 27, 2021
fc610c8
Add a kwarg test for limb_correction.
joleenf Mar 27, 2021
fdba5fe
Remove unused variables and add a noaa-20 test
joleenf Mar 27, 2021
a66e3bc
Fold reader_kwarg test into basic_load
joleenf Mar 28, 2021
6132c67
Simply if/then statement, split parameterize for readability.
joleenf Mar 30, 2021
f4bdbda
Simplify assertion if/then statement for limb_correction.
joleenf Mar 30, 2021
b0140d1
Remove extra line getting the name of the sensor
joleenf Mar 30, 2021
e5038a5
Getting changes to dask_ewa resampling
joleenf Apr 9, 2021
b9b7a69
Merge remote-tracking branch 'upstream/master'
joleenf Apr 14, 2021
9f85942
Use valid range when present
joleenf Apr 30, 2021
d1a0bb5
Check to confirm that valid range is no longer in attributes.
joleenf Apr 30, 2021
582837d
Add a test to check valid range was applied correctly.
joleenf Apr 30, 2021
879fce4
valid_range is inclusive so include both min/max in acceptable values
joleenf Apr 30, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions satpy/readers/mirs.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,17 @@ def _fill_data(self, data_arr, attrs):
data_arr = data_arr.where(data_arr != fill_value, fill_out)
return data_arr, attrs

def _apply_valid_range(self, data_arr, attrs):
# handle valid_range
valid_range = attrs.pop('valid_range', None)
if valid_range is not None:
valid_min, valid_max = valid_range

if valid_min is not None and valid_max is not None:
data_arr = data_arr.where((data_arr >= valid_min) &
(data_arr <= valid_max))
return data_arr, attrs

def get_dataset(self, ds_id, ds_info):
"""Get datasets."""
if 'dependencies' in ds_info.keys():
Expand Down Expand Up @@ -483,6 +494,7 @@ def __getitem__(self, item):
attrs = data.attrs.copy()
data, attrs = self._scale_data(data, attrs)
data, attrs = self._fill_data(data, attrs)
data, attrs = self._apply_valid_range(data, attrs)

# 'Freq' dimension causes issues in other processing
if 'Freq' in data.coords:
Expand Down
19 changes: 17 additions & 2 deletions satpy/tests/reader_tests/test_mirs.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,13 @@ def _check_fill(data_arr):
# we started with float32, it should stay that way
assert data_arr.dtype.type == np.float64

@staticmethod
def _check_valid_range(data_arr, test_valid_range):
# valid_range is popped out of data_arr.attrs when it is applied
assert 'valid_range' not in data_arr.attrs
assert data_arr.data.min() >= test_valid_range[0]
assert data_arr.data.max() <= test_valid_range[1]

@staticmethod
def _check_attrs(data_arr, platform_name):
attrs = data_arr.attrs
Expand Down Expand Up @@ -286,12 +293,20 @@ def test_basic_load(self, filenames, loadable_ids,
loaded_data_arrs = r.load(loadable_ids)
assert loaded_data_arrs

for data_id, data_arr in loaded_data_arrs.items():
if data_id['name'] not in ['latitude', 'longitude']:
test_data = fake_open_dataset(filenames[0])
for _data_id, data_arr in loaded_data_arrs.items():
var_name = data_arr.attrs["name"]
if var_name not in ['latitude', 'longitude']:
self._check_area(data_arr)
self._check_fill(data_arr)
self._check_attrs(data_arr, platform_name)

input_fake_data = test_data['BT'] if "btemp" in var_name \
else test_data[var_name]
if "valid_range" in input_fake_data.attrs:
valid_range = input_fake_data.attrs["valid_range"]
self._check_valid_range(data_arr, valid_range)

sensor = data_arr.attrs['sensor']
if reader_kw.get('limb_correction', True) and sensor == 'atms':
fd.assert_called()
Expand Down