From c5cd35eff07573b7c1ba6686bb46ce3e175047f8 Mon Sep 17 00:00:00 2001 From: vagudets Date: Tue, 10 Jun 2025 15:50:40 +0200 Subject: [PATCH] Read fcst sdate when saving metrics for subseasonal case; improve .get_times() --- modules/Crossval/Crossval_metrics.R | 1 + modules/Saving/R/get_times.R | 12 ++++++------ modules/Saving/R/save_metrics.R | 2 ++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/Crossval/Crossval_metrics.R b/modules/Crossval/Crossval_metrics.R index 4c48ad8e..af1a4425 100644 --- a/modules/Crossval/Crossval_metrics.R +++ b/modules/Crossval/Crossval_metrics.R @@ -9,6 +9,7 @@ source("modules/Crossval/R/tmp/Corr.R") source("modules/Crossval/R/tmp/Bias.R") source("modules/Crossval/R/tmp/SprErr.R") source("modules/Crossval/R/tmp/Eno.R") +source("modules/Crossval/R/tmp/CST_MergeDims.R") ## data_crossval is the result from function full_crossval_anomalies or similar. ## this is a list with the required elements: diff --git a/modules/Saving/R/get_times.R b/modules/Saving/R/get_times.R index 52d773c5..dd335386 100644 --- a/modules/Saving/R/get_times.R +++ b/modules/Saving/R/get_times.R @@ -12,13 +12,13 @@ # Generate time dimensions and the corresponding metadata. ## TODO: This addresses subseasonal case, but does not work well ## when there is missing data. - if (any(c("sweek", "sday") %in% names(dim(data_cube$attrs$Dates)))) { - central_day <- (dim(data_cube$attrs$Dates)[["sday"]] + 1) / 2 - central_week <- (dim(data_cube$attrs$Dates)[["sweek"]] + 1) / 2 + for (aux_dim in c("sweek", "sday")) { + if (aux_dim %in% names(dim(data_cube$attrs$Dates))) { + central_value <- (dim(data_cube$attrs$Dates)[[aux_dim]] + 1) / 2 data_cube$attrs$Dates <- Subset(data_cube$attrs$Dates, - along = c("sday", "sweek"), - indices = list(sday = central_day, - sweek = central_week)) + along = c(aux_dim), + indices = list(central_value)) + } } dates <- as.PCICt(ClimProjDiags::Subset(data_cube$attrs$Dates, 'syear', 1), cal = calendar) diff --git a/modules/Saving/R/save_metrics.R b/modules/Saving/R/save_metrics.R index 725135f9..26295b37 100644 --- a/modules/Saving/R/save_metrics.R +++ b/modules/Saving/R/save_metrics.R @@ -56,6 +56,8 @@ save_metrics <- function(recipe, } else { fcst.sdate <- paste0("1970", sprintf('%02d', init_month), '01') } + } else if (fcst.horizon == 'subseasonal') { + fcst.sdate <- as.character(recipe$Analysis$Time$sdate) } else { if (!is.null(recipe$Analysis$Time$fcst_year)) { fcst.sdate <- paste0(recipe$Analysis$Time$fcst_year, -- GitLab