log.info(fmt(' Models ')) cubes = dict() with warnings.catch_warnings(): warnings.simplefilter("ignore") # Suppress iris warnings. for k, url in enumerate(dap_urls): log.info('\n[Reading url {}/{}]: {}'.format(k+1, len(dap_urls), url)) try: cube = quick_load_cubes(url, name_list, callback=None, strict=True) if is_model(cube): cube = proc_cube(cube, bbox=bbox, time=(start, stop), units=units) else: log.warning("[Not model data]: {}".format(url)) continue cube = get_surface(cube) mod_name, model_full_name = get_model_name(cube, url) cubes.update({mod_name: cube}) except (RuntimeError, ValueError, ConstraintMismatchError, CoordinateNotFoundError, IndexError) as e: log.warning('Cannot get cube for: {}\n{}'.format(url, e)) # In[17]: from iris.pandas import as_series from utilities import (make_tree, get_nearest_water, add_station, ensure_timeseries, remove_ssh) for mod_name, cube in cubes.items():
cube.coord(axis='X').points[:20] # <codecell> # Just found a bug in proc_cube(). Meanwhile lets skip the constraint step. cube.coord(axis='X').points = wrap_lon180(cube.coord(axis='X').points) # <codecell> cube.coord(axis='X').points[:20] # <codecell> # cube = proc_cube(cube, bbox=bbox, time=(start, stop), units=units) cube = get_surface(cube) # Get a 2D surface cube. I am working on 3D... cube # <codecell> from utilities import get_nearest_water, make_tree obs = dict(lon=-77.7867, lat=34.2133) tree, lon, lat = make_tree(cube) kw = dict(k=10, max_dist=0.04, min_var=0.01) series, dist, idx = get_nearest_water(cube, tree, obs['lon'], obs['lat'], **kw) print('Distance (degrees): {}'.format(dist)) print('Indices: {!r}'.format(idx))