# echo = F, include = TRUE, message= F, warning= F, echo = FALSE
knitr::opts_chunk$set(warning = FALSE, message = FALSE) 
knitr::opts_chunk$set(
  dev = c("png", "pdf"), fig.keep = "all",
  dev.args = list(pdf = list(encoding = "WinAnsi", useDingbats = FALSE)),
  fig.path = file.path("plots", paste0(gsub("\\.[Rr]md", "", knitr::current_input()), "_"))
)
# load libraries
library(rlang)
library(plotly)
library(tidyverse)
library(RDocumentation)
library(ggplot2)
library(grid)
library(gridExtra)
library(dplyr)
library(RColorBrewer)
library(viridis)
library(ggpubr)
library(gridExtra)
library(openxlsx)
library(cowplot)
library(stringr)
library(ggh4x)
library(knitr)
library(arsenal)

1 D17O reactors data

1.1 Preliminary Correction Data

## NEED reactors 29 - 31

# Reactor 32 | March 2025 to current
R32_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R32_Cap17O Compiled REACTOR THIRTY TWO.xlsx", sheet = "All Data")

# Reactor 31 | August 2024 - November 2024
R31_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R31_Cap17O Compiled REACTOR THIRTY ONE.xlsx", sheet = "All Data")

# Reactor 30 data not found

# Reactor 29 | 
R29_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R29_Cap17O Compiled REACTOR TWENTY NINE.xlsx", sheet = "All Data")

# Reactor 28 | August 2023 - October 2023
R28_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R28_Cap17O Compiled REACTOR TWENTY EIGHT.xlsx", sheet = "All Data")

# Reactor 27 | May 2023 - August 2023
R27_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R27_Cap17O Compiled REACTOR TWENTY SEVEN.xlsx", sheet = "All Data")

# Reactor 26
R26_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R26_Cap17O Compiled REACTOR TWENTY SIX.xlsx", sheet = "All Data")

# Reactor 25
R25_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R25_Cap17O Compiled REACTOR TWENTY FIVE.xlsx", sheet = "All Data")

# Reactor 24
R24_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R24_Cap17O Compiled REACTOR TWENTY FOUR.xlsx", sheet = "All Data")

# Reactor 23
R23_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R23b_Cap17O Compiled REACTOR TWENTY THREE - post filament change.xlsx", sheet = "All Data")

# # Combined R23, 24, 25
# R23.24.25_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R23.R24.R25_Data_formatted.xlsx", sheet = "All Data")

# Reactor 22a 
R22a_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R22a_Cap17O Compiled REACTOR TWENTY TWO.xlsx", sheet = "All Data")

# Reactor 21
R21_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R21_Cap17O Compiled REACTOR TWENTY ONE.xlsx", sheet = "All Data")

# Reactor 20
R20_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R20_Cap17O Compiled REACTOR TWENTY.xlsx", sheet = "All Data")

# Reactor 19
R19_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R19_Cap17O Compiled REACTOR NINETEEN.xlsx", sheet = "All Data")

# Reactor 18
R18_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R18_Cap17O Compiled REACTOR EIGHTEEN 05122021.xlsx", sheet = "All Data")

# Reactor 17
R17_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R17_Cap17O Compiled REACTOR SEVENTEEN 02012021.xlsx", sheet = "All Data")

# Reactor 16
R16c_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R16c_Cap17O Compiled REACTOR SIXTEEN post power201118.xlsx", sheet = "All Data")

# Reactor 15
R15_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R15b_Cap17O Compiled REACTOR FIFTEEN 200527_postrepair.xlsx", sheet = "All Data")

# Reactor 14
R14_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R14_Cap17O Compiled REACTOR FOURTEEN 200316.xlsx", sheet = "All Data")

# Reactor 13
R13_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R13_Cap17O Compiled REACTOR THIRTEEN 191121.xlsx", sheet = "All Data")

# Reactor 12
R12_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R12all_Cap17O Compiled REACTOR TWELVE_all_data.xlsx", sheet = "All Data")

# Reactor 11
R11_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R11_Cap17O Compiled REACTOR ELEVEN 190814.xlsx", sheet = "All Data")

# Reactor 10
R10_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/triplereactordata/R10_Cap17O Compiled REACTOR TEN 190703.xlsx", sheet = "All Data")

# Combined Reactors 13-17
R13.14.15.16.17_prelimcorr <- read.xlsx("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/SuppTable_S4_TripleOxygenIsotopes_CompleteReactorsData_v2_formatted.xlsx", sheet = "Raw Data")

