From 3db02327f93079b0899cb9dd8142d2d8ef723deb Mon Sep 17 00:00:00 2001 From: vagudets Date: Wed, 8 May 2024 17:11:07 +0200 Subject: [PATCH 1/2] Fix metadata of 'region' variable when saving a single region --- example_scripts/execute_NAO.R | 13 ++++--------- modules/Indices/R/compute_nao.R | 18 ++++++++++-------- modules/Indices/R/compute_nino.R | 18 ++++++++++-------- modules/Saving/R/save_metrics.R | 5 ++--- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/example_scripts/execute_NAO.R b/example_scripts/execute_NAO.R index 3ec3586f..a33dfd3d 100644 --- a/example_scripts/execute_NAO.R +++ b/example_scripts/execute_NAO.R @@ -15,16 +15,11 @@ source("modules/Anomalies/Anomalies.R") recipe_file <- "recipes/examples/NAO_recipe.yml" recipe <- prepare_outputs(recipe_file) -#for (smonth in 1:12) { - data <- load_datasets(recipe) - gc() - data <- compute_anomalies(recipe, data) -# data <- readRDS("../Test_NAOmodule.RDS") +data <- Loading(recipe) +data <- Anomalies(recipe, data) source("modules/Indices/Indices.R") - nao_s2dv <- Indices(data = data, recipe = recipe) +nao_s2dv <- Indices(data = data, recipe = recipe) source("modules/Skill/Skill.R") - # todo parameter agg to get it from the nao_s2dv? - skill_metrics <- compute_skill_metrics(recipe = recipe, data = nao_s2dv, - agg = 'region') +skill_metrics <- Skill(recipe = recipe, data = nao_s2dv, agg = 'region') diff --git a/modules/Indices/R/compute_nao.R b/modules/Indices/R/compute_nao.R index bdf2bb85..75b3fb51 100644 --- a/modules/Indices/R/compute_nao.R +++ b/modules/Indices/R/compute_nao.R @@ -96,24 +96,26 @@ compute_nao <- function(data, recipe, obsproj, plot_ts, plot_sp, data = nao$exp, varName = "nao", metadata = list( - region = list(name = "NAO region", - lats_range = paste0(range(lats)), - lons_range = paste0(range(lons))), + region = list(name = "region", + long_name = "NAO region", + lats_range = paste(lats[1], lats[2], sep = ", "), + lons_range = paste(lons[1], lons[1], sep = ", ")), time = data$hcst$attrs$Variable$metadata$time, nao = list(units = 'adim', - longname = 'North Atlantic Oscillation')), + long_name = 'North Atlantic Oscillation')), Dates = hcst_dates, Dataset = recipe$Analysis$Datasets$System$name), obs = s2dv_cube( data = nao$obs, varName = "nao", metadata = list( - region = list(name = "NAO region", - lats_range = paste0(range(lats)), - lons_range = paste0(range(lons))), + region = list(name = "region", + long_name = "NAO region", + lats_range = paste(lats[1], lats[2], sep = ", "), + lons_range = paste(lons[1], lons[1], sep = ", ")), time = data$obs$attrs$Variable$metadata$time, nao = list(units = 'adim', - longname = 'North Atlantic Oscillation')), + long_name = 'North Atlantic Oscillation')), Dates = data$obs$attrs$Dates, Dataset = recipe$Analysis$Datasets$Reference$name)) if (recipe$Analysis$Workflow$Indices$NAO$save == 'all') { diff --git a/modules/Indices/R/compute_nino.R b/modules/Indices/R/compute_nino.R index b47d9ee2..fd5e7acb 100644 --- a/modules/Indices/R/compute_nino.R +++ b/modules/Indices/R/compute_nino.R @@ -82,24 +82,26 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, data = nino_hcst, varName = nino_name, metadata = list( - region = list(name = paste("Nino", region_name, "region"), - lats_range = paste(region[3:4]), - lons_range = paste(region[1:2])), + region = list(name = "region", + long_name = paste("Nino", region_name, "region"), + lats_range = paste(region[3], region[4], sep = ", "), + lons_range = paste(region[1], region[1], sep = ", ")), time = data$hcst$attrs$Variable$metadata$time, nino = list(units = var_units, - longname = paste("El Niño", region_name, "Index"))), + long_name = paste("El Niño", region_name, "Index"))), Dates = hcst_dates, Dataset = recipe$Analysis$Datasets$System$name), obs = s2dv_cube( data = nino_obs, varName = nino_name, metadata = list( - region = list(name = paste("Nino", region_name, "region"), - lats_range = paste(region[3:4]), - lons_range = paste(region[1:2])), + region = list(name = "region", + long_name = paste("Nino", region_name, "region"), + lats_range = paste(region[3], region[4], sep = ", "), + lons_range = paste(region[1], region[1], sep = ", ")), time = data$obs$attrs$Variable$metadata$time, nino = list(units = var_units, - longname = paste("El Niño", region_name, "Index"))), + long_name = paste("El Niño", region_name, "Index"))), Dates = data$obs$attrs$Dates, Dataset = recipe$Analysis$Datasets$Reference$name)) diff --git a/modules/Saving/R/save_metrics.R b/modules/Saving/R/save_metrics.R index 8269634f..0adc2d8d 100644 --- a/modules/Saving/R/save_metrics.R +++ b/modules/Saving/R/save_metrics.R @@ -152,9 +152,8 @@ save_metrics <- function(recipe, ArrayToNc(append(country, time, subset_metric), outfile) } else if (tolower(agg) == "region") { region <- array(1:dim(metrics[[1]])['region'], c(dim(metrics[[1]])['region'])) - # TODO: check metadata when more than 1 region is store in the data array - metadata <- list(region = list(long_name = data_cube$attrs$Variable$metadata$region$name)) - attr(region, 'variables') <- metadata + ## TODO: check metadata when more than 1 region is store in the data array + attr(region, 'variables') <- data_cube$attrs$Variable$metadata$region$name vars <- list(region, time) vars <- c(vars, subset_metric) ArrayToNc(vars, outfile) -- GitLab From 1b61d2dcbaa95866c0728c0a949264dbf0408516 Mon Sep 17 00:00:00 2001 From: vagudets Date: Thu, 9 May 2024 10:50:42 +0200 Subject: [PATCH 2/2] Fix region metadata --- modules/Indices/R/compute_nao.R | 8 ++++---- modules/Indices/R/compute_nino.R | 8 ++++---- modules/Saving/R/save_metrics.R | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/Indices/R/compute_nao.R b/modules/Indices/R/compute_nao.R index 75b3fb51..b109fdae 100644 --- a/modules/Indices/R/compute_nao.R +++ b/modules/Indices/R/compute_nao.R @@ -98,8 +98,8 @@ compute_nao <- function(data, recipe, obsproj, plot_ts, plot_sp, metadata = list( region = list(name = "region", long_name = "NAO region", - lats_range = paste(lats[1], lats[2], sep = ", "), - lons_range = paste(lons[1], lons[1], sep = ", ")), + lats_range = paste(range(lats), collapse = ", "), + lons_range = paste(range(lons), collapse = ", ")), time = data$hcst$attrs$Variable$metadata$time, nao = list(units = 'adim', long_name = 'North Atlantic Oscillation')), @@ -111,8 +111,8 @@ compute_nao <- function(data, recipe, obsproj, plot_ts, plot_sp, metadata = list( region = list(name = "region", long_name = "NAO region", - lats_range = paste(lats[1], lats[2], sep = ", "), - lons_range = paste(lons[1], lons[1], sep = ", ")), + lats_range = paste(range(lats), collapse = ", "), + lons_range = paste(range(lons), collapse = ", ")), time = data$obs$attrs$Variable$metadata$time, nao = list(units = 'adim', long_name = 'North Atlantic Oscillation')), diff --git a/modules/Indices/R/compute_nino.R b/modules/Indices/R/compute_nino.R index fd5e7acb..4ecbea5b 100644 --- a/modules/Indices/R/compute_nino.R +++ b/modules/Indices/R/compute_nino.R @@ -84,8 +84,8 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, metadata = list( region = list(name = "region", long_name = paste("Nino", region_name, "region"), - lats_range = paste(region[3], region[4], sep = ", "), - lons_range = paste(region[1], region[1], sep = ", ")), + lats_range = paste(region[3], region[4], collapse = ", "), + lons_range = paste(region[1], region[1], collapse = ", ")), time = data$hcst$attrs$Variable$metadata$time, nino = list(units = var_units, long_name = paste("El Niño", region_name, "Index"))), @@ -97,8 +97,8 @@ compute_nino <- function(data, recipe, region, standardised = TRUE, metadata = list( region = list(name = "region", long_name = paste("Nino", region_name, "region"), - lats_range = paste(region[3], region[4], sep = ", "), - lons_range = paste(region[1], region[1], sep = ", ")), + lats_range = paste(region[3], region[4], collapse = ", "), + lons_range = paste(region[1], region[1], collapse = ", ")), time = data$obs$attrs$Variable$metadata$time, nino = list(units = var_units, long_name = paste("El Niño", region_name, "Index"))), diff --git a/modules/Saving/R/save_metrics.R b/modules/Saving/R/save_metrics.R index 0adc2d8d..800004d7 100644 --- a/modules/Saving/R/save_metrics.R +++ b/modules/Saving/R/save_metrics.R @@ -153,7 +153,7 @@ save_metrics <- function(recipe, } else if (tolower(agg) == "region") { region <- array(1:dim(metrics[[1]])['region'], c(dim(metrics[[1]])['region'])) ## TODO: check metadata when more than 1 region is store in the data array - attr(region, 'variables') <- data_cube$attrs$Variable$metadata$region$name + attr(region, 'variables') <- data_cube$attrs$Variable$metadata['region'] vars <- list(region, time) vars <- c(vars, subset_metric) ArrayToNc(vars, outfile) -- GitLab