- Notifications
You must be signed in to change notification settings - Fork1
isogeochem makes working with carbonate oxygen, carbon, and clumped isotope data reproducible and straightforward. Use it to quickly calculate isotope fractionation factors, and apply paleothermometry equations.
License
davidbajnai/isogeochem
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
isogeochem
makes working with stable oxygen, carbon, and clumpedisotope data straightforward and reproducible. It offers tools toquickly calculate:
- carbonateδ18O,δ17O,∆47, and∆48 values at a given temperature
- carbonate growth temperatures fromδ18O,∆47, and∆48 values
- isotope fractionation factors, e.g., carbonate/water, quartz/water
- model DIC speciation as a function of temperature, pH, and salinity
- convert between the VSMOW and VPDB scales
The list of available proxy–temperature calibrations is growing witheach new released version.
Please get in touch if you havesuggestions to include!
Install the released version ofisogeochem
from CRAN.
install.packages("isogeochem")
Install the development version ofisogeochem
from GitHub.
if (!require("devtools")) install.packages("devtools")if (!require("rmarkdown")) install.packages("rmarkdown")devtools::install_github("davidbajnai/isogeochem",build_vignettes=TRUE)
Case studies demonstrating the use and scope of the functions inisogeochem
are available as vignettes.
browseVignettes("isogeochem")
UseD47()
andD48()
to calculate equilibrium carbonate clumpedisotope values (∆47,∆48) for a giventemperature.temp_D47()
calculates carbonate growth temperatures from∆47 values, whiletemp_D48()
calculates growthtemperature corrected for kinetic effects considering both the∆47 and the∆48 value.
if (!require("shades")) install.packages("shades")# Model equilibrium carbonate ∆47 and ∆48 valuestemp= seq(0,100,10)# temperature range: 0—100 °CD47eq= D47(temp,eq="Fiebig21")D48eq= D48(temp,eq="Fiebig21")# Sample dataD47_coral=0.617;D47_coral_err=0.006D48_coral=0.139;D48_coral_err=0.022D47_speleo=0.546;D47_speleo_err=0.007D48_speleo=0.277;D48_speleo_err=0.029## Plot in ∆47 vs ∆48 space ##plot(0,type="l",axes=TRUE,ylim= c(0.4,0.7),xlim= c(0.1,0.3),ylab= expression(Delta[47]*" (CDES90, ‰)"),xlab= expression(Delta[48]*" (CDES90, ‰)"),lty=0,font=1,cex.lab=1,las=1)# Plot the equilibrium curve and pointslines (D48eq,D47eq,col="purple",lwd=2)points(D48eq,D47eq,col=shades::gradient(c("blue","red"), length(temp)),pch=19,cex=1.2)# Plot the sample data,# ... the kinetic slopes,# ... and calculate growth temperatures corrected for kinetic effects# ... using a single function!temp_D48(D47_coral,D48_coral,D47_coral_err,D48_coral_err,ks=-0.6,add=TRUE,col="seagreen",pch=15)#> temp temp_err#> 1 38 6temp_D48(D47_speleo,D48_speleo,D47_speleo_err,D48_speleo_err,ks=-1,add=TRUE,col="darkorange",pch=17)#> temp temp_err#> 1 30 9# Add labels to the plottext(D48(temp,eq="Fiebig21"), D47(temp,eq="Fiebig21"), paste(temp,"°C"),col=shades::gradient(c("blue","red"), length(temp)),pos=4,cex=0.8)
d17O_c()
calculates equilibrium carbonate oxygen isotope values(δ18O,δ17O,∆17O) for a giventemperature and ambient water composition. Use themix_d17O()
functionto calculate mixing curves in triple oxygen isotope space, e.g., formodeling diagenesis.
if (!require("shades")) install.packages("shades")# Model equilibrium *calcite* precipitating from seawatertemp_sw= seq(0,50,10)# temperature range: 0—50 °Cd18O_sw=0# d18O value of seawaterD17O_sw=-0.004# D17O value of seawaterd18Op= prime(d17O_c(temp_sw,d18O_sw,D17O_sw,eq18="Daeron19")[,1])D17O= d17O_c(temp_sw,d18O_sw,D17O_sw,eq17="Wostbrock20",eq18="Daeron19")[,3]# Model progressing meteoric diagenetic alterationd18O_ds=-8# d18O value of diagenetic fluidD17O_ds=0.020# D17O value of diagenetic fluidem_equi= d17O_c(temp=10,d18O_H2O=d18O_sw,D17O_H2O=D17O_sw,eq17="Wostbrock20",eq18="Daeron19")# equilibrium endmemberem_diag= d17O_c(temp=80,d18O_H2O=d18O_ds,D17O_H2O=D17O_ds,eq17="Wostbrock20",eq18="Daeron19")# diagenetic endmembermix= mix_d17O(d18O_A=em_equi[1],d17O_A=em_equi[2],d18O_B=em_diag[1],d17O_B=em_diag[2],step=25)## Plot in ∆17O vs d'18O space ##plot(0,type="l",ylim= c(-0.1,0.05),xlim= c(-10,40),xlab= expression(delta*"'"^18*"O (‰, VSMOW)"),ylab= expression(Delta^17*"O (‰, VSMOW)"),lty=0,font=1,cex.lab=1,las=1)# Plot meteoric waters from the build-in datasetpoints(prime(meteoric_water$d18O), D17O(meteoric_water$d18O,meteoric_water$d17O),col="lightblue1",pch=20)text(-4,0.05,"meteoric water",pos=4,col="lightblue1")# Plot the composition of the fluidspoints(prime(d18O_sw),D17O_sw,col="darkmagenta",pch=8)# seawatertext(prime(d18O_sw),D17O_sw,"seawater",pos=4,col="darkmagenta")points(prime(d18O_ds),D17O_ds,col="deeppink",pch=8)# diagenetic fluidtext(prime(d18O_ds),D17O_ds,"diagenetic fluid",pos=4,col="deeppink")# Plot the equilibrium curve and pointslines(d18Op,D17O,col="darkmagenta",lwd=2)points(d18Op,D17O,pch=19,cex=1.2,col=shades::gradient(c("blue","red"), length(temp_sw)))text(d18Op,D17O, paste(temp_sw,"°C"),pos=4,cex=0.8,col=shades::gradient(c("blue","red"), length(temp_sw)))text(30,-0.05, paste("equilibrium calcite\nfrom seawater"),pos=3,col="darkmagenta")# Plot the mixing model between the equilibrium and diagenetic endmemberslines(prime(mix[,1]),mix[,2],col="deeppink",lty=3,lwd=2)points(prime(mix[,1]),mix[,2],pch=18,cex=1.5,col=shades::gradient(c("#3300CC","deeppink"), length(mix[,2])))text(prime(mix[,1]),mix[,2], paste(mix[,3],"%",sep=""),pos=2,cex=0.8,col=shades::gradient(c("#3300CC","deeppink"), length(mix[,3])))text(22,-0.09, paste("progressing","\ndiagenetic alteration","\n(recrystallisation) at 80°C",sep=""),pos=2,col="deeppink")
Useisogeochem
to calculate crystallization temperatures fromcarbonateδ18O and∆47 values.
# Temperature from D47 with or without errorstemp_D47(D47_CDES90=0.601,eq="Petersen19")#> [1] 24.9temp_D47(D47_CDES90=0.601,D47_error=0.008 ,eq="Anderson21")#> temp temp_err#> 1 22.6 2.7# Temperature from d18Otemp_d18O(d18O_c_VSMOW=30,d18O_H2O_VSMOW=0,min="calcite",eq="Watkins13")#> [1] 25.9
Useisogeochem
to calculate16O/18Ofractionation factors at given temperatures.
if (!require("viridisLite")) install.packages("viridisLite")plot(0,type="l",las=1,yaxt="n",xlim= c(10,30),ylim= c(-30,50),xlab="Temperature (°C)",ylab= expression("Equilibrium enrichment in"^18*"O relative to H"[2]*"O (‰)"))axis(2, seq(-30,50,10),las=1)temps= seq(10,30,1)d18O_H2O_VSMOW=0cols=viridisLite::viridis(7,option="C")text(10,45, expression("CO"[2]*" (aq)"),col=cols[1],adj= c(0,0))lines(temps, A_from_a(a18_CO2aq_H2O(temps),d18O_H2O_VSMOW),lwd=2,lty=2,col=cols[1])text(10,35, expression("HCO"[3]^"–"),col=cols[2],adj= c(0,0))lines(temps, A_from_a(a18_HCO3_H2O(temps),d18O_H2O_VSMOW),lwd=2,lty=2,col=cols[2])text(10,30,"calcite",col=cols[3],adj= c(0,0))lines(temps, A_from_a(a18_c_H2O(temps,"calcite","Daeron19"),d18O_H2O_VSMOW),lwd=2,lty=1,col=cols[3])text(10,21, expression("CO"[3]^"2–"),col=cols[4],adj= c(0,0))lines(temps, A_from_a(a18_CO3_H2O(temps),d18O_H2O_VSMOW),lwd=2,lty=2,col=cols[4])text(10,1, expression("H"[2]*"O"),col=cols[5],adj= c(0,0))lines(temps, rep(d18O_H2O_VSMOW, length(temps)),lwd=3,lty=1,col=cols[5])text(10,-23, expression("OH"^"–"),col=cols[6],adj= c(0,0))lines(temps, B_from_a(a18_H2O_OH(temps,eq="Z20-X3LYP"),d18O_H2O_VSMOW),lwd=2,lty=1,col=cols[6])
# Convert between the VSMOW and VPDB scales:to_VPDB(32)#> [1] 1.05032to_VSMOW(1)#> [1] 31.95092# Convert between classical delta and delta prime values:prime(10)#> [1] 9.950331unprime(9.95)#> [1] 9.999666# Calculate isotope fractionation factors:a_A_B(A=30.40,B=0.15)#> [1] 1.030245epsilon(a_A_B(A=30.40,B=0.15))#> [1] 30.24546
Withinisogeochem
you have quick access to important datasets.
Name | Description | Reference |
---|---|---|
devilshole | The original Devils Hole carbonateδ18O time series | Winograd et al. (2006) |
LR04 | A benthic foraminiferaδ18O stack | Lisiecki & Raymo (2005) |
GTS2020 | An abridged version of the GTS2020 oxygen isotope stack | Grossman & Joachimski (2020) |
meteoric_water | A compilation of meteoric waterδ18O andδ17O values | Barkan & Luz (2010), Aron et al. (2021) |
For more information on the datasets please have a look at thecorresponding documentation, e.g.,?devilshole
Copyright (C) 2023 David Bajnai
This program is free software: you can redistribute it and/or modify itunder the terms of theGNU General Public License version3, or (at your option) any later version. This program isdistributed in the hope that it will be useful, but without anywarranty.
Follow the citation format provided inCITATION whenreferencingisogeochem
.
There are several other R packages that complementisogeochem
and areworth checking out:
viridisLite
andviridis
produce color-blindand black-and-white printer friendly color scales.
clumpedr
works withisoreader
to read in rawmeasurement data and reproducibly process the results to clumped isotopevalues.
seasonalclumped
can be used to reconstruct temperature and salinity variations fromseasonal oxygen and clumped isotope records.
deeptime
adds geologicaltimescales to ggplots.
About
isogeochem makes working with carbonate oxygen, carbon, and clumped isotope data reproducible and straightforward. Use it to quickly calculate isotope fractionation factors, and apply paleothermometry equations.