class_docstr: 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 :class:`~satpy.Scene`
  class using the :mod:`~satpy.Scene.load` method with the reader
  ``"fci_l1c_nc"``.
docstr: Calculate on-fly area definition for a dataset in geos-projection.
docstr_tok: ["Calculate","on-fly","area","definition","for","a","dataset","in","geos-projection","."]
code: def get_area_def(self, key):
      """Calculate on-fly area definition for a dataset in geos-projection."""
      # assumption: channels with same resolution should have same area
      # cache results to improve performance
      if key["resolution"] in self._cache:
          return self._cache[key["resolution"]]
  
      a = float(
          self.get_and_cache_npxr(
              "data/mtg_geos_projection/attr/semi_major_axis"
          )
      )
      h = float(
          self.get_and_cache_npxr(
              "data/mtg_geos_projection/attr/perspective_point_height"
          )
      )
      rf = float(
          self.get_and_cache_npxr(
              "data/mtg_geos_projection/attr/inverse_flattening"
          )
      )
      lon_0 = float(
          self.get_and_cache_npxr(
              "data/mtg_geos_projection/attr/longitude_of_projection_origin"
          )
      )
      sweep = str(
          self.get_and_cache_npxr(
              "data/mtg_geos_projection/attr/sweep_angle_axis"
          )
      )
  
      area_extent, nlines, ncols = self.calc_area_extent(key)
      logger.debug(
          "Calculated area extent: {}".format("".join(str(area_extent)))
      )
  
      # use a (semi-major axis) and rf (reverse flattening) to define ellipsoid as recommended by EUM (see PUG)
      proj_dict = {
          "a": a,
          "lon_0": lon_0,
          "h": h,
          "rf": rf,
          "proj": "geos",
          "units": "m",
          "sweep": sweep,
      }
  
      area_naming_input_dict = {
          "platform_name": "mtg",
          "instrument_name": "fci",
          "resolution": int(key["resolution"]),
      }
      area_naming = get_geos_area_naming(
          {**area_naming_input_dict, **get_service_mode("fci", lon_0)}
      )
  
      area = geometry.AreaDefinition(
          area_naming["area_id"],
          area_naming["description"],
          "",
          proj_dict,
          ncols,
          nlines,
          area_extent,
      )
  
      self._cache[key["resolution"]] = area
      return area
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import logging
  from datetime import timedelta
  from functools import cached_property
  import dask.array
  import numpy
  import xarray
  from netCDF4 import default_fillvals
  from pyresample import geometry
  from satpy.readers._geos_area import get_geos_area_naming
  from satpy.readers.eum_base import get_service_mode
  from .netcdf_utils import NetCDF4FsspecFileHandler
label_desc: Use image node_id 20 for calling the FCIL1cNCFileHandler obj's underlying member method code with example usage: obj.get_area_def(key) and returns: area, self