satpy.readers.goes_imager_nc module
Reader for GOES 8-15 imager data in netCDF format.
Supports netCDF files from both NOAA-CLASS and EUMETSAT.
NOAA-CLASS
GOES-Imager netCDF files from NOAA-CLASS contain detector counts alongside latitude and longitude coordinates.
Note
If ordering files via NOAA CLASS, select 16 bits/pixel.
Note
Some essential information are missing in the netCDF files:
Subsatellite point
Calibration coefficients
Detector-scanline assignment, i.e. information about which scanline was recorded by which detector
Items 1. and 2. are not critical because the images are geo-located and NOAA provides static calibration coefficients ([VIS], [IR]). The detector-scanline assignment however cannot be reconstructed properly. This is where an approximation has to be applied (see below).
Oversampling
GOES-Imager oversamples the viewed scene in E-W direction by a factor of 1.75: IR/VIS pixels are 112/28 urad on a side, but the instrument samples every 64/16 urad in E-W direction (see [BOOK-I] and [BOOK-N]). That means pixels are actually overlapping on the ground. This cannot be represented by a pyresample area definition.
For full disk images it is possible to estimate an area definition with uniform
sampling where pixels don’t overlap. This can be used for resampling and is
available via scene[dataset].attrs["area_def_uni"]
. The pixel size is derived
from altitude and N-S sampling angle. The area extent is based on the maximum
scanning angles at the earth’s limb.
Calibration
Calibration is performed according to [VIS] and [IR], but with an average calibration coefficient applied to all detectors in a certain channel. The reason for and impact of this approximation is described below.
The GOES imager simultaneously records multiple scanlines per sweep using multiple detectors per channel. The VIS channel has 8 detectors, the IR channels have 1-2 detectors (see e.g. Figures 3-5a/b, 3-6a/b and 3-7/a-b in [BOOK-N]). Each detector has its own calibration coefficients, so in order to perform an accurate calibration, the detector-scanline assignment is needed.
In theory it is known which scanline was recorded by which detector (VIS: 5,6,7,8,1,2,3,4; IR: 1,2). However, the plate on which the detectors are mounted flexes due to thermal gradients in the instrument which leads to a N-S shift of +/- 8 visible or +/- 2 IR pixels. This shift is compensated in the GVAR scan formation process, but in a way which is hard to reconstruct properly afterwards. See [GVAR], section 3.2.1. for details.
Since the calibration coefficients of the detectors in a certain channel only differ slightly, a workaround is to calibrate each scanline with the average calibration coefficients. A worst case estimate of the introduced error can be obtained by calibrating all possible counts with both the minimum and the maximum calibration coefficients and computing the difference. The maximum differences are:
GOES-8 |
||
---|---|---|
Channel |
Diff |
Unit |
00_7 |
0.0 |
% # Counts are normalized |
03_9 |
0.187 |
K |
06_8 |
0.0 |
K # only one detector |
10_7 |
0.106 |
K |
12_0 |
0.036 |
K |
GOES-9 |
||
---|---|---|
Channel |
Diff |
Unit |
00_7 |
0.0 |
% # Counts are normalized |
03_9 |
0.0 |
K # coefs identical |
06_8 |
0.0 |
K # only one detector |
10_7 |
0.021 |
K |
12_0 |
0.006 |
K |
GOES-10 |
||
---|---|---|
Channel |
Diff |
Unit |
00_7 |
1.05 |
% |
03_9 |
0.0 |
K # coefs identical |
06_8 |
0.0 |
K # only one detector |
10_7 |
0.013 |
K |
12_0 |
0.004 |
K |
GOES-11 |
||
---|---|---|
Channel |
Diff |
Unit |
00_7 |
1.25 |
% |
03_9 |
0.0 |
K # coefs identical |
06_8 |
0.0 |
K # only one detector |
10_7 |
0.0 |
K # coefs identical |
12_0 |
0.065 |
K |
GOES-12 |
||
---|---|---|
Channel |
Diff |
Unit |
00_7 |
0.8 |
% |
03_9 |
0.0 |
K # coefs identical |
06_5 |
0.044 |
K |
10_7 |
0.0 |
K # coefs identical |
13_3 |
0.0 |
K # only one detector |
GOES-13 |
||
---|---|---|
Channel |
Diff |
Unit |
00_7 |
1.31 |
% |
03_9 |
0.0 |
K # coefs identical |
06_5 |
0.085 |
K |
10_7 |
0.008 |
K |
13_3 |
0.0 |
K # only one detector |
GOES-14 |
||
---|---|---|
Channel |
Diff |
Unit |
00_7 |
0.66 |
% |
03_9 |
0.0 |
K # coefs identical |
06_5 |
0.043 |
K |
10_7 |
0.006 |
K |
13_3 |
0.003 |
K |
GOES-15 |
||
---|---|---|
Channel |
Diff |
Unit |
00_7 |
0.86 |
% |
03_9 |
0.0 |
K # coefs identical |
06_5 |
0.02 |
K |
10_7 |
0.009 |
K |
13_3 |
0.008 |
K |
EUMETSAT
During tandem operations of GOES-15 and GOES-17, EUMETSAT distributed a variant of this dataset with the following differences:
The geolocation is in a separate file, used for all bands
VIS data is calibrated to Albedo (or reflectance)
IR data is calibrated to radiance.
VIS data is downsampled to IR resolution (4km)
File name differs also slightly
Data is received via EumetCast
References:
[GVAR] GVAR transmission format
[BOOK-N] GOES-N databook
[BOOK-I] GOES-I databook (broken)
[IR] Conversion of GVAR Infrared Data to Scene Radiance or Temperature
[VIS] Calibration of the Visible Channels of the GOES Imagers and Sounders
[GLOSSARY] GVAR_IMG Glossary
[SCHED-W] GOES-15 Routine Imager Schedule
[SCHED-E] Optimized GOES-East Routine Imager Schedule
- class satpy.readers.goes_imager_nc.AreaDefEstimator(platform_name, channel)[source]
Bases:
object
Estimate area definition for GOES-Imager.
Create the instance.
- get_area_def_with_uniform_sampling(projection_longitude)[source]
Get area definition with uniform sampling.
The area definition is based on geometry and instrument properties: Pixel size is derived from altitude and N-S sampling angle. Area extent is based on the maximum scanning angles at the limb of the earth.
- class satpy.readers.goes_imager_nc.GOESCoefficientReader(ir_url, vis_url)[source]
Bases:
object
Read GOES Imager calibration coefficients from NOAA reference HTMLs.
Init the coef reader.
- gvar_channels = {'GOES-10': {'00_7': 1, '03_9': 2, '06_8': 3, '10_7': 4, '12_0': 5}, 'GOES-11': {'00_7': 1, '03_9': 2, '06_8': 3, '10_7': 4, '12_0': 5}, 'GOES-12': {'00_7': 1, '03_9': 2, '06_5': 3, '10_7': 4, '13_3': 6}, 'GOES-13': {'00_7': 1, '03_9': 2, '06_5': 3, '10_7': 4, '13_3': 6}, 'GOES-14': {'00_7': 1, '03_9': 2, '06_5': 3, '10_7': 4, '13_3': 6}, 'GOES-15': {'00_7': 1, '03_9': 2, '06_5': 3, '10_7': 4, '13_3': 6}, 'GOES-8': {'00_7': 1, '03_9': 2, '06_8': 3, '10_7': 4, '12_0': 5}, 'GOES-9': {'00_7': 1, '03_9': 2, '06_8': 3, '10_7': 4, '12_0': 5}}
- ir_tables = {'GOES-10': '2-3', 'GOES-11': '2-4', 'GOES-12': '2-5a', 'GOES-13': '2-6', 'GOES-14': '2-7c', 'GOES-15': '2-8b', 'GOES-8': '2-1', 'GOES-9': '2-2'}
- vis_tables = {'GOES-10': 'Table 2.', 'GOES-11': 'Table 3.', 'GOES-12': 'Table 4.', 'GOES-13': 'Table 5.', 'GOES-14': 'Table 6.', 'GOES-15': 'Table 7.', 'GOES-8': 'Table 1.', 'GOES-9': 'Table 1.'}
- class satpy.readers.goes_imager_nc.GOESEUMGEONCFileHandler(filename, filename_info, filetype_info)[source]
Bases:
BaseFileHandler
File handler for GOES Geolocation data in EUM netCDF format.
Initialize the reader.
- property resolution
Specify the spatial resolution of the dataset.
In the EUMETSAT format VIS data is downsampled to IR resolution (4km).
- class satpy.readers.goes_imager_nc.GOESEUMNCFileHandler(filename, filename_info, filetype_info, geo_data)[source]
Bases:
GOESNCBaseFileHandler
File handler for GOES Imager data in EUM netCDF format.
TODO: Remove datasets which are not available in the file (counts, VIS radiance) via available_datasets() -> See #434
Initialize the reader.
- ir_sectors = {(566, 3464): 'Southern Hemisphere (GOES-East)', (1062, 2760): 'Southern Hemisphere (GOES-West)', (1354, 3312): 'Northern Hemisphere (GOES-West)', (1826, 3464): 'Northern Hemisphere (GOES-East)', (2704, 5208): 'Full Disc'}
- vis_sectors = {(566, 3464): 'Southern Hemisphere (GOES-East)', (1062, 2760): 'Southern Hemisphere (GOES-West)', (1354, 3312): 'Northern Hemisphere (GOES-West)', (1826, 3464): 'Northern Hemisphere (GOES-East)', (2704, 5208): 'Full Disc'}
- class satpy.readers.goes_imager_nc.GOESNCBaseFileHandler(filename, filename_info, filetype_info, geo_data=None)[source]
Bases:
BaseFileHandler
File handler for GOES Imager data in netCDF format.
Initialize the reader.
- _calibrate(radiance, coefs, channel, calibration)[source]
Convert radiance to reflectance or brightness temperature.
- static _calibrate_ir(radiance, coefs)[source]
Convert IR radiance to brightness temperature.
Reference: [IR]
- Parameters:
radiance – Radiance [mW m-2 cm-1 sr-1]
coefs – Dictionary of calibration coefficients. Keys: n: The channel’s central wavenumber [cm-1] a: Offset [K] b: Slope [1] btmin: Minimum brightness temperature threshold [K] btmax: Maximum brightness temperature threshold [K]
- Returns:
Brightness temperature [K]
- static _calibrate_vis(radiance, k)[source]
Convert VIS radiance to reflectance.
Note: Angle of incident radiation and annual variation of the earth-sun distance is not taken into account. A value of 100% corresponds to the radiance of a perfectly reflecting diffuse surface illuminated at normal incidence when the sun is at its annual-average distance from the Earth.
TODO: Take angle of incident radiation (cos sza) and annual variation of the earth-sun distance into account.
Reference: [VIS]
- Parameters:
radiance – Radiance [mW m-2 cm-1 sr-1]
k – pi / H, where H is the solar spectral irradiance at annual-average sun-earth distance, averaged over the spectral response function of the detector). Units of k: [m2 um sr W-1]
- Returns:
Reflectance [%]
- static _get_nadir_pixel(earth_mask, sector)[source]
Find the nadir pixel.
- Parameters:
earth_mask – Mask identifying earth and space pixels
sector – Specifies the scanned sector
- Returns:
nadir row, nadir column
- static _ircounts2radiance(counts, scale, offset)[source]
Convert IR counts to radiance.
Reference: [IR].
- Parameters:
counts – Raw detector counts
scale – Scale [mW-1 m2 cm sr]
offset – Offset [1]
- Returns:
Radiance [mW m-2 cm-1 sr-1]
- static _viscounts2radiance(counts, slope, offset)[source]
Convert VIS counts to radiance.
References: [VIS]
- Parameters:
counts – Raw detector counts
slope – Slope [W m-2 um-1 sr-1]
offset – Offset [W m-2 um-1 sr-1]
- Returns:
Radiance [W m-2 um-1 sr-1]
- available_datasets(configured_datasets=None)[source]
Update information for or add datasets provided by this file.
If this file handler can load a dataset then it will supplement the dataset info with the resolution and possibly coordinate datasets needed to load it. Otherwise it will continue passing the dataset information down the chain.
See
satpy.readers.file_handlers.BaseFileHandler.available_datasets()
for details.
- property end_time
End timestamp of the dataset.
- get_shape(key, info)[source]
Get the shape of the data.
- Returns:
Number of lines, number of columns
- abstract property ir_sectors
Get the ir sectors.
- property meta
Derive metadata from the coordinates.
- property resolution
Specify the spatial resolution of the dataset.
Channel 13_3’s spatial resolution changes from one platform to another while the wavelength and file format remain the same. In order to avoid multiple YAML reader definitions for the same file format, read the channel’s resolution from the file instead of defining it in the YAML dataset. This information will then be used by the YAML reader to complement the YAML definition of the dataset.
- Returns:
Spatial resolution in kilometers
- property start_time
Start timestamp of the dataset.
- abstract property vis_sectors
Get the vis sectors.
- yaw_flip_sampling_distance = 10
- class satpy.readers.goes_imager_nc.GOESNCFileHandler(filename, filename_info, filetype_info)[source]
Bases:
GOESNCBaseFileHandler
File handler for GOES Imager data in netCDF format.
Initialize the reader.
- ir_sectors = {(566, 3464): 'Southern Hemisphere (GOES-East)', (1062, 2760): 'Southern Hemisphere (GOES-West)', (1354, 3312): 'Northern Hemisphere (GOES-West)', (1826, 3464): 'Northern Hemisphere (GOES-East)', (2704, 5208): 'Full Disc'}
- vis_sectors = {(2267, 13852): 'Southern Hemisphere (GOES-East)', (4251, 11044): 'Southern Hemisphere (GOES-West)', (5419, 13244): 'Northern Hemisphere (GOES-West)', (7307, 13852): 'Northern Hemisphere (GOES-East)', (10819, 20800): 'Full Disc'}
- satpy.readers.goes_imager_nc.is_vis_channel(channel)[source]
Determine whether the given channel is a visible channel.
- satpy.readers.goes_imager_nc.test_coefs(ir_url, vis_url)[source]
Test calibration coefficients against NOAA reference pages.
Currently the reference pages are:
ir_url = https://www.ospo.noaa.gov/Operations/GOES/calibration/gvar-conversion.html vis_url = https://www.ospo.noaa.gov/Operations/GOES/calibration/goes-vis-ch-calibration.html
- Parameters:
ir_url – Path or URL to HTML page with IR coefficients
vis_url – Path or URL to HTML page with VIS coefficients
- Raises:
ValueError if coefficients don't match the reference –