Bayesian Erosion Modeling for inversion of detrital Low-Temperature Thermochronometric ages
Published:
In Borgohain et al. (2025), which utilizes a Bayesian erosion model developed by Avdeev et al. (2011), demonstrate the results of Bayesian erosion modeling for estimating erosion history from detrital fission-track thermochronometric ages.
The following documentation describes:
- Overview of running the Bayesian erosion model of Avdeev et al. (2011)
- Configuring a model for a catchment ( ANIDT4)
- Details about code options (Will be uploaded soon).
- Details about code modification for Borgohain et al. (2025) (Will be uploaded soon).
Overview of the Bayesian erosion modeling in Python
Installation and computer setup demonstrated in Borgohain et al. 2024 (under review in Tectonics)
- Original Avdeev et al. (2011) can be downloaded from a link click here. Downloaded file contains two main folders:
data
detrital_ui
.
- The simulation is carried out in Ubuntu 20.04.6 LTS, 64 bits.
- Conda environment was created (for example
py2
) and activated. - In
py2
environment, the following packages and libraries are required to run Avdeev et al. (2011) Bayesian erosion model- Python 2.7 (specifically version python=2.7.18) installed
- numpy (version 1.16.6), matplotlib (1.5.0) installed along with required libraries. Other libraries detail can be found in file called
Bayesian_detrital_env.yml
, link is here - Pymc (version - 2.3.8) installed, a link for details is here
conda install pymc::kabuki
code was used to install PyMc- Check for installation of
pymc
$ python >>> import pymc >>>
- Now all set to begin
Start…
Load input files
- Create a folder with a sample name (for example ANIDT4)
- In ANIDT4 create another two folder with name
data
anddetrital_ui
. - Upload two input data files in
data
folder of ANIDT4- Age file
.csv
in the following formate (This is detrital cooling age distribution of sample ANIDT4)27.0 13.7 11.7 14.2 9.4 6.9 . .
- DEM file
.xyz
in the following format (This is latitude-x, longitude-y, elevation of catchment-z of sample colleceted from catchment called as ANIDT4).x y z 217623.033 3251932.988 5165 217653.033 3251932.988 5167 217683.033 3251932.988 5168 . . . . . .
- Age file
- Copy code files from the
detrital_ui
folder of downloaded file , and then paste these in ANIDT4’sdetrital_ui
folder. Specifically, the following files:- Python files (
.py
):common.py
,data_type.py
,model_setup.py
,plot.py
, andrun.py
- Python files (
Running a model
- Open a terminal in the folder (
detrital_ui
) of ANIDT4 containing code files (i.e., Python files) and activate the environmentpy2
- Run the Bayesian erosion model by typing
python run.py
and then clickenter
Output files
Done, the model output contains:
- Simulated age-elevation plot, a
.png
file (summary.png) - Goodness of fit test plot, a
.png
file (KS_test.png) - A
.csv
file (statistics.csv) containing:- Erosion rates (mm/yr)
e1
,e2
,e3
,… - Age of erosion rate change (Ma)
abr1
,abr2
,…
- Erosion rates (mm/yr)
…End
Configuring a model
model_setup.py
file (in detrital_ui
folder of downloaded file) is used primarily to configure the model for a sample for various erosion history scenarios (here example sample is ANIDT4). The following changes are required in model_setup.py
, this can be done by editing class and variables in the model_setup.py
:
- Assign paths of input data files
- Assign DEM file location and file name, for example, DEM file name is
ANIDT4.xyz
catchment_1 = Catchment(hypsometry_file = "../data/ANIDT4.xyz", elevation_column = 'z')
- Assign age file location, sample name, catchment data (
catchement_1
), thermochronometric type (AFT
), for example, the age file name isANIDT4.csv
sample_1 = DetritalSample(age_file = "../data/ANIDT4.csv", sample_name = 'ANIDT4', catchment = catchment_1, tc_type = 'AFT')
- Assign DEM file location and file name, for example, DEM file name is
- Priors (In Bayesian statistics, a prior is the initial beliefs and assumptions about a model’s parameters. Priors are based on existing knowledge or expert opinion, and are usually specified using probability distributions)
- First prior is the range of the erosion rate that the sample would have experienced, for example, from
0
to3
mm/yr for ANIDT4 catchment sample, here 0 is a minimum and 3 is a maximum erosion rate that a catchment ( ANIDT4) would have experienced. This is based on previous studies around the sample location, or it can be a guess. Inmodel_setup.py
file, this is coded aserate_prior = (0,3)
. - Second prior is a range of the timing of change (or changes) in erosion rates that a catchment would have experienced, for example, from
0 to 60
Ma for ANIDT4 sample. This prior can be assigned from minimum and maximum ages of the measured age distribution of ANIDT4 sample. Inmodel_setup.py
file, this is coded asabr_prior = (0,60)
.
- First prior is the range of the erosion rate that the sample would have experienced, for example, from
- Model scenarios: such as uniform and non-uniform erosion history scenarios. This is modeled by assigning the number of breaks in the model. In
model_setup.py
file, this is coded asbreak =...
.- Uniform erosion rate scenarios: In the uniform erosion history scenario, the break will be zero, i.e.,
break = 0
, which refers to uniform erosion rates through time or no change in erosion rates throughout the time. - Non-uniform erosion rate scenario (
break=1,2
), which refers to variation in erosion rates through time. Here,break=1
for the one-break scenario refers to one discrete change in erosion rates through time, andbreak=2
for the two-break refers to two discrete changes in erosion rate through time. Note the change can happen any time (break=1
) or any number of times (break=2
) between the assigned time range of change in erosion rates, here, for example between0 to 60
Ma
- Uniform erosion rate scenarios: In the uniform erosion history scenario, the break will be zero, i.e.,
- The best model scenario (whether
break=0
[zero-break],break=1
[one-break], orbreak=2
[two-break]) is evaluated by comparing the cumulative probability distribution of modeled ages and measured ages using a goodness-of-fit (GOF) plot that displays the results of Kolmogorov-Smirnov (KS) test. An overlap of these two data suites indicates an acceptable model fit. For example, the plot below displays a degree of overlap between simulated ages and measured ages; it is shown using the cumulative probability plots of measured AFT (orange dots) and swaths of modeled (or simulated) AFT (blue) ages. Here (the bottom three subplots) show p-values for zero break, one break, and two breaks models. The p-value is used to select the best model; it refers to the probability of getting model results close to observed results and the acceptable fitting criteria considered here is p >0.05. One-break model displays a better p-value (0.35) compared to the zero-break model (0.02) and the two-break model (0.22), indicating that statistical inference supports a single discrete change in erosion history. This suggests that erosion rates in catchment ANIDT4 shifted significantly around ~6.3 Ma, transitioning from initially slow (e2 = 0.07 mm/yr) to later rapid rates (0.6 mm/yr).
Three model scenarios: zero-break
, one-break
, and two-break
for a detrital AFT age distribution from a catchment ANIDT4 Example displaying modeled cooling history using Bayesian erosion model.
References
Avdeev, B., Niemi, N. A., & Clark, M. K. (2011). Doing more with less: Bayesian estimation of erosion models with detrital thermochronometric data. Earth and Planetary Science Letters, 305(3–4), 385–395. https://doi.org/10.1016/j.epsl.2011.03.020
Borgohain, B., Mathew, G., Salvi, D., Harbola, D., Rai, P., (2025). Spatial-Temporal Variation in Erosion Rate of Lohit Bomi-Chayu Batholith around Eastern Himalayan Syntaxis (SE of Namche Barwa massif), Tectonics, 44, e2024TC008507, https://doi.org/10.1029/2024TC008507