import intake
import hvplot.pandas
import hvplot.xarray
import cook_inlet_catalogs as cic
import holoviews as hv
Underway CTD (NOAA PMEL): Towed on ferry¶
An oceanographic monitoring system aboard the Alaska Marine Highway System ferry Tustumena operated for four years in the Alaska Coastal Current (ACC) with funding from the Exxon Valdez Oil Spill Trustee Council’s Gulf Ecosystem Monitoring Program, the North Pacific Research Board and the National Oceanic and Atmospheric Administration. An electronic public display aboard the ferry educated passengers about the local oceanography and mapped the ferry’s progress. Sampling water at 4 m, the underway system measured: (1) temperature and salinity (used in the present report), and (2) nitrate, (3) chlorophyll fluorescence, (4) colored dissolved organic matter fluorescence, and (5) optical beam transmittance (not used in report).
Nominal 4 meter depth.
NORTH PACIFIC RESEARCH BOARD PROJECT FINAL REPORT Alaskan Ferry Oceanographic Monitoring in the Gulf of Alaska NPRB Project 707 Final Report Edward D. Cokelet and Calvin W. Mordy. https://www.nodc.noaa.gov/archive/arc0031/0070122/1.1/data/0-data/Final_Report_NPRB_0707.pdf
Exxon Valdez Oil Spill Gulf Ecosystem Monitoring and Research Project Final Report Biophysical Observations Aboard Alaska Marine Highway System Ferries Gulf Ecosystem Monitoring and Research Project 040699 Final Report Edward D. Cokelet, Calvin W. Mordy, Antonio J. Jenkins, W. Scott Pegau https://www.nodc.noaa.gov/archive/arc0031/0070122/1.1/data/0-data/Final_Report_GEM_040699.pdf
Archive: https://www.ncei.noaa.gov/metadata/geoportal/rest/metadata/item/gov.noaa.nodc%3A0070122/html

cat = intake.open_catalog(cic.utils.cat_path("ctd_towed_ferry_noaa_pmel"))
Plot all datasets in catalog¶
dd, ddlabels = cic.utils.combine_datasets_for_map(cat)
dd.hvplot(**cat.metadata["map"]) * ddlabels.hvplot(**cat.metadata["maplabels"])
List available datasets in the catalog¶
dataset_ids = list(cat)
dataset_ids
['2004-10',
'2004-11',
'2004-12',
'2004-9',
'2005-1',
'2005-10',
'2005-11',
'2005-2',
'2005-3',
'2005-4',
'2005-5',
'2005-6',
'2005-7',
'2005-8',
'2005-9',
'2006-10',
'2006-11',
'2006-12',
'2006-5',
'2006-6',
'2006-7',
'2006-8',
'2006-9',
'2007-1',
'2007-10',
'2007-2',
'2007-3',
'2007-4',
'2007-5',
'2007-6',
'2007-7',
'2007-8',
'2007-9',
'2008-10',
'2008-11',
'2008-3',
'2008-4',
'2008-5',
'2008-6',
'2008-7',
'2008-8',
'2008-9']
Select one dataset to investigate¶
try:
dataset_id = dataset_ids[2]
except:
dataset_id = dataset_ids[0]
print(dataset_id)
dd = cat[dataset_id].read()
dd
2004-12
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[5], line 7
4 dataset_id = dataset_ids[0]
5 print(dataset_id)
----> 7 dd = cat[dataset_id].read()
8 dd
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/readers.py:121, in BaseReader.read(self, *args, **kwargs)
119 kw.update(kwargs)
120 args = kw.pop("args", ()) or args
--> 121 return self._read(*args, **kw)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/convert.py:631, in Pipeline._read(self, discover, **kwargs)
629 data = self._read_stage_n(i, data=data, **kw)
630 else:
--> 631 data = self._read_stage_n(i, discover=discover, **kw)
632 return data
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/convert.py:620, in Pipeline._read_stage_n(self, stage, discover, **kwargs)
618 return func.discover(*arg, **kw2)
619 else:
--> 620 return func.read(*arg, **kw2)
621 else:
622 return func(*arg, **kw2)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/readers.py:121, in BaseReader.read(self, *args, **kwargs)
119 kw.update(kwargs)
120 args = kw.pop("args", ()) or args
--> 121 return self._read(*args, **kw)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/readers.py:1386, in XArrayPatternReader._read(self, data, open_local, pattern, **kw)
1384 ind.name = cd
1385 kw.setdefault("combine", "nested")
-> 1386 return super()._read(data2, concat_dim=indices, open_local=open_local, **kw)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/readers.py:1318, in XArrayDatasetReader._read(self, data, open_local, **kw)
1316 return open_dataset(data.url, session=session, **kw)
1317 if isinstance(data.url, (tuple, set, list)) and len(data.url) == 1:
-> 1318 return open_dataset(data.url[0], **kw)
1319 elif (isinstance(data.url, (tuple, set, list)) and len(data.url) > 1) or (
1320 isinstance(data.url, str) and "*" in data.url
1321 ):
1322 if isinstance(data, (datatypes.Zarr, datatypes.OpenDAP)):
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/xarray/backends/api.py:596, in open_dataset(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, create_default_indexes, inline_array, chunked_array_type, from_array_kwargs, backend_kwargs, **kwargs)
584 decoders = _resolve_decoders_kwargs(
585 decode_cf,
586 open_backend_dataset_parameters=backend.open_dataset_parameters,
(...) 592 decode_coords=decode_coords,
593 )
595 overwrite_encoded_chunks = kwargs.pop("overwrite_encoded_chunks", None)
--> 596 backend_ds = backend.open_dataset(
597 filename_or_obj,
598 drop_variables=drop_variables,
599 **decoders,
600 **kwargs,
601 )
602 ds = _dataset_from_backend_dataset(
603 backend_ds,
604 filename_or_obj,
(...) 615 **kwargs,
616 )
617 return ds
TypeError: H5netcdfBackendEntrypoint.open_dataset() got an unexpected keyword argument 'concat_dim'
Plot one dataset¶
keys = list(cat[dataset_id].metadata["plots"].keys())
print(keys)
plots = []
for key in keys:
plot_kwargs = cat[dataset_id].metadata["plots"][key]
if "clim" in plot_kwargs and isinstance(plot_kwargs["clim"], list):
plot_kwargs["clim"] = tuple(plot_kwargs["clim"])
if "dynamic" in plot_kwargs:
plot_kwargs["dynamic"] = False
plots.append(cat[dataset_id].ToHvPlot(**plot_kwargs).read())
hv.Layout(plots).cols(1)