2 Final Correction Data

# ## NEED reactors 29 - 31
# 
# # Reactor 28 | August 2023 - October 2023
# R28 <- read.csv("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/Reactor28Final.csv")
# 
# # Reactor 27 | May 2023 - August 2023
# R27 <- read.csv("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/Reactor27Final.csv")
# 
# # Reactor 26 | Feb 2023 - May 2023
# R26 <- read.csv("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/Reactor26Final.csv")
# 
# # Reactor 25 | Oct 2022 - Jan 2023
# R25 <- read.csv("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/Reactor25Final.csv")
# 
# # Reactor 24 | Aug 2022 - Oct 2022
# R24 <- read.csv("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/Reactor24Final.csv")

2.1 Merge Reactor Data

#prelimin correction data merge
all.reactors_prelimcorr <- rbind(R32_prelimcorr, R31_prelimcorr, R29_prelimcorr, R28_prelimcorr, R27_prelimcorr, R26_prelimcorr, R25_prelimcorr, R24_prelimcorr, R23_prelimcorr, R22a_prelimcorr, R21_prelimcorr, R20_prelimcorr, R19_prelimcorr, R18_prelimcorr, R13.14.15.16.17_prelimcorr, R12_prelimcorr, R10_prelimcorr) %>% # added with combined df(R17_prelimcorr, R16c_prelimcorr, R15_prelimcorr, R14_prelimcorr, R13_prelimcorr); not added yet: R11_prelimcorr (formatting issue, can't figure it out)
  filter(flag.analysis == 0) %>%
  filter(flag.major == 0) %>% 
  filter(Type.1 == "WaterStd" | Type.1 == "CarbonateStd" ) %>% 
   mutate(
     IPL.num = as.numeric(as.character(IPL.num), na.rm = TRUE),

     d18O_VPDB = (0.97001 * d18O + 30.92),
     dp18O_VPDB = log(d18O_VPDB/1000+1) * 1000,

     d17O_VPDB = (0.97001 * d17O + 30.92),
     dp17O_VPDB = log(d17O_VPDB/1000+1) * 1000,

     D17O_VPDB = (0.97001 * D17O.per.meg + 30.92),
     Dp17O_VPDB = log(D17O_VPDB/1000+1) * 1000,
     
     Dp17O.permeg =log(D17O.per.meg/1000+1) * 1000
     ) %>%
  rename(
    d18O_SMOW.SLAP = d18O,
    dp18O_SMOW.SLAP = `d'18O`,
    d17O_SMOW.SLAP = d17O,
    dp17O_SMOW.SLAP = `d'17O`,
    D17O_SMOW.SLAP_permeg = D17O.per.meg, 
    Dp17O_SMOW.SLAP_permeg = Dp17O.permeg, 
    standard = Type.2
      )

3 Accepted Standard Values

Assemble accepted values for water and carbonate standards

converting between SMOW and VPDB: Kim, S.-T., Coplen, T. B., & Horita, J. (2015). Normalization of stable isotope data for carbonate minerals: Implementation of IUPAC guidelines. Geochimica et Cosmochimica Acta, 158, 276–289. https://doi.org/10.1016/j.gca.2015.02.011

δ18O_VSMOW-SLAP = 1.03092 * δ18O_VPDB + 30.92

δ18O_VPDB = 0.97001 * δ18O_VSMOW-SLAP - 29.99

Δ17O_VPDB = δ17O_VPDB − λ × δ18O_VPDB

