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

Add reader for FIDUCEO MVIRI FCDR data #1427

Merged
merged 47 commits into from Dec 8, 2020
Merged
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
f8699ac
Add reader for FIDUCEO MVIRI FCDR data
sfinkens Nov 6, 2020
f04b3bd
Add example filenames to YAML
sfinkens Nov 6, 2020
b784bdf
Add dataset info to dataset attributes
sfinkens Nov 6, 2020
061d58c
Update documentation
sfinkens Nov 6, 2020
b8a0c2a
Add calibration reference
sfinkens Nov 6, 2020
0b6e49d
Raise KeyError in case of invalid calibration
sfinkens Nov 6, 2020
0640ea3
Consider only direct illumination for reflectance
sfinkens Nov 18, 2020
f375f7f
Make sure projection longitude is a float
sfinkens Nov 18, 2020
1314497
Make sure sun earth dist corr factor is scalar
sfinkens Nov 18, 2020
bfe6787
Fix orbital parameters
sfinkens Nov 18, 2020
3477641
Fix tiepoint interpolation
sfinkens Nov 18, 2020
585f971
Define IR/WV netCDF keys in the baseclass
sfinkens Nov 18, 2020
6a1a768
Mask VIS channel only
sfinkens Nov 18, 2020
6983faf
Add more angle datasets
sfinkens Nov 19, 2020
6168bb4
Add unit tests
sfinkens Nov 19, 2020
499b528
Fix standard names
sfinkens Nov 19, 2020
599d542
Add test for area defs
sfinkens Nov 19, 2020
e9f7f0e
Make sure returned datasets are float32
sfinkens Nov 19, 2020
48716a2
Add test for ang2fac
sfinkens Nov 19, 2020
61bd85a
Fix angle resolution
sfinkens Nov 19, 2020
0438f2a
Refactor IR/WV coefficient fetching
sfinkens Nov 19, 2020
6759ad8
Test file pattern matching
sfinkens Nov 19, 2020
62bfd93
Add MVIRI reader to overview table
sfinkens Nov 19, 2020
bb90e34
Factorize coefficient fetching
sfinkens Nov 20, 2020
abb53b2
Resole a couple of test misses
sfinkens Nov 20, 2020
84cff72
Simplify angle datasets
sfinkens Nov 20, 2020
81d6bee
Fix docstring
sfinkens Nov 20, 2020
4f957f0
Simplify angle interpolation
sfinkens Nov 20, 2020
cdeee73
Fix VIS masking
sfinkens Nov 23, 2020
ffabcc3
Remove ancillary_variables attribute
sfinkens Nov 23, 2020
15d465e
Fix coordinates of high resolution datasets
sfinkens Nov 23, 2020
20d6c18
Make coordinate fix more robust
sfinkens Nov 23, 2020
da3df9b
Simplify masking
sfinkens Nov 23, 2020
e40dd3b
Fix documentation
sfinkens Nov 23, 2020
8633801
Add test for warning
sfinkens Nov 23, 2020
22aa270
Use lru_cache instead of custom cache
sfinkens Nov 24, 2020
2c74ec1
Clarify method name
sfinkens Nov 24, 2020
35877dc
Rename fixtures to avoid arguments being masked
sfinkens Nov 24, 2020
eb2ebf5
Simplify get_dataset
sfinkens Nov 24, 2020
6f51ca9
Fix geos_area test
sfinkens Nov 24, 2020
180929b
Reduce complexity of the file handler base class
sfinkens Nov 25, 2020
72042bf
Factorize again to reduce complexity even more
sfinkens Nov 25, 2020
bc7b749
Remove unnecessary else
sfinkens Nov 25, 2020
1b50469
Resolve more test misses
sfinkens Nov 25, 2020
ba1ee85
Add wrapper class for accessing the dataset
sfinkens Nov 25, 2020
4bebf0b
Test re-assignment of dataset coordinates
sfinkens Nov 26, 2020
c5b5331
Skip abstract method for coverage report
sfinkens Nov 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions doc/source/api/satpy.readers.rst
Expand Up @@ -364,6 +364,14 @@ satpy.readers.msi\_safe module
:undoc-members:
:show-inheritance:

satpy.readers.mviri\_l1b\_fiduceo\_nc module
--------------------------------------------

.. automodule:: satpy.readers.mviri_l1b_fiduceo_nc
:members:
:undoc-members:
:show-inheritance:

satpy.readers.netcdf\_utils module
----------------------------------

Expand Down
3 changes: 3 additions & 0 deletions doc/source/index.rst
Expand Up @@ -93,6 +93,9 @@ the base Satpy installation.
* - MSG (Meteosat 8 to 11) L2 products in GRIB2 format
- `seviri_l2_grib`
- In development, CLM, OCA and FIR products supported
* - MFG (Meteosat 2 to 7) MVIRI data in netCDF format (FIDUCEO FCDR)
- `mviri_l1b_fiduceo_nc`
- Beta
* - Himawari 8 and 9 AHI data in HSD format
- `ahi_hsd`
- Nominal
Expand Down
135 changes: 135 additions & 0 deletions satpy/etc/readers/mviri_l1b_fiduceo_nc.yaml
@@ -0,0 +1,135 @@
# References:
# - MFG User Handbook
# - FIDUCEO MVIRI FCDR Product User Guide

