Skip to content

Commit

Permalink
Merge pull request #2707 from djhoese/bugfix-viirs-edr-dimrename
Browse files Browse the repository at this point in the history
Fix 'viirs_edr' renaming two sets of dimensions to the same names
  • Loading branch information
djhoese committed Jan 5, 2024
2 parents 442325d + ad08950 commit d7f0af6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 deletions.
24 changes: 15 additions & 9 deletions satpy/readers/viirs_edr.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import logging
from typing import Iterable

import dask.array as da
import xarray as xr

from satpy import DataID
Expand Down Expand Up @@ -93,11 +94,6 @@ def __init__(self, filename, filename_info, filetype_info):
"Along_Scan_750m": -1,
"Along_Track_750m": row_chunks_m,
})
if "Columns" in self.nc.dims:
self.nc = self.nc.rename({"Columns": "x", "Rows": "y"})
elif "Along_Track_375m" in self.nc.dims:
self.nc = self.nc.rename({"Along_Scan_375m": "x", "Along_Track_375m": "y"})
self.nc = self.nc.rename({"Along_Scan_750m": "x", "Along_Track_750m": "y"})

# For some reason, no 'standard_name' is defined in some netCDF files, so
# here we manually make the definitions.
Expand Down Expand Up @@ -134,7 +130,8 @@ def get_dataset(self, dataset_id: DataID, info: dict) -> xr.DataArray:
# delete the coordinates here so the base reader doesn't try to
# make a SwathDefinition
data_arr = data_arr.reset_coords(drop=True)
return data_arr

return self._rename_dims(data_arr)

def _mask_invalid(self, data_arr: xr.DataArray, ds_info: dict) -> xr.DataArray:
# xarray auto mask and scale handled any fills from the file
Expand All @@ -152,6 +149,16 @@ def _decode_flag_meanings(data_arr: xr.DataArray):
# only handle CF-standard flag meanings
data_arr.attrs["flag_meanings"] = [flag for flag in data_arr.attrs["flag_meanings"].split(" ")]

@staticmethod
def _rename_dims(data_arr: xr.DataArray) -> xr.DataArray:
if "Columns" in data_arr.dims:
data_arr = data_arr.rename({"Columns": "x", "Rows": "y"})
if "Along_Track_375m" in data_arr.dims:
data_arr = data_arr.rename({"Along_Scan_375m": "x", "Along_Track_375m": "y"})
if "Along_Track_750m" in data_arr.dims:
data_arr = data_arr.rename({"Along_Scan_750m": "x", "Along_Track_750m": "y"})
return data_arr

@property
def start_time(self):
"""Get first date/time when observations were recorded."""
Expand Down Expand Up @@ -277,7 +284,7 @@ def _mask_invalid(self, data_arr: xr.DataArray, ds_info: dict) -> xr.DataArray:
new_data_arr = new_data_arr.where(good_mask)
return new_data_arr

def _get_veg_index_good_mask(self) -> xr.DataArray:
def _get_veg_index_good_mask(self) -> da.Array:
# each mask array should be TRUE when pixels are UNACCEPTABLE
qf1 = self.nc["QF1 Surface Reflectance"]
has_sun_glint = (qf1 & 0b11000000) > 0
Expand Down Expand Up @@ -306,8 +313,7 @@ def _get_veg_index_good_mask(self) -> xr.DataArray:
)
# upscale from M-band resolution to I-band resolution
bad_mask_iband_dask = bad_mask.data.repeat(2, axis=1).repeat(2, axis=0)
good_mask_iband = xr.DataArray(~bad_mask_iband_dask, dims=qf1.dims)
return good_mask_iband
return ~bad_mask_iband_dask


class VIIRSLSTHandler(VIIRSJRRFileHandler):
Expand Down
1 change: 1 addition & 0 deletions satpy/tests/reader_tests/test_viirs_edr.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ def _create_surf_refl_variables() -> dict[str, xr.DataArray]:
"750m Surface Reflectance Band M1": xr.DataArray(m_data, dims=m_dims, attrs=sr_attrs),
}
for data_arr in data_arrs.values():
data_arr.encoding["chunksizes"] = data_arr.shape
if "scale_factor" not in data_arr.attrs:
continue
data_arr.encoding["dtype"] = np.int16
Expand Down

0 comments on commit d7f0af6

Please sign in to comment.