satpy.readers.fci_l1c_nc module

Interface to MTG-FCI L1c NetCDF files.

This module defines the FCIL1cNCFileHandler file handler, to be used for reading Meteosat Third Generation (MTG) Flexible Combined Imager (FCI) Level-1c data. FCI will fly on the MTG Imager (MTG-I) series of satellites, with the first satellite (MTG-I1) scheduled to be launched on the 13th of December 2022. For more information about FCI, see EUMETSAT.

For simulated test data to be used with this reader, see test data releases. For the Product User Guide (PUG) of the FCI L1c data, see PUG.


This reader currently supports Full Disk High Spectral Resolution Imagery (FDHSI) and High Spatial Resolution Fast Imagery (HRFI) data in full-disc (“FD”) scanning mode. If the user provides a list of both FDHSI and HRFI files from the same repeat cycle to the Satpy Scene, Satpy will automatically read the channels from the source with the finest resolution, i.e. from the HRFI files for the vis_06, nir_22, ir_38, and ir_105 channels. If needed, the desired resolution can be explicitly requested using e.g.: scn.load(['vis_06'], resolution=1000).

Note that RSS data is not supported yet.

Geolocation is based on information from the data files. It uses:

  • From the shape of the data variable data/<channel>/measured/effective_radiance, start and end line columns of current swath.

  • From the data variable data/<channel>/measured/x, the x-coordinates for the grid, in radians (azimuth angle positive towards West).

  • From the data variable data/<channel>/measured/y, the y-coordinates for the grid, in radians (elevation angle positive towards North).

  • From the attribute semi_major_axis on the data variable data/mtg_geos_projection, the Earth equatorial radius

  • From the attribute inverse_flattening on the same data variable, the (inverse) flattening of the ellipsoid

  • From the attribute perspective_point_height on the same data variable, the geostationary altitude in the normalised geostationary projection

  • From the attribute longitude_of_projection_origin on the same data variable, the longitude of the projection origin

  • From the attribute sweep_angle_axis on the same, the sweep angle axis, see

From the pixel centre angles in radians and the geostationary altitude, the extremities of the lower left and upper right corners are calculated in units of arc length in m. This extent along with the number of columns and rows, the sweep angle axis, and a dictionary with equatorial radius, polar radius, geostationary altitude, and longitude of projection origin, are passed on to pyresample.geometry.AreaDefinition, which then uses proj4 for the actual geolocation calculations.

The reading routine supports channel data in counts, radiances, and (depending on channel) brightness temperatures or reflectances. The brightness temperature and reflectance calculation is based on the formulas indicated in PUG. Radiance datasets are returned in units of radiance per unit wavenumber (mW m-2 sr-1 (cm-1)-1). Radiances can be converted to units of radiance per unit wavelength (W m-2 um-1 sr-1) by multiplying with the radiance_unit_conversion_coefficient dataset attribute.

For each channel, it also supports a number of auxiliary datasets, such as the pixel quality, the index map and the related geometric and acquisition parameters: time, subsatellite latitude, subsatellite longitude, platform altitude, subsolar latitude, subsolar longitude, earth-sun distance, sun-satellite distance, swath number, and swath direction.

All auxiliary data can be obtained by prepending the channel name such as "vis_04_pixel_quality".


The API for the direct reading of pixel quality is temporary and likely to change. Currently, for each channel, the pixel quality is available by <chan>_pixel_quality. In the future, they will likely all be called pixel_quality and disambiguated by a to-be-decided property in the DataID.


For reading compressed data, a decompression library is needed. Either install the FCIDECOMP library (see PUG), or the hdf5plugin package with:

pip install hdf5plugin


conda install hdf5plugin -c conda-forge

If you use hdf5plugin, make sure to add the line import hdf5plugin at the top of your script.

class satpy.readers.fci_l1c_nc.FCIL1cNCFileHandler(filename, filename_info, filetype_info)[source]

Bases: NetCDF4FsspecFileHandler

Class implementing the MTG FCI L1c Filehandler.

This class implements the Meteosat Third Generation (MTG) Flexible Combined Imager (FCI) Level-1c NetCDF reader. It is designed to be used through the Scene class using the load method with the reader "fci_l1c_nc".

Initialize file handler.


Load the lut vector of an auxiliary variable.


Get the auxiliary data arrays using the index map.


Load the index map for an FCI channel.

_get_dataset_measurand(key, info=None)[source]

Load dataset corresponding to channel measurement.

Load a dataset when the key refers to a measurand, whether uncalibrated (counts) or calibrated in terms of brightness temperature, radiance, or reflectance.


Load a quality field for an FCI channel.

static _getitem(block, lut)[source]
_platform_name_translate = {'MTI1': 'MTG-I1', 'MTI2': 'MTG-I2', 'MTI3': 'MTG-I3', 'MTI4': 'MTG-I4'}

Calculate area extent for a dataset.

calibrate(data, key)[source]

Calibrate data.

calibrate_counts_to_physical_quantity(data, key)[source]

Calibrate counts to radiances, brightness temperatures, or reflectances.

calibrate_counts_to_rad(data, key)[source]

Calibrate counts to radiances.

calibrate_rad_to_bt(radiance, key)[source]

IR channel calibration.

calibrate_rad_to_refl(radiance, key)[source]

VIS channel calibration.

property end_time

Get end time.


Calculate on-fly area definition for a dataset in geos-projection.


Get the channel’s measured group path.

get_dataset(key, info=None)[source]

Load a dataset.


Get information about the size and the position of the segment inside the final image array.

As the final array is composed by stacking segments vertically, the position of a segment inside the array is defined by the numbers of the start (lowest) and end (highest) row of the segment. The row numbering is assumed to start with 1. This info is used in the GEOVariableSegmentYAMLReader to compute optimal segment sizes for missing segments.

Note: in the FCI terminology, a segment is actually called “chunk”. To avoid confusion with the dask concept of chunk, and to be consistent with SEVIRI, we opt to use the word segment.

property nominal_end_time

Get nominal end time.

property nominal_start_time

Get nominal start time.

property observation_end_time

Get observation end time.

property observation_start_time

Get observation start time.

property orbital_param

Compute the orbital parameters for the current segment.

property rc_period_min

Get nominal repeat cycle duration.

As RSS is not yet implemeted and error will be raised if RSS are to be read

property start_time

Get start time.