# Environmental data access plan — NANOOS and WA Dept. of Ecology Follow-up to [`output/04_environmental_data/`](../output/04_environmental_data/README.md), which found that no NOAA in-water sensor sits in any of the inlets these oysters were collected from. This document records what closer data actually exist, a specific inquiry to send to NANOOS, and the plan for pulling WA Dept. of Ecology marine monitoring data. Everything marked *verified* below was checked against the live endpoint on 2026-09-04. --- ## 0. Correction to the step-04 write-up The step-04 README stated that NANOOS/UW ORCA mooring data are "not available from a public bulk endpoint." **That is wrong.** NANOOS runs a public ERDDAP server at that serves the full ORCA record with no authentication: | Dataset | Type | Coverage (verified) | Casts | Max depth | | --- | --- | --- | ---: | ---: | | `orca_hydro_twanoh` | griddap | 2005-01-19 → 2026-09-04 | 37,585 | 35 m | | `orca_hydro_hoodsport` | griddap | 2005-10-20 → 2026-09-04 | 30,277 | 120 m | | `orca_hydro_hansville` | griddap | 2005-11-09 → 2026-06-24 | 16,087 | 100 m | | `orca_hydro_dabobbay` | griddap | 2010-06-01 → **2025-05-02** | 12,419 | 105 m | | `orca_hydro_carrinlet` | griddap | 2010-10-13 → 2026-09-04 | 19,377 | 47 m | | `orca_hydro_pointwells` | griddap | 2010-04-01 → 2026-09-04 | 15,002 | 100 m | Profile variables: temperature, practical salinity, conductivity, sigma-theta, dissolved oxygen (mass concentration and % saturation), chlorophyll-*a*, nitrate, PAR, turbidity — each with a QC aggregate flag, gridded to 0.25 m bins. Matching surface meteorology is served as tabledap (`orca_met_*`), and `ORCA_*` tabledap datasets add air/sea pCO2 at some moorings. License (from the dataset metadata): free use and redistribution, not intended for legal use. Two mechanics worth writing down, both of which cost time to find: - The profile data are **griddap**, not tabledap; `tabledap/orca_hydro_*` returns 404. Request form is `griddap/.csv?[():()][():()]`. - The server sits behind Tomcat, which rejects raw `<`, `>`, `[`, `]` in the request target. Percent-encode them (`%3C`, `%3E`, `%5B`, `%5D`) or the request fails with `HTTP 400 – Invalid character found in the request target`. Verified sample pull (Twanoh, 2025-08-28, 4.5 m): 16.06 °C, 28.20 PSU, 6.53 mg/L O₂, 7.34 mg/m³ chlorophyll-*a*. **Consequence:** the ORCA data no longer need an access request. The NANOOS inquiry below is narrower — it is about interpretation, gaps, and the one mooring whose record stops. --- ## 1. Specific request to NANOOS / NWEM **Who.** The ORCA moorings are operated by the Northwest Environmental Moorings (NWEM) group at UW-APL (), not by NANOOS itself — NANOOS distributes the data. The ERDDAP metadata lists Seth Travis (`setht1@uw.edu`) as creator/publisher and John Mickett (`mickett@uw.edu`) as a contributor. Send to NWEM directly and copy the NANOOS help address from ; NANOOS is the right cc for anything about the ERDDAP service itself rather than the moorings. **What to ask.** Five questions, all of them things the public metadata does not answer and all of them decision-relevant for pairing environmental data to the lc-WGS population structure: 1. **Dabob Bay stopped.** `orca_hydro_dabobbay` ends 2025-05-02 while the other five moorings run to the present. Is the mooring recovered, is the gap a processing backlog, and is a return planned? Dabob Bay is our closest proxy for the Hood Canal sites. 2. **Which QC level to use.** The L3 gridded product carries `*_qc_aggregate` flags. Which flag values are safe to keep for multi-year climatology, and is there a documented flag-value → meaning table beyond the CF attributes? 3. **Pre-2021 record.** Twanoh and Hoodsport go back to 2005, but the tabledap `ORCA_*` datasets start in 2021. Is the 2005–2020 portion of the gridded product processed to the same standard, or were there sensor/calibration changes we should treat as a break in the series? 4. **Depth to use for an intertidal/shallow-subtidal organism.** Olympia oysters sit at roughly 0–2 m MLLW. Is the shallowest reliable bin from a winched CTD the 0.25–1 m range, or is there a near-surface bin the group treats as unreliable (wave contamination, wiper interference)? 5. **Anything closer.** Do NWEM or NANOOS partners hold non-ORCA data — pilot moorings, shore stations, tribal or shellfish-grower sensors served through NVS — inside Case Inlet, Totten/Little Skookum, Eld Inlet, Dyes Inlet, Port Gamble Bay, or Fidalgo Bay? These are the sites where our nearest reporting station is currently 30–57 km away. **Draft message** — review and send yourself; I have not sent anything. > Subject: ORCA mooring data for an Olympia oyster population-genomics study — QC and coverage questions > > Hi Seth (cc: John, NANOOS), > > I'm working on a low-coverage whole-genome sequencing study of Olympia oyster > (*Ostrea lurida*) populations across Puget Sound — roughly 110 samples from 15 > sites including Case Inlet, Totten/Little Skookum, Eld Inlet, Squaxin Island, > Dyes Inlet, Dogfish Bay, Port Gamble Bay, Triton Cove, Discovery and Sequim > bays, and Fidalgo Bay. We're pairing the genomic structure with environmental > context, and the ORCA moorings are by far the closest oceanographic records to > most of our sites. > > I've pulled the L3 gridded profiles from the NANOOS ERDDAP and they're exactly > what we need. Five questions before we build the analysis on them: > > 1. `orca_hydro_dabobbay` ends 2025-05-02 while the other moorings run current. > Is that a recovery, a processing backlog, or a longer outage — and is a > redeployment planned? It's our closest proxy for the Hood Canal sites. > 2. For multi-year climatology, which `*_qc_aggregate` values do you recommend > keeping, and is there documentation of the flag scheme beyond the CF > attributes? > 3. The gridded record starts in 2005 at Twanoh and Hoodsport. Is the pre-2021 > portion processed to the same standard, or are there sensor or calibration > changes we should treat as breaks in the series? > 4. Our animals sit at about 0–2 m MLLW. What's the shallowest bin you'd trust > from the winched CTD casts? > 5. Are there any other data you serve or know of — pilot moorings, shore > stations, tribal or grower-operated sensors — inside Case Inlet, Totten or > Little Skookum Inlet, Eld Inlet, Dyes Inlet, Port Gamble Bay, or Fidalgo > Bay? Those are the sites where our nearest reporting station is > still 30+ km away. > > Happy to share what we build back, and we'll cite the NWEM/NANOOS data as > requested in the dataset metadata. > > Thanks, > Steven Roberts > University of Washington, School of Aquatic and Fishery Sciences **Ask before sending.** Confirm the current NWEM contact — the addresses above come from dataset metadata, which can lag staffing. --- ## 2. WA Dept. of Ecology marine monitoring — investigated Ecology's Long-term Marine Water Quality Monitoring Program flies monthly CTD casts to fixed stations across the Salish Sea, Willapa Bay, and Grays Harbor. **This is the closest routine in-water sampling to our sites, by a wide margin.** ### Access paths (verified) | Path | URL | Notes | | --- | --- | --- | | Yearly netCDF, 1999–present | `https://fortress.wa.gov/ecy/ezshare/EAP/SalishSea/netCDF-files/MarineWaterProfilesAndNutrientsYear.nc` | Direct download, no auth. 2025 file is 39 MB, netCDF-4/HDF5. **Verified: downloaded and parsed.** | | EIM database (study `MarineWater`) | | Web search/download UI; needed for discrete samples not in the netCDF | | Program page | | Documents the netCDF and EIM routes | | Ferry transects | Salish and Victoria Clipper THREDDS catalogs linked from the program page | Underway surface data, central Sound tracks | Note: `apps.ecology.wa.gov` returns 403 to a default curl user agent — set a browser user agent. The fortress.wa.gov netCDF path has no such restriction. ### Structure of the netCDF (verified against the 2025 file) Ragged-array CF profile format: 39 stations, 266 profiles, 40,222 observation rows. Per-observation variables with QA/QC/QF flag triplets: - **Sensor:** `Pres`, `Depth`, `Temp` (°C), `Cond`, `Salinity` (PSU), `Density`, `DOAdjusted` (mg/L), `DOSatAdjusted`, `Turb`, `FluorAdjusted` (mg/m³), `Xmiss_25cm`, `BatC`, `PAR` - **Discrete nutrients:** `NO3`, `NO2`, `NH4`, `PO4`, `SiOH4` - **Indexing:** `Station` (char), `Latitude`, `Longitude`, `station_index`, `row_size`, `profile_index`, `FieldDate` (days since 1970-01-01, UTC) Missing values are `-99999.9`, not NaN — filter explicitly. Reading requires `h5py`, `netCDF4`, or `xarray`; `scipy.io.netcdf` will not open these (HDF5-backed netCDF-4). ### Nearest Ecology station to each site (verified, computed from the 2025 file) | Location | Putative site | Nearest Ecology station | km | vs. nearest NOAA station | | --- | --- | --- | ---: | ---: | | `Squaxin_Island` | Squaxin Island | DNA001 | 4.3 | 39.5 | | `MB` | Mud Bay, Eld Inlet | BUD005 | 4.9 | 46.1 | | `Ostrich_Bay` | Ostrich Bay, Dyes Inlet | SIN001 | 5.4 | 41.2 | | `LS` | Little Skookum Inlet | OAK004 | 6.9 | 48.1 | | `SS18_North_Bay_Wild` | North Bay, Case Inlet | HCB007 | 7.7 | 33.8 | | `CS18_22_Wild_plate1` | Central Sound | SIN001 | 7.7 | 35.8 | | `HC18_Triton_Wild` | Triton Cove, Hood Canal | HCB003 | 8.0 | 56.8 | | `PGB18_Wild` | Port Gamble Bay | ADM003 | 8.0 | 32.0 | | `NS18_Disco_Wild` | Discovery Bay | PTH005 | 10.2 | 12.0 | | `Dogfish_Bay` | Dogfish Bay | OCH014 | 3.7 | 47.2 | | `NS18_Sequim_Wild` | Sequim Bay | ADM002 | 19.6 | 20.7 | | `FB18_Wild` / `Fidalgo_Bay` | Fidalgo Bay | RSR837 | 19.8 | 44.0 | | `WB` | Stony Point, Willapa Bay | not yet computed | — | 20.8 | | `Coos_Bay` | Coos Bay, OR | — | 346 | 69.0 | Every Puget Sound site gains a closer in-water record, most of them dramatically — and unlike the NOAA stations, these are full-depth profiles with oxygen, chlorophyll, and nutrients rather than a single surface temperature. ### Caveats - **Monthly, not continuous.** One cast per station per month, weather permitting. Good for seasonal climatology and among-site contrasts; useless for extremes, tidal-band variability, or short thermal events. Pair with the ORCA moorings where a site is near one. - **Coverage is uneven.** DNA001 has 7 profiles in the 2025 file; some parameters are fill-valued in a given cast (the DNA001 cast inspected had temperature and salinity but no DO or fluorescence). - **Deep-water stations.** The stations are mid-channel, not intertidal. They characterize the basin the oysters sit in, not the tideflat. - **Coos Bay is out of scope** — Ecology is Washington only. That site needs an Oregon source (see below). --- ## 3. Recommended next steps 1. **Add a step 05 that pulls both sources.** `code/05_orca_ecology_data.py`: ORCA gridded profiles from NANOOS ERDDAP for the moorings within range, plus Ecology yearly netCDFs subset to the nearest station per site. Restrict to a shallow depth band (0–5 m) matched to oyster habitat, filter on QC flags and the `-99999.9` fill, and emit per-site monthly climatologies of temperature, salinity, dissolved oxygen, and chlorophyll. 2. **Decide the window.** The samples are 2018 collections (plus undated `LS`/`MB`/`WB`/Squaxin/Ostrich/Dogfish/Coos/Fidalgo sets). Both sources cover 2018, so a climatology for the years preceding collection is available — this is more defensible than the current 30-day snapshot, which describes 2026 conditions for animals sampled in 2018. 3. **Send the NANOOS/NWEM message** once the contact is confirmed. 4. **Find an Oregon source for Coos Bay.** Candidates to check, none verified yet: OSU's Charleston/OIMB shore station, the South Slough NERR system-wide monitoring program (NERR SWMP data are public and Coos Bay's South Slough is a NERR site — likely the best match), and Oregon DEQ ambient monitoring. ## 4. Note on the step-04 outputs The NOAA-based tables in `output/04_environmental_data/` remain valid as a basin-scale reference and as a station crosswalk. They should not be the environmental layer of the final analysis — Ecology plus ORCA should be, with NOAA retained only where neither has a nearby station.