https://doi.org/10.5281/zenodo.15690037
RUN_flags.R
# This is the driver script to calculate the quality control flags on the GLORIA Rrs spectra
# Refer to README.md for a description of the method.
#Loading Required Packages
require(dplyr)
require(reshape2)
require(data.table)
require(tidyr)
require(data.table)
require(curl)
require(polyreg)
require(Metrics)
require(openxlsx)
#Loading users function
source('Scripts//baseline_shift.R')
source('Scripts//Oxygen_peak_calculation.R')
source('Scripts//UV_Slope.R')
source("Scripts/QWIP.R")
#Read the Gloria Rrs file in Excel format
gloria_rrs = read.xlsx('Data/rrs.xlsx')
# Use GLORIA Nomenclature
names(gloria_rrs)= c('GLORIA_ID', paste('Rrs_', c(400:900), sep = ''))
for(i in 2:ncol(gloria_rrs)) {
gloria_rrs[,i] = as.numeric(gloria_rrs[,i])
}
#Basline Calculation
negatives = negative_slopes(gloria_rrs = gloria_rrs)
baseline = baseline_shift(gloria_rrs = gloria_rrs)
baseline_shifts = merge_baseline_negative(GLORIA_ID = negatives$GLORIA_ID,
baseline = baseline$baseline,
negative = negatives$negative_slopes)
#Oxygen Peak Calculation
oxygen_peak <- data.frame(GLORIA_ID=gloria_rrs$GLORIA_ID,
Oxy_peak_height = apply(select(gloria_rrs,
paste("Rrs_",seq(400,900),sep="")),1,
OAI_Dalin,wave_min=400,
wave_max=900,wave_int=1)) %>% flag_creation()
#Noise Red Edge Calculation
NOISE_RED_EDGE = noise_red_edge(gloria_rrs = gloria_rrs)
#Counting number of flags for each method
filter(baseline_shifts, Baseline_shift == 1) %>% nrow()
filter(oxygen_peak, flag == 1) %>% nrow()
filter(NOISE_RED_EDGE, flag == 1) %>% nrow()
## Merged Results
final_results = data.frame(GLORIA_ID = baseline_shifts$GLORIA_ID,
Baseline_shift = baseline_shifts$Baseline_shift,
Oxygen_signal = oxygen_peak$flag,
Noisy_red = NOISE_RED_EDGE$flag)
# Check Final Results
filter(final_results, Baseline_shift == 1) %>% nrow()
filter(final_results, Oxygen_signal == 1) %>% nrow()
filter(final_results, Noisy_red == 1) %>% nrow()
final_results$Suspicious = 0
for(i in 1:nrow(final_results)) {
ID = final_results$GLORIA_ID[i]
if(file.exists(paste('Data/Suspicious/', ID, '.jpeg', sep = '')) == T) {
final_results$Suspicious[i] = 1
}
}
final_results$Noisy_red[is.na(final_results$Noisy_red)] = 0
# Run QWIP
QWIP_Res = QWIP(data = gloria_rrs)
# Save all results
final_results$QWIP = abs(estacoes$QWIP)
final_results$QWIP[final_results$QWIP > 0.2] = 1
final_results$QWIP[final_results$QWIP <= 0.2] = 0
write.csv(file = 'Data/flags.csv', x = final_results, na = 'NaN', row.names = F)