stds_carbonate <- tibble(
       standard = c("IAEA-C1","102-GC-AZ01", "NBS-18", "NBS-19", "ETH1", "ETH2", "ETH3", "ETH4", "GON06-OES"),
       d13C_acc_VPDB = c(2.42, NA, -5.014, 1.95, 2.02, -10.17, 1.71, -10.2, NA),
       d18O_acc_VPDB = c(-2.32, -14.5, -23.2, -2.2, -2.13, -18.69, -1.78, -18.8, NA), 
       d18O_acc_SMOWSLAP = c(NA, NA, NA, NA, NA, NA, NA, NA, 38),
       d17O_acc_VPDB = c(NA, NA, NA, NA, NA, NA, NA, NA, NA),
       D17O_acc_VPDB_permeg = c(-100, -67, -48, -102, NA, NA, NA, NA, NA), 
       D17O_acc_SMOWSLAP_permeg = c(NA, NA, NA, NA, NA, NA, NA, NA, -343) #GON06 values very prelim
          ) %>% 
      mutate(
            d17O_acc_SMOWSLAP = NA , 
            d17O_acc_VPDB = NA,
        #if column is empty, calculate SMOW-SLAP value from VPDB value
            d18O_acc_SMOWSLAP = round( if_else(is.na(d18O_acc_SMOWSLAP), (1.03092 * d18O_acc_VPDB + 30.92), d18O_acc_SMOWSLAP), 2) , 
            D17O_acc_SMOWSLAP_permeg = round( if_else(is.na(D17O_acc_SMOWSLAP_permeg), (1.03092 * D17O_acc_VPDB_permeg + 30.92), D17O_acc_SMOWSLAP_permeg), 2), 
        #if column is empty, calculate VPDB value from SMOW-SLAP value
            d18O_acc_VPDB = round( if_else(is.na(d18O_acc_VPDB), (0.97001  * d18O_acc_SMOWSLAP - 29.99 ), d18O_acc_VPDB), 2) , 
            D17O_acc_VPDB_permeg = round( if_else(is.na(D17O_acc_VPDB_permeg), (0.97001 * D17O_acc_SMOWSLAP_permeg - 29.99 ), D17O_acc_VPDB_permeg), 2),
            d17O_acc_VPDB = round( if_else(is.na(d17O_acc_VPDB), (0.97001 * d17O_acc_SMOWSLAP - 29.99 ), d17O_acc_VPDB), 2),
    #calculate delta prime values
        dp18O_acc_VPDB = round( (log(d18O_acc_VPDB/1000+1) * 1000), 2),
        dp17O_acc_VPDB = round( (log(d17O_acc_VPDB/1000+1) * 1000), 2),
        Dp17O_acc_VPDB_permeg = round( (log(D17O_acc_VPDB_permeg/1000+1) * 1000), 2),
        dp18O_acc_SMOWSLAP = round( (log(d18O_acc_SMOWSLAP/1000+1) * 1000), 2),
        dp17O_acc_SMOWSLAP = round( (log(d17O_acc_SMOWSLAP/1000+1) * 1000), 2),
        Dp17O_acc_SMOWSLAP_permeg = round( (log(D17O_acc_SMOWSLAP_permeg/1000+1) * 1000), 2), 
            ) %>% 
      select(standard, d13C_acc_VPDB, d18O_acc_VPDB, dp18O_acc_VPDB, d18O_acc_SMOWSLAP, dp18O_acc_SMOWSLAP, D17O_acc_VPDB_permeg, D17O_acc_SMOWSLAP_permeg, Dp17O_acc_SMOWSLAP_permeg, Dp17O_acc_VPDB_permeg, d17O_acc_SMOWSLAP, dp17O_acc_SMOWSLAP, dp17O_acc_VPDB)

std_water <- read.csv("/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/data/acceptedStds_waters.csv") %>% 
      mutate(
        d13C_acc_VPDB = NA,
        d17O_acc_VPDB = NA,
        d18O_acc_VPDB = round( (0.97001 * d18O_acc_SMOWSLAP - 29.99 ), 2), #calc VPDB value from SMOW-SLAP
      #if column is empty, calculate SMOW-SLAP value from VPDB value
        d18O_acc_SMOWSLAP = round( if_else(is.na(d18O_acc_SMOWSLAP), (1.03092 * d18O_acc_VPDB + 30.92), d18O_acc_SMOWSLAP), 2) , 
        d17O_acc_SMOWSLAP = round( d17O_acc_SMOWSLAP, 2),
        D17O_acc_SMOWSLAP_permeg = round( if_else(is.na(D17O_acc_SMOWSLAP_permeg), (1.03092 * D17O_acc_VPDB_permeg + 30.92), D17O_acc_SMOWSLAP_permeg), 2),      
      #if column is empty, calculate VPDB value from SMOW-SLAP value
        d18O_acc_VPDB = round( if_else(is.na(d18O_acc_VPDB), (0.97001  * d18O_acc_SMOWSLAP - 29.99 ), d18O_acc_VPDB), 2) , 
        D17O_acc_VPDB_permeg = round( if_else(is.na(D17O_acc_VPDB_permeg), (0.97001 * D17O_acc_SMOWSLAP_permeg - 29.99 ), D17O_acc_VPDB_permeg), 2), 
        d17O_acc_VPDB = round( if_else(is.na(d17O_acc_VPDB), (0.97001 * d17O_acc_SMOWSLAP - 29.99 ), d17O_acc_VPDB), 2),
    #calculate delta prime values
        dp18O_acc_VPDB = round( (log(d18O_acc_VPDB/1000+1) * 1000), 2),
        dp17O_acc_VPDB = round( (log(d17O_acc_VPDB/1000+1) * 1000), 2),
        Dp17O_acc_VPDB_permeg = round( (log(D17O_acc_VPDB_permeg/1000+1) * 1000), 2),
        dp18O_acc_SMOWSLAP = round( (log(d18O_acc_SMOWSLAP/1000+1) * 1000), 2),
        dp17O_acc_SMOWSLAP = round( (log(d17O_acc_SMOWSLAP/1000+1) * 1000), 2),
        Dp17O_acc_SMOWSLAP_permeg = round( (log(D17O_acc_SMOWSLAP_permeg/1000+1) * 1000), 2), 
            ) %>%
      select(standard, d13C_acc_VPDB, d18O_acc_VPDB, dp18O_acc_VPDB, d18O_acc_SMOWSLAP, dp18O_acc_SMOWSLAP, D17O_acc_VPDB_permeg, D17O_acc_SMOWSLAP_permeg, Dp17O_acc_SMOWSLAP_permeg, Dp17O_acc_VPDB_permeg, d17O_acc_SMOWSLAP, dp17O_acc_SMOWSLAP, dp17O_acc_VPDB)

