From 3c33fa7f9cfbe39c269932d03d759fdf02f039e7 Mon Sep 17 00:00:00 2001 From: Victoria Agudetse Roures Date: Fri, 10 Nov 2023 15:39:45 +0100 Subject: [PATCH] Fix variable duplication and incorrect reference structure in atomic recipes --- tools/divide_recipe.R | 56 +++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/tools/divide_recipe.R b/tools/divide_recipe.R index cf9cecd8..b22274cc 100644 --- a/tools/divide_recipe.R +++ b/tools/divide_recipe.R @@ -5,8 +5,8 @@ divide_recipe <- function(recipe) { info(recipe$Run$logger, "Splitting recipe in single verifications.") beta_recipe <- list(Description = append(recipe$Description, list(Origin = paste("Atomic recipe,", - "split from:", - recipe$name))), + "split from:", + recipe$name))), Analysis = list(Horizon = recipe$Analysis$Horizon, Variables = NULL, Datasets = NULL, @@ -14,18 +14,25 @@ divide_recipe <- function(recipe) { Region = NULL, Regrid = recipe$Analysis$Regrid, Workflow = recipe$Analysis$Workflow, - ncores = recipe$Analysis$ncores, - remove_NAs = recipe$Analysis$remove_NAs, + ncores = recipe$Analysis$ncores, + remove_NAs = recipe$Analysis$remove_NAs, Output_format = - recipe$Analysis$Output_format), - Run = recipe$Run[c("Loglevel", "output_dir", "Terminal", - "code_dir", "logfile", "filesystem")]) + recipe$Analysis$Output_format), + Run = recipe$Run[c("Loglevel", "output_dir", "Terminal", + "code_dir", "logfile", "filesystem")]) - # duplicate recipe by independent variables: + # duplicate recipe by independent variables:รง + # If a single variable is not given inside a list, rebuild structure + if (any(c("name", "freq", "units") %in% names(recipe$Analysis$Variables))) { + variables <- recipe$Analysis$Variables + recipe$Analysis$Variables <- NULL + recipe$Analysis$Variables[[1]] <- variables + } all_recipes <- rep(list(beta_recipe), length(recipe$Analysis$Variables)) for (var in 1:length(recipe$Analysis$Variables)) { all_recipes[[var]]$Analysis$Variables <- recipe$Analysis$Variables[[var]] } + # for (dep in verifications$dependent) { # all_recipes[[i]]$Analysis$Variables <- dep # i = i + 1 @@ -35,7 +42,7 @@ divide_recipe <- function(recipe) { # duplicate recipe by Datasets: # check Systems - + # If a single system is not given inside a list, rebuild structure if (any(c("name", "member") %in% names(recipe$Analysis$Datasets$System))) { system <- recipe$Analysis$Datasets$System recipe$Analysis$Datasets$System <- NULL @@ -66,7 +73,14 @@ divide_recipe <- function(recipe) { all_recipes <- recipes rm(list = 'recipes') } - # check References + # Check references + # If a single reference is not given inside a list, rebuild structure + if (c("name") %in% names(recipe$Analysis$Datasets$Reference)) { + reference <- recipe$Analysis$Datasets$Reference + recipe$Analysis$Datasets$Reference <- NULL + recipe$Analysis$Datasets$Reference[[1]] <- reference + } + for (ref in 1:length(recipe$Analysis$Datasets$Reference)) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Datasets$Reference <- @@ -79,6 +93,8 @@ divide_recipe <- function(recipe) { } } all_recipes <- recipes + rm(list = 'recipes') + # Duplicate recipe by Region recipes <- list() if (any(c("latmin", "latmax", "lonmin", "lonmax") %in% @@ -105,12 +121,12 @@ divide_recipe <- function(recipe) { for (sdate in 1:length(recipe$Analysis$Time$sdate)) { for (reci in 1:length(all_recipes)) { all_recipes[[reci]]$Analysis$Time <- - list(sdate = recipe$Analysis$Time$sdate[[sdate]], - fcst_year = recipe$Analysis$Time$fcst_year, - hcst_start = recipe$Analysis$Time$hcst_start, - hcst_end = recipe$Analysis$Time$hcst_end, - ftime_min = recipe$Analysis$Time$ftime_min, - ftime_max = recipe$Analysis$Time$ftime_max) + list(sdate = recipe$Analysis$Time$sdate[[sdate]], + fcst_year = recipe$Analysis$Time$fcst_year, + hcst_start = recipe$Analysis$Time$hcst_start, + hcst_end = recipe$Analysis$Time$hcst_end, + ftime_min = recipe$Analysis$Time$ftime_min, + ftime_max = recipe$Analysis$Time$ftime_max) } if (sdate == 1) { recipes <- all_recipes @@ -139,15 +155,15 @@ divide_recipe <- function(recipe) { } write_yaml(all_recipes[[reci]], paste0(recipe$Run$output_dir, "/logs/recipes/atomic_recipe_", - recipe_number, ".yml")) + recipe_number, ".yml")) } info(recipe$Run$logger, paste("The main recipe has been divided into", length(all_recipes), - "atomic recipes.")) + "atomic recipes.")) text <- paste0("Check output directory ", recipe$Run$output_dir, - "/logs/recipes/ to see all the individual atomic recipes.") + "/logs/recipes/ to see all the individual atomic recipes.") info(recipe$Run$logger, text) ## TODO: Change returns? return(list(n_atomic_recipes = length(all_recipes), - outdir = recipe$Run$output_dir)) + outdir = recipe$Run$output_dir)) } -- GitLab