Source code for clouddrift.adapters.glad

"""
This module defines functions used to adapt the Grand LAgrangian Deployment
(GLAD) dataset as a ragged-array Xarray Dataset.

The dataset and its description are hosted at https://doi.org/10.7266/N7VD6WC8.

Example
-------
>>> from clouddrift.adapters import glad
>>> ds = glad.to_xarray()

Reference
---------
Özgökmen, Tamay. 2013. GLAD experiment CODE-style drifter trajectories (low-pass filtered, 15 minute interval records), northern Gulf of Mexico near DeSoto Canyon, July-October 2012. Distributed by: Gulf of Mexico Research Initiative Information and Data Cooperative (GRIIDC), Harte Research Institute, Texas A&M University–Corpus Christi. doi:10.7266/N7VD6WC8
"""

from io import BytesIO

import numpy as np
import pandas as pd
import xarray as xr

from clouddrift.adapters.utils import download_with_progress


[docs] def get_dataframe() -> pd.DataFrame: """Get the GLAD dataset as a pandas DataFrame.""" url = "https://data.gulfresearchinitiative.org/pelagos-symfony/api/file/download/169841" # GRIIDC server doesn't provide Content-Length header, so we'll hardcode # the expected data length here. file_size = 155330876 buf = BytesIO(b"") download_with_progress([(url, buf, file_size)]) buf.seek(0) column_names = [ "id", "date", "time", "latitude", "longitude", "position_error", "u", "v", "velocity_error", ] df = pd.read_csv(buf, sep=r"\s+", skiprows=5, names=column_names) df["obs"] = pd.to_datetime(df["date"] + " " + df["time"]) df.drop(["date", "time"], axis=1, inplace=True) return df
[docs] def to_xarray() -> xr.Dataset: """Return the GLAD data as a ragged-array Xarray Dataset.""" df = get_dataframe() ds = df.to_xarray() traj, rowsize = np.unique(ds.id, return_counts=True) # Make the dataset compatible with clouddrift functions. ds = ( ds.swap_dims({"index": "obs"}) .drop_vars(["id", "index"]) .assign_coords(traj=traj) .assign({"rowsize": ("traj", rowsize)}) .rename_vars({"obs": "time", "traj": "id"}) ) # Cast double floats to singles for var in ds.variables: if ds[var].dtype == "float64": ds[var] = ds[var].astype("float32") # Set variable attributes ds["longitude"].attrs = { "long_name": "longitude", "standard_name": "longitude", "units": "degrees_east", } ds["latitude"].attrs = { "long_name": "latitude", "standard_name": "latitude", "units": "degrees_north", } ds["position_error"].attrs = { "long_name": "position_error", "units": "m", } ds["u"].attrs = { "long_name": "eastward_sea_water_velocity", "standard_name": "eastward_sea_water_velocity", "units": "m s-1", } ds["v"].attrs = { "long_name": "northward_sea_water_velocity", "standard_name": "northward_sea_water_velocity", "units": "m s-1", } ds["velocity_error"].attrs = { "long_name": "velocity_error", "units": "m s-1", } # Set global attributes ds.attrs = { "title": "GLAD experiment CODE-style drifter trajectories (low-pass filtered, 15 minute interval records), northern Gulf of Mexico near DeSoto Canyon, July-October 2012", "institution": "Consortium for Advanced Research on Transport of Hydrocarbon in the Environment (CARTHE)", "source": "CODE-style drifters", "history": "Downloaded from https://data.gulfresearchinitiative.org/data/R1.x134.073:0004 and post-processed into a ragged-array Xarray Dataset by CloudDrift", "references": "Özgökmen, Tamay. 2013. GLAD experiment CODE-style drifter trajectories (low-pass filtered, 15 minute interval records), northern Gulf of Mexico near DeSoto Canyon, July-October 2012. Distributed by: Gulf of Mexico Research Initiative Information and Data Cooperative (GRIIDC), Harte Research Institute, Texas A&M University–Corpus Christi. doi:10.7266/N7VD6WC8", } return ds