standards <- rbind(stds_carbonate, std_water)
write.csv(standards, "/Users/annefetrow/Library/CloudStorage/GoogleDrive-fetrowa@gmail.com/My Drive/UMich/IPL/D17O standards/TripleStds_accepted.csv")

all.reactors_prelimcorr <- all.reactors_prelimcorr %>% 
        left_join(standards, by = "standard")

4 Calculate Averages of Measured Standards across Reactors

std_avg_measured <- all.reactors_prelimcorr %>%
  filter(flag.major != TRUE) %>% 
  filter(flag.analysis != TRUE) %>%   
  group_by(standard) %>%
  summarize( 
    Std_ID = first(standard),
    Std_type = first(Type.1),
  #d18O
    d18O_sd_SMOWSLAP = round( sd(d18O_SMOW.SLAP, na.rm = TRUE), 2),
    d18O_mean_SMOWSLAP = round( mean(d18O_SMOW.SLAP, na.rm = TRUE), 2),
  #d17O
    d17O_sd_SMOWSLAP = round( sd(d17O_SMOW.SLAP, na.rm = TRUE), 2),
    d17O_mean_SMOWSLAP = round(mean(d17O_SMOW.SLAP, na.rm = TRUE), 2),
  #D17O
    D17O_sd_SMOWSLAP_permeg = round( sd(D17O_SMOW.SLAP_permeg, na.rm = TRUE), 2),
    D17O_mean_SMOWSLAP_permeg = round( mean(D17O_SMOW.SLAP_permeg, na.rm = TRUE), 2), 
  #accepted values
    d18O_acc_SMOWSLAP = first(d18O_acc_SMOWSLAP), 
    d17O_acc_SMOWSLAP = first(d17O_acc_SMOWSLAP),
    D17O_acc_SMOWSLAP_permeg = first(D17O_acc_SMOWSLAP_permeg)
    ) %>% 
  mutate(
  #calculate residual from accepted standard value minus mean measure value
    d18O_residual = (d18O_acc_SMOWSLAP - d18O_mean_SMOWSLAP),
    D17O_residual = (D17O_acc_SMOWSLAP_permeg - D17O_mean_SMOWSLAP_permeg)
    ) %>% 
  select(Std_ID, Std_type, d18O_acc_SMOWSLAP, d18O_mean_SMOWSLAP, d18O_sd_SMOWSLAP, d18O_residual, d17O_mean_SMOWSLAP, d17O_sd_SMOWSLAP, D17O_acc_SMOWSLAP_permeg, D17O_mean_SMOWSLAP_permeg, D17O_sd_SMOWSLAP_permeg, D17O_residual)

std_avg_measured %>%
  arrange(desc(d18O_mean_SMOWSLAP)) %>%  # descending numerical order
  kable()
