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, cma = projectables
      valid_cma = cma != cma.attrs["_FillValue"]
      valid_prod = data != data.attrs["_FillValue"]
      valid_prod = np.logical_and(
          valid_prod, np.logical_not(np.isnan(data))
      )
      # Update valid_cma and not valid_prod means: keep not valid cma or valid prod
      data = data.where(
          np.logical_or(np.logical_not(valid_cma), valid_prod),
          data.attrs["scaled_FillValue"],
      )
      data = data.where(np.logical_or(valid_prod, valid_cma), 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 CloudCompositorCommonMask obj's underlying member method code with example usage: obj.__call__(projectables) and returns: res