def reproject_sm()

in data_preprocessing/rescaling/soil_moisture.py [0:0]


def reproject_sm(doy):
    fh_ref = Dataset('../../processed_data/lai/500m/20181028.nc', 'r')
    fh_in = Dataset('../../raw_data/soil_moisture/9km/{}.nc'.format(doy), 'r')
    fh_out = Dataset('../../processed_data/soil_moisture/9km_500m/{}.nc'.format(doy), 'w')

    ref_lats, ref_lons = fh_ref.variables['lat'][:], fh_ref.variables['lon'][:]
    n_lat, n_lon = len(ref_lats), len(ref_lons)
    for name, dim in fh_ref.dimensions.items():
        fh_out.createDimension(name, len(dim))

    for v_name, varin in fh_ref.variables.items():
        if v_name in ['lat', 'lon']:
            outVar = fh_out.createVariable(v_name, varin.datatype, (v_name,))
            outVar.setncatts({k: varin.getncattr(k) for k in varin.ncattrs()})
            outVar[:] = varin[:]

    origi_values = {}
    projected_values = {}
    for v_name, varin in fh_in.variables.items():
        if v_name in ['soil_moisture']:
            outVar = fh_out.createVariable(v_name, varin.datatype, ('lat', 'lon'))
            outVar.setncatts({k: varin.getncattr(k) for k in varin.ncattrs()})
            origi_values[v_name] = varin[:]
            projected_values[v_name] = np.full((n_lat, n_lon), -9999.9)

    projected_indices = np.load('../../raw_data/soil_moisture/projected_indices_lai_500m.npy')
    projected_i = 0

    for i in range(n_lat):
        for j in range(n_lon):
            for key in origi_values.keys():
                proj_i, proj_j = projected_indices[projected_i] // 674, projected_indices[projected_i] % 674
                if not origi_values[key].mask[proj_i, proj_j]:
                    projected_values[key][i, j] = origi_values[key][proj_i, proj_j]
            projected_i += 1

    for key in origi_values.keys():
        fh_out.variables[key][:] = ma.masked_equal(projected_values[key], -9999.9)

    fh_in.close()
    fh_ref.close()
    fh_out.close()