Examples

The following are a collection of examples using the python data access API.

Example to get the paths and metadata about parflow water table depth baseline:

import hydrodata.data_catalog.data_access

options = {
        "variable": "water_table_depth",
        "dataset": "conus1_baseline_mod",
        "grid": "CONUS1",
        "period": "daily",
        "file_type": "pfb"
}
# Get path names to files
entry = hydrodata.data_catalog.data_access.get_catalog_entry(options)
paths = hydrodata.data_catalog.data_access.get_file_paths(entry, start_time="2005-09-29", end_time="2005-10-03")

# 4 files between 9/29/2005-10/03/2005  (note - spans water year)
assert len(paths) == 4
assert paths[3] == "/hydrodata/PFCLM/CONUS1_baseline/simulations/daily/WY2006/wtd.daily.mean.002.pfb"

assert entry["structure_type"] == "gridded"
assert entry["dataset_var"] == "wtd"
assert entry["units"] == "m"
assert entry["file_type"] == "pfb"

Example to get an numpy ndarray of data of a data catalog entry:

options = {
    "variable": "water_table_depth",
    "dataset": "conus1_baseline_mod",
    "period": "daily",
    "file_type": "pfb"
}
# Get an data catalog entry and the data for that entry as a numpy array
entry = hydrodata.data_catalog.data_access.get_catalog_entry(options)
data = hydrodata.data_catalog.data_access.get_ndarray(entry, start_time="2005-09-29", end_time="2005-10-03")

assert list(data.shape) == [4, 1888, 3342]

Example subsetting of PFB forcing file using the data catalog:

import hydrodata.data_catalog.data_access from parflow import read_pfb_sequence

“””Demonstrate reading and susetting 5 days of hourly pfb pressure files.”””

options = {

“variable”: “pressure_head”, “dataset”: “conus1_baseline_mod”, “grid”: “conus1”, “period”: “hourly”, “file_type”: “pfb”

} entry = hydrodata.data_catalog.data_access.get_catalog_entry(options) paths = hydrodata.data_catalog.data_access.get_file_paths(entry, start_time=”2005-09-29”, end_time=”2005-10-03”)

# Read the data from the list of pfb files (5 days crossing a water year) # Subset the pfb files by x,y space constraints to an area of interest boundary_constraints = {

“x”: {“start”: int(1076), “stop”: int(1124)}, “y”: {“start”: int(720), “stop”: int(739)}, “z”: {“start”: 0, “stop”: 0},

} data = read_pfb_sequence(paths, boundary_constraints)

assert data.shape[0] == 96 # 4 days x 24 hours assert data.shape[1] == 4 # 4 layers deep assert data.shape[2] == 19 # 19 y points assert data.shape[3] == 48 # 48 x points

Example To Get Information From Data Model Tables:

import hydrodata.data_catalog.data_access

# Demonstrate reading information from data catalog model

rows = hydrodata.data_catalog.data_access.get_table_rows("grid")

assert len(rows) == 3
assert rows[0]["id"] == "conus1"
assert rows[0]["shape"][0] == 3342
assert rows[0]["shape"][1] == 1888

rows = hydrodata.data_catalog.data_access.get_table_rows("dataset", id="conus1_baseline_mod")
assert rows[0]["dataset_type"] == "parflow"