def test_GLDAS_Noah_v21_025Ds_img_reading_landpoints(): landgrid = GLDAS025LandGrid() parameter = ['SoilMoi10_40cm_inst', 'SoilMoi0_10cm_inst', 'SoilTMP0_10cm_inst', 'AvgSurfT_inst', 'SWE_inst'] img = GLDAS_Noah_v21_025Ds(data_path=os.path.join(os.path.dirname(__file__), 'test-data', 'GLDAS_NOAH_image_data'), parameter=parameter, subgrid=landgrid, array_1D=True) image = img.read( datetime(2015, 1, 1, 0)) assert sorted(image.data.keys()) == sorted(parameter) # gpi for testing on the land grid: 527549, lat: 1.625, lon: -52.625 assert image.timestamp == datetime(2015, 1, 1, 0) assert round(image.data['SoilMoi0_10cm_inst'][50000],3) == 26.181 assert round(image.data['SoilMoi10_40cm_inst'][50000],3) == 84.558 assert round(image.data['SoilTMP0_10cm_inst'][50000],3) == 301.276 assert round(image.data['AvgSurfT_inst'][50000],3) == 294.863 assert round(image.data['SWE_inst'][50000],3) == 0 assert (image.lon.size, image.lat.size) == (landgrid.activearrlat.size, landgrid.activearrlon.size) assert sorted(list(image.metadata.keys())) == sorted(parameter) assert image.metadata['AvgSurfT_inst']['units'] == u'K' assert image.metadata['AvgSurfT_inst']['long_name'] == u'Average Surface Skin temperature'
def test_GLDAS_Noah_v21_025Ds_timestamps_for_daterange(): parameter = [ "SoilMoi10_40cm_inst", "SoilMoi0_10cm_inst", "SoilTMP0_10cm_inst", "AvgSurfT_inst", "SWE_inst", ] img = GLDAS_Noah_v21_025Ds( data_path=os.path.join( os.path.dirname(__file__), "test-data", "GLDAS_NOAH_image_data" ), parameter=parameter, subgrid=None, array_1D=True, ) tstamps = img.tstamps_for_daterange( datetime(2000, 1, 1), datetime(2000, 1, 1) ) assert len(tstamps) == 8 assert tstamps == [ datetime(2000, 1, 1, 0), datetime(2000, 1, 1, 3), datetime(2000, 1, 1, 6), datetime(2000, 1, 1, 9), datetime(2000, 1, 1, 12), datetime(2000, 1, 1, 15), datetime(2000, 1, 1, 18), datetime(2000, 1, 1, 21), ]
def test_GLDAS_Noah_v21_025Ds_img_reading(): parameter = ['SoilMoi10_40cm_inst', 'SoilMoi0_10cm_inst', 'SoilTMP0_10cm_inst', 'AvgSurfT_inst', 'SWE_inst'] img = GLDAS_Noah_v21_025Ds(data_path=os.path.join(os.path.dirname(__file__), 'test-data', 'GLDAS_NOAH_image_data'), parameter=parameter, subgrid=None, array_1D=True) image = img.read( datetime(2015, 1, 1, 0)) assert sorted(image.data.keys()) == sorted(parameter) assert image.timestamp == datetime(2015, 1, 1, 0) assert round(image.data['SoilMoi0_10cm_inst'][998529],3) == 38.804 assert round(image.data['SoilMoi10_40cm_inst'][998529],3) == 131.699 assert round(image.data['SoilTMP0_10cm_inst'][998529],3) == 254.506 assert round(image.data['AvgSurfT_inst'][998529],3) == 235.553 assert round(image.data['SWE_inst'][998529],3) == 108.24 assert image.lon.shape == (360 * 180 * (1 / 0.25)**2,) assert image.lon.shape == image.lat.shape assert sorted(list(image.metadata.keys())) == sorted(parameter) assert image.metadata['AvgSurfT_inst']['units'] == u'K' assert image.metadata['AvgSurfT_inst']['long_name'] == u'Average Surface Skin temperature'
def reshuffle(input_root, outputpath, startdate, enddate, parameters, land_points=True, imgbuffer=50): """ Reshuffle method applied to GLDAS data. Parameters ---------- input_root: string input path where gldas data was downloaded outputpath : string Output path. startdate : datetime Start date. enddate : datetime End date. parameters: list parameters to read and convert imgbuffer: int, optional How many images to read at once before writing time series. """ if land_points: landgrid = GLDAS025LandGrid() else: landgrid = None if get_filetype(input_root) == 'grib': input_dataset = GLDAS_Noah_v1_025Ds(input_root, parameters, array_1D=True) if land_points: warnings.warn('Land Grid is fit to GLDAS 2.x netCDF data') else: input_dataset = GLDAS_Noah_v21_025Ds(input_root, parameters, landgrid, array_1D=True) if not os.path.exists(outputpath): os.makedirs(outputpath) global_attr = {'product': 'GLDAS'} # get time series attributes from first day of data. data = input_dataset.read(startdate) ts_attributes = data.metadata if landgrid: grid = landgrid else: grid = BasicGrid(data.lon, data.lat) reshuffler = Img2Ts(input_dataset=input_dataset, outputpath=outputpath, startdate=startdate, enddate=enddate, input_grid=grid, imgbuffer=imgbuffer, cellsize_lat=5.0, cellsize_lon=5.0, global_attr=global_attr, zlib=True, unlim_chunksize=1000, ts_attributes=ts_attributes) reshuffler.calc()