StatGeochem

Documentation for the StatGeochem.jl package.

StatGeochem.ionicchargeConstant

juliaioniccharge::NamedTuple A named tuple containing the ionic charges corresponding to the ionic radii in ionicradius.

source
StatGeochem.Ayers_tspheneMethod
TC = Ayers_tsphene(SiO2, TiO2, Al2O3, FeOT, MnO, MgO, CaO, Na2O, K2O, P2O5)

Calculate sphene saturation temperature in degrees Celsius Following the sphene saturation calibration of Ayers et al., 2018 (doi: 10.1130/abs/2018AM-320568)

source
StatGeochem.Ayers_tspheneTiO2Method
TiO2Sat = Ayers_tspheneTiO2(SiO2, TiO2, Al2O3, FeOT, MnO, MgO, CaO, Na2O, K2O, P2O5, T)

Calculate sphene saturation TiO2 concentration (in wt. %) for a given temperature (in C) following the sphene saturation calibration of Ayers et al., 2018 (doi: 10.1130/abs/2018AM-320568)

source
StatGeochem.Boehnke_tzircMethod
T = Boehnke_tzirc(SiO2, TiO2, Al2O3, FeOT, MnO, MgO, CaO, Na2O, K2O, P2O5, Zr)

Calculate zircon saturation temperature in degrees Celsius Following the zircon saturation calibration of Boehnke, Watson, et al., 2013 (doi: 10.1016/j.chemgeo.2013.05.028)

source
StatGeochem.Boehnke_tzircMMethod
M = Boehnke_tzircM(SiO2, TiO2, Al2O3, FeOT, MnO, MgO, CaO, Na2O, K2O, P2O5)

Calculate zircon saturation M-value based on major element concentrations Following the zircon saturation calibration of Boehnke, Watson, et al., 2013 (doi: 10.1016/j.chemgeo.2013.05.028)

source
StatGeochem.Boehnke_tzircZrMethod
ZrSat = Boehnke_tzircZr(SiO2, TiO2, Al2O3, FeOT, MnO, MgO, CaO, Na2O, K2O, P2O5, T)

Calculate zircon saturation Zr concentration for a given temperature (in C) Following the zircon saturation calibration of Boehnke, Watson, et al., 2013 (doi: 10.1016/j.chemgeo.2013.05.028)

source
StatGeochem.Crisp_Ti_in_zirconMethod
Ti = Crisp_Ti_in_zircon(TC::Number, Pbar::Number, aSiO2::Number, aTiO2::Number)

Parts per million by weight of titanium in zircon at temperature TC degrees Celsius and pressure Pbar bar given aSiO2 silica activity and aTiO2 titanium activity, following the equations of Crisp et al., 2023. (doi: 10.1016/j.gca.2023.04.031)

source
StatGeochem.DictDatasetFunction
DictDataset(t::NamedTuple, elements=keys(t))

Convert a tuple-based dataset to a dict-based dataset.

See also TupleDataset

Examples

julia> t 
NamedTuple with 2 elements:
  La  = Vector{Float64}(100,)   [0.6809734028326375 ... 0.30665937715972313]
  Yb  = Vector{Float64}(100,)   [0.8851029525168138 ... 0.866246147690925]