Std_ID Std_type d18O_acc_SMOWSLAP d18O_mean_SMOWSLAP d18O_sd_SMOWSLAP d18O_residual d17O_mean_SMOWSLAP d17O_sd_SMOWSLAP D17O_acc_SMOWSLAP_permeg D17O_mean_SMOWSLAP_permeg D17O_sd_SMOWSLAP_permeg D17O_residual
Natalie Offline Tubes CarbonateStd NA 34.52 1.14 NA 17.84 0.63 NA -169.21 35.16 NA
IAEA-603 CarbonateStd NA 32.82 1.38 NA 16.99 0.72 NA -151.99 11.87 NA
IAEA-C1 CarbonateStd 28.53 32.60 2.77 -4.07 16.88 1.43 -72.17 -148.82 24.62 76.65
102-GC-AZ01 CarbonateStd 15.97 22.01 1.13 -6.04 11.41 0.60 -38.15 -115.56 13.02 77.41
Nick’s Samples CarbonateStd NA 14.24 0.01 NA 7.40 0.01 NA -51.20 8.15 NA
NBS-18 CarbonateStd 7.00 4.74 0.47 2.26 2.42 0.24 -18.56 -42.05 10.91 23.49
SMOW WaterStd 0.00 -0.27 0.40 0.27 -0.17 0.21 0.00 0.21 6.29 -0.21
USGS45 WaterStd -2.27 -2.63 0.41 0.36 -1.40 0.22 12.00 15.10 7.26 -3.10
USGS48 WaterStd -2.23 -2.69 0.09 0.46 -1.42 0.05 26.00 27.06 6.10 -1.06
House DI WaterStd NA -6.52 0.74 NA -3.46 0.38 NA 15.51 9.74 NA
USGS47 WaterStd -19.80 -19.62 0.10 -0.18 -10.40 0.05 40.00 34.99 5.55 5.01
USGS46 WaterStd -29.83 -29.15 0.39 -0.68 -15.50 0.20 20.00 18.80 9.11 1.20
USGS49 WaterStd -50.55 -50.13 0.19 -0.42 -26.79 0.10 NA 4.58 9.45 NA
SLAP WaterStd -55.50 -53.88 0.98 -1.62 -28.83 0.52 0.00 -1.05 14.13 1.05

5 All std thru time

5.1 d18O

5.1.1 All standards

p.d18O.IPLnum_all <- all.reactors_prelimcorr %>%
  filter(flag.major != TRUE) %>% 
  filter(flag.analysis != TRUE) %>%   
  ggplot() +
  #R31- 5394-5554
  geom_vline(xintercept = 5554, linetype = "dotted", color = "grey70", size = 0.5) +
  geom_vline(xintercept = 5394, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5474, y = -40, label = "R31", color = "black", size = 3.5) +
  #R29- 5099-5150
  geom_vline(xintercept = 5150, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5099, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5124, y = -40, label = "R29", angle = 90, color = "black", size = 3.5) +
    #R28- 4935-5098
  geom_vline(xintercept = 5098, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4935, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5016, y = -40, label = "R28", angle = 90, color = "black", size = 3.5) +
  #R27- 4776-4933
  geom_vline(xintercept = 4933, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4776, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4854, y = -40, label = "R27", angle = 90, color = "black", size = 3.5) +
  #R25- 4403-4441
  geom_vline(xintercept = 4441, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4403, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4422, y = -40, label = "R25", angle = 90, color = "black", size = 3.5) +
  #R24- 4258-4402
  geom_vline(xintercept = 4402, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4258, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4330, y = -45, label = "R24", angle = 90, color = "black", size = 3.5) +
  #R23- 4112-4256
  geom_vline(xintercept = 4256, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4112, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4184, y = -40, label = "R23", angle = 90, color = "black", size = 3.5) +
# change for each standard through time
  geom_smooth(
    aes(x = IPL.num, y = d18O_SMOW.SLAP, color = standard),
    method = "lm", # linear model
    se = T,    # don't show the confidence interval
    linetype = "dotted"
  ) +
  geom_point(
    aes(
      x = IPL.num, 
      y = d18O_SMOW.SLAP,
      label = standard,
      #shape = Type.2,
      fill = standard
      ),
      size = 3,
      colour= "black"
    ) +
labs(
  x = "IPL number", #latex2exp::TeX("$\\delta^{18}O\\,(\\permil,\\,VSMOW)$")
  y = "d18O (permil, VSMOW-SLAP)", #latex2exps::TeX("$\\delta^{2}H\\,(\\permil,\\,VSMOW)$")
  ) +
  theme_bw() +
   theme(
     axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1), 
     text = element_text(size = 14)
     )
#p.d18O.IPLnum_all
ggplotly(p.d18O.IPLnum_all) #, dynamicTicks = TRUE