reader:
name: mviri_l1b_fiduceo_nc
short_name: FIDUCEO MVIRI FCDR
long_name: >
Fundamental Climate Data Record of re-calibrated Level 1.5 Infrared, Water Vapour, and Visible radiances
from the Meteosat Visible Infra-Red Imager (MVIRI) instrument onboard the Meteosat First Generation satellites
description: >
Reader for FIDUCEO MVIRI FCDR data in netCDF format. For documentation see
http://doi.org/10.15770/EUM_SEC_CLM_0009 .
sensors: [mviri]
default_channels: [VIS, WV, IR]
reader: !!python/name:satpy.readers.yaml_reader.GEOFlippableFileYAMLReader

file_types:
nc_easy:
file_reader: !!python/name:satpy.readers.mviri_l1b_fiduceo_nc.FiduceoMviriEasyFcdrFileHandler
file_patterns: [
'FIDUCEO_FCDR_{level}_{sensor}_{platform}-{projection_longitude:f}_{start_time:%Y%m%d%H%M}_{end_time:%Y%m%d%H%M}_EASY_{processor_version}_{format_version}.nc'
# Example: FIDUCEO_FCDR_L15_MVIRI_MET7-57.0_201701201000_201701201030_EASY_v2.6_fv3.1.nc
]
nc_full:
file_reader: !!python/name:satpy.readers.mviri_l1b_fiduceo_nc.FiduceoMviriFullFcdrFileHandler
file_patterns: [
'FIDUCEO_FCDR_{level}_{sensor}_{platform}-{projection_longitude:f}_{start_time:%Y%m%d%H%M}_{end_time:%Y%m%d%H%M}_FULL_{processor_version}_{format_version}.nc'
# Example: FIDUCEO_FCDR_L15_MVIRI_MET7-57.0_201701201000_201701201030_FULL_v2.6_fv3.1.nc
]

datasets:
VIS:
name: VIS
resolution: 2250
wavelength: [0.5, 0.7, 0.9]
calibration:
reflectance:
standard_name: toa_bidirectional_reflectance
units: "%"
radiance:
# Confirmed by EUM: No (1/wavenumber) here. Hence no standard name.
units: W m-2 sr-1
counts:
standard_name: counts
units: count
file_type: [nc_easy, nc_full]

WV:
name: WV
resolution: 4500
wavelength: [5.7, 6.4, 7.1]
calibration:
brightness_temperature:
standard_name: toa_brightness_temperature
units: K
radiance:
standard_name: toa_outgoing_radiance_per_unit_wavenumber
units: mW m-2 sr-1 (cm-1)-1
counts:
standard_name: counts
units: count
file_type: [nc_easy, nc_full]

IR:
name: IR
resolution: 4500
wavelength: [10.5, 11.5, 12.5]
calibration:
brightness_temperature:
standard_name: toa_brightness_temperature
units: K
radiance:
standard_name: toa_outgoing_radiance_per_unit_wavenumber
units: mW m-2 sr-1 (cm-1)-1
counts:
standard_name: counts
units: count
file_type: [nc_easy, nc_full]

quality_pixel_bitmask:
name: quality_pixel_bitmask
resolution: 2250
file_type: [nc_easy, nc_full]

data_quality_bitmask:
name: data_quality_bitmask
resolution: 2250
file_type: [nc_easy, nc_full]

u_independent_toa_bidirectional_reflectance:
name: u_independent_toa_bidirectional_reflectance
long_name: "independent uncertainty per pixel"
units: "%"
resolution: 2250
file_type: [nc_easy]

u_structured_toa_bidirectional_reflectance:
name: u_structured_toa_bidirectional_reflectance
long_name: "structured uncertainty per pixel"
units: "%"
resolution: 2250
file_type: [nc_easy]

solar_zenith_angle:
name: solar_zenith_angle
standard_name: solar_zenith_angle
long_name: "Solar zenith angle"
units: degree
resolution: [2250, 4500]
file_type: [nc_easy, nc_full]

solar_azimuth_angle:
name: solar_azimuth_angle
standard_name: solar_azimuth_angle
long_name: "Solar azimuth angle"
units: degree
resolution: [2250, 4500]
file_type: [nc_easy, nc_full]

satellite_zenith_angle:
name: satellite_zenith_angle
standard_name: sensor_zenith_angle
long_name: "Satellite zenith angle"
units: degree
resolution: [2250, 4500]
file_type: [nc_easy, nc_full]

satellite_azimuth_angle:
name: satellite_azimuth_angle
standard_name: sensor_azimuth_angle
long_name: "Satellite azimuth angle"
units: degree
resolution: [2250, 4500]
file_type: [nc_easy, nc_full]
21 changes: 21 additions & 0 deletions satpy/readers/_geos_area.py
Expand Up @@ -145,3 +145,24 @@ def get_area_definition(pdict, a_ext):
a_ext)

return a_def


def sampling_to_lfac_cfac(sampling):
"""Convert angular sampling to line/column scaling factor (aka LFAC/CFAC).

Reference: `MSG Ground Segment LRIT HRIT Mission Specific Implementation`_,
Appendix E.2.


.. _MSG Ground Segment LRIT HRIT Mission Specific Implementation: http://www.eumetsat.int/\
website/wcm/idc/idcplg?IdcService=GET_FILE&dDocName=PDF_TEN_05057_SPE_MSG_LRIT_HRI\
&RevisionSelectionMethod=LatestReleased&Rendition=Web

Args:
sampling: float
Angular sampling (rad)

Returns:
Line/column scaling factor (deg-1)
"""
return 2.0 ** 16 / np.rad2deg(sampling)