bayesian-eruption-arar-ages 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 jcarter-1
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,117 @@
1
+ Metadata-Version: 2.4
2
+ Name: bayesian-eruption-arar-ages
3
+ Version: 0.1.0
4
+ Summary: Bayesian eruption age inference for 40Ar/39Ar geochronology.
5
+ Author-email: Jack Carter <jackcarter9411@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/jcarter-1/BayesianEruptionArArAges
8
+ Project-URL: Repository, https://github.com/jcarter-1/BayesianEruptionArArAges
9
+ Project-URL: Issues, https://github.com/jcarter-1/BayesianEruptionArArAges/issues
10
+ Keywords: geochronology,argon-argon,40Ar-39Ar,Bayesian,eruption age,MCMC
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Scientific/Engineering
21
+ Requires-Python: >=3.8
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: numpy
25
+ Requires-Dist: pandas
26
+ Requires-Dist: scipy
27
+ Requires-Dist: matplotlib
28
+ Requires-Dist: tqdm
29
+ Requires-Dist: joblib
30
+ Requires-Dist: dill
31
+ Requires-Dist: scikit-learn
32
+ Requires-Dist: openpyxl
33
+ Dynamic: license-file
34
+
35
+ # BayesianEruptionArArAges
36
+ Mixture model for the inference of eruption ages from Ar-Ar datasets.
37
+
38
+ # Motivation
39
+ High precision $^{40}\mathrm{Ar}/^{39}\mathrm{Ar}$ geochronology is increasingly producing datasets with analytical uncertainty which is small enough so that we can see geological complexity. In addition, procedural advancements have allow for ever increasingly complex samples to be measured (e.g., van Zalinge et al. 2022; Baudry et al. 2024). For these types of datasets, complex and high analytical precision, classical approaches to age estimates can be problematic.
40
+
41
+ # Comparison to U-Pb
42
+ ---------
43
+ Keller et al. (2018) ask a very important question of zircon U-Pb datasets; When dating zircons from a volcanic product, how should we estiamte the "True" eruption age?
44
+
45
+ The problem is that zircon crystals can form before the eruption, so a set of zircon ages does not necessilary directly record the eruption date. It records a spread of pre-eruption ages. The authors show that classical weighted mean approach can be inaccurate particularly when zircon crystallization was a materially long process. They also showed that "good" MSWDs do not necessarily equate to good eruption ages.
46
+
47
+ The authors build an eruption model which more meaningfully follows the process:
48
+ * Zircons begin crystallizing at some earlier time.
49
+ * Their csytallization follows a probability distribution through time.
50
+ * Crystallization stops abruptly at the eruption.
51
+ * Measured zircons and their ages are draws from this distribution.
52
+
53
+ # Why is ArAr difference/also similar?
54
+ Like U-Pb, measured Ar/Ar ages for a sample, say a sanidine, from a volcanic product, do not necessarily reflect the "True" eruption. Observed ages may be younger than, older than, or draws from the "True" eruption. Each of these is possible through a range of phenomena. For example, if we consider the older part first then tailing up to increasing older ages, like Van Zalinge et al. (2022) or Ellis et al. (2017), may be the result of a cold storage in the magma. In this scenario the magma is cold enough and the eruption fast enough such that the $^{40}\mathrm{Ar}$ that is formed in the sanidine prior to the eruption event through $^{40}\mathrm{K}$ decay is not immediately lost but is partially retained. Then these sanidine that have retained some pre-eruptive argon storage would be older than the eruption itself. Similarly, older ages may also occur through the entrainment of older material during the eruption, like xenocryst or antecrysts or even like older material in the locality. This is observed in some samples where a few much older detrital grains are measured along with the much broader contingent of likely eruption grains (e.g., Sprain et al. 2018).
55
+ The other alternatives are "True eruption" grains or younger grains. Younger grains could also occurs via a variety of mechanisms. Firstly, younger ages could be partially reset grains that have lost argon due to a complex thermal history or maybe fluid interaction. Contamination could have also occured where altered grains are analysed and the age is compromised in someway that skew the ages young. This would be a definite outlier and should not be considered in the "True" eruption age.
56
+
57
+ Apparent ages that are from the true eruption age are probably best represented by a sharp distribution. This would be equivalent to saying that ages are sampled from a "Dirac" type distribution. All grains belonging to the eruption component are assumed to share exactly one true age with no real geological scatter beyond analytical uncertainty.
58
+
59
+ # Model desciption
60
+ This is a mixture model. There are three components from which we assess all observed ages and uncertainties.
61
+ <br>
62
+ (1) The young outliers
63
+ <br>
64
+ (2) The older tail
65
+ <br>
66
+ (3) The eruption age
67
+
68
+ ## The young outliers
69
+ -------
70
+ The young component are observations combined with uncertainties are less than the eruption age and do not conform to the eruption age population. In the traditional approach the selection, and then subsequent rejection, of outliers would commonly be a subjective process. Or a user may remove a grain due to anomalous K/Ca ratios or radiogenic-% argon-40 or maybe that the samples is further than 1.5 or 3 Mean/Median Absolute Deviations from the central position. In this model we are esstentially fitting the outliers, marginalizing over them, and then removing them from the inference of the eruption. We fit the outliers with a broad normal distribution and assume that the young outliers, if there are any, are all younger than the eruption.
71
+
72
+ ## The older grains
73
+ -------
74
+ For the older grains we follow the work of van Zalinge et al. (2022) and Baudry et al. (2024) in the construction of a survivorship type-exponential distribution to describe the underlying probability density function of the older tail. Unlike, these previous work we do not use the empirical prior that is derived from multiple datasets but we infer the shape parameter within the model framework.
75
+
76
+ ## The eruption
77
+ -------
78
+ The eruption is likely to be abrupt. The eruption is likely to be an instantaneous event on geologic time scales. The most likely form of the eruption is a Dirac-type distribution. For this we are saying that the eruption ages are sampled from a single value of infinite precision with only analytical uncertainty. In other words, there is no geologic uncertianty associated with the eruption. This is an ideal. Is it correct? Maybe.
79
+
80
+ But for times when it is not correct we offer alternate eruption distributions, including the favored Dirac approach we use:
81
+ * Dirac
82
+ * Normal (with extra geologic scatter $\sigma_{geo}$)
83
+ * Student-t ($\nu$ = 4, and extra geologic scatter $\sigma_{geo}$)
84
+ * Laplace (with extra geologic scatter $\sigma_{geo}$)
85
+
86
+ ## The mixing
87
+ -------
88
+ The model is a mixture would were every observed age and uncertainty of each grain is either:
89
+ * From the eruption
90
+ * A young component
91
+ * An old component
92
+ The primary aim of the model is to them estimate the eruption age.
93
+
94
+ ## Other pieces
95
+ ------
96
+ As well as the eruption age, parameter estimates are made for the entire model hypothesis vector. Parameters such as the shape factor of the older tail. Depending on what these are interpreted as, this could a characetistic length-scale of storage.
97
+
98
+
99
+ ## Future bits
100
+ -------
101
+ Auxiliary data is also useful for $^{40}\mathrm{Ar}/^{39}\mathrm{Ar}$ datasets. In particular K/Ca and radiogenic-40 percentage are useful guides in interpreting the "quality of a grain". They cannot be used to tell you they are eruption grains but they can be useful in saying--"this grain is inferred to be well behaved and unaltered". Extra data like this could be used as probabilistic weights in the full mixture model -- similar to Tholt et al. (2026).
102
+
103
+
104
+ ## References
105
+
106
+ Baudry, A., Singer, B.S., Jicha, B., Jilly-Rehak, C.E., Vazquez, J.A. and Keller, C.B., 2024. A Bayesian age from dispersed plagioclase and zircon dates in the Los Chocoyos ash, Central America. Earth and Planetary Science Letters, 643, p.118826.
107
+
108
+ Ellis, B.S., Mark, D.F., Troch, J., Bachmann, O., Guillong, M., Kent, A.J. and von Quadt, A., 2017. Split-grain 40Ar/39Ar dating: Integrating temporal and geochemical data from crystal cargoes. Chemical Geology, 457, pp.15-23.
109
+
110
+ Keller, C.B., Schoene, B., & Samperton, K.M. (2018). A Stochastic Sampling Approach to Zircon Eruption Age Interpretation. Geochemical Persectives Letters 8, 31–35
111
+
112
+ Sprain, C.J., Renne, P.R., Clemens, W.A. and Wilson, G.P., 2018. Calibration of chron C29r: New high-precision geochronologic and paleomagnetic constraints from the Hell Creek region, Montana. Bulletin, 130(9-10), pp.1615-1644.
113
+
114
+ Van Zalinge, M.E., Mark, D.F., Sparks, R.S.J., Tremblay, M.M., Keller, C.B., Cooper, F.J. and Rust, A., 2022. Timescales for pluton growth, magma-chamber formation and super-eruptions. Nature, 608(7921), pp.87-92.
115
+
116
+
117
+
@@ -0,0 +1,83 @@
1
+ # BayesianEruptionArArAges
2
+ Mixture model for the inference of eruption ages from Ar-Ar datasets.
3
+
4
+ # Motivation
5
+ High precision $^{40}\mathrm{Ar}/^{39}\mathrm{Ar}$ geochronology is increasingly producing datasets with analytical uncertainty which is small enough so that we can see geological complexity. In addition, procedural advancements have allow for ever increasingly complex samples to be measured (e.g., van Zalinge et al. 2022; Baudry et al. 2024). For these types of datasets, complex and high analytical precision, classical approaches to age estimates can be problematic.
6
+
7
+ # Comparison to U-Pb
8
+ ---------
9
+ Keller et al. (2018) ask a very important question of zircon U-Pb datasets; When dating zircons from a volcanic product, how should we estiamte the "True" eruption age?
10
+
11
+ The problem is that zircon crystals can form before the eruption, so a set of zircon ages does not necessilary directly record the eruption date. It records a spread of pre-eruption ages. The authors show that classical weighted mean approach can be inaccurate particularly when zircon crystallization was a materially long process. They also showed that "good" MSWDs do not necessarily equate to good eruption ages.
12
+
13
+ The authors build an eruption model which more meaningfully follows the process:
14
+ * Zircons begin crystallizing at some earlier time.
15
+ * Their csytallization follows a probability distribution through time.
16
+ * Crystallization stops abruptly at the eruption.
17
+ * Measured zircons and their ages are draws from this distribution.
18
+
19
+ # Why is ArAr difference/also similar?
20
+ Like U-Pb, measured Ar/Ar ages for a sample, say a sanidine, from a volcanic product, do not necessarily reflect the "True" eruption. Observed ages may be younger than, older than, or draws from the "True" eruption. Each of these is possible through a range of phenomena. For example, if we consider the older part first then tailing up to increasing older ages, like Van Zalinge et al. (2022) or Ellis et al. (2017), may be the result of a cold storage in the magma. In this scenario the magma is cold enough and the eruption fast enough such that the $^{40}\mathrm{Ar}$ that is formed in the sanidine prior to the eruption event through $^{40}\mathrm{K}$ decay is not immediately lost but is partially retained. Then these sanidine that have retained some pre-eruptive argon storage would be older than the eruption itself. Similarly, older ages may also occur through the entrainment of older material during the eruption, like xenocryst or antecrysts or even like older material in the locality. This is observed in some samples where a few much older detrital grains are measured along with the much broader contingent of likely eruption grains (e.g., Sprain et al. 2018).
21
+ The other alternatives are "True eruption" grains or younger grains. Younger grains could also occurs via a variety of mechanisms. Firstly, younger ages could be partially reset grains that have lost argon due to a complex thermal history or maybe fluid interaction. Contamination could have also occured where altered grains are analysed and the age is compromised in someway that skew the ages young. This would be a definite outlier and should not be considered in the "True" eruption age.
22
+
23
+ Apparent ages that are from the true eruption age are probably best represented by a sharp distribution. This would be equivalent to saying that ages are sampled from a "Dirac" type distribution. All grains belonging to the eruption component are assumed to share exactly one true age with no real geological scatter beyond analytical uncertainty.
24
+
25
+ # Model desciption
26
+ This is a mixture model. There are three components from which we assess all observed ages and uncertainties.
27
+ <br>
28
+ (1) The young outliers
29
+ <br>
30
+ (2) The older tail
31
+ <br>
32
+ (3) The eruption age
33
+
34
+ ## The young outliers
35
+ -------
36
+ The young component are observations combined with uncertainties are less than the eruption age and do not conform to the eruption age population. In the traditional approach the selection, and then subsequent rejection, of outliers would commonly be a subjective process. Or a user may remove a grain due to anomalous K/Ca ratios or radiogenic-% argon-40 or maybe that the samples is further than 1.5 or 3 Mean/Median Absolute Deviations from the central position. In this model we are esstentially fitting the outliers, marginalizing over them, and then removing them from the inference of the eruption. We fit the outliers with a broad normal distribution and assume that the young outliers, if there are any, are all younger than the eruption.
37
+
38
+ ## The older grains
39
+ -------
40
+ For the older grains we follow the work of van Zalinge et al. (2022) and Baudry et al. (2024) in the construction of a survivorship type-exponential distribution to describe the underlying probability density function of the older tail. Unlike, these previous work we do not use the empirical prior that is derived from multiple datasets but we infer the shape parameter within the model framework.
41
+
42
+ ## The eruption
43
+ -------
44
+ The eruption is likely to be abrupt. The eruption is likely to be an instantaneous event on geologic time scales. The most likely form of the eruption is a Dirac-type distribution. For this we are saying that the eruption ages are sampled from a single value of infinite precision with only analytical uncertainty. In other words, there is no geologic uncertianty associated with the eruption. This is an ideal. Is it correct? Maybe.
45
+
46
+ But for times when it is not correct we offer alternate eruption distributions, including the favored Dirac approach we use:
47
+ * Dirac
48
+ * Normal (with extra geologic scatter $\sigma_{geo}$)
49
+ * Student-t ($\nu$ = 4, and extra geologic scatter $\sigma_{geo}$)
50
+ * Laplace (with extra geologic scatter $\sigma_{geo}$)
51
+
52
+ ## The mixing
53
+ -------
54
+ The model is a mixture would were every observed age and uncertainty of each grain is either:
55
+ * From the eruption
56
+ * A young component
57
+ * An old component
58
+ The primary aim of the model is to them estimate the eruption age.
59
+
60
+ ## Other pieces
61
+ ------
62
+ As well as the eruption age, parameter estimates are made for the entire model hypothesis vector. Parameters such as the shape factor of the older tail. Depending on what these are interpreted as, this could a characetistic length-scale of storage.
63
+
64
+
65
+ ## Future bits
66
+ -------
67
+ Auxiliary data is also useful for $^{40}\mathrm{Ar}/^{39}\mathrm{Ar}$ datasets. In particular K/Ca and radiogenic-40 percentage are useful guides in interpreting the "quality of a grain". They cannot be used to tell you they are eruption grains but they can be useful in saying--"this grain is inferred to be well behaved and unaltered". Extra data like this could be used as probabilistic weights in the full mixture model -- similar to Tholt et al. (2026).
68
+
69
+
70
+ ## References
71
+
72
+ Baudry, A., Singer, B.S., Jicha, B., Jilly-Rehak, C.E., Vazquez, J.A. and Keller, C.B., 2024. A Bayesian age from dispersed plagioclase and zircon dates in the Los Chocoyos ash, Central America. Earth and Planetary Science Letters, 643, p.118826.
73
+
74
+ Ellis, B.S., Mark, D.F., Troch, J., Bachmann, O., Guillong, M., Kent, A.J. and von Quadt, A., 2017. Split-grain 40Ar/39Ar dating: Integrating temporal and geochemical data from crystal cargoes. Chemical Geology, 457, pp.15-23.
75
+
76
+ Keller, C.B., Schoene, B., & Samperton, K.M. (2018). A Stochastic Sampling Approach to Zircon Eruption Age Interpretation. Geochemical Persectives Letters 8, 31–35
77
+
78
+ Sprain, C.J., Renne, P.R., Clemens, W.A. and Wilson, G.P., 2018. Calibration of chron C29r: New high-precision geochronologic and paleomagnetic constraints from the Hell Creek region, Montana. Bulletin, 130(9-10), pp.1615-1644.
79
+
80
+ Van Zalinge, M.E., Mark, D.F., Sparks, R.S.J., Tremblay, M.M., Keller, C.B., Cooper, F.J. and Rust, A., 2022. Timescales for pluton growth, magma-chamber formation and super-eruptions. Nature, 608(7921), pp.87-92.
81
+
82
+
83
+
@@ -0,0 +1,54 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "bayesian-eruption-arar-ages"
7
+ version = "0.1.0"
8
+ description = "Bayesian eruption age inference for 40Ar/39Ar geochronology."
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ license = { text = "MIT" }
12
+ authors = [
13
+ { name = "Jack Carter", email = "jackcarter9411@gmail.com" }
14
+ ]
15
+ keywords = [
16
+ "geochronology",
17
+ "argon-argon",
18
+ "40Ar-39Ar",
19
+ "Bayesian",
20
+ "eruption age",
21
+ "MCMC"
22
+ ]
23
+ classifiers = [
24
+ "Development Status :: 3 - Alpha",
25
+ "Intended Audience :: Science/Research",
26
+ "License :: OSI Approved :: MIT License",
27
+ "Programming Language :: Python :: 3",
28
+ "Programming Language :: Python :: 3.8",
29
+ "Programming Language :: Python :: 3.9",
30
+ "Programming Language :: Python :: 3.10",
31
+ "Programming Language :: Python :: 3.11",
32
+ "Programming Language :: Python :: 3.12",
33
+ "Topic :: Scientific/Engineering",
34
+ ]
35
+
36
+ dependencies = [
37
+ "numpy",
38
+ "pandas",
39
+ "scipy",
40
+ "matplotlib",
41
+ "tqdm",
42
+ "joblib",
43
+ "dill",
44
+ "scikit-learn",
45
+ "openpyxl"
46
+ ]
47
+
48
+ [project.urls]
49
+ Homepage = "https://github.com/jcarter-1/BayesianEruptionArArAges"
50
+ Repository = "https://github.com/jcarter-1/BayesianEruptionArArAges"
51
+ Issues = "https://github.com/jcarter-1/BayesianEruptionArArAges/issues"
52
+
53
+ [tool.setuptools.packages.find]
54
+ where = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+