Source code for rockhound.seafloor

"""
Load the seafloor age, spreading rate, and spreading symmetry grids by
Müller et al. (2008).
"""
import xarray as xr
from pooch import Decompress

from .registry import REGISTRY


[docs]def fetch_seafloor_age(*, resolution="6min", load=True, **kwargs): """ Fetch the age of the oceanic lithosphere global grid Grids produced by [Muller2008]_. Includes the age uncertainty grid as well. Both are available in 2 and 6 arc-minute resolutions. The units for the ages are millions of years. The grids span longitudes from 0 E to 360 E and latitudes from 90 N to -90 N and are grid-line registered. If the files aren't already in your data directory, they will be downloaded automatically. Parameters ---------- resolution : str Which resolution grid to load. Must be ``"6min"`` or ``"2min"``. load : bool Whether to load the data into an :class:`xarray.Dataset` or just return the path to the downloaded data. If False, will return a list with the paths to the age and age uncertainty grids, respectively. kwargs Keyword arguments will be forwarded to the :func:`xarray.open_dataset` function that loads the grid into memory. Returns ------- grid : :class:`xarray.Dataset` or str The loaded grid or the file path to the downloaded data. """ resolutions = ["6min", "2min"] if resolution not in resolutions: raise ValueError( "Invalid seafloor age grid resolution '{}'. Must be one of {}.".format( resolution, resolutions ) ) fname_age = REGISTRY.fetch( "age.3.{}.nc.bz2".format(resolution[0]), processor=Decompress() ) fname_error = REGISTRY.fetch( "ageerror.3.{}.nc.bz2".format(resolution[0]), processor=Decompress() ) if not load: return [fname_age, fname_error] grid = xr.merge( [ xr.open_dataset(fname_age, **kwargs).rename(z="age") / 100, xr.open_dataset(fname_error, **kwargs).rename(z="uncertainty") / 100, ] ) # Add more metadata and fix some names grid = grid.rename(x="longitude", y="latitude") grid.attrs["title"] = "Age of oceanic lithosphere" grid.attrs["doi"] = "10.1029/2007GC001743" grid.age.attrs["long_name"] = "Age of oceanic lithosphere" grid.age.attrs["units"] = "million_years" grid.uncertainty.attrs["long_name"] = "Age uncertainty" grid.uncertainty.attrs["units"] = "million_years" return grid