julia> d = DictDataset(t)
Dict{String, Vector{Float64}} with 2 entries:
  "Yb" => [0.885103, 0.284384, 0.351527, 0.643542, 0.631274, 0.653966, 0.968414, 0.00204819, 0.0655173, 0.5343…
  "La" => [0.680973, 0.35098, 0.0198742, 0.139642, 0.0703337, 0.0328973, 0.639431, 0.245205, 0.424142, 0.48889…    
source
StatGeochem.Ferry_Ti_in_zirconMethod
Ti = Ferry_Ti_in_zircon(TC::Number, aSiO2::Number, aTiO2::Number)

Parts per million by weight of titanium in zircon at temperature TC degrees Celsius given aSiO2 silica activity and aTiO2 titanium activity, following the equations of Ferry and Watson, 2007. (doi: 10.1007/s00410-007-0201-0)

source
StatGeochem.Ferry_Zr_in_rutileMethod
Ti = Ferry_Zr_in_rutile(TC::Number, aSiO2::Number)

Parts per million by weight of zirconium in rutile at temperature TC degrees Celsius given aSiO2 silica activity, following the equations of Ferry and Watson, 2007. (doi: 10.1007/s00410-007-0201-0)

source
StatGeochem.Harrison_tapatiteMethod
TC = Harrison_tapatite(SiO2, P2O5)

Calculate apatite saturation temperature in degrees Celcius following the apatite saturation model of Harrison and Watson 1984 (doi: 10.1016/0016-7037(84)90403-4)

source
StatGeochem.Harrison_tapatiteP2O5Method
P2O5 = Harrison_tapatiteP2O5(SiO2, Al2O3, CaO, Na2O, K2O, T)

Calculate P2O5 concentration (in wt.%) required for apatite saturation at a given T (in C) following the apatite saturation model of Harrison and Watson 1984 (doi: 10.1016/0016-7037(84)90403-4) with the correction of Bea et al. 1992 (doi: 10.1016/0024-4937(92)90033-U) where applicable

source
StatGeochem.Hayden_trutileMethod
TC = Hayden_trutile(SiO2, TiO2, Al2O3, FeOT, MgO, CaO, Na2O, K2O, P2O5)

Calculate rutile saturation temperature in degrees Celcius following the rutile saturation model of Hayden and Watson, 2007 (doi: 10.1016/j.epsl.2007.04.020)

source
StatGeochem.Hayden_trutileTiO2Method
TC = Hayden_trutile(SiO2, TiO2, Al2O3, FeOT, MgO, CaO, Na2O, K2O, P2O5, TC)

Calculate the TiO2 concentration in weight percent required for rutile saturation at temperature TC degrees Celcius, following the rutile saturation model of Hayden and Watson, 2007 (doi: 10.1016/j.epsl.2007.04.020)

source
StatGeochem.LREEmolwtMethod
LREEmolwt(La, Ce, Pr, Nd, Sm, Gd)

Returns the average molecular weight of the LREE considered in the REEt value from the monazite saturation model of Montel 1993 (doi: 10.1016/0009-2541(93)90250-M)

source
StatGeochem.LREEtMethod
LREEt(La, Ce, Pr, Nd, Sm, Gd)

Returns the sum of the LREE concentrations divided by their respective molar masses. If REE are input in parts per million by weight (ppmw), the result is in units of moles per megagram. This is equivalent to the REEt value from the monazite saturation model of Montel 1993 (doi: 10.1016/0009-2541(93)90250-M)

source
StatGeochem.Montel_tmonaziteMethod
TC = Montel_tmonazite(SiO2, TiO2, Al2O3, FeOT, MgO, CaO, Na2O, K2O, Li2O, H2O, La, Ce, Pr, Nd, Sm, Gd)

Calculate monazite saturation temperature in degrees Celcius following the monazite saturation model of Montel 1993 (doi: 10.1016/0009-2541(93)90250-M)

source
StatGeochem.Montel_tmonaziteREEMethod
REEt = Montel_tmonaziteREE(SiO2, TiO2, Al2O3, FeOT, MgO, CaO, Na2O, K2O, Li2O, H2O, T)

Calculate monazite saturation REEt value (in [ppm/mol.wt.]) for a given temperature (in C) following the monazite saturation model of Montel 1993 (doi: 10.1016/0009-2541(93)90250-M), where:

D = (Na + K + Li + 2Ca) / Al * 1/(Al + Si)) # all as molar cation fractions (not at. %!) ln(REEt) = 9.50 + 2.34D + 0.3879√H2O - 13318/T # H2O as wt.% REEt = Σ REEᵢ(ppm) / at. weight (g/mol)

source
StatGeochem.Rusiecka_tmonaziteREEMethod
LREEt = Rusiecka_tmonaziteREE(P_ppm, TC)

Calculate the LREEt (mol/Megagram) value required for monazite saturation at a temperature of TC degrees celcius and P ppmw phosphorous present, following the solubility model of Rusiecka & Baker, 2019 (doi: 10.2138/am-2019-6931)

source
StatGeochem.Rusiecka_txenotimeYMethod
LREEt = Rusiecka_txenotimeY(P_ppm, TC)

Calculate the Y (ppmw) concentration required for xenotime saturation at a temperature of TC degrees celcius and P ppmw phosphorous present, following the solubility model of Rusiecka & Baker, 2019 (doi: 10.2138/am-2019-6931)

source
StatGeochem.Tollari_tapatiteMethod
TC = Tollari_tapatite(SiO2, TiO2, Al2O3, FeOT, MgO, CaO, Na2O, K2O, P2O5)

Calculate apatite saturation temperature in degrees Celcius following the apatite saturation model of Tollari et al. 2006 (doi: 10.1016/j.gca.2005.11.024)

source
StatGeochem.Tollari_tapatiteP2O5Method
P2O5 = Tollari_tapatiteP2O5(SiO2, CaO, T)

Calculate P2O5 concentration (in wt.%) required for apatite saturation at a given T (in C) following the apatite saturation model of Tollari et al. 2006 (doi: 10.1016/j.gca.2005.11.024)

source
StatGeochem.TupleDatasetFunction
TupleDataset(d::Dict, elements=keys(d))

Convert a dict-based dataset to a tuple-based dataset.

See also DictDataset

Examples

julia> d
Dict{String, Vector{Float64}} with 2 entries:
  "Yb" => [0.823733, 0.0531003, 0.47996, 0.560998, 0.001816, 0.455064, 0.694017, 0.737816, 0.0755015, 0.46098 …
  "La" => [0.440947, 0.937551, 0.464318, 0.694184, 0.253974, 0.521292, 0.857979, 0.0545946, 0.716639, 0.597616…

julia> t = TupleDataset(d)
NamedTuple with 2 elements:
  Yb  = Vector{Float64}(100,)   [0.8237334494155881 ... 0.012863893327602627]
  La  = Vector{Float64}(100,)   [0.44094669199955616 ... 0.5371416189174069]
source
StatGeochem.bin_bsrMethod
bin_bsr([f!::Function=nanbinmean!], x::Vector, y::VecOrMat, xmin, xmax, nbins, [w];
    	x_sigma = zeros(size(x)),
    	y_sigma = zeros(size(y)),
    	nresamplings = 1000,
    	sem = :sigma,
    	p = 0.2
)

Returns the bincenters c, means or medians m, and uncertainties of the mean or median for a variable y binned by independent variable x into nbins equal bins between xmin and xmax, after nresamplings boostrap resamplings with acceptance probability p.

If a 2-d array (matrix) of y values is provided, each column will be treated as a separate variable, means and uncertainties will be returned column-wise.

Optional keyword arguments and defaults:

x_sigma = zeros(size(x))

A vector representing the uncertainty (standard deviation) of each x value

y_sigma = zeros(size(y))

A vector representing the uncertainty (standard deviation) of each y value

nresamplings = 1000

The number of resamplings to conduct

sem = :sigma

Format of the uncertainty estimate of the distribution of the mean. If :sigma is chosen, a tuple of three vectors (c, m, e) will be returned, where e is the standard error of the mean. If :CI or :pctile is chosen, a tuple of four vectors (c, m, el, eu) will be returned, where el and eu are the lower and upper bounds of the 95% confidence interval.

p = 0.2

Resampling probabilities, either as a scalar or a vector of the same length as x

Examples:

(c,m,e) = bin_bsr(nanbinmedian!, x, y, 0, 4000, 40, x_sigma=0.05x, p=probability, sem=:sigma)
(c,m,el,eu) = bin_bsr(nanbinmean!, x, y, 0, 4000, 40, x_sigma=0.05x, p=probability, sem=:pctile)
source
StatGeochem.bin_bsr_ratio_mediansMethod
(c, m, el, eu) = bin_bsr_ratio_medians(x::Vector, num::Vector, denom::Vector, xmin, xmax, nbins, [w];
    	x_sigma = zeros(size(x)),
    	num_sigma = zeros(size(num)),
    	denom_sigma = zeros(size(denom)),
    	nresamplings = 1000,
    	p::Union{Number,Vector} = 0.2
)

Equivalent to bin_bsr_ratios(nanbinmedian!, ...)

source
StatGeochem.bin_bsr_ratiosMethod
(c, m, el, eu) = bin_bsr_ratios([f!::Function=nanbinmean!], x::Vector, num::Vector, denom::Vector, xmin, xmax, nbins, [w];
    	x_sigma = zeros(size(x)),
    	num_sigma = zeros(size(num)),
    	denom_sigma = zeros(size(denom)),
    	nresamplings = 1000,
    	p::Union{Number,Vector} = 0.2
)

Returns the bincenters c, means m, as well as upper (el) and lower (eu) 95% CIs of the mean for a ratio num/den binned by x into nbins equal bins between xmin and xmax, after nresamplings boostrap resamplings with acceptance probability p.

source
StatGeochem.bincountsMethod
(bincenters, N) = bincounts(x::AbstractArray, xmin::Number, xmax::Number, nbins::Integer;
    	relbinwidth::Number=1
)

Tally the number of samples that fall into each of nbins equally spaced x bins between xmin and xmax, aligned with bin edges as xmin:(xmax-xmin)/nbins:xmax

A relbinwidth of 1 represents normal space-filling bins, while a larger value implies bin overlap.

See also histcounts for a more efficient implementation without variable bin width.

source
StatGeochem.binmeansMethod
binmeans(x, y, xmin:step:xmax, [weight]; resamplingratio=1, relbinwidth=1)
binmeans(x, y, xmin, xmax, nbins, [weight]; resamplingratio=1, relbinwidth=1)

The means (ignoring NaNs) of y values binned by x, into each of nbins equally spaced x bins between xmin and xmax, returning bincenters, means, and standard errors of the mean.

A relbinwidth of 1 represents normal space-filling bins, while a larger value implies bin overlap.

To more efficiently calculate binned means without variable bin widths (or suncertainties), see instead nanbinmean/nanbinmean!.

Examples

(c,m,e) = binmeans(x, y, 0, 4000, 40)
source
StatGeochem.binmediansMethod
(c,m,e) = binmedians(x::AbstractArray, y::AbstractArray, min::Number, max::Number, nbins::Integer;
    	resamplingratio::Number=1
    	relbinwidth::Number=1
)

The medians (ignoring NaNs) of y values binned by x, into each of nbins equally spaced x bins between xmin and xmax, returning bincenters, medians, and equivalent standard errors of the mean (1.4828 * median abolute deviation).

A relbinwidth of 1 represents normal space-filling bins, while a larger value implies bin overlap.

To more efficiently calculate binned medians without variable bin widths (or suncertainties), see instead nanbinmedian/nanbinmedian!.

Examples

(c,m,e) = binmedians(x, y, 0, 4000, 40)
source
StatGeochem.bsr!Method
bsr!([f::Function=gaussian], resampled::Array, index::Vector{Int}, data, sigma, p;
    	rng::AbstractRNG=MersenneTwister()
)

Fill resampled with data boostrap resampled from a (sample-per-row / element-per-column) dataset data with uncertainties sigma and resampling probabilities p, optionally using random numbers generated by f where f is a function of the form f(rng, data[i], sigma[i])

source
StatGeochem.bsresampleFunction
resampled = bsresample(dataset::Union{Dict,NamedTuple}, nrows, [elements], [p];
    	 kernel = gaussian,
    	 rng = MersenneTwister()
)

Bootstrap resample a dictionary-based dataset with uncertainties stored either in dataset["err"] or dataset["[variable]_sigma"]

source
StatGeochem.bsresampleFunction
resampled = bsresample(data::AbstractArray, sigma, nrows, [p];
    	 kernel = gaussian,
    	 rng = MersenneTwister(),
    	 return_index = false
)

Bootstrap resample a (sample-per-row / element-per-column) array of data with uncertainties sigma and resampling probabilities p

source
StatGeochem.carbonateconversion!Method
carbonateconversion!(dataset::NamedTuple)

Convert carbonates (CaCO3, MgCO3) into corresponding metal oxides and CO2 if extant, in place, as well as synchonizing TIC, TOC, TC, C and CO2. All are assumed to be reported in the same units, (likely wt. %) except for C, which is assumed to be equivalent to unitratio * TC,

source
StatGeochem.cartesianMethod
x, y, z = cartesian(ρ, φ, θ)

Convert from spherical coordinates (ρ,φ,θ) to cartesian coordinates (x,y,z).

source
StatGeochem.changepointMethod
changepoint(data, [sigma], nsteps; np, npmin, npmax)

Given an ordered array of data points, optionally with uncertainties sigma, use a Markov chain Monte Carlo approach based on that of Gallagher et al., 2010 (10.1016/j.epsl.2011.09.015) to estimate the position (by index) and optionally number of changepoints that best explain the data. Will return the results for nsteps steps of the Markov chain.

Optional keyword arguments:

np

Specify an exact integer number of changepoints.

npmin
nmpax

Specify the maximum and minimum possible integer number of changepoints. If np is not specified, the number of changepoints will allowed to vary freely between these bounds, as in the "transdimensional" approach of Gallagher et al.

Examples

julia> A = [randn(100).-2; randn(100).+2];

julia> dist = changepoint(A, 10000; np=1);

julia> dist[9000:end] # after burnin
1001-element Vector{Int64}:
 101
 101
 101
 101
   ⋮
 101
 101
 101

 julia> dist = changepoint(A, ones(size(A)), 10000; np=1)
10000×1 Matrix{Int64}:
  61
  61
  61
  61
   ⋮
 101
 101
 101
source
StatGeochem.cipw_normMethod
cipw_norm(SiO2, TiO2, Al2O3, Fe2O3, FeO, MnO, MgO, CaO, Na2O, K2O, P2O5)

Returns

quartz, orthoclase, plagioclase, corundum, nepheline, diopside, orthopyroxene, olivine, magnetite, ilmenite, apatite
source
StatGeochem.claiborne_zircon_kdMethod
claiborne_zircon_kd(elem::String, T::Number)

Returns the temperature-dependent zircon/melt partition coefficients of Claiborne et al. (2017) for the given element elem at temperature T degrees C, using equations of the form a * exp(b/TK) where TK = T + 273.15

In addition to the elements for which Claiborne provides equations, we also extrapolate these partition coefficients to include "La" and "Pr" using a lattce strain model, following the equations of Blundy and Wood (2003).

Reference: Claiborne, L. L., Miller, C. F., Gualda, G. A., Carley, T. L., Covey, A. K., Wooden, J. L., & Fleming, M. A. (2018). Zircon as magma monitor: Robust, temperature‐dependent partition coefficients from glass and zircon surface and rim measurements from natural systems. in Microstructural geochronology: Planetary records down to atom scale, 1-33. https://doi.org/10.1002/9781119227250.ch1

Examples

julia> claiborne_zircon_kd("Yb", 600)
1016.9198328977473
source
StatGeochem.concatenatedatasetsMethod
concatenatedatasets(d1::NamedTuple, d2::NamedTuple,... ;[elements::Vector{Symbol}])
concatenatedatasets(d1::AbstractDict, d2::AbstractDict,... ;[elements::Vector{String}])

Vertically concatenate two or more Dict- or Tuple-based datasets, variable-by-variable. Optionally, a list of variables to include may be specified in elements

Examples

julia> d1 = Dict("La" => rand(5), "Yb" => rand(5))
Dict{String, Vector{Float64}} with 2 entries:
  "Yb" => [0.221085, 0.203369, 0.0657271, 0.124606, 0.0975556]
  "La" => [0.298578, 0.481674, 0.888624, 0.632234, 0.564491]

julia> d2 = Dict("La" => rand(5), "Ce" => rand(5))
Dict{String, Vector{Float64}} with 2 entries:
  "Ce" => [0.0979752, 0.108585, 0.718315, 0.771128, 0.698499]
  "La" => [0.538215, 0.633298, 0.981322, 0.908532, 0.77754]

julia> concatenatedatasets(d1,d2)
Dict{String, Vector{Float64}} with 3 entries:
  "Ce" => [NaN, NaN, NaN, NaN, NaN, 0.0979752, 0.108585, 0.718315, 0.771128, 0.698499]
  "Yb" => [0.221085, 0.203369, 0.0657271, 0.124606, 0.0975556, NaN, NaN, NaN, NaN, NaN]
  "La" => [0.298578, 0.481674, 0.888624, 0.632234, 0.564491, 0.538215, 0.633298, 0.981322, 0.908532, 0.77754]
source
StatGeochem.delim_string_functionMethod
delim_string_function(f, str, delim, T;
    	merge::Bool=false,

Parse a delimited string str with delimiter delim into substrings that will then be operated upon by function f. The results of f will be returned in an array with eltype T.

Examples

julia> delim_string_function(x -> delim_string_parse(x, ',', Int32, undefval=0), "1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16", '
', Array{Int32,1})
4-element Vector{Vector{Int32}}:
 [1, 2, 3, 4]
 [5, 6, 7, 8]
 [9, 10, 11, 12]
 [13, 14, 15, 16]
source
StatGeochem.delim_string_parseFunction
delim_string_parse(str, delim, T;
    	merge::Bool=false,
    	undefval=NaN)

Parse a delimited string str with delimiter delim into values of type T and return the answers as an array with eltype T

Optional keyword arguments and defaults:

merge::Bool=false

Merge repeated delimiters?

undefval=NaN

A value to subsitute for any value that cannot be parsed to type T.

See also delim_string_parse! for an in-place version.

Examples

julia> delim_string_parse("1,2,3,4,5", ',', Float64)
5-element Vector{Float64}:
 1.0
 2.0
 3.0
 4.0
 5.0
source
StatGeochem.delim_string_parse!Function
delim_string_parse!(result, str, delim, [T];
    	offset::Integer=0,
    	merge::Bool=false,
    	undefval=NaN)

Parse a delimited string str with delimiter delim into values of type T and return the answers in a pre-allocated result array provided as input.

If T is not specified explicitly, the eltype of the result array will be used by default.

Optional keyword arguments and defaults:

offset::Integer=0

Start writing the parsed results into result at index 1+offset

merge::Bool=false

Merge repeated delimiters?

undefval=NaN

A value to subsitute for any value that cannot be parsed to type T.

See also delim_string_parse for a non-in-place version that will automatically allocate a result array.

Examples

julia> A = zeros(100);

julia> n = delim_string_parse!(A, "1,2,3,4,5", ',', Float64)
5

julia> A[1:n]
5-element Vector{Float64}:
 1.0
 2.0
 3.0
 4.0
 5.0
source
StatGeochem.digitize_plotlineMethod
digitize_plotline(img, line_color, xlims, ylims; atol=0.16)

Calculate approximate x (horizontal) and y (vertical) positions for a colored line in an image

Examples

img = load("xysin.png") # using FileIO, ImageIO
C = eltype(img)
(x,y) = digitize_plotline(img, C(0,0.604,0.976,1), [0,2pi], [-1.1,1.1])
source
StatGeochem.digitize_plotmarkersMethod
digitize_plotmarkers(img, marker_color, xlims, ylims; atol=0.16)

Calculate approximate x (horizontal) and y (vertical) positions and position uncertainties for distinct colored markers in an image.

Examples

img = load("xyscatter.png") # using FileIO, ImageIO
C = eltype(img)
(x,dx,y,dy) = digitize_plotmarkers(img, C(0,0.604,0.976,1), [0,10], [0,10])
source
StatGeochem.dist_uncertMethod
dist_uncert(lats, lons)

Find the decimal degree center and associated uncertainty (in arc degrees) from lists lats and lons of decimal degree coordinates.

Examples

(lat_ctr, lon_ctr, uncertainty) = dist_uncert(lats, lons)
source
StatGeochem.elementifyMethod
elementify(data::AbstractArray, [elements=data[1,:]];
    	importas=:Dict,
    	standardize::Bool=true,
    	floattype=Float64,
    	skipstart::Integer=1,
    	skipnameless::Bool=true
)

Convert a flat array data into a Named Tuple (importas=:Tuple) or Dictionary (importas=:Dict) with each column as a variable. Tuples are substantially more efficient, so should be favored where possible.

Examples

julia> A = ["La" "Ce" "Pr"; 1.5 1.1 1.0; 3.7 2.9 2.5]
3×3 Matrix{Any}:
  "La"   "Ce"   "Pr"
 1.5    1.1    1.0
 3.7    2.9    2.5

julia> elementify(A, importas=:Tuple)
NamedTuple with 3 elements:
La  = Vector{Float64}(2,) [1.5 ... 3.7]
Ce  = Vector{Float64}(2,) [1.1 ... 2.9]
Pr  = Vector{Float64}(2,) [1.0 ... 2.5]

julia> elementify(A, importas=:Dict)
Dict{String, Union{Vector{Float64}, Vector{String}}} with 4 entries:
  "Ce"       => [1.1, 2.9]
  "Pr"       => [1.0, 2.5]
  "elements" => ["La", "Ce", "Pr"]
  "La"       => [1.5, 3.7]
source
StatGeochem.eustarMethod
eustar(Nd::Number, Sm::Number, Gd::Number, Tb::Number)

Calculate expected europium concentration, Eu*, based on abundance of adjacent rare earths.

Full four-element log-linear interpolation, assuming 3+ ionic radii and the chondritic abundances of Sun and McDonough 1989 (doi: 10.1144/gsl.sp.1989.042.01.19)

source
StatGeochem.eustarMethod
eustar(Sm::Number, Gd::Number)

Calculate expected europium concentration, Eu*, based on abundance of adjacent rare earths.

Simple geometric mean interpolation from Sm and Gd alone, assuming the chondritic abundances of Sun and McDonough 1989 (doi: 10.1144/gsl.sp.1989.042.01.19), that is Eu* = 0.0580*sqrt(Sm/0.1530 * Gd/0.2055)

source
StatGeochem.exportdatasetFunction
exportdataset(dataset, [elements], filepath, delim;
    	floatout::Bool=false,
    	findnumeric::Bool=false,
    	skipnan::Bool=true,
    	digits::Integer,
    	sigdigits::Integer
    	rows=:
)

Convert a dict or named tuple of vectors into a 2-D array with variables as columns Export a dataset (in the form of either a Dict or a NamedTuple), optionally specifying which elements to export, as a delimited ASCII text file with the name specified by filepath and delimiter delim.

Possible keyword arguments include:

	digits
	sigdigits

Specify a number of absolute or significant digits to which to round the printed output. Default is no rounding.

	skipnan

Leave NaNs as empty cells in the delimited output file. Boolean; true by default.

	floatout

Force all output to be represented as a floating-point number, or else NaN. Boolean; false by default.

	findnumeric

Export only numeric columns. Boolean; false by default.

	rows

specify which rows of the dataset to export. Default : exports all rows.

source
StatGeochem.feoconversionFunction
feoconversion(FeO::Number=NaN, Fe2O3::Number=NaN, FeOT::Number=NaN, Fe2O3T::Number=NaN)

Compiles data from FeO, Fe2O3, FeOT, and Fe2O3T into a single FeOT value.

source
StatGeochem.find_crust1_baseMethod
find_crust1_base(lat,lon,layer)

Return elevation (relative to sea level) of the layer base for a crust 1.0 layer at a given latitude and longitude.

Accepts lat and lon both as Numbers and as AbstractArrays, but given the overhead of opening and reading the crust1 files, you should generally aim to provide large arrays with as many values in a single query as possible.

Available layers:

    1 | :water
    2 | :ice
    3 | :upper_sediments
    4 | :middle_sediments
    5 | :lower_sediments
    6 | :upper_crust
    7 | :middle_crust
    8 | :lower_crust
    9 | :mantle

Results are returned in form (Vp, Vs, Rho, thickness)

Examples

julia> find_crust1_base([43.702245], [-72.0929], 8)
1-element Vector{Float64}:
 -36.26

julia> find_crust1_base([43.702245], [-72.0929], :lower_crust)
1-element Vector{Float64}:
-36.26
source
StatGeochem.find_crust1_layerMethod
find_crust1_layer(lat,lon,layer)

Return all point data (Vp, Vs, Rho, layer thickness) for a given latitude, longitude, and crustal layer.

Accepts lat and lon both as Numbers and as AbstractArrays, but given the overhead of opening and reading the crust1 files, you should generally aim to provide large arrays with as many values in a single query as possible.

Available layers:

    1 | :water
    2 | :ice
    3 | :upper_sediments
    4 | :middle_sediments
    5 | :lower_sediments
    6 | :upper_crust
    7 | :middle_crust
    8 | :lower_crust
    9 | :mantle

Results are returned in form (Vp, Vs, Rho, thickness)

Examples

julia> vp, vs, rho, thickness = find_crust1_layer([43.702245], [-72.0929], 8)
([7.0], [3.99], [2950.0], [7.699999999999999])
source
StatGeochem.find_crust1_seismicMethod
find_crust1_seismic(lat,lon,layer)

Return all seismic data (Vp, Vs, Rho) for a given latitude, longitude, and crustal layer.

Accepts lat and lon both as Numbers and as AbstractArrays, but given the overhead of opening and reading the crust1 files, you should generally aim to provide large arrays with as many values in a single query as possible.

Available layers:

    1 | :water
    2 | :ice
    3 | :upper_sediments
    4 | :middle_sediments
    5 | :lower_sediments
    6 | :upper_crust
    7 | :middle_crust
    8 | :lower_crust
    9 | :mantle

Results are returned in form (Vp, Vs, Rho, thickness)

Examples

julia> vp, vs, rho = find_crust1_seismic([43.702245], [-72.0929], 8)
([7.0], [3.99], [2950.0])

julia> vp, vs, rho = find_crust1_seismic([43.702245], [-72.0929], :lower_crust)
([7.0], [3.99], [2950.0])
source
StatGeochem.find_crust1_thicknessMethod
find_crust1_thickness(lat,lon,layer)

Return layer thickness for a crust 1.0 layer at a given latitude and longitude.

Accepts lat and lon both as Numbers and as AbstractArrays, but given the overhead of opening and reading the crust1 files, you should generally aim to provide large arrays with as many values in a single query as possible.

Available layers:

    1 | :water
    2 | :ice
    3 | :upper_sediments
    4 | :middle_sediments
    5 | :lower_sediments
    6 | :upper_crust
    7 | :middle_crust
    8 | :lower_crust
    9 | :mantle

Results are returned in form (Vp, Vs, Rho, thickness)

Examples

julia> find_crust1_thickness([43.702245], [-72.0929], 8)
1-element Vector{Float64}:
 7.699999999999999

julia> find_crust1_thickness([43.702245], [-72.0929], :lower_crust)
1-element Vector{Float64}:
7.699999999999999
source
StatGeochem.find_etopoelevMethod
find_etopoelev([etopo], lat, lon, [T=Float64])

Find the elevation of points at position (lat, lon) on the surface of the Earth, using the ETOPO1 one-arc-degree elevation model.

Units are meters of elevation and decimal degrees of latitude and longitude.

Reference: Amante, C. and B.W. Eakins, 2009. ETOPO1 1 Arc-Minute Global Relief Model: Procedures, Data Sources and Analysis. NOAA Technical Memorandum NESDIS NGDC-24. National Geophysical Data Center, NOAA. doi:10.7289/V5C8276M. http://www.ngdc.noaa.gov/mgg/global/global.html

See also: get_etopo.

Examples

julia> etopo = get_etopo("elevation")
10800×21600 Matrix{Float64}:
   -58.0    -58.0    -58.0  …    -58.0    -58.0    -58.0
   -61.0    -61.0    -61.0       -61.0    -61.0    -61.0
   -62.0    -63.0    -63.0       -63.0    -63.0    -62.0
   -61.0    -62.0    -62.0       -62.0    -62.0    -61.0
     ⋮                      ⋱
 -4226.0  -4226.0  -4227.0     -4227.0  -4227.0  -4227.0
 -4228.0  -4228.0  -4229.0     -4229.0  -4229.0  -4229.0
 -4229.0  -4229.0  -4229.0     -4229.0  -4229.0  -4229.0

julia> find_etopoelev(etopo, 43.702245, -72.0929)
0-dimensional Array{Float64, 0}:
294.0
source
StatGeochem.find_geolcontMethod
find_geolcont(lat,lon)

Find which geographic continent a sample originates from.

Continents:

  1: "Africa"
  2: "Eurasia"
  3: "North America"
  4: "South America"
  5: "Australia"
  6: "Antarctica"
  7: "NA"

See also: continents, continentcolors.

Examples

julia> find_geolcont(43.702245, -72.0929)
0-dimensional Array{Int64, 0}:
3

julia> continents[find_geolcont(43.702245, -72.0929)]
0-dimensional Array{String, 0}:
"North America"
source
StatGeochem.find_geolprovMethod
find_geolprov(lat,lon)

Find which tectonic setting a sample originates from, based on a modified version of the USGS map of tectonic provinces of the world (c.f. https://commons.wikimedia.org/wiki/File:Worldgeologicprovinces.jpg)

Settings:

  10: Accreted Arc
  11: Island Arc
  12: Continental Arc
  13: Collisional orogen
  20: Extensional
  21: Rift
  22: Plume
  31: Shield
  32: Platform
  33: Basin
  00: No data

Settings returned are most representative modern setting at a given location and may not represent the tectonic setting where rocks (especially older/Precambrian rocks) originally formed.

Examples

julia> find_geolprov(43.702245, -72.0929)
0-dimensional Array{Int64, 0}:
10

julia> lat = rand(4)*180 .- 90
4-element Vector{Float64}:
 -28.352224011759773
  14.521710123066882
  43.301961981794335
  79.26368353708557

julia> lon = rand(4)*360 .- 180
4-element Vector{Float64}:
   5.024149409750521
 161.04362679392233
 123.21726489255786
 -54.34797401313695

julia> find_geolprov(lat, lon)
4-element Vector{Int64}:
  0
  0
 32
  0
source
StatGeochem.find_landMethod
find_land(lat,lon)

Find whether or not a given set of latitude, longitude points on the globe is above sea level, based on the etopo bedrock elevation dataset

Examples

julia> find_land(43.702245, -72.0929)
0-dimensional Array{Bool, 0}:
1
source
StatGeochem.find_litho1_propertyMethod
find_litho1_property(lat, lon, layer::Symbol, property::Symbol)

Return values for a LITHO1.0 property of a given layer at one or more given latitudes and longitudes, to the nearest 0.5-arc-degree grid point.

Accepts lat and lon both as Numbers and as AbstractArrays, but given the overhead of opening and reading the LITHO1.0 files, you should generally aim to provide large arrays with as many values in a single query as possible.

Available properties include:

    :vp             | p-wave velocity [m/s]
    :vs             | s-wave velocity [m/s]
    :rho            | density [kg/m^3]
    :bottom         | depth to bottom of the layer [km] (above sea level = negative)
    :thickness      | layer thickness [km]

while avialble layers are:

    1 | :ice
    2 | :water
    3 | :upper_sediments
    4 | :middle_sediments
    5 | :lower_sediments
    6 | :upper_crust
    7 | :middle_crust
    8 | :lower_crust
    9 | :sclm (or :lithosphere)
    10 | :asthenosphere

Examples

julia> find_litho1_property([43.702245, 44], [-72.0929, -73], :upper_crust, :vp)
2-element Vector{Float64}:
 6219.99
 6253.16
source
StatGeochem.find_seafloorageMethod
find_seafloorage([sfdata], lat, lon)

Find the age of the seafloor at positions (lat, lon) on the ocean crust, using the Müller et al. (2008) dataset.

Units are millions of years for age and mm/yr for rate.

Reference: M⁠⁠üller, R. D., M. Sdrolias, C. Gaina, and W. R. Roest (2008). Age, spreading rates, and spreading asymmetry of the world's ocean crust, Geochem. Geophys. Geosyst., 9, Q04006, doi:10.1029/2007GC001743. ftp://ftp.es.usyd.edu.au/pub/agegrid/2008/Grids/

See also: get_seafloorage.

Examples

julia> sfdata = get_seafloorage("seafloorage")
8640×10800 Matrix{Float64}:
   8.02    8.13    8.24    8.36  …    7.6     7.7     7.8     7.91
   8.01    8.12    8.23    8.34       7.61    7.71    7.81    7.91
   8.01    8.11    8.22    8.32       7.62    7.72    7.81    7.91
   8.01    8.11    8.2     8.3        7.64    7.73    7.82    7.91
   ⋮                             ⋱
 NaN     NaN     NaN     NaN        NaN     NaN     NaN     NaN
 NaN     NaN     NaN     NaN        NaN     NaN     NaN     NaN
 NaN     NaN     NaN     NaN        NaN     NaN     NaN     NaN

julia> find_seafloorage(sfdata, 43.702245, -40)
0-dimensional Array{Float64, 0}:
75.95
source
StatGeochem.find_srtm15plusMethod
find_srtm15plus([srtm], lat, lon, [T=Float64])

Find the elevation of points at position (lat, lon) on the surface of the Earth, using the SRTM15plus 15-arc-second elevation model.

Units are meters of elevation and decimal degrees of latitude and longitude.

Reference: https://doi.org/10.5069/G92R3PT9

See also: get_srtm15plus.

Examples

julia> srtm = get_srtm15plus("elevation")
43201×86401 Matrix{Int16}:
 -32768  -32768  -32768  -32768  …  -32768  -32768  -32768
   3124    3124    3124    3124       3113    3113    3124
   3123    3123    3123    3122       3111    3111    3123
   3121    3121    3121    3121       3110    3110    3121
      ⋮                          ⋱                       ⋮
  -4225   -4224   -4224   -4224      -4224   -4225   -4225
  -4223   -4222   -4222   -4223      -4223   -4223   -4223
  -4223   -4223   -4223   -4223      -4223   -4223   -4223
  -4230   -4230   -4230   -4230  …   -4230   -4230   -4230

julia> find_srtm15plus(srtm, 43.702245, -72.0929)
0-dimensional Array{Float64, 0}:
252.0
source
StatGeochem.find_tc1_ageMethod

find_tc1_age(lat::Number,lon::Number)

Return a tuple (age, age_min, age_max) containing the nominal, upper, and lower tc1 age bounds for the 1x1 arc degree grid cell containing lat and lon

find_tc1_age(lat::AbstractArray,lon::AbstractArray)

Return a tuple (age, age_min, age_max) where age, age_min, and age_max are arrays containing the nominal, upper and lower tc1 age bounds for each location pair lat[i], lon[i]

Data is sourced from the global 1x1° "TC1" thermal model of Artemieva 2006, doi: 10.1016/j.tecto.2005.11.022

source
StatGeochem.find_tc1_crustMethod

find_tc1_crust(lat::Number,lon::Number)

Find the depth to the 550C isotherm for the 1x1 arc degree grid cell containing lat and lon

find_tc1_crust(lat::AbstractArray,lon::AbstractArray)

For each pair of latitudes and longitudes given by lat and lon, find the depth to the 550C isotherm for the 1x1 arc degree grid cell containing lat[i] and lon[i]

Data is sourced from the global 1x1° "TC1" thermal model of Artemieva 2006, doi: 10.1016/j.tecto.2005.11.022

source
StatGeochem.find_tc1_lithMethod

find_tc1_lith(lat::Number,lon::Number)

Find the depth to the 1300C isotherm for the 1x1 arc degree grid cell containing lat and lon

find_tc1_lith(lat::AbstractArray,lon::AbstractArray)

For each pair of latitudes and longitudes given by lat and lon, find the depth to the 1300C isotherm for the 1x1 arc degree grid cell containing lat[i] and lon[i]

Data is sourced from the global 1x1° "TC1" thermal model of Artemieva 2006, doi: 10.1016/j.tecto.2005.11.022

source
StatGeochem.floatifyFunction
floatify(x, T::Type=Float64)

Convert x to a floating-point number (default Float64) by any means necessary

Examples

julia> StatGeochem.floatify(5)
5.0

julia> StatGeochem.floatify("5")
5.0

julia> StatGeochem.floatify("0x05")
5.0

julia> StatGeochem.floatify("0.5e1")
5.0
source
StatGeochem.get_etopoFunction
get_etopo([varname])

Read ETOPO1 (1 arc minute topography) file from HDF5 storage, downloading from cloud if necessary.

Available varnames (variable names) include:

  "elevation"
  "y_lat_cntr"
  "x_lon_cntr"
  "cellsize"
  "scalefactor"
  "reference"

Units are meters of elevation and decimal degrees of latitude and longitude.

Reference: Amante, C. and B.W. Eakins, 2009. ETOPO1 1 Arc-Minute Global Relief Model: Procedures, Data Sources and Analysis. NOAA Technical Memorandum NESDIS NGDC-24. National Geophysical Data Center, NOAA. doi:10.7289/V5C8276M. http://www.ngdc.noaa.gov/mgg/global/global.html

See also: find_etopoelev.

Examples

julia> get_etopo()
Dict{String, Any} with 6 entries:
  "cellsize"    => 0.0166667
  "scalefactor" => 60
  "x_lon_cntr"  => [-179.992, -179.975, -179.958, -179.942, -179.925, -1…
  "reference"   => "Amante, C. and B.W. Eakins, 2009. ETOPO1 1 Arc-Minut…
  "y_lat_cntr"  => [-89.9917, -89.975, -89.9583, -89.9417, -89.925, -89.…
  "elevation"   => [-58.0 -58.0 … -58.0 -58.0; -61.0 -61.0 … -61.0 -61.0…

julia> get_etopo("elevation")
10800×21600 Matrix{Float64}:
  -58.0    -58.0    -58.0  …    -58.0    -58.0    -58.0
  -61.0    -61.0    -61.0       -61.0    -61.0    -61.0
  -62.0    -63.0    -63.0       -63.0    -63.0    -62.0
  -61.0    -62.0    -62.0       -62.0    -62.0    -61.0
    ⋮                      ⋱
 -4226.0  -4226.0  -4227.0     -4227.0  -4227.0  -4227.0
 -4228.0  -4228.0  -4229.0     -4229.0  -4229.0  -4229.0
 -4229.0  -4229.0  -4229.0     -4229.0  -4229.0  -4229.0
source
StatGeochem.get_seafloorageFunction
get_seafloorage(varname="")

Read seafloor age file from HDF5 storage, downloading from cloud if necessary.

Available varnames (variable names) include:

  "seafloorage"
  "seafloorage_sigma",
  "seafloorrate"
  "information"
  "reference"

Units are millions of years for age and mm/yr for rate.

Reference: M⁠⁠üller, R. D., M. Sdrolias, C. Gaina, and W. R. Roest (2008). Age, spreading rates, and spreading asymmetry of the world's ocean crust, Geochem. Geophys. Geosyst., 9, Q04006, doi:10.1029/2007GC001743. ftp://ftp.es.usyd.edu.au/pub/agegrid/2008/Grids/

See also: find_seafloorage.

Examples

julia> get_seafloorage()
Dict{String, Any} with 5 entries:
  "seafloorrate"      => [6.83 6.79 … 6.91 6.87; 6.82 6.78 … 6.91 6.…
  "reference"         => "Muller, R. D., M. Sdrolias, C. Gaina, and …
  "seafloorage"       => [8.02 8.13 … 7.8 7.91; 8.01 8.12 … 7.81 7.9…
  "information"       => "Mercator projection, from 80.738 to -80.73…
  "seafloorage_sigma" => [2.15 2.19 … 2.08 2.11; 2.15 2.19 … 2.08 2.…

julia> get_seafloorage("seafloorage")
8640×10800 Matrix{Float64}:
   8.02    8.13    8.24    8.36  …    7.6     7.7     7.8     7.91
   8.01    8.12    8.23    8.34       7.61    7.71    7.81    7.91
   8.01    8.11    8.22    8.32       7.62    7.72    7.81    7.91
   8.01    8.11    8.2     8.3        7.64    7.73    7.82    7.91
   ⋮                             ⋱
 NaN     NaN     NaN     NaN        NaN     NaN     NaN     NaN
 NaN     NaN     NaN     NaN        NaN     NaN     NaN     NaN
 NaN     NaN     NaN     NaN        NaN     NaN     NaN     NaN
source
StatGeochem.get_srtm15plusFunction
get_srtm15plus([varname])

Read SRTM15plus file from HDF5 storage (15 arc second topography from the Shuttle Radar Topography Mission), downloading from cloud if necessary.

Available varnames (variable names) include:

  "elevation"
  "y_lat_cntr"
  "x_lon_cntr"
  "cellsize"
  "scalefactor"
  "nanval"
  "reference"

Units are meters of elevation and decimal degrees of latitude and longitude.

Reference: https://doi.org/10.5069/G92R3PT9

See also: find_srtm15plus.

Examples

julia> get_srtm15plus()
Dict{String, Any} with 7 entries:
  "cellsize"    => 0.00416667
  "scalefactor" => 240
  "x_lon_cntr"  => [-180.0, -179.996, -179.992, -179.988, -179.983,…
  "reference"   => "http://topex.ucsd.edu/WWW_html/srtm30_plus.html"
  "y_lat_cntr"  => [-90.0, -89.9958, -89.9917, -89.9875, -89.9833, …
  "nanval"      => -32768
  "elevation"   => Int16[-32768 -32768 … -32768 -32768; 3124 3124 ……

julia> get_srtm15plus("elevation")
43201×86401 Matrix{Int16}:
 -32768  -32768  -32768  -32768  …  -32768  -32768  -32768
   3124    3124    3124    3124       3113    3113    3124
   3123    3123    3123    3122       3111    3111    3123
   3121    3121    3121    3121       3110    3110    3121
      ⋮                          ⋱                       ⋮
  -4225   -4224   -4224   -4224      -4224   -4225   -4225
  -4223   -4222   -4222   -4223      -4223   -4223   -4223
  -4223   -4223   -4223   -4223      -4223   -4223   -4223
  -4230   -4230   -4230   -4230  …   -4230   -4230   -4230
source
StatGeochem.hashdatasetMethod
hashdataset(ds::Union{Dict, NamedTuple}; digits::Number=3, elements=keys(ds))

Calculate a hash value for each row of a dataset. By default, this considers only the first 3 digits of each number, regardless of scale.

Examples

julia> ds = (La=rand(5), Yb=rand(5)/10)
NamedTuple with 2 elements:
La  = Vector{Float64}(5,)     [0.580683620945775 ... 0.23810020661332487]
Yb  = Vector{Float64}(5,)     [0.014069255862588826 ... 0.067367584177675]

julia> hashdataset(ds)
5-element Vector{UInt64}:
0x89a02fa88348e07c
0x181e78f0ad2af144
0xa3811bd05cca4743
0xfcfe1b6edf0c81cf
0x647868efa9352972
source
StatGeochem.haversineMethod
haversine(lat₁, lon₁, lat₂, lon₂)

Calculate the arc degree distance between two decimal degree points (lat₁, lon₁) and (lat₂, lon₂).

source
StatGeochem.importdatasetFunction
function importdataset(filepath, [delim];
    	importas=:Dict,
    	elements=nothing,
    	standardize::Bool=true,
    	floattype=Float64,
    	skipstart::Integer=0,
    	skipnameless::Bool=true,
    	mindefinedcolumns::Integer=0
)

Import a delimited file specified by filepath with delimiter delim as a dataset in the form of either a Dict or a NamedTuple.

Possible keyword arguments include:

	importas

Specify the format of the imported dataset. Options include :Dict and :Tuple

	elements

Specify the names to be used for each element (i.e., column) of the dataset. Default value (nothing) will cause elements to be read from the first row of the file

	standardize

Convert columns to uniform type wherever possible. Boolean; true by default.

	floattype

Preferred floating-point type for numerical data. Float64 by default.

	skipstart

Ignore this many rows at the start of the input file (useful if input file has a header or other text before the column names). 0 by default.

	skipnameless

Skip columns with no column name. Boolean; true by default

	mindefinedcolumns

Skip rows with fewer than this number of delimiters. 0 by default.

source
StatGeochem.invweightMethod
k = invweight(lat::AbstractArray, lon::AbstractArray, age::AbstractArray;
    	lp::Number=2,
    	spatialscale=1.8,
    	agescale=38.0
)

Find the inverse weights k (proportional to spatiotemporal sample density) for a set of geological samples with specified latitude (lat), logitude (lon), and age (of crystallization, deposition, etc.).

The default spatialscale and agescale are taken from Keller and Schoene 2012. However, alternative scalings can be supplied. If an array is supplied for either spatialscale, agescale, or both, a 3-d matrix of k values will be returned, with dimensions length(spatialscale)length(agescale)nrows.

source
StatGeochem.invweightMethod
k = invweight(nums::AbstractArray, scale::Number; lp=2)

Find the inverse weights for a single array nums for a given scale, and exponent lp (default lp = 2).

Returns an array k where k[i] is the "inverse weight" for element i of the input array.

source
StatGeochem.invweight_ageMethod
k = invweight_age(age::AbstractArray; lp::Number=2, agescale::Number=38.0)

Find the inverse weights k (proportional to temporal sample density) for a set of geological samples with specified age (of crystallization, deposition, etc.).

source
StatGeochem.invweight_locationMethod
k = invweight_location(lat::AbstractArray, lon::AbstractArray;
    	lp::Number=2,
    	spatialscale::Number=1.8
)

Find the inverse weights k (proportional to spatial sample density) for a set of geological samples with specified latitude (lat), and logitude (lon).

source
StatGeochem.isnumericMethod
isnumeric(x)

Return true if x can be parsed as a number, else false

Examples

julia> StatGeochem.isnumeric(1)
true

julia> StatGeochem.isnumeric("1")
true

julia> StatGeochem.isnumeric("0.5e9")
true

julia> StatGeochem.isnumeric("foo")
false
source
StatGeochem.materializeMethod
materialize(x)

Convert an array-like object to an materialized, actual allocated Array, and leaving other types unchanged.

Unlike collect, will merely pass through an already-allocated Array without change, rather than allocating new memory and making a copy.

Examples

julia> StatGeochem.materialize(1:100)
100-element Vector{Int64}:
   1
   2
   3
   ⋮
  99
 100

julia> StatGeochem.materialize(5)
5
source
StatGeochem.melts_clean_modesMethod
melts_clean_modes(scratchdir::String; index=1)

Read and parse / clean-up modal phase proportions from specified MELTS run directory Returns an elementified dictionary

source
StatGeochem.melts_configureFunction
melts_configure(meltspath::String, scratchdir::String, composition::Collection{Number},
    	elements::Collection{String},
    	T_range=(1400, 600),
    	P_range=(10000,10000);)

Configure and run a MELTS simulation using alphaMELTS. Optional keyword arguments and defaults include:

batchstring::String = "1

sc.melts 10 1 3 1 liquid 1 1.0 0 10 0 4 0 "

A string defining the sequence of options that would be entered to produce the desired calculation if running alphaMELTS at the command line. The default string specifies a batch calculation starting at the liquidus.

dT = -10

The temperature step, in degrees, between each step of the MELTS calculation

dP = 0

The pressure step, in bar, between each step of the MELTS calculation

index = 1

An optional variable used to specify a unique suffix for the run directory name

version::String = "pMELTS"

A string specifying the desired version of MELTS. Options include MELTS and pMELTS.

mode::String = "isobaric"

A string specifying the desired calculation mode for MELTS. Options include isothermal, isobaric, isentropic, isenthalpic, isochoric, geothermal and PTPath.

fo2path::String = "FMQ"

A string specifying the oxygen fugacity buffer to follow, e.g., FMQ or NNO+1. Available buffers include IW,COH,FMQ,NNO,HM, and None

fractionatesolids::Bool = false

Fractionate all solids? default is false

suppress::Collection{String} = String[]

Supress individual phases (specify as strings in array, i.e. ["leucite"])

verbose::Bool = true

Print verbose MELTS output to terminal (else, write it to melts.log)

source
StatGeochem.melts_queryMethod
melts_query(scratchdir::String; index=1)

Read all phase proportions from Phase_main_tbl.txt in specified MELTS run directory Returns an elementified dictionary

source
StatGeochem.melts_query_liquidMethod
melts_query_liquid(scratchdir::String; index=1)

Read liquid composition from Liquid_comp_tbl.txt in specified MELTS run directory Returns an elementified dictionary

source
StatGeochem.melts_query_modesMethod
melts_query_modes(scratchdir::String; index=1)

Read modal phase proportions from Phase_mass_tbl.txt in specified MELTS run Returns an elementified dictionary

source
StatGeochem.melts_query_solidMethod
melts_query_solid(scratchdir::String; index=1)

Read solid composition from Solid_comp_tbl.txt in specified MELTS run directory Returns an elementified dictionary

source
StatGeochem.melts_query_systemMethod
melts_query_system(scratchdir::String; index=1, importas=:Dict)

Read system thermodynamic and composition data from System_main_tbl.txt in specified MELTS run directory. Returns an elementified dictionary or tuple.

source
StatGeochem.metalconversion!Method
dataset = metalconversion!(dataset::Union{Dict,NamedTuple}; unitratio::Number=10000)

Convert minor element oxides (MnO, Cr2O3, NiO, ...) into corresponding metals (Mn, Cr, Ni, ...) in place if extant.

If metals are expected as parts per million (ppm), set unitratio=10000 (default); if metals are as wt%, set unitratio = 1

See also metalconversion, c.f. oxideconversion!

source
StatGeochem.metalconversionMethod
converted_dataset = metalconversion(dataset::Union{Dict,NamedTuple}; unitratio::Number=10000)

As metalconversion!, but returning a copy rather than modifying in-place

source
StatGeochem.nonnumericMethod
nonnumeric(x)

Return true for if x is not missing but cannot be parsed as a number

Examples

julia> StatGeochem.nonnumeric(1)
false

julia> StatGeochem.nonnumeric("1")
false

julia> StatGeochem.nonnumeric("0.5e9")
false

julia> StatGeochem.nonnumeric("foo")
true
source
StatGeochem.oxideconversion!Method
oxideconversion!(dataset::Dict; unitratio::Number=10000)

Convert major elements (Ti, Al, etc.) into corresponding oxides (TiO2, Al2O3, ...) in place if extant.

If metals are expected as PPM, set unitratio=10000 (default); if metals are as wt%, set unitratio = 1

See also oxideconversion, c.f. metalconversion!

source
StatGeochem.oxideconversionMethod
converted_dataset = oxideconversion(dataset::Union{Dict,NamedTuple}; unitratio::Number=10000)

As oxideconversion!, but returning a copy rather than modifying in-place

source
StatGeochem.parsedlmMethod
parsedlm(str::AbstractString, delimiter::Char, T::Type=Float64; rowdelimiter::Char='\n')

Parse a string delimited by both row and column into a single (2-D) matrix. Default column delimiter is newline. Similar to readdlm, but operating on a string instead of a file.

Examples

julia> parsedlm("1,2,3
4,5,6
7,8,9
", ',', Float64)
3×3 Matrix{Float64}:
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

julia> parsedlm("1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16", ',', Int64)
4×4 Matrix{Int64}:
  1   2   3   4
  5   6   7   8
  9  10  11  12
 13  14  15  16
source
StatGeochem.perplex_configure_geothermFunction
perplex_configure_geotherm(perplexdir::String, scratchdir::String, composition::Collection{Number},
    	elements::String=["SIO2","TIO2","AL2O3","FEO","MGO","CAO","NA2O","K2O","H2O"],
    	P_range=(280,28000), T_surf::Number=273.15, geotherm::Number=0.1;
    	dataset::String="hp02ver.dat",
    	index::Integer=1,
    	npoints::Integer=100,
    	solution_phases::String="O(HP)\nOpx(HP)\nOmph(GHP)\nGt(HP)\noAmph(DP)\ncAmph(DP)\nT\nB\nChl(HP)\nBio(TCC)\nMica(CF)\nCtd(HP)\nIlHm(A)\nSp(HP)\nSapp(HP)\nSt(HP)\nfeldspar_B\nDo(HP)\nF\n",
    	excludes::String="ts\nparg\ngl\nged\nfanth\ng\n",
    	mode_basis::String="vol",  #["vol", "wt", "mol"]
    	composition_basis::String="wt",  #["vol", "wt", "mol"]
    	fluid_eos::Integer=5)

Set up a PerpleX calculation for a single bulk composition along a specified geothermal gradient and pressure (depth) range. P specified in bar and T_surf in Kelvin, with geothermal gradient in units of Kelvin/bar

source
StatGeochem.perplex_configure_isobarFunction
perplex_configure_isobar(perplexdir::String, scratchdir::String, composition::Collection{Number},
    	elements::String=["SIO2","TIO2","AL2O3","FEO","MGO","CAO","NA2O","K2O","H2O"]
    	P::Number=10000, T_range::NTuple{2,Number}=(500+273.15, 1500+273.15);
    	dataset::String="hp11ver.dat",
    	index::Integer=1,
    	npoints::Integer=100,
    	solution_phases::String="O(HP)\nOpx(HP)\nOmph(GHP)\nGt(HP)\noAmph(DP)\ncAmph(DP)\nT\nB\nChl(HP)\nBio(TCC)\nMica(CF)\nCtd(HP)\nIlHm(A)\nSp(HP)\nSapp(HP)\nSt(HP)\nfeldspar_B\nDo(HP)\nF\n",
    	excludes::String="ts\nparg\ngl\nged\nfanth\ng\n",
    	mode_basis::String="wt",  #["vol", "wt", "mol"]
    	composition_basis::String="wt",  #["vol", "wt", "mol"]
    	nonlinear_subdivision::Bool=false,
    	fluid_eos::Integer=5)

Set up a PerpleX calculation for a single bulk composition along a specified isobaric temperature gradient. P specified in bar and T_range in Kelvin

source
StatGeochem.perplex_configure_pathFunction
perplex_configure_path(perplexdir::String, scratchdir::String, composition::Collection{Number}, PTdir::String="", PTfilename::String="",
    	elements::String=("SIO2","TIO2","AL2O3","FEO","MGO","CAO","NA2O","K2O","H2O"),
    	T_range::NTuple{2,Number}=(500+273.15, 1050+273.15);
    	dataset::String="hp11ver.dat",
    	index::Integer=1,
    	solution_phases::String="O(HP)\nOpx(HP)\nOmph(GHP)\nGt(HP)\noAmph(DP)\ncAmph(DP)\nT\nB\nChl(HP)\nBio(TCC)\nMica(CF)\nCtd(HP)\nIlHm(A)\nSp(HP)\nSapp(HP)\nSt(HP)\nfeldspar_B\nDo(HP)\nF\n",
    	excludes::String="ts\nparg\ngl\nged\nfanth\ng\n",
    	mode_basis::String="wt",  #["vol", "wt", "mol"]
    	composition_basis::String="wt",  #["vol", "wt", "mol"]
    	nonlinear_subdivision::Bool=false,
    	fluid_eos::Integer=5)

Set up a PerpleX calculation for a single bulk composition along a specified pressure–temperature path with T as the independent variable.

P specified in bar and T_range in Kelvin

source
StatGeochem.perplex_configure_pseudosectionFunction
perplex_configure_pseudosection(perplexdir::String, scratchdir::String, composition::Collection{Number},
    	elements::Collection{String}=("SIO2","TIO2","AL2O3","FEO","MGO","CAO","NA2O","K2O","H2O"),
    	P::NTuple{2,Number}=(280, 28000), T::NTuple{2,Number}=(273.15, 1500+273.15);
    	dataset::String="hp11ver.dat",
    	index::Integer=1,
    	xnodes::Integer=42,
    	ynodes::Integer=42,
    	solution_phases::String="O(HP)\nOpx(HP)\nOmph(GHP)\nGt(HP)\noAmph(DP)\ncAmph(DP)\nT\nB\nChl(HP)\nBio(TCC)\nMica(CF)\nCtd(HP)\nIlHm(A)\nSp(HP)\nSapp(HP)\nSt(HP)\nfeldspar_B\nDo(HP)\nF\n",
    	excludes::String="ts\nparg\ngl\nged\nfanth\ng\n",
    	mode_basis::String="vol", #["vol", "wt", "mol"]
    	composition_basis::String="wt", #["wt", "mol"]
    	fluid_eos::Number=5)

Set up a PerpleX calculation for a single bulk composition across an entire 2d P-T space. P specified in bar and T in Kelvin.

source
StatGeochem.perplex_query_modesMethod
perplex_query_modes(perplexdir::String, scratchdir::String, P::NTuple{2,Number}, T::NTuple{2,Number};
    	index::Integer=1, npoints::Integer=200, include_fluid="y")

Query modal mineralogy (mass proportions) along a specified P-T path using a pre-computed pseudosection. Results are returned as a dictionary.

source
StatGeochem.perplex_query_modesMethod
perplex_query_modes(perplexdir::String, scratchdir::String;
    	dof::Integer=1, index::Integer=1, include_fluid="y")

Query modal mineralogy (mass proportions) along a previously configured 1-d path (dof=1, isobar, geotherm, or P–T path) or 2-d grid / pseudosection (dof=2). Results are returned as a dictionary.

Currently returns wt%

source
StatGeochem.perplex_query_phaseMethod
perplex_query_phase(perplexdir::String, scratchdir::String, phase::String, P::NTuple{2,Number}, T::NTuple{2,Number};
    	index::Integer=1, npoints::Integer=200, include_fluid="y", clean_units::Bool=true)

Query all perplex-calculated properties for a specified phase (e.g. "Melt(G)") along a specified P-T path using a pre-computed pseudosection. Results are returned as a dictionary.

source
StatGeochem.perplex_query_phaseMethod
perplex_query_phase(perplexdir::String, scratchdir::String, phase::String;
    	dof::Integer=1, index::Integer=1, include_fluid="y", clean_units::Bool=true)

Query all perplex-calculated properties for a specified phase (e.g. "Melt(G)") along a previously configured 1-d path (dof=1, isobar, geotherm, or P–T path) or 2-d grid / pseudosection (dof=2). Results are returned as a dictionary.

source
StatGeochem.perplex_query_pointMethod
perplex_query_point(perplexdir::String, scratchdir::String, P::Number, T::Number; index::Integer=1)

Query perplex results at a single P,T point in a pseudosection. Results are returned as a string.

source
StatGeochem.perplex_query_pointMethod
perplex_query_point(perplexdir::String, scratchdir::String, indvar::Number; index::Integer=1)

Query perplex results at a single temperature on an isobar or single pressure on a geotherm. Results are returned as a string.

source
StatGeochem.perplex_query_seismicMethod
perplex_query_seismic(perplexdir::String, scratchdir::String, P::NTuple{2,Number}, T::NTuple{2,Number};
    	index::Integer=1, npoints::Integer=200, include_fluid="n")

Query perplex seismic results along a specified P-T path using a pre-computed pseudosection. Results are returned as a dictionary.

source
StatGeochem.perplex_query_seismicMethod
perplex_query_seismic(perplexdir::String, scratchdir::String;
    	dof::Integer=1, index::Integer=1, include_fluid="n")

Query perplex seismic results along a previously configured 1-d path (dof=1, isobar or geotherm) or 2-d grid / pseudosection (dof=2). Results are returned as a dictionary.

source
StatGeochem.perplex_query_systemMethod
function perplex_query_system(perplexdir::String, scratchdir::String, P::NTuple{2,Number}, T::NTuple{2,Number};
    	index::Integer=1, npoints::Integer=200, include_fluid="y",clean_units::Bool=true)

Query all perplex-calculated properties for the system (with or without fluid) along a specified P-T path using a pre-computed pseudosection. Results are returned as a dictionary. Set include_fluid="n" to return solid+melt only.

source
StatGeochem.perplex_query_systemMethod
perplex_query_system(perplexdir::String, scratchdir::String;
    	index::Integer=1, include_fluid="y", clean_units::Bool=true)

?

Query all perplex-calculated properties for the system (with or without fluid) along a previously configured 1-d path (dof=1, isobar or geotherm) or 2-d grid / pseudosection (dof=2). Results are returned as a dictionary. Set include_fluid="n" to return solid+melt only.

source
StatGeochem.randsampleFunction
randsample(data, nrows, [p])

Bootstrap resample (without uncertainty) a data array to length nrows. Optionally provide weights p either as a vector (one-weight-per-sample) or scalar.

source
StatGeochem.randsampleFunction
randsample(dataset::Dict, nrows, [elements], [p])

Bootstrap resample (without uncertainty) a dataset dict to length nrows. Optionally provide weights p either as a vector (one-weight-per-sample) or scalar.

source
StatGeochem.renormalize!Function
renormalize!(dataset, [elements]; total=1.0)

Normalize in-place a (i.e., compositional) dataset defined by a Dict or NamedTuple of one-dimensional numerical arrays, such that all the elements (i.e., variables – by default all keys in the datset) sum to a given total (by default, 1.0).

Note that the arrays representing each element or variable are assumed to be of uniform length

source
StatGeochem.renormalize!Method
renormalize!(A::AbstractArray; dim, total=1.0)

Normalize an array A in place such that it sums to total. Optionally may specify a dimension dim along which to normalize.

source
StatGeochem.sanitizevarnameMethod
sanitizevarname(s::AbstractString)

Modify an input string s to transform it into an acceptable variable name.

Examples

julia> StatGeochem.sanitizevarname("foo")
"foo"

julia> StatGeochem.sanitizevarname("523foo")
"_523foo"

julia> StatGeochem.sanitizevarname("Length (μm)")
"Length_μm"
source
StatGeochem.sphericalMethod
ρ, θ, φ = cartesian(x, y, z)

Convert from cartesian coordinates (x,y,z) to spherical coordinates (ρ,φ,θ).

source
StatGeochem.systemMethod
system(cmdstr::AbstractString)

Direct access to the command line through C's system function – without stripping/sanitizing special characters, in contrast to Julia's safer run() function. This allows pipelining, etc. in shell commands. Returns 0 on success.

Examples

julia> system("pwd")
/Users/foo/code/StatGeochem.jl
0
source
StatGeochem.unelementifyFunction
unelementify(dataset, elements;
    	floatout::Bool=false,
    	floattype=Float64,
    	findnumeric::Bool=false,
    	skipnan::Bool=false,
    	rows=:
)

Convert a Dict or Named Tuple of vectors into a 2-D array with variables as columns

Examples

julia> D
NamedTuple with 3 elements:
  La  = Vector{Float64}(2,) [1.5 ... 3.7]
  Ce  = Vector{Float64}(2,) [1.1 ... 2.9]
  Pr  = Vector{Float64}(2,) [1.0 ... 2.5]

julia> unelementify(D)
3×3 Matrix{Any}:
  "La"   "Ce"   "Pr"
 1.5    1.1    1.0
 3.7    2.9    2.5
source