#!/usr/bin/env python
# coding: utf-8
# # Example script for reading MAIA cloud product files.
#
#
# Created with:
#
# Package | Version
# --- | ---
# SatPy | 0.9.0
# PyResample | 1.10.1
# Trollimage | 1.5.3
# PyKdtree | 1.3.1
#
#
# MAIA files can be created with AAPP with scripts MAIA4_RUN and MAIA4_RUN_AVHRR scripts
#
# for BOTH VIIRS an AVHRR imagers
#
# - Install satpy and pyresample
# - pycoast can also be installed if you want to generate plots with coast lines
# - Here is an example of a minimal script that reads MAIA files
#
# MAIA files are named with a specific syntax for example:
#
# - avhCT_M02_GL_20151012_S005503_E005802_DES_D_La-11_Lo0126_00000.h5
#
# - viiCT_npp_DB_20121010_S132824_E132947_ASC_D_La050_Lo-012_00001.h5
#
# References :
#
# https://nwpsaf.eu/site/software/aapp/
#
# [NWPSAF-MF-UD-003] DATA Formats
#
# [NWPSAF-MF-UD-009] MAIA version 4 Scientific User Manual
#
# This example uses the MAIA cloud product which can be found in the MAIA4_test.tgz tar test case file available with the AAPP software.
# In[1]:
from satpy import Scene
from satpy.utils import debug_on
import numpy as np
from satpy.composites import PaletteCompositor
from satpy.writers import to_image
# In[2]:
# define palette (matplotlib style)
cpool = ['#4e7791', # not processed 0
'#008c30', # Cloud free land 1
'#000000', # Cloud free sea 2
'#ffbbff', # Snow over ice 3
'#dda0dd', # Sea ice 4
'#ffa500', # Very low cumuliforme 5 # non utilisé par maia
'#ff6600', # Very low no cumuliforme 6
'#ffd800', # Low cumuliforme 7 # non utilisé par maia
'#ffa500', # Low cumuliforme 8
'#ffff00', # Mid-level cumuliforme 9 # non utilisé par maia
'#d8ff00', # Mid-level no cumuliforme 10
'#cccc00', # High opaque cumuliforme 11 # on utilisé par maia
'#d8b575', # High opaque no cumuliforme 12
'#ffffff', # Very High opaque cumuliforme 13 # non utilisé par maia
'#ffe0aa', # Very High opaque no cumuliforme 14
'#0000ff', # Semi transp. thin 15
"#00b2ff", # Semi transp. meanly thick 16
'#00ffe5', # Semi transp. thick 17
'#00ffb2', # semi transp abobe others 18
'#d800ff', # fractionnal
'#660f00', # Not classified 20
]
# In[3]:
# function to convert it in satpy style
def hex_to_rgb(value):
value = value.lstrip('#')
lv = len(value)
return [int(value[i:i + lv // 3], 16) for i in range(0, lv, lv // 3)]
# In[4]:
fnmaia = "/home/a000680/data/maia/viiCT_npp_DB_20121010_S132824_E132947_ASC_D_La050_Lo-012_00001.h5"
# In[5]:
maia_scene = Scene(sensor='viirs', reader='maia', filenames=[fnmaia])
# In[6]:
maia_scene.all_dataset_names()
# In[7]:
maia_scene.load(["CloudType", "ct", "cma", "cma_conf",
'opaq_cloud', "CloudTopPres", "CloudTopTemp", "Alt_surface"])
#
# The CloudType is a bit field containing the actual "ct" with values from 0 to 20
# which can be interpreted according to the cpool colormap
#
# "ct" can be display in black and white:
#
# In[8]:
maia_scene.show("ct")
maia_scene.save_dataset("ct", filename="ct_bw.png")
#
# but it is better to palettize the image:
#
# step 1: creation of the palette
# In[9]:
mycolors = []
for i in range(21):
mycolors.append(hex_to_rgb(cpool[i]))
arr = np.array(mycolors)
np.save("/tmp/binary_maia_ct_colormap.npy", arr)
# step2: creation of the composite
# In[10]:
compositor = PaletteCompositor("test", standard_name="maia_ct")
composite = compositor((maia_scene["ct"], arr))
img = to_image(composite)
img.show()
img.pil_save("ct.png")
#
#