Workflow: lithology and channels
The lithology_channels workflow asks whether channels behave differently on
different rocks. It fetches a DEM and the Macrostrat
geologic map over the same area, then compares channel steepness and the
shape of the channel network between lithologic units:
lsdtt-fetch-rasterfetches the DEM (or the workflow reads your own);lsdtt-fetch-lithologyfetches the Macrostrat map units over the same box, in the DEM's coordinate system;lsdtt-basin-extractionpicks the complete basins;lsdtt-chi-analysiscomputes k_sn in those basins and summarises it by lithologic unit: per-unit medians with bootstrap intervals, histograms, and unit-by-basin tables;lsdtt-channel-network-analysisgroups channel-link bearings, junction angles and Strahler statistics by lithologic unit, and compares each unit with the rest;- if lsdviztools3 is installed, draws the lithology map, k_sn by unit (box plots and histograms), and bearing roses and junction-angle summaries by unit.
How the statistics are built, and their caveats (a knickzone crossing a unit, strike-parallel drainage, mixed reaches), are in Lithology and channel steepness statistics and Channel-link bearing statistics.
Set up the Snakemake environment first: see Workflows.
Figures need lsdviztools3
The figures listed on this page are drawn only if lsdviztools3 is installed and the workflow can find it (how to set it up, step 4). Without it the run says the figures were skipped and writes everything else.
Quick start
pixi run -e workflows snakemake --cores 1 --snakefile workflows/Snakefile \
--directory workflows --configfile workflows/config/lithology_channels.yaml
The example covers part of the Blue Ridge in North Carolina at 30 m. Results
are in workflows/results/lithology-channels-example/blue_ridge/.
Macrostrat coverage is most complete in North America; elsewhere check
lithology/<region>_macrostrat_units.fgb in QGIS before reading the statistics.
Your own region
Regions, and your own outlet points (basin_outlet_fname: CSV, FlatGeobuf
or GeoPackage), are given as in the
chi workflow; see
Your own outlets.
lsdtt lays the lithology polygons on the DEM grid without reprojecting them,
so the map has to come back in the DEM's coordinate system:
- a fetched region passes its box and its
target_epsgto the lithology fetch (whentarget_epsgis not given, both tools choose the UTM zone of the box centre, so they agree); -
a region read from a file must give its EPSG code:
lithology_channels: regions: my_area: file: "/data/my_dem.tif" epsg: 32617
Which units. lithology_field_name picks the map attribute that names a
unit. The default, lith_primary, is the first lithology Macrostrat lists for
the unit. <region>_lithology_vocabulary.csv in lithology/ lists every value
found. To merge values into fewer units, write a crosswalk CSV with columns
value,code and optionally name, one row per map value, giving the values
of one unit the same code. lithology/<region>_crosswalk_template.csv lists
every value with its area. Give the crosswalk as lithology_crosswalk_fname
in both the chi_analysis and channel_network_analysis blocks, as an
absolute path: a bare file name is looked for in the DEM's folder.
Outputs
In workflows/results/<run_id>/<region>/:
| File | Contents |
|---|---|
lithology/<region>_macrostrat_units.fgb |
The geologic map, with lith_primary and the other Macrostrat fields |
lithology/<region>_ATTRIBUTION.txt |
The map sources to cite |
chi_lithology/<region>_chi_ksn_by_lithology_mn_<m/n>.csv |
k_sn per lithologic unit: node and reach medians, quartiles, bootstrap interval, sample counts |
chi_lithology/<region>_chi_ksn_histogram_by_lithology_mn_<m/n>.csv |
k_sn histograms per unit, on shared bins |
chi_lithology/<region>_chi_ksn_by_lithology_and_basin_mn_<m/n>.csv |
The same per unit and basin |
chi_lithology/<region>_chi_ksn_lithology_nodes_mn_<m/n>.csv |
Every channel node with its unit and k_sn |
chi_lithology/<region>_lithology_units.csv |
Unit codes and names |
network/<region>_channel_bearing_group_summary.csv, _comparisons.csv |
Channel-link bearing statistics per unit and Strahler order, and each unit against the rest |
network/<region>_junction_angle_group_summary.csv, _comparisons.csv |
The same for junction angles |
network/<region>_strahler_channels.fgb, _channel_link_bearings.fgb |
The network, for maps |
*/<region>_lithology_code.tif |
The unit of every pixel, as each tool read it |
figures/<region>_lithology_map.png |
Units over the hillshade (when lsdviztools3 is found) |
figures/<region>_ksn_*.png |
k_sn by unit: box plots, histograms, unit by basin |
figures/<region>_lithology_rose_*.png, _junction_alpha_*.png, _bearing_comparisons_*.png |
Bearing roses per unit and Strahler order; junction angles; unit-against-rest comparisons |
Units with few channel nodes are flagged low_sample rather than dropped.
Map polygons with an empty lithology field form a unit with no name in the
tables. The lithology map labels it "no lithology in map".