isotopylog.fit_SE15

isotopylog.fit_SE15(he, p0=[-7.0, -9.0, 0.0992], mp=None, z=6)

Fits D evolution data using the paired diffusion model of Stolper and Eiler (2015). The function solves for both k1 and k_dif_single as well as the slope of the pair concentration with respect to temperature, by solving a modified version of SE15 Eq. 9-10. Note that mp is defined in Stolper and Eiler (2015) Eq. 17.

Parameters:
  • he (isotopylog.HeatingExperiment) – ipl.HeatingExperiment instance containing the D data to be modeled.
  • p0 (array-like) –

    Array of paramter guess to initialize the fitting algorithm, in the order [ln(k1), ln(k_dif_single), mp], where mp is the slope of the relationship:

    ln([p]_eq/[p]_random) = mp/T

    as defined in Eq. 17 of Stolper and Eiler (2015). Defaults to [-7, -9, 0.0992].

  • mp (None or float) – If None, mp is fitted as an unkonwn parameter. If a float value is inputted, then mp is not fitted and the inputted value is assumed to be true and is used for all calculations.
  • z (int) – The mineral lattice coordination number to use for calculating the concentration of pairs. Defaults to 6 following Stolper and Eiler (2015).
Returns:

  • params (np.ndarray) – Array of resulting parameter values, in the order [ln(k1), ln(k_dif_single), mp].
  • params_cov (np.ndarray) – Covariance matrix associated with the resulting parameter values, of shape [3 x 3]. The +/- 1 sigma uncertainty for each parameter can be calculated as np.sqrt(np.diag(params_cov))
  • rmse (float) – Root Mean Square Error (in D47 permil units) of the model fit. Includes model fit to all data points.
  • npt (int) – Number of data points included in the model solution.

Notes

This function uses the average of all experimental d13C and d18O values when calculating stochastic statistics. If d13C and d18O values change considerably throughout the course of an experiment, this could cause slight inconsistencies in results.

This function uses the average of SE15 Eq. 13a and Eq. 13b when calculating pair concentrations. According to SE15, the relative difference between these equations is ~1-2 percent, so this should be an arbitrary choice.

Results are bounded such that k values are non-negative and mp >= 0. Calculations depend on stochastic ‘pair’ concentrations, which are a function of the chosen isotope parameters and thus might be sensitive to this choice. See Daëron et al. (2016) and the calc_R and calc_d functions for details.

See also

isotopylog.fit_Hea14()
Method for fitting heating experiment data using the transient defect/ equilibrium model of Henkes et al. (2014). ‘Hea14’ can be considered an updated version of the present method.
isotopylog.fit_HH21()
Method for fitting heating experiment data using the distributed activation energy model of Hemingway and Henkes (2021).
isotopylog.fit_PH12()
Method for fitting heating experiment data using the pseudo first- order method of Passey and Henkes (2012). Called to determine linear region.
kDistribution.invert_experiment()
Method for generating a kDistribution instance from experimental data.

Examples

Basic implementation, assuming a ipl.HeatingExperiment instance he exists:

#import modules
import isotopylog as ipl

#assume some a priori guess at p0; results may be sensitive to choice
# of p0 as described in SE15
p0 = [-7., -9., 0.1]

#assume he is a HeatingExperiment instance
results = ipl.fit_SE15(he, p0 = p0)

Same as above, but now constraining mp to be equal to the SE15 value:

results = ipl.fit_SE15(he, p0 = p0, mp = 0.0992)

References

[1] Stolper and Eiler (2015) Am. J. Sci., 315, 363–411.

[2] Daëron et al. (2016) Chem. Geol., 442, 83–96.