5.1.2 Water

p.d18O.IPLnum_water <- all.reactors_prelimcorr %>%
    filter(
        Type.1 == "WaterStd" 
      ) %>% 
    filter(flag.major != TRUE) %>% 
    filter(flag.analysis != TRUE) %>%   
ggplot() +
  #R31- 5394-5554
  geom_vline(xintercept = 5554, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5394, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5474, y = -40, label = "R31", color = "black", size = 3.5) +
  #R29- 5099-5150
  geom_vline(xintercept = 5150, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5099, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5124, y = -40, label = "R29", angle = 90, color = "black", size = 3.5) +
    #R28- 4935-5098
  geom_vline(xintercept = 5098, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4935, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5016, y = -40, label = "R28", angle = 90, color = "black", size = 3.5) +
  #R27- 4776-4933
  geom_vline(xintercept = 4933, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4776, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4854, y = -40, label = "R27", angle = 90, color = "black", size = 3.5) +
  #R25- 4403-4441
  geom_vline(xintercept = 4441, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4403, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4422, y = -40, label = "R25", angle = 90, color = "black", size = 3.5) +
  #R24- 4258-4402
  geom_vline(xintercept = 4402, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4258, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4330, y = -45, label = "R24", angle = 90, color = "black", size = 3.5) +
  #R23- 4112-4256
  geom_vline(xintercept = 4256, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4112, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4184, y = -40, label = "R23", angle = 90, color = "black", size = 3.5) +
  geom_smooth(
  aes(x = IPL.num, y = d18O_SMOW.SLAP, color = standard),
  method = "lm", # linear model
  se = T,    # don't show the confidence interval
  linetype = "dotted"
    ) +
  geom_point(
    aes(
      x = IPL.num, 
      y = d18O_SMOW.SLAP,
      label = standard,
      #shape = Type.2,
      fill = standard
      ),
      size = 3,
      colour= "black"
    ) +
labs(
  x = "IPL number", #latex2exp::TeX("$\\delta^{18}O\\,(\\permil,\\,VSMOW)$")
  y = "d18O (permil, VSMOW-SLAP)", #latex2exp::TeX("$\\delta^{2}H\\,(\\permil,\\,VSMOW)$")
  ) +
  theme_bw() +
   theme(
     axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)
     )
#p.d18O.IPLnum_all
ggplotly(p.d18O.IPLnum_water)

5.1.3 Carbonate

p.d18O.IPLnum_carb <- all.reactors_prelimcorr %>%
    filter(
      Type.1 == "CarbonateStd" 
    ) %>% 
  ggplot() +
  #R31- 5394-5554
  geom_vline(xintercept = 5554, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5394, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5474, y = 18, label = "R31", color = "black", size = 3.5) +
  #R29- 5099-5150
  geom_vline(xintercept = 5150, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5099, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5124, y = 18, label = "R29", angle = 90, color = "black", size = 3.5) +
  #R28- 4935-5098
  geom_vline(xintercept = 5098, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4935, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5016, y = 20, label = "R28", angle = 90, color = "black", size = 3.5) +
  #R27- 4776-4933
  geom_vline(xintercept = 4933, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4776, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4854, y = 18, label = "R27", angle = 90, color = "black", size = 3.5) +
  geom_smooth(
    aes(x = IPL.num, y = d18O_SMOW.SLAP, color = standard),
    method = "lm", # linear model
    se = T,    # don't show the confidence interval
    linetype = "dotted"
    ) +
  geom_point(
    aes(
      x = IPL.num, 
      y = d18O_SMOW.SLAP,
      label = standard,
      #shape = Type.2,
      fill = standard
      ),
      size = 3,
      colour= "black"
    ) +
  labs(
    x = "IPL number", #latex2exp::TeX("$\\delta^{18}O\\,(\\permil,\\,VSMOW)$")
    y = "d18O (permil, VSMOW-SLAP)", #latex2exp::TeX("$\\delta^{2}H\\,(\\permil,\\,VSMOW)$")
    ) +
  theme_bw() +
   theme(
     axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)
     )
#p.d18O.IPLnum_carb
ggplotly(p.d18O.IPLnum_carb)

5.2 D17O

5.2.1 All standards

