slv.measurements.mobile.transects#
TRAX transect matrices: obs[transect, point] over the 50-m network points.
Two generations of matrices:
Network matrices (this builder, 2026-09-24) — one matrix over the 50-m network points of
load_trax_network_points()(1,397 points; shared track is one row of points), built fromobs.parquetbybuild_network_transects(). Every transit of every line is a row, tagged with its line, direction and time, so pooling the lines is a concatenation and a source on the downtown trunk is scored once from all passes. Written per year bybuild_trax_transects()to$SLV_USER_DATA_DIR/trax/transects/network/and read back byload_network_transects().Archived per-line matrices (Logan Mitchell’s algorithm as rewritten in 2022; Dec 2014 – Apr 2023, single 9-s inlet lag, built from the duplicated-row parquet) — read by
load_transects(). Provenance and cross-checks only.
The builder is Mitchell et al. (2018)’s algorithm on the generic pieces in
lair.transects, with the TRAX specifics here:
the on-track rows of
obs.parquet(load_trax_obs(), so calibration provenance, the epoch offsets and the location classifier all apply);each sample is moved to where its air was taken in,
lag_searlier along the track (lair.transects.lag_positions()), with the lag of its instrument epoch (inlet_lag_seconds());samples snap to the nearest network point (60 m, like the STILT crossings);
the line the train is on is resolved per sample by a vote among the letters of its own point: the line with the most single-line points hit within ±30 min (
assign_lines());that line’s along-route coordinate is cut into one-way transits at reversals of travel and at gaps (
lair.transects.split_transits()), and the samples are averaged onto[transit, point]with terminus dwells trimmed (lair.transects.transect_matrix()).
Coverage and short transits. Unlike the archived per-line matrices – built by chasing
terminus polygons, so every row was (close to) a full end-to-end run – this builder keeps
any one-way run of at least min_span_m, including short turns that never reach the
line’s ends (a car shuttling Salt Lake Central <-> a few km out, real UTA service, ~15% of
Red and ~29% of Green transits by span in the 2014-2026 record) and partial runs cut short
by a mid-route reversal. Each transit’s coverage coordinate is its span over that line’s
full known extent; a persistence metric that baselines a transit against its own low
percentile (lair.transects.enhancement()) should filter on coverage first; a short
loop that sits in a plume the whole way reads as background against itself. See
sources/persistence/ for the filter in use.
Attributes
Sub-directory of |
Functions
The line letter each sample is on, resolved from the points around it in time. |
|
Build the |
|
Build and write the network matrices, one NetCDF per calendar year. |
|
The network transect matrices of |
|
Concatenate the archived transect matrices for one TRAX line into an xarray Dataset. |
|
The network transects folder: |