Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 9 additions & 0 deletions satpy/readers/core/seviri.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,15 @@
scn['IR_108']['y'] = mi
scn['IR_108'].sel(time=np.datetime64('2019-03-01T12:06:13.052000000'))

Computing this coordinate can add a performance penalty for some readers.
For ``seviri_l1b_native`` it can be disabled with:

.. code-block:: python

scene = satpy.Scene(filenames,
reader='seviri_l1b_native',
reader_kwargs={'include_scanline_acq_time': False})

* HRIT and Native readers can add raw metadata from the file header, such
as calibration coefficients, to dataset attributes. Use the reader keyword
argument ``include_raw_metadata``. Here's an example for extracting
Expand Down
14 changes: 12 additions & 2 deletions satpy/readers/seviri_l1b_native.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,11 +173,19 @@ class NativeMSGFileHandler(BaseFileHandler):

See :mod:`satpy.readers.core.seviri`.

**Scanline acquisition time**

By default, datasets include the ``acq_time`` coordinate (mean acquisition
time per scanline). For native files this requires additional work and can
slow down loading. If not needed, disable it with
``reader_kwargs={'include_scanline_acq_time': False}``.

"""

def __init__(self, filename, filename_info, filetype_info,
calib_mode="nominal", fill_disk=False, ext_calib_coefs=None,
include_raw_metadata=False, mda_max_array_size=100):
include_raw_metadata=False, mda_max_array_size=100,
include_scanline_acq_time=True):
"""Initialize the reader."""
super(NativeMSGFileHandler, self).__init__(filename,
filename_info,
Expand All @@ -188,6 +196,7 @@ def __init__(self, filename, filename_info, filetype_info,
self.fill_disk = fill_disk
self.include_raw_metadata = include_raw_metadata
self.mda_max_array_size = mda_max_array_size
self.include_scanline_acq_time = include_scanline_acq_time

# Declare required variables.
self.header = {}
Expand Down Expand Up @@ -583,7 +592,8 @@ def get_dataset(self, dataset_id, dataset_info):
return None

dataset = self.calibrate(xarr, dataset_id)
self._add_scanline_acq_time(dataset, dataset_id)
if self.include_scanline_acq_time:
self._add_scanline_acq_time(dataset, dataset_id)
self._update_attrs(dataset, dataset_info)

if self.fill_disk and not (dataset_id["name"] != "HRV" and self.mda["is_full_disk"]):
Expand Down
19 changes: 19 additions & 0 deletions satpy/tests/reader_tests/test_seviri_l1b_native.py
Original file line number Diff line number Diff line change
Expand Up @@ -935,6 +935,7 @@ def file_handler(self):
fh.ext_calib_coefs = {}
fh.include_raw_metadata = False
fh.mda_max_array_size = 100
fh.include_scanline_acq_time = True
return fh

@staticmethod
Expand Down Expand Up @@ -1007,6 +1008,24 @@ def test_get_dataset(self, file_handler):
assert file_handler.end_time == dt.datetime(2006, 1, 1, 12, 30, 0)
assert_attrs_equal(xarr.attrs, expected.attrs, tolerance=1e-4)

def test_get_dataset_without_scanline_acq_time(self, file_handler):
"""Test optional skip of scanline acquisition-time coordinate."""
dataset_id = make_dataid(
name="VIS006",
resolution=3000,
calibration="counts"
)
dataset_info = {
"units": "1",
"wavelength": (1, 2, 3),
"standard_name": "counts"
}
file_handler.include_scanline_acq_time = False
with mock.patch.object(file_handler, "_add_scanline_acq_time") as mocked_add:
xarr = file_handler.get_dataset(dataset_id, dataset_info)
mocked_add.assert_not_called()
assert "acq_time" not in xarr.coords

def test_time(self, file_handler):
"""Test start/end nominal/observation time handling."""
assert dt.datetime(2006, 1, 1, 12, 15, 9, 304888) == file_handler.observation_start_time
Expand Down