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: VIS channel calibration.
docstr_tok: ["VIS","channel","calibration","."]
code: def calibrate_rad_to_refl(self, radiance, key):
      """VIS channel calibration."""
      measured = self.get_channel_measured_group_path(key["name"])
  
      cesi = self.get_and_cache_npxr(
          measured + "/channel_effective_solar_irradiance"
      ).astype(np.float32)
  
      if cesi == cesi.attrs.get(
          "FillValue", default_fillvals.get(cesi.dtype.str[1:])
      ):
          logger.error(
              "channel effective solar irradiance set to fill value, "
              "cannot produce reflectance for {:s}.".format(measured)
          )
          return radiance * np.float32(np.nan)
  
      sun_earth_distance = (
          np.mean(
              self.get_and_cache_npxr(
                  "state/celestial/earth_sun_distance"
              )
          )
          / 149597870.7
      )  # [AU]
  
      # TODO remove this check when old versions of IDPF test data (<v5) are deprecated.
      if sun_earth_distance < 0.9 or sun_earth_distance > 1.1:
          logger.info(
              "The variable state/celestial/earth_sun_distance contains unexpected values"
              "(mean value is {} AU). Defaulting to 1 AU for reflectance calculation."
              "".format(sun_earth_distance)
          )
          sun_earth_distance = 1
  
      res = (
          100
          * radiance
          * np.float32(np.pi)
          * np.float32(sun_earth_distance) ** np.float32(2)
          / cesi
      )
      return res
  
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 25 for calling the FCIL1cNCFileHandler obj's underlying member method code with example usage: obj.calibrate_rad_to_refl(radiance, key) and returns: res, unknown