
################################
### SEASONAL MULTIMODEL TEST ###
################################

# Load modules
source("modules/Loading/Loading.R")
source("modules/Units/Units.R")
source("modules/Calibration/Calibration.R")
source("modules/Anomalies/Anomalies.R")
source("modules/Skill/Skill.R")
source("modules/Saving/Saving.R")
source("modules/Visualization/Visualization.R")
source("modules/Multimodel/Multimodel.R")

horizon <- 'decadal' # seasonal

## Cleaning output directory and splitting recipe
sunset_outputs_folder <- '/esarchive/scratch/cdelgado/sunset_outputs/'
recipe_file <- paste0("recipes/recipe_multimodel_",horizon,".yml")
# system(paste0('rm -r ',sunset_outputs_folder,'recipe_multimodel_',horizon,'_*'))
system(paste0('Rscript split.R ',recipe_file))

## Finding atomic recipes
atomic_recipe_folder <- paste0(sunset_outputs_folder,list.files(sunset_outputs_folder),'/logs/recipes/')
atomic_recipe_folder <- atomic_recipe_folder[grepl(horizon,atomic_recipe_folder)]
atomic_recipe_folder <- atomic_recipe_folder[length(atomic_recipe_folder)]
atomic_recipe_files <- list.files(atomic_recipe_folder)
atomic_recipe_files <- atomic_recipe_files[-length(atomic_recipe_files)]
atomic_recipe_files <- paste0(atomic_recipe_folder,atomic_recipe_files)

## Splitting recipes to run multimodel after individual models
atomic_recipes_models <- c()
atomic_recipes_multimodel <- c()
for (r in atomic_recipe_files){
  if (grepl('sys-Multimodel',r)){
    atomic_recipes_multimodel <- c(atomic_recipes_multimodel,r)
  } else {
    atomic_recipes_models <- c(atomic_recipes_models,r)
  }
}

## Running atomic recipes
for (recipe_file in c(atomic_recipes_models,atomic_recipes_multimodel)){
  
  # Read recipe
  recipe <- read_atomic_recipe(recipe_file)
  
  if (recipe$Analysis$Datasets$System$name == 'Multimodel'){
    
    # Load datasets and create multimodel
    mm <- Multimodel(recipe)
    data <- mm$data
    probabilities <- mm$prob
    
  } else {
    
    # Load datasets
    data <- Loading(recipe)
    # Change units
    data <- Units(recipe, data)
    # Compute anomalies
    data <- Anomalies(recipe, data)
    # Compute percentiles and probability bins
    probabilities <- Probabilities(recipe, data)
    
  }
  
  # Compute skill metrics 
  skill_metrics <- Skill(recipe, data)
  # Plot data
  Visualization(recipe, data, skill_metrics, probabilities, significance = T)
  
}
