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
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
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
#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)