p.D17O.IPLnum_all <- all.reactors_prelimcorr %>%
  filter(flag.major != TRUE) %>% 
  filter(flag.analysis != TRUE) %>%   
  ggplot() +
  #R31- 5394-5554
  geom_vline(xintercept = 5554, linetype = "dotted", color = "grey70", size = 0.5) +
  geom_vline(xintercept = 5394, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5474, y = -40, label = "R31", color = "black", size = 3.5) +
  #R29- 5099-5150
  geom_vline(xintercept = 5150, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5099, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5124, y = -40, label = "R29", angle = 90, color = "black", size = 3.5) +
    #R28- 4935-5098
  geom_vline(xintercept = 5098, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4935, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5016, y = -40, label = "R28", angle = 90, color = "black", size = 3.5) +
  #R27- 4776-4933
  geom_vline(xintercept = 4933, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4776, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4854, y = -40, label = "R27", angle = 90, color = "black", size = 3.5) +
  #R25- 4403-4441
  geom_vline(xintercept = 4441, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4403, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4422, y = -40, label = "R25", angle = 90, color = "black", size = 3.5) +
  #R24- 4258-4402
  geom_vline(xintercept = 4402, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4258, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4330, y = -45, label = "R24", angle = 90, color = "black", size = 3.5) +
  #R23- 4112-4256
  geom_vline(xintercept = 4256, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4112, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4184, y = -40, label = "R23", angle = 90, color = "black", size = 3.5) +
# change for each standard through time
  geom_smooth(
    aes(x = IPL.num, y = D17O_SMOW.SLAP_permeg, color = standard),
    method = "lm", # linear model
    se = T,    # don't show the confidence interval
    linetype = "dotted"
  ) +
  geom_point(
    aes(
      x = IPL.num, 
      y = D17O_SMOW.SLAP_permeg,
      label = standard,
      #shape = Type.2,
      fill = standard
      ),
      size = 3,
      colour= "black"
    ) +
labs(
  x = "IPL number", #latex2exp::TeX("$\\delta^{18}O\\,(\\permil,\\,VSMOW)$")
  y = "D17O (permil, VSMOW-SLAP)", #latex2exps::TeX("$\\delta^{2}H\\,(\\permil,\\,VSMOW)$")
  ) +
  theme_bw() +
   theme(
     axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1), 
     text = element_text(size = 14)
     )
ggplotly(p.D17O.IPLnum_all)

5.2.2 Water

p.D17O.IPLnum_water <- all.reactors_prelimcorr %>%
    filter(
        Type.1 == "WaterStd" 
      ) %>% 
    filter(flag.major != TRUE) %>% 
    filter(flag.analysis != TRUE) %>%   
ggplot() +
  #R31- 5394-5554
  geom_vline(xintercept = 5554, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5394, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5474, y = -40, label = "R31", color = "black", size = 3.5) +
  #R29- 5099-5150
  geom_vline(xintercept = 5150, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5099, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5124, y = -40, label = "R29", angle = 90, color = "black", size = 3.5) +
    #R28- 4935-5098
  geom_vline(xintercept = 5098, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4935, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5016, y = -40, label = "R28", angle = 90, color = "black", size = 3.5) +
  #R27- 4776-4933
  geom_vline(xintercept = 4933, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4776, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4854, y = -40, label = "R27", angle = 90, color = "black", size = 3.5) +
  #R25- 4403-4441
  geom_vline(xintercept = 4441, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4403, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4422, y = -40, label = "R25", angle = 90, color = "black", size = 3.5) +
  #R24- 4258-4402
  geom_vline(xintercept = 4402, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4258, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4330, y = -45, label = "R24", angle = 90, color = "black", size = 3.5) +
  #R23- 4112-4256
  geom_vline(xintercept = 4256, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4112, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4184, y = -40, label = "R23", angle = 90, color = "black", size = 3.5) +
  geom_smooth(
  aes(x = IPL.num, y = D17O_SMOW.SLAP_permeg, color = standard),
  method = "lm", # linear model
  se = T,    # don't show the confidence interval
  linetype = "dotted"
    ) +
  geom_point(
    aes(
      x = IPL.num, 
      y = D17O_SMOW.SLAP_permeg,
      label = standard,
      #shape = Type.2,
      fill = standard
      ),
      size = 3,
      colour= "black"
    ) +
labs(
  x = "IPL number", #latex2exp::TeX("$\\delta^{18}O\\,(\\permil,\\,VSMOW)$")
  y = "D17O (permil, VSMOW-SLAP)", #latex2exp::TeX("$\\delta^{2}H\\,(\\permil,\\,VSMOW)$")
  ) +
  theme_bw() +
   theme(
     axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)
     )
