class_docstr: Create RGB snow product.
  
  Product is based on method presented at the second
  CSPP/IMAPP users' meeting at Eumetsat in Darmstadt on 14-16 April 2015
  
  Bernard Bellec snow Look-Up Tables V 1.0 (c) Meteo-France
  These Look-up Tables allow you to create the RGB snow product
  for SUOMI-NPP VIIRS Imager according to the algorithm
  presented at the second CSPP/IMAPP users' meeting at Eumetsat
  in Darmstadt on 14-16 April 2015
  The algorithm and the product are described in this
  presentation :
  http://www.ssec.wisc.edu/meetings/cspp/2015/Agenda%20PDF/Wednesday/Roquet_snow_product_cspp2015.pdf
  as well as in the paper http://dx.doi.org/10.1016/j.rse.2017.04.028
  For further information you may contact
  Bernard Bellec at Bernard.Bellec@meteo.fr
  or
  Pascale Roquet at Pascale.Roquet@meteo.fr
class_docstr_tok: ["Create","RGB","snow","product",".","Product","is","based","on","method","presented","at","the","second","CSPP\/IMAPP","users","'","meeting","at","Eumetsat","in","Darmstadt","on","14-16","April","2015","Bernard","Bellec","snow","Look-Up","Tables","V","1.0","(","c",")","Meteo-France","These","Look-up","Tables","allow","you","to","create","the","RGB","snow","product","for","SUOMI-NPP","VIIRS","Imager","according","to","the","algorithm","presented","at","the","second","CSPP\/IMAPP","users","'","meeting","at","Eumetsat","in","Darmstadt","on","14-16","April","2015","The","algorithm","and","the","product","are","described","in","this","presentation",":","http",":","\/\/www.ssec.wisc.edu\/meetings\/cspp\/2015\/Agenda","%","20PDF\/Wednesday\/Roquet_snow_product_cspp2015.pdf","as","well","as","in","the","paper","http",":","\/\/dx.doi.org\/10.1016\/j.rse.2017.04.028","For","further","information","you","may","contact","Bernard","Bellec","at","Bernard.Bellec","@","meteo.fr","or","Pascale","Roquet","at","Pascale.Roquet","@","meteo.fr"]
docstr: Generate a SnowAge RGB composite.
  
  The algorithm and the product are described in this
  presentation :
  http://www.ssec.wisc.edu/meetings/cspp/2015/Agenda%20PDF/Wednesday/Roquet_snow_product_cspp2015.pdf
  as well as in the paper http://dx.doi.org/10.1016/j.rse.2017.04.028
  For further information you may contact
  Bernard Bellec at Bernard.Bellec@meteo.fr
  or
  Pascale Roquet at Pascale.Roquet@meteo.fr
  
  The resulting RGB has the units attribute removed.
docstr_tok: ["Generate","a","SnowAge","RGB","composite",".","The","algorithm","and","the","product","are","described","in","this","presentation",":","http",":","\/\/www.ssec.wisc.edu\/meetings\/cspp\/2015\/Agenda","%","20PDF\/Wednesday\/Roquet_snow_product_cspp2015.pdf","as","well","as","in","the","paper","http",":","\/\/dx.doi.org\/10.1016\/j.rse.2017.04.028","For","further","information","you","may","contact","Bernard","Bellec","at","Bernard.Bellec","@","meteo.fr","or","Pascale","Roquet","at","Pascale.Roquet","@","meteo.fr","The","resulting","RGB","has","the","units","attribute","removed","."]
code: def __call__(self, projectables, nonprojectables=None, **info):
      """Generate a SnowAge RGB composite.
  
      The algorithm and the product are described in this
      presentation :
      http://www.ssec.wisc.edu/meetings/cspp/2015/Agenda%20PDF/Wednesday/Roquet_snow_product_cspp2015.pdf
      as well as in the paper http://dx.doi.org/10.1016/j.rse.2017.04.028
      For further information you may contact
      Bernard Bellec at Bernard.Bellec@meteo.fr
      or
      Pascale Roquet at Pascale.Roquet@meteo.fr
  
      The resulting RGB has the units attribute removed.
      """
      if len(projectables) != 5:
          raise ValueError(
              "Expected 5 datasets, got %d" % (len(projectables),)
          )
  
      # Collect information that is the same between the projectables
      info = combine_metadata(*projectables)
      # Update that information with configured information (including name)
      info.update(self.attrs)
      # Force certain pieces of metadata that we *know* to be true
      info["wavelength"] = None
  
      m07 = projectables[0] * 255.0 / 160.0
      m08 = projectables[1] * 255.0 / 160.0
      m09 = projectables[2] * 255.0 / 160.0
      m10 = projectables[3] * 255.0 / 160.0
      m11 = projectables[4] * 255.0 / 160.0
      refcu = m11 - m10
      refcu = refcu.clip(min=0)
  
      ch1 = m07 - refcu / 2.0 - m09 / 4.0
      ch2 = m08 + refcu / 4.0 + m09 / 4.0
      ch3 = m11 + m09
      # GenericCompositor needs valid DataArrays with 'area' metadata
      ch1.attrs = info
      ch2.attrs = info
      ch3.attrs = info
  
      res = super(SnowAge, self).__call__([ch1, ch2, ch3], **info)
      res.attrs.pop("units", None)
      return res
  
imports: from __future__ import annotations
  import logging
  import math
  from datetime import datetime
  import dask
  import dask.array
  import numpy
  import xarray
  from satpy.composites import CompositeBase, GenericCompositor
  from satpy.dataset import combine_metadata
label_desc: Use image node_id 1 for calling the SnowAge obj's underlying member method code with example usage: obj.__call__(projectables, nonprojectables) and returns: res