Skip to content
Snippets Groups Projects
infer_cloud_fraction.py 2.04 KiB
from util.geos_nav import get_navigation
from util.setup_cloud_fraction import model_path
from aeolus.datasource import CLAVRx
import os
from deeplearning.cloud_fraction_fcn_abi import SRCNN, run_evaluate_static, run_evaluate_static_full_disk
from util.util import get_cartopy_crs, write_cld_frac_file_nc4
import numpy as np


def infer_cloud_fraction(clvrx_path, output_dir, full_disk=True):
    ckpt_dir_s = os.listdir(model_path)
    ckpt_dir = model_path + ckpt_dir_s[0]

    clvrx_ds = CLAVRx(clvrx_path)
    for fname, t_start, t_stop in clvrx_ds:
        dto = clvrx_ds.get_datetime(fname)
        clvrx_str_time = dto.strftime('%Y-%m-%d_%H:%M')
        out_file = output_dir + 'cloud_fraction_' + clvrx_str_time
        if full_disk:
            run_evaluate_static_full_disk(fname, out_file, ckpt_dir)
        else:
            run_evaluate_static(fname, out_file, ckpt_dir)


def infer_cloud_fraction_new(clvrx_path, output_dir, full_disk=True, satellite='GOES16', domain='FD'):
    # location of the trained model
    ckpt_dir_s = os.listdir(model_path)
    ckpt_dir = model_path + ckpt_dir_s[0]

    # Navigation parameters
    geos, xlen, xmin, xmax, ylen, ymin, ymax = get_cartopy_crs(satellite, domain)
    nav = get_navigation(satellite, domain)
    cc = np.arange(xlen)
    ll = np.arange(ylen)
    x_rad = cc * nav.CFAC + nav.COFF
    y_rad = ll * nav.LFAC + nav.LOFF

    # Create a model instance and initialize with trained model above
    nn = SRCNN()
    nn.setup_inference(ckpt_dir)

    clvrx_ds = CLAVRx(clvrx_path)
    for fname, t_start, t_stop in clvrx_ds:
        dto = clvrx_ds.get_datetime(fname)
        clvrx_str_time = dto.strftime('%Y-%m-%d_%H:%M')
        out_file = output_dir + 'cloud_fraction_' + clvrx_str_time + '.nc'
        if full_disk:
            cld_frac = nn.run_inference_full_disk(fname, None)
        else:
            cld_frac = nn.run_inference(fname, None)

        write_cld_frac_file_nc4(clvrx_str_time, out_file, cld_frac, x_rad, y_rad, None, None, satellite=satellite,
                                domain=domain, has_time=True)