ggplotly(p.D17O.IPLnum_water)

5.2.3 Carbonate

p.D17O.IPLnum_carb <- all.reactors_prelimcorr %>%
    filter(
      Type.1 == "CarbonateStd" 
    ) %>% 
  ggplot() +
  #R31- 5394-5554
  geom_vline(xintercept = 5554, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5394, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5474, y = -75, label = "R31", color = "black", size = 3.5) +
  #R29- 5099-5150
  geom_vline(xintercept = 5150, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 5099, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5124, y = -75, label = "R29", angle = 90, color = "black", size = 3.5) +
  #R28- 4935-5098
  geom_vline(xintercept = 5098, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4935, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 5016, y = -75, label = "R28", angle = 90, color = "black", size = 3.5) +
  #R27- 4776-4933
  geom_vline(xintercept = 4933, linetype = "dotted", color = "gray70", size = 0.5) +
  geom_vline(xintercept = 4776, linetype = "dotted", color = "gray70", size = 0.5) +
    annotate("text", x = 4854, y = -75, label = "R27", angle = 90, color = "black", size = 3.5) +
  geom_smooth(
    aes(x = IPL.num, y = D17O_SMOW.SLAP_permeg, color = standard),
    method = "lm", # linear model
    se = T,    # don't show the confidence interval
    linetype = "dotted"
    ) +
  geom_point(
    aes(
      x = IPL.num, 
      y = D17O_SMOW.SLAP_permeg,
      label = standard,
      #shape = Type.2,
      fill = standard
      ),
      size = 3,
      colour= "black"
    ) +
  labs(
    x = "IPL number", #latex2exp::TeX("$\\delta^{18}O\\,(\\permil,\\,VSMOW)$")
    y = "D17O (permil, VSMOW-SLAP)", #latex2exp::TeX("$\\delta^{2}H\\,(\\permil,\\,VSMOW)$")
    ) +
  theme_bw() +
   theme(
     axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=1)
     )
ggplotly(p.D17O.IPLnum_carb)

6 Measured vs Accepted Standard Values

Measured vs accepted standard values

# measured vs known dp18O standard values
p.d18O_meas.acc <- all.reactors_prelimcorr %>% 
    filter(
      Type.1 == "WaterStd" |
      Type.1 == "CarbonateStd"
        ) %>% 
  ggplot() +
  aes(x = d18O_acc_SMOWSLAP, y = d18O_SMOW.SLAP) +
  geom_point(size = 3, aes(fill = standard), pch = 23) +
  geom_smooth(method = lm, linetype = 2, color = "black", se = FALSE)+
  geom_abline(slope = 1) +
  labs(
    title = "measured vs known d18O standard values"
    ) +
  theme_bw()
ggplotly(p.d18O_meas.acc, dynamicTicks = T)
# measured vs known D17O standard values
p.D17O_meas.acc <- all.reactors_prelimcorr %>% 
    filter(
      Type.1 == "WaterStd" |
      Type.1 == "CarbonateStd"
        ) %>% 
  ggplot() +
  aes(x = D17O_acc_SMOWSLAP_permeg, y = D17O_SMOW.SLAP_permeg) +
  geom_point(size = 3, aes(fill = standard), pch = 23) +
    geom_abline(slope = 1) +
  geom_smooth(method = lm, linetype = 2, color = "black", se = FALSE)+
  labs(
    title = "measured vs known D17O standard values"
    ) +
  theme_bw()
ggplotly(p.D17O_meas.acc, dynamicTicks = T)

7 Example of Std Strategy Planning

## Strategy for standards to be run in R32 (starting April 2025)

p.D17O.d18O_R32 <- stds_carbonate %>%
  filter(
    standard == "IAEA-C1" |
    standard == "102-GC-AZ01" |
    standard == "GON06-OES"
       ) %>%
  ggplot() +
    aes(y = D17O_acc_SMOWSLAP_permeg, x = d18O_acc_SMOWSLAP) +
      geom_rect(aes(ymin = -222, ymax = -190, xmin = 32, xmax = 35), fill = "coral3", alpha = 0.2) +
      annotate("text", x = 33.5, y = -208, label = "Mono Carbs", angle = 90, color = "black", size = 3.5) +
    geom_point(size = 3, aes(fill = standard), pch = 23) +
    labs(
      title = "D17O vs d18O - R32 standards"
      ) +
    theme_bw()
ggplotly(p.D17O.d18O_R32, dynamicTicks = T)