Skip to content
Snippets Groups Projects
Select Git revision
  • a464bba3b4749b8d8c685daa8fcd2101ca07cebd
  • master default protected
  • use_flight_altitude
  • distribute
4 results

amv_raob.py

Blame
  • viirs.py 4.96 KiB
    import numpy as np
    import h5py
    from util.util import get_grid_values, get_grid_values_all
    import glob
    from pathlib import Path
    import os
    import pickle
    
    mod_res_params = ['M07', 'M08', 'M10', 'M12', 'M13', 'M14', 'M15', 'M16']
    img_res_params = ['M07_highres', 'M08_highres', 'M10_highres', 'M12_highres', 'M13_highres', 'M14_highres', 'M15_highres', 'M16_highres']
    
    
    def run_all(directory):
    
        cnt = 0
        for p in os.scandir(directory):
            if not p.is_dir():
                continue
            cnt += 1
            mod_files = glob.glob(directory+p.name+'/'+'VNP02MOD*.uwssec.nc')
    
            mod_tiles = []
            img_tiles = []
    
            for idx, mfile in enumerate(mod_files):
                if idx % 8 == 0:
                    w_o_ext, ext = os.path.splitext(mfile)
                    ifile = w_o_ext+'.highres'+ext
                    if not os.path.exists(ifile):
                        continue
                    print(mfile)
                    run(mfile, ifile, mod_tiles, img_tiles)
    
            if len(mod_tiles) == 0:
                continue
    
            mod_nda = np.stack(mod_tiles)
            img_nda = np.stack(img_tiles)
    
            np.save('/data/Personal/rink/viirs/mod_res_'+str(cnt), mod_nda)
            np.save('/data/Personal/rink/viirs/img_res_'+str(cnt), img_nda)
    
    
    def run(mod_res_filename, img_res_filename, mod_tiles, img_tiles):
        mod_h5f = h5py.File(mod_res_filename, 'r')
        img_h5f = h5py.File(img_res_filename, 'r')
    
        mod_tile_width = 64
        img_tile_width = mod_tile_width * 2
    
        mod_param = 'observation_data/M15'
        img_param = 'observation_data/M15_highres'
    
        mod_num_lines = mod_h5f[mod_param].shape[0]
        mod_num_pixels = mod_h5f[mod_param].shape[1]
    
        img_num_lines = img_h5f[img_param].shape[0]
        img_num_pixels = img_h5f[img_param].shape[1]
    
        mod_num_y_tiles = int(mod_num_lines / mod_tile_width)
        mod_num_x_tiles = int(mod_num_pixels / mod_tile_width)
    
        mod_data = get_grid_values(mod_h5f, mod_param, 0, 0, None, mod_num_lines, mod_num_pixels, range_name=None)
        img_data = get_grid_values(img_h5f, img_param, 0, 0, None, img_num_lines, img_num_pixels, range_name=None)
    
        num_cntr_tiles = 2
        i_c = int(mod_num_pixels / num_cntr_tiles)  # center
        j_skip = int(mod_num_y_tiles / num_cntr_tiles) * mod_tile_width
        for k in range(num_cntr_tiles):
            j_c = k * j_skip
            j_m = j_c
            j_i = j_m * 2
    
            i_m = i_c
            i_i = i_m * 2
    
            nda = mod_data[j_m:j_m + mod_tile_width, i_m:i_m + mod_tile_width]
            mod_tiles.append(nda)
    
            nda = img_data[j_i:j_i + img_tile_width, i_i:i_i + img_tile_width]
            img_tiles.append(nda)
    
        # for j in range(mod_num_y_tiles):
        #     j_m = j * mod_tile_width
        #     j_i = j_m * 2
        #     for i in range(mod_num_x_tiles):
        #         i_m = i * mod_tile_width
        #         i_i = i_m * 2
        #
        #         nda = mod_data[j_m:j_m+mod_tile_width, i_m:i_m+mod_tile_width]
        #         mod_tiles.append(nda)
        #         nda = img_data[j_i:j_i+img_tile_width, i_i:i_i+img_tile_width]
        #         img_tiles.append(nda)
    
        mod_h5f.close()
        img_h5f.close()
    
    
    def run_mean_std(directory):
    
        data_dct = {name: [] for name in mod_res_params}
        mean_dct = {name: 0 for name in mod_res_params}
        std_dct = {name: 0 for name in mod_res_params}
    
        for p in os.scandir(directory):
            if not p.is_dir():
                continue
            mod_files = glob.glob(directory+p.name+'/'+'VNP02MOD*.uwssec.nc')
    
            for idx, mfile in enumerate(mod_files):
                if idx % 16 == 0:
                    try:
                        h5f = h5py.File(mfile, 'r')
                    except:
                        print('cant open file: ', mfile)
                        continue
                    for param in mod_res_params:
                        name = 'observation_data/'+param
                        try:
                            gvals = get_grid_values_all(h5f, name, range_name=None, stride=10)
                            data_dct[param].append(gvals.flatten())
                        except:
                            print('problem reading file: ', mfile)
                            continue
                    print(mfile)
                    h5f.close()
    
        for param in mod_res_params:
            data = data_dct[param]
            data = np.concatenate(data)
    
            mean_dct[param] = np.nanmean(data)
            std_dct[param] = np.nanstd(data)
    
        f = open('/home/rink/emis_rad_mean.pkl', 'wb')
        pickle.dump(mean_dct, f)
        f.close()
    
        f = open('/home/rink/emis_rad_std.pkl', 'wb')
        pickle.dump(std_dct, f)
        f.close()
    
        print(mean_dct)
        print(std_dct)
    
    
    def run_test(directory):
        # files = glob.glob(directory + 'clavrx_snpp_viirs*.h5')
        files = Path(directory).rglob('clavrx_snpp_viirs*.h5')
    
        for file in files:
            h5f = h5py.File(file, 'r')
            try:
                opd_nl = get_grid_values_all(h5f, 'cld_opd_nlcomp')
                reff_nl = get_grid_values_all(h5f, 'cld_reff_nlcomp')
            except:
                continue
    
            if np.sum(np.isnan(opd_nl)) < opd_nl.size and np.sum(np.isnan(reff_nl)) < reff_nl.size:
                print(file)
    
            h5f.close()