CLI reference: lsdtt-cosmo-landslides
Renamed 2026-08-05. This tool was
lsdtt-landslides. There is no compatibility alias — parameter files are unaffected, but scripts invoking the old executable name must be updated. The rename marks it as a cosmogenic tool rather than a purely geomorphic one: it answers "could landsliding be biasing my cosmogenic samples?", and is gaining full production scaling and shielding so the concentrations it reports are real rather than indicative.
Triggers landslides with an imposed size distribution. You prescribe when (a trigger time, or a recurrence) and how much (an event volume, or a long-term erosion rate); the tool works out how many landslides that implies, what sizes they are, and where they go, then excavates them and writes the fields the cosmogenic and sediment-routing tools consume.
The DEM must be in a projected CRS — areas and volumes come from cell size in metres.
Usage
lsdtt-cosmo-landslides <path> <parameter_file>
lsdtt-cosmo-landslides <parameter_file> # path defaults to ./
lsdtt-cosmo-landslides -h # print help and exit
lsdtt-cosmo-landslides -v # print version and exit
What this tool does and does not do
Sizes are imposed, not emergent. Landslide areas are sampled from a prescribed distribution rather than derived from slope stability. That is deliberate: the purpose is to impose a known landslide flux and ask what it does to something else — most immediately to cosmogenic nuclide concentrations, which is what Niemi et al. (2005) and Yanites et al. (2009) both study.
The alternative — deriving sizes from Culmann stability, as HyLands does (Campforts et al. 2020) — is more fundamental and reproduces the observed magnitude–frequency distribution without being told to. It is the right tool if you want the distribution to be an outcome. It is the wrong tool if you want the landslide flux to be a controlled input, because the flux then depends on rock-strength calibration.
Landslides come from hillslopes. Initiation is restricted to pixels whose contributing area is below the channel initiation threshold, and each scar is built from that pixel's upslope set. Two consequences follow by construction, not by filtering: no scar can reach into a channel, and no landslide can be larger than the hillslope it comes from.
No runout, no deposition. Scars are excavated; where the material goes is the sediment-routing tools' problem.
Pipeline
| Step | Description |
|---|---|
| 1 | Load DEM; check projected CRS |
| 2 | Pit fill (skipped when fill_before_routing: false) |
| 3 | D8 flow routing |
| 4 | Build the discrete size distribution over pixel counts |
| 5 | Build the eligible-host list (hillslope pixels, inside the mask) |
| 6 | For each event: solve for the landslide count against the volume budget, place largest first, excavate |
| 7 | Write excavation depth, time of failure, inventory CSV, optional CRN concentration |
Input / output parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
read_path |
string | directory of parameter file | Directory containing the input DEM. |
read_fname |
string | parameter file stem | Input raster filename. |
write_path |
string | same as read_path |
Directory for output files. |
write_fname |
string | same as read_fname |
Output filename stem. |
write_output_format |
string | cog |
cog, gtiff, or same_as_input. |
DEM preparation
| Parameter | Type | Default | Description |
|---|---|---|---|
fill_before_routing |
bool | true |
Fill pits before building flow routing. |
min_slope_for_fill |
float | 0.0001 |
Minimum imposed slope during filling (m/m). |
boundary_conditions |
string | oooo |
D8 boundary conditions (N,E,S,W): o = open, b = forced outlet. |
Placement
| Parameter | Type | Default | Description |
|---|---|---|---|
threshold_contributing_pixels |
int | 1000 |
Channel initiation threshold, in pixels. Landslides start only below this. It also caps the largest landslide. |
mask_fname |
string | NULL |
Optional raster restricting where landslides may occur. Non-zero and valid = active, unless mask_active_values narrows it. |
mask_active_values |
string | `` | Comma-separated list of mask values to treat as active (e.g. 4 or 3,4). Empty = historical rule: any non-zero valid pixel is active. |
ice_mask_fname |
string | NULL |
Raster marking ice cover (non-zero = ice). No landslide is placed on ice. |
ice_mask_fname is intersected with mask_fname when both are given: a
pixel can host a landslide only if it is inside the active mask and not under
ice. The number of pixels excluded is reported, because it changes the active
area — and the active area sets the landslide count for a prescribed erosion
rate, so two runs differing only in an ice mask are not comparable by count.
mask_active_values: selecting a subset of a classified raster. By default,
any non-zero valid pixel in the mask raster is active. mask_active_values allows
you to specify which values count as active, so a pre-classified raster can be used
directly without reclassifying to 0/1 first. Example use case: the step-change
tag raster from lsdtt-cosmo-prediction has four classes: 1 = fluvial-old,
2 = hillslope-old, 3 = fluvial-new, 4 = hillslope-new. Landslides only on
ground that has already experienced the faster post-knickpoint erosion means
mask_fname: _SC_TAG.tif and mask_active_values: 4. Without
mask_active_values, all four classes would be active, placing landslides
upstream of the knickpoint — silently inverting the intended scenario. The values
are matched to the nearest integer, so this works for integer class/tag rasters,
not continuous ones. The realised active-pixel count is always reported.
Initiation pixels are drawn uniformly from the eligible set. This is what Niemi and Yanites both do, and both flag it as a simplification — real triggered inventories cluster strongly.
A size-dependent bias to be aware of. Hosting an n-pixel landslide requires n pixels upslope, and contributing area is itself power-law distributed, so the eligible set shrinks rapidly with size. The largest landslides can only initiate just above channel heads and will occupy most of a zero-order basin. That is defensible — large landslides really do evacuate whole zero-order basins — but it is imposed rather than chosen.
Size distribution
| Parameter | Type | Default | Description |
|---|---|---|---|
landslide_size_model |
string | inverse_gamma |
inverse_gamma (Malamud et al. 2004) or truncated_pareto (Yanites et al. 2009). |
inverse_gamma_rho |
float | 1.40 |
ρ. Asymptotic tail exponent is −(ρ+1) = −2.40. |
inverse_gamma_a_m2 |
float | 1280 |
a (m²). Sets the modal size. |
inverse_gamma_s_m2 |
float | -132 |
s (m²), negative. Sets the small-area rollover. |
pareto_alpha_pdf |
float | 2.3 |
Truncated Pareto exponent — PDF, not cumulative. |
min_landslide_pixels |
int | 1 |
Smallest landslide, in pixels. |
max_landslide_area_m2 |
float | 0 |
Largest landslide. 0 = use the channel threshold. May not exceed it. |
area_volume_preset |
string | larsen_global |
V = αA^γ preset. See below. |
The inverse gamma is the default because it has both a power-law tail and a small-area rollover. Malamud argues the rollover is real rather than a mapping artefact, and HyLands independently produces one from mechanics.
⚠ Exponent convention
pareto_alpha_pdfis the probability-density exponent. Niemi'sb = 1.18is a cumulative exponent; the two are related byα_pdf = b_cum + 1, so Niemi corresponds topareto_alpha_pdf: 2.18. Valagussa et al. (2019) measure 1.75–3.11 across lithologies for coseismic inventories.
Area-to-volume presets
From Larsen, Montgomery & Korup (2010) Supplementary Table S1. A in m², V in m³.
| Preset | γ | α | n |
|---|---|---|---|
larsen_global (default) |
1.332 | 0.1459 | 4231 |
larsen_soil_scar |
1.262 | 0.2244 | 1617 |
larsen_bedrock_scar |
1.410 | 0.2344 | 168 |
larsen_soil_all |
1.145 | 0.3631 | 2136 |
larsen_bedrock_all |
1.350 | 0.1862 | 604 |
hovius_slab |
1.5 | 0.05 | — |
hovius_parabolic |
1.5 | 0.025 | — |
Prefer the scar presets. This tool excavates scars and does not model
deposits. The commonly quoted γ_soil = 1.145 and γ_bedrock = 1.35 are combined
scar + deposit fits; the scar-only rows give 1.262 and 1.410. Using
larsen_soil_all for a scar model understates large soil landslides by a factor
that grows with area.
The hovius_* presets exist to reproduce Niemi, Yanites and Malamud, all of
which use γ = 1.5. Larsen shows γ = 1.5 overestimates total volume by at least
a factor of two versus γ = 1.4, and since the slab form is itself twice the
parabolic form at equal ε, a careless choice can be 4× out.
Resolution limit
With min_landslide_pixels: 1 the smallest representable landslide is one cell.
At 30 m that is 900 m², above Malamud's modal area of ~400 m². At that
resolution the rollover cannot be represented and the sampled distribution is
effectively a truncated power law whatever family you select. The tool warns:
WARNING: cell size cannot resolve the small-area rollover.
Triggering
| Parameter | Type | Default | Description |
|---|---|---|---|
landslide_mode |
string | single_event |
single_event or series. |
event_time_yr |
float | 0 |
Trigger time for single_event. |
event_volume_m3 |
float | 0 |
Total volume to remove per event. |
event_volume_per_area_metres |
float | 0 |
Event volume per unit active area (m³/m² = metres of lowering). Used when event_volume_m3 is 0. |
series_start_yr |
float | 0 |
Series start. |
series_end_yr |
float | 100000 |
Series end. |
mean_recurrence_yr |
float | 1000 |
Mean interval between events. |
poisson_timing |
bool | true |
Exponential inter-event intervals (Yanites Eq. 14). false = exactly regular. |
long_term_erosion_rate_mm_kyr |
float | 0 |
Landslide erosion rate over the active area. The Niemi convention: prescribe the rate, let the model find the events. Series mode only. |
anneal_time_yr |
float | 0 |
A failed pixel cannot fail again for this long. |
budget_tolerance |
float | 0.02 |
Relative tolerance on the landslide-count solve. |
budget_max_iterations |
int | 50 |
Iteration cap. |
random_seed |
int | 1 |
Same seed reproduces a run exactly. |
"Active area" is the ground that can host a landslide, not the whole raster. Using the raster area would understate the rate on a channel-dominated or masked DEM.
anneal_time_yr stands in for regolith regeneration and is uncalibrated —
there is no strong literature constraint on it.
Poisson timing follows Yanites et al. (2009), who are explicit that it is a simplification: real landslides are triggered by storms and earthquakes and are neither independent nor uncorrelated.
Three things that will bite you
These are properties of a heavy-tailed size distribution, not defects, and all three are reported at run time.
1. The event volume must be much larger than the mean landslide volume
Solving for the landslide count conditions the draw on its total volume. With
many landslides that conditioning is weak. With few it is severe, and at one
landslide per event it is absolute — the tool is no longer sampling the
distribution, it is searching for the single landslide whose volume equals the
budget, so realised sizes cluster at (V_target/α)^(1/γ).
The run reports E[V]; keep the per-event volume at tens of times that.
Below ten landslides per event the tool warns:
WARNING: only N landslide(s) in this event. Solving for N against a small
budget SELECTS sizes rather than sampling them...
2. A_max barely truncates the distribution but dominates the volume
At a 1000-pixel threshold on a 30 m DEM, A_max = 0.9 km² removes 0.008 % of
landslides by number and 59 % of the volume. The tail is p(A) ∝ A^−2.40
and volume goes as A^1.332, so volume density goes as A^−1.068 — each
logarithmic decade of area contributes roughly equally to the total.
The practical consequence: E[V], and hence the landslide count for a fixed
budget, is strongly sensitive to threshold_contributing_pixels. Halving it
changes the count by tens of per cent. Both truncated fractions are echoed in
the run output.
3. Budget tolerance is unreachable when one landslide can carry the budget
A single landslide at A_max carries α·A_max^γ. When that is a large fraction
of the event volume, no choice of landslide count can land within a tight
tolerance. Roughly, budget_tolerance is reachable when
event_volume_m3 >> α·A_max^γ. The alternative — trimming the last landslide to
fit — would buy exactness by destroying the distribution at the large end, so it
is not offered.
Cosmogenic coupling
| Parameter | Type | Default | Description |
|---|---|---|---|
calculate_crn_concentration |
bool | false |
Compute the post-landslide surface concentration raster. |
run_sample_point_ensemble |
bool | false |
Run a multi-realisation sample-point ensemble and write <write_fname>_LS_SAMPLE_EFFECT.csv. |
sample_points_fname |
string | NULL |
Input sample-point CSV for ensemble mode. |
sample_name_column |
string | sample_name |
Name column in sample_points_fname. |
sample_latitude_column |
string | latitude |
Latitude column in sample_points_fname (EPSG:4326 degrees). |
sample_longitude_column |
string | longitude |
Longitude column in sample_points_fname (EPSG:4326 degrees). |
n_realisations |
int | 50 |
Number of realisations for ensemble mode. |
ensemble_seed_stride |
int | 7919 |
Seed increment between realisations (random_seed + i*stride). |
sample_snap_max_search_radius_pixels |
int | 25 |
Maximum snap radius when mapping sample points to threshold channels. |
nuclide |
string | Be10 |
Be10, Al26 or C14. |
muon_scheme |
string | BraucherBorchers |
Muon production scheme. |
scaling_scheme |
string | uniform |
Production scaling path for CRN coupling: uniform, stone, or lsdn. uniform keeps the legacy scalar path (production_scaling and total_shielding). stone/lsdn build a per-pixel CosmoSite from the DEM. |
atmosphere |
string | ERA40 |
Atmosphere model for site-based scaling (stone/lsdn): ERA40, NCEP, standard. |
crn_nc_fname |
string | "" |
Path to crn_parameters.nc for site-based scaling and atmosphere handling. Empty uses bundled lookup/fallback logic. |
sample_age_yr |
float | 0 |
Sample exposure age (yr BP) for time-integrated production correction in site-based scaling. |
background_eff_erate_g_cm2_yr |
float | 0.001 |
Background effective erosion rate before and after failure. |
production_scaling |
float | 1.0 |
Uniform production scaling factor. Used directly when scaling_scheme: uniform. |
total_shielding |
float | 1.0 |
Uniform total shielding factor. Used directly when scaling_scheme: uniform; for site-based scaling use topo_shield_value, snow_shield_eff_thickness, self_shield_eff_thickness. |
topo_shield_value |
float | 1.0 |
Uniform topographic shielding scalar (0-1) for site-based scaling. |
snow_shield_eff_thickness |
float | 0 |
Uniform snow shielding as effective depth (g/cm2) for site-based scaling. |
self_shield_eff_thickness |
float | 0 |
Uniform self/sample shielding as effective depth (g/cm2) for site-based scaling. |
rock_density_kg_m3 |
float | 2650 |
Density of the eroding bedrock column. |
scar_density_kg_m3 |
float | -1 |
Density of the material a landslide excavates. The negative sentinel deliberately inherits the active area_volume_preset; prediction from an already-generated excavation raster instead defaults explicitly to 1500 kg/m3. |
crn_report_time_yr |
float | 0 |
Time at which concentrations are reported, on the same clock as event times. |
cronusEmulatorSt and cronusEmulatorLSDn are intentionally rejected in this
tool's landslide CRN path. The lower-level step-change/transient kernels used
here do not yet support the emulator parameterisation consistently.
Two densities, and why they are not the same number
rock_density_kg_m3 is the eroding column; scar_density_kg_m3 is the material
that failed. They are different quantities and conflating them is a real error,
not a rounding matter.
The area-to-volume scaling V = αA^γ is fitted to measured scar volumes, so
the excavation depth it implies is a true geometric thickness of whatever
failed — and for a shallow landslide that is soil, at roughly 1500 kg/m³.
Carrying it at 2650 overstates the mass depth by a factor of 1.77, and since
production falls exponentially with mass depth that changes production at the
scar base by 2.05.
The density therefore travels with the preset, because choosing the preset is already a statement about the material:
| Preset | γ | Scar density | Material-specific? |
|---|---|---|---|
larsen_soil_scar |
1.262 | 1500 | yes |
larsen_bedrock_scar |
1.410 | 2650 | yes |
larsen_soil_all |
1.145 | 1500 | yes |
larsen_bedrock_all |
1.350 | 2650 | yes |
larsen_global (default) |
1.332 | 2650 placeholder | no — warns |
hovius_slab / hovius_parabolic |
1.5 | 2650 placeholder | no — warns |
larsen_global and the Hovius rows are fitted across materials and have no
defensible density, so leaving scar_density_kg_m3 negative with one of those
selected raises a warning. The default preset is one of them, which is
deliberate: that is the case that would otherwise pass silently.
No new cosmogenic physics is introduced. The model composes two existing validated calls: inheritance — a landslide stripping effective depth d exposes rock that was at depth d, so its concentration is the steady-state value there — and re-accumulation since failure, using the transient integrator's instantaneous removal event, which is precisely a landslide.
The time-of-failure raster is both the annealing clock and the
time-since-change field, so it feeds lsdtt-cosmo-prediction directly.
Feeding the landslide field into a step change
lsdtt-cosmo-prediction reads <stem>_LS_TFAIL and <stem>_LS_EXCAVATION and
superimposes the scars on a step-change concentration field, in either of two
idealised scenarios — scar (the debris is long gone, what remains is a
stripped column) or flush (the debris is still in the channel, so the sample
contains the whole excavated slab), or both split by age. See
the landslide coupling section.
Two conventions to match across the two tools:
- the failure-time clock.
_LS_TFAILholds an absolute time on whatever clockevent_time_yr/ the series uses.lsdtt-cosmo-predictionconverts it to elapsed years withlandslide_report_time_yr, so that must be "now" on the same clock. - the scar density. Set
scar_density_kg_m3consistently in both, or the excavated slab is carried at one density here and another there.
Output
| Parameter | Type | Default | Output file |
|---|---|---|---|
write_excavation_depth_raster |
bool | true |
<write_fname>_LS_EXCAVATION.tif — cumulative depth removed (m). |
write_time_of_failure_raster |
bool | true |
<write_fname>_LS_TFAIL.tif — time each pixel last failed. |
write_post_landslide_dem_raster |
bool | false |
<write_fname>_LS_DEM.tif — the DEM after excavation. |
write_landslide_csv |
bool | true |
<write_fname>_LS_INVENTORY.csv — one row per landslide. |
run_sample_point_ensemble |
bool | false |
<write_fname>_LS_SAMPLE_EFFECT.csv — per-sample control vs landslide apparent-rate ensemble statistics. |
The inventory CSV has landslide_id, n_pixels, area_m2, volume_m3,
mean_depth_m. It is the realised size distribution, for checking against the
requested one.
Checking the realised distribution
python3 tests/scripts/landslide_distribution_acceptance.py \
--inventory <write_path>/<write_fname>_LS_INVENTORY.csv \
--cell-size 10 --out-csv acceptance.csv
Do not compare the fitted tail exponent with ρ+1. The inverse gamma reaches its asymptotic slope only for A ≫ a: the local log-log slope is
−(ρ+1) + a/(A−s), which for the Malamud parameters is −0.38 at the mode, −2.15 at 5,000 m², and −2.40 only around 10⁶ m². SinceA_maxis capped by hillslope size, a realistic run has no range over which the asymptote is measurable — a correct inventory fits to about 1.73 from the mode. The script compares against the exponent the target distribution itself gives over the same fit range, which is the meaningful comparison.
Example: one triggered event
read_path: /data/dems/
read_fname: catchment
write_path: /data/output/
write_fname: storm_event
threshold_contributing_pixels: 1000
landslide_size_model: inverse_gamma
area_volume_preset: larsen_bedrock_scar
landslide_mode: single_event
event_time_yr: 0
event_volume_m3: 5000000
random_seed: 1
Example: a long series at a prescribed erosion rate
The Niemi convention — prescribe the rate, let the model find the events.
read_path: /data/dems/
read_fname: catchment
write_path: /data/output/
write_fname: series_50
threshold_contributing_pixels: 1000
area_volume_preset: larsen_bedrock_scar
landslide_mode: series
series_start_yr: 0
series_end_yr: 100000
mean_recurrence_yr: 1000
poisson_timing: true
long_term_erosion_rate_mm_kyr: 50
anneal_time_yr: 2000
calculate_crn_concentration: true
nuclide: Be10
production_scaling: 4.0
crn_report_time_yr: 100000
Validated against Niemi et al. (2005): across 20–200 mm/kyr the realised long-term rate returns the prescribed rate to within 1.9 %, against the ~3 % they report for their own model.
Sources
- Malamud, B.D., Turcotte, D.L., Guzzetti, F. & Reichenbach, P. (2004) "Landslide inventories and their statistical properties", ESPL 29, 687–711. The inverse-gamma distribution and its parameters.
- Larsen, I.J., Montgomery, D.R. & Korup, O. (2010) "Landslide erosion controlled by hillslope material", Nature Geoscience 3, 247–251. Area–volume scaling, including the scar/deposit split.
- Niemi, N.A. et al. (2005) "Effects of bedrock landslides on cosmogenically determined erosion rates", EPSL 237, 480–498. Prescribed-rate convention.
- Yanites, B.J., Tucker, G.E. & Anderson, R.S. (2009) JGR-ES 114, F01007. Truncated Pareto, Poisson timing, the CRN question.
- Valagussa, A. et al. (2019) EPSL 506, 268–281. How the exponent varies with trigger intensity and lithology.
- Campforts, B. et al. (2020) "HyLands 1.0", GMD 13, 3863–3886. The emergent alternative.
Parameters
This section is generated from the executable's -h json registry. Do not edit it manually.
Status: experimental. This CLI is not yet fully tested.
File I/O
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
read_path |
string |
./ |
io |
- | Directory from which input files are read. | Defaults to the directory holding the parameter file. |
read_fname |
string |
- | io |
- | Input filename, with or without extension (e.g. my_dem.tif). | Read from read_path. lsdtt3 uses GDAL, so any GDAL-readable raster format works. If empty, defaults to the parameter filename stem. |
write_path |
string |
- | io |
- | Directory to which output files are written. | Defaults to read_path when not set. |
write_fname |
string |
- | io |
- | Output filename prefix (no path, no extension). | All outputs are named <write_fname>_<descriptor>.<ext>. Defaults to the stem of read_fname when not set. |
Pit filling
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
fill_before_routing |
bool |
true |
switch |
- | Choose whether to pit-fill the DEM before building the flow network. | ASKS: should the DEM be filled at all? Filling is OPTIONAL here and this is a genuine analytical choice. True (the default) routes over a pit-free surface. False builds the flow network on the UNFILLED surface, so flow paths terminate at sinks instead of being carried through them. Do not confuse this with raster_is_filled, which is an assertion that the input is already filled. |
DEM preparation
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
min_slope_for_fill |
float |
0.0001 |
param |
- | Minimum imposed slope during pit filling (m/m). | - |
boundary_conditions |
string |
oooo |
param |
- | D8 flow routing boundary conditions. | Four-character string (N,E,S,W): o=open, b=forced outlet. |
Output
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
write_output_format |
string |
cog |
param |
- | Raster output format: cog, gtiff, or same_as_input. | - |
write_excavation_depth_raster |
bool |
true |
switch |
- | Write cumulative excavation depth (m). | Filename: <write_fname>_LS_EXCAVATION.tif |
write_time_of_failure_raster |
bool |
true |
switch |
- | Write the time each pixel last failed. | This is the annealing clock AND the cosmogenic time-since-change field. Filename: <write_fname>_LS_TFAIL.tif |
write_post_landslide_dem_raster |
bool |
false |
switch |
- | Write the DEM after excavation. | Filename: <write_fname>_LS_DEM.tif |
write_landslide_csv |
bool |
true |
switch |
- | Write one row per landslide (size in pixels, area, volume). | The realised size distribution, for comparison against the requested one. Filename: <write_fname>_LS_INVENTORY.csv |
Channel network
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
threshold_contributing_pixels |
int |
1000 |
param |
- | Contributing-pixel threshold defining a channel head. | The total number of upslope contributing pixels from the flow-routing object, not the number of direct donors to a pixel. Reduce this value to extract a denser network. This is a PIXEL COUNT and therefore depends on the grid resolution: the equivalent drainage area is threshold_contributing_pixels x cell area. Where a genuine area is wanted instead, the convention is <what>_area_threshold_m2. |
Placement
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
mask_fname |
string |
NULL |
param |
- | Optional raster restricting where landslides may occur. | Non-zero and valid = active, unless mask_active_values narrows it. NULL uses the whole DEM. |
mask_active_values |
string |
- | param |
- | Comma-separated list of mask values to treat as active, e.g. "4" or "3,4". Empty (the default) keeps the historical rule: any non-zero valid pixel is active. | This exists so a CLASSIFIED raster can be used directly as a mask instead of having to be reclassified to 0/1 first. The motivating case is the step-change tag raster from lsdtt-cosmo-prediction (<stem>_SC_TAG.tif: 1 = fluvial-old, 2 = hillslope-old, 3 = fluvial-new, 4 = hillslope-new), where landsliding only on ground that has already felt the faster post-knickpoint erosion means mask_active_values: 4. Passing that raster without this parameter would make ALL FOUR classes active, putting landslides upstream of the knickpoint and quietly inverting the result. Values are matched to the nearest integer, so this is for class/tag rasters, not continuous ones. The realised host-pixel count is always reported -- check it. |
ice_mask_fname |
string |
NULL |
param |
- | Raster marking ice cover (non-zero = ice). No landslide is placed on ice. | Intersected with mask_fname if both are given: a pixel can host a landslide only if it is inside the active mask AND not under ice. The number of pixels excluded is reported, since it changes the active area and therefore the landslide count for a prescribed erosion rate. |
Size distribution
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
landslide_size_model |
string |
inverse_gamma |
param |
- | Size distribution family: inverse_gamma or truncated_pareto. | inverse_gamma (Malamud et al. 2004) has a power-law tail AND a small-area rollover. truncated_pareto (Yanites et al. 2009) is a pure power law, kept to reproduce published results. |
inverse_gamma_rho |
float |
1.40 |
param |
- | Inverse gamma rho. Tail exponent is -(rho+1), so 1.40 gives -2.40. | Malamud et al. (2004) maximum-likelihood fit. |
inverse_gamma_a_m2 |
float |
1280 |
param |
- | Inverse gamma a (m2). Sets the modal landslide size. | Malamud et al. (2004): 1.28e-3 km2. |
inverse_gamma_s_m2 |
float |
-132 |
param |
- | Inverse gamma s (m2), NEGATIVE. Sets the small-area rollover. | Malamud et al. (2004): -1.32e-4 km2. |
pareto_alpha_pdf |
float |
2.3 |
param |
- | Truncated Pareto exponent. This is the PDF exponent, NOT cumulative. | alpha_pdf = b_cumulative + 1. Valagussa et al. (2019) measure 1.75-3.11 across lithologies; Niemi's b = 1.18 is alpha_pdf = 2.18. |
min_landslide_pixels |
int |
1 |
param |
- | Smallest landslide, in pixels. | At coarse resolution this sets a floor above the modal size and the rollover becomes unrepresentable; the tool warns when that happens. |
max_landslide_area_m2 |
float |
0 |
param |
- | Largest landslide (m2). 0 = use the channel threshold, which is the physical cap. | May not exceed threshold_contributing_pixels x cell area: a landslide cannot be bigger than its hillslope. |
area_volume_preset |
string |
larsen_global |
param |
- | V = alpha*A^gamma preset (Larsen et al. 2010 Table S1). | larsen_global, larsen_soil_scar, larsen_bedrock_scar, larsen_soil_all, larsen_bedrock_all, hovius_slab, hovius_parabolic. PREFER THE SCAR PRESETS: this tool excavates scars, and the commonly quoted soil/bedrock gammas are combined scar+deposit fits. hovius_* reproduce Niemi/Yanites but overestimate volume by >= 2x per Larsen. |
Triggering
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
landslide_mode |
string |
single_event |
param |
- | single_event or series. | single_event triggers once at event_time_yr. series runs repeatedly between series_start_yr and series_end_yr. |
event_time_yr |
float |
0 |
param |
- | Trigger time for single_event mode (yr, on the user's own clock). | Stamped into the time-of-failure raster, which is both the annealing clock and the cosmogenic time-since-change field. |
event_volume_m3 |
float |
0 |
param |
- | Total volume to remove in one event (m3). | - |
event_volume_per_area_metres |
float |
0 |
param |
- | Event volume per unit ACTIVE area (m3/m2, i.e. metres of lowering). | Used when event_volume_m3 is 0. Active area is the ground that can host a landslide, not the whole raster. |
series_start_yr |
float |
0 |
param |
- | Series start time (yr). | - |
series_end_yr |
float |
100000 |
param |
- | Series end time (yr). | - |
mean_recurrence_yr |
float |
1000 |
param |
- | Mean interval between events in series mode (yr). | - |
poisson_timing |
bool |
true |
switch |
- | Draw inter-event intervals from an exponential distribution. | Yanites et al. (2009) Eq. 14. They are explicit that this is a simplification: real landslides are triggered by storms and earthquakes and are neither independent nor uncorrelated. Set false for exactly regular events. |
long_term_erosion_rate_mm_kyr |
float |
0 |
param |
- | Landslide erosion rate over the active area (mm/kyr), series mode. | The Niemi et al. (2005) convention: prescribe the rate and let the model find the events. Overrides event_volume_m3 in series mode. |
anneal_time_yr |
float |
0 |
param |
- | A failed pixel cannot fail again for this long (yr). | Stands in for regolith regeneration. UNCALIBRATED -- there is no strong literature constraint on it. |
budget_tolerance |
float |
0.02 |
param |
- | Relative tolerance when solving for the number of landslides. | Reachable only when the event volume is large compared with the biggest permitted landslide; see the CLI reference. |
budget_max_iterations |
int |
50 |
param |
- | Iteration cap for the landslide-count solve. | - |
random_seed |
int |
1 |
param |
- | Seed. The same seed reproduces a run exactly. | - |
Cosmogenics
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
run_sample_point_ensemble |
bool |
false |
switch |
- | Run an ensemble at user sample points and write sample-effect CSV. | Computes apparent erosion rates at snapped sample outlets with and without landslides over n_realisations. Reports both the ratio to the no-landslide control and the ratio of the apparent rate to the basin's TRUE mean erosion rate (arithmetic area mean), the latter being the error a real detrital study would incur. Filename: <write_fname>_LS_SAMPLE_EFFECT.csv |
sample_points_fname |
string |
NULL |
io |
- | CSV of sample points used by run_sample_point_ensemble. | Must contain latitude/longitude columns (defaults: latitude, longitude). |
sample_name_column |
string |
sample_name |
param |
- | Sample-name column in sample_points_fname. | If missing or empty, names default to sample_1, sample_2, ... |
sample_latitude_column |
string |
latitude |
param |
- | Latitude column name in sample_points_fname (EPSG:4326 degrees). | - |
sample_longitude_column |
string |
longitude |
param |
- | Longitude column name in sample_points_fname (EPSG:4326 degrees). | - |
n_realisations |
int |
50 |
param |
- | Number of landslide realisations for run_sample_point_ensemble. | - |
ensemble_seed_stride |
int |
7919 |
param |
- | Seed increment between ensemble realisations. | Realisation i uses random_seed + i*ensemble_seed_stride. |
sample_snap_max_search_radius_pixels |
int |
25 |
param |
- | Maximum snap radius (pixels) for sample points to threshold channel. | Used by expanding-square snapping in run_sample_point_ensemble. |
calculate_crn_concentration |
bool |
false |
switch |
- | Compute the post-landslide surface nuclide concentration raster. | Composes existing validated CRN calls: steady state for the inherited profile, transient re-accumulation since failure. Filename: <write_fname>_LS_CONC.tif |
nuclide |
string |
Be10 |
param |
- | Nuclide: Be10, Al26 or C14. | - |
muon_scheme |
string |
BraucherBorchers |
param |
- | Muon production scheme. | - |
scaling_scheme |
string |
uniform |
param |
- | Production scaling for the CRN concentration path: uniform, stone or lsdn. | uniform preserves the legacy scalar path using production_scaling and total_shielding (no crn_parameters.nc needed). stone/lsdn build a real CosmoSite from the DEM and use per-pixel production and shielding. |
atmosphere |
string |
ERA40 |
param |
- | Atmosphere model for site-based production: ERA40, NCEP or standard. | Used only when scaling_scheme is stone or lsdn. |
crn_nc_fname |
string |
- | param |
- | Path to crn_parameters.nc for site-based production and atmosphere. | Used only when scaling_scheme is stone or lsdn. Empty = bundled nc beside the executable if found, otherwise standard atmosphere fallback. |
sample_age_yr |
float |
0 |
param |
- | Sample exposure age (yr BP) for the time-integrated production correction. | Used only when scaling_scheme is stone or lsdn and crn_parameters.nc loads. |
background_eff_erate_g_cm2_yr |
float |
0.001 |
param |
- | Background effective erosion rate (g/cm2/yr), before and after failure. | ~3.8 mm/kyr at rho = 2650. |
production_scaling |
float |
1.0 |
param |
- | Stone 2000 production scaling (1.0 at SLHL). | - |
total_shielding |
float |
1.0 |
param |
- | Topographic x snow x self shielding. | Applied through the Vermeesch redistribution, separately from production_scaling. Used directly when scaling_scheme is uniform. With site-based scaling, keep this at 1 and use topo/snow/self parameters. |
topo_shield_value |
float |
1 |
param |
- | Uniform topographic shielding factor for site-based scaling (0-1). | Used when scaling_scheme is stone or lsdn. |
snow_shield_eff_thickness |
float |
0 |
param |
- | Uniform snow shielding as effective depth (g/cm2) for site-based scaling. | Used when scaling_scheme is stone or lsdn. |
self_shield_eff_thickness |
float |
0 |
param |
- | Uniform self/sample shielding as effective depth (g/cm2) for site-based scaling. | Used when scaling_scheme is stone or lsdn. |
rock_density_kg_m3 |
float |
2650 |
param |
- | Density of the ERODING BEDROCK COLUMN (kg/m3). | Converts the background erosion rate between m/yr and g/cm2/yr. This is NOT the density of the material a landslide removes -- see scar_density_kg_m3. |
scar_density_kg_m3 |
float |
-1 |
param |
- | Density of the material a landslide EXCAVATES (kg/m3). Negative takes it from area_volume_preset. | This is a different quantity from rock_density_kg_m3 and conflating them is a real error. Larsen's V = alpha A^gamma is fitted to MEASURED scar volumes, so the excavation depth is a true geometric thickness of whatever failed -- soil, at roughly 1500 kg/m3, for a shallow landslide. Carrying that at 2650 overstates the mass depth by about a factor of 1.77, and since production falls exponentially with mass depth it changes the concentration of the delivered material by more than a factor of two. The material-specific presets carry a density: larsen_soil_scar 1500, larsen_bedrock_scar 2650. larsen_global and the hovius presets are fitted across materials and carry none, so leaving this negative with one of those selected raises a warning. |
crn_report_time_yr |
float |
0 |
param |
- | Time at which concentrations are reported, on the same clock as the event times. | - |
Interior nodata
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
interior_nodata_method |
string |
sink |
param |
- | How nodata pixels inside the DEM are treated: sink or fill. | Interior nodata are nodata pixels not connected to the raster edge through other nodata (isolated voids, moulins, masked lakes). sink (the default, unchanged behaviour): they are outlets, so flow that reaches them ends there, as at the DEM edge; use this for real internal drainage (e.g. moulins on an ice sheet). fill: they are interpolated with nodata_fill_method_choice before any filling or routing, so flow passes across them; use this for data voids. Nodata connected to the edge (e.g. sea removed by min_elevation) is never filled and always acts as an open boundary. |
nodata_fill_method_choice |
string |
laplacian |
param |
interior_nodata_method=fill |
Method for filling interior nodata pixels. | laplacian: smooth Dirichlet interpolation (recommended). iterative_weighted_average: fast, well-suited to thin voids. Used when interior_nodata_method is fill. |
nodata_fill_max_iter |
int |
10000 |
param |
interior_nodata_method=fill |
Maximum iterations for iterative nodata fill methods. | Used when interior_nodata_method is fill. |