code: def __call__(
      self,
      sensor_azimuth,
      sensor_zenith,
      solar_azimuth,
      solar_zenith,
      avg_elevation,
  ):
      refl = self._refl
      height = self._height_from_avg_elevation(avg_elevation)
      coeffs_helper = self.coeffs_cls(
          refl.attrs["wavelength"], refl.attrs["resolution"]
      )
      coeffs = coeffs_helper()
      mus = np.cos(np.deg2rad(solar_zenith))
      mus = mus.where(mus >= 0)
      muv = np.cos(np.deg2rad(sensor_zenith))
      phi = solar_azimuth - sensor_azimuth
      corr_refl = self._run_crefl(
          mus, muv, phi, solar_zenith, sensor_zenith, height, coeffs
      )
      if self._is_percent:
          corr_refl = corr_refl * 100.0
      return xr.DataArray(
          corr_refl,
          dims=refl.dims,
          coords=refl.coords,
          attrs=refl.attrs,
      )
  
imports: from __future__ import annotations
  import logging
  from typing import Optional, Type, Union
  import dask.array
  import numpy
  import xarray
  from satpy.dataset.dataid import WavelengthRange
label_desc: Use image node_id 3 for calling the _CREFLRunner obj's underlying member method code with example usage: obj.__call__(sensor_azimuth, sensor_zenith, solar_azimuth, solar_zenith, avg_elevation) and returns: xr