Пример #1
0
def load_jobst(variable, dts_to_take, nc_file_in, mask_dem, origin):
    nc_file = nc.Dataset(nc_file_in + '01-Jan-{}to31-dec-{}.nc'.format(
        dts_to_take[0].year, dts_to_take[0].year))
    # nc_datetimes = nc.num2date(nc_file.variables['time'][:], nc_file.variables['time'].units)
    data = nc_file.variables[variable][:]
    # the data is in a funny grid - need to swap last two axes, then flip to align with vcsn grid

    # plt.imshow(np.flipud(np.transpose(hi_res_max_temp,(0,2,1))[0][mask]),origin=0)
    if mask_dem == True:
        hi_res_precip_trimmed = []
        for precip in data:
            if origin == 'topleft':
                _, _, trimmed_precip, _, _ = trim_lat_lon_bounds(
                    mask, lat_array, lon_array, np.transpose(precip),
                    y_centres, x_centres)
            elif origin == 'bottomleft':
                _, _, trimmed_precip, _, _ = trim_lat_lon_bounds(
                    mask, lat_array, lon_array,
                    np.flipud(np.transpose(precip)), y_centres, x_centres)
            hi_res_precip_trimmed.append(trimmed_precip)
        data = np.asarray(hi_res_precip_trimmed)

    if variable in ['tmin', 'tmax']:
        data = data + 273.15

    return data
Пример #2
0
def load_mask_modis(catchment, mask_folder, modis_dem):
    '''
    load mask and trimmed mask of catchment for modis clutha domain
    '''

    if modis_dem == 'clutha_dem_250m':
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.2e6,
            extent_e=1.4e6,
            extent_n=5.13e6,
            extent_s=4.82e6,
            resolution=250,
            origin='bottomleft')

    if modis_dem == 'si_dem_250m':
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.08e6,
            extent_e=1.72e6,
            extent_n=5.52e6,
            extent_s=4.82e6,
            resolution=250,
            origin='bottomleft')

    if modis_dem == 'modis_si_dem_250m':
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.085e6,
            extent_e=1.72e6,
            extent_n=5.52e6,
            extent_s=4.82e6,
            resolution=250,
            origin='bottomleft')
    if modis_dem == 'modis_nz_dem_250m':
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.085e6,
            extent_e=2.10e6,
            extent_n=6.20e6,
            extent_s=4.70e6,
            resolution=250,
            origin='bottomleft')

    # # Get the masks for the individual regions of interest
    mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, modis_dem))

    _, _, trimmed_mask, _, _ = trim_lat_lon_bounds(mask, lat_array, lon_array,
                                                   mask.copy(), y_centres,
                                                   x_centres)

    return mask, trimmed_mask
def load_mask_modis(catchment, output_dem, mask_folder, dem_folder, modis_dem):
    '''
    load mask and trimmed mask of catchment for modis clutha domain
    '''

    if modis_dem == 'clutha_dem_250m':
        # dem_file = dem_folder + modis_dem + '.tif'
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(None)

    if modis_dem == 'si_dem_250m':
        # dem_file = dem_folder + modis_dem + '.tif'
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.08e6,
            extent_e=1.72e6,
            extent_n=5.52e6,
            extent_s=4.82e6,
            resolution=250)

    if modis_dem == 'modis_si_dem_250m':
        # dem_file = dem_folder + modis_dem + '.tif'
        _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
            None,
            extent_w=1.085e6,
            extent_e=1.72e6,
            extent_n=5.52e6,
            extent_s=4.82e6,
            resolution=250)

    # # Get the masks for the individual regions of interest
    mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, modis_dem))

    _, _, trimmed_mask, _, _ = trim_lat_lon_bounds(mask, lat_array, lon_array,
                                                   mask.copy(), y_centres,
                                                   x_centres)

    return mask, trimmed_mask
Пример #4
0
        if mask_created == True:  # load precalculated mask
            mask = np.load(mask_folder +
                           '/{}_{}.npy'.format(catchment, output_dem))
            if origin == 'topleft':
                mask = np.flipud(mask)
        else:  # create mask and save to npy file
            # masks = get_masks() #TODO set up for multiple masks
            mask = create_mask_from_shpfile(lat_array, lon_array, mask_shpfile)
            if origin == 'topleft':  # flip to save as bottom left
                mask = np.flipud(mask)
            np.save(mask_folder + '/{}_{}.npy'.format(catchment, output_dem),
                    mask)
            if origin == 'topleft':  # flip back to topleft
                mask = np.flipud(mask)
        # Trim down the number of latitudes requested so it all stays in memory
        lats, lons, elev, northings, eastings = trim_lat_lon_bounds(
            mask, lat_array, lon_array, nztm_dem, y_centres, x_centres)
        _, _, trimmed_mask, _, _ = trim_lat_lon_bounds(mask,
                                                       lat_array, lon_array,
                                                       mask.copy(), y_centres,
                                                       x_centres)
    else:
        mask = None
        lats = lat_array
        lons = lon_array
        elev = nztm_dem
        northings = y_centres
        eastings = x_centres

    for year_to_take in years_to_take:
        # load data
        # create timestamp to get - this is in NZST
    _, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
        None,
        extent_w=1.085e6,
        extent_e=2.10e6,
        extent_n=6.20e6,
        extent_s=4.70e6,
        resolution=250,
        origin='bottomleft')
    nztm_dem = np.load(dem_folder + '/{}.npy'.format(modis_dem))
    modis_output_dem = 'modis_nz_dem_250m'
    mask = np.load(
        mask_folder + '/{}_{}.npy'.format(catchment, modis_dem)
    )  # just load the mask the chooses land points from the dem. snow data has modis hy2018_2020 landpoints mask applied in NZ_evaluation_otf
    # mask = np.load("C:/Users/conwayjp/OneDrive - NIWA/projects/CARH2101/snow reanalysis/modis_mask_hy2018_2020_landpoints.npy")

