class_docstr: Put cloud-free pixels as fill_value_color in palette.
class_docstr_tok: ["Put","cloud-free","pixels","as","fill_value_color","in","palette","."]
docstr: Create the composite.
docstr_tok: ["Create","the","composite","."]
code: def __call__(self, projectables, **info):
      """Create the composite."""
      if len(projectables) != 2:
          raise ValueError(
              "Expected 2 datasets, got %d" % (len(projectables),)
          )
      data, status = projectables
      valid = status != status.attrs["_FillValue"]
      status_cloud_free = status % 2 == 1  # bit 0 is set
      cloud_free = np.logical_and(valid, status_cloud_free)
      if (
          "bad_optical_conditions"
          in status.attrs.get("flag_meanings", "")
          and data.name == "cmic_cre"
      ):
          bad_optical_conditions = np.bitwise_and(
              np.right_shift(status, 1), 1
          )
          cloud_free = np.logical_and(
              cloud_free, np.logical_not(bad_optical_conditions)
          )
      # Where condition is true keep data, in other place update to scaled_FillValue:
      data = data.where(
          np.logical_not(cloud_free), data.attrs["scaled_FillValue"]
      )
      # Update not cloudfree product and nodata to NaN (already done for scaled vars in the reader)
      # Keep cloudfree or valid product
      data = data.where(
          np.logical_or(
              cloud_free, data != data.attrs["scaled_FillValue"]
          ),
          np.nan,
      )
      res = SingleBandCompositor.__call__(self, [data], **data.attrs)
      res.attrs["_FillValue"] = np.nan
      return res
  
file_path: satpy/satpy/composites/cloud_products.py
imports: import numpy
  from satpy.composites import GenericCompositor, SingleBandCompositor
label_desc: Use image node_id 1 for calling the CloudCompositorWithoutCloudfree obj's underlying member method code with example usage: obj.__call__(projectables) and returns: res