library(ggplot2)
library(svglite)
library(zoo)
library(dplyr)

inflect <- function(x, threshold = 1){
  up   <- sapply(1:threshold, function(n) c(x[-(seq(n))], rep(NA, n)))
  down <-  sapply(-1:-threshold, function(n) c(rep(NA,abs(n)), x[-seq(length(x), length(x) - abs(n) + 1)]))
  a    <- cbind(x,up,down)
  list(minima = which(apply(a, 1, min) == a[,1]), maxima = which(apply(a, 1, max) == a[,1]))
}

drawMinimums <- TRUE
drawSmoothedCurve <- FALSE
if (drawMinimums) {
  filenames <- c('160K_uh8.5_2', '170K_uh8.5', '180K_uh8.5', '190K_uh8.5', '190K_uh7.5', '200K_uh8.5')
} else {
  filenames <- c('160K_uh7.5', '160K_uh8.5_3', '170K_uh7.5', '180K_uh7.5', '190K_uh7.5', '200K_uh8.5', '160K_uh8.5_2', '160K_uh8.5', '170K_uh8.5', '180K_uh8.5', '190K_uh8.5')
}
dependanceOnTFilenames <- c('160K_uh8.5_2', '170K_uh8.5', '180K_uh8.5',
                            #'190K_uh8.5',
                            '190K_uh7.5', '200K_uh8.5')

for (filename in filenames) {
  temp <- gsub("(\\d+)K_.*", "\\1", filename)
  uh <- gsub(".*_uh([^_]+).*", "\\1", filename)
  table <- read.table(paste0('dades/', filename, '.txt'), sep="\t", dec=',', header=TRUE)
  table$Smooth_IA <- rollmean(table$IA, k = 60, align = "center", fill = NA)
  bottoms <- inflect(table$Smooth_IA, threshold = 2)$minima
  #print(bquote("T =" ~ .(temp) ~ "K;" ~ "U"[h]~"=" ~ .(uh) ~ "V"))
  #print(table$U1[bottoms])
  pplot <- ggplot(table, aes(x = U1, y = Smooth_IA))
  if (drawMinimums) {
    min_vals <- read.table(paste0('dades/', filename, '_minims.txt'), sep="\t", dec=",", header=TRUE)
    if (drawSmoothedCurve) {
      pplot <- pplot +
        geom_line(aes(x = U1, y = IA), colour = "#FCC8C5") +
        geom_line(colour = "#F8766D") +
        geom_vline(data = min_vals, aes(xintercept = U1), linetype = "dashed", color="#FAA49E")
    } else {
      pplot <- pplot +
        geom_line(aes(x = U1, y = IA), colour = "#F8766D") +
        geom_vline(data = min_vals, aes(xintercept = U1), linetype = "dashed", color="#FAA49E")
    }
  } else {
    pplot <- pplot +
      geom_line(aes(x = U1, y = IA), colour = "#F8766D")
  }
  pplot <- pplot +
    xlab(bquote(U["1"] ~ "(V)")) +
    ylab(bquote(I[A] ~ "(nA)")) +
    ggtitle(bquote("T =" ~ .(temp) ~ "ºC;" ~ "U"[h]~"=" ~ .(uh) ~ "V")) +
    theme(legend.position = "none", text = element_text(family = "Montserrat"))
  outfilenamesuffix <- ""
  if (drawMinimums) {
    outfilenamesuffix <- "_minims"
  }
  ggsave(paste0('output/', filename, outfilenamesuffix, '.svg'), pplot, width = 6.6, height = 3.75, bg = "transparent")
}

abs_data <- NA
for (filename in dependanceOnTFilenames) {
  temp <- gsub("(\\d+)K_.*", "\\1", filename)
  min_vals <- read.table(paste0('dades/', filename, '_minims.txt'), sep="\t", dec=",", header=TRUE)
  ur_diffs <- diff(min_vals$U1)
  ns <- min_vals$n[-1]
  ur_diffs_data <- data.frame(n = ns, UR_diff = ur_diffs)
  ur_diffs_data$T <- temp
  if (!is.data.frame(abs_data)) {
    abs_data <- ur_diffs_data
  } else {
    abs_data <- rbind(abs_data, ur_diffs_data)
  }
  print(paste0('T=', temp))
  print(paste0('Mean: ', mean(ur_diffs)))
  print(paste0('Unc. mean: ', sd(ur_diffs)/sqrt(length(ur_diffs))))
}

urplot <- ggplot(data = abs_data, aes(x = n, y = UR_diff, color = T)) +
  geom_line() +
  scale_x_continuous(breaks = function(x) unique(floor(pretty(3:11)))) +
  xlab("n") +
  ylab(bquote(U[R] ~ "(V)")) +
  ylim(4, 5.4) +
  labs(color = "T (ºC)") +
  theme(text = element_text(family = "Montserrat"))
ggsave('output/ur_for_different_ts.svg', urplot, width = 6.6, height = 3.75, bg = "transparent")

boxp1plot <- ggplot(data = abs_data, aes(x = T, y = UR_diff, color = T)) +
  geom_boxplot() +
  xlab("T (ºC)") +
  ylab(bquote(U[R] ~ "(V)")) +
  #ylim(4, 5.4) +
  theme(legend.position = "none", text = element_text(family = "Montserrat"))
ggsave('output/mean_ur_vs_t_boxplot.svg', boxp1plot, width = 6.6, height = 3.75, bg = "transparent")

abs_data.summary <- abs_data %>%
  group_by(T) %>%
  summarise(
    sd = sd(UR_diff, na.rm = TRUE)/sqrt(n()),
    UR_diff = mean(UR_diff)
  )
boxp2plot <- ggplot(data = abs_data, aes(x = T, y = UR_diff, color = T)) +
  geom_jitter(
    position = position_jitter(0.2), color = "darkgray"
  ) +
  geom_point(size = 2.5, data = abs_data.summary) +
  geom_errorbar(
    aes(ymin = UR_diff - sd, ymax = UR_diff + sd),
    width = 0.15,
    data = abs_data.summary
  ) +
  xlab("T (ºC)") +
  ylab(bquote(U[R] ~ "(V)")) +
  #ylim(4, 5.4) +
  theme(legend.position = "none", text = element_text(family = "Montserrat"))
ggsave('output/mean_ur_vs_t_boxplot2.svg', boxp2plot, width = 6.6, height = 3.75, bg = "transparent")