lat_array, lon_array, nztm_dem, y_centres, x_centres = trim_lat_lon_bounds(
    mask, lat_array, lon_array, nztm_dem, y_centres, x_centres)

# # modis options
modis_sc_threshold = 50  # value of fsca (in percent) that is counted as being snow covered
modis_output_folder = 'C:/Users/conwayjp/OneDrive - NIWA/projects/CARH2101/snow reanalysis'
# modis_output_folder = '/nesi/nobackup/niwa00004/jonoconway/snow_sims_nz'

[ann_ts_av_sca_m, ann_ts_av_sca_thres_m, ann_dt_m, ann_scd_m] = pickle.load(
    open(
        modis_output_folder + '/summary_MODIS_{}_{}_{}_{}_thres{}.pkl'.format(
            hydro_years_to_take[0], hydro_years_to_take[-1], catchment,
            modis_output_dem, modis_sc_threshold), 'rb'))
# model options

run_id = 'cl09_default_ros'  ## 'cl09_tmelt275'#'cl09_default' #'cl09_tmelt275_ros' ##TODO
which_model = 'clark2009'  #TODO
Пример #6
0
    #subcatchment = 'qldc_ta_area'
    catchment = 'Clutha'

    mask_folder = r'C:\Users\conwayjp\OneDrive - NIWA\Temp\Masks'

    # dem_file = dem_folder + dem + '.tif'
    # elev, easting, northing, lat_array, lon_array = setup_nztm_dem(dem_file)

    # create new outlons and out_lats using trim for the qldc mask here
    nztm_dem, x_centres, y_centres, lat_array, lon_array = setup_nztm_dem(
        dem_file=None)
    mask = np.load(mask_folder + '/{}_{}.npy'.format(catchment, dem))

    # qldc_mask = np.load(mask_folder + '/{}_{}.npy'.format(subcatchment, dem))

    out_lats, out_lons, trimmed_mask, _, _ = trim_lat_lon_bounds(
        mask, lat_array, lon_array, mask.copy(), y_centres, x_centres)
    # returns: lats, lons, elev, northings, eastings
    mask = trimmed_mask

    #out_lons = lon_array
    out_lats = np.flipud(out_lats)  #(lat_array)
    # northing = np.flipud(northing)
    # out_elev = elev
    out_elev = trimmed_mask * 0.0

    # # Clip to the same extent as the met data
    # northing_clip = (4861875, 5127625)
    # easting_clip = (1214375, 1370375)
    # northing_mask = (northing >= northing_clip[0]) & (northing <= northing_clip[1])
    # easting_mask = (easting >= easting_clip[0]) & (easting <= easting_clip[1])
    # out_lats = out_lats[northing_mask][:, easting_mask]
    extent_e=2.10e6,
    extent_n=6.275e6,
    extent_s=4.70e6,
    resolution=250,
    origin='bottomleft')

# mask for nz modis domain on nz 250m dem domain
modis_nz_ew_extent = np.logical_and(x_centres > 1.085e6, x_centres < 2.10e6)
modis_nz_ns_extent = np.logical_and(y_centres < 6.20e6, y_centres > 4.70e6)
modis_nz_mask = modis_nz_ns_extent[:, np.newaxis] * modis_nz_ew_extent[
    np.newaxis, :]
nztm_dem2 = nztm_dem[modis_nz_mask].reshape(lat_array2.shape)

NZ_mask_nz = nztm_dem > 0
NZ_mask_modis_nz = nztm_dem2 > 0

#to get trimmed coordinates for modis domain trimmed to elevation > 0
trim_lat_lon_bounds(NZ_mask_modis_nz, lat_array2, lon_array2, nztm_dem2,
                    y_centres2, x_centres2)

print(NZ_mask_nz.shape)
print(NZ_mask_modis_nz.shape)
#trim 116 points off the top of the NZ masked domain to make the same as the modis masked domain
assert np.all(
    trim_lat_lon_bounds(NZ_mask_modis_nz, lat_array2, lon_array2, nztm_dem2,
                        y_centres2, x_centres2)[0] == trim_lat_lon_bounds(
                            NZ_mask_nz, lat_array, lon_array, nztm_dem,
                            y_centres, x_centres)[0][:-116])

print(trim_data_to_mask(NZ_mask_modis_nz, NZ_mask_modis